本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
AWS Encryption SDK 算法参考
如果您正在构建自己的库来读写与兼容的密文 AWS Encryption SDK,则需要了解该库如何 AWS Encryption SDK 实现支持的算法套件来加密原始数据。
AWS Encryption SDK 支持以下算法套件。所有 AES-GCM 算法套件都有一个 12 字节的初始化向量和一个 16 字节的 AES-GCM身份验证标签。默认算法套件因 AWS Encryption SDK 版本和所选密钥承诺策略而异。有关详细信息,请参阅承诺策略和算法套件。
| 算法 ID | 消息格式版本 | 加密算法 | 数据密钥长度(位) | 密钥派生算法 | 签名算法 | 密钥承诺算法 | 算法套件数据长度(字节) |
|---|---|---|---|---|---|---|---|
05 78 |
0x02 | AES-GCM | 256 | HKDF 与 SHA-512 | 带有和的 ECDSA P-384 SHA-384 | HKDF 与 SHA-512 | 32(密钥承诺) |
04 78 |
0x02 | AES-GCM | 256 | HKDF 与 SHA-512 | 无 | HKDF 与 SHA-512 | 32(密钥承诺) |
03 78 |
0x01 | AES-GCM | 256 | HKDF 与 SHA-384 | 带有和的 ECDSA P-384 SHA-384 | 无 | N/A |
03 46 |
0x01 | AES-GCM | 192 | HKDF 与 SHA-384 | 带有和的 ECDSA P-384 SHA-384 | 无 | N/A |
02 14 |
0x01 | AES-GCM | 128 | HKDF 与 SHA-256 | 带有和的 ECDSA P-256 SHA-256 | 无 | N/A |
01 78 |
0x01 | AES-GCM | 256 | HKDF 与 SHA-256 | 无 | 无 | N/A |
01 46 |
0x01 | AES-GCM | 192 | HKDF 与 SHA-256 | 无 | 无 | N/A |
01 14 |
0x01 | AES-GCM | 128 | HKDF 与 SHA-256 | 无 | 无 | N/A |
00 78 |
0x01 | AES-GCM | 256 | 无 | 无 | 无 | N/A |
00 46 |
0x01 | AES-GCM | 192 | 无 | 无 | 无 | N/A |
00 14 |
0x01 | AES-GCM | 128 | 无 | 无 | 无 | N/A |
- 算法 ID
-
一个 2 字节十六进制值,用于唯一地标识算法实施。该值存储在加密文字的消息标头中。
- 消息格式版本
-
消息格式的版本。带有密钥承诺的算法套件使用消息格式版本 2(0x02)。没有密钥承诺的算法套件使用消息格式版本 1(0x01)。
- 算法套件数据长度
-
特定于算法套件的数据长度(以字节为单位)。只有消息格式版本 2(0x02)支持此字段。在消息格式版本 2(0x02)中,此数据出现在消息标头的
Algorithm suite data字段中。支持密钥承诺的算法套件使用 32 字节作为密钥承诺字符串。有关更多信息,请参阅该列表中的密钥承诺算法。 - 数据密钥长度
-
数据密钥的长度(以位为单位)。 AWS Encryption SDK 支持 256 位、192 位和 128 位密钥。数据密钥是由密钥环或主密钥生成的。
在某些实现中,此数据密钥用作 HMAC-based提取和扩展密钥派生函数 (HKDF) 的输入。HKDF 的输出用作加密算法中的数据加密密钥。有关更多信息,请参阅该列表中的密钥派生算法。
- 加密算法
-
与加密算法一起使用的名称和模式。中的算法套件 AWS Encryption SDK 使用高级加密标准 (AES) 加密算法和 Galois/Counter 模式 (GCM)。
- 密钥承诺算法
-
用于计算密钥承诺字符串的算法。输出存储在消息标头的
Algorithm suite data字段中,用于验证密钥承诺的数据密钥。有关向算法套件添加密钥承诺的技术说明,请参阅 Cryptology ePrint Archive 中的 Key Committing AEADs
。 - 密钥派生算法
-
HMAC-based 提取和扩展密钥派生函数 (HKDF) 用于派生数据加密密钥。 AWS Encryption SDK 使用 RFC 5869 中定义的 HKDF。
没有密钥承诺的算法套件(算法 ID
01xx–03xx)-
使用的哈希函数为 SHA-384 或 SHA-256,具体取决于算法套件。
-
对于提取步骤:
-
不使用加密盐。根据 RFC,加密盐设置为包含零的字符串。字符串长度等于哈希函数输出的长度,该长度为 48 字节,输出为 32 字节 SHA-256。 SHA-384
-
输入加密材料是来自密钥环或主密钥提供程序的数据密钥。
-
-
对于扩展步骤:
-
输入伪随机密钥是提取步骤的输出。
-
输入信息是将算法 ID 和消息 ID(按此顺序)串联在一起的结果。
-
输出加密材料的长度是数据密钥长度。该输出用作加密算法中的数据加密密钥。
-
带有密钥承诺的算法套件(算法 ID
04xx和05xx)-
使用的哈希函数是 SHA-512。
-
对于提取步骤:
-
加密盐是一个 256 位的加密随机值。在消息格式版本 2(0x02)中,此值存储在
MessageID字段中。 -
初始加密材料是来自密钥环或主密钥提供程序的数据密钥。
-
对于扩展步骤:
输入伪随机密钥是提取步骤的输出。
-
密钥标签是按大端 UTF-8-encoded 字节顺序排
DERIVEKEY列的字符串字节。 -
输入信息是将算法 ID 和密钥标签(按此顺序)串联在一起的结果。
-
输出加密材料的长度是数据密钥长度。该输出用作加密算法中的数据加密密钥。
-
- 消息格式版本
-
算法套件中使用的消息格式的版本。有关更多信息,请参阅 消息格式参考。
- 签名算法
-
用于在加密文字标头和正文上生成数字签名的签名算法。 AWS Encryption SDK 使用椭圆曲线数字签名算法 (ECDSA),具体如下:
-
使用的椭圆曲线要么是 P-384 或 P-256 曲线,由算法 ID 指定。这些曲线是在数字签名标准 (DSS) (FIPS PUB 186-4)
中定义的。 -
使用的哈希函数是 SHA-384 (使用 P-384 曲线)或 SHA-256 (使用 P-256 曲线)。
-