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

选择您的 KMS 密钥配置

Amazon KMS 支持对称 KMS 密钥和非对称 KMS 密钥。

  • 对称 KMS 密钥:表示为单个 256 位私有加密密钥,它永远不会让 Amazon KMS 处于未加密状态。要使用对称 KMS 密钥,必须调用 Amazon KMS。

  • 非对称 KMS 密钥:表示为数学上相关的公有密钥和私有密钥对,可用于加密和解密或签名和验证,但不能同时用于二者。私有密钥永远不会让 Amazon KMS 处于未加密状态。您可以通过调用 Amazon KMS API 操作在 Amazon KMS 内使用公有密钥,或下载公有密钥并在 Amazon KMS 外部使用该密钥。

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

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

加密和解密数据

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

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

签署消息并验证签名

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

执行公有密钥加密

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

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

要对在 Amazon KMS 外部采用公有密钥加密的数据进行解密,请调用 Decrypt 操作。如果使用 SIGN_VERIFY密钥用法通过 KMS 密钥中的公有密钥对数据进行加密,则 Decrypt 操作会失败。如果数据采用 Amazon KMS 不支持用于 RSA KMS 密钥的算法进行加密,则此操作也将失败。

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

与集成的 Amazon 服务一起使用

要创建一个 KMS 密钥,以便用于集成到 Amazon KMS 的 Amazon 服务,请参阅该服务的文档。加密数据的 Amazon 服务需要对称 KMS 密钥

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

选择密钥用法

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

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

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

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

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

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

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

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

选择密钥规范

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

注意

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

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

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

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

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

主题

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

SYMMETRIC_DEFAULT 密钥规范

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

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

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

在 Amazon KMS 中,可以使用对称 KMS 密钥加密、解密和重新加密数据,生成数据密钥和数据密钥对。与 Amazon KMS 集成的 Amazon 服务使用对称 KMS 密钥来加密静态数据。您可以将自己的密钥材料导入对称 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 密钥规范可能取决于安全标准或任务要求。一般来说,可使用对任务而言实用又实惠的最大密钥。使用不同 RSA 密钥规范的 KMS 密钥定价不同,并受不同的请求配额限制。有关 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 函数。

Amazon KMS对于具有 RSA 密钥规范的 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 外部使用该密钥验证签名。

Amazon KMS对于具有 RSA 密钥规范的 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 签名

无法将 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 外部使用。

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

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

    • ECC_NIST_P256 (secp256r1)

    • ECC_NIST_P384 (secp384r1)

    • ECC_NIST_P521 (secp521r1)

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

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

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

如果您正在创建非对称 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 签名。