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
每月下载量 2,874 次
36KB
680 代码行
az-tdx-vtpm
此库启用了对 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