"BiometricPrompt虹膜和人脸提示无法与加密对象身份验证一起使用。#AndroidX"

10
  • 通过biometricPrompt.authenticate(**crypto**, promptInfo)调用,生物识别验证虹膜和人脸检测不会提示。
  • 来源参考:

    测试设备:

    • Samsung S8(Android OS 9)

    我正在执行的身份验证步骤:

    • val biometricPrompt = BiometricPrompt(...)
    • val promptInfo = BiometricPrompt.PromptInfo.Builder()...
    • biometricPrompt.authenticate(promptInfo)(请参见附件:A,B选项)

    还有另一种需要使用Cipher对象的身份验证方法来确保

    一切都与新旧API设备支持的预期相同,直到测试了其他生物识别身份验证选项如虹膜面部检测

    如果我跟随

    • biometricPrompt.authenticate(promptInfo),则应用程序仅基于用户首选项显示身份验证选项,用户必须从“设备设置” -> “生物识别首选项”中选择,并独立执行身份验证。 (参考答案:选项A、B)

    • 但是,如果使用biometricPrompt.**authenticate**(crypto, promptInfo),则仅显示指纹身份验证选项。对于其他偏好选项虹膜和面部检测,在authenticate(..)方法调用时不会显示任何内容。 (参考答案:选项C)

    问题

    • 为什么其他生物识别身份验证不会通过加密对象身份验证提示。

    输入图像描述


    1
    《Android兼容性定义文档》(https://source.android.com/compatibility/10/android-10-cdd)指出:“为了允许第三方应用程序访问密钥库密钥,设备实现必须满足本文件中定义的‘强’要求[C-0-2]。”然后它进一步定义了什么是“强”的生物识别传感器。银河S8中的虹膜和面部扫描仪很可能不符合这些要求。 - Michael
    是的,必须这样做,但维护一个列表并不是一个好主意。虽然我仍然需要在其他OEM设备上验证功能行为。 - CoDe
    这似乎是一些固件级别的检查,用于识别给定的生物识别选项是否足够强大,以便对/使用加密对象进行身份验证。如果失败,则将控制重定向到经典(指来自生物识别API的FingerPrintManager或类似实现)。@Michael - CoDe
    由于谷歌自己也依赖黑名单方法,所以目前看来他们没有更好的解决方案。但是你不需要维护自己的列表。这个API会为你检查并在首选生物识别技术在该设备上不够安全时自动回退到指纹识别。 - Michael
    1
    三星10和Plus设备已删除虹膜作为身份验证选项。我相信在这里提到了(请参见评论#7):https://issuetracker.google.com/issues/142150327。 - Michael
    显示剩余6条评论
    2个回答

    2
    一些设备只有一种形态,而有些设备则有多种形态。你的应用程序最终使用哪种形态并不是由你决定的,而是由OEM实现决定的。正如这篇博客文章所解释的那样,一个形态是强大还是弱小并不取决于你的代码,而是由OEM决定的。然而,当你调用authenticate()时指定一个CryptoObject,你可以请求设备为你的应用程序使用强大的身份验证。

    你正在经历的是,你的设备的OEM决定将指纹作为强大生物识别技术的默认选项。因此,当你向authenticate()传递一个CryptoObject时,这些设备会向用户显示指纹的UI界面。

    人脸识别在某些设备上可以作为可靠的生物识别技术吗?还是总被认为是弱的技术? - Florian Walther
    到目前为止,它被认为是一个较弱的选项,但是它可以进一步改进。 - CoDe
    FYI(虽然有点晚了)人脸解锁在某些设备上被认为是很强的。例如,Pixel 4之所以强大,是因为它具有雷达传感器,而不仅仅是光学匹配。 - Gapp

    0

    Face ID 被视为弱身份验证器。如果在生物识别提示信息中设置 .setAllowedAuthenticators(BIOMETRIC_WEAK or DEVICE_CREDENTIAL) 并执行任何基于密钥的加密操作,则会抛出异常。

    java.lang.IllegalArgumentException: Crypto-based authentication is not supported for Class 2 (Weak) biometrics.
    

    对于基于加密的身份验证,只允许使用 BIOMETRIC_STRONG 或 DEVICE_CREDENTIAL 认证器。

    请参阅此处的表格:https://source.android.com/docs/security/features/biometric


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接