我尝试使用Google示例(BasicAndroidKeyStore
)生成密钥对。我所做的唯一修改是在setUserAuthenticationRequired(true)
中设置KeyGenParameterSpec.Builder
。
我认为它可以在带有嵌入式指纹扫描仪的设备上正常工作,但是在OnePlus One上运行(在Android 6.0下运行),我得到以下异常:
At least one fingerprint must be enrolled to create keys requiring user authentication for every use
手机确实设置了锁定屏幕以使用该模式,但显然需要指纹才能进行身份验证。知道如何使用API 23密钥库而不使用实际的指纹读取器吗?
答案 0 :(得分:0)
我也遇到过与moto设备相同的问题。 至于现在我已经完成了这段代码。在使用指纹认证之前进行检查。
public boolean isFingerprintAuthAvailable() {
//FingerprintManager mFingerprintManager;
return mFingerprintManager.isHardwareDetected()
&& mFingerprintManager.hasEnrolledFingerprints();
}
有关更多信息,请查看我已实施的sample。希望能帮到你......
答案 1 :(得分:0)
在现代Android设备上,指纹扫描仪直接与硬件安全模块链接。
结果,现在有一种有意义的方法来提供受保护的隔离加密-即使在有根电话上也是如此。
查看这些准则:
https://developer.android.com/training/articles/keystore#HardwareSecurityModule
攻击者必须诱使用户刷指纹以解锁内容……而这只是每次刷卡的一次解密或签名。
这是“相当不错的”安全性,但是由于API的限制和限制(特别是缺少ECDH!),大多数声称使用Android的钥匙串系统的应用程序都不使用StrongBox。即使那些不可用的用户也不会在不可用时警告用户。
因此,越狱或零日攻击可能会破坏大多数应用程序密钥。
请考虑检测注册情况,并警告您的用户,在没有注册硬件生物特征识别设备的设备上,其数据更容易受到攻击。