+-

我的应用程序使用 Android 6.0指纹API来保护Android KeyStore中的AES密钥.只有在用户通过指纹传感器进行身份验证时才能使用存储的密钥,因为KeyGenParameterSpec是使用setUserAuthenticationRequired(true)初始化的.
当用户触摸传感器时,我从回调onSuthenticationSucceeded(Cipher)获得初始化的密码,并将其用于解密.
除了安装了Android 6的三星手机外,这种方法效果很好.当我尝试使用返回的密码时,三星手机有时会抛出android.security.KeyStoreException:密钥用户未经过身份验证.因此,即使通过onAuthenticationSucceeded(Cipher)返回密码,Android KeyStore也认为用户未被指纹传感器验证.
当应用程序长时间不使用时,似乎发生了崩溃.当应用程序崩溃时,通常都能正常工作.
因为这个错误是随机发生的,而且只发生在三星手机上…这似乎是由Android 6.0 KeyStore和FingerPrint API的三星实现中的一些内部时序问题引起的.
编辑:此问题也在OnePlus和Acer手机中体验过.
最佳答案
设置KeyGenParameterSpec.setUserAuthenticationRequired(false)可能是一个潜在的安全问题.应该类似于KeyPermanentlyInvalidatedException处理上述错误.如果在创建SecretKey后添加新指纹,则会在Cipher初始化时引发KeyPermanentlyInvalidatedException.但是,如果在添加新指纹之前初始化Cipher,当您尝试使用该Cipher加密或解密时,您将获得未经过身份验证的Key User的上述KeyStoreException.
重现此错误很容易.当应用程序的指纹验证屏幕在后台时,请尝试添加新指纹.现在切换回应用程序,并输入指纹,加密或解密方法会抛出此错误.我可以通过捕获异常并以与KeyPermanentlyInvalidatedException相同的方式处理它来解决此问题.
重现此错误很容易.当应用程序的指纹验证屏幕在后台时,请尝试添加新指纹.现在切换回应用程序,并输入指纹,加密或解密方法会抛出此错误.我可以通过捕获异常并以与KeyPermanentlyInvalidatedException相同的方式处理它来解决此问题.
点击查看更多相关文章
转载注明原文:触摸三星手机上的指纹后出错:android.security.KeyStoreException:未经过身份验证的密钥用户 - 乐贴网