标签:android?android-6-0-marshmallow?encryption?android-keystore?fingerprint
我的应用程序使用Android 6.0指纹API来保护Android KeyStore中的AES密钥.只有在用户通过指纹传感器进行身份验证时才能使用存储的密钥,因为KeyGenParameterSpec是使用setUserAuthenticationRequired(true)初始化的.
当用户触摸传感器时,我从回调onSuthenticationSucceeded(Cipher)获得初始化的密码,并将其用于解密.
除了bet356体育下载_bet356客服邮箱_bet356官网了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相同的方式处理它来解决此问题.
标签:android,android-6-0-marshmallow,encryption,android-keystore,fingerprint