先加密后认证为何优于先认证后加密
了解按正确顺序组合加密与身份验证的密码学依据
先加密后认证为何优于先认证后加密 是 CoddyKit 上的免费 Cryptology Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cryptology Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cryptology Academy 课程共包含 4 节课。
三种组合顺序
组合加密和 MAC 时,有三种顺序:先加密后 MAC(EtM)、先 MAC 后加密(MtE)以及加密并 MAC(E&M)。每种顺序的安全属性都截然不同,只有其中一种在所有场景下都能得到可证明的安全性。
先加密后 MAC 的定义
在先加密后 MAC 中,明文首先被加密生成密文,然后对密文计算 MAC。接收方无需尝试解密即可先验证 MAC,这意味着篡改的消息会立即被拒绝,不会泄露信息。
先 MAC 后加密的定义
在先 MAC 后加密中,先对明文计算 MAC,然后将明文和 MAC 一起加密。接收方必须先解密消息才能验证 MAC,这为填充预言机和解密预言机攻击打开了大门。
SSL 3.0 和 TLS 1.0 的缺陷
SSL 3.0 和 TLS 1.0 在 CBC 模式的分组密码中使用先 MAC 后加密的顺序。这一设计缺陷分别被 2011 年的 BEAST 攻击和 2014 年的 POODLE 攻击利用;两者都利用了解密发生在 MAC 验证之前时存在的预言机。
Bellare-Namprempre 证明
2000 年,Bellare 和 Namprempre 从形式上证明,在三种组合顺序中,只有先加密后 MAC 对所有安全加密原语和 MAC 原语的组合都能实现 IND-CCA2 安全性(选择密文安全性)。在某些组合中,先 MAC 后加密和加密并 MAC 可能失效。
SSH 中的加密并 MAC
SSH 使用加密并 MAC:MAC 根据明文计算,并以明文形式与密文一同发送。尽管 SSH 没有遭受 SSL/TLS 先 MAC 后加密那样的攻击,但这种组合从理论上说同样存在缺陷,因为它可能通过未加密的 MAC 泄露明文信息。
AEAD:安全的抽象
带关联数据的认证加密(AEAD)是通过设计解决组合问题的现代抽象。AEAD 将加密和认证整合到单个原语中,确保二者始终以正确方式组合,而不要求开发者选择组合顺序。
AES-GCM:AEAD 标准
AES-GCM(伽罗瓦/计数器模式)是部署最广泛的 AEAD 密码套件。它结合 CTR 模式加密和 GHASH 认证来提供认证加密,并且在现代 CPU 上通过 AES-NI 和 CLMUL 指令实现硬件加速。
TLS 1.3 仅强制使用 AEAD
TLS 1.3 通过移除所有非 AEAD 密码套件,与过去彻底决裂。每个 TLS 1.3 密码套件都使用 AEAD,消除了因不当手动组合加密原语和 MAC 原语而引发的整类漏洞;这些漏洞曾困扰早期 TLS 版本。
不要手动组合密码学原语
数十年来的密码学攻击带来的重要教训是,即使对专家而言,手动组合加密原语和 MAC 原语也容易出错。现代密码学库专门提供 AEAD 接口,以防止开发者犯下会导致现实世界漏洞的组合错误。
实用指导
如今构建系统时,应始终优先使用 AES-GCM 或 ChaCha20-Poly1305 等 AEAD 原语。如果必须与使用独立 MAC 和加密的旧系统互操作,请确保采用先加密后 MAC 的顺序,绝不要使用先 MAC 后加密或加密并 MAC。
先加密后 MAC 与先 MAC 后加密检查
哪项陈述正确描述了先加密后 MAC 与先 MAC 后加密之间的安全差异?
课程回顾:组合顺序很重要
先加密后 MAC 是独立加密原语和 MAC 原语唯一可证明安全的组合顺序。TLS 1.3 通过强制仅使用 AEAD 的密码套件彻底消除了这个问题。当无法确定时,请使用 AES-GCM 或 ChaCha20-Poly1305 等 AEAD 原语,并让库正确处理组合。
常见问题解答
「先加密后认证为何优于先认证后加密」课时是免费的吗?
是的 — 「先加密后认证为何优于先认证后加密」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cryptology Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cryptology Academy 课程共包含 4 节课。
「先加密后认证为何优于先认证后加密」这节课中我会学到什么?
了解按正确顺序组合加密与身份验证的密码学依据 你通过在浏览器中直接运行的动手代码来练习 Cryptology Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Cryptology Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Cryptology Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「先加密后认证为何优于先认证后加密」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Cryptology Academy 课中编写并运行代码吗?
能。每节 Cryptology Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 先加密后认证为何优于先认证后加密
- SIV 模式:抵抗随机数误用的 AEAD
- AEGIS:高速认证加密
- 为生产系统选择 AEAD