CoderTools

ChaCha20 加密

带可选认证的现代流密码

客户端安全

所有加密解密操作都在您的浏览器本地执行,不会向任何服务器发送数据。

ChaCha20:256 位流密码,96 位 nonce。快速安全,无认证功能。

初始块计数器值(加密通常为 0,解密使用相同值)

格式选项
🔒 100% 本地处理您的文件完全在浏览器中处理,不会上传到任何服务器。

关于 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)

参考资料

常见问题

ChaCha20 和 AES 有什么区别?

两者都是安全的对称密码。ChaCha20 在没有硬件加速的情况下软件实现速度快 3 倍,且抵抗时序攻击。AES 在有硬件支持(AES-NI)时更快。ChaCha20 更适合移动和嵌入式设备。

为什么使用 XChaCha20 而不是 ChaCha20?

XChaCha20 的 192 位 nonce 允许安全的随机 nonce 生成。使用 96 位 nonce 时,需要仔细的 nonce 管理以避免碰撞。当无法保证唯一顺序 nonce 时,推荐使用 XChaCha20。

计数器参数有什么用?

计数器允许通过为每个块递增来加密超过 64 字节的消息。对于 AEAD 模式,它从 1 开始(块 0 生成 Poly1305 密钥)。通常可以保持默认值(0)。

我可以用这个工具加密文件吗?

这个工具完全在浏览器中运行,适合加密文本和小数据。对于大文件,建议使用 openssl 或基于 libsodium 的本地工具。

这个工具可以用于生产环境吗?

这个工具用于教育和开发目的。虽然实现遵循标准规范,但生产系统应使用经过审计的加密库,如 libsodium、OpenSSL 或平台提供的 API。