#azure #tdx #tpm #virtualization

bin+lib az-tdx-vtpm

基于 vTPM 的 TDX 审证,适用于 Azure 机密虚拟机

7 个版本

0.6.0 2024 年 7 月 8 日
0.5.3 2024 年 5 月 14 日
0.5.2 2024 年 2 月 23 日
0.5.1 2024 年 1 月 26 日
0.4.0 2023 年 11 月 28 日

加密学 中排名第 902

Download history 207/week @ 2024-05-02 471/week @ 2024-05-09 298/week @ 2024-05-16 315/week @ 2024-05-23 588/week @ 2024-05-30 500/week @ 2024-06-06 654/week @ 2024-06-13 769/week @ 2024-06-20 260/week @ 2024-06-27 448/week @ 2024-07-04 284/week @ 2024-07-11 436/week @ 2024-07-18 876/week @ 2024-07-25 488/week @ 2024-08-01 740/week @ 2024-08-08 567/week @ 2024-08-15

每月下载量 2,874

MIT 许可证

36KB
680 代码行

az-tdx-vtpm

Rust Crate Docs

此库启用了对 Azure 上 TDX CVM 的客户端认证和验证。

构建与安装

cargo b --release -p az-tdx-vtpm
scp ../target/release/tdx-vtpm azureuser@$CONFIDENTIAL_VM:

运行二进制文件

在 TDX CVM 上检索 TD 报告并将其写入磁盘

sudo ./tdx-vtpm

lib.rs:

此库启用对 Azure 上 TDX CVM 的客户端认证流程。

可以使用 report::get_report() 函数以解析形式检索 TD 报告,或使用 vtpm::get_report() 以包含 hcl 封装的原始字节数据。库提供了一个函数,用于使用 imds::get_td_quote() 从 Azure 实例元数据服务 (IMDS) 获取 TD 报告,并返回由 TDX 报价恩杰签署的报价。

可变数据是 HCL 封装的一部分,并包含 vTPM 认证密钥 (AK) 的公共部分。可变数据块的哈希值包含在 TD 报告中作为 reportdata。使用 vtpm::get_quote() 获取的 TPM 报价应由此 AK 签署。验证函数需要检查此内容以确保 TD 报告与该独特的 TDX CVM 链接。

use az_tdx_vtpm::{hcl, imds, report, tdx, vtpm};
use openssl::pkey::{PKey, Public};
use std::error::Error;

fn main() -> Result<(), Box<dyn Error>> {
  let td_report = report::get_report()?;
  let td_quote_bytes = imds::get_td_quote(&td_report)?;
  std::fs::write("td_quote.bin", td_quote_bytes)?;

  let bytes = vtpm::get_report()?;
  let hcl_report = hcl::HclReport::new(bytes)?;
  let var_data_hash = hcl_report.var_data_sha256();
  let ak_pub = hcl_report.ak_pub()?;

  let td_report: tdx::TdReport = hcl_report.try_into()?;
  assert!(var_data_hash == td_report.report_mac.reportdata[..32]);
  let nonce = "a nonce".as_bytes();

  let tpm_quote = vtpm::get_quote(nonce)?;
  let der = ak_pub.key.try_to_der()?;
  let pub_key = PKey::public_key_from_der(&der)?;
  tpm_quote.verify(&pub_key, nonce)?;

  Ok(())
}

依赖关系

~12–24MB
~373K SLoC