Защита данных связки ключей
Многим приложениям для работы необходимы пароли и другие короткие, но конфиденциальные фрагменты данных, например ключи и токены входа. Связка ключей предоставляет безопасный способ хранения этих элементов. Различные операционные системы Apple используют разные механизмы для обеспечения уровней безопасности, связанных с разными классами защиты связки ключей. В macOS (в том числе на Mac с чипом Apple) технология защиты данных не используется напрямую для обеспечения этих уровней безопасности.
Обзор
Для шифрования элементов связки ключей используются два разных ключа AES-256-GCM: ключ таблицы (метаданные) и ключ строки (секретный ключ). Метаданные связки ключей (все атрибуты, кроме kSecValue) шифруются с помощью ключа метаданных для ускорения поиска, а секретное значение (kSecValueData) шифруется с помощью отдельного секретного ключа. Ключ метаданных защищен сопроцессором Secure Enclave, однако кэшируется в процессоре приложений для быстрой отправки запросов к связке ключей. Для доступа к секретному ключу всегда требуется обращение к Secure Enclave.
Связка ключей реализована в виде базы данных SQLite, которая хранится в файловой системе. Существует только одна база данных, и демон securityd
определяет, к каким элементам связки ключей может обращаться каждый процесс или каждое приложение. API доступа к связке ключей выдают вызовы демону, который запрашивает заданные для приложения права Keychain-access-groups (группы доступа к связке ключей), application-identifier (идентификатор приложения) и application-group (группа приложения). Группы доступа не ограничивают доступ одним процессом, а позволяют нескольким приложениям совместно использовать элементы связки ключей.
Элементы связки ключей могут использоваться совместно только приложениями одного и того же разработчика. Для совместного использования ключей приложения сторонних разработчиков используют группы доступа с префиксом, который был выделен им через программу Apple Developer Program путем распределения по группам приложений. Для принудительного использования префиксов и уникальных групп приложений используются подпись кода, профили обеспечения и программа Apple Developer Program.
Для защиты данных связки ключей используется структура классов, аналогичная структуре, используемой для защиты данных в файлах. Работа этих классов аналогична работе классов защиты данных в файлах, но эти классы используют отдельные ключи и функции.
Доступность | Защита данных в файлах | Защита данных связки ключей | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
В разблокированном состоянии | NSFileProtectionComplete | kSecAttrAccessibleWhenUnlocked | |||||||||
В заблокированном состоянии | NSFileProtectionComplete UnlessOpen | ||||||||||
После первой разблокировки | NSFileProtectionComplete UntilFirstUserAuthentication | kSecAttrAccessibleAfterFirstUnlock | |||||||||
Всегда | NSFileProtectionNone | kSecAttrAccessibleAlways | |||||||||
При включении код-пароля | kSecAttrAccessibleWhen PasscodeSetThisDeviceOnly |
Если приложение пользуется службами фонового обновления, оно может использовать класс kSecAttrAccessibleAfterFirstUnlock для элементов связки ключей, которые необходимы во время фонового обновления.
Класс kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly работает так же, как и kSecAttrAccessibleWhenUnlocked, однако его можно использовать, только если на устройстве задан код-пароль. Элементы этого класса существуют только в системном хранилище ключей; они:
не синхронизируются со Связкой ключей iCloud;
не включаются в резервные копии;
не включаются в хранилища ключей передачи.
В случае удаления или сброса код-пароля ключи класса становятся недействительными, что не позволяет использовать эти элементы.
Другие классы связки ключей имеют эквивалент «Только для этого устройства». При перемещении с устройства во время резервного копирования этот эквивалент защищается с помощью UID, что не позволяет восстановить его на другом устройстве. Apple достигла отличного баланса между безопасностью и удобством, выбирая классы связки ключей в зависимости от типа защищаемой информации и от того, когда эта информация необходима операционной системе iOS и iPadOS.
Функции защиты класса для данных связки ключей
К элементам связки ключей применяются функции защиты следующих классов.
Элемент | Доступность |
---|---|
Пароли Wi-Fi | После первой разблокировки |
Учетные записи Почты | После первой разблокировки |
Учетные записи Microsoft Exchange ActiveSync | После первой разблокировки |
Пароли VPN | После первой разблокировки |
LDAP, CalDAV, CardDAV | После первой разблокировки |
Токены учетных записей в социальных сетях | После первой разблокировки |
Ключи шифрования уведомлений Handoff | После первой разблокировки |
Токен iCloud | После первой разблокировки |
Ключи iMessage | После первой разблокировки |
Пароль «Домашней коллекции» | В разблокированном состоянии |
Пароли Safari | В разблокированном состоянии |
Закладки Safari | В разблокированном состоянии |
Резервное копирование с помощью Finder или iTunes | В разблокированном состоянии, без возможности переноса |
Сертификаты VPN | После первой разблокировки, без возможности переноса |
Ключи Bluetooth® | Всегда, без возможности переноса |
Токен службы Apple Push Notification (APNs) | Всегда, без возможности переноса |
Сертификаты и личный ключ iCloud | Всегда, без возможности переноса |
PIN-код SIM-карты | Всегда, без возможности переноса |
Токен Локатора | Всегда |
Автоответчик | Всегда |
В macOS все объекты связки ключей, установленные профилями конфигурации, доступны всегда. В iOS и iPadOS доступность объектов связки ключей, установленных профилем конфигурации, зависит от их типа, вида упоминания и даты установки. По умолчанию объекты связки ключей, установленные с использованием профилей конфигурации, доступны после первой разблокировки и классифицируются как «без возможности переноса». Однако объект связки ключей, установленный профилем конфигурации, доступен всегда в следующих случаях:
объект был установлен перед обновлением до iOS 15 либо iPadOS 15 или новее;
объект является сертификатом, а не удостоверением;
объект является удостоверением, упоминаемым сертификатом
IdentityCertificateUUID
в полезной нагрузкеcom.apple.mdm
.
Контроль доступа к связке ключей
Для установки политик доступа и требований аутентификации связки ключей могут использовать списки контроля доступа (ACL). Элементы в связке могут задавать условия, требующие участия пользователя, запрещая доступ до тех пор, пока пользователь не выполнит аутентификацию с помощью Face ID, Touch ID либо не введет код-пароль или пароль устройства. Можно также ограничить доступ к элементам, указав, что регистрация с помощью Face ID или Touch ID не должна меняться с момента добавления элемента. Это ограничение направлено на то, чтобы злоумышленник не мог добавить собственный отпечаток пальца и получить доступ к элементу связки ключей. Списки контроля доступа оцениваются внутри Secure Enclave и передаются ядру только при соблюдении заданных ограничений.
Архитектура связки ключей в macOS
macOS также предоставляет доступ к связке ключей для удобного и безопасного хранения имен пользователей и паролей, цифровых удостоверений, ключей шифрования и секретных заметок. Для доступа к связке ключей необходимо открыть приложение «Связка ключей» в папке «/Программы/Утилиты». Использование связки ключей устраняет необходимость вводить — или даже запоминать — учетные данные для каждого ресурса. Для каждого пользователя Mac создается связка ключей по умолчанию. Также пользователи могут создавать другие связки ключей, предназначенные для определенных целей.
Помимо применения пользовательских связок ключей, в macOS используется ряд системных связок ключей, которые поддерживают ресурсы аутентификации, не зависящие от пользователя, такие как учетные данные сетей и идентификаторы инфраструктуры открытых ключей (PKI). Например, неизменяемая связка ключей System Roots хранит сертификаты корневого центра сертификации инфраструктуры открытых ключей интернета, упрощая такие распространенные задачи, как интернет-банкинг и электронная торговля. Аналогичным образом пользователь может развернуть внутренние сертификаты центра сертификации на управляемых компьютерах Mac, чтобы помочь в проверке внутренних сайтов и служб.