Partager via

密钥类型、算法和操作

Key Vault支持两种资源类型:保管库和托管 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 位、256 位
(仅限托管 HSM)
AES-KW
AES-GCM
AES-CBC
HS256
HS384
HS512

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 - 将最佳非对称加密填充与 SHA-256 的哈希函数和具有 SHA-256 的 MGF1 的掩码生成函数配合使用的 RSAES。
  • [不建议] 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 服务)

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

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

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

注意事项

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

关键操作

Key Vault(包括托管 HSM)支持对密钥对象执行以下操作:

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

有关详细信息,请参阅 Key Vault REST API 参考中的关键操作

在 Key Vault 中创建密钥后,可以使用密钥执行以下加密作:

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

虽然使用非对称密钥的 WRAPKEY/UNWRAPKEY 似乎多余(因为该操作等同于 ENCRYPT/DECRYPT),但使用不同的操作方法非常重要。 此不同提供了这些操作的语义和授权分离,并在服务支持其他密钥类型时提供一致性。

Key Vault 不支持导出操作。 在系统中预配密钥后,无法提取或修改其密钥材料。 但是,Key Vault 的用户可能要求其密钥用于其他用例,例如删除密钥后。 在这种情况下,他们可以使用 BACKUP 和 RESTORE 操作以受保护的形式导出或导入密钥。 你无法在 Key Vault 之外使用由 BACKUP 操作创建的密钥。 或者,您可以对多个密钥库实例使用 IMPORT 操作。

用户可以使用 JWK 对象的 key_ops 属性来逐个密钥限制 Key Vault 支持的任何加密操作。

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

密钥轮换策略操作

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

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

密钥属性

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

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

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

  • created:IntDate,可选。 created 属性指示创建此版本的密钥的时间。 在添加此属性之前创建的键的值为 null。 其值必须是包含 IntDate 值的数字。
  • updated:IntDate,可选。 updated 属性指示更新此版本的密钥的时间。 对于在添加此属性之前上次更新的键,该值为 null。 其值必须是包含 IntDate 值的数字。
  • hsmPlatform:字符串,可选。 保护密钥的基础 HSM 平台。
    • hsmPlatform2表示密钥受最新的 FIPS 140 第 3 级验证的 HSM 平台保护。
    • hsmPlatform 值为 1 表示密钥受先前通过 FIPS 140 第2级验证的 HSM 平台保护。
    • hsmPlatform0表示密钥受 FIPS 140 级别 1 软件加密模块的保护。
    • 如果未使用托管 HSM 池设置此值,密钥受最新的 FIPS 140 级别 3 验证 HSM 平台的保护。

密钥绑定到创建它们的 HSM 中。 可以在新的 HSM 中无缝创建和存储新密钥。 虽然无法迁移或传输密钥,但新密钥版本将自动在新 HSM 中。 有关如何迁移到新密钥的详细信息,请参阅 如何迁移密钥工作负荷

有关 IntDate 和其他数据类型的详细信息,请参阅 “关于密钥、机密和证书:数据类型”。

日期时间控制的操作

尚无效且过期的密钥,在 nbf / exp 窗口外,适用于 解密释放解封验证 用(不会返回 403 Forbidden)。 使用尚未生效状态的基本原理是允许在投入生产前测试密钥。 使用过期状态的原因是允许对密钥有效时创建的数据执行恢复操作。 此外,还可以通过使用 Key Vault 策略或将 启用 的密钥属性更新为 false 来禁用对密钥的访问。

有关数据类型的详细信息,请参阅 数据类型

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

密钥标记

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

注意事项

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

密钥访问控制

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

保管库访问策略权限模型权限:

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

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

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

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

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

有关使用密钥的详细信息,请参阅 Key Vault REST API 参考中的密钥作

后续步骤