首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何检查Android手机是否支持TEE?

如何检查Android手机是否支持TEE?
EN

Stack Overflow用户
提问于 2020-04-15 09:48:58
回答 2查看 2.7K关注 0票数 7

我读过这两篇文章:,但我仍然有疑问。

我使用KeyStore (Android 9)生成AES密钥,并使用isInsideSecureHardware()方法检查密钥是否为KeyStore。我得到了返回False。示例代码可以找到这里这里

公共布尔isInsideSecureHardware () 如果密钥驻留在安全硬件中(例如,可信执行环境(TEE)或安全元素(SE)),则返回true。此类密钥的关键材料仅在安全硬件内部以明文形式提供,不在此之外公开。

因此,我想进一步确认我的手机设备(华为P20)是否支持TEE。

问题:

  1. 如果手机支持TEE,KeyStore生成的密钥将自动存储到TEE中?我需要在Java中进行手动配置吗?我听说,只要您使用KeyStore.getInstance()KeyGenerator .getInstance(算法,KeyStore名称),键就会自动存储在TEE中。但我不确定这是不是真的?
  2. 如果isInsideSecureHardware()的答案是“需要手动配置”,那么它就成为Q1返回False的原因,对吗?如果Q1的答案是“自动”,则忽略Q2。
  3. 有什么方法可以直接检查手机是否支持TEE,在Java中?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-15 10:02:14

来自Android密钥存储系统文档:

支持运行Android9(APILevel28)或更高版本的设备可以有一个StrongBox密钥母版,这是驻留在硬件安全模块中的Keymaster HAL的一个实现。该模块包含以下内容: ..。 *安全储存。 ..。 当检查存储在StrongBox密钥管理器中的密钥时,系统会通过可信的执行环境(TEE)来验证密钥的完整性。 ..。 在使用KeyStore类生成或导入密钥时,可以通过将true传递给setIsStrongBoxBacked()方法来指示将密钥存储在StrongBox密钥母版中的首选项。

根据我的理解,这意味着当您为密钥配置生成一个密钥并调用keyGenParameterSpecBuilder.setIsStrongBoxBacked(true)时,您可以确保它是由一个TEE支持的。如果没有可用的TEE,它将抛出一个StrongBoxUnavailableException

因此,要检查是否有可用的TEE,只需尝试以这种方式生成一个密钥,并查看它是否有效。

票数 3
EN

Stack Overflow用户

发布于 2020-10-19 06:16:02

@JensV是正确的:如果在setIsStrongBoxBacked上设置keyGenParameterSpecBuilder,如果不支持StrongBoxUnavailableException,则密钥生成将失败。但是,中间的情况--有一个TEE (即在安全HW中生成和使用密钥),但不支持StrongBox --更难分辨。

通常,方法是在设备上实际生成一个密钥,然后执行在服务器上的HW密钥认证 --查阅已签名的密钥属性,以检查HW支持的确切程度:

  • 在服务器上生成一个当前(随机字节字符串),将其传递给设备。
  • 在设备上生成一个密钥,通过在setAttestationChallenge构建器上调用KeyGenParameterSpec并传入从服务器获得的值来请求HW认证(不要使用在设备上产生的nonce )
  • 从Android密钥商店请求密钥的认证链
  • 将认证数据(cert链)传递给服务器。
  • 验证服务器上的认证(签名)链
  • 确认根证书与已发布的Google根证书匹配。
  • 确认链中没有证书被撤销(请对照CRL @https://android.googleapis.com/attestation/status检查)
  • 检查的Google认证扩展(OID 1.3.6.1.4.1.11129.2.1.17)的属性
    • 确认当前匹配(attestationChallenge)
    • 咨询attestationSecurityLevel of KeyDescription

代码语言:javascript
运行
复制
SecurityLevel ::= ENUMERATED {
    Software  (0),
    TrustedEnvironment  (1),
    StrongBox  (2),
}

TrustedEnvironmentStrongBox都与硬件支持的密钥和密码操作相对应.

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61225795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档