Использование Touch ID на iOS для шифрования данных

Что я пытаюсь сделать

В основном, что я пытаюсь сделать, это выяснить способ шифрования данных с помощью Touch ID.

К сожалению, я не нашел способ создать encryptionKey с Touch ID, так как API LAContext возвращает только ответ aye/nay.


Почему я пытаюсь это сделать

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

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


Мой вопрос:

Как я могу установить Touch ID на этом изображении?

Я искал в Интернете, но только нашел то, чего я уже опасался.
Поскольку iOS возвращает только true или false из защищенного анклава, невозможно создать encryptionKey.

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


EDIT:

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

Ответ 1

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

Смотрите WWDC 2014 711 Keychain и Authentication with Touch ID и WWDC 2015 706 Безопасность и приложения для получения дополнительной информации.

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

Ответ 2

Я знаю, этот вопрос был опубликован еще в 2015 году, но я исследовал ту же проблему. Насколько мне известно, на самом деле это невозможно.

Я нашел эту цитату на сайте 1Password по этой теме:

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

Итак, простой ответ: Это невозможно: (