Как сгенерировать KeyPair в Android KeyStore, защищенный пользовательским паролем

У меня есть приложение, которое использует авторизацию по отпечатку пальца и 4-значному пин-коду (который может быть установлен пользователем в настройках приложения, это не системный пин-код/шаблон/пароль).

С фингерпринтом все нормально, с пином проблема.

Я пытаюсь сделать следующее:

  1. Разрешить пользователю устанавливать пин-код из настроек приложения
  2. Сгенерировать пару ключей в хранилище ключей для некоторого псевдонима, защищенного введенным пин-кодом (так что закрытый ключ не может быть доступен без этого пин-кода)
  3. Отправить открытый ключ на сервер для будущей проверки подписи
  4. Получить токен пользователя с сервера и сохранить его в локальном хранилище

Затем во время авторизации:

  1. Запросить пользователя ввести пин-код
  2. Получить закрытый ключ по введенному пин-коду
  3. Получить токен из локального хранилища
  4. Подписать токен закрытым ключом с шага 6
  5. Отправить его на сервер с подписанными данными
  6. Проверьте подпись на сервере и, если она действительна, откройте сеанс для пользователя.

Мой вопрос: Как я могу сгенерировать KeyPair, защищенный PIN-кодом, введенным пользователем

P.S. Для отпечатка пальца эта логика обрабатывается следующим образом:

KeyGenParameterSpec.Builder(KEY_NAME, KeyProperties.PURPOSE_SIGN).setUserAuthenticationRequired(true)

person Dadroid    schedule 11.11.2016    source источник
comment
Привет, ты нашел решение для этого?   -  person Oleg Nestyuk    schedule 20.11.2019


Ответы (1)


Я предлагаю попробовать использовать этот пост Используйте Android KeyStore для безопасного хранения произвольных строк post.

Этот пост охватил точку как

  1. Создавайте, безопасно храните и извлекайте ключи шифрования на устройстве.

  2. Зашифруйте произвольные данные и сохраните их на устройстве.

  3. Получите доступ и расшифруйте данные для последующего использования.

Надеюсь, это поможет.

person Nitin Karande    schedule 11.11.2016