你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
将受 HSM 保护的密钥导入 Key Vault (BYOK)
为了提高使用 Azure Key Vault 时的可靠性,可以在硬件安全模块 (HSM) 中导入或生成密钥;该密钥永远不会离开 HSM 边界。 此场景通常被称为创建自己的密钥 (BYOK)。 Key Vault 使用 HSM 的 nCipher nShield 系列(FIPS 140-2 第 2 级验证)来保护密钥。
使用本文中的信息,可帮助规划、生成并传输自己的受 HSM 保护的密钥,以便与 Azure Key Vault 一起使用。
有关详细信息,以及有关如何开始使用 Key Vault 的教程(包括如何为 HSM 保护的密钥创建密钥保管库),请参阅什么是 Azure Key Vault?。
概述
这里是编写过程的概述。 本文后面将介绍要完成的具体步骤。
- 在 Key Vault 中,生成一个密钥(称为密钥交换密钥 (KEK))。 KEK 必须是仅具有
import密钥操作的 RSA-HSM 密钥。 仅 Key Vault 高级 SKU 支持 RSA-HSM 密钥。 - 以 .pem 文件形式下载 KEK 公钥。
- 将 KEK 公钥传输到连接到本地 HSM 的脱机计算机。
- 在脱机计算机中,使用 HSM 供应商提供的 BYOK 工具来创建 BYOK 文件。
- 目标密钥通过 KEK 进行加密,且在传输到 Key Vault HSM 之前一直处于加密状态。 只有加密版本的密钥会离开本地 HSM。
- Key Vault HSM 内生成的 KEK 不可导出。 HSM 执行的规则是 Key Vault HSM 之外不存在 KEK 的明文版本。
- KEK 必须位于将导入目标密钥的同一密钥保管库中。
- 将 BYOK 文件上传到 Key Vault 时,Key Vault HSM 使用 KEK 私钥来解密目标密钥材料,并将其作为 HSM 密钥导入。 此操作完全在 Key Vault HSM 内发生。 目标密钥始终保留在 HSM 保护边界内。
先决条件
下表列出了在 Azure Key Vault 中使用 BYOK 的先决条件:
| 要求 | 更多信息 |
|---|---|
| Azure 订阅 | 若要在 Azure Key Vault 中创建密钥保管库,需要 Azure 订阅。 注册免费试用版。 |
| 用于导入受 HSM 保护的密钥的 Key Vault 高级 SKU | 有关 Azure Key Vault 的服务层级和功能的详细信息,请参阅 Key Vault 定价。 |
| 受支持的 HSM 列表中的 HSM 以及 HSM 供应商提供的 BYOK 工具和说明 | 必须具有 HSM 的权限并掌握如何使用 HSM 的基本知识。 请参阅支持的 HSM。 |
| Azure CLI 2.1.0 或更高版本 | 请参阅安装 Azure CLI。 |
支持的 HSM
| 供应商名称 | 供应商类型 | 支持的 HSM 模型 | 详细信息 |
|---|---|---|---|
| Cryptomathic | ISV(企业密钥管理系统) | 多个 HSM 品牌和型号,包括
|
Cryptomathic BYOK 工具和文档 |
| Entrust | 制造商, HSM 即服务 |
|
nCipher 新的 BYOK 工具和文档 |
| Fortanix | 制造商, HSM 即服务 |
|
将 SDKMS 密钥导出到 BYOK 的云提供程序 - Azure Key Vault |
| IBM | 制造商 | IBM 476x, CryptoExpress | IBM Enterprise Key Management Foundation |
| Marvell | 制造商 | 所有具有以下固件版本的 LiquidSecurity HSM
|
Marvell BYOK 工具和文档 |
| nCipher | 制造商, HSM 即服务 |
|
nCipher 新的 BYOK 工具和文档 |
| Securosys SA | 制造商, HSM 即服务 |
Primus HSM 系列,Securosys Clouds HSM | Primus BYOK 工具和文档 |
| StorMagic | ISV(企业密钥管理系统) | 多个 HSM 品牌和型号,包括
|
SvKMS 和 Azure Key Vault BYOK |
| Thales | 制造商 |
|
Luna BYOK 工具和文档 |
| Utimaco | 制造商, HSM 即服务 |
u.trust Anchor, CryptoServer | Utimaco BYOK 工具和集成指南 |
支持的密钥类型
| 项名 | 密钥类型 | 密钥大小/曲线 | 源 | 说明 |
|---|---|---|---|---|
| 密钥交换密钥 (KEK) | RSA | 2,048 位 3,072 位 4,096 位 |
Azure Key Vault HSM | 在 Azure Key Vault 中生成的由 HSM 支持的 RSA 密钥对 |
| 目标密钥 | ||||
| RSA | 2,048 位 3,072 位 4,096 位 |
供应商 HSM | 要传输到 Azure Key Vault HSM 的密钥 | |
| EC | P-256 P-384 P-521 |
供应商 HSM | 要传输到 Azure Key Vault HSM 的密钥 | |
生成密钥并将其传输到 Key Vault HSM
生成密钥并将其传输到 Key Vault HSM:
步骤 1:生成 KEK
KEK 是在 Key Vault HSM 中生成的 RSA 密钥。 KEK 用于对要导入的密钥(目标密钥)进行加密。
KEK 必须满足以下条件:
- RSA-HSM 密钥(2,048 位;3,072 位;或 4,096 位)
- 在你打算导入目标密钥的同一密钥保管库中生成
- 在允许的关键操作设置为
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 --vault-name ContosoKeyVaultHSM
步骤 2:下载 KEK 公钥
使用 az keyvault key download 将 KEK 公钥下载到 .pem 文件。 导入的目标密钥是使用 KEK 公钥进行加密的。
az keyvault key download --name KEKforBYOK --vault-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 位密钥。 不支持导入带有曲线 P-256K 的椭圆曲线密钥。
已知问题:仅固件版本 7.4.0 或更高版本支持从 Luna HSM 导入 RSA 4K 目标密钥。
步骤 4:将密钥传输到 Azure Key Vault
若要完成密钥导入,请将密钥传输包(BYOK 文件)从断开连接的计算机传输到连接到 Internet 的计算机。 使用 az keyvault key import 命令将 BYOK 文件上传到 Key Vault HSM。
若要导入 RSA 密钥,请使用以下命令。 --kty 参数可选,默认值为“RSA-HSM”。
az keyvault key import --vault-name ContosoKeyVaultHSM --name ContosoFirstHSMkey --byok-file KeyTransferPackage-ContosoFirstHSMkey.byok
若要导入 EC 密钥,必须指定密钥类型和曲线名称。
az keyvault key import --vault-name ContosoKeyVaultHSM --name ContosoFirstHSMkey --byok-file --kty EC-HSM --curve-name "P-256" KeyTransferPackage-ContosoFirstHSMkey.byok
如果上传成功,Azure CLI 将显示导入密钥的属性。
后续步骤
现在可以在密钥保管库中使用此受 HSM 保护的密钥。 有关详细信息,请参阅此价格和功能比较。