TPM 中的背书密钥和证明身份密钥有什么区别?

信息安全 RSA tpm 可信计算
2021-09-01 19:29:13

我正在尝试记录 TPM 及其作用。更具体地说,我正在查看 3 个 RSA 密钥对:“背书密钥”、“存储根密钥”和“证明身份密钥”。

这是我到目前为止所写的:

“背书密钥”是一个 RSA 密钥对,其中发送到另一台设备的任何数据都使用私钥加密,接收设备使用公钥对其进行解密,因此它知道数据是可信的。这是在制造 TPM 时创建的(不是用户特定的)

“存储根密钥”是 TPM 内的一对 RSA 密钥,用于保护由应用程序创建并存储在 TPM 外部的 TPM 保护密钥,以便在没有 TPM 的情况下无法使用这些密钥。它是在您拥有 TPM 所有权时创建的(如果用户更改,密钥也会更改)

但是,我现在正在尝试研究证明身份密钥的使用,但不明白它与背书密钥有何不同?如果有人能用简单的术语解释,因为这对我来说是全新的,我将不胜感激:)

1个回答

不幸的是,关于证明的事实并没有单一的来源。我会尽量说清楚,并在必要时引用。

TL;DR:背书密钥用于证明您正在与真正的 TPM 交谈。但是,它不能用于签名。AK 可用于签名并与 EK 关联。

背书密钥

您可以考虑每个 TPM 固定的背书密钥 (EK)。实际上,EK 是背书层次结构的主键。因此,它取决于在TPM 的生命周期内真正固定的背书主种子 (EPS) 和所谓的模板,例如确定 EK 是 RSA 还是 ECC 密钥。

              EPS (random, can never be changed)
               |
            +-----+
template  ->| KDF |
            +-----+
               |
               V
               EK

假设您使用默认模板,则 EK 是唯一的,并且对于 TPM 是不可更改的。你永远无法改变它。这引发了隐私问题,我将在后面介绍。另请注意,TPM 永远不会公开 EK 私钥。

此外,TPM 通常提供一个背书证书(链),该证书保存在 TPM 存储中(例如 ECC EK 证书:NV 索引0x01c0000a,请参阅TCG EK 凭据配置文件)。此 EK 证书包含 EK 公钥并由制造商签名。使用该证书,您可以验证 EK 公钥是否与制造商生产的真正硬件 TPM相关联。

我之前提到过,公开 EK 公钥会侵犯我们的隐私(因为我们永远无法更改它)。因此,TPM 将不允许我们使用 EK 进行签名这就是为什么我们需要一个证明密钥 (AK),以前也称为证明身份密钥 (AIK)。

存储根密钥

存储根密钥 (SRK) 很简单。它是所有者层次结构的主键,即“所有(普通)键之父”。TPM 所有者用于签名和加密的所有密钥通常与所有者层次结构相关联,因此与 SRK 的子代(或孙代等)相关联。事实上,作为 SRK 的子节点意味着在内部被 SRK 加密(=包装)。

证明密钥

现在是棘手的部分。证明密钥 (AK) 一词,以前的证明身份密钥 (AIK) 定义非常松散。基本上任何(受限)签名密钥都可以是 AK。

TPM 规范第 1 部分,25.3.1

在本规范中,有时将受限签名密钥称为证明或证明密钥。

AK 的目的是对数据(例如 PCR 值)进行签名,以证明它们来自真实的 TPM(没有被篡改)。请记住,我们不能直接使用 EK 进行签名。

我知道有两种类型的AK。

AK 带 AK 证书

首先, TPM Spec Part 1, 9.5.3.1中指定的 AK 基本上,有一个名为 Attestation CA 的可信第三方,它拥有自己的根密钥和根证书。证明 CA 会 a) 通过其 EK 证书验证 TPM 是否是真实的,并且 b) 如果 TPM 是真实的,则颁发 AK 证书。

现在,不同的 AK 及其对应的 AK 证书可用于不同服务(例如 Google、Facebook)的证明。服务提供商使用 Attestation CA 根证书来验证 TPM 是否真实。

称为“证明 CA”的外部实体证明 TPM 中的非对称密钥对 [ AK ],以保证密钥受身份不明但真实的 TPM 保护并具有特定属性。此证明采用凭证 [ AK 证书] 的形式,用于保证包括密钥对的公钥在内的信息。

通常,这种类型的 AK 与所有者层次结构相关联,因此是 SRK 的子(或孙等)。

我认为本教程可能会有所帮助。

与背书层次结构相关的 AK

AK 有第二种方法。正如我所解释的,EK 不能直接用于签名。但是,它可以用于包装(=加密)其他密钥。因此,您可以创建与背书层次结构关联的签名密钥 (AK)。

同样,服务提供商需要一种机制来证明 TPM 与良好的 EK/EK 证书相关联。在这种情况下,使用的 AK 由 EK 加密(= 包装)。只有当 TPM 可以在其唯一的 EK 下加载(=解密)AK 并使用它来签署数据时,它才是真正的 TPM。在这种情况下,TPM 失去了匿名性,因为服务提供商需要知道它的 EK。

Matthew Garrett 在 LCA 2020 的这次演讲中简要描述了这种方法