密钥规范引用 - Amazon Key Management Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

密钥规范引用

创建非对称 KMS 密钥或 HMAC KMS 密钥时,可以选择其密钥规范密钥规范是每个 Amazon KMS key 的属性,表示 KMS 密钥的加密配置。密钥规范在创建 KMS 密钥时选择,并且无法更改。如果选择了错误的密钥规范,可删除 KMS 密钥,然后创建一个新的密钥规范。

注意

KMS 密钥的密钥规范被称为“客户主密钥规范”。CreateKey 操作的 CustomerMasterKeySpec 参数已弃用。请改用 KeySpec 参数。CreateKeyDescribeKey 操作的响应包括具有相同值的 KeySpecCustomerMasterKeySpec 成员。

密钥规范决定了 KMS 密钥是对称还是非对称、KMS 密钥中的密钥材料类型,以及 Amazon KMS 支持用于 KMS 密钥的加密算法、签名算法或消息认证码(MAC)算法。选择哪个密钥规范通常取决于使用案例和法规要求。但是,KMS 密钥加密操作的密钥规范不同,其价格和限额也不同。有关定价的详细信息,请参阅 Amazon Key Management Service 定价。有关请求配额的信息,请参阅 请求配额

要对委托人在创建 KMS 密钥时可使用的密钥规范做出限制,请使用 kms:KeySpec 条件键。您还可以使用 kms:KeySpec 条件键,以允许主体根据特定密钥规范仅对 KMS 密钥调用 Amazon KMS 操作。例如,您可以拒绝删除具有 RSA_4096 密钥规范的 KMS 密钥的计划权限。

对于 KMS 密钥,Amazon KMS 支持以下密钥规范:

对称加密密钥规范(默认值)
  • SYMMETRIC_DEFAULT

RSA 密钥规范(加密和解密或签名和验证)
  • RSA_2048

  • RSA_3072

  • RSA_4096

椭圆曲线密钥规范
  • 非对称 NIST 推荐的椭圆曲线密钥对(签名和验证或派生共享密钥)

    • ECC_NIST_P256 (secp256r1)

    • ECC_NIST_P384 (secp384r1)

    • ECC_NIST_P521 (secp521r1)

  • 其他非对称椭圆曲线密钥对(签名和验证)

    • ECC_SECG_P256K1 (secp256k1),常用于加密货币。

SM2 密钥规范(加密和解密、签名和验证或派生共享密钥)
  • SM2(仅限中国区域)

HMAC 密钥规范
  • HMAC_224

  • HMAC_256

  • HMAC_384

  • HMAC_512

SYMMETRIC_DEFAULT 密钥规范

默认密钥规范 SYMMETRIC_DEFAULT 是对称加密 KMS 密钥的密钥规范。当您在 Amazon KMS 控制台中选择Symmetric(对称)密钥类型和Encrypt and decrypt(加密和解密)密钥用法时,它会选择 SYMMETRIC_DEFAULT 密钥规范。在 CreateKey 操作中,如果未指定 KeySpec 值,则会选择 SYMMETRIC_DEFAULT。如果您没有理由使用其他密钥规范,SymMETIC_DEFAULT 是个不错的选择。

SYMMETRIC_DEFAULT 代表 AES-256-GCM,这是一种基于伽罗瓦计数器模式(GCM)中的高级加密标准(AES)的对称算法,具有 256 位密钥,是用于安全加密的行业标准。此算法生成的密文支持附加身份验证数据 (AAD),如加密上下文,且 GCM 对密文提供额外的完整性检查。

在 AES-256-GCM 下加密的数据现在和将来都受到保护。密码学家认为这种算法具备抗量子性。理论上,在未来针对使用 256 位 AES-GCM 密钥创建的密文的大规模量子计算攻击中,密钥的有效安全性将会降至 128 位。但是,此安全级别足以对抗对 Amazon KMS 密文进行的暴力破解攻击。

唯一的例外是,在中国区域 SYMMETRIC_DEFAULT 表示使用 SM4 加密的 128 位对称密钥。您只能在中国区域内创建 128 位的 SM4 密钥。您无法在中国区域内创建 256 位的 AES-GCM KMS 密钥。

在 Amazon KMS 中,可以使用对称加密 KMS 密钥加密、解密和重新加密数据,保护生成的数据密钥和数据密钥对。与 Amazon KMS 集成的 Amazon 服务使用对称加密 KMS 密钥来加密静态数据。您可以将自己的密钥材料导入对称加密 KMS 密钥中,并在自定义密钥存储中创建对称加密 KMS 密钥。有关可以对对称 KMS 密钥和非对称 KMS 密钥执行的操作的比较表格,请参阅比较对称 KMS 密钥与非对称 KMS 密钥

