密钥类型、算法和操作(托管 HSM)

托管 HSM 支持 RSA、椭圆曲线和对称 (AES) 密钥。 所有密钥均受 HSM 保护。 有关高级概述,请参阅 关于托管 HSM 中的密钥

下表汇总了托管 HSM 中支持的密钥类型和算法。

键类型/大小/曲线 加密/解密
(包装/解包)
签名/验证
EC-P256、EC-P256K、EC-P384、EC-P521 NA ES256
ES256K
ES384
ES512
RSA 2K、3K、4K RSA-OAEP-256
[不建议]RSA1_5
[不建议] RSA-OAEP
PS256
PS384
PS512
RS256
RS384
RS512
RSNULL
oct 128 位、192 位、256 位 AES-KW
AES-GCM
AES-CBC
HS256
HS384
HS512

EC 算法

EC-HSM 密钥支持以下算法标识符。

曲线类型

签名/验证

  • ES256 — 用于 SHA-256 摘要和使用 P-256 曲线创建的密钥的 ECDSA。 RFC7518中所述
  • ES256K — 用于 SHA-256 摘要和使用 P-256K 曲线生成的密钥的 ECDSA。 待标准化。
  • ES384 — 用于 SHA-384 摘要和使用 P-384 曲线生成的密钥的 ECDSA。 RFC7518中所述
  • ES512 — 用于 SHA-512 摘要以及使用 P-521 曲线创建的密钥的 ECDSA。 RFC7518中所述

RSA 算法

RSA-HSM 密钥支持以下算法标识符。

包装密钥/解包密钥、加密/解密

  • RSA-OAEP-256 — 采用最优非对称加密填充(OAEP)的 RSAES,使用 SHA-256 哈希函数以及基于 SHA-256 的 MGF1 掩码生成函数。
  • [不建议] RSA1_5 — RSAES-PKCS1-V1_5 [RFC3447] 密钥加密。
  • [不建议] RSA-OAEP — 使用最优非对称加密填充(OAEP)的 RSAES [RFC3447],并采用 RFC 3447 第 A.2.1 节规定的默认参数(SHA-1 with MGF1/SHA-1)。

Warning

Azure 建议使用RSA_OAEP_256或更强的算法增强安全性。

Microsoft不建议使用 RSA_1_5 或 RSA_OAEP,这两者仅因向后兼容而被纳入。 加密标准不再认为采用 PKCS#1 v1.5 填充方案的 RSA 可安全用于加密,而 RSA_OAEP 使用 SHA-1,后者存在已知的碰撞问题。

签名/验证

  • PS256 - RSASSA-PSS 将 SHA-256 和 MGF1 与 SHA-256 配合使用,如 RFC7518中所述。
  • PS384 - RSASSA-PSS 将 SHA-384 和 MGF1 与 SHA-384 配合使用,如 RFC7518中所述。
  • PS512 — RSASSA-PSS 将 SHA-512 和 MGF1 与 SHA-512 配合使用,如 RFC7518中所述。
  • RS256 — 使用 SHA-256 的 RSASSA-PKCS-v1_5。 必须使用 SHA-256 计算应用程序提供的摘要,并且长度必须为 32 字节。
  • RS384 — 使用 SHA-384 的 RSASSA-PKCS-v1_5。 必须使用 SHA-384 计算应用程序提供的摘要,并且长度必须为 48 字节。
  • RS512 — 使用 SHA-512 的 RSASSA-PKCS-v1_5。 必须使用 SHA-512 计算应用程序提供的摘要,并且长度必须为 64 字节。
  • RSNULL - 请参阅 RFC2437;用于启用某些 TLS 方案的专用用例。

注释

建议使用 RSA-PSS 填充模式来提高性能。 服务器构造 DigestInfo,用于算法 RS256、RS384 和 RS512 生成的签名操作。

对称 (AES) 密钥算法

八进制 HSM 密钥支持以下算法标识符。

