Шифрование и хеширование данных
И шифрование с симметричным ключом и схемы шифрования с асимметричным ключом могут использоваться для шифрования данных. Асимметричное шифрование обычно используется для отправки данных через доверительные границы, такие как одно лицо, отправляющее другому лицу зашифрованная электронная почта. Это также часто используется для отправки симметричного сеансового ключа через небезопасный канал передачи так, чтобы симметричное шифрование могло тогда использоваться для будущей коммуникации. Симметричное шифрование обычно используется для данных в покое (на Вашем жестком диске, например) и как сеансовый ключ во многих зашифрованных сетевых схемах.
OS X и iOS обеспечивают много различных APIs для шифрования и дешифрования. В этой главе описываются рекомендуемый APIs.
Технологии шифрования, Характерные для iOS и OS X
OS X и iOS обеспечивают много технологий шифрования. Из них три APIs доступен и на iOS и на OS X:
Keychain Services API — обеспечивает безопасное хранение для паролей, ключей, и т.д.
Криптографическое сообщение Синтаксис — обеспечивает (непередающее потоком) симметричное и асимметричное шифрование и дешифрование
Сертификат, Ключ и Trust Services — обеспечивают криптографические услуги по поддержке и доверительную проверку
Следующие разделы описывают эти технологии.
Keychain Services
Keychain Services API обычно используется для хранения паролей, ключей, сертификатов и других секретов в специальном зашифрованном файле, вызвала цепочку для ключей. Необходимо всегда использовать цепочку для ключей для хранения паролей и других коротких частей данных (таких как cookie), которые используются для предоставления доступа для обеспечения веб-сайтов, поскольку иначе эти данные могли бы поставиться под угрозу, если посторонний человек получает доступ к компьютеру пользователя, мобильному устройству или резервному копированию этого.
Несмотря на то, что это главным образом используется для хранения паролей и ключей, цепочка для ключей может также сохранить мелкие суммы произвольных данных. Цепочка для ключей описана далее в Управляющих Ключах, Сертификатах и Паролях.
OS X также включает утилиту, позволяющую пользователям хранить и считывать данные в цепочке для ключей, названной Доступом Цепочки для ключей. Для получения дополнительной информации посмотрите Доступ Цепочки для ключей в Обзоре безопасности.
Cryptographic Message Syntax Services
Интерфейс программирования Cryptographic Message Syntax Services позволяет Вам шифровать или добавлять цифровую подпись к сообщениям S/MIME. (S/MIME является стандартом для шифрования и подписания сообщений, обычно используемых с электронной почтой.) Это - хороший API для использования при подписании или шифровании данных для приложений промежуточной буферизации, таких как электронная почта. Посмотрите Ссылку Cryptographic Message Syntax Services для подробных данных.
Сертификат, ключ и доверительные службы
Сертификат, Ключ и Trust Services API обеспечивают доверительную проверку и функции поддержки для криптографии. Эти функции описаны далее в Управляющих Ключах, Сертификатах и Паролях.
В iOS этот API также обеспечивает основные возможности шифрования, как описано в Шифровании в iOS.
Общий Crypto
В OS X v10.5 и позже и iOS 5.0 и позже, Общий Crypto предоставляет низкоуровневую C поддержку для шифрования и дешифрования. Общий Crypto не является столь прямым, как Безопасность Преобразовывает, но обеспечивает более широкий диапазон функций, включая дополнительные схемы хеширования, режимы шифра, и т.д.
Для получения дополнительной информации см. страницу руководства для CommonCrypto
.
Технологии шифрования, определенные для OS X
В дополнение к Keychain Services и Cryptographic Message Syntax Services, OS X обеспечивает четыре дополнительных APIs для выполнения шифрования:
Безопасность Преобразовывает API — Базовый уровень основы API, предоставляющий поддержку для подписания и проверки, криптографии с симметричными шифрами, и кодирования Base64 и декодирования
Общий Crypto — C-уровень API, который может выполнить большую часть симметричного шифрования и задач дешифрования
CDSA/CSSM — устаревший API, который должен использоваться только для выполнения задач, не поддерживаемых другими двумя APIs, таких как асимметричное шифрование
Этот APIs описан в следующих разделах.
Безопасность преобразовывает
В OS X v10.7 и позже, Безопасность Преобразовывает API, предоставляет эффективную и простую в использовании поддержку для выполнения криптографических задач. Преобразования безопасности являются рекомендуемым способом выполнить симметричное шифрование и дешифрование, асимметричное подписание и проверку, и кодирование Base64 и декодирование в OS X.
На основе понятия программирования потока данных Безопасность Преобразовывает API, позволяет Вам создать графики из трансформаций, питающихся в друг друга, прозрачно с помощью Центральной Отгрузки для планирования получающейся работы эффективно через многократный CPUs. Как CFDataRef
(или NSData
) объекты проходят через граф объектов, обратные вызовы в каждом отдельном преобразовании воздействуют на те данные, затем передают его на вывод преобразования, который может быть подключен к вводу других, преобразовывают объект, и т.д.
Преобразование API также обеспечивает средство чтения файлов, преобразовывает (на основе CFReadStreamRef
или NSInputStream
объекты), который может быть объединен в цепочку к вводу других преобразований.
Используя встроенные преобразования, Безопасность Преобразовывает API, позволяет Вам читать файлы, выполнять симметричное шифрование и дешифрование, выполнять асимметричное подписание и проверку, и выполнять кодирование Base64. Безопасность Преобразовывает API, также предоставляет поддержку для создания пользовательских преобразований, выполняющих другие операции на данных. Например, Вы могли бы создать преобразование, что байт подкачивает данные до шифрования его или преобразования, кодирующего получающиеся зашифрованные данные для транспорта.
Для получения дополнительной информации читавшая Безопасность Преобразовывает Руководство по программированию, и Безопасность Преобразовывает Ссылку.
CDSA/CSSM
CDSA является архитектурой безопасности С открытым исходным кодом, принятой как технический стандарт Open Group. Apple разработал свою собственную реализацию С открытым исходным кодом CDSA, доступного как часть Дарвина на сайте Apple С открытым исходным кодом. Этот API обеспечивает огромное количество служб безопасности, включая тонкозернистые права доступа, аутентификацию идентификационных данных пользователей, шифрования и безопасного хранения данных.
Несмотря на то, что CDSA имеет свой собственный стандартный интерфейс программирования, это сложно и не следует за стандартным Apple, программируя соглашения. Поэтому API CDSA осуждается с версии 10.7 OS X (Лев) и не доступен в iOS. К счастью, OS X и iOS включают их собственную высокоуровневую безопасность APIs что краткий обзор далеко большая часть той сложности.
Где возможно, необходимо использовать одно из следующего вместо того, чтобы использовать CDSA непосредственно:
Objective C Безопасности API для аутентификации (в OS X). Посмотрите Objective C Безопасности API в Обзоре безопасности для подробных данных.
Безопасность Преобразовывает API для симметричного шифрования и дешифрования, асимметричного подписания и проверки и других поддерживаемых задач в OS X v10.7 и позже. Посмотрите, что Безопасность Преобразовывает для подробных данных.
Сертификат, Ключ и Trust Services API для общего шифрования, управления ключами и других задач. Посмотрите Шифрование в iOS для подробных данных.
Если этот APIs не удовлетворяет Ваши потребности, можно все еще использовать CDSA в OS X, но ошибки файла в http://bugreport .apple.com/для запроса дополнительной функциональности, в которой Вы нуждаетесь. Для получения дополнительной информации читайте Обзор CDSA.
OpenSSL
Несмотря на то, что OpenSSL обычно используется в сообществе разработчиков ПО с открытым исходным кодом, OpenSSL не обеспечивает стабильный API от версии до версии. Поэтому несмотря на то, что OS X предоставляет библиотекам OpenSSL, библиотеки OpenSSL в OS X осуждаются, и OpenSSL никогда не были предоставлены как часть iOS. Использованию библиотек OS X OpenSSL приложениями строго обескураживают.
Если Ваше приложение зависит от OpenSSL, необходимо скомпилировать OpenSSL сами и статически соединить известную версию OpenSSL в приложение. Это использование OpenSSL возможно и на OS X и на iOS. Однако, если Вы не пытаетесь поддержать исходную совместимость с существующим проектом с открытым исходным кодом, необходимо обычно использовать различный API.
Общие Преобразования Crypto и Безопасности являются рекомендуемыми альтернативами для общего шифрования. CFNetwork и Безопасный Транспорт являются рекомендуемыми альтернативами для безопасной связи.
Шифрование в iOS
В iOS, в дополнение к обеспечению функций поддержки для кодирования и декодирования ключей, Сертификата, Ключа и Trust Services API также обеспечивает основное шифрование, дешифрование, подписание и проверку блоков данных с помощью следующего SecKey
функции:
SecKeyEncrypt
— шифрует блок данных с помощью указанного ключа.
SecKeyDecrypt
— дешифрует блок данных с помощью указанного ключа.
SecKeyRawSign
— подписывает блок данных с помощью указанного ключа.
SecKeyRawVerify
— заверяет подпись против блока данных и указанного ключа.
Можно найти примеры того, как использовать эти функции в Сертификате, Ключе и Задачах Trust Services для iOS в Сертификате, Ключе и Руководстве по программированию Trust Services.
Для подробной довольной ссылки, Сертификат чтения, Ключ и Ссылка Trust Services.