在 Amazon KMS 中,可以使用对称加密 KMS 密钥加密、解密和重新加密数据,生成数据密钥和数据密钥对。您可以创建多区域对称加密 KMS 密钥,将自己的密钥材料导入对称加密 KMS 密钥中,并在自定义密钥存储中创建对称加密 KMS 密钥。有关您可以对不同类型 KMS 密钥执行的操作进行比较的表格,请参阅 密钥类型引用

RSA 密钥规范

使用 RSA 密钥规范时,Amazon KMS 会创建具有 RSA 密钥对的非对称 KMS 密钥。私有密钥永远不会让 Amazon KMS 处于未加密状态。在 Amazon KMS 内部可以使用公有密钥,或者下载公有密钥供 Amazon KMS 外部使用。

警告

在 Amazon KMS 外部加密数据时,请确保您可以解密密文。如果您使用已从 Amazon KMS 删除的 KMS 密钥中的公有密钥、配置用于签名和验证的 KMS 密钥中的公有密钥或者使用 KMS 密钥不支持的加密算法,则数据将无法恢复。

在 Amazon KMS 中,可以使用具有 RSA 密钥对的非对称 KMS 密钥进行加密和解密或签名和验证,但不能同时用于二者。此属性(称为 密钥用法)与密钥规范分开确定,但应该在选择密钥规范之前做出决定。

Amazon KMS 支持以下 RSA 密钥规范,用于加密和解密或签名和验证:

  • RSA_2048

  • RSA_3072

  • RSA_4096

RSA 密钥规范因 RSA 密钥长度(以位为单位)而异。选择哪个 RSA 密钥规范可能取决于安全标准或任务要求。一般来说,可使用对任务而言实用又实惠的最大密钥。KMS 密钥加密操作的 RSA 密钥规范不同,其价格也不同。有关 Amazon KMS 定价的信息,请参阅 Amazon Key Management Service 定价。有关请求配额的信息,请参阅 请求配额

用于加密和解密的 RSA 密钥规范

使用 RSA 非对称 KMS 密钥行加密和解密时,用公有密钥加密,然后用私有密钥解密。在 Amazon KMS 中为 RSA KMS 密钥调用 Encrypt 操作时,Amazon KMS 使用 RSA 密钥对中的公有密钥和您指定的加密算法来加密数据。要解密密文,请调用 Decrypt 操作并指定相同的 KMS 密钥和加密算法。Amazon KMS 随后使用 RSA 密钥对中的私有密钥解密数据。

也可以下载公有密钥,并在 Amazon KMS 外部使用该密钥加密数据。请确保使用 Amazon KMS 支持用于 RSA KMS 密钥的加密算法。要解密密文,请采用相同的 KMS 密钥和加密算法调用 Decrypt 函数。

对于具有 RSA 密钥规范的 KMS 密钥,Amazon KMS 支持两种加密算法。这些算法在 PKCS #1 2.2 版中定义,它们内部使用的哈希函数有所不同。在 Amazon KMS 中,RSAES_OAEP 算法始终使用相同的哈希函数实现哈希目的和掩码生成函数 (MGF1)。调用 EncryptDecrypt 操作时,需要指定加密算法。您可以为每个请求选择不同的算法。

支持 RSA 密钥规范的加密算法
加密算法 算法描述
RSAES_OAEP_SHA_1 PKCS #1 2.2 版,7.1 节。具有 OAEP 填充且采用 SHA-1 实现哈希和 MGF1 掩码生成函数以及空标签的 RSA 加密。
RSAES_OAEP_SHA_256 PKCS #1,7.1 节。具有 OAEP 填充且采用 SHA-256 实现哈希和 MGF1 掩码生成函数以及空标签的 RSA 加密。

无法将 KMS 密钥配置为使用特定的加密算法。不过,可以使用 kms:EncryptionAlgorithm 策略条件,指定允许委托人与 KMS 密钥一起使用的加密算法。

若要获取 KMS 密钥的加密算法,请在 Amazon KMS 控制台中或者使用 DescribeKey 操作查看 KMS 密钥的加密配置。您在 Amazon KMS 控制台中或使用 GetPublicKey 操作下载公有密钥时,Amazon KMS 还会提供密钥规范和加密算法。

您可以根据可在每个请求中加密的明文数据的长度,选择 RSA 密钥规范。下表显示了在对 Encrypt 操作的单次调用中,可以加密的明文的最大长度(以字节为单位)。值因密钥规范和加密算法而异。为进行比较,使用对称加密 KMS 密钥一次最多可加密 4096 字节。

