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

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

如何选择您的 CMK 配置

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

AWS KMS 支持两种 CMK 密钥类型:对称非对称。每个密钥类型都与特定的密钥用法密钥规范选项关联。

使用以下指南,根据您的使用案例确定您需要哪种类型的CMK。

加密和解密数据

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

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

签署消息并验证签名

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

执行公有密钥加密

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

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

要解密在 AWS KMS 外部使用公有密钥加密的数据,请调用 Decrypt 操作。如果数据是使用Decrypt密钥用法CMK为 中的公有密钥加密的,则 SIGN_VERIFY 操作将失败。 如果它是使用 KMS 不支持用于 RSA CMKs 的算法进行加密的,则也将失败。

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

与集成的 AWS 服务一起使用

要创建与CMK与 集成的 AWS 服务AWS KMS结合使用的,请参阅该服务的文档。代表您加密数据的所有 AWS 服务都需要对称 CMK

除了这些注意事项之外,具有不同密钥规范的 CMKs 具有不同的价格和不同的 请求配额。有关 AWS KMS 定价的信息,请参阅 AWS Key Management Service 定价. 有关 请求配额 的信息,请参阅请求配额

选择密钥用法

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

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

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

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

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

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

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

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

选择密钥规范

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

注意

在 AWS KMS API 操作中,CMK 的密钥规范称为 CustomerMasterKeySpec。这使其与数据密钥 (KeySpec) 和数据密钥对 (KeyPairSpec) 的密钥规范以及包装要导入的密钥材料的密钥规范 (WrappingKeySpec) 区别开来。每种密钥规范类型都有不同的值。

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

要确定允许您的账户中的委托人用于 CMKs 的密钥规范,请使用 kms:CustomerMasterKeySpec 条件键。

AWS KMS 支持 CMKs 的以下密钥规范:

  • 对称 CMKs(默认值;加密和解密)

    • 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 是对称 CMKs 的密钥规范。当您在 控制台中选择 Symmetric (对称)AWS KMS 密钥类型时,它会选择 SYMMETRIC_DEFAULT 密钥规范。在 CreateKey 操作中,如果您不指定 CustomerMasterKeySpec 值,则会选择 SYMMETRIC_DEFAULT。如果您没有理由使用其他密钥规范,SymMETIC_DEFAULT 是个不错的选择。

对称 CMKs 的加密算法也称为 SYMMETRIC_DEFAULT。目前,这表示基于伽罗瓦计数器模式 (GCM) 中具有 256 位密钥的高级加密标准 (AES) 的对称算法,这是安全加密的行业标准。此算法生成的密文支持其他经过身份验证的数据 (AAD),如加密上下文,并且 GCM 会针对密文提供额外的完整性检查。有关技术详细信息,请参阅AWS Key Management Service 加密详细信息

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

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

RSA 密钥规范

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

警告

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

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

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

  • RSA_2048

  • RSA_3072

  • RSA_4096

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

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

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

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

对于具有 RSA 密钥规范的 AWS KMS,CMKs 支持两种加密算法。这些算法在 PKCS #1 2.2 版中定义,它们在内部使用的哈希函数不同。在 AWS 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的加密配置AWS KMS或使用 DescribeKey 操作。在 AWS KMS 控制台中或者使用 AWS KMSGetPublicKey 操作下载公有密钥时, 还提供了密钥规范和加密算法。

您可以根据可在每个请求中加密的明文数据的长度,选择 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 进行签名和验证时,您可以使用私有密钥为消息生成签名,并使用公有密钥验证签名。

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

对于具有 RSA 密钥规范的 AWS KMS,CMKs 支持以下签名算法。当您调用 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的签名算法,请在 控制台中或者使用 CMKAWS KMS 操作,查看 DescribeKey的加密配置。在 AWS KMS 控制台中或者使用 AWS KMSGetPublicKey 操作下载公有密钥时, 还提供了密钥规范和签名算法。

椭圆曲线密钥规范

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

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

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

    • ECC_NIST_P256 (secp256r1)

    • ECC_NIST_P384 (secp384r1)

    • ECC_NIST_P521 (secp521r1)

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

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

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

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

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

下表显示了 AWS 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 签名。