Как безопасно хранить данные на iOS, когда требуется доступ в фоновом режиме? - PullRequest
0 голосов
/ 08 июня 2018

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

Я хотел бы знать, как лучше всего зашифровать эти данные?Я думал об использовании Data Protection и добавлении подходящего атрибута файла для принудительного шифрования или более ручном выполнении этого путем хранения хеш-кода пароля в связке ключей и шифрования файла с использованием AES с производным ключом на основе этого хеш-кода.

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

Подводя итог моим опасениям:

  1. Можно ли обеспечить хорошую безопасность в фоновом режиме?
  2. Какой лучший подход?
  3. kSecAttrAccessibleAfterFirstUnlock - означает ли это, что мои данные не безопасны, когда пользователь разблокирует устройство после перезагрузки?
  4. Что, если у пользователя нет пароля?Данные безопасны или нет?

Заранее благодарю за любую помощь по этой теме.

1 Ответ

0 голосов
/ 09 июня 2018

Мне удалось провести еще несколько исследований, и я решил поделиться своими выводами на основе документа 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 для элементов цепочки для ключей, к которым необходимо обращаться во время фоновых обновлений.

...