systemslibrarian/crypto-lab-mac-race
GitHub: systemslibrarian/crypto-lab-mac-race
基于浏览器的消息认证码(MAC)交互式教学演示工具,对比展示 HMAC、CMAC、Poly1305、GHASH 的正确使用方式及典型误用攻击场景。
Stars: 0 | Forks: 0
# crypto-lab-mac-race
在线演示:https://systemslibrarian.github.io/crypto-lab-mac-race/
算法原语:HMAC-SHA-256 · HMAC-SHA-512 · AES-CMAC · Poly1305 · GHASH
## 1. 这是什么
crypto-lab-mac-race 是一个用于 HMAC-SHA-256、HMAC-SHA-512、AES-CMAC、Poly1305 和 GHASH 的浏览器演示,并包含展示不正确的 MAC 构造在何处失效的攻击面板。这些原语是对称密钥认证机制,用于验证消息完整性和来源真实性,而不是用于加密明文。该项目重点关注每种构造在正确和错误使用下的行为表现,包括 nonce/密钥重用、易受攻击的前缀-MAC 模式上的长度扩展攻击,以及由于简单比较导致的时序泄漏。其安全模型是各方之间使用共享密钥材料的对称认证。
## 2. 何时使用
- 将 HMAC-SHA-256 或 HMAC-SHA-512 用于 API 请求签名和 token 完整性验证,因为 HMAC 旨在抵抗 Merkle-Damgard 长度扩展攻击,这种攻击会破坏纯粹的前缀哈希 MAC。
- 在面向 NIST/FIPS 的环境中使用 AES-CMAC,因为当已经需要使用 AES 原语时,它提供了一种标准化的、基于分组密码的 MAC。
- 仅将 Poly1305 作为一次性认证器密钥调度(通常由 ChaCha20 派生)使用,因为重用其一次性密钥会使其在实际中容易被伪造。
- 仅在具有严格 nonce 纪律且正确实现的 AES-GCM 中使用 GHASH,因为 GHASH 的线性特性使得 nonce 重用会对完整性造成灾难性的破坏。
- 当需要第三方可验证性时,请勿将这组原语作为公钥签名的替代品,因为所有列出的 MAC 构造都是对称的,并且需要共享密钥。
## 3. 在线演示
在线演示:https://systemslibrarian.github.io/crypto-lab-mac-race/
该演示允许您运行六个交互式面板:HMAC、CMAC、Poly1305、GHASH、SHA-256 长度扩展攻击,以及针对朴素验证与常数时间验证的时序攻击对比。您可以编辑消息、密钥、密文和攻击者追加的输入,然后重新计算输出,以观察 tag 和攻击结果如何变化。它不提供加密/解密工作流;而是专注于消息认证行为和误用演示。
## 4. 会出现什么问题
- 纯 SHA-256(secret || message) 的前缀-MAC 长度扩展:攻击者可以在不知道密钥的情况下为扩展数据伪造有效的 MAC,这已在长度扩展面板中进行了演示。
- Poly1305 一次性密钥重用:在不同的消息中重用相同的一次性密钥会泄漏足够的结构,从而导致 tag 伪造,破坏消息真实性。
- GCM 环境中的 GHASH nonce 重用:由于 GHASH 在 GF(2^128) 上是线性的,nonce 重用可能会暴露出允许伪造的关系,并导致更广泛的 AEAD 失效。
- 非常数时间的 MAC 比较:逐字节的提前退出检查会泄漏时序信息,帮助攻击者逐步恢复或验证 tag 字节。
- CMAC 实现错误(子密钥/填充/最终块处理):不正确的 K1/K2 派生或最终块处理可能会产生不兼容或不安全的 tag。
## 5. 实际应用
- TLS 1.2 记录保护和 PRF:在传统的 TLS 套件中,基于 HMAC 的构造用于记录认证和密钥派生组件。
- AWS Signature Version 4:请求认证使用链式 HMAC-SHA-256 派生,以绑定凭证、日期范围和规范请求数据。
- TLS 1.3 和 QUIC 中的 ChaCha20-Poly1305:Poly1305 用作 AEAD 构造中的认证器,具有每条记录的 nonce/密钥派生。
- TLS/IPsec 中的 AES-GCM:GHASH 是 GCM tag 生成和验证内部的认证多项式组件。
- 3GPP LTE EIA2 完整性算法:AES-CMAC 用于认证移动网络协议中的信令消息。
## 本地运行
```
npm install
npm run dev
```
构建生产版本:
```
npm run build
```
部署到 GitHub Pages:
```
npm run deploy
```
## 相关演示
- crypto-lab 主页:https://systemslibrarian.github.io/crypto-lab/
- crypto-lab-aes-modes:https://systemslibrarian.github.io/crypto-lab-aes-modes/
- crypto-lab-shadow-vault:https://systemslibrarian.github.io/crypto-lab-shadow-vault/
- crypto-lab-babel-hash:https://systemslibrarian.github.io/crypto-lab-babel-hash/
- crypto-compare:https://systemslibrarian.github.io/crypto-compare/
*“所以,你们或吃或喝,或做什么,一切都要为上帝的荣耀而行。” — 哥林多前书 10:31*
标签:MAC算法, MITM代理, WebCrypto, 前端, 哈希, 密码学, 手动系统调用, 教学演示, 数据可视化, 自动化攻击