ICode9

精准搜索请尝试: 精确搜索
首页?>?其他分享> 文章详细

触摸三星手机上的指纹后出错:android.security.KeyStoreException:未经过身份验证的密钥用户

2019-09-30 10:34:58??阅读:6??来源: 互联网

标签: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

专注分享技术,共同学习,共同进步。侵权联系[admin#icode9.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有