isInsideSecureHardware()和isUserAuthenticationRequirementEnforcedBySecureHardware()之间有什么区别?

Com*_*are 13 android android-keystore

Android 6.0+有一个KeyInfo类来获取保存在密钥中的密钥的信息AndroidKeyStore.在KeyInfo课堂上,我们拥有isInsideSecureHardware()isUserAuthenticationRequirementEnforcedBySecureHardware()方法.我们也有isUserAuthenticationRequired().该文件,像往常一样,很烂.

基于方法名和(有限)的文件,它会看起来好像isUserAuthenticationRequirementEnforcedBySecureHardware()是一个简单的逻辑和 isInsideSecureHardware()isUserAuthenticationRequired().

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

Ste*_*etz 7

该方法isUserAuthenticationRequirementEnforcedBySecureHardware()不是 和 的逻辑isInsideSecureHardware()isUserAuthenticationRequired()

但如果你深入研究代码,你会发现它是三件事的逻辑与:

  1. isUserAuthenticationRequired()
  2. 0 软件强制用户验证器
  3. 1 个或多个硬件强制用户身份验证器

代码片段:

boolean userAuthenticationRequirementEnforcedBySecureHardware = (userAuthenticationRequired)
                && (keymasterHwEnforcedUserAuthenticators != 0)
                && (keymasterSwEnforcedUserAuthenticators == 0);
Run Code Online (Sandbox Code Playgroud)

区别不在于密钥在硬件中是否安全,而在于用户身份验证是否由硬件而不是软件支持。对于大多数(如果不是所有)带有指纹读取器的设备来说,安全硬件中的用户身份验证意味着 TEE 将包含与 Keymaster 可信应用程序交互的两个内容:

  1. 用于密码/密码/图案的网守可信应用程序
  2. 用于指纹认证的指纹可信应用程序

示例场景:

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