密钥类型、算法和操作

本文介绍Azure 密钥保管库(保管库)的关键类型、算法、属性和操作。 有关托管 HSM 的等效参考,请参阅密钥类型、算法和操作(托管 HSM)。 有关资源支持的密钥类型的摘要,请参阅 “关于密钥”。

下表显示了密钥保管库中关键类型和支持的算法的摘要。 有关对称(oct-HSM /AES)算法和 HMAC 签名/验证的完整详细信息,请参阅 对称密钥算法。

密钥类型/大小/曲线 加密/解密
(包装/解包)
签名/验证
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

EC 算法

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

曲线类型

签名/验证

  • ES256 - 使用曲线 P-256 创建的 SHA-256 摘要和密钥的 ECDSA。 RFC7518 中描述了此算法。
  • ES256K - ECDSA 应用于使用曲线 P-256K 创建的 SHA-256 摘要和密钥。 此算法正在等待标准化。
  • ES384 - 基于曲线 P-384 创建的 SHA-384 摘要和密钥使用的 ECDSA。 RFC7518 中描述了此算法。
  • ES512 - 用于 SHA-512 摘要和使用曲线 P-521 创建的密钥的 ECDSA。 RFC7518 中描述了此算法。

RSA 算法

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

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

  • RSA-OAEP-256 - 使用最佳非对称加密填充(OAEP)的 RSAES,其中哈希函数为 SHA-256,掩码生成函数为使用 SHA-256 的 MGF1。
  • [不建议] RSA1_5 - RSAES-PKCS1-V1_5 [RFC3447] 密钥加密。
  • [不建议] RSA-OAEP - 使用最佳非对称加密填充 (OAEP) [RFC3447] 的 RSAES,第 A.2.1 节中指定的默认参数为 RFC 3447。 这些默认参数使用 SHA-1 哈希函数和 SHA-1 附带的 MGF1 掩码生成函数。

警告

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

Microsoft不建议RSA_1_5和RSA_OAEP。 这些算法仅用于向后兼容性。 加密标准不再认为采用 PKCS#1 v1.5 填充方案的 RSA 在加密方面是安全的。 RSA_OAEP使用具有已知冲突问题的 SHA1。

签名/验证

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

注意事项

为了获得更好的性能,请使用 RSA-PSS 填充模式。 服务器构造用于签名操作的 DigestInfo,由算法 RS256、RS384 和 RS512 生成。

对称密钥算法

有关托管 HSM 中的对称(oct-HSM)密钥算法支持,请参阅密钥类型、算法和操作(托管 HSM)。

关键操作

键对象支持以下操作:

  • 创建:客户端在服务中创建密钥。 该服务生成并存储密钥的值,并且不会将其释放到客户端。
  • 导入:客户端将现有密钥导入服务。 可以在 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)。

除了上面列出的操作之外,密钥保管库(保管库)还支持:

  • 轮换:通过生成新版密钥来轮换现有密钥。 此操作仅适用于 密钥保管库 资源(不适用于托管 HSM)。

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

密钥轮换策略操作

通过配置密钥自动轮换策略设置密钥自动轮换。 此功能仅适用于密钥保管库资源。

  • 获取轮换策略:检索轮换策略配置。
  • 设置轮换策略:设置轮换策略配置。

密钥属性

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

  • enabled:布尔型,可选,默认值为 true。 指定是否启用密钥并可用于加密作。 将 已启用 的属性与 nbf 和 exp 配合使用。当 nbf 和 exp 之间发生操作时,仅当 已启用 设置为 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) 规范。

除了上面列出的属性外,密钥保管库 密钥还提供:

  • hsmPlatform:字符串,可选。 保护密钥的基础 HSM 平台。
    • hsmPlatform值2表示密钥受最新的 FIPS 140-3 级别 3 验证 HSM 平台的保护。
    • hsmPlatform的值1表示密钥受先前通过FIPS 140-2第2级验证的HSM平台的保护。
    • hsmPlatform值0表示密钥受 FIPS 140-2 级别 1 软件加密模块的保护。

密钥绑定到创建它们的 HSM 中。 Azure 密钥保管库会在最新的 HSM 平台上自动创建新密钥和密钥版本。 不能在平台之间迁移或传输现有密钥。 有关将工作负荷移动到新密钥的指南,请参阅 如何迁移关键工作负荷。

有关 IntDate 和其他数据类型的详细信息,请参阅 数据类型。

密钥标记

可以用标记的形式指定其他特定于应用程序的元数据。 密钥保管库最多支持 15 个标记,每个标记可以具有 256 个字符的名称和 256 个字符的值。

注意事项

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

密钥访问控制

密钥保管库为充当密钥容器的密钥保管库级别的密钥提供访问控制。 可以使用 密钥保管库 Azure 基于角色的访问控制或旧的 vault 访问策略权限模型来控制对密钥的访问。 Azure RBAC 是默认的推荐授权模型。 它有三个预定义的角色来管理密钥:密钥保管库 Crypto Officer、密钥保管库 Crypto User 和 密钥保管库 服务加密用户。 可以将这些角色的范围限定为订阅、资源组或保管库级别。 有关详细信息,请参阅 Azure RBAC 与访问策略。

保管库访问策略权限模型权限(旧版):

  • 密钥管理操作的权限设置

    • get:读取密钥的公共部分及其属性
    • list:列出存储在密钥库中的密钥或密钥版本
    • update:更新键的属性
    • create:新建密钥
    • import:将密钥导入密钥库
    • delete:删除密钥对象
    • recover:恢复已删除的密钥
    • backup:备份key vault中的密钥
    • restore:将备份密钥还原到密钥库
  • 针对加密操作的权限

    • decrypt:使用密钥取消保护字节序列
    • encrypt:使用密钥保护任意字节序列
    • unwrapKey:使用密钥解密包装的对称密钥
    • wrapKey:使用密钥保护对称密钥
    • verify:使用密钥验证摘要
    • sign:使用密钥签名摘要
  • 特权操作的权限设置

    • purge:清除(永久删除)已删除的密钥
    • release:将密钥发布到与密钥匹配 release_policy 的机密计算环境
  • 轮换策略操作的权限

    • 轮换:通过生成新版密钥来轮换现有密钥(仅密钥保管库)
    • 获取轮换策略:检索轮换策略配置
    • 设置轮换策略:设置轮换策略配置

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

后续步骤