你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
本文档详细概述了 Azure 机密虚拟机来宾证明设计。
基于 vTPM 的设计
Azure 机密虚拟机 (VM) 利用基于 vTPM 的设计进行来宾证明。 此方法可确保在来宾操作系统(Linux 和 Windows)和硬件平台(AMD SEV-SNP 和 Intel TDX)之间实现一致的接口。
证明流
来宾证明过程涉及两个主要步骤:证据生成和证据验证。 用户请求 Azure 机密虚拟机生成 vTPM 证据,然后将证据发送给受信任方(例如,Microsoft Azure 证明 (MAA))进行验证。
信赖方(例如 Azure 密钥保管库高级版或 Azure 密钥保管库托管 HSM)可以根据验证结果评估 Azure 机密虚拟机的可信度。 如果虚拟机被视为可信,则信赖方可以使用安全密钥发布等机制安全地将机密预配到虚拟机。
vTPM 证据
vTPM 证据由一个 TPM 报价和用于验证报价的认可组成,如本节其余部分所述。
TPM 报价
- 标准 TPM 报价是由 TPM 2.0 规范定义的
TPM2_Quote
命令的输出。 - 包括一个平台配置寄存器 (PCR) 列表,用于捕获来宾操作系统(例如启动过程)的度量值。
- PCR 的使用符合 Linux 和 Windows 标准(每个标准都有其使用定义)。
- 由 vTPM 证明私钥签名 (AK):也就是说,AK 在
TPM2_Quote
命令中指定为签名密钥。
- 标准 TPM 报价是由 TPM 2.0 规范定义的
TPM 事件日志
- 存储在系统中的事件日志,可用于在 TPM 报价中重现 PCR 值。
- 有关更多详细信息,请参阅 TPM 规范。
vTPM AK 证书
- 由 Azure 颁发(由 Azure CA 签名)。
- 由硬件支持(在硬件报告中捕获的 vTPM 证明公钥,即 AK 公钥)。
硬件报告
- 由硬件生成并签名。
- 捕获下列信息
- AK 公钥
- 对其中运行 vTPM 的 Microsoft 生成的来宾 paravisor 进行度量
- 在 Azure 上的机密虚拟机中了解详细信息。
- 硬件信息
- 请参阅 AMD SEV-SNP 和 Intel TDX 规范了解更多详细信息。
硬件供应商证书链
- 由硬件供应商(AMD 和 Intel)颁发,用于认证硬件报告的签名。
- AMD SEV-SNP:版本受控的芯片认可密钥 (VCEK) 证书
- Intel TDX:预配证书密钥 (PCK) 证书
- 由硬件供应商(AMD 和 Intel)颁发,用于认证硬件报告的签名。
vTPM 证据涵盖哪些内容?
组件 | 涵盖者 |
---|---|
来宾 OS | TPM 报价 (PCR) |
UEFI | 硬件报告 |
来宾 Paravisor(包括 vTPM) | 硬件报告 |
如何验证 vTPM 证据?
验证程序(Microsoft Azure 证明 (MAA))基于受信任链对 vTPM 证据进行了验证,如下图所示。 成功的验证意味着经证明的 Azure 机密虚拟机可信且受硬件保护。
开发人员参考
本部分提供了 Azure 机密虚拟机使用的基于 vTPM 的来宾证明设计的参考。
Azure 保留的 TPM NV 索引
名称 | NV 索引 | 大小(字节) | 说明 |
---|---|---|---|
证明报告 | 0x01400001 | 2600 | 嵌入了硬件报表的 Azure 定义格式。 |
报表数据 | 0x01400002 | 64 | 要包含在运行时数据中的报表数据。 |
vTPM AK 证书 | 0x01C101D0 | 4096 | 由 vTPM AK 签名的用于验证 TPM 报价的证书。 |
vTPM AK | 0x81000003 | 取决于密钥类型 | 用于对 TPM 报价进行签名的密钥。 |
有关示例 TPM 命令,请参阅 Azure 机密虚拟机证明指南和常见问题解答。
证明报表格式
证明报告
名称 | 偏移量(字节) | 大小(字节) | 说明 |
---|---|---|---|
标头 | 0 | 32 | 报表标头(未得到硬件报表的认可)。 |
报告有效负载 | 32 | 1184 | 硬件报告。 |
运行时数据 | 1216 | 可变长度 | 运行时数据包括硬件报告认可的声明。 |
标头
名称 | 偏移量(字节) | 大小(字节) | 说明 |
---|---|---|---|
签名 | 0 | 4 | 嵌入的签名。 应为:0x414c4348 (HCLA )。 |
版本 | 4 | 4 | 格式版本。 应为:2。 |
报表大小 | 8 | 4 | 报表有效负载的大小。 应为:1184 (AMD SEV-SNP)、1024 (Intel TDX)。 |
请求类型 | 12 | 4 | 特定于 Azure 的证明报表使用情况。 应为:2。 |
状态 | 16 | 4 | 保留。 |
保留 | 20 | 12 | 保留。 |
报告有效负载
由硬件(AMD SEV-SNP 或 Intel TDX)生成的报告。 报表的 report_data 字段捕获运行时数据中运行时声明的哈希值。 有关更多详细信息,请参阅硬件供应商的规范。
运行时数据
名称 | 偏移量(字节) | 大小(字节) | 说明 | 已度量 |
---|---|---|---|---|
数据大小 | 0 | 4 | 运行时数据的大小。 | 否 |
版本 | 4 | 4 | 格式版本。 应为:1。 | 否 |
报表类型 | 8 | 4 | 硬件报表的类型。 应为:2 (AMD SEV-SNP)、4 (Intel TDX) | 否 |
哈希类型 | 12 | 4 | 用于对运行时数据进行哈希处理的算法。 在硬件报告的 report_data 字段中捕获的哈希值。 应为:1 (SHA-256)、2 (SHA-384)、3 (SHA-512) | 否 |
索赔规模 | 16 | 4 | 运行时声明的大小。 | 否 |
运行时声明 | 20 | 可变长度 | JSON 格式的运行时声明。 | 是 |
运行时声明
JSON 字段 | 说明 |
---|---|
密钥 | JWK 格式的键数组。 应为kid :HCLAkPub (vTPM AK 公钥)、HCLEkPub (vTPM EK 公钥)。 |
虚拟机配置 | 选择性 Azure 机密虚拟机配置。 |
用户数据 | 从 0x01400002 NV 索引(报表数据)中读取的 64 字节数据(HEX 字符串)。 |
示例
{
"keys": [
{
"kid": "HCLAkPub",
"key_ops": [
"sign"
],
"kty": "RSA",
"e": "AQAB",
"n": "rAipdAAArL6V1FNnSQ-39i3VH-a8PuOeVRo2VpecspDWbJNmgHJ4-VGGFEx4sdVbvDC6fyo_VM2ebE-_AKxTmrNVEr-KIZveJMD_vlOqvMvjtllsWwA-vsRfpqiduvQdFcdCvyHzfxBRHYqdmxgKq-3QI-XBbZv9cCMMMPHkNp4mWkyahjQxXVJVwB1egCrJGKSk1bRXlP1dXNG_Pe4-W5O-YEGRKdLIA31G0Yh8VBnrEUCAMjDAuh6fncMkwdMVskI5Ta-kJgGw4GepIj6_smIyYhxg3o8Ik4qPntxj1TrV0bVW2IiNMLHoM67y1ErOir7bv00xqgqouFodI-vM3Q"
},
{
"kid": "HCLEkPub",
"key_ops": [
"encrypt"
],
"kty": "RSA",
"e": "AQAB",
"n": "m3AfPAAA-_HY3M_-x4bQbr0p2nkvAgig1mENl-BColvqq0aKKAqIHr-DFQ9-iB2z7EzhYVon5R7Nc1jzqBsmxahE8uaQfD-sp8bWOtbvy4V9nAqLY4HOwfxlJ99cEOOpxNXfCNesYOk8T0ntG05w7oBRjFw0LMVKS-1S3j5-oMnNnpJoo7rX5hNM8JVpxEuVa1IOf1NmvRey6wjwSHbjUay_IMUTAq1wzpx8wo_hjeY4JMd0Ka1ewLjJDaTQSpSxZI36ujyR6EGho0FBXSKN-9W9DAXkO8-RKuLUrmTXA6ETJRYApMuYGiUDCk1Y5zQTQsyWS6pLjnf2mg2tEntZZw"
}
],
"vm-configuration": {
"root-cert-thumbprint": "",
"console-enabled": true,
"secure-boot": true,
"tpm-enabled": true,
"tpm-persisted": true,
"vmUniqueId": "68dc0ac0-2ed9-4b2a-a03e-4953e416d939"
},
"user-data": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
}