使用密钥证明验证 Azure 托管 HSM 密钥
密钥证明是 Azure 托管 HSM 的一项功能。 利用密钥证明,就有了一种验证硬件安全模块 (HSM) 中存储的加密密钥的完整性和真实性的方法。 利用密钥证明,各组织可验证是否在受信任的 FIPS 140-3 级别 3 认证 HSM 中生成并存储了密钥,而无需离开 FIPS 边界。 密钥证明可提供密钥得到安全处理的加密证明,从而增强了对密钥管理流程的信任,实现严格安全标准和法规合规性。 在客户需要保证其密钥受到保护、可防止未经授权的访问(甚至来自云提供商)的应用场景中,此功能尤其有用。
先决条件
- AZ CLI 版本:azure-cli 2.62.0 或更高版本。
- API 版本:7.6-preview.1 或更高版本。
- Python 版本:Python 3.8.10 或更高版本。
- 权限:托管 HSM 的加密用户或具有
getkey
权限的自定义角色。
密钥证明过程
密钥证明过程分为六个步骤:
- 从 Marvell 网站和 GitHub 存储库下载 Python 脚本
- 通过 Azure CLI 从 HSM 检索密钥证明数据
- 提取证明 Blob 和证书
- 使用证书链验证密钥的真实性
- 验证证明数据文件
- 分析证明二进制文件的特性
下载 python 脚本
下载密钥证明所需的以下 Python 脚本
- 来自我们 HSM 供应商 Marvell 网站的 verify_attest.py、parse_v2.py
- GitHub 中的 extract_files.py 和 validate_certifiate_chains.py
获取证明数据
使用 Azure CLI az rest 命令从 HSM 获取特定密钥的证明数据。 JSON 文件包含密钥属性、证明 Blob,以及密钥证明所需的所有证书。
用法:
az rest --method get --uri https://<poolname>.managedhsm.chinacloudapi.cn/keys/<poolname>/<keyname>/<keyversion>?api-version=7.6-preview.1 --resource https://managedhsm.chinacloudapi.cn > attestation.json
示例:
az rest --method get --uri https://ContosoHSM.managedhsm.chinacloudapi.cn/keys/ContosoHSM/RSA2048key?api-version=7.6-preview.1 --resource https://managedhsm.chinacloudapi.cn? > ContosoHSMattestation.json
提取证明 Blob 和证书
从来自上述步骤的 JSON 文件中提取证明 Blob 和证书。 非对称密钥将两个二进制文件(后缀为 -pri 和 -pub)作为输出。 对称密钥将只包含一个二进制文件(后缀为 -pri)。
用法:python3 extract_files.py --attestation_json_file <attestation.json> --cert_bundle <cert_file.pem> --attestation_binary_file <attest_data.dat>
示例: python3 extract_files.py --attestation_json_file attestation.json --cert_bundle cert_file.pem --attestation_binary_file attest_data.dat
使用证书链验证密钥的真实性
python 脚本 validate_certificate_chains.py 会构造证书链,以确认密钥由 HSM 供应商根 Marvell 签名。 此外,脚本还会验证是否已使用 Microsoft 签名证书对密钥进行签名
使用情况:python3 validate_certificate_chains.py --cert_bundle_file <cert_bundle cert_file.pem> --marvel_parittion_certificate <marvell_issued_partition_certificate.pem> --microsoft_parittion_certificate <microsoft_issued_partition_certificate.pem>
示例:
python3 validate_certificate_chains.py --cert_bundle_file cert_bundle cert_file.pem --marvel_parittion_certificate marvell_certificate.pem --microsoft_parittion_certificate microsoft_certificate.pem
验证证明数据文件
利用 Python 脚本 verify_attest.py,能够验证证明数据文件 (.dat)。 需要执行此脚本两次,一次用于 Marvell 证书,另一次用于 Azure 证书。
使用情况:python3 verify_attest.py <partition.cert> <attestation.dat>
示例:
python3 verify_attest.py marvell_certificate.pem attest_data.dat-pri
python3 verify_attest.py microsoft_certificate.pem attest_data.dat-pri
python3 verify_attest.py marvell_certificate.pem attest_data.dat-pub
python3 verify_attest.py microsoft_certificate.pem attest_data.dat-pub
分析证明二进制文件的特性
用法:python3 parse_v2.py <attest_data.dat>
示例: python3 parse_v2.py ContosoHSM_attest_data.dat
后续步骤
有关面向管理员的入门教程,请参阅什么是托管 HSM?。
若要详细了解托管 HSM 日志记录的使用情况日志记录,请参阅托管 HSM 日志记录。