包装密钥/解包密钥、加密/解密

  • AES-KW — AES 密钥包装(RFC3394)。
  • AES-GCM — Galois 计数器模式下的 AES 加密(NIST SP 800-38d)。
  • AES-CBC — 密码块链模式下的 AES 加密(NIST SP 800-38a)。

与 256 位密钥一起使用时,根据 商业国家安全算法套件 2.0 和量子计算常见问题解答,这些算法具有抗量子性。

签名/验证(HMAC)

  • HS256 - 使用 SHA-256 的 HMAC,如 RFC7518中所述。
  • HS384 - 使用 SHA-384 的 HMAC,如 RFC7518中所述。
  • HS512 - 使用 SHA-512 的 HMAC,如 RFC7518中所述。

注释

签名和验证算法必须与密钥类型和大小匹配。 否则,服务将返回“密钥大小不正确”错误。

有关按 AES 密钥大小和操作分类的吞吐量数据,请参阅 托管 HSM 扩展指南。 若要使用 Azure Policy 强制实施最小 AES 密钥大小,请参阅托管 HSM 的 Azure Policy

关键操作

键对象支持以下操作:

  • 创建:客户端在服务中创建密钥。 该服务生成并存储密钥的值,并且不会将其释放到客户端。
  • 导入:客户端将现有密钥导入服务。 可以在 JWK 构造中使用多种不同的打包方法导入非对称密钥。
  • 更新:具有足够权限的客户端修改与以前存储的密钥关联的元数据(密钥属性)。
  • 删除:具有足够权限的客户端将删除密钥。
  • 列表:客户端列出服务中的所有密钥。
  • 列表版本:客户端列出给定密钥的所有版本。
  • 获取:客户端检索给定密钥的公共部分。 获取操作不会返回非对称密钥的私有部分,也不会返回对称密钥的密钥材料。
  • 备份:导出受保护窗体中的密钥。
  • 还原:导入以前备份的密钥。
  • 释放:安全地将密钥释放到机密计算环境中运行的授权代码。 要求可信执行环境(TEE)提供证明,以表明其满足密钥发布策略的要求。

创建密钥后,可以使用该密钥执行以下加密操作:

  • 签名和验证:严格地说,此操作是“签名哈希”或“验证哈希”,因为服务不会将内容作为签名创建的一部分进行哈希处理。 应用程序应在本地对要签名的数据进行哈希处理,然后请求服务对哈希进行签名。 支持对已签名哈希进行验证,因为应用程序可能无权访问公钥材料;为了获得最佳性能,应在本地执行验证操作。
  • 密钥加密/包装:存储在服务中的密钥可以保护另一个密钥,通常是对称内容加密密钥(CEK)。 当服务中的密钥不对称时,请使用密钥加密(例如 RSA-OAEP;WRAPKEY/UNWRAPKEY 等效于 ENCRYPT/DECRYPT)。 当服务中的密钥是对称的时,请使用密钥包装(例如,AES-KW)。 WRAPKEY 支持为可能无权访问公钥材料的应用程序提供便利;为了获得最佳性能,应在本地执行包装操作。
  • 加密和解密:服务中存储的密钥可以加密或解密单个数据块。 块的大小由密钥类型和所选加密算法决定。 为方便起见,提供加密;为了获得最佳性能,应在本地执行加密操作。

使用不同的 WRAPKEY/UNWRAPKEY 操作(而不是始终使用 ENCRYPT/DECRYPT)提供语义和授权分离,以及密钥类型的一致性。

该服务不支持 EXPORT 操作。 预配密钥后,无法提取或修改密钥材料。 若要移动密钥,请使用 BACKUP 和 RESTORE 操作以受保护的形式导出或导入密钥。 BACKUP 生成的密钥不能在服务外部使用。

您可以使用 JWK 对象的 key_ops 属性,按每个密钥分别限制任何密码运算。

