CMAC 与 Poly1305:分组密码 MAC
比较 CMAC 和 Poly1305 与基于哈希的 MAC 方案
CMAC 与 Poly1305:分组密码 MAC 是 CoddyKit 上的免费 Cryptology Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cryptology Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cryptology Academy 课程共包含 4 节课。
什么是 MAC
消息认证码(MAC)接收一个密钥和一条消息,并生成一个标签。该标签可以证明消息未被篡改,并且由持有该密钥的一方生成。
HMAC 与分组密码 MAC
HMAC 使用哈希函数作为基本原语,而 CMAC 和 Poly1305 使用分组密码或多项式运算。分组密码 MAC 不依赖哈希函数,并且能够自然地利用 AES 硬件。
CMAC 构造
CMAC(基于密码的 MAC)由 NIST SP 800-38B 定义。它会将消息填充到分组边界,从密码中派生两个子密钥 K1/K2,将它们与最后一个分组进行 XOR,然后运行 CBC 模式,而不保存中间密文。
CMAC 子密钥派生
K1 = AES_K(0^128) 左移 1 位;如果 MSB 为 1,则再与一个常量进行 XOR。K2 以类似方式从 K1 移位得到。这些子密钥可以安全地绑定最后一个不完整分组,从而防止长度扩展。
Poly1305 概述
Poly1305 是 Daniel Bernstein 设计的一次性认证器。它在素数 2^130-5 上计算多项式,将消息视为多项式系数,并使用一次性密钥对(r, s)。
Poly1305 数学原理
标签 = (所有 (m_i * r^i) 之和 mod 2^130-5) + s mod 2^128。密钥 r 会被限制为特定的 22 个比特,以防止时序攻击。s 是一个 16 字节的一次性加法掩码。
ChaCha20-Poly1305
Poly1305 几乎总是与 ChaCha20 配对使用。ChaCha20 会从流密码密钥流中生成一次性(r, s),使组合后的 AEAD 方案具备可证明的安全性,并且在 ARM/移动 CPU 上运行极快。
AES-GCM 与 AES-CMAC
AES-GCM 使用 GHASH 进行认证,GHASH 是在 GF(2^128) 上计算的多项式 MAC。AES-CMAC 更为简单,用于 IEEE 802.11i(WPA2)和 TLS 1.2 密码套件。GCM 可以在一次处理中同时完成加密和认证。
性能比较
使用 NEON 内在函数时,ARM Cortex-A 上的 Poly1305 可达到约每字节 1 个周期。AES-CMAC 每处理一个 16 字节分组都需要执行一次 AES 分组运算。对于大批量数据,在没有 AES-NI 的硬件上,Poly1305 的性能优于 CMAC。
安全属性
假设 AES 是伪随机置换,CMAC 在选择消息攻击下具有存在不可伪造性。对于真正随机的一次性密钥,Poly1305 在信息论意义上是安全的,其伪造概率最多为 8*ceil(L/16)/2^106。
应用场景
CMAC:WPA2、S/MIME、文件系统完整性。Poly1305:通过 ChaCha20-Poly1305 实现的 TLS 1.3、WireGuard VPN、Signal Protocol、Noise Protocol Framework。二者都已广泛部署在现代高安全性系统中。
快速检查
ChaCha20-Poly1305 AEAD 使用哪种 MAC?
回顾
您已经学习了基于 CBC 的 CMAC 构造和 Poly1305 的多项式运算。二者都是在实际协议中使用的常数时间安全 MAC。接下来:TLS/HTTPS,以及这些基本原语如何组合。
常见问题解答
「CMAC 与 Poly1305:分组密码 MAC」课时是免费的吗?
是的 — 「CMAC 与 Poly1305:分组密码 MAC」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cryptology Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cryptology Academy 课程共包含 4 节课。
「CMAC 与 Poly1305:分组密码 MAC」这节课中我会学到什么?
比较 CMAC 和 Poly1305 与基于哈希的 MAC 方案 你通过在浏览器中直接运行的动手代码来练习 Cryptology Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Cryptology Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Cryptology Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「CMAC 与 Poly1305:分组密码 MAC」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Cryptology Academy 课中编写并运行代码吗?
能。每节 Cryptology Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- MAC 概念与长度扩展攻击
- HMAC 构造与安全性证明
- API 中的 HMAC:请求签名
- CMAC 与 Poly1305:分组密码 MAC