AWS KMS 密码学要点 - AWS Key Management Service

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

AWS KMS 密码学要点

AWS KMS 使用可配置的加密算法,因此系统可以从一种已批准的算法或模式快速迁移到另一种已批准的算法或模式。由于其安全属性和性能,最初的默认加密算法集是从联邦信息处理标准(FIPS经批准的)算法中选出的。

熵和随机数生成

AWS KMS 密钥生成是在中执行的 AWS KMS HSMs。HSMs实现使用 NIST SP800-90A Deterministic Random Bit Generator (DRBG) CTR_DRBG using AES-256 的混合随机数生成器。它采用 384 位熵的非确定性随机位生成器进行植入,并使用额外的熵进行更新,以便在每次调用加密材料时提供预测阻力。

对称密钥操作(仅加密)

其中使用的所有对称密钥加密命令都HSMs使用高级加密标准 (AES),在 Galois 计数器模式 (GCM) 中使用 256 位密钥。解密的类似调用使用反函数。

AES-GCM 是一种经过身份验证的加密方案。除了加密纯文本以生成密文外,它还计算密文上的身份验证标签以及需要身份验证的任何其他数据(另外还有经过身份验证的数据,或)。AAD身份验证标签有助于确保数据来自所谓的来源,并且密文未AAD被修改。

通常,我们的描述AAD中会 AWS 忽略包含,尤其是在提及数据密钥的加密时。在这些情况下,周围的文本暗示要加密的结构在要加密的纯文本和要保护的明AAD文之间进行分区。

AWS KMS 提供了将密钥材料导入到 AWS KMS key 而不是依赖 AWS KMS 生成密钥材料的选项。可以使用 RSAES- 对导入的密钥材料进行加密OAEP,以便在传输到密钥的过程中保护密钥 AWS KMS HSM。RSA密钥对是在上生成的 AWS KMS HSMs。导入的密钥材料将在上解密, AWS KMS HSM并在 AES-下重新加密,GCM然后由服务存储。

非对称密钥操作(加密、数字签名和签名验证)

AWS KMS 支持使用非对称密钥操作进行加密、数字签名和密钥协议操作。非对称密钥操作依赖于数学上相关的公有密钥和私有密钥对,可用于加密和解密、签名和签名验证派生共享密钥。私钥永远不会处于 AWS KMS 未加密状态。您可以 AWS KMS 通过调用 AWS KMS API操作来使用其中的公钥,也可以下载公钥并在外部使用 AWS KMS。

AWS KMS 支持以下非对称密码。

  • RSA-OAEP(用于加密)& RSA-PSS 和-RSA PKCS-#1-v1_5(用于签名和验证)— 支持RSA密钥长度(以位为单位):2048、3072 和 4096,以满足不同的安全要求。

  • Elliptic Curve (ECC)-用于签名和验证或派生共享密钥,但不能两者兼而有之。支持ECC曲线:NISTP256、P384、P521、256k1。SECP

  • SM2(仅限中国区域)— 用于加密和解密、签名和验证或获取共享密钥,但您必须选择一种密钥用法。SM2PKE支持加密和SM2DSA签名。

密钥派生函数

密钥派生函数用于从初始密钥或密钥中派生其他密钥。 AWS KMS 使用密钥派生函数 (KDF) 来派生每个调用的密钥,用于在。 AWS KMS keyKDF在计数器模式下,所有KDF操作都使用 HMAC [FIPS197] FIPS18 和 SHA256 [0]。256 位派生密钥与 AES-GCM 一起使用,用于加密或解密客户数据和密钥。

AWS KMS 内部使用数字签名

数字签名还用于验证 AWS KMS 实体之间的命令和通信。所有服务实体都有椭圆曲线数字签名算法 (ECDSA) key pair。它们的性能ECDSA按照《在加密消息语法中使用椭圆曲线密码学》(ECCCMS) 和《X9.62-2005:金融服务行业的公钥加密:椭圆曲线数字签名算法》() 中的定义。ECDSA这些实体使用联邦信息处理标准出版物 FIPS PUB 180-4 中定义的安全哈希算法,即。SHA384关键帧是在曲线 secp384r1 (-P384) 上生成的。NIST

信封加密

在您加密数据后,数据将受到保护,但您必须保护加密密钥。一种策略是对其进行加密。信封加密 是一种加密方法,它使用数据密钥对明文数据进行加密,然后使用其他密钥对数据密钥进行加密。

