如何选择您的 CMK 配置 - AWS Key Management Service

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

如何选择您的 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 操作。此时,请选择与这些用户在其本地应用程序中可支持的签名算法相关联的密钥规范

执行公有密钥加密

要执行公有密钥加密,您必须将非对称 CMKRSA 密钥规范结合使用。椭圆曲线 (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 type 加密和解密 签名和验证
对称 CMKs
CMKs 具有 RSA 密钥对的非对称
CMKs 具有 ECC 密钥对的非对称

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

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

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

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

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

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

您可以使用 CMK 中的对称AWS KMS加密、解密和重新加密数据,并生成数据密钥和数据密钥对。与 集成的 AWS 服务AWS KMS使用对称CMKs加密静态数据。您可以将自己的密钥材料导入 AWS Key Management Service (AWS KMS) 中的密钥材料导入对称,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 密钥规范可能取决于安全标准或任务要求。通常,使用对您的任务而言实用且经济实惠的最大密钥CMKs。具有不同 RSA 密钥规范的 定价不同,并受不同的 的约束请求配额。有关 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 函数。

AWS KMS 对于CMKs具有 RSA 密钥规范的 支持两种加密算法。这些算法在 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 KMS 控制台中或使用 GetPublicKey 操作下载公有密钥时的密钥规范和加密算法。

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

要计算这些算法的最大明文长度(以字节为单位),请使用以下公式:(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 外部使用该密钥验证签名。

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

椭圆曲线密钥规范

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

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

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

    • ECC_NIST_P256 (secp256r1)

    • ECC_NIST_P384 (secp384r1)

    • ECC_NIST_P521 (secp521r1)

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

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

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

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

CMKs 具有不同 ECC 密钥规范的 定价不同,并受不同的 的约束请求配额。有关 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 签名。