pet*_*syn 13 encryption android fingerprint android-keystore android-6.0-marshmallow
我的应用程序使用Android 6.0指纹API来保护Android KeyStore中的AES密钥.只有当用户通过指纹传感器进行身份验证时,才能使用存储的密钥,因为KeyGenParameterSpec已初始化setUserAuthenticationRequired(true).
当用户触摸传感器时,我从回调中获得初始化的密码,并将onAuthenticationSucceeded(Cipher)其用于解密.
除了搭载Android 6的三星手机外,这种方法效果很好.当我尝试使用返回的密码时,三星手机有时会抛出android.security.KeyStoreException: Key user not authenticated.因此,即使onAuthenticationSucceeded(Cipher)Android KeyStore 返回密码认为用户未被指纹传感器验证.
当应用程序长时间不使用时,似乎发生了崩溃.当应用程序崩溃时,通常都能正常工作.
因为这个错误是随机发生的,而且只发生在三星手机上...这似乎是由Android 6.0 KeyStore和FingerPrint API的三星实现中的一些内部计时问题引起的.
编辑:此问题也在OnePlus和Acer手机中体验过.
Nul*_*ter 16
设置KeyGenParameterSpec.setUserAuthenticationRequired(false)可能是一个潜在的安全问题.应该类似于KeyPermanentlyInvalidatedException处理上述错误.如果在创建SecretKey后添加新指纹,则会在Cipher初始化时引发KeyPermanentlyInvalidatedException .但是,如果在添加新指纹之前初始化Cipher,当您尝试使用该Cipher 加密或解密时,您将获得未经过身份验证的Key User的上述KeyStoreException .
重现此错误很容易.当应用程序的指纹验证屏幕在后台时,请尝试添加新指纹.现在切换回应用程序,并输入指纹,加密或解密方法会抛出此错误.我可以通过捕获异常并以与KeyPermanentlyInvalidatedException相同的方式处理它来解决此问题.
不要听"setUserAuthenticationRequired(false)"
我已经能够通过两次聆听在三星上重现这一点.我认为发生的事情是,你听两次,在一次通话中进行身份验证,但通过另一次通话进行验证.
添加日志并检查您是否只开始只扫描一次指纹.
由于我预计上述制造商不会很快解决此问题,因此我通过KeyGenParameterSpec.setUserAuthenticationRequired(false)为三星、OnePlus、华硕和其他一些设备设置来解决此问题。
| 归档时间: |
|
| 查看次数: |
9100 次 |
| 最近记录: |