删除指纹时的Android Key Invalidation

时间:2017-02-21 05:24:00

标签: android encryption cryptography fingerprint

我正在7.1.1上的Google Pixel设备上进行测试,并发现当从设备中删除所有指纹时,我的私钥不会失效。我已根据演示应用程序使用单个对称SecretKey进行了测试,并且按预期工作,但是使用非对称密钥对仅在注册新打印时抛出KeyPermanentlyInvalidatedException,而不是在全部删除时抛出。

还有什么,如果我然后注册新指纹,然后显示我的指纹对话框并成功扫描我的指纹,验证Cipher对象,然后我在{{doFinal()上调用Cipher 1}}对象抛出KeyStoreException: Key user not authenticated。如果我然后尝试在KeyStoreException之后再次初始化Cipher对象,那么我会根据需要获得无效的异常。

我在三星S7上使用6.0.1进行了测试并且工作正常,当打印件全部被删除时,KeyPermanentlyInvalidatedException被抛出。我在related post找到了其他人在使用Nexus时遇到问题(操作系统版本没有被提及),可能相关吗?设备/操作系统的某些组合是否存在错误,而不是使特定密钥无效?

看起来似乎:

  1. 在Pixel或7.1.1设备上,删除所有指纹后,PrivateKey不会失效。
  2. 如果在之前删除所有打印件之后注册新打印件,则不能使用PrivateKey来解密数据,但只有在您尝试使用它之后它才会失效。
  3. 当我检测到用户之前已经在我的应用中注册了指纹但是现在没有在设备上注册的指纹作为一点故障保护时,是否有办法通过密钥库手动使密钥无效或其他东西?

    更新:根据请求显示密钥生成。

    mKeyPairGenerator.initialize(
                new KeyGenParameterSpec.Builder(getKeyName(), KeyProperties.PURPOSE_DECRYPT)
                            .setDigests(KeyProperties.DIGEST_SHA256, KeyProperties.DIGEST_SHA512)
                            .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_RSA_OAEP)
                            .setUserAuthenticationRequired(true)
                            .setRandomizedEncryptionRequired(true)
                            .build());
            mKeyPairGenerator.generateKeyPair();
    

1 个答案:

答案 0 :(得分:1)

更新这似乎与Google Issue 227919部分相关。在2月17日的评论说最新的N版本有一个修复,但我仍然可以像其他人一样重现。

如果您遇到此问题,请为Google问题加注星标,以便获得更多关注。