ChaCha20在线加密/解密
ChaCha20、ChaCha20-Poly1305 和 XChaCha20 加密解密工具。支持 AEAD 认证加密、多种输入输出格式。安全快速,完全在浏览器中运行。
ChaCha20:256 位流密码,96 位 nonce。快速安全,无认证功能。
初始块计数器值(加密通常为 0,解密使用相同值)
格式选项
关于 ChaCha20
ChaCha20 是 Daniel J. Bernstein 于 2008 年设计的现代流密码,源自 Salsa20 密码。它使用 256 位密钥,在 512 位块上运行,生成与明文异或进行加密的密钥流。
该密码以其速度、安全性和抗时序攻击能力著称,是软件实现的绝佳选择。
算法对比
| 算法 | 类型 | 密钥长度 | Nonce 长度 | 最佳用途 |
|---|---|---|---|---|
| ChaCha20 | 流密码 | 256 bits | 96 bits (12 bytes) | 原始加密、自定义协议 |
| ChaCha20-Poly1305 | AEAD | 256 bits | 96 bits (12 bytes) | TLS 1.3、QUIC、安全消息 |
| XChaCha20 | 流密码 | 256 bits | 192 bits (24 bytes) | 随机 nonce 场景 |
| XChaCha20-Poly1305 | AEAD | 256 bits | 192 bits (24 bytes) | 大多数应用(推荐) |
ChaCha20 工作原理
ChaCha20 执行 20 轮运算,对 4×4 的 32 位字矩阵应用四分之一轮函数。初始状态由常量、256 位密钥、32 位计数器和 96 位 nonce 组成。
每轮使用加法、异或和旋转(ARX)置换状态,在保持软件高速运行的同时提供出色的扩散性。
AEAD:认证加密
ChaCha20-Poly1305 是 RFC 8439 标准化的带关联数据的认证加密(AEAD)构造。它结合了 ChaCha20 加密和 Poly1305 MAC 认证。
这确保了机密性和完整性 - 对密文或 AAD 的任何篡改都会在解密时被检测到。128 位认证标签通过密文和 AAD 计算得出。
主要特性
- 高性能:针对软件实现优化,在没有硬件加速的平台上比 AES 快 3 倍
- 常量时间:抵抗缓存时序攻击,不像基于表的 AES 实现
- 设计简洁:仅使用 ARX 运算(加法、旋转、异或),易于正确实现
- 广泛采用:用于 TLS 1.3、OpenSSH、WireGuard、Signal 协议等
- 扩展 Nonce:XChaCha20 变体允许安全的随机 nonce 生成,无碰撞风险
安全注意事项
- 绝不要在相同密钥下重用 nonce - 这会完全破坏安全性
- 大多数应用应使用 AEAD 变体(Poly1305)来检测篡改
- 对于随机 nonce,使用 XChaCha20(192 位)以最小化碰撞概率
- 使用正确的 KDF(HKDF、Argon2)从密码派生密钥
实际应用
- TLS 1.3:默认密码套件(TLS_CHACHA20_POLY1305_SHA256)
- WireGuard VPN:主要加密协议
- Signal 协议:端到端加密消息
- Cloudflare:移动客户端优先于 AES-GCM
- Linux 内核:CSPRNG(/dev/urandom)