特殊用途密钥 - Amazon Key Management Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

特殊用途密钥

Amazon Key Management Service (Amazon KMS) 支持不同用途的多种不同类型密钥。

创建 Amazon KMS key时,默认情况下您将获得对称加密 KMS 密钥。在 Amazon KMS 中,对称加密 KMS 密钥表示用来加密和解密的 256 位 AES-GCM 密钥,但在中国区域,它表示使用 SM4 加密的 128 位对称密钥。对称密钥材料绝不会让 Amazon KMS 处于未加密状态。除非任务明确要求使用非对称加密或 HMAC 密钥,否则对称加密 KMS 密钥(永远不会让 Amazon KMS 处于未加密状态)是个不错的选择。此外,与 Amazon KMS 集成的 Amazon 服务仅使用对称加密 KMS 密钥加密您的数据。这些服务不支持使用非对称 KMS 密钥进行加密。

在 Amazon KMS 中,可以使用对称加密 KMS 密钥加密、解密和重新加密数据,生成数据密钥和数据密钥对,并生成随机字节字符串。您可以将自己的密钥材料导入对称加密 KMS 密钥中,并在自定义密钥存储中创建对称加密 KMS 密钥。有关可以对对称 KMS 密钥和非对称 KMS 密钥执行的操作的比较表格,请参阅 密钥类型引用

Amazon KMS 也支持以下特殊用途的 KMS 密钥类型:

选择一种 KMS 密钥类型

Amazon KMS 支持多种类型的 KMS 密钥:对称加密密钥、对称 HMAC 密钥、非对称加密密钥和非对称签名密钥。

KMS 密钥不同,因为它们包含不同的加密密钥材料。

  • 对称加密 KMS 密钥:表示单个 256 位 AES-GCM 加密密钥,但在中国区域,它表示 128 位 SM4 加密密钥。对称密钥材料绝不会让 Amazon KMS 处于未加密状态。要使用对称加密 KMS 密钥,必须调用 Amazon KMS。

    对称加密密钥是默认的 KMS 密钥,是大多数用途的理想选择。如果您需要 KMS 密钥来保护 Amazon Web Service 中的数据,除非指示您使用其他类型的密钥,否则请使用对称加密密钥。

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

  • HMAC KMS 密钥(对称):表示长度不同的对称密钥,用于生成和验证散列消息认证码。HMAC KMS 密钥中的密钥材料绝不会让 Amazon KMS 处于未加密状态。要使用 HMAC KMS 密钥,您必须调用 Amazon 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)密钥对或 SM2 密钥对的密钥规范一起使用(仅限中国区域)。选择哪种密钥规范由想要使用的签名算法决定。推荐使用 ECC 密钥对支持的 ECDSA 签名算法,而不是 RSA 签名算法。不过,您可能需要使用特定的密钥规范和签名算法来支持在 Amazon 之外验证签名的用户。

执行公有密钥加密

要执行公有密钥加密,必须将非对称 KMS 密钥RSA 密钥规范 SM2 密钥规范一起使用(仅限中国区域)。要使用 KMS 密钥对的公有密钥为 Amazon KMS 中的数据进行加密,请使用 Encrypt 操作。还可以下载公有密钥,并与需要在 Amazon KMS 外部加密数据的各方共享。

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

要对在 Amazon KMS 外部采用公有密钥加密的数据进行解密,请调用 Decrypt 操作。如果使用 SIGN_VERIFY密钥用法通过 KMS 密钥中的公有密钥对数据进行加密,则 Decrypt 操作会失败。如果数据采用 Amazon KMS 不支持用于选定密钥规范对密钥的算法进行加密,则此操作也将失败。有关密钥规范和支持算法的更多信息,请参阅非对称密钥规范

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

生成并验证 HMAC 代码

要生成和验证散列消息认证码,请使用 HMAC 密钥。当您在 Amazon KMS 中创建 HMAC 密钥时、Amazon KMS 创建和保护您的密钥材料,并确保您对密钥使用正确的 MAC 算法。HMAC 代码也可以用作伪随机数,在某些情况下用于对称签名和令牌化。

