如何选择 CMK 配置 - Amazon Key Management Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

如何选择 CMK 配置

创建的 CMK 类型在很大程度上取决于计划使用 CMK 的方式,以及安全要求和授权要求。创建 CMK 时,请记住,CMK 的加密配置(包括其密钥规范和密钥用法)是在创建 CMK 时建立的,无法更改。有关创建对称 CMK 和非对称 CMK 的帮助信息,请参阅创建密钥

Amazon KMS支持两种 CMK 密钥类型:对称非对称。每种密钥类型均与特定的密钥用法密钥规范 选项相关。

请根据使用案例,遵照以下指南确定所需的 CMK 类型。

加密和解密数据

对于需要加密和解密数据的大多数使用案例,使用对称 CMK。Amazon KMS 使用的对称加密算法快速、高效,并可确保数据的机密性和真实性。它支持具有附加身份验证数据 (AAD) 的身份验证加密,这些数据定义为加密上下文。此 CMK 类型要求加密数据的发送人和接收人都具备有效的 Amazon 凭证才能调用 Amazon KMS。

如果使用案例需要无法调用 Amazon KMS 的用户在 Amazon 外部进行加密,那么非对称 CMK 是个不错的选择。您可以分发非对称 CMK 的公有密钥,以允许这些用户对数据进行加密。需要解密该数据的应用程序,可以在Amazon KMS。

签署消息并验证签名

要签署消息并验证签名,必须使用非对称 CMK。您可以将 CMK 与表示 RSA 密钥对或椭圆曲线 (ECC) 密钥对的密钥规范一起使用。选择哪种密钥规范由想要使用的签名算法决定。在某些情况下,将验证签名的用户在 Amazon 外部,无法调用 Verify 操作。此时,请选择与这些用户在其本地应用程序中可支持的签名算法相关联的密钥规范

执行公有密钥加密

要执行公钥加密,必须使用非对称 CMK使用RSA 密钥规范椭圆曲线 (ECC) 密钥规范不能用于公有密钥加密。要使用 RSA CMK 的公有密钥对 Amazon KMS 中的数据进行加密,请使用 Encrypt 操作。还可以下载公有密钥,并与需要在 Amazon KMS 外部加密数据的各方共享。

下载非对称 CMK 的公有密钥后,可以在 Amazon KMS 外部使用该密钥。但它不再受安全控制的约束,保护 CMKAmazon KMS。例如,您不能使用Amazon KMS密钥策略或授权来控制公有密钥的使用。也不能使用 RSA 加密算法来控制密钥是否仅用于加密和解密。Amazon KMS支持。有关更多详细信息,请参阅下载公有密钥的特殊注意事项

要对在 Amazon KMS 外部采用公有密钥加密的数据进行解密,请调用 Decrypt 操作。这些区域有:Decrypt操作将失败,如果数据是使用公钥加密的 CMK密钥密钥用法SIGN_VERIFY。如果它是通过使用Amazon KMS不支持 RSA CMK。

为避免上述错误,在 Amazon KMS 外部使用公有密钥的任何人都必须存储密钥配置。这些区域有:Amazon KMS控制台和GetPublicKey响应提供了在共享公有密钥时必须包含的信息。

与集成的 Amazon 服务一起使用

要创建 CMK 以便与Amazon服务,与Amazon KMS,请参阅服务的文档。Amazon加密数据的服务需要对称 CMK

除上述考虑因素之外,具有不同密钥规范的 CMK,其价格和请求配额也不同。有关 Amazon KMS 定价的信息,请参阅 Amazon Key Management Service 定价。有关请求配额的信息,请参阅。请求配额

选择密钥用法

CMK 的密钥用法 决定了 CMK 是用于加密和解密还是签名和验证。不能同时选择二者。将 CMK 用于多种操作类型,会使两种操作的产物更容易受到攻击。

如下表所示,对称 CMK 只能用于加密和解密。椭圆曲线 (ECC) CMK 只能用于签名和验证。密钥用法决策实际上只针对 RSA CMK。

CMK 类型的有效密钥用法
CMK 类型 加密和解密 签名和验证
对称 CMK
具有 RSA 密钥对的非对称 CMK
具有 ECC 密钥对的非对称 CMK

