首页 > 解决方案 > 如何确保在 TPM 中创建密钥?

问题描述

我需要

我担心的是如何确保密钥是在 TPM 内部创建的,而不是通过欺骗的 TPM 创建的。这将使私钥能够被迁移和复制。

我听说这就是 AIK 的用途,但我不明白这如何防止 TPM 被欺骗?

我能想到的一种解决方案是:我去客户端,使用受信任的操作系统从 USB 引导,然后获取 EKpub。

标签: windowssecuritytpm

解决方案


证明密钥源自 TPM 的过程称为:

  • 对于 TPM 2.0:凭据激活,强制执行TPM2_ActivateCredential
  • 对于 TPM 1.2:身份激活,强制执行TPM_ActivateIdentity

这种技术可以完成很多事情,但其中之一是证明向 TPM 发出请求后生成的密钥实际上来自受信任的 TPM,并且没有被欺骗。对于 TPM 1.2,由于这就是问题所在,身份激活是一个 8 步过程,如下所示(以下是 TCG 的AIK 证书注册的摘录):

  • 第 1 步:平台要求 TPM 创建 AIK 密钥对。

    • (a) 平台(或平台上的应用软件)向 TSS 发出CollateIdentityRequest命令。反过来,TSSMakeIdentity向 TPM 发出命令。这会导致 TPM 生成新的 AIK 公钥对。
    • (b) 在MakeIdentity函数内,TPM 创建IDENTITY_CONTENTS包含以下项目的结构:(i) 结构版本,(ii) TPM 命令序号,(iii)PrivCADigest 标签和 (iv) AIK_pub_key
    • (c) TPMIDENTITY_CONTENTS使用 签名结构AIK_priv_key,生成的签名部分称为identityBinding
    • (d) 作为MakeIdentity命令的结果,TPM 输出两 (2) 项:AIK_pub_keyidentityBinding.
  • 第 2 步:TSS 生成有关 AIK 的证明结构

    • (a) 在上一步之后,TSS 创建IDENTITY_PROOF结构。该结构由以下项目组成: (i)identityBinding来自步骤 1(d) 的结构。(注意: identityBinding结构只是结构上的签名部分 IDENTITY_CONTENTS)。注意:必须注意,该 identityBinding结构不是 AIK 是 TPM 驻留密钥以及 AIK 已使用 EK 认证的加密证明。它仅表明存在某些密钥对。(ii) TPM 规范版本 (iii) SubjectPublicKeyInfo(即AIK_pub_key) (iv) IdentityLabel(v) EK 证书 (vi) 平台证书
    • (b) TSS 然后生成一个对称密钥K1(来自 TPM 的本地随机数)并IDENTITY_PROOF使用这个对称密钥加密结构K1
    • (c) TSS 然后K1使用 ACA 的公钥加密密钥。这种使用认证 CA 的公钥的加密旨在限制K1仅向 ACA 披露。这一步的结果是两项:加密IDENTITY_PROOF结构和加密对称密钥K1。加密IDENTITY_PROOF和加密K1被捆绑到一个IDENTITY_REQ结构中,该结构包括用于加密结构的对称和非对称算法的标识符以及加密结构的大小。
  • 步骤 3:平台向 ACA 发送 AIK 证书请求。平台(或平台上的应用软件)获取 IDENTITY_REQ上一步的结果,对其进行加密,并将其发送给 ACA。
  • 第 4 步:ACA 验证证书请求。收到证书请求后,ACA 必须执行多项验证。
    • (a) 要访问 AIK 证书请求结构,ACA 必须首先K1使用其 ACA 私钥解密密钥。
    • (b) 然后 ACAK1用来解密IDENTITY_PROOF结构。
    • (c) 然后 ACA 必须重新创建IDENTITY_CONTENTS结构并验证签名(由接收到的 表示 identityBinding)是否正确。ACA 可以执行验证,因为它现在具有上面步骤 2 中列出的项目,并且可以组装PrivCADigestLabel提供给 TPM 的相同项目。作为验证的一部分,ACA 应验证收到的证书(即 EK 和平台证书)。预计 ACA 将使用标准 X.509 证书验证技术,例如 CRL 检查 [14] 和/或向 EK 证书颁发者(例如 TPM 制造商站点)查询适当的 OCSP 响应者 [15]。
  • 第 5 步:ACA 颁发新的 AIK 证书。然后,ACA 使用上一步中收到的 AIK 公钥(作为公钥)创建一个新的 AIK 证书。ACA 使用自己的 AIK 签名密钥颁发(签名)新的 AIK 证书。
  • 第 6 步:ACA 加密新的 AIK 证书。在此阶段,ACA 必须以 TPM 可识别的形式准备新颁发的 AIK 证书。作为TPM_ActivateIdentity命令的一部分([5] 的第 15.2 节),TPM 期望输入TPM_EK_BLOB或(旧规范版本)ASYM_CA_CONTENTS结构。ACA 执行以下任务:
    • (a) ACA 生成随机对称加密密钥K2。这个随机K2对于每个 AIK 证书请求都是唯一的。
    • (b) ACA 使用 key 加密新的 AIK 证书K2
    • (c) ACA 然后创建一个TPM_EK_BLOBASYM_CA_CONTENTS(取决于 TPM 版本)结构,其中包含以下内容: (i) AIK 公钥的散列(即在原始请求中找到的 AIK 公钥)。(ii) 对称密钥K2。(iii) 可选的 PCR 信息——仅供TPM_EK_BLOB参考。TPM 检查以确保 TPM PCR 和位置处于 ACA 预期解锁的正确状态K2
    • (d) ACA使用 EK 公钥(在原始请求中的 EK 证书中找到)加密TPM_EK_BLOB或结构。ASYM_CA_CONTENTS最后一步的目的是确保只有同一个请求 TPM 将是唯一可以解密新颁发的 AIK 证书的实体,因为只有 TPM 拥有 EK 私钥(这是 TPM 驻留密钥)。
  • 第 7 步:ACA 将新的 AIK 证书交付给平台上的 TPM。然后,ACA 将加密结果(加密的 AIK 证书 + blob 或 ASYM 结构)传递给请求者平台/TPM。
  • 第 8 步:由 TPM 解密新的 AIK 证书。在收到来自 ACA 的(加密的)AIK 证书后,平台必须输入结构(blob 或 ASYM 结构)(进入 TPM 并使用 TSSTspi_TPM_ActivateIdentity命令激活它。此命令K2从 ACA解密(加密的)对称密钥在确保具有匹配 pub 密钥的 AIK 驻留在 TPM 中后,使用 EK-private-key(仅驻留在 TPM 中),然后使用对称密钥K2解密 AIK 证书。

这里的关键部分是倒数第二句话:

在确保具有匹配公钥的 AIK 驻留在 TPM 中之后,此命令使用 EK-private-key(仅驻留在 TPM 中)从 ACA 解密(加密的)对称密钥 K2 。

规范强制要求 EK 不会解密TPM_EK_BLOB对象,除非在 TPM 中找到请求激活的私钥。并且由于对象是由 TSS 加密的,没有使用 TPM 机密,并且您已经在制造商的 CA 证书链上验证了 EK 公钥,因此可以确保请求身份激活的密钥源自由制造的 TPM一个受信任的实体。


推荐阅读