systemslibrarian/crypto-lab-aegis-gate
GitHub: systemslibrarian/crypto-lab-aegis-gate
基于浏览器的 AEGIS-256 认证加密教学演示,从零实现草案规范并通过官方测试向量验证,提供六个互动展示区帮助学习者直观理解 AEAD 加密、状态机运行、nonce 安全与性能特性。
Stars: 0 | Forks: 0
# crypto-lab-aegis-gate
## 它是什么
这是一个基于浏览器的 AEGIS-256 认证加密演示,实现了 draft-irtf-cfrg-aegis-aead-18 (CFRG,2025年10月)。AEGIS-256 是一种基于 AES 的 AEAD,专为高性能应用设计,直接使用 AES 轮函数构建了一个具有 768 位状态和 256 位 nonce 的类 sponge 结构。所有 6 状态更新、AES 轮函数和认证 tag 派生均根据草案规范实现,并通过官方 JSON 测试向量进行了验证。同时支持 128 位和 256 位 tag 变体。未使用任何外部加密库;AES S-box、ShiftRows、MixColumns 和 GF(2^8) 乘法均根据 FIPS 197 从头实现。
页面打开时,会在你的浏览器中,通过本实现的加密路径重放每一个官方草案测试向量,并逐字节显示结果——包括五个加密向量(ciphertext、128 位 tag、256 位 tag 以及一次解密往返)和四个必须拒绝的伪造向量。这让“通过官方向量验证”成为你可以亲眼目睹的过程,而不是盲目信任。相同的向量也会在测试套件 (`npm test`) 中执行,并且有一个防护测试确保浏览器内的副本与权威测试基准保持逐字节一致,防止两者产生差异。
在展示区 1 上方设有一个可折叠的 **“AEAD 新手?”入门指南**,在任何十六进制数据出现之前,用通俗易懂的语言解释了 plaintext、ciphertext、tag、nonce 和 associated data——让初学者有平滑的学习路径,同时专业人士可以直接跳过。
六个互动展示区超越了简单的字节转储:
- **加密 / 篡改 (展示区 1)** —— 使用任一 tag 长度加密你自己的输入,翻转 ciphertext 或 tag 中的单个 bit,准确查看它落在了哪里,并观察重新计算的 tag 如何在几乎所有字节中产生分歧。一次失败的篡改会直接链接到展示区 2 中的雪崩效应演示,该演示解释了为什么一个 bit 会改变整个 tag。任何场景都可以通过 URL 分享,让一个班级能够在一个已知状态下打开同一个链接。
- **实时状态机 (展示区 2)** —— 在真实实现上逐步执行 Init / Absorb / Enc / Finalize,配有动画数据流图、步骤间的字节级 diff 高亮、提取的 keystream `Z`,以及并排展示的逐字 draft-18 伪代码,并会高亮当前运行的函数。一个可折叠的**“打开黑盒”**子面板对实时的 S0 块逐级运行一次真实的 AES 轮——SubBytes (S-box)、ShiftRows、MixColumns 和 round-key XOR——让“基于 AES”成为一个你可以观看的机制,而不是一句断言。雪崩热力图展示了在 16 次设置更新中,一个被翻转的 nonce bit 是如何扩散到约 50% 的 768 位状态中的。
- **nonce 重用灾难 (展示区 3)** —— 在相同的 key+nonce 下加密两条消息,并通过 `C_A ⊕ C_B ⊕ A` 恢复秘密信息,同时标出真正泄露的前缀。由于 AEGIS 将 plaintext 折叠进其状态中(它不是纯粹的流密码),前两个块总是会泄露,而尾部受保护——相比于完全的“两次一密”(two-time pad),这是一个更真实、也更有趣的图景。
- **生日界限探索器 (展示区 4)** —— 一个滑块,用于对比 96 位与 256 位 nonce 的随机碰撞概率,这也是 AEGIS-256 存在的原因。
- **实时吞吐量基准测试 (展示区 5)** 以及涵盖 AEGIS-128L、256 和 128X/256X 并行变体的 **AEGIS 家族表 (展示区 6)**。
## 何时使用
- 深入理解超越 AES-GCM 的基于 AES 的 AEAD,以及 nonce 大小如何改变部署风险
- 教授具有 6 块更新函数的类 sponge AEAD 结构
- 比较 nonce 处理:96 位 (AES-GCM) 与 256 位 (AEGIS-256)
- 评估 AEGIS-256 在高吞吐量协议和系统中的理念
- 目前不适用于对互操作性要求极高的 TLS 生产路径;AEGIS 尚未成为 TLS 密码套件
- **不要**依赖这个纯 TypeScript 构建作为生产级加密方案——它是一个教学演示,不是原生速度的强化代码
## 在线演示
**[systemslibrarian.github.io/crypto-lab-aegis-gate](https://systemslibrarian.github.io/crypto-lab-aegis-gate/)**
该页面在你的浏览器中通过自身的加密路径重放每一个官方草案测试向量,逐字节显示每个结果;让你可以使用 128 位和 256 位 tag 变体加密并认证自己的输入;在草案伪代码旁逐步演示 AEGIS 状态机;并以实时已知明文恢复的形式演示 nonce 重用灾难。
## 可能出现的问题
- AEGIS 是一个 CFRG 信息类草案,而非最终确定的 RFC 标准
- nonce 重用是灾难性的:跨消息使用相同的 key+nonce 会泄露明文关系并破坏安全性
- 该实现是用于教育的纯 TypeScript 代码,不是原生速度的生产级加密方案
- Key commitment 细节因变体而异;查阅草案的安全注意事项以了解协议层面的假设
## 现实用例
- 由 Hongjun Wu 和 Bart Preneel 设计,是 CAESAR 竞赛的入围方案,并在截至 2025 年 10 月的 draft-irtf-cfrg-aegis-aead 中被规范化
- 已在整个生态系统中得到实现,包括 libsodium 和 Zig 标准库
- 在具备 AES 硬件加速的高吞吐量协议和网络环境中备受关注
- 由于它目前仍是 CFRG 信息类草案而非最终确定的 RFC,对于在其他地方看到的具体合规性或监管声明,应视为需要进行独立验证
## 如何在本地运行
```
git clone https://github.com/systemslibrarian/crypto-lab-aegis-gate
cd crypto-lab-aegis-gate
npm install
npm run dev
```
## 相关演示
- [crypto-lab-aes-modes](https://systemslibrarian.github.io/crypto-lab-aes-modes/) — AES 块密码模式及 AEAD (GCM/CCM) 行为。
- [crypto-lab-ascon](https://systemslibrarian.github.io/crypto-lab-ascon/) — 轻量级 sponge AEAD,NIST 轻量级密码学标准。
- [crypto-lab-chacha20-stream](https://systemslibrarian.github.io/crypto-lab-chacha20-stream/) — ARX 流密码及 nonce 重用的危险。
- [crypto-lab-shadow-vault](https://systemslibrarian.github.io/crypto-lab-shadow-vault/) — ChaCha20-Poly1305 认证加密。
- [crypto-lab-nonce-guard](https://systemslibrarian.github.io/crypto-lab-nonce-guard/) — 抗 nonce 误用的 AEAD AES-GCM-SIV。
*这是 [Crypto Lab](https://crypto-lab.systemslibrarian.dev/) 套件中 170 多个浏览器演示之一。*
*“所以,你们或吃或喝,或做什么,一切都要为上帝的荣耀而行。” —— 哥林多前书 10:31*
标签:AEAD算法, AEGIS-256, Web安全, 前端演示, 加密算法实现, 密码学, 手动系统调用, 暗色界面, 自动化攻击, 蓝队分析