Gdy rejestruję pierwszy i tylko odcisk palca i generuję KeyPair
, zostaje on unieważniony, gdy używam go po raz drugi. Zdarza się to tylko raz. Czy tylko ja mam ten problem? Czy coś jest nie tak z moim kodem?Interfejs API linii papilarnych z Androidem i klucze prywatne/publiczne
Nie mogę użyć żadnego innego klucza, ponieważ używam PrivateKey
do podpisywania danych.
Kroki:
- wytrzeć wszystkie odciski palców
- Rejestrowanie jeden odcisk palca
- Generowanie
KeyPair
i używaćFingerprintManager :: authenticate
- Podczas następnego użycia
FingerprintManager :: authenticate PrivateKey
zostaje trwale unieważnione. Dzieje się tak tylko po raz pierwszy
poniższy kod gdzie wygenerowania 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();
A oto kod gdzie mogę powołać uwierzytelniania linii papilarnych do podpisywania danych:
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);
Wydaje mi się, jakbyś próby ponownego użycia klucza, który został ustanowiony przed otarła dane o odciskach palców. Upewnij się, że ponownie ustawiłeś klucz po wyczyszczeniu odcisków palców.Możesz spróbować ustawić setInvalidatedByBiometricEnrollment na false i zobaczyć, co się stanie, – JohanShogun
Najpierw wycieram odciski palców, a potem rejestruję tylko jeden, generuję klucze. Kiedy używam generowanych kluczy po raz pierwszy, wszystko działa zgodnie z oczekiwaniami, ale kiedy uwierzytelniam się przy pomocy fingerpeint, aby użyć klucza po raz drugi, zostaje on unieważniony. Próbowałem użyć setInvalidateByBiometricEnrollment na false i pomógł, ale to nie jest bezpieczne. – Toochka
W takim razie wydaje mi się, że jest to problem związany z używaniem elementu phonsoure, błąd w oprogramowaniu odcisków palców, którego używał producent, czy otrzymujesz taki sam wynik na wszystkich telefonach różnych producentów? – JohanShogun