将受 HSM 保护的密钥导入托管 HSM (BYOK)

Azure Key Vault 托管 HSM 支持导入在本地硬件安全模块 (HSM) 中生成的密钥;该密钥永远保存在 HSM 保护边界中。 此场景通常被称为创建自己的密钥 (BYOK)。 托管 HSM 使用 Marvell LiquidSecurity HSM 适配器(经 FIPS 140-2 级别 3 验证)来保护密钥。

本文中的信息有助于规划、生成并传输自己的受 HSM 保护的密钥,以便与托管 HSM 一起使用。

注意

此功能不适用于世纪互联运营的 Azure。 此导入方法仅适用于支持的 HSM

若要了解详细信息以及关于如何开始使用托管 HSM 的教程,请参阅什么是托管 HSM?

概述

这里是编写过程的概述。 本文后面将介绍要完成的具体步骤。

  • 在托管 HSM 中,生成一个密钥(称为密钥交换密钥 (KEK))。 KEK 必须是仅具有 import 密钥操作的 RSA-HSM 密钥。
  • 以 .pem 文件形式下载 KEK 公钥。
  • 将 KEK 公钥传输到连接到本地 HSM 的脱机计算机。
  • 在脱机计算机中,使用 HSM 供应商提供的 BYOK 工具来创建 BYOK 文件。
  • 目标密钥通过 KEK 进行加密,且在传输到托管 HSM 之前一直处于加密状态。 只有加密版本的密钥会离开本地 HSM。
  • 在托管 HSM 内生成的 KEK 不可导出。 HSM 会执行一项规则,确保在托管 HSM 之外不存在 KEK 的明文版本。
  • KEK 必须位于将导入目标密钥的同一托管 HSM 中。
  • 将 BYOK 文件上传到托管 HSM 时,托管 HSM 使用 KEK 私钥来解密目标密钥材料,并将其作为 HSM 密钥导入。 此操作完全在 HSM 内发生。 目标密钥始终保留在 HSM 保护边界内。

先决条件

若要使用本文中的 Azure CLI 命令,必须准备好以下各项:

若要使用 CLI 登录到 Azure,请键入:

az cloud set -n AzureChinaCloud
az login
# az cloud set -n AzureCloud   //means return to Public Azure.

若要详细了解通过 CLI 使用的登录选项,请参阅使用 Azure CLI 登录

支持的 HSM

供应商名称 供应商类型 支持的 HSM 模型 详细信息
Cryptomathic ISV(企业密钥管理系统) 多个 HSM 品牌和型号,包括
  • nCipher
  • Thales
  • Utimaco
有关详细信息,请参阅 Cryptomathic 站点
Entrust 制造商,
HSM 即服务
  • HSM 的 nShield 系列
  • nShield 即服务
nCipher 新的 BYOK 工具和文档
Fortanix 制造商,
HSM 即服务
  • 自防御密钥管理服务 (SDKMS)
  • Equinix SmartKey
将 SDKMS 密钥导出到 BYOK 的云提供程序 - Azure Key Vault
IBM 制造商 IBM 476x, CryptoExpress IBM Enterprise Key Management Foundation
Marvell 制造商 所有具有以下固件版本的 LiquidSecurity HSM
  • 固件版本 2.0.4 或更高版本
  • 固件版本 3.2 或更高版本
Marvell BYOK 工具和文档
Securosys SA 制造商,HSM 即服务 Primus HSM 系列,Securosys Clouds HSM Primus BYOK 工具和文档
StorMagic ISV(企业密钥管理系统) 多个 HSM 品牌和型号,包括
  • Utimaco
  • Thales
  • nCipher
请参阅 StorMagic 站点以了解详细信息
SvKMS 和 Azure Key Vault BYOK
Thales 制造商
  • 固件版本为 7.3 或更高版本的 Luna HSM 7 系列
Luna BYOK 工具和文档
Utimaco 制造商,
HSM 即服务
u.trust Anchor, CryptoServer Utimaco BYOK 工具和集成指南

支持的密钥类型

项名 密钥类型 密钥大小/曲线 说明
密钥交换密钥 (KEK) RSA-HSM 2,048 位
3,072 位
4,096 位
托管的 HSM 在托管 HSM 中生成的由 HSM 支持的 RSA 密钥对
目标密钥
RSA-HSM 2,048 位
3,072 位
4,096 位
供应商 HSM 要传输到托管 HSM 的密钥
EC-HSM P-256
P-384
P-521
供应商 HSM 要传输到托管 HSM 的密钥
对称密钥 (oct-hsm) 128 位
192 位
256 位
供应商 HSM 要传输到托管 HSM 的密钥

生成密钥并将其传输到托管 HSM

步骤 1:生成 KEK

KEK 是在托管 HSM 中生成的 RSA 密钥。 KEK 用于对要导入的密钥(目标密钥)进行加密。

KEK 必须满足以下条件:

  • RSA-HSM 密钥(2,048 位;3,072 位;或 4,096 位)
  • 在你打算导入目标密钥的同一托管 HSM 中生成
  • 在允许的关键操作设置为 import 的情况下创建

注意

KEK 必须将“import”作为唯一允许的密钥操作。 “import”与所有其他密钥操作是互斥的。

使用 az keyvault key create 命令创建将密钥操作设置为 import 的 KEK。 记录从以下命令返回的密钥标识符 (kid)。 (你将在步骤 3 中使用 kid 值。)

az keyvault key create --kty RSA-HSM --size 4096 --name KEKforBYOK --ops import --hsm-name ContosoKeyVaultHSM

步骤 2:下载 KEK 公钥

使用 az keyvault key download 将 KEK 公钥下载到 .pem 文件。 导入的目标密钥是使用 KEK 公钥进行加密的。

az keyvault key download --name KEKforBYOK --hsm-name ContosoKeyVaultHSM --file KEKforBYOK.publickey.pem

将 KEKforBYOK.publickey.pem 文件传输到脱机计算机。 下一步需要用到该文件。

步骤 3:生成并准备要传输的密钥

请参阅 HSM 供应商的文档,下载并安装 BYOK 工具。 按照 HSM 供应商提供的说明生成目标密钥,然后创建密钥传输包(BYOK 文件)。 BYOK 工具将使用步骤 1 中的 kid步骤 2 中下载的 KEKforBYOK.publickey.pem 文件在 BYOK 文件中生成加密的目标密钥。

将 BYOK 文件传输到连接的计算机。

注意

不支持导入 RSA 1,024 位密钥。 支持导入 EC-HSM P256K 密钥。

已知问题:仅固件版本 7.4.0 或更高版本支持从 Luna HSM 导入 RSA 4K 目标密钥。

步骤 4:将密钥传输到托管 HSM

若要完成密钥导入,请将密钥传输包(BYOK 文件)从断开连接的计算机传输到连接到 Internet 的计算机。 使用 az keyvault key import 命令将 BYOK 文件上传到托管 HSM。

az keyvault key import --hsm-name ContosoKeyVaultHSM --name ContosoFirstHSMkey --byok-file KeyTransferPackage-ContosoFirstHSMkey.byok

如果上传成功,Azure CLI 将显示导入密钥的属性。

后续步骤

现在可以在托管 HSM 中使用此受 HSM 保护的密钥。 有关详细信息,请参阅此价格和功能比较