将受 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 命令,必须准备好以下各项:
- Azure 订阅。 如果没有 Azure 订阅,可注册一个试用版订阅。
- Azure CLI 版本 2.12.0 或更高版本。 运行
az --version
即可查找版本。 如需进行安装或升级,请参阅安装 Azure CLI。 - 订阅中的支持的 HSM 列表中的一个托管 HSM。 请参阅快速入门:使用 Azure CLI 预配和激活托管 HSM,预配和激活托管 HSM。
若要使用 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 品牌和型号,包括
|
|
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 工具和文档 |
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-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 保护的密钥。 有关详细信息,请参阅此价格和功能比较。