我需要
- 在客户端计算机上运行.exe,这将在 TPM 中创建密钥对。
- 然后,我将使用 TPM 生成的密钥对的公钥部分创建 CSR。
我关心的是我如何确保密钥是在 TPM 中创建的,而不是由欺骗的 TPM 创建的。这将使私钥能够被迁移和复制。
我听说这就是AIK的用途,但我不明白这如何防止TPM被欺骗?
我能想到的一个解决方案是:我转到客户端,使用受信任的操作系统从USB启动,然后获取EKpub。
证明密钥源自 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
命令。反过来,TSS 向 TPM 发出MakeIdentity
命令。这会导致 TPM 生成新的 AIK 公钥对。- (b) 在
MakeIdentity
职能范围内,TPM创建包含以下项目的IDENTITY_CONTENTS
结构:(i) 结构版本,(ii) TPM 命令序号,(iii)PrivCADigest
标签和 (iv)AIK_pub_key
.- (c) TPM使用
AIK_priv_key
对结构IDENTITY_CONTENTS
签名,生成的签名部分被引用 作为identityBinding
.- (d) TPM 输出两 (2) 项作为
MakeIdentity
命令的结果:AIK_pub_key
和identityBinding
。第 2 步:TSS 生成有关 AIK 的证明结构
- (a) 继上一步之后,TSS创建了
IDENTITY_PROOF
结构。此结构包括以下内容 项目:(i) 步骤1(d)中的identityBinding
结构。(注:identityBinding
结构是仅在IDENTITY_CONTENTS
结构)。注意:必须注意的是,identityBinding
结构不是 AIK 的加密证明 TPM 驻留密钥,并且 AIK 已使用 EK 进行认证。 它仅表明存在某些密钥对。(二) TPM 规范 版本(三)SubjectPublicKeyInfo
(即AIK_pub_key
)(四)IdentityLabel
(v) EK证书 (vi) 平台证书- (b) 然后,TSS 生成对称密钥
K1
(来自 TPM 的本地随机数),IDENTITY_PROOF
并使用 这个对称键K1
.- (c) 然后,TSS 使用 ACA 的公钥对密钥
K1
进行加密。使用证明 CA 的公钥进行此加密是 旨在将K1
披露仅限于 ACA。的结果 此步骤包括两个项目:加密IDENTITY_PROOF
结构和 加密的对称密钥K1
.加密IDENTITY_PROOF
和 加密K1
捆绑到一个IDENTITY_REQ
结构中, 包括所用对称和非对称算法的标识符 加密结构以及加密结构的大小。- 第 3 步:平台向 ACA 发送 AIK 证书请求。平台(或平台上的应用软件)采用
IDENTITY_REQ
上一步生成的,对其进行加密,然后 将其发送到 ACA。- 第 4 步:ACA 验证证书请求。收到证书请求后,ACA 必须执行多项验证。
- (a) 要访问 AIK 证书请求结构,ACA 必须首先使用其 ACA 私钥解密密钥
K1
。- (b) 然后,ACA 使用
K1
解密IDENTITY_PROOF
结构。- (c) 然后,ACA 必须重新创建
IDENTITY_CONTENTS
结构并验证签名(由收到的签名表示)identityBinding
) 是正确的。ACA 可以执行验证 因为它现在具有上面步骤 2 中列出的项目并且可以组装 与提供给 TPM 的相同PrivCADigestLabel
。作为 验证,ACA预计会验证收到的 证书(即。EK和平台证书)。预计 ACA 将使用标准的 X.509 证书验证技术, 例如 CRL 检查 [14] 和/或查询相应的 OCSP EK证书颁发者的响应者[15](例如TPM 制造商网站)。- 第 5 步:ACA 颁发新的 AIK 证书。然后,ACA 使用(作为公钥)收到的 AIK 公钥创建新的 AIK 证书 在上一步中键。ACA 发布(签署)新的 AIK 使用自己的 AIK 签名密钥的证书。
- 第 6 步:ACA 加密新的 AIK 证书。在此阶段,ACA 必须以表格形式准备新颁发的 AIK 证书 可由 TPM 识别。作为
TPM_ActivateIdentity
命令的一部分 ([5] 的第 15.2 节),TPM 期望在TPM_EK_BLOB
或 (旧规范版本)ASYM_CA_CONTENTS
结构。美国航空工业协会 执行以下任务:
- (a) ACA 生成随机对称加密密钥
K2
。此随机K2
对于每个 AIK 证书请求都是唯一的。- (b) ACA 使用密钥
K2
加密新的 AIK 证书。- (c) 然后,ACA 创建一个
TPM_EK_BLOB
或ASYM_CA_CONTENTS
(取决于 TPM 版本)结构,该结构 包含以下内容:(i) AIK 公钥的哈希(即 在原始请求中找到的 AIK 公钥)。(二) 对称性 关键K2
.(iii) 可选的聚合酶链反应信息——仅供TPM_EK_BLOB
。这 TPM 检查以确保 TPM PCR 和位置位于 ACA 预期的正确状态以解锁K2
。- (d) AC
ASYM_CA_CONTENTS
TPM_EK_BLOB
A 使用 EK 公钥(如 EK 证书中的 EK 证书 原始请求)。最后一步的目的是确保 只有相同的请求 TPM 才能成为唯一可以解密的实体 新颁发的 AIK 证书,因为只有该 TPM 拥有 EK 私钥(即 TPM 驻留密钥)。- 步骤 7:ACA 将新的 AIK 证书交付给平台上的 TPM。然后,ACA 提供加密结果(加密的 AIK 证书 + Blob 或 ASYM 结构)给请求者 平台/TPM。
- 步骤 8:TPM 解密新的 AIK 证书。从 ACA 收到(加密的)AIK 证书后,平台 必须输入结构(blob 或 ASYM 结构)(到 TPM 并使用 TSS
Tspi_TPM_ActivateIdentity
命令激活它。 此命令解密 ACA 中K2
的(加密的)对称密钥 在之后使用 EK 私钥(仅驻留在 TPM 中) 确保具有匹配的发布密钥的 AIK 驻留在 TPM 中。然后它 使用对称密钥K2
解密 AIK 证书。
这里的关键部分是倒数第二句话:
此命令从 ACA 解密(加密的)对称密钥 K2 在之后使用 EK 私钥(仅驻留在 TPM 中)确保具有匹配的发布密钥的 AIK 驻留在 TPM 中。
规范强制规定,除非在 TPM 中找到请求激活的私钥,否则 EK 不会解密TPM_EK_BLOB
对象。由于对象由 TSS 加密,未使用 TPM 机密,并且你已在制造商的 CA 证书链上验证了 EK 公钥,因此可以确保请求标识激活的密钥源自受信任实体制造的 TPM。