Touch ID для KeyChain без резервного PIN-кода

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

Я получил весь код для чтения/записи в связку ключей с помощью ACL. но сейчас я вижу только один вариант "kSecAccessControlUserPresence" для SecAccessControlCreateFlags в SecAccessControlCreateWithFlags(...). это позволяет пользователю документации Apple вернуться к PIN-коду, если он не хочет использовать Touch ID. можно ли разрешить доступ только к этим ключам с сенсорным идентификатором, и если это не удалось, пользователь должен ввести учетные данные вручную?

У меня есть другие альтернативы, но я стараюсь их избегать:

  • Вариант A: используйте LocalAuthenticate, и я выполню шифрование своих учетных данных в userdeafults, но мне нужно выяснить, где хранить ключ? Любые идеи?

  • Вариант B: продолжать использовать ACL и цепочку ключей, но мне нужно выяснить, нет ли их, если пользователь использовал PIN-код или сенсорный идентификатор. если они использовали сенсорный идентификатор, тогда я буду использовать информацию, полученную из цепочки для ключей, для входа в систему, если они использовали пин-код, и я снова спрошу их с помощью LocalAuthenticate. если они отменят его, я не войду в систему, если они подтвердят с помощью touch id, я буду использовать учетные данные из цепочки для ключей для входа в систему.

ОБНОВЛЕНИЕ: На случай, если кто-то спросит, почему мне не нужен PIN-код, наши юристы не приняли концепцию четырехзначного PIN-кода как способа доступа к цепочке ключей, где мы храним пароли.


person AsH    schedule 18.12.2014    source источник
comment
Ваши требования не имеют особого смысла; если кто-то знает пароль, он может добавить новый отпечаток пальца. Таким образом, даже если вы можете потребовать отпечаток пальца и отклонить пароль, вы не получите дополнительной защиты. (Вы можете предложить своим пользователям установить более длинный пароль, если хотите.)   -  person Jesse Rusak    schedule 23.12.2014
comment
Почему бы просто не установить политику паролей для более надежного кода? Если вы используете TouchID, вам не нужно предлагать запасной PIN-код, а используемый вами пароль приложения может отличаться от кода доступа устройства.   -  person macshome    schedule 23.12.2014
comment
согласился, что если кто-то знает PIN-код, они могут добавить туда отпечаток пальца, но я не хочу спорить с юридическим отделом, им просто нужен отпечаток пальца или пользователь должен ввести свой пароль (в нашу систему) вручную. Кроме того, Apple разработала локальный процесс аутентификации, чтобы использовать только отпечаток пальца, так почему бы не расширить его до ACL цепочки ключей и дать нам контроль над тем, что выбирать. Мы не можем заставить наших пользователей переключить свой ПИН-код с простых 4 цифр на длинный пароль.   -  person AsH    schedule 31.12.2014


Ответы (1)


Теперь это доступно на iOS 9:

  • kSecAccessControlTouchIDCurrentSet — «Touch ID из набора зарегистрированных в данный момент пальцев. Touch ID должен быть доступен и хотя бы один палец должен быть зарегистрирован. При добавлении или удалении пальцев элемент становится недействительным».
  • kSecAccessControlTouchIDAny — «Touch ID (любой палец). Touch ID должен быть доступен и хотя бы один палец должен быть зарегистрирован. Элемент по-прежнему доступен с помощью Touch ID, даже если пальцы добавлены или удалены».
person Mike Weller    schedule 13.01.2016
comment
Я интегрировал сенсорный идентификатор в свое приложение. Я хочу использовать сенсорный идентификатор в качестве второй безопасной аутентификации. Я хочу определить, были ли добавлены или удалены новые отпечатки пальцев. Не могли бы вы помочь мне с программным использованием? - person Begum; 25.02.2016
comment
Эти два элемента управления доступом теперь помечены как устаревшие в документации API. - person JoeGaggler; 15.02.2018
comment
Они были переименованы в iOS 11.3 SDK и выше (текущие имена теперь будут выдавать предупреждение об устаревании) — новые имена — kSecAccessControlBiometryCurrentSet и kSecAccessControlBiometryAny. - person JosephH; 25.04.2018
comment
Поправьте меня, если я ошибаюсь, но biometrySet и biometryAny по-прежнему используют пин-код устройства. - person Mocha; 12.09.2019