Использование 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) и побеждая обфускацию Главного пароля. Если вы джейлбрейк своего устройства, вы охотно побеждаете одну из самых сильных защит против такой атаки.
Итак, простой ответ: Это невозможно: (