Классы защиты данных
Когда приложение создает новый файл на устройствах, которые поддерживают защиту данных, оно назначает ему класс. Каждый класс использует различные политики для определения условий доступа к данным. Основные классы и политики описаны в следующих разделах. Компьютеры Mac с чипом Apple не поддерживают класс D «Без защиты», и границы зоны безопасности устанавливаются вокруг входа и выхода (а не блокировки и разблокировки, как на iPhone и iPad).
Класс | Тип защиты |
---|---|
Класс A. Полная защита | NSFileProtectionComplete |
Класс B. Защищено, если не открыто | NSFileProtectionCompleteUnlessOpen |
Класс C. Защищено до первой аутентификации пользователя Примечание. macOS использует ключ тома для воссоздания характеристик защиты FileVault. | NSFileProtectionCompleteUntilFirstUserAuthentication |
Класс D. Без защиты Примечание. Не поддерживается в macOS. | NSFileProtectionNone |
Полная защита
NSFileProtectionComplete. Ключ класса защищается с помощью ключа, полученного из код-пароля или пароля пользователя и UID устройства. Вскоре после того, как пользователь заблокирует устройство (через 10 секунд, если для параметра «Запрос пароля» задано значение «Сразу»), расшифрованный ключ класса удаляется, в результате чего все данные этого класса остаются недоступны, пока пользователь снова не введет код-пароль или не разблокирует устройство (войдет в систему) с помощью Face ID или Touch ID.
В macOS расшифрованный ключ класса удаляется вскоре после того, как последний пользователь выходит из системы, в результате чего все данные этого класса становятся недоступны, пока какой-либо пользователь снова не введет код-пароль или не выполнит вход на устройстве с помощью Touch ID.
Защищено, если не открыто
NSFileProtectionCompleteUnlessOpen. Иногда требуется записать определенные файлы, когда устройство заблокировано или пользователь вышел из системы. В качестве примера можно привести загрузку почтового вложения в фоновом режиме. Такое действие становится возможным благодаря использованию асимметричной эллиптической криптографии (ECDH по Curve25519). Для защиты обычного ключа файла используется ключ, полученный в результате однопроходного согласования ключей Диффи — Хеллмана, как описано в документе NIST SP 800-56A.
Динамический открытый ключ для согласования хранится вместе с защищенным ключом файла. В качестве KDF используется функция формирования ключа сцеплением (утвержденная альтернатива 1) согласно пункту 5.8.1 документа NIST SP 800-56A. AlgorithmID опускается. PartyUInfo и PartyVInfo — это динамический и статический открытые ключи соответственно. В качестве функции хеширования используется SHA256. Сразу после закрытия файла его ключ удаляется из памяти. Для повторного открытия файла снова создается открытый ключ на основе личного ключа класса «Защищено, если не открыто» и динамического открытого ключа; они используются для снятия защиты с ключа файла, который затем используется для расшифровки файла.
В macOS доступ к личной части ключа класса NSFileProtectionCompleteUnlessOpen предусмотрен до тех пор, пока пользователи системы находятся в системе или остаются аутентифицированными.
Защищено до первой аутентификации пользователя
NSFileProtectionCompleteUntilFirstUserAuthentication. Действие этого класса аналогично классу «Полная защита», однако расшифрованный ключ класса не удаляется из памяти при блокировке устройства или выходе пользователя из системы. Защита этого класса похожа на шифрование всего тома на настольных системах и защищает данные от атак, которые используют перезагрузку устройства. Этот класс по умолчанию используется для всех приложений сторонних разработчиков, которым не назначен класс защиты данных.
В macOS этот класс использует ключ тома, который доступен, пока подключен том, и он действует так же, как FileVault.
Без защиты
NSFileProtectionNone. Ключ этого класса защищен только с помощью UID и хранится в стираемом накопителе. Поскольку все ключи, необходимые для расшифровки файлов в этом классе, хранятся на устройстве, единственным преимуществом такого шифрования является возможность быстрого удаленного стирания. Даже если файлу не назначен класс защиты данных, он все равно хранится в зашифрованном виде (как и все данные на устройстве iOS и iPadOS).
Этот вариант не поддерживается в macOS.
Примечание. В macOS для томов, которые не используются для загрузки операционной системы, все классы защиты данных доступны, только пока подключен том. По умолчанию используется класс защиты данных NSFileProtectionCompleteUntilFirstUserAuthentication. Функция ключа диапазона доступна как в Rosetta 2, так и в собственных приложениях.