特殊用途密钥 - AWS Key Management Service

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

特殊用途密钥

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

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

您可以使用中的对称加密 KMS 密钥 AWS 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 通过调用 AWS KMS API 操作在内部使用公钥,也可以下载公钥并在外部使用 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 进行加密 AWS KMS,那么非对称 KMS 密钥是一个不错的选择。您可以分发非对称 KMS 密钥的公有密钥,以允许这些用户对数据进行加密。需要解密该数据的应用程序,可以在 AWS KMS内部使用非对称 KMS 密钥的私有密钥。

签署消息并验证签名

要签署消息并验证签名,必须使用非对称 KMS 密钥。您可以将 KMS 密钥与表示 RSA 密钥对、椭圆曲线(ECC)密钥对或 SM2 密钥对的密钥规范一起使用(仅限中国区域)。选择哪种密钥规范由想要使用的签名算法决定。推荐使用 ECC 密钥对支持的 ECDSA 签名算法,而不是 RSA 签名算法。但是,您可能需要使用特定的密钥规范和签名算法来支持在外部验证签名的用户 AWS。

使用非对称密钥对进行加密

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

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

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

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

派生共享机密

要派生共享密钥,请使用带有 NIST 推荐的椭圆曲线的 KMS 密钥或 SM2(仅限中国区域)密钥材料。 AWS KMS 使用椭圆曲线密码学辅助因子 Diffie-Hellman Priman Primitive (ECDH) 通过从两个对等体的椭圆曲线公私钥对中得出共享密钥来建立密钥协议。您可以使用 DeriveSharedSecret操作返回的原始共享密钥来派生对称密钥,该密钥可以加密和解密在双方之间发送的数据,或者生成和验证 HMAC。 AWS KMS 建议您在使用原始共享密钥派生对称密钥时,遵循 NIST 关于密钥派生的建议。

生成并验证 HMAC 代码

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

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

与 AWS 服务一起使用

要创建 KMS 密钥以与集成的AWS 服务一起使用 AWS KMS,请查阅该服务的文档。 AWS 加密数据的服务需要对称加密 KMS 密钥

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

选择密钥用法

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

每个 KMS 密钥都只能有一个密钥用法。如下表所示,对称加密 KMS 密钥只能用于加密和解密。HMAC KMS 密钥只能用于生成和验证 HMAC 代码。您需要为非对称 KMS 密钥做出密钥使用决定。带有 RSA 密钥对的非对称 KMS 密钥可用于加密或解密数据或对消息进行签名和验证(但不能两者兼而有之)。带有 NIST 推荐的椭圆曲线密钥对的非对称 KMS 密钥可用于签名和验证消息或派生共享密钥(但不能两者兼而有之)。带有ECC_SECG_P256K1密钥对的非对称 KMS 密钥只能用于对消息进行签名和验证。带有 SM2(仅限中国区域)密钥对的非对称 KMS 密钥可用于加密和解密数据、签名和验证消息或派生共享密钥(必须选择一种密钥使用类型)。

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

ENCRYPT_DECRYPT

签名和验证

SIGN_VERIFY

生成并验证 MAC

GENERATE_VERIFY_MAC

派生共享机密

密钥协议

对称加密 KMS 密钥
HMAC KMS 密钥(对称)
具有 RSA 密钥对的非对称 KMS 密钥
具有 ECC 密钥对的非对称 KMS 密钥

您必须使用非对称 KMS 密钥和 NIST 推荐的椭圆曲线密钥材料来派生共享密钥。

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

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

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

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

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

  • 对于具有 NIST 推荐的椭圆曲线 (ECC) 密钥材料的非对称 KMS 密钥,请选择签名并验证或密钥协议。

  • 对于带有ECC_SECG_P256K1密钥材料的非对称 KMS 密钥,请选择签名并验证

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

  • 对于带有 SM2 密钥材料的非对称 KMS 密钥,请选择 “加密和解密”、“签名并验证” 或 “密钥协议”。SM2 密钥规范仅限中国区域使用。

要允许委托人仅针对特定的密钥使用创建 KMS 密钥,请使用 k ms: 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 密钥加密操作的密钥规范不同,其价格和限额也不同。有关定价的详细信息,请参阅 AWS Key Management Service 定价。有关请求配额的信息,请参阅 请求配额

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

AWS KMS 支持 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(仅限中国区域)