特殊用途密钥 - AWS Key Management Service

特殊用途密钥

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

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

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

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

选择一种 KMS 密钥类型

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

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

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

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

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

  • HMAC KMS 密钥(对称):表示长度不同的对称密钥,用于生成和验证散列消息认证码。HMAC KMS 密钥中的密钥材料绝不会让 AWS KMS 处于未加密状态。要使用 HMAC KMS 密钥,您必须调用 AWS KMS。

 

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

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

加密和解密数据

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

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

签署消息并验证签名

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

执行公有密钥加密

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

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

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

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

生成并验证 HMAC 代码

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

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

注意

并非所有 AWS 区域 都支持 HMAC KMS 密钥。有关支持 HMAC KMS 密钥的区域的列表,请参阅 HMAC 区域

与 AWS 服务结合使用

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

除上述考虑因素之外,KMS 密钥的密钥规范不同,其价格和请求配额也不同。有关 AWS KMS 定价的信息,请参阅 AWS 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 密钥(仅限中国区域)

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

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

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

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

    注意

    并非所有 AWS 区域 都支持 HMAC KMS 密钥。有关支持 HMAC KMS 密钥的区域的列表,请参阅 HMAC 区域

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

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

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

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

选择密钥规范

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

注意

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

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

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

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

注意

并非所有 AWS 区域 都支持 HMAC KMS 密钥。有关支持 HMAC KMS 密钥的区域的列表,请参阅 HMAC 区域

对称加密密钥规范(默认值)
  • 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(仅限中国区域)