要计算这些算法的最大明文长度(以字节为单位),请使用以下公式:(key_size_in_bits / 8) - (2 * hash_length_in_bits/8) - 2。例如,对于具有 SHA-256 的 RSA_2048,最大明文长度为 (2048/8) - (2 * 256/8) -2 = 190 字节。

Encrypt 操作中的最大明文长度(以字节为单位)
加密算法
密钥规范 RSAES_OAEP_SHA_1 RSAES_OAEP_SHA_256
RSA_2048 214 190
RSA_3072 342 318
RSA_4096 470 446

用于签名和验证的 RSA 密钥规范

使用 RSA 非对称 KMS 密钥进行签名和验证时,用私有密钥为消息生成签名,然后用公有密钥验证签名。

在 Amazon KMS 中为非对称 KMS 密钥调用 Sign 操作时,Amazon KMS 使用 RSA 密钥对中的私有密钥、消息和您指定的签名算法来生成签名。要验证签名,请调用 Verify 操作。指定签名以及相同的 KMS 密钥、消息和签名算法。Amazon KMS 随后使用 RSA 密钥对中的公有密钥验证签名。也可以下载公有密钥,并在 Amazon KMS 外部使用该密钥验证签名。

对于具有 RSA 密钥规范的所有 KMS 密钥,Amazon KMS 支持以下签名算法。在您调用 SignVerify 操作后,需要指定签名算法。您可以为每个请求选择不同的算法。使用 RSA 密钥对进行签名时,首选 RSASSA-PSS 算法。为了与现有应用程序兼容,我们包含了 RSASSA-PKCS1-v1_5 算法。

支持 RSA 密钥规范的签名算法
签名算法 算法描述
RSASSA_PSS_SHA_256 PKCS #1 2.2 版,8.1 节,具有 PSS 填充且采用 SHA-256 实现消息摘要和 MGF1 掩码生成函数以及 256 位盐的 RSA 签名
RSASSA_PSS_SHA_384 PKCS #1 2.2 版,8.1 节,具有 PSS 填充且采用 SHA-384 实现消息摘要和 MGF1 掩码生成函数以及 384 位盐的 RSA 签名
RSASSA_PSS_SHA_512 PKCS #1 2.2 版,8.1 节,具有 PSS 填充且采用 SHA-512 实现消息摘要和 MGF1 掩码生成函数以及 512 位盐的 RSA 签名
RSASSA_PKCS1_V1_5_SHA_256 PKCS #1 2.2 版,8.2 节,具有 PKCS #1v1.5 填充和 SHA-256 的 RSA 签名
RSASSA_PKCS1_V1_5_SHA_384 PKCS #1 2.2 版,8.2 节,具有 PKCS #1v1.5 填充和 SHA-384 的 RSA 签名
RSASSA_PKCS1_V1_5_SHA_512 PKCS #1 2.2 版,8.2 节,具有 PKCS #1v1.5 填充和 SHA-512 的 RSA 签名

无法将 KMS 密钥配置为使用特定的签名算法。不过,可以使用 kms:SigningAlgorithm 策略条件,指定允许委托人与 KMS 密钥一起使用的签名算法。

若要获取 KMS 密钥的签名算法,请在 Amazon KMS 控制台中或者使用 DescribeKey 操作查看 KMS 密钥的加密配置。您在 Amazon KMS 控制台中或使用 GetPublicKey 操作下载公有密钥时,Amazon KMS 还会提供密钥规范和签名算法。

椭圆曲线密钥规范

在使用椭圆曲线(ECC)密钥规范时,Amazon KMS 会创建具有 ECC 密钥对的非对称 KMS 密钥用于签名和验证或派生共享密钥(但不能同时使用)。生成签名或派生共享密钥的私有密钥永远不会让 Amazon KMS 处于未加密状态。您可以在 Amazon KMS 内部使用公有密钥验证签名,或者下载公有密钥供 Amazon KMS 外部使用。

对于非对称 KMS 密钥,Amazon KMS 支持以下 ECC 密钥规范。

  • 非对称 NIST 推荐的椭圆曲线密钥对(签名和验证或派生共享密钥)

    • ECC_NIST_P256 (secp256r1)

    • ECC_NIST_P384 (secp384r1)

    • ECC_NIST_P521 (secp521r1)

  • 其他非对称椭圆曲线密钥对(签名和验证)

    • ECC_SECG_P256K1 (secp256k1),常用于加密货币。

