Безопасность приложений, использующих faceId / touchId? Как это работает? - PullRequest
0 голосов
/ 19 июня 2019

В моей стране у нас есть служба MFA, которая, например, может взять ваш номер мобильного телефона, а затем пропинговать ваш телефон, ввести пин-код и вы аутентифицируетесь.Приложение, которое вызывает эту услугу, возвращает ваш эквивалент «номера социального страхования».

В приложениях это можно использовать следующим образом:

  • Вы открываете приложение в первый раз.Введите свой номер телефона и выполните аутентификацию.
  • Приложение может также позволить вам выбрать пин-код, но после первого входа в систему оно не предложит вам снова использовать этот MFA, оно будет использовать ваш идентификатор лица или вашtouchId

Как это работает?

Вот одно предположение:

  • Во время регистрации вызывается служба MFA, она получает ваш "номер социального страхования"."и использует это как ваше имя пользователя
  • Введенный вами пин-код (возможно, всего 4 буквы - очень короткий, так что это заставляет меня сомневаться в этой теории) затем используется в качестве вашего пароля
  • Имя пользователя и пароль(пин-код) затем сохраняются в вашей ключевой цепочке / основном хранилище, и приложение запрашивает у вас faceId / touchId, но затем отправляет вашего пользователя / пин-код для аутентификации вас с помощью API

. Вот как это работает?И если это так, не слишком ли небезопасен 4-значный пин-код?Я предполагаю, что если вы можете использовать это для аутентификации, то любой, кто может получить доступ к вашему API, может попытаться его перебором.А поскольку приложение используется API, это означает, что оно открыто для всех.

Исправьте меня, если я ошибаюсь.

Редактировать: я думаю, секрет может быть сгенерирован для каждого пользователяи пин-код может быть зашифрован с использованием этого секрета, делая его длиннее.

1 Ответ

0 голосов
/ 19 июня 2019

Наиболее современные и безопасные способы сделать это не включают передачу вашего секрета (пин-кода) доверяющей части (бэкэнда), а использование шифрования с асимметричным ключом.Например, мое предположение будет следующим:

Во время регистрации

  • Вы успешно аутентифицируетесь с помощью своих учетных данных.
  • Устройство генерирует пару ключейиспользование безопасного анклава и делает его доступным только с помощью биометрии (TouchID, FaceID).
  • Открытый ключ отправляется на сервер.

Во время аутентификации

  • Бэкэнд отправляет запрос на устройство через некоторый канал (push-уведомление?)
  • Устройство подписывает запрос, используя закрытый ключ, созданный при регистрации, и отправляет егобэкэнд.

  • Бэкэнд проверяет подпись и предоставляет вам доступ к защищенному ресурсу.

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

Так ли это работает?И если это так, не слишком ли небезопасен 4-значный пин-код?Я предполагаю, что если вы можете использовать это для аутентификации, то любой, кто может получить доступ к вашему API, может попытаться его перебором.А поскольку приложение используется API, это означает, что оно открыто для всех.

Я не уверен, почему они запрашивают у вас PIN-код.Возможно, они хотят применить дополнительную защиту и сделать что-то вроде:

  • Заблокировать приложение на случай, если биометрическая аутентификация не удалась.PIN-код можно использовать для разблокировки приложения и повторной попытки.

  • Используйте PIN-код в качестве метода аутентификации в случае, если у пользователя отключены методы биометрической аутентификации.

В любом случае, несмотря на то, что 4 цифры слишком малы, PIN-код обычно хэшируется с использованием функции получения ключа (например, PBKDF2 ), чтобы замедлить атакующего и предотвратить атаки методом перебора.Фактический PIN-код никогда не сохраняется, но хэш.

Все эти схемы безопасности в настоящее время стандартизируются, чтобы иметь достаточно защищенных продуктов.Если вы любите приключения, вы можете посмотреть протокол FIDO UAF: https://fidoalliance.org/specs/fido-uaf-v1.1-id-20170202/fido-uaf-overview-v1.1-id-20170202.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...