Всем привет, у меня следующая задача:
Приложение должно хранить KeyPair (Ed25519) и при входе должен запрашиваться пинкод.
Должна быть поддержка устройств начиная с 19 API.
Вот как я планирую это реализовать:
С помощью Android Keystore API подпишу ключевую пару пинкодом. Подпись вместе с ключем зашифрую с использованием того же API и положу в SharedPreferences. Сам пин-код + количество неверных попыток я буду хранить также зашифрованным в SharedPreferences.
Что в моем понимании мне это даст:
1. Поскольку ключ подписан пином, будет невозможно отключить проверку пина даже имея доступ к файлам внутри приложения. (При попытке восстановления ключа подпись не совпадет)
2. Перебор пинкода затруднит счетчик попыток и длительный таймаут, а в случае наличия у злоумышленника доступа к файлам приложения защита строится на том что простого перебора не достаточно, нужно знать ключ которым зашифрован пинкод.
Какие есть подводные камни у такого метода? Возможно я чего-то не учел, возможно есть способ проще?