密钥类型、算法和操作

下表显示了密钥类型和支持的算法的摘要。

密钥类型/大小/曲线 加密/解密
(包装/解包)
签名/验证
EC-P256、EC-P256K、EC-P384、EC-521 NA ES256
ES256K
ES384
ES512
RSA 2K、3K、4K RSA1_5
RSA-OAEP
RSA-OAEP-256
PS256
PS384
PS512
RS256
RS384
RS512
RSNULL
AES 128 位、256 位 AES-KW
AES-GCM
AES-CBC
NA

曲线类型

SIGN/VERIFY

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

RSA 算法

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

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

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

SIGN/VERIFY

  • 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 方案的特殊用例。

对称密钥算法

注意

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

密钥操作

有关详细信息,请参阅 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 的用户可能需要将密钥用于其他用例,例如删除密钥后。 在这种情况下,可以使用“备份”和“还原”操作以受保护的形式导出/导入密钥。 “备份”操作创建的密钥无法在 Key Vault 外部使用。 或者,可能会对多个 Key Vault 实例使用“导入”操作。

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

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

密钥轮换策略操作

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

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

密钥属性

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

  • enabled:布尔型,可选,默认值为 true。 指定密钥是否已启用并可用于加密操作。 enabled 属性与 nbfexp 一起使用。如果在 nbfexp 之间进行操作,则只有在 enabled 设置为 true 时,才允许该操作。 除解密、发布、解包和验证外,nbf / exp 窗口外的操作将自动禁止。
  • 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 值的数字。

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

日期时间控制的操作

这些在 nbf / exp 时段外的尚未生效的密钥和过期密钥适合解密发布解包验证操作(不会返回“403 禁止访问”)。 使用尚未生效状态的基本原理是允许在投入生产前测试密钥。 使用过期状态的基本原理是允许对秘钥有效期间创建的数据执行恢复操作。 此外,使用 Key Vault 策略,或通过将 enabled 密钥属性更新为 false 可以禁用访问密钥。

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

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

密钥标记

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

注意

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

密钥访问控制

Key Vault 托管的密钥的访问控制是在充当密钥容器的 Key Vault 级别提供的。 你可以使用密钥保管库基于角色的访问控制(建议)或旧的保管库访问策略权限模型来控制对密钥的访问。 基于角色的权限模型提供三个预定义的角色来管理密钥:“密钥保管库加密主管”、“密钥保管库加密用户”、“密钥保管库服务加密用户”,其范围可以限定为订阅、资源组或保管库级别。

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

  • 针对密钥管理操作的权限

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

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

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

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

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

后续步骤