Мне удалось провести еще несколько исследований, и я решил поделиться своими выводами на основе документа Apple. iOS Security для iOS 11 .
Все ниже основано на знаниях, полученных из документа и моихличная интерпретация.Поэтому, прежде чем применить это к вашему решению, пожалуйста, внимательно прочитайте документ.
Файлы всегда зашифрованы на флэш-памяти (локальное хранилище)
Прежде всего, как я понимаю при чтении документа, файлы на локальном хранилище никогда не расшифровываются (даже без какой-либо дополнительной защиты).set).
Если файлу не назначен класс защиты данных, он все равно сохраняется в зашифрованном виде (как и все данные на устройстве iOS).
Однако, включив защиту данных, мы получаем еще один уровень защиты, который генерирует ключ шифрования для защищенного файла.Но все равно независимо от того, какой класс защиты мы выберем, файл будет постоянно зашифрован в локальном хранилище.
Как это работает, что мы получаем расшифрованные данные в приложении?
Каждое устройство iOS имеет специальный криптографический движок AES-256, встроенный в путь DMA между флэш-памятью и основной системой.памяти, что делает шифрование файла очень эффективным.
Когда файл открыт, его метаданные дешифруются с помощью ключа файловой системы, показывая обернутый ключ для каждого файла и нотацию о том, какой класс защищает его.Ключ для каждого файла (или для каждого экстента) разворачивается вместе с ключом класса, а затем передается на аппаратное ядро AES, которое расшифровывает файл при его чтении из флэш-памяти.Вся обработка ключа в обернутом файле происходит в Secure Enclave;ключ файла никогда не подвергается непосредственному воздействию процессору приложения.
Таким образом, все расшифровка происходит «на лету», и файлы по-прежнему защищены во флэш-памяти.
NSFileProtectionCompleteUntilFirstUserAuthentication
Я не буду вдаваться в подробности для каждого класса защиты, однако я хотел бы пояснить этот.Как я уже упоминал выше, файлы все время защищены, так что произойдет, если мы используем класс NSFileProtectionCompleteUntilFirstUserAuthentication?Ответ здесь:
Этот класс ведет себя так же, как полная защита, за исключением того, что расшифрованный ключ класса не удаляется из памяти, когда устройство заблокировано.
Только наше приложение может получить доступ к файлу, но работа здесь выполняется Crypto Engine, который имеет доступ к нашему Файловому ключу в памяти, даже если устройство заблокировано и расшифровывает данные из флэш-памяти в системную память..
Аппаратная безопасность
Стоит отметить, что аппаратное обеспечение также защищено, и даже если вы перенесете флэш-память на другое устройство,получить данные будет невозможно.
UID позволяет криптографически связывать данные с конкретным устройством.Например, иерархия ключей, защищающая файловую систему, включает в себя UID, поэтому, если микросхемы памяти физически перемещаются с одного устройства на другое, файлы становятся недоступными.UID не связан с каким-либо другим идентификатором на устройстве.
Проблемы с джейлбрейком
Сохраняются ли данные после джейлбрейка в безопасности?
К счастью, механизм защиты данных использует пароль для расшифровки данных, поэтому данные будут оставаться зашифрованными даже после взлома вашего устройства, пока хакер не взломает ваш пароль.
Фоновый режим
Для приложений, которыеиспользуйте фоновый режим NSFileProtectionCompleteUntilFirstUserAuthentication должно быть достаточно.Apple упоминает, что в разделе, связанном с доступом к KeyChain (который очень похож):
Приложения, использующие службы фонового обновления, могут использовать kSecAttrAccessibleAfterFirstUnlock для элементов цепочки для ключей, к которым необходимо обращаться во время фоновых обновлений.