在 Windows 7 中获取 TPM 的所有权时,SRK 如何从密码中派生?

信息安全 加密 密码 视窗 可信计算
2021-08-14 21:34:57

当您在 Windows 7 中获得 TPM 的所有权时,您会遇到如下屏幕:

在此处输入图像描述

根据本文档,我的理解是,完成此对话框会以某种方式导致基于密码生成存储根密钥 (SRK):

存储根密钥:存储根密钥 (SRK) 用于包装 TPM 受保护的密钥,这些密钥可以存储在 TPM 之外。这在外部存储设备(如硬盘驱动器)上构建了图 4 中表示的密钥层次结构。SRK 嵌入到 TPM 中,并在获取平台逻辑所有权的过程中生成。它可以通过创建一个新的平台所有者来重新生成,该所有者会破坏以前的密钥层次结构及其包含的所有数据和密钥。

这提出了以下问题:

  1. SRK是如何从密码中得出的?
  2. SRK 是如何存储的?
  3. 如果 SRK 以某种方式受到损害,那么从 SRK 中获取密码的难易程度如何?
2个回答

免责声明:我不是 TPM 专家——其中大部分来自半小时的研究。我已经设法从 TCG TPM 规范、MSDN 上的 TPM API 文档以及有关该主题的各种论文中拼凑出对流程和细节的合理理解。


SRK 是一个 RSA 密钥对(至少 2048 位大小),用作 TPM 中信任链的根。它充当信任的最终权威。如果将辅助 RSA 密钥加载到 TPM 并使用 SRK 签名,则该密钥被归类为受信任,并且可以通过该信任链加载使用该密钥签名的其他材料。SRK 不是从密码派生的 - 它是在硬件中生成的 RSA 密钥。

当获得 TPM 的所有权时,该过程涉及两件事:一是生成 SRK,二是存储所有者身份验证密钥一旦设置,此密钥将用于在未来的会话中验证所有者用户,通常通过基于 HMAC 的交换。

TPM 的可信计算组 (TCG) 规范未指定如何创建此机密,但 Windows 使用 UTF-16LE 编码密码的 SHA1 哈希,排除字符串的空终止符 ( source )。如果您能够从 TPM 检索所有者身份验证密码,您将能够像破解任何其他 SHA1 哈希密码一样快速地破解它,例如通过 oclHashcat。仅捕获身份验证交换(使用秘密作为密钥的挑战值的 HMAC)不足以破解身份验证秘密,因为挑战值是由 TPM 生成的。

SRK 使用两种不同的加密方法之一以加密格式存储在 TPM 中。如果使用授权数据插入协议 (ADIP),则可以使用 AES-128-CTR 或简单的 XOR 对 SRK 进行加密。如果不使用 ADIP,则 XOR 是规范定义的唯一方法。因此,系统需要计算自己的密钥,并将辅助信息(例如 IV)存储在 TPM 的非保护区内。再次,加密密钥的创建完全依赖于操作系统。

按理说,不同的密钥可用于所有权内部加密,即 SRK 密钥和所有者密钥。但是,Windows 似乎通过对两者使用相同的键来简化这种情况。

我意识到这是一个旧线程,但仍然......

这提出了以下问题:

  1. SRK是如何从密码中得出的?
  2. SRK 是如何存储的?
  3. 如果 SRK 以某种方式受到损害,那么从 SRK 中获取密码的难易程度如何?
  1. 它不是。SRK 由 TPM 使用板载随机数生成器生成。密码用于授权 SRK 操作。
  2. 密码和 SRK 都存储在 TPM NVRAM 中。SRK 的另一半从未离开 TPM。
  3. 这有两个半答案,取决于你的意思。
    1. SRK 的私人部分很难妥协:除非 NSA 是你的对手(即使那样),你基本上可以假设这不会发生。这样做需要电子显微镜或破坏 RSA。
    2. 如果密码被泄露,它允许远程方在此 TPM 上授权 SRK 操作他们没有得到 SRK 本身,因为 SRK 不是从它派生的。

注意:有传言称 NSA 能够通过电源攻击破解 TPM 持有的私钥。这种攻击仍然需要对机器进行物理访问;它不能远程安装。