选择哪个 ECC 密钥规范可能取决于安全标准或任务要求。一般来说,可使用对任务而言实用又实惠的点最多的曲线。

如果您正在创建非对称 KMS 密钥以派生共享密钥,请使用 NIST 推荐的椭圆曲线密钥规范之一。唯一支持的用于派生共享密钥的密钥协议算法是椭圆曲线加密辅助因子 Diffie-Hellman Priman Primitive(ECDH)。有关如何离线派生共享密钥的示例,请参阅离线派生共享密钥

如果您正在创建非对称 KMS 密钥以用于加密货币,请使用 ECC_SEG_P256K1 密钥规范。此密钥规范也可以用于其他目的,但比特币和其他加密货币必须使用此密钥规范。

使用不同 ECC 密钥规范的 KMS 密钥定价不同,并受不同的请求配额限制。有关 Amazon KMS 定价的信息,请参阅 Amazon Key Management Service 定价。有关请求配额的信息,请参阅 请求配额

下表显示了 Amazon KMS 对于每个 ECC 密钥规范支持的签名算法。无法将 KMS 密钥配置为使用特定的签名算法。不过,可以使用 kms:SigningAlgorithm 策略条件,指定允许委托人与 KMS 密钥一起使用的签名算法。

支持 ECC 密钥规范的签名算法
密钥规范 签名算法 算法描述
ECC_NIST_P256 ECDSA_SHA_256 NIST FIPS 186-4,6.4 节,使用密钥指定的曲线并采用SHA-256 实现消息摘要的 ECDSA 签名。
ECC_NIST_P384 ECDSA_SHA_384 NIST FIPS 186-4,6.4 节,使用密钥指定的曲线并采用 SHA-384 实现消息摘要的 ECDSA 签名。
ECC_NIST_P521 ECDSA_SHA_512 NIST FIPS 186-4,6.4 节,使用密钥指定的曲线并采用 SHA-512 实现消息摘要的 ECDSA 签名。
ECC_SECG_P256K1 ECDSA_SHA_256 NIST FIPS 186-4,6.4 节,使用密钥指定的曲线并采用SHA-256 实现消息摘要的 ECDSA 签名。

SM2 密钥规范(仅限中国区域)

SM2 密钥规范是在 GM/T 系列规范中定义的椭圆曲线密钥规范,这一系列规范由中国国家商用密码管理办公室(OSCCA)发布。SM2 密钥规范仅限中国区域使用。使用 SM2 密钥规范时,Amazon KMS 会创建具有 SM2 密钥对的非对称 KMS 密钥。您可以在 Amazon KMS 内使用 SM2 密钥对,或者下载公有密钥以供在 Amazon KMS 外部使用。有关更多信息,请参阅 使用 SM2 密钥对进行离线验证(仅限中国区域)

每个 KMS 密钥都只能有一个密钥用法。您可以使用 SM2 KMS 密钥进行签名和验证、加密和解密,或者派生共享密钥。在创建 KMS 密钥时,您必须指定密钥用途,并且密钥一经创建便无法更改。

如果您正在创建非对称 KMS 密钥以派生共享密钥,请使用 SM2 密钥规范。唯一支持的用于派生共享密钥的密钥协议算法是椭圆曲线加密辅助因子 Diffie-Hellman Priman Primitive(ECDH)。

Amazon KMS 支持以下 SM2 加密算法和签名算法:

  • SM2PKE 加密算法

    SM2PKE 是一种由 OSCCA 在 GM/T 0003.4-2012 中定义的基于椭圆曲线的加密算法。

  • SM2DSA 签名算法

    SM2DSA 是一种由 OSCCA 在 GM/T 0003.2-2012 中定义的基于椭圆曲线的签名算法。SM2DSA 需要一个区分 ID,该 ID 使用 SM3 哈希算法进行哈希处理,然后会与您传递到 Amazon KMS 的消息或消息摘要相结合。然后由 Amazon KMS 对这个连接的值进行哈希处理和签名。

HMAC KMS 密钥的密钥规范

Amazon KMS 支持不同长度的对称 HMAC 密钥。您选择的密钥规范可取决于安全、法规或业务要求。密钥的长度决定了 GenerateMacVerifyMac 操作中使用的 MAC 算法。一般来说,较长的密钥更安全。使用适用于您的使用场景的最长密钥。

HMAC 密钥规范 MAC 算法
HMAC_224 HMAC_SHA_224
HMAC_256 HMAC_SHA_256
HMAC_384 HMAC_SHA_384
HMAC_512 HMAC_SHA_512