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, 前端, 哈希, 密码学, 手动系统调用, 教学演示, 数据可视化, 自动化攻击