Azure Key Vault托管 HSM 支持导入在本地硬件安全模块(HSM)中生成的密钥。 密钥永远不会离开 HSM 保护边界。 此方案通常称为自带密钥(BYOK)。 托管 HSM 使用 Marvell LiquidSecurity HSM 适配器(FIPS 140-3 级别 3 验证)来保护密钥。
本文中的信息有助于规划、生成并传输自己的受 HSM 保护的密钥,以便与托管 HSM 一起使用。
注意
此导入方法仅适用于支持的 HSM。
有关详细信息,以及有关开始使用托管 HSM 的教程,请参阅 什么是托管 HSM?
概述
这里是该过程的概述。 本文后面将介绍要完成的具体步骤。
- 在托管 HSM 中,生成密钥(称为 Key Exchange 密钥(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命令,必须具有以下项:
- Azure 服务订阅。 如果没有订阅,可以注册一个试用订阅。
- Azure CLI版本 2.12.0 或更高版本。 运行
az --version即可查找版本。 如果需要安装或升级,请参阅 安装 Azure CLI。 - 您订阅中支持的 HSM 列表中的一个托管 HSM。 请参阅 Quickstart:使用 Azure CLI 预配和激活托管 HSM 来预配和激活托管 HSM。
若要使用 CLI 登录到Azure,请键入:
az login
有关通过 CLI 的身份验证选项的详细信息,请参阅 sign with Azure CLI。
支持的 HSM
| 供应商名称 | 供应商类型 | 支持的 HSM 模型 | 详细信息 |
|---|---|---|---|
| Cryptomathic | ISV(企业密钥管理系统) | 多个 HSM 品牌和型号,包括
|
|
| 委托 | 制造商, HSM 服务化 |
|
nCipher 新款 BYOK 工具和文档 |
| Fortanix | 制造商, HSM 服务化 |
|
将 SDKMS 密钥导出到 BYOK 云提供商 - Azure Key Vault |
| IBM | 制造商 | IBM 476x、CryptoExpress | IBM Enterprise Key Management Foundation |
| Marvell | 制造商 | 所有具有以下固件版本的 LiquidSecurity HSM
|
Marvell 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, 加密服务器 | 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)。 (你将在 `
az keyvault key create --kty RSA-HSM --size 4096 --name KEKforBYOK --ops import --hsm-name <hsm-name>
步骤 2:下载 KEK 公钥
使用 az keyvault key download 将 KEK 公钥下载到 .pem 文件。 导入的目标密钥是使用 KEK 公钥进行加密的。
az keyvault key download --name KEKforBYOK --hsm-name <hsm-name> --file KEKforBYOK.publickey.pem
将 KEKforBYOK.publickey.pem 文件传输到脱机计算机。 在下一步中需要此文件。
步骤 3:生成并准备要传输的密钥
若要下载并安装 BYOK 工具,请参阅 HSM 供应商的文档。 按照 HSM 供应商的说明生成目标密钥,然后创建密钥传输包(BYOK 文件)。 BYOK 工具使用kid步骤 1 和KEKforBYOK.publickey.pem步骤 2 中下载的文件在 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 <hsm-name> --name <key-name> --byok-file KeyTransferPackage-<key-name>.byok
如果上传成功,Azure CLI显示导入密钥的属性。
后续步骤
现在可以在托管 HSM 中使用此受 HSM 保护的密钥。 有关详细信息,请参阅此价格和功能比较。