删除指纹时 Android key 失效

标签 android encryption cryptography fingerprint

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

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

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

这似乎是:

  1. 在 Pixel 或 7.1.1 设备上,删除所有指纹后私钥不会失效。
  2. 如果在之前删除所有照片后注册新照片,则无法使用私钥解密数据,但只有在您尝试使用它后它才会失效。

当我检测到用户之前已在我的应用中注册指纹但现在设备上没有注册指纹作为故障保护时,有没有办法通过 keystore 或其他方式手动使 key 失效?

更新:根据要求显示 key 生成。

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();

最佳答案

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

如果您遇到此问题,请在 Google 问题上加注星标,以便引起更多关注。

关于删除指纹时 Android key 失效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42359337/

相关文章:

java - 使用KSP/CNG登录java

java - Android 版 libgdx 游戏中沿 x 轴重复图像

android - 语音识别和执行 Action

c++ - 如何使用具有低级 DES 函数的 openssl EVP 库?

android - Android中AES加解密算法

java - 如何使用 AES 将字符串加密为仅包含特定字符的字符串?

android - 在 HttpURLConnection 中停止静默重试

java - 为 Android 构建/编译 "Hello World"时出错

php - 快速搜索加密数据?

cryptography - 对哈希函数的多重碰撞和第一次或第二次原像攻击之间有什么区别?