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

执行公有密钥加密

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

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

要对在 AWS KMS 外部采用公有密钥加密的数据进行解密,请调用 Decrypt 操作。的 Decrypt 如果数据在公共密钥下加密,则操作失败 CMK 有 关键用途 第页,共页 SIGN_VERIFY。如果通过KMS不支持RSA的算法加密,也会失败 CMKs.

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

与集成的 AWS 服务一起使用

创建 CMK 与 与整合的 AWS KMS,请查阅服务文档。全部 AWS 代表您加密数据的服务需要 对称 CMK.

除了这些考虑之外, CMKs 不同的主要规格具有不同的价格和 请求配额. 有关 AWS KMS 定价的信息,请参阅 AWS Key Management Service 定价。有关 请求配额 的信息,请参阅请求配额

选择密钥用法

关键用途 第页,共页 CMK 确定 CMK 被用于加密和加密-或签名和验证。不能同时选择二者。使用 CMK 适用于多种类型的操作,使两种操作的产品更容易受到攻击。

如下表所示,对称 CMKs 只能用于加密和加密。椭圆形曲线(ECC) CMKs 只能用于签名和验证。主要使用决策只针对RSA CMKs.

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

在 AWS KMS 先选择密钥类型(对称或不对称),然后, CMKs,关键用途。如果您选择对称密钥类型,则不会出现密钥使用选项,因为对称 CMKs 仅支持加密和加密。您选择的密钥用法决定了将会显示哪些密钥规范

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

  • 对于 CMKs 采用椭圆形曲线(ECC)关键材料,选择 签名并验证.

  • 对于 CMKs 使用RSA关键材料,选择 加密和加密签名并验证.

确定客户委托人获准用于的主要用途 CMKs,使用 千米:CustomerMasterKeyUsage 条件键。

选择密钥规范

当你创造一个不对称的 CMK,您选择其 关键规格. 的 关键规格,这是每个 客户主密钥 (CMK),表示您的 CMK. 在创建 CMK,您不能更改。如果你选择了错误的关键规格, 删除 CMK,然后创建新的。

注意

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

关键规范决定了 CMK 是对称的或不对称的, CMK和加密算法或签名算法, AWS KMS 支持 CMK. 选择哪个密钥规范通常取决于使用案例和法规要求。

确定允许客户委托人使用的关键规格 CMKs,使用 千米: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. 如果在 AWS KMS 控制台中选择 Symmetric (对称) 密钥类型,则它会选择 SYMMETRIC_DEFAULT 密钥规范。在 CreateKey 操作中,如果未指定 CustomerMasterKeySpec 值,则会选择 SYMMETRIC_DEFAULT。如果您没有理由使用其他密钥规范,SymMETIC_DEFAULT 是个不错的选择。

对称的加密算法 CMKs 又称为SYMMETRIC_DEFAULT。目前,这是基于 高级加密标准 (AES) Galois计数器模式 (GCM)包含256位密钥,是安全加密的行业标准。此算法生成的密文支持附加身份验证数据 (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 会制造不对称的 CMK 使用RSA密钥对。私有密钥永远不会让 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 操作 AWS KMS 为RSA 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:加密算法 策略条件,以指定允许委托人与 CMK.

为获得 CMK, 查看密码配置 的 CMK 在 AWS KMS 或使用 描述关键 操作。 AWS KMS 当您下载公共密钥时,还提供密钥规范和加密算法, AWS KMS 或使用 GetPublicKey(获取公共密钥) 操作。

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

要计算这些算法的最大纯文本长度(以个位数计),请使用下列公式:(key_size_in_bits /8)-(2* hash_length_in_bits8 >> 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:签名算法 策略条件,以指定允许委托人与 CMK.

为获得 CMK, 查看密码配置 的 CMK 在 AWS KMS 或使用 描述关键 操作。 AWS KMS 下载您的公共密钥时,还会提供关键规范和签名算法, AWS KMS 或使用 GetPublicKey(获取公共密钥) 操作。

椭圆曲线密钥规范

使用椭圆形曲线(ECC)关键规格时, AWS KMS 会制造不对称的 CMK 带有用于签名和验证的ECC密钥对。生成签名的私有密钥永远不会让 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:签名算法 策略条件,以指定允许委托人与 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 签名。