10

我尝试使用 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 密钥库吗?

4

2 回答 2

1

在现代 Android 设备上,指纹扫描仪直接与硬件安全模块链接。

因此,现在有一种有意义的方式来提供受保护的隔离加密——即使在有根电话上也是如此。

查看这些指南:

https://developer.android.com/training/articles/keystore#HardwareSecurityModule

攻击者必须欺骗用户刷指纹才能解锁东西……而且每次刷卡只有一次解密或签名。

这是“相当不错”的安全性,但由于 API 的限制和限制(尤其是缺少 ECDH!),大多数声称使用 Android 钥匙串系统的应用程序并没有使用 StrongBox。即使那些这样做的人也不会在不可用时警告用户。

因此,越狱或零日漏洞可能会危及大多数应用程序密钥。

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

于 2018-10-23T17:03:21.627 回答
0

我也遇到过与 moto 设备相同的问题。至于现在我已经完成了这段代码。在使用指纹认证之前进行检查。

public boolean isFingerprintAuthAvailable() {
    //FingerprintManager mFingerprintManager;
    return mFingerprintManager.isHardwareDetected()
            && mFingerprintManager.hasEnrolledFingerprints();
}

有关更多信息,请查看我实施的这个示例。希望能帮到你...

于 2017-03-03T15:22:31.520 回答