HMAC KMS 密钥是对称密钥。在 Amazon KMS 控制台中创建 HMAC KMS 密钥时,选择 Symmetric 密钥类型。

与 Amazon 服务结合使用

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

除上述注意事项外,KMS 密钥加密操作的密钥规范不同,其价格和请求限额也不同。有关 Amazon KMS 定价的信息,请参阅 Amazon Key Management Service 定价。有关请求配额的信息,请参阅 请求配额

选择密钥用法

KMS 密钥的密钥用法 决定了 KMS 密钥是用于加密和解密、签名和验证签名,还是生成和验证 HMAC 标签。每个 KMS 密钥只有一个密钥用法。将 KMS 密钥用于多种操作类型,会使所有操作的产物更容易受到攻击。

如下表所示,对称加密 KMS 密钥只能用于加密和解密。HMAC KMS 密钥只能用于生成和验证 HMAC 代码。椭圆曲线 (ECC) KMS 密钥只能用于签名和验证。您需要仅为 RSA KMS 密钥作出密钥用法决策。

KMS 密钥类型的有效密钥用法
KMS 密钥类型 加密和解密

ENCRYPT_DECRYPT

签名和验证

SIGN_VERIFY

生成并验证 MAC

GENERATE_VERIFY_MAC

对称加密 KMS 密钥
HMAC KMS 密钥(对称)
具有 RSA 密钥对的非对称 KMS 密钥
具有 ECC 密钥对的非对称 KMS 密钥
具有 SM2 密钥对的非对称 KMS 密钥(仅限中国区域)

在 Amazon KMS 控制台中,首先选择密钥类型(对称或非对称),然后选择密钥用法。您选择的密钥类型决定了将会显示哪些密钥用法选项。您选择的密钥用法决定了将会显示哪些密钥规范(如果)。

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

  • 对于对称加密 KMS 密钥(默认值),选择 Encrypt and decrypt(加密和解密)。

  • 对于 HMAC KMS 密钥,请选择 Generate and verify MAC(生成并验证 MAC)。

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

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

  • 对于具有 SM2 密钥材料的非对称 KMS 密钥,选择 Encrypt and decrypt(加密和解密)或 Sign and verify(签名和验证)。SM2 密钥规范仅限中国区域使用。

要允许委托人仅针对特定的密钥使用创建 KMS 密钥,请使用 k ms: KeyUsage 条件密钥。还可以使用 kms:KeyUsage 条件键,允许委托人根据 KMS 密钥的密钥用法对其调用 API 操作。例如,可以允许仅当 KMS 密钥的密钥用法为 SIGN_VERIFY 时禁用 KMS 密钥的权限。

选择密钥规范

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

注意

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

密钥规范决定了 KMS 密钥是对称还是非对称、KMS 密钥中的密钥材料类型,以及 Amazon KMS 支持用于 KMS 密钥的加密算法、签名算法或消息认证码(MAC)算法。选择哪个密钥规范通常取决于使用案例和法规要求。但是,KMS 密钥加密操作的密钥规范不同,其价格和限额也不同。有关定价的详细信息,请参阅 Amazon Key Management Service 定价。有关请求配额的信息,请参阅 请求配额

要确定允许您账户中的委托人用于 KMS 密钥的密钥规范,请使用 k ms: KeySpec 条件密钥。

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

对称加密密钥规范(默认值)
  • SYMMETRIC_DEFAULT

HMAC 密钥规范
  • HMAC_224

  • HMAC_256

  • HMAC_384

  • HMAC_512

RSA 密钥规范(加密和解密或签名和验证)
  • RSA_2048

  • RSA_3072

  • RSA_4096

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

    • ECC_NIST_P256 (secp256r1)

    • ECC_NIST_P384 (secp384r1)

    • ECC_NIST_P521 (secp521r1)

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

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

SM2 密钥规范(加密和解密或签名和验证)
  • SM2(仅限中国区域)