使用密钥证明验证 Azure 托管 HSM 密钥

密钥证明是 Azure 托管 HSM 的一项功能。 它允许验证存储在硬件安全模块(HSM)中的加密密钥的完整性和真实性。 它允许组织验证密钥是否已生成并存储在受信任的 FIPS 140-3 级别 3 认证的 HSM 中,而无需离开 FIPS 边界。 密钥证明可提供密钥得到安全处理的加密证明,从而增强了对密钥管理流程的信任,实现严格安全标准和法规合规性。 在客户需要保证其密钥受到保护、可防止未经授权的访问(甚至来自云提供商)的应用场景中,此功能尤其有用。

先决条件

  • AZ CLI 版本(2.73.0 或更高版本):运行 az --version 以检查版本。 如需进行安装或升级,请参阅安装 Azure CLI
  • Python 版本 (3.13.2 或更高版本):运行python3 --version以检查版本。
  • Pip3 版本(24.3.1 或更高版本):运行 pip3 --version 来检查版本。
  • 权限:托管 HSM 的加密用户或具有 getkey 权限的自定义角色

下载或克隆 GitHub 存储库

下载或克隆 GitHub 存储库 ,其中包含密钥证明所需的所有文件。

设置虚拟环境并安装所需的 Python 包

设置虚拟环境并从中安装所需的 Python 包 requirements.txt。 在此示例中,我们将虚拟环境命名为“证明”。 请确保此时位于步骤 1 中下载或克隆的存储库中。 如果使用 Windows,请使用命令提示符。

python3 -m venv attestation
attestation\Scripts\activate.bat
pip3 install -r requirements.txt
cd src/

从 HSM 获取特定密钥的证明数据

使用 Azure CLI az keyvault key get-attestation 命令从 HSM 获取特定密钥的证明数据。 密钥版本的包含是可选的。 JSON 文件包含密钥属性、证明 Blob 和密钥证明所需的所有证书。 在此示例中,JSON 文件命名 attestation.json为 。

用法:

az keyvault key get-attestation --hsm-name <poolname> --name <keyname> --version <keyversion> --file <filename>.json

az keyvault key get-attestation --id https://<poolname>.managedhsm.chinacloudapi.cn/keys/<keyname>/<keyversion> --file <filename>.json

例子:

  • 对于名为 contosokey 的 HSM 中名为 contoso 的密钥:

    az keyvault key get-attestation --hsm-name contoso --name contosokey --file attestation.json
    

      az keyvault key get-attestation --id https://contoso.managedhsm.chinacloudapi.cn/keys/contosokey --file attestation.json
    
  • 对于名为 contosokey 的 HSM 中名为 contoso 的密钥,拥有特定密钥版本 48293232e672449b9008602b80618

    az keyvault key get-attestation --hsm-name contoso --name contosokey --version 48293232e672449b9008602b80618 --file attestation.json
    

      az keyvault key get-attestation --id https://contoso.managedhsm.chinacloudapi.cn/keys/contosokey/48293232e672449b9008602b80618 --file attestation.json
    

验证证明数据

Python 脚本 validate_attestation.py 从 JSON 文件中提取证明 Blob 和证书。 它构造证书链,以确认密钥是由 Marvell(HSM 供应商的根)签名的,并验证该密钥是否已使用Microsoft签名的证书进行签名。 它还分析证明二进制文件的属性并输出结果。 非对称密钥同时接收公钥和私钥证明,而对称密钥仅接收私钥证明。 一个可选参数 --v--verbose 也可以包含用于查看证书链的属性以及有关密钥属性的其他信息。

用法:

python3 validate_attestation.py -af <attestation.json>

例子

  • 没有详细模式:

    python3 validate_attestation.py -af attestation.json
    
  • 有详细模式:

    python3 validate_attestation.py -af attestation.json --v
    

在详细模式下运行时,可以看到我们如何建立证书链的验证,以及哪些证书用于验证 Marvell 和 Microsoft 声明 Blob 的完整性。

可以使用 /src/vendor/marvell/marvell_validate_key_attestation.py 验证我们使用的证书。

后续步骤