0Pricing
Cryptology Academy · 课时

TLS 1.3 中的 ChaCha20-Poly1305 AEAD

了解 ChaCha20 如何作为 AEAD 密码用于现代 TLS

TLS 1.3 中的 ChaCha20-Poly1305 AEAD 是 CoddyKit 上的免费 Cryptology Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cryptology Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cryptology Academy 课程共包含 4 节课。

欢迎

ChaCha20-Poly1305 将 ChaCha20 流密码与 Poly1305 MAC 结合起来,构成一种安全的 AEAD 密码套件,应用于 TLS 1.3、WireGuard 和移动应用。

Poly1305 MAC 概览

Poly1305 是由 Bernstein 设计的一次性 MAC。它通过在素数 2^130-5 上进行多项式求值来验证消息的真实性。一次性意味着每次使用都需要一个全新的 32 字节密钥。

Poly1305 的安全性

如果密钥从不重复使用,Poly1305 可达到 128 位安全性。MAC 密钥会针对每条消息,从 ChaCha20 密钥流中重新派生。两者的组合经过了可证明安全性分析。

ChaCha20-Poly1305 的构造

1. 从 ChaCha20 区块 0 生成 64 字节密钥流 2. 前 32 字节作为 Poly1305 密钥 3. 丢弃剩余的 32 字节 4. 使用 ChaCha20 区块 1、2、3……加密明文 5. 对 AAD + 密文计算 Poly1305 MAC

RFC 8439 结构

输出格式:密文 || 标签(16 字节) MAC 输入:AAD || pad1 || 密文 || pad2 || len(AAD) || len(ciphertext) 填充:补零至 16 字节对齐。长度编码为小端序 64 位整数。

TLS 1.3 密码套件

TLS 1.3 强制支持的密码套件: - TLS_AES_256_GCM_SHA384 - TLS_AES_128_GCM_SHA256 - TLS_CHACHA20_POLY1305_SHA256 对于不具备 AES 硬件加速的客户端,优先使用 CHACHA20_POLY1305。

WireGuard 使用 ChaCha20-Poly1305

WireGuard 的所有隧道加密都专门使用 ChaCha20Poly1305。不进行密码协商——只使用一种经过充分分析的算法。这种简洁性能够大幅缩小攻击面。

libsodium secretbox

libsodium 的 crypto_secretbox_easy() 使用 XSalsa20-Poly1305(扩展随机数变体): ciphertext = crypto_secretbox_easy(message, nonce, key) 高级 API:无需选择参数即可正确工作。

移动设备上的性能

Android 和 iOS 设备通常缺少 AES-NI。Google 在 2014 年的分析显示,在 ARM 上,ChaCha20-Poly1305 的速度是 AES-GCM 的 3 倍。这正是 Google 强制要求 Android 和 Chrome 支持它的原因。

在 Python 中实现

from cryptography.hazmat.primitives.ciphers.aead import ChaCha20Poly1305 import os key = ChaCha20Poly1305.generate_key() nonce = os.urandom(12) aad = b'header_data' cipher = ChaCha20Poly1305(key) ct = cipher.encrypt(nonce, b'plaintext', aad) pt = cipher.decrypt(nonce, ct, aad)

对比:AES-GCM 与 ChaCha20-Poly1305

AES-GCM:配合 AES-NI 时速度更快,使用 96 位随机数;重复使用随机数会导致 GCM 标签伪造。 ChaCha20-Poly1305:没有硬件加速时速度更快,使用 96 位随机数;Poly1305 密钥针对每条消息都是全新的。 两者都非常出色。在服务器上使用 AES-GCM;在移动设备上使用 ChaCha20-Poly1305。

快速检查

在 ChaCha20-Poly1305 中,Poly1305 密钥是如何生成的?

回顾

ChaCha20-Poly1305 是针对移动设备优化的 AEAD 选择。接下来,我们将学习 Diffie-Hellman 密钥交换——两个参与方如何通过不安全信道建立共享密钥。

常见问题解答

「TLS 1.3 中的 ChaCha20-Poly1305 AEAD」课时是免费的吗?

是的 — 「TLS 1.3 中的 ChaCha20-Poly1305 AEAD」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cryptology Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cryptology Academy 课程共包含 4 节课。

「TLS 1.3 中的 ChaCha20-Poly1305 AEAD」这节课中我会学到什么?

了解 ChaCha20 如何作为 AEAD 密码用于现代 TLS 你通过在浏览器中直接运行的动手代码来练习 Cryptology Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Cryptology Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Cryptology Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「TLS 1.3 中的 ChaCha20-Poly1305 AEAD」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Cryptology Academy 课中编写并运行代码吗?

能。每节 Cryptology Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 流密码概念与 PRNG
  2. RC4:设计、弱点与 WEP 攻击
  3. Salsa20 与 ChaCha20 设计
  4. TLS 1.3 中的 ChaCha20-Poly1305 AEAD
← 返回 Cryptology Academy