Android Key Store API 23,使用setUserAuthenticationRequired而不使用指纹扫描程序

时间:2017-03-03 15:14:21

标签: android android-keystore android-security android-fingerprint-api

我尝试使用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密钥库而不使用实际的指纹读取器吗?

2 个答案:

答案 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。即使那些不可用的用户也不会在不可用时警告用户。

因此,越狱或零日攻击可能会破坏大多数应用程序密钥。

请考虑检测注册情况,并警告您的用户,在没有注册硬件生物特征识别设备的设备上,其数据更容易受到攻击。