您甚至可以使用其他加密密钥对数据加密密钥进行加密,并且在另一个加密密钥下加密该加密密钥。但是,最后,一个密钥必须以明文形式保留,以便您可以解密密钥和数据。此顶级明文密钥加密密钥称为根密钥

信封加密

AWS KMS 通过安全地存储和管理加密密钥来帮助您保护密钥。存储在中的 AWS KMS根密钥(也称为) AWS KMS keys永远不要对 AWS KMS FIPS经过验证的硬件安全模块保持未加密状态。要使用KMS钥匙,您必须致电 AWS KMS。

许多加密系统中使用的基本结构是信封加密。信封加密使用两个或更多加密密钥来保护消息。通常,一个密钥来自长期静态密钥 k,另一个密钥是每条消息的密钥 msgKey,生成该密钥是为了加密消息而生成的。信封是通过加密消息形成的:密文 = Encrypt(msgKey,消息)。然后使用长期静态密钥对消息密钥进行加密:encKey = Encrypt (k,msgKey)。最后,将这两个值(encKey密文)打包成一个结构或信封加密消息。

具有 k 访问权限的收件人可以打开信封加密的消息,方法是首先解密加密的密钥,然后解密消息。

AWS KMS 提供了管理这些长期静态密钥和自动执行数据信封加密过程的能力。

除了 AWS KMS 服务中提供的加密功能外,Encryp SDK ti AWS on 还提供客户端信封加密库。您可以使用这些库来保护您的数据和用于加密该数据的加密密钥。

使用多个密钥加密密钥的信封加密

信封加密可提供以下多种优势:

  • 保护数据密钥

    加密数据密钥时,您无需担心存储加密数据密钥,因为数据密钥本身就受到加密的保护。您可以安全地将加密数据与加密数据密钥一起存储。

  • 使用多个密钥加密相同的数据

    加密操作可能非常耗时,特别是要加密的数据是大型对象时。您可以只重新加密保护原始数据的数据密钥,而无需使用不同的密钥多次重新加密原始数据。

  • 结合多种算法的优势

    通常,与公有密钥算法相比,对称密钥算法速度更快,生成的密文更小。但公有密钥算法可提供固有的角色分离和更轻松的密钥管理。信封加密让您可以每种策略的优势结合起来。

加密操作

在中 AWS KMS,加密API操作是使用KMS密钥保护数据的操作。由于KMS密钥保留在其中 AWS KMS,因此您必须调用 AWS KMS 才能在加密操作中使用KMS密钥。

要使用KMS密钥执行加密操作,请使用 AWS SDKs、 AWS Command Line Interface (AWS CLI) 或。 AWS Tools for PowerShell无法在 AWS KMS 控制台中执行加密操作。有关使用多种编程语言调用加密操作的示例,请参阅使用的代码示 AWS KMS 例 AWS SDKs

下表列出了 AWS KMS 加密操作。它还显示了操作中使用的密钥的KMS密钥类型和密钥使用要求。

操作 密钥类型 密钥用法
Decrypt 对称或非对称 ENCRYPT_DECRYPT
DeriveSharedSecret 非对称 KEY_AGREEMENT
Encrypt 对称或非对称 ENCRYPT_DECRYPT
GenerateDataKey 对称 ENCRYPT_DECRYPT
GenerateDataKeyPair 对称 [1]

自定义KMS密钥库中的密钥不支持。

ENCRYPT_DECRYPT
GenerateDataKeyPairWithoutPlaintext 对称 [1]

自定义KMS密钥库中的密钥不支持。

ENCRYPT_DECRYPT
GenerateDataKeyWithoutPlaintext 对称 ENCRYPT_DECRYPT
GenerateMac HMAC GENERATE_VERIFY_MAC
GenerateRandom 不适用。此操作不使用密KMS钥。 不适用
ReEncrypt 对称或非对称 ENCRYPT_DECRYPT
Sign 非对称 SIGN_VERIFY
Verify 非对称 SIGN_VERIFY
VerifyMac HMAC GENERATE_VERIFY_MAC

[1] 生成受对称加密KMS密钥保护的非对称数据密钥对。

有关加密操作的权限的信息,请参阅 AWS KMS 权限

为了让所有用户都能 AWS KMS 快速响应且功能强大, AWS KMS 请为每秒调用的加密操作数量设定配额。有关详细信息,请参阅加密操作的共享配额