加密基元 - AWS Key Management Service

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

加密基元

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

熵和随机数生成

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

对称密钥操作(仅加密)

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

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

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

AWS KMS 提供了一个可将密钥材料导入 AWS KMS key 中的选项,而不必依赖 AWS KMS 来生成密钥材料。这一导入的密钥材料可以使用 RSAES-OAEPRSAES-PKCS1-v1_5 进行加密,从而在传输到 AWS KMS HSM 的过程中保护密钥。RSA 密钥对在 AWS KMS HSM 上生成。导入的密钥材料在 AWS KMS HSM 上解密,然后在通过服务存储之前在 AES-GCM 下重新加密。

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

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

AWS KMS 支持两种类型的非对称密码。

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

  • 椭圆曲线 (ECC) - 专用于签名和验证。支持 ECC 曲线:NIST P256、P384、P521、SECP 256k1。

密钥派生函数

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

AWS KMS 内部使用的数字签名

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

信封加密

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

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

AWS KMS 能够管理这些较长期间的静态密钥,并自动执行数据信封加密的过程。

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