AWS Encryption SDK 算法参考 - AWS Encryption SDK

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

AWS Encryption SDK 算法参考

本页面提供了在您构建与 AWS Encryption SDK兼容的加密库时可供参考的信息。如果您不需要构建自己的兼容加密库,则可能不需要此信息。

要 AWS Encryption SDK 在支持的编程语言之一中使用,请参阅编程语言

有关定义适当 AWS Encryption SDK 实现要素的规范,请参阅中的AWS Encryption SDK 规范 GitHub。

如果您正在构建自己的库,该库可以读取和写入与兼容的密文 AWS Encryption SDK,则需要了解如何 AWS Encryption SDK 实现支持的算法套件来加密原始数据。

AWS Encryption SDK 支持以下算法套件。所有 AES-GCM 算法套件都有一个 12 字节的初始化向量和一个 16 字节的 AES-GCM 身份验证标签。默认算法套件因 AWS Encryption SDK 版本和所选密钥承诺策略而异。有关详细信息,请参阅承诺策略和算法套件

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 不适用
03 46 0x01 AES-GCM 192 HKDF 以及 SHA-384 ECDSA 以及 P-384 和 SHA-384 不适用
02 14 0x01 AES-GCM 128 HKDF 以及 SHA-256 ECDSA 以及 P-256 和 SHA-256 不适用
01 78 0x01 AES-GCM 256 HKDF 以及 SHA-256 不适用
01 46 0x01 AES-GCM 192 HKDF 以及 SHA-256 不适用
01 14 0x01 AES-GCM 128 HKDF 以及 SHA-256 不适用
00 78 0x01 AES-GCM 256 不适用
00 46 0x01 AES-GCM 192 不适用
00 14 0x01 AES-GCM 128 不适用
算法 ID

一个 2 字节十六进制值,用于唯一地标识算法实施。该值存储在加密文字的消息标头中。

消息格式版本

消息格式的版本。带有密钥承诺的算法套件使用消息格式版本 2(0x02)。没有密钥承诺的算法套件使用消息格式版本 1(0x01)。

算法套件数据长度

特定于算法套件的数据长度(以字节为单位)。只有消息格式版本 2(0x02)支持此字段。在消息格式版本 2(0x02)中,此数据出现在消息标头的 Algorithm suite data 字段中。支持密钥承诺的算法套件使用 32 字节作为密钥承诺字符串。有关更多信息,请参阅该列表中的密钥承诺算法

数据密钥长度

数据密钥的长度(以位为单位)。 AWS Encryption SDK 支持 256 位、192 位和 128 位密钥。数据密钥是由密钥环或主密钥生成的。

在某些实现中,此数据密钥用作基于 HMAC 的密 extract-and-expand 钥派生函数 (HKDF) 的输入。HKDF 的输出用作加密算法中的数据加密密钥。有关更多信息,请参阅该列表中的密钥派生算法

加密算法

与加密算法一起使用的名称和模式。 AWS Encryption SDK 中的算法套件使用具有伽罗瓦/计数器模式(GCM)的高级加密标准(AES)加密算法。

密钥承诺算法

用于计算密钥承诺字符串的算法。输出存储在消息标头的 Algorithm suite data 字段中,用于验证密钥承诺的数据密钥。

有关向算法套件添加密钥承诺的技术说明,请参阅 Cryptology ePrint Archive 中的 Key Committing AEADs

密钥派生算法

基于 HMAC 的 extract-and-expand 密钥派生函数 (HKDF),用于派生数据加密密钥。 AWS Encryption SDK 使用 RFC 5869 中定义的 HKDF。

没有密钥承诺的算法套件(算法 ID 01xx03xx

  • 使用的哈希函数是 SHA-384 或 SHA-256,取决于算法套件。

  • 对于提取步骤:

    • 不使用加密盐。根据 RFC,加密盐设置为包含零的字符串。字符串长度等于哈希函数输出长度;即,SHA-384 为 48 个字节,SHA-256 为 32 个字节。

    • 输入加密材料是来自密钥环或主密钥提供程序的数据密钥。

  • 对于扩展步骤:

    • 输入伪随机密钥是提取步骤的输出。

    • 输入信息是将算法 ID 和消息 ID(按此顺序)串联在一起的结果。

    • 输出加密材料的长度是数据密钥长度。该输出用作加密算法中的数据加密密钥。

带有密钥承诺的算法套件(算法 ID 04xx05xx

  • 使用的哈希函数是 SHA-512。

  • 对于提取步骤:

    • 加密盐是一个 256 位的加密随机值。在消息格式版本 2(0x02)中,此值存储在 MessageID 字段中。

    • 初始加密材料是来自密钥环或主密钥提供程序的数据密钥。

  • 对于扩展步骤:

    • 输入伪随机密钥是提取步骤的输出。

    • 密钥标签是按大端字节顺序排列的 DERIVEKEY 字符串的 UTF-8 编码字节。

    • 输入信息是将算法 ID 和密钥标签(按此顺序)串联在一起的结果。

    • 输出加密材料的长度是数据密钥长度。该输出用作加密算法中的数据加密密钥。

消息格式版本

算法套件中使用的消息格式的版本。有关更多信息,请参阅 消息格式参考

签名算法

用于在加密文字标头和正文上生成数字签名的签名算法。 AWS Encryption SDK 使用椭圆曲线数字签名算法 (ECDSA),具体细节如下:

  • 使用的椭圆曲线是 P-384 或 P-256 曲线(由算法 ID 指定)。这些曲线是在数字签名标准 (DSS) (FIPS PUB 186-4) 中定义的。

  • 使用的哈希函数是 SHA-384(具有 P-384 曲线)或 SHA-256(具有 P-256 曲线)。