在 Amazon KMS 控制台中,首先选择密钥类型(对称或非对称),然后选择密钥用法(对于非对称 CMK)。如果选择对称密钥类型,则不会显示密钥用法选项,因为对称 CMK 仅支持加密和解密。您选择的密钥用法决定了将会显示哪些密钥规范

要在 Amazon KMS 控制台中选择密钥用法,请执行以下操作:

  • 对于具有椭圆曲线 (ECC) 密钥材料的 CMK,选择 Sign and verify (签名和验证)

  • 对于具有 RSA 密钥材料的 CMK,选择 Encrypt and decrypt (加密和解密) or Sign and verify (签名和验证)

要确定账户中的委托人可以用于 CMK 的密钥用法,请使用 kms:CustomerMasterKeyUsage 条件键。

选择密钥规范

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

注意

InAmazon KMSAPI 操作时,CMK 的密钥规范称为CustomerMasterKeySpec。这将它与数据密钥的密钥规范(KeySpec)和数据密钥对(KeyPairSpec),以及包装要导入的密钥材料时使用的密钥规范(WrappingKeySpec)。每个键规范类型都有不同的值。

密钥规范决定了 CMK 是对称还是非对称、CMK 中的密钥材料类型,以及 Amazon KMS 支持用于 CMK 的加密算法或签名算法。选择哪个密钥规范通常取决于使用案例和法规要求。

要确定账户中的委托人可以用于 CMK 的密钥规范,请使用 kms:CustomerMasterKeySpec 条件键。

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

  • 对称 CMK(默认值,加密和解密)

    • 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),常用于加密货币。

主题

以下主题提供了有关密钥规范的技术信息。

SYMMETRIC_DEFAULT 密钥规范

默认密钥规范 SYMMETRIC_DEFAULT 是对称 CMK 的密钥规范。当您选择对称密钥类型中的Amazon KMS控制台时,它会选择SYMMETRIC_DEFAULT密钥规范。在 CreateKey 操作中,如果未指定 CustomerMasterKeySpec 值,则会选择 SYMMETRIC_DEFAULT。如果您没有理由使用其他密钥规范,SymMETIC_DEFAULT 是个不错的选择。

对称 CMK 的加密算法也称为 SYMMETRIC_DEFAULT。目前,这代表了一个基于高级加密标准(AES)Galois 计数器模式(GCM) 和 256 位密钥,这是安全加密的行业标准。此算法生成的密文支持附加身份验证数据 (AAD),如加密上下文,且 GCM 对密文提供额外的完整性检查。有关技术细节,请参阅。Amazon Key Management Service加密详细信息

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

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

RSA 密钥规范

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

警告

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

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

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

  • RSA_2048

  • RSA_3072

  • RSA_4096

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

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

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

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

对于具有 RSA 密钥规范的 CMK,Amazon KMS 支持两种加密算法。这些算法在 PKCS #1 2.2 版中定义,它们内部使用的哈希函数有所不同。InAmazon 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 加密。

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

要获取 CMK 的加密算法,查看加密配置CMK 中的Amazon KMS控制台或使用DescribeKeyoperation.Amazon KMS还在下载公钥时提供密钥规范和加密算法,可以在Amazon KMS控制台或使用GetPublicKeyoperation.

您可以根据可在每个请求中加密的明文数据的长度,选择 RSA 密钥规范。下表显示了在对 Encrypt 操作的单次调用中,可以加密的明文的最大长度(以字节为单位)。值因密钥规范和加密算法而异。为进行比较,使用对称 CMK 一次可加密最多 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 非对称 CMK 进行签名和验证时,用私有密钥为消息生成签名,然后用公有密钥验证签名。

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

对于具有 RSA 密钥规范的 CMK,Amazon KMS 支持以下签名算法。调用 SignVerify 操作时,需要指定签名算法。您可以为每个请求选择不同的算法。

支持 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 签名
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 签名

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

要获取 CMK 的签名算法,查看加密配置CMK 中的Amazon KMS控制台或使用DescribeKeyoperation.Amazon KMS还在下载公钥时提供密钥规范和签名算法,无论是在Amazon KMS控制台或使用GetPublicKeyoperation.

椭圆曲线密钥规范

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

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

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

    • ECC_NIST_P256 (secp256r1)

    • ECC_NIST_P384 (secp384r1)

    • ECC_NIST_P521 (secp521r1)

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

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

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

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

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

支持 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 签名。