У меня есть приложение, которое использует авторизацию по отпечатку пальца и 4-значному пин-коду (который может быть установлен пользователем в настройках приложения, это не системный пин-код/шаблон/пароль).
С фингерпринтом все нормально, с пином проблема.
Я пытаюсь сделать следующее:
- Разрешить пользователю устанавливать пин-код из настроек приложения
- Сгенерировать пару ключей в хранилище ключей для некоторого псевдонима, защищенного введенным пин-кодом (так что закрытый ключ не может быть доступен без этого пин-кода)
- Отправить открытый ключ на сервер для будущей проверки подписи
- Получить токен пользователя с сервера и сохранить его в локальном хранилище
Затем во время авторизации:
- Запросить пользователя ввести пин-код
- Получить закрытый ключ по введенному пин-коду
- Получить токен из локального хранилища
- Подписать токен закрытым ключом с шага 6
- Отправить его на сервер с подписанными данными
- Проверьте подпись на сервере и, если она действительна, откройте сеанс для пользователя.
Мой вопрос: Как я могу сгенерировать KeyPair, защищенный PIN-кодом, введенным пользователем
P.S. Для отпечатка пальца эта логика обрабатывается следующим образом:
KeyGenParameterSpec.Builder(KEY_NAME, KeyProperties.PURPOSE_SIGN).setUserAuthenticationRequired(true)