Salsa20 与 ChaCha20 设计
逐步学习 ChaCha20 的四分之一轮运算,以及它在移动硬件上的速度
Salsa20 与 ChaCha20 设计 是 CoddyKit 上的免费 Cryptology Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cryptology Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cryptology Academy 课程共包含 4 节课。
欢迎
ChaCha20 是现代系统中的主流流密码,被用于 TLS 1.3、WireGuard、Signal 以及许多其他系统。让我们深入了解它优雅的设计。
ChaCha20 的起源
Daniel J. Bernstein 于 2005 年设计了 Salsa20,随后在 2008 年将其改进为 ChaCha20。“Cha”前缀表示增加了 8 项扩散改进。它于 2015 年被 RFC 7539 标准化,并于 2018 年被 RFC 8439 标准化。
ChaCha20 状态
ChaCha20 运行在由 32 位字组成的 4×4 矩阵上(总计 512 位):
- 字 0—3:常量('expa'、'nd 3'、'2-by'、'te k')
- 字 4—11:256 位密钥(8 个字)
- 字 12:32 位分组计数器
- 字 13—15:96 位随机数
四分之一轮
ChaCha20 的核心操作——对(a,b,c,d)执行四分之一轮:
a+=b; d^=a; d<<<= 16
c+=d; b^=c; b<<<= 12
a+=b; d^=a; d<<<= 8
c+=d; b^=c; b<<<= 7
加法-旋转-XOR(ARX)。无需 S 盒,在所有硬件上都很快。
20 轮
ChaCha20 执行 20 轮:交替执行列轮和对角线轮,每轮包含 4 个四分之一轮。8 轮对应 ChaCha8(速度快),12 轮对应 ChaCha12(性能均衡)。ChaCha20 是安全的默认选择。
密钥流生成
1. 根据密钥、随机数和计数器初始化状态
2. 执行 20 轮四分之一轮操作
3. 将初始状态加到旋转后的状态上(防止逆向)
4. 输出 64 字节的密钥流分组
5. 递增计数器以生成下一个分组
ARX 的安全优势
ARX(加法、旋转、XOR)密码在大多数 CPU 上都能自然地实现为常数时间操作。不进行查表意味着不会产生缓存计时侧信道。这对安全实现至关重要。
ChaCha20 性能
没有 AES-NI 时,ChaCha20 的速度约为 AES-CBC 的 3 倍。在手机(ARM Cortex-A)上,ChaCha20 是更快的选择。使用 AES-NI 的现代 x86 设备上,AES-GCM 更快。TLS 1.3 同时包含两者。
Salsa20 与 ChaCha20
ChaCha20 在早期轮次中提供了比 Salsa20 更好的扩散,因此对差分密码分析的抵抗力更强。两者的状态初始化方式不同。两者都很安全,但 ChaCha20 是当前标准。
Python 中的 ChaCha20
from cryptography.hazmat.primitives.ciphers.aead import ChaCha20Poly1305
import os
key = ChaCha20Poly1305.generate_key()
nonce = os.urandom(12)
ct = ChaCha20Poly1305(key).encrypt(nonce, b'hello', None)
XChaCha20:扩展随机数
ChaCha20 使用 96 位随机数。XChaCha20 使用 HChaCha20 函数将其扩展到 192 位。更长的随机数允许进行随机生成,而不必担心发生碰撞。libsodium 使用 XChaCha20-Poly1305。
快速检查
为什么 ChaCha20 的 ARX 设计能够消除缓存时序侧信道?
回顾
ChaCha20 设计简洁而安全。接下来,我们将看到它如何作为 ChaCha20-Poly1305 AEAD 部署在 TLS 1.3 中。
常见问题解答
「Salsa20 与 ChaCha20 设计」课时是免费的吗?
是的 — 「Salsa20 与 ChaCha20 设计」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cryptology Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cryptology Academy 课程共包含 4 节课。
「Salsa20 与 ChaCha20 设计」这节课中我会学到什么?
逐步学习 ChaCha20 的四分之一轮运算,以及它在移动硬件上的速度 你通过在浏览器中直接运行的动手代码来练习 Cryptology Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Cryptology Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Cryptology Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「Salsa20 与 ChaCha20 设计」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Cryptology Academy 课中编写并运行代码吗?
能。每节 Cryptology Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 流密码概念与 PRNG
- RC4:设计、弱点与 WEP 攻击
- Salsa20 与 ChaCha20 设计
- TLS 1.3 中的 ChaCha20-Poly1305 AEAD