本文是利用人工智能生成的的技术解析与实现示例。所发布的代码和步骤基于一手资料构建,但未经作者在实机上进行运行验证。根据环境和版本的不同,运行结果可能会有所差异。本文根据官方规范,对 RFC 10032 中规定的高速认证加密(AEAD)算法“AEGIS”家族的组成要素及处理机制进行安全且实用的整理。我们将详细了解 AEGIS-128L 和 AEGIS-256 等各变体的特点、内部状态的更新方法,以及消息的加密与解密过程。
1. AEGIS 家族概述与定位
AEGIS 是在 CAESAR 竞赛中为高性能用途选出的 AEAD 算法家族。作为密码研究工作组(CFRG)的成果,它以信息性(Informational)文档的形式总结在 RFC 10032 中。
与 AES-GCM 等现有结构相比,它不仅在配备 AES 指令集的 CPU 上表现出优异的性能,而且在不使用 AES 指令的软件实现中也具有高速运行的特性。此外,AEGIS-256 和 AEGIS-256X 等变体的一个特点是,可以安全地选择随机 nonce,且没有实际限制。
在一手资料中,规定了以下主要变体。
AEGIS-128L: 具有 128 位密钥、128 位 nonce、1024 位状态(8 个 128 位块)、128 或 256 位认证标签,并处理 256 位输入块。
AEGIS-256: 具有 256 位密钥、256 位 nonce、768 位状态(6 个 128 位块)、128 或 256 位认证标签,并处理 128 位输入块。
AEGIS-128X: 基于 AEGIS-128L,是专为拥有大型向量寄存器和向量 AES 指令的 CPU 设计的模式。
AEGIS-256X: 基于 AEGIS-256,是专为拥有大型向量寄存器和向量 AES 指令的 CPU 设计的模式。
所有变体均采用无逆函数(inverse-free)的结构,并通过组合 AES 的加密轮函数(AESRound)来构建。
2. 原语与通用定义
在 RFC 10032 中,为了描述算法规范,定义了一些基本的运算符和函数。
{}: 空位数组|x|: $x$ 的位长度a ^ b: 按位异或(XOR)a & b: 按位与(AND)a || b: 连接LE64(x): 无符号64位整数 $x$ 的小端序编码Zeros(n): 全为0的 $n$ 比特数组ZeroPad(x, n): 添加零填充以使长度为 $n$ 比特倍数的函数AESRound(in, rk):SubBytes、ShiftRows、MixColumns、AddRoundKey相结合的单个AES轮函数
此外,作为常量块,定义了由16字节十六进制值组成的 C0 和 C1。
3. AEGIS-128L的结构与内部函数
AEGIS-128L维持一个1024位的状态,由八个128位块 ${S_0, \dots, S_7}$ 组成。在此梳理主要内部函数的作用。
flowchart TD
Init["Init(key, nonce)"] --> Absorb["Absorb(ai) <br/> 関連データの吸収"]
Absorb --> EncDec["Enc(xi) / Dec(ci) <br/> ブロックの暗号化・復号"]
EncDec --> Finalize["Finalize(ad_len, msg_len) <br/> 認証タグ生成"]
初始化函数(Init)
Init(key, nonce) 使用给定的 key 和 nonce 构建初始状态 ${S_0, \dots, S_7}$。在将密钥和随机数(nonce)的异或以及常量块 C0、C1 配置到初始状态后,Update 函数重复执行10次以进行搅动。
状态更新函数(Update)
Update(M0, M1) 是AEGIS-128L的核心状态更新函数。它接收两个128位值(或块),在应用AES轮函数的同时依次更新八个状态块 ${S_0, \dots, S_7}$。
加密与解密(Enc / Dec)
Encrypt 以及 Decrypt 过程中,填充后的关联数据会由 Absorb 函数依次吸收,然后以消息块为单位进行加密(Enc)或解密(Dec)。对于末尾不完整的块,将应用 DecPartial。
标签生成函数(Finalize)
Finalize(ad_len_bits, msg_len_bits) 结合关联数据和消息的长度来计算标签。标签长度为128位和256位时的输出格式有所不同,该标签用于检测数据是否被篡改。
4. 安全特性与设计注意事项
RFC 10032 阐述了针对传统 AEAD 方案(如 AES-GCM)中指出的问题的抵抗力,以及 AEGIS 特有的安全优势。
对分区预言机攻击的抵抗力: 在 AES-GCM 等部分方案中,攻击者有时可以生成能使用多个不同密钥成功解密的密文,这可能会被用于提高密码搜索等操作的效率。另一方面,在 AEGIS 中寻找不同密钥或随机数(nonce)对的难度取决于标签大小,128位或256位的标签可确保足够的安全性。
减轻状态泄露的影响: 与许多基于 AES 的结构不同,即使内部状态的一部分发生泄露,该结构也不会直接导致密钥或过去的状态泄露。
临时密钥的保护: AEGIS 的密钥在执行初始化函数后无需保留,且不存在密钥编排。这使得在数据加密和解密之前可以从内存中擦除临时密钥,从而降低冷启动攻击的风险。
禁止重复使用 Nonce: 作为一项基本安全要求,绝不能对同一密钥重复使用 nonce。重复使用 nonce 允许恢复内部状态,因此需要进行严格管理。
5. AEGIS-256 的规范差异
AEGIS-256 是为追求更高安全余量应用而设计的变体。与 AEGIS-128L 的主要区别如下:
状态大小: 768 位(6 个 128 位块 ${S_0, \dots, S_5}$)
密钥长度和随机数(Nonce)长度: 32 字节(256 位)
输入块大小: 128 位
尽管参数和使用限制(如符合 RFC 5116 的 P_MAX 和 A_MAX 等)的框架是通用的,但由于内部块长度和状态数组大小不同,在实现时必须严格遵守目标算法的规范。
6. 总结
本文基于一手资料,对 RFC 10032 中规定的 AEGIS 带有关联数据的认证加密(AEAD)算法的规范与结构进行了整理。
主要考点:
AEGIS 系列是专为高性能应用设计的、不具备逆函数的基于 AES 的 AEAD 算法。
存在多种变体,包括 AEGIS-128L(1024 位状态)和 AEGIS-256(768 位状态)。
由于不存在密钥调度,且初始化后可立即擦除密钥,因此有助于防范冷启动攻击。
严禁在同一密钥下重复使用 nonce,必须进行安全的随机数生成或管理。
本文的内容全部基于官方标准文档的研究与解说,未在实机上进行运行验证。

