Криптографические службы

Криптографические службы формируют основу из обеспечения данных в пути (безопасная связь) и данных в покое (безопасное хранение). Используя сложную математику, они позволяют Вам:

В этой главе описываются эти криптографические методы и кратко суммирует технологии, которые OS X и iOS обеспечивают, чтобы помочь Вам использовать криптографию в своем собственном приложении.

Шифрование и дешифрование

Шифрование является средними значениями защиты данных от перехвата путем преобразования его в форму, которая не читаема кроме кем-то, кто знает, как преобразовать его назад.

Шифрование обычно используется для защиты данных в пути и данных в покое. Когда информация должна быть отправлена через недоверяемый канал передачи, это - ответственность этих двух конечных точек использовать шифрование для обеспечения коммуникации. Точно так же, храня информацию на локальном диске, приложение может использовать шифрование, чтобы гарантировать, что информация не читаема третьими лицами, даже если украден компьютер.

Существует много различных методов шифрования, названных шифрами, та работа по-разному, и могут служить различным целям. Шифры обычно работают путем объединения исходной информации (открытый текст или простой текст) со вторыми данными (ключ) некоторым способом произвести зашифрованный вид, названный шифрованным текстом.

Современные методы шифрования могут быть сгруппированы в три широких категории: симметричное шифрование, асимметричное шифрование и стеганография.

Симметричное шифрование

В симметричном шифровании единственный ключ (обычно длинная строка случайных байтов) используется для математического преобразования данных и позже используется наоборот для получения исходной информации.

../Art/security_symmetric.jpg

Симметричное шифрование часто используется для безопасной коммуникации. Однако, потому что обе конечных точки должны знать тот же секретный ключ, симметричное шифрование не достаточно отдельно.

Асимметричное шифрование

В асимметричном шифровании два математически связанных ключа используются для преобразования данных. Информация, зашифрованная с одним ключом, может быть дешифрована только с другим ключом и наоборот. Вообще говоря, один из этих ключей (закрытый ключ) держится в секрете, и другой ключ (открытый ключ) сделан широко доступным. Поэтому асимметричное шифрование также вызывают шифрованием с открытым ключом.

../Art/security_asymmetric.jpg../Art/security_asymmetric.jpg

Асимметричное шифрование часто используется для установления совместно используемого канала передачи. Поскольку асимметричное шифрование является в вычислительном отношении дорогим, эти две конечных точки часто используют асимметричное шифрование, чтобы обмениваться симметричным ключом, и затем использовать намного более быстрый симметричный алгоритм шифрования для шифрования и дешифрования фактических данных.

Асимметричное шифрование может также использоваться для установления доверительных отношений. Путем шифрования информации с закрытым ключом кто-то еще может считать те информации с открытым ключом и быть уверен, что это было зашифровано Вами.

Стеганография

Стеганография означает скрывать информацию в менее важных битах других данных.

../Art/security_steganography.jpg

Стеганография обычно используется для того, чтобы хранить информацию авторского права в фотографии таким способом, который в основном неотличим от шума, если Вы не знаете, как искать его.

Стеганография может также использоваться для хранения зашифрованных томов под другими зашифрованными или незашифрованными объемами (или при помощи неиспользованных блоков или путем использования в своих интересах коррекции ошибок тонкими способами).

Хеширование

Значение хэш-функции или хеш, является маленькой частью данных, полученных из большей части данных, которые могут служить прокси для той большей части данных. В криптографии хеши используются при проверке подлинности части данных. Криптографические алгоритмы хеширования являются по существу формой сжатия данных (чрезвычайно) с потерями, но они специально предназначены так, чтобы две подобных части данных вряд ли хешировали к тому же значению.

Например, два школьника часто передавали примечания назад и вперед при решении, когда идти домой вместе. Однажды, хулиган прервал примечание и принял меры, чтобы Боб поступил десять минут рано так, чтобы он мог украсть деньги на ланч Боба. Чтобы гарантировать, что их сообщения не были изменены в будущем, они разработали схему, в которой они вычислили остаток после деления числа букв в сообщении суммой их возрастов, затем записали что много точек в углу сообщения. Путем подсчета числа букв они могли (грубо) обнаружить определенные модификации к сообщениям друг друга.

Это - конечно, изобретенный пример. Простой остаток является очень слабым алгоритмом хеширования. С хорошими алгоритмами хеширования коллизии маловероятны при внесении небольших изменений в часть данных. Эта стойкая к трамбовке природа хороших хешей делает их ключевым компонентом в подписывании кода, подписании сообщения и различных других схемах обнаружения вмешательства.

На высоком уровне хеширование также подобно вычислению контрольной суммы (метод для обнаружения и исправления ошибок в переданных данных). Однако цели этих методов очень отличаются, таким образом, используемые алгоритмы также очень отличаются. Контрольные суммы обычно разрабатываются для разрешения обнаружения и восстановления единственного изменения или небольшого количества изменений. В отличие от этого, криптографические хеши должны надежно обнаружить большое количество изменений в единственной части данных, но не должны говорить Вам, как изменились данные.

Например, следующая команда в оболочке демонстрирует общий алгоритм хеширования:

$ echo "This is a test.  This is only a test." | sha1sum
7679a5fb1320e69f4550c84560fc6ef10ace4550  -

