你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

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

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

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

注意

此功能不适用于由 21Vianet 运营的 Microsoft 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 Cloud Shell

Azure 托管 Azure Cloud Shell(一个可通过浏览器使用的交互式 shell 环境)。 可以将 Bash 或 PowerShell 与 Cloud Shell 配合使用来使用 Azure 服务。 可以使用 Cloud Shell 预安装的命令来运行本文中的代码,而不必在本地环境中安装任何内容。

若要启动 Azure Cloud Shell,请执行以下操作:

选项 示例/链接
选择代码或命令块右上角的“试用”。 选择“试用”不会自动将代码或命令复制到 Cloud Shell。 Screenshot that shows an example of Try It for Azure Cloud Shell.
转到 https://shell.azure.com 或选择启动 Cloud Shell 按钮可在浏览器中打开 Cloud Shell。 Button to launch Azure Cloud Shell.
选择 Azure 门户右上角菜单栏上的 Cloud Shell 按钮。 Screenshot that shows the Cloud Shell button in the Azure portal

若要使用 Azure Cloud Shell,请执行以下操作:

  1. 启动 Cloud Shell。

  2. 选择代码块(或命令块)上的“复制”按钮以复制代码或命令。

  3. 在 Windows 和 Linux 上选择 Ctrl+Shift+V,或在 macOS 上选择 Cmd+Shift+V 将代码或命令粘贴到 Cloud Shell 会话中。

  4. 选择“Enter”运行代码或命令。

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

az login

若要详细了解通过 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

要生成密钥并将其传输到托管 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 保护的密钥。 有关详细信息,请参阅此价格和功能比较