Compartilhar 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
AES 128 位、256 位
(仅限托管 HSM)
AES-KW
AES-GCM
AES-CBC
NA

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 - 使用最优非对称加密填充的 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 服务)

注意事项

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

关键操作

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

  • Create:允许客户端在Key Vault中创建密钥。 密钥的值由Key Vault生成并存储,不会发布到客户端。 可以在Key Vault中创建非对称密钥。
  • Import:允许客户端将现有密钥导入到Key Vault。 非对称密钥可以使用 JWK 构造中的几种不同的打包方法导入到Key Vault。
  • Update:允许具有足够权限的客户端修改以前存储在Key Vault中的密钥关联的元数据(密钥属性)。
  • Delete:允许具有足够权限的客户端从Key Vault中删除密钥。
  • List:允许客户端列出给定Key Vault中的所有密钥。
  • 列出版本:允许客户端列出给定密钥保管库中某个特定密钥的所有版本。
  • Get:允许客户端检索Key Vault中给定密钥的公共部分。
  • 备份:导出受保护窗体中的密钥。
  • 还原:导入以前备份的密钥。
  • 释放:它安全地将密钥释放给在机密计算环境中运行的授权代码。 它要求证明受信任的执行环境(TEE)满足密钥释放策略(release_policy)的要求。
  • Rotate:通过生成新版密钥(仅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 操作应在本地执行。
  • Encrypt 和 Decrypt:存储在Key Vault中的密钥可用于加密或解密单个数据块。 块大小取决于密钥类型和所选加密算法。 为方便起见,为可能没有访问 [公钥] 密钥材料的应用程序提供了加密操作。 为获得最佳应用程序性能,ENCRYPT 操作应在本地执行。

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

Key Vault 不支持导出操作。 在系统中设置密钥后,便无法提取该密钥,也无法修改其密钥材料。 但是,Key Vault的用户可能需要其密钥用于其他用例,例如在密钥被删除后。 在这种情况下,可以使用“备份”和“还原”操作以受保护的形式导出/导入密钥。 备份操作创建的密钥不能在 Key Vault 外部使用。 或者,可以在多个“Key Vault”实例上进行IMPORT操作。

用户可以通过 JWK 对象的 key_ops 属性来限制每个密钥上 Key Vault 所支持的任何加密操作。

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

密钥轮换策略操作

可以通过配置密钥自动轮换策略来设置密钥保管库密钥自动轮换。 它仅适用于 Key Vault 资源。

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

密钥属性

除密钥材料外,还可以指定以下属性。 在 JSON 请求中,即使未指定任何属性,也需要属性关键字和大括号“{”“}”。

  • enabled:布尔型,可选,默认值为 true。 指定密钥是否已启用并可用于加密操作。 enabled 属性与 nbfexp 一起使用。如果在 nbfexp 之间进行操作,则只有在 enabled 设置为 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:字符串,可选。 保护密钥的基础硬件安全模块平台。
    • hsmPlatform 值为 2 表示密钥受最新 FIPS 140 级别 3 验证的 HSM 平台的保护。
    • hsmPlatform 值为 1 表示密钥受我们先前经过 FIPS 140 级别 2 验证的 HSM 平台的保护。
    • hsmPlatform 值为 0 表示密钥受 FIPS 140 级别 1 软件加密模块的保护。
    • 如果未由托管 HSM 池设置,则受最新的 FIPS 140 级别 3 验证 HSM 平台的保护。

请务必注意,密钥绑定到在其中创建密钥的 HSM。 新密钥无缝创建并存储在新的 HSM 中。 虽然无法迁移或传输密钥,但新密钥版本会自动在新 HSM 中。 有关如何迁移到新密钥的详细信息,请参阅 如何迁移密钥工作负荷

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

日期时间控制的操作

这些在 nbf / exp 时间窗口外的尚未生效和已过期的密钥将可用于解密释放解包验证操作(不会返回“403 禁止访问”)。 使用尚未生效状态的基本原理是允许在投入生产前测试密钥。 使用过期状态的基本原理是允许对秘钥有效期间创建的数据执行恢复操作。 此外,还可以使用密钥保管库策略禁用对密钥的访问,或者通过将 enabled 属性更新为 false 来实现。

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

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

密钥标记

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

注意事项

调用方如果具有该密钥的 listget 权限,则可读取标记。

密钥访问控制

Key Vault管理的密钥的访问控制是在充当密钥容器的Key Vault级别进行的。 可以使用 Key Vault Azure 基于角色的访问控制(推荐)或旧版 金库访问策略权限模型来控制对密钥的访问。 Azure RBAC 是默认的推荐授权模型。 它有三个预定义的角色来管理密钥:“Key Vault Crypto Officer”、“Key Vault Crypto User”、“Key Vault服务加密用户”,可以限定为订阅、资源组或保管库级别。 有关详细信息,请参阅 Azure RBAC 与 access 策略

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

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

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

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

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

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

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

后续步骤