有关 JWK 对象的详细信息,请参阅 JSON Web 密钥(JWK)。

有关详细信息,请参阅 密钥保管库 REST API 参考中的关键操作

旋转

托管 HSM 支持自动密钥轮换。 可以设置每个密钥的轮换策略,以按指定频率生成新的密钥版本,或按需轮换密钥。 有关详细信息,请参阅 Azure 托管 HSM 中的配置密钥自动设置。 有关更广泛的生命周期指南,请参阅 如何迁移关键工作负荷

密钥属性

除了键材料,还可以指定以下属性。 在 JSON 请求中,即使未指定任何属性,也必须包含 attributes 关键字和大括号({})。

  • enabled:布尔型,可选,默认值为 true。 指定是否启用密钥并可用于加密作。 将 已启用 的属性与 nbfexp 配合使用。当 nbfexp 之间发生操作时,仅当 已启用 设置为 true 时,才允许该操作。 nbf / exp 窗口外的操作会自动被禁止,但解密、发布、解包和验证除外。
  • nbf:IntDate,可选,默认值为“now”。 nbf(不在之前)属性标识密钥不得用于加密操作的时间,但解密、释放、解包和验证除外。 处理 nbf 属性要求当前日期/时间必须晚于或等于 nbf 属性中列出的非过去日期/时间 。 可以提供一些小回旋余地(通常不超过几分钟)来解释时钟倾斜。 其值必须是包含 IntDate 值的数字。
  • exp:IntDate,可选,默认值为“forever”。 exp(过期时间)属性标识密钥不得用于加密操作的过期时间,但解密、释放、解包和验证除外。 处理 exp 属性要求当前日期/时间必须早于 exp 属性中列出的过期日期/时间 。 可以提供一些小回旋余地(通常不超过几分钟),以考虑时钟倾斜。 其值必须是包含 IntDate 值的数字。

以下只读属性包含在包含键属性的任何响应中:

  • created:IntDate,可选。 created 属性指示创建此版本的密钥的时间。 在添加此属性之前创建的键的值为 null。 其值必须是包含 IntDate 值的数字。
  • updated:IntDate,可选。 updated 属性指示更新此版本的密钥的时间。 对于在添加此属性之前上次更新的键,该值为 null。 其值必须是包含 IntDate 值的数字。

受日期时间控制的操作

尚无效且过期的密钥,在 nbf / exp 窗口外,适用于 解密发布解包验证 操作(它们不返回 403,禁止)。 使用尚未生效状态的基本原理是允许在投入生产前测试密钥。 使用过期状态的基本原理是允许对秘钥有效期间创建的数据执行恢复操作。 还可以通过将 启用 的属性更新为 false 来禁用对密钥的访问。

有关其他可能属性的详细信息,请参阅 JSON Web 密钥(JWK) 规范。

密钥与创建它们的托管 HSM 实例绑定。 不能在实例之间迁移或传输密钥;若要将工作负荷移动到新密钥,请参阅 如何迁移密钥工作负荷。 有关 IntDate 和其他数据类型的详细信息,请参阅 数据类型

密钥标记

可以以标记的形式附加特定于应用程序的元数据。 每个键最多支持 15 个标记,每个标记都有 256 个字符的名称和 256 个字符的值。

注释

如果调用方具有 列表获取 密钥的权限,他们可以读取其标记。

访问控制

托管 HSM 在数据平面上使用本地的基于角色的访问控制(RBAC)模型,该模型与管理平面上的 Azure RBAC 相互独立。 内置角色(例如 托管 HSM 加密用户托管 HSM 加密官 )可管理密钥操作,并且可以在 HSM 范围内或按密钥范围分配;更广泛的管理角色,如 托管 HSM 管理员 管理安全域、备份/还原和角色管理,而不是密钥操作。 有关详细信息,请参阅 托管 HSM 本地 RBAC 内置角色托管 HSM 访问控制