

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

# 加密基元
<a name="crypto-primitives"></a>

AWS KMS 使用可配置的加密算法，因此系统可以从一种已批准的算法或模式快速迁移到另一种已批准的算法或模式。初始原定设置加密算法集是从联邦信息处理标准（经 FIPS 批准）算法中选择的，用于确保其安全属性和性能。

## 熵和随机数生成
<a name="entropy-and-random-numbers"></a>

AWS KMS 密钥生成是在上执行的 AWS KMS HSMs。 HSMs 实现使用 [NIST SP800-90A Deterministic Random Bit Generator (DRBG) CTR\$1DRBG using AES-256](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-90Ar1.pdf) 的混合随机数生成器。它采用 384 位熵的非确定性随机位生成器进行植入，并使用额外的熵进行更新，以便在每次调用加密材料时提供预测阻力。

## 对称密钥操作（仅加密）
<a name="symmetric-key-0ps"></a>

其中使用的所有对称密钥加密命令都 HSMs 使用[高级加密标准 (AES)](http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf)，在 G [alois 计数器模式 (GCM)](http://csrc.nist.gov/publications/nistpubs/800-38D/SP-800-38D.pdf) 中使用 256 位密钥。解密的类似调用使用反函数。

AES-GCM 是一种经过身份验证的加密方案。除了对明文进行加密以生成密文外，它还计算密文上的身份验证标签和需要身份验证的任何其他数据（附加身份验证数据或 AAD）。身份验证标签有助于确保数据来自声称的来源，并且密文和 AAD 未被修改。

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

AWS KMS 提供了将密钥材料导入到 AWS KMS key 而不是依赖 AWS KMS 生成密钥材料的选项。可以使用 [RSAES-OAEP 或 RSAES PKCS1-](https://datatracker.ietf.org/doc/html/rfc8017#section-7.1) [v1\$15 对导入的密钥材料进行加密，以便在传输到 HS](https://datatracker.ietf.org/doc/html/rfc8017#section-7.2) M 的过程中保护密钥。 AWS KMS RSA 密钥对是在上 AWS KMS HSMs生成的。导入的密钥材料在 AWS KMS HSM 上解密，然后在 AES-GCM 下重新加密，然后由服务存储。

## 非对称密钥操作（加密、数字签名和签名验证）
<a name="asymmetric-key-ops"></a>

AWS KMS 支持对加密和数字签名操作使用非对称密钥操作。非对称密钥操作依赖于数学上相关的公有密钥和私有密钥对，可用于加密和解密或签名和签名验证，但不能同时用于二者。私钥永远不会处于 AWS KMS 未加密状态。您可以 AWS KMS 通过调用 AWS KMS API 操作在内部使用公钥，也可以下载公钥并在外部使用 AWS KMS。

AWS KMS 支持三种类型的非对称密码。
+ **RSA-OAEP（用于加密）与 RSA-PSS 和 RSA-PKCS-\$11-v1\$15（用于签名和验证）**- 支持 RSA 密钥长度（以位为单位）：2048、3072 和 4096；从而满足不同的安全要求。
+ **椭圆曲线 (ECC)** - 专用于签名和验证。支持 ECC 曲线：NIST P256、P384、P521、SECP 256k1。
+ **后量子密码学**-抗量子计算的新型公钥密码算法。支持 [NIST FIPS 204 模块-莱迪思数字签名算法 (ML-DSA)，密钥大小为 ML\$1DSA\$144、ML\$1DSA\$165 和 ML\$1DSA](https://csrc.nist.gov/pubs/fips/204/final) \$187。

## 密钥派生函数
<a name="key-derivation-functions"></a>

密钥派生函数用于从初始机密或密钥派生其他密钥。 AWS KMS 使用密钥派生函数 (KDF) 为 AWS KMS key下的每个加密派生每次调用的密钥。[所有 KDF 操作[在计数器模式下使用 KDF](https://nvlpubs.nist.gov/nistpubs/legacy/sp/nistspecialpublication800-108.pdf)，使用 HMAC [[FIPS197] 和 []](http://csrc.nist.gov/publications/fips/fips198-1/FIPS-198-1_final.pdf)。 SHA256 FIPS180](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf)256 位派生密钥与 AES-GCM 一起使用，用于加密或解密客户数据和密钥。

## AWS KMS 内部使用数字签名
<a name="digital-signatures"></a>

数字签名还用于验证 AWS KMS 实体之间的命令和通信。所有服务实体都有一个椭圆曲线数字签名算法 (ECDSA) 密钥对。它们执行 ECDSA，如 [Use of Elliptic Curve Cryptography (ECC) Algorithms in Cryptographic Message Syntax (CMS)（在加密消息语法 [CMS] 中使用椭圆曲线加密 [ECC]）](https://datatracker.ietf.org/doc/html/rfc5753/)和 X9.62-2005：*Public Key Cryptography for the Financial Services Industry: The Elliptic Curve Digital Signature Algorithm (ECDSA)（金融服务行业的公有密钥加密：椭圆曲线数字签名算法 [ECDSA]）*中所定义。这些实体使用[联邦信息处理标准出版物 FIPS PUB 180-4 中定义的安全哈希算法，即](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf)。 SHA384这些密钥在曲线 secp384r1 (NIST-P384) 上生成。

## 信封加密
<a name="envelope-encryption"></a>

许多加密系统中使用的基本结构是信封加密。信封加密使用两个或更多加密密钥来保护消息。通常，一个密钥派生自较长期间的静态密钥 *k*，另一个密钥是每条消息密钥 *msgKey*，该密钥生成以加密消息。信封通过加密以下消息形成：*ciphertext = Encrypt(msgKey, message)*。然后，消息密钥使用长期静态密钥进行加密：*encKey = Encrypt(k, msgKey)*。最后，这两个值* (encKey, ciphertext) *打包成一个结构，或信封加密的消息。

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

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

除了 AWS KMS 服务中提供的加密功能外，Encryption [AWS SDK](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/introduction.html) 还提供客户端信封加密库。您可以使用这些库来保护您的数据和用于加密该数据的加密密钥。