OS X обеспечивает много языков C APIs для выполнения хеширования. Они описаны далее в документах, процитированных в конце этой главы.

Подписание и проверка

Подпись является способом доказать подлинность сообщения или проверить идентификационные данные сервера, пользователя или другого объекта.

В былые времена люди иногда штамповали конверты с изоляцией воска. Эта изоляция не только доказала, кто отправил сообщение, но также и доказал, что никто не открыл сообщение и потенциально изменил его в то время как в пути.

Современное подписание достигает многих из тех же преимуществ через математику. В дополнение к самим данным, подписываясь и проверяя требуют двух данных: надлежащая половина пары общедоступной с закрытым ключом и цифрового сертификата.

Отправитель вычисляет хеш сообщения и шифрует его с закрытым ключом. Получатель также вычисляет хеш и затем использует соответствующий открытый ключ для дешифрования хеша отправителя и сравнивает хеши. Если они - то же, данные не были изменены в пути, и можно безопасно положить, что данные были отправлены владельцем того ключа.

Цифровой сертификат отправителя является набором данных, содержащих открытый ключ и другую информацию об идентификации, по усмотрению отправителя, такому как имя лица, название компании, доменное имя и почтовый адрес. Цель сертификата состоит в том, чтобы связать открытый ключ с определенным лицом. При доверии сертификату Вы также полагаете, что сообщения, подписанные закрытым ключом отправителя, были отправлены тем лицом.

Для обеспечения средних значений определения законности сертификата сертификат отправителя подписывается кем-то еще, сертификат которого поочередно подписывается кем-то еще, и т.д., формирование цепочки доверяет сертификату, которому получатель по сути доверяет, названный сертификатом привязки. Этот сертификат может быть корневым сертификатом — самоподписанный сертификат, представляющий известный центр сертификации и таким образом корень дерева сертификатов, происходящих из тех полномочий — или это может быть любой произвольный сертификат, который пользователь или разработчик приложений явно определяли как доверяемую привязку.

Поскольку получатель доверяет сертификату привязки, получатель знает, что сертификат допустим и, таким образом, что отправитель - то, кем он или она утверждает, что был. Градус, которому получатель доверяет сертификату, определяется двумя факторами:

Сертификат может также использоваться для аутентификации. Путем подписания данного случая (случайным образом сгенерированная строка проблемы, создаваемая в частности с этой целью), пользователь или сервер могут доказать, что он, она, или это обладает закрытым ключом, связанным с тем сертификатом. Если тот сертификат считают доверяемым (путем оценки его цепочки доверия), то сертификат и данный случай со знаком доказывают, что пользователь или сервер должны быть то, кем он, она, или это утверждает, что было.

Безопасное хранение

OS X и iOS обеспечивают много технологий для безопасного хранения. Из них три обычно используемых технологии являются цепочками для ключей, FileVault и защитой данных.

Цепочки для ключей

В понятии цепочка для ключей подобна физическому брелоку для ключей, в котором это - место, где ключи и другие столь же маленькие части данных могут быть сохранены для более позднего использования в выполнении криптографических задач, но подобие заканчивается там. С физическим брелоком для ключей владелец может взять ключ и использовать его для разблокирования чего-то. С цепочкой для ключей приложения обычно не получают доступ к самим фактическим ключевым данным, таким образом, они не рискуют представлять ключи даже если поставивший под угрозу. Вместо этого они используют уникальный идентификатор для идентификации тех ключей, и фактическое шифрование выполняется в отдельном процессе, названном Сервером безопасности (описанный позже в этом документе).

Таким образом цепочка для ключей до некоторой степени больше походит на в большой степени вооруженного охранника в полном бронежилете, переносящего брелок для ключей. Можно попросить, что защита для разблокирования двери для Вас, если Вы разрешены войти, но Вы обычно не можете разблокировать дверь сами.

OS X также включает утилиту, позволяющую пользователям хранить и считывать данные в цепочке для ключей, названной Доступом Цепочки для ключей. Эта утилита описана более подробно позже в Доступе Цепочки для ключей.

FileVault

В OS X FileVault использует шифрование для обеспечения зашифрованного хранения для файлов пользователя. Когда FileVault включают, диск дешифрован только после того, как авторизованный пользователь входит в систему. (Обратите внимание на то, что до OS X v10.7, FileVault защитил корневой каталог только пользователя.)

FileVault и его конфигурация UI описаны более подробно позже в Средствах защиты Конечного пользователя.

Защита данных

iOS обеспечивает APIs, позволяющий приложение make-файлам, доступным только, в то время как устройство разблокировано для защиты их содержания от любопытных глаз. С защитой данных файлы хранятся в зашифрованном виде и дешифрованы только после того, как пользователь вводит его или ее код доступа.

Для приложений, работающих в фоновом режиме, существуют также настройки, позволяющие файлу оставаться доступным, пока пользователь не закрывает устройство.

Узнавать больше

Для более подробного концептуального обзора аутентификации и авторизации в OS X считайте Руководство по Криптографическим службам.

Для узнавания больше о создании сертификатов подписания считайте Создание Сертификатов Подписания в Руководстве по Распределению приложений.

Можно также узнать о другом Apple и сторонних книгах безопасности в Других Ресурсах Безопасности.