Когда я регистрирую первый и единственный отпечаток пальца и генерирую KeyPair
, PrivateKey
становится недействительным, когда я использую его во второй раз. Это происходит только один раз. Я единственный, у кого есть эта проблема? Что-то не так с моим кодом?API отпечатков пальцев Android и личные/открытые ключи
Я не могу использовать какой-либо другой ключ, поскольку я использую PrivateKey
для подписи данных.
Шаги:
- Wipe все отпечатки пальцев
- ПРИЕМА один отпечаток пальца
- Сформировать
KeyPair
и использоватьFingerprintManager :: authenticate
- Во время следующего использования
FingerprintManager :: authenticate PrivateKey
получает постоянно аннулируется. Это происходит только в первый раз
Ниже кода, где я генерировать KeyPair
KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
keystore.load(null);
KeyPairGenerator generator = KeyPairGenerator.getInstance(KeyProperties.KEY_ALGORITHM_EC, "AndroidKeyStore");
generator.initialize(new KeyGenParameterSpec.Builder("key_name", KeyProperties.PURPOSE_SIGN)
.setDigests(digest) // I have defined digest before
.setSignaturePaddings(paddings) // I have defined paddings before
.setUserAuthenticationRequired(true)
.build());
generator.generateKeyPair();
И вот код, где я вызываю аутентификации по отпечаткам пальцев для подписи данных:
KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
keyStore.load(null);
Signature signature = Signature.getInstance("signing_algorithm");
PrivateKey privateKey = (PrivateKey) keyStore.getKey("key_name", null);
signature.initSign(privateKey); // Here I get KeyPermanentlyInvalidatedException
CryptoObject crypto = new CryptoObject(signature);
FingerprintManager fingerprintManager = context.getSystemService(FingerprintManager.class);
CancellationSignal cancellationSignal = new CancellationSignal();
AuthenticationCallback authenticationCallback = new AuthenticationCallback() {
...
};
fingerprintManager.authenticate(crypto, cancelationSignal, 0, authenticationCallback, null);
Кажется мне, как вы пытаетесь повторно использовать ключ, который был создан, прежде чем стереть данные об отпечатках пальцев. Убедитесь, что вы снова установили свой ключ после вытирания отпечатков пальцев.Вы можете попробовать установить setInvalidatedByBiometricEnrollment в false и посмотреть, что произойдет, – JohanShogun
Сначала я протираю отпечатки пальцев, а затем регистрирую только один, сгенерируйте ключи. Когда я использую сгенерированные ключи в первый раз, все работает так, как ожидалось, но когда я аутентифицирую с помощью fingerpeint, чтобы использовать ключ во второй раз, он становится недействительным. Я попытался использовать setInvalidateByBiometricEnrollment в false, и это помогло, но это небезопасно. – Toochka
Тогда мне кажется, что это проблема с использованием phonentoure, ошибка в программном обеспечении отпечатков пальцев, который используется производителем, вы получаете тот же результат на всех телефонах разных производителей? – JohanShogun