为生产系统选择 AEAD
根据威胁模型和性能要求,运用决策框架选择合适的 AEAD 方案
为生产系统选择 AEAD 是 CoddyKit 上的免费 Cryptology Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cryptology Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cryptology Academy 课程共包含 4 节课。
AES-GCM:默认选择
对于大多数生产系统,AES-GCM 是正确的默认 AEAD。它通过 AES-NI 在几乎所有现代 x86 和 ARM64 处理器上获得硬件加速,得到各种 TLS 协议栈和密码学库的广泛支持,并且经历了大量密码分析和实际部署的检验。
AES-GCM 的随机数限制
AES-GCM 使用 96 位随机数。使用随机生成的随机数时,在同一个密钥下加密约 2^32 条消息后会达到生日界限,此时随机数发生碰撞的概率将变得不可忽略。对于高流量系统,必须通过计数器管理随机数,或在加密 2^32 条消息后轮换密钥。
ChaCha20-Poly1305:没有 AES-NI 时的选择
如果没有 AES-NI,或者随机数生成可能不可靠,应选择 ChaCha20-Poly1305。它的软件运行速度快,设计上采用恒定时间实现(能够抵抗计时侧信道),并且在不支持 AES 硬件的环境中,它是 TLS 1.3 要求支持的密码套件。
AES-GCM-SIV:保障随机数安全
当随机数可能被复用,或必须以确定性方式生成随机数(例如在无状态服务或密钥封装中)时,应选择 AES-GCM-SIV(RFC 8452)。与标准 AES-GCM 相比,它只需付出适度的性能代价,就能抵抗随机数误用。
AEGIS:实现最高吞吐量
当要求最高加密吞吐量,并且能够保证所有部署目标都具备 AES-NI 时,应选择 AEGIS-128L。高带宽网络设备、VPN 集中器和存储加密系统都是理想场景,在这些场景中,AEGIS 相比 AES-GCM 能够带来显著的性能提升。
密钥长度选择:128 位还是 256 位
AES-128 提供 128 位安全性,这被认为足以应对当前及可预见的经典计算威胁。AES-256 可针对未来的技术进步提供更大的安全裕度,并且某些合规框架要求使用它(例如 NSA Suite B 中的 TOP SECRET 密级)。对于大多数应用,AES-128 已经足够,而且速度略快。
随机数长度注意事项
AES-GCM 使用 96 位随机数,AES-GCM-SIV 同样使用 96 位随机数。XSalsa20(用于 libsodium 的 secretbox)使用 192 位随机数,因此在同一个密钥下,可以安全地为多得多的消息随机生成随机数。更长的随机数能够降低高流量系统中意外复用的风险。
推荐的库
应使用成熟的 AEAD 库,而不是直接实现底层原语。libsodium 提供简单的 AEAD API(crypto_aead_aes256gcm_encrypt、crypto_aead_chacha20poly1305_ietf_encrypt)。Google Tink 为 AEAD 原语封装了密钥轮换和版本管理。各语言原生的 TLS 库会自动处理用于传输安全的 AEAD。
从 AES-CBC 迁移
使用独立 HMAC-SHA256 的 AES-CBC(采用 EtM 顺序)虽然可以接受,但属于旧式方案。迁移到 AES-GCM 后,可以用一个原语替代两个原语,从而简化实现并消除组合不当的风险。在计划的密钥轮换期间,应将使用 CBC-HMAC 加密的静态数据重新用 AES-GCM 加密。
测试 AEAD 实现
应使用 NIST 提供的官方测试向量(针对 AES-GCM)和 RFC 8439 提供的官方测试向量(针对 ChaCha20-Poly1305)来测试 AEAD 实现。始终应测试认证标签验证失败时,解密是否返回错误而不是部分明文。错误处理不当是常见的实现缺陷。
决策流程图
当具备 AES-NI 且随机数唯一时,选择 AES-GCM。当没有 AES-NI 或随机数不够可靠时,选择 ChaCha20-Poly1305。当担心随机数复用时,选择 AES-GCM-SIV。当优先考虑在保证具备 AES-NI 的前提下实现最高吞吐量时,选择 AEGIS。对于新系统,绝不要选择非 AEAD 模式。
AEAD 选择检查
一个无状态微服务部署在多个副本上,必须加密数据,并且无法协调共享的随机数计数器。哪种 AEAD 模式最合适?
课程回顾:选择合适的 AEAD
AES-GCM 是默认选择。ChaCha20-Poly1305 适用于没有 AES-NI 的环境。AES-GCM-SIV 适用于随机数不安全的环境。在能够保证具备 AES-NI 时,AEGIS 可实现最高吞吐量。应使用 libsodium 或 Tink 等库,而不是手动组合原语。始终使用官方测试向量进行测试,并确认能够正确处理认证失败。
用 AI 导师学习 Cryptology Academy — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 67
- 课程
- 261
常见问题解答
「为生产系统选择 AEAD」课时是免费的吗?
是的 — 「为生产系统选择 AEAD」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cryptology Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cryptology Academy 课程共包含 4 节课。
「为生产系统选择 AEAD」这节课中我会学到什么?
根据威胁模型和性能要求,运用决策框架选择合适的 AEAD 方案 你通过在浏览器中直接运行的动手代码来练习 Cryptology Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Cryptology Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Cryptology Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「为生产系统选择 AEAD」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Cryptology Academy 课中编写并运行代码吗?
能。每节 Cryptology Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 先加密后认证为何优于先认证后加密
- SIV 模式:抵抗随机数误用的 AEAD
- AEGIS:高速认证加密
- 为生产系统选择 AEAD