Android 6.0+有一个KeyInfo
课程,可获取AndroidKeyStore
中保存的密钥的相关信息。在KeyInfo
课程中,我们有isInsideSecureHardware()
和isUserAuthenticationRequirementEnforcedBySecureHardware()
方法。我们还有isUserAuthenticationRequired()
。像往常一样,documentation很糟糕。
基于方法名称和(有限的)文档,似乎isUserAuthenticationRequirementEnforcedBySecureHardware()
只是一个逻辑AND
isInsideSecureHardware()
和isUserAuthenticationRequired()
。
还有什么比这更重要的吗?如果是这样,除了安全硬件中的密钥之外,安全硬件强制执行用户身份验证要求意味着什么?
答案 0 :(得分:2)
方法isUserAuthenticationRequirementEnforcedBySecureHardware()
不是isInsideSecureHardware()
和isUserAuthenticationRequired()
的逻辑与。
但是,如果您深入研究code,您会发现它是3件事的逻辑与:
代码段:
boolean userAuthenticationRequirementEnforcedBySecureHardware = (userAuthenticationRequired)
&& (keymasterHwEnforcedUserAuthenticators != 0)
&& (keymasterSwEnforcedUserAuthenticators == 0);
区别不在于密钥在硬件中是否安全,而是用户认证是由硬件而不是软件来支持的。对于大多数(如果不是全部)具有指纹读取器的设备,安全硬件中的用户身份验证意味着TEE将包含与Keymaster Trusted App交互的两件事:
示例方案:
isUserAuthenticationRequirementEnforcedBySecureHardware()
和isInsideSecureHardware()
都返回true,则isUserAuthenticationRequired()
可能返回 false ,但是用户身份验证是在SW中完成的,而不是在TEE中完成的。 (不太可能)isUserAuthenticationRequirementEnforcedBySecureHardware()
返回false(设备的安全硬件不支持密钥),并且isInsideSecureHardware()
返回true,则isUserAuthenticationRequired()
可能返回 true 硬件(可能)答案 1 :(得分:1)
isUserAuthenticationRequirementEnforcedBySecureHardware()只是isInsideSecureHardware()和isUserAuthenticationRequired()的逻辑AND。
我认为这不是真的(请参阅下面的方法)来自key
的{{1}}。
还有什么比这更重要的吗?
KeyInfo.java
是来自KeyChain
的{{1}}信息的容器类。
key
是否绑定到安全硬件只知道一次导入了KeyChain
。
要了解,请使用:
key
来自KeyInfo.java:
key
另见: KeyStore.java
答案 2 :(得分:1)
isUserAuthenticationRequirementEnforcedBySecureHardware()就是一个 逻辑AND isInsideSecureHardware()和 isUserAuthenticationRequired()。
从给定的文档中,isUserAuthenticationRequirementEnforcedBySecureHardware方法不能是上述两种方法的逻辑AND。
出于观察目的,您可以考虑link这个问题,答案和评论。