Lorsque j'écris la première et seule empreinte digitale et génère KeyPair
le PrivateKey
devient invalidé lorsque je l'utilise pour la deuxième fois. Cela n'arrive qu'une seule fois. Suis-je le seul à avoir ce problème? Y at-il un problème avec mon code?API d'empreintes digitales Android et clés privées/publiques
Je ne peux utiliser aucune autre clé car j'utilise PrivateKey
pour signer des données.
Étapes:
- Supprimer toutes les empreintes digitales
- enregistrer une empreinte digitale
- Generate
KeyPair
et utiliserFingerprintManager :: authenticate
- Au cours de la prochaine utilisation de
FingerprintManager :: authenticate PrivateKey
obtient définitivement invalidée. Cela ne se produit que pour la première fois
Ci-dessous le code où je produis le 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();
Et voici le code où j'invoque l'authentification d'empreintes digitales pour la signature de données:
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);
Il me semble que vous essayez de réutiliser une clé qui a été mis en place avant les données essuyés d'empreintes digitales. Assurez-vous de re-configurer votre clé après avoir essuyé les empreintes digitales.Vous pouvez essayer de définir setInvalidatedByBiometricEnrollment sur false et voir ce qui se passe, – JohanShogun
Au début, je nettoie les empreintes digitales, puis j'en inscris un seul, générer des clés. Lorsque j'utilise les clés générées pour la première fois, tout fonctionne comme prévu, mais lorsque je m'authentifie avec fingerpeint pour utiliser la clé pour la deuxième fois, il est invalidé. J'ai essayé d'utiliser setInvalidateByBiometricEnrollment à false et cela a aidé mais ce n'est pas sécurisé. – Toochka
Ensuite, il me semble que c'est un problème avec l'utilisation phonentoure, un bogue dans le logiciel d'empreintes digitales que le fabricant a utilisé, obtenez-vous le même résultat sur tous les téléphones à travers les fabricants? – JohanShogun