草庐IT

android - isInsideSecureHardware() 和 isUserAuthenticationRequirementEnforcedBySecureHardware() 有什么区别?

coder 2023-11-19 原文

Android 6.0+ 有一个 KeyInfo 类来获取保存在 AndroidKeyStore 中的 key 信息。在 KeyInfo 类中,我们有 isInsideSecureHardware()isUserAuthenticationRequirementEnforcedBySecureHardware() 方法。我们还有 isUserAuthenticationRequired()documentation ,像往常一样,糟透了。

根据方法名称和(有限的)文档,似乎 isUserAuthenticationRequirementEnforcedBySecureHardware() 只是一个逻辑与 isInsideSecureHardware()isUserAuthenticationRequired()

还有比这更重要的吗?如果是这样,除了 key 在安全硬件中之外,安全硬件强制执行用户身份验证要求意味着什么?

最佳答案

方法 isUserAuthenticationRequirementEnforcedBySecureHardware() 不是 isInsideSecureHardware()isUserAuthenticationRequired() 的逻辑与。

但是如果你深入研究 code ,您可以看到它是 3 件事的逻辑与:

  1. isUserAuthenticationRequired()
  2. 0 个 SW 强制用户验证器
  3. 1 个或多个 HW 强制用户验证器

代码 fragment :

boolean userAuthenticationRequirementEnforcedBySecureHardware = (userAuthenticationRequired)
                && (keymasterHwEnforcedUserAuthenticators != 0)
                && (keymasterSwEnforcedUserAuthenticators == 0);

区别不在于 key 在硬件中是否安全,而在于用户身份验证是否由硬件而不是软件支持。对于大多数(如果不是所有)带有指纹读取器的设备,安全硬件中的用户身份验证意味着 TEE 将包含两个与 Keymaster Trusted App 交互的东西:

  1. Gatekeeper密码/密码/图案的可信应用
  2. Fingerprint值得信赖的指纹认证应用

示例场景:

    如果 isInsideSecureHardware()isUserAuthenticationRequired() 都返回 true,则
  • isUserAuthenticationRequirementEnforcedBySecureHardware() 可能返回 false,但是用户身份验证是在 SW 而不是在 TEE 中完成的。 (不太可能)
  • isUserAuthenticationRequirementEnforcedBySecureHardware() 可以返回 true 如果 isInsideSecureHardware() 返回 false(设备的安全硬件不支持 key )和 isUserAuthenticationRequired() 返回 true 并在 HW 中完成用户身份验证。 (可能)

关于android - isInsideSecureHardware() 和 isUserAuthenticationRequirementEnforcedBySecureHardware() 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48511782/

有关android - isInsideSecureHardware() 和 isUserAuthenticationRequirementEnforcedBySecureHardware() 有什么区别?的更多相关文章

随机推荐