最初に指紋を登録してKeyPair
を生成すると、2回目の使用時にPrivateKey
が無効になります。これは一度だけ起こります。私はこの問題を抱えている唯一の人ですか?私のコードに何か問題がありますか?Android指紋APIと私的/公開鍵
データに署名するのにPrivateKey
を使用しているため、他の鍵を使用することはできません。
ステップ:
- がすべての指紋
- 登録ステム
- が
KeyPair
を生成し、恒久的に無効になるFingerprintManager :: authenticate PrivateKey
の次の使用中FingerprintManager :: authenticate
- を使用するものの指紋を拭いてください。これは初回のみ、私はここに
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
最初は指紋を拭き取り、1つだけ登録してキーを生成します。生成されたキーを初めて使用すると、すべて正常に動作しますが、2回目にキーを使用するためにfingerpeintで認証すると、無効になります。私はfalseにsetInvalidateByBiometricEnrollmentを使用しようとしましたが、それは助けましたが、これは安全ではありません。 – Toochka
これは、私が指摘しているように、これはメーカーが使用している指紋ソフトウェアのバグを使っているphonentoureの問題です。メーカー全体のすべての電話機で同じ結果が得られますか? – JohanShogun