免责声明:我不是 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 似乎通过对两者使用相同的键来简化这种情况。