Cryptology Academy · 课时

SIV 模式:抵抗随机数误用的 AEAD

探索合成 IV(SIV)模式,以及它如何防止随机数灾难性重用

第 2 / 4 课13 个步骤

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

随机数重复使用:灾难性故障

基于 CTR 模式的 AEAD 密码(如 AES-GCM)要求每次加密使用唯一的随机数。如果同一密钥下重复使用相同随机数,攻击者观察到两个密文后,可以对它们执行 XOR 运算,从而恢复两个明文的 XOR 值,立即破坏机密性。

GCM 随机数重复使用会泄露认证密钥

AES-GCM 中的随机数重复使用比普通 CTR 模式中的情况更加灾难性。当两条消息使用相同随机数和密钥加密时,攻击者可以完整恢复 GHASH 认证密钥 H。知道 H 后,攻击者可以伪造任意经过认证的消息。

引入合成初始向量模式

RFC 5297 定义的合成初始向量(SIV)模式旨在消除随机数重复使用漏洞。SIV 不要求使用随机或基于计数器的随机数,而是使用伪随机函数从明文本身合成地派生 IV,因此具有确定性并能抵抗随机数误用。

SIV 随机数派生机制

SIV 中,随机数(称为合成 IV)计算为 SIV = PRF(key, plaintext, associated_data)。随后将该 IV 用作 CTR 模式加密的计数器。由于 IV 从明文派生而来,对相同明文进行加密始终会产生相同密文。

SIV 中随机数复用的后果

如果因为同一明文被加密两次而在 SIV 中复用了随机数,观察者只能得知发送了两条相同的消息。明文本身的内容仍然是隐藏的。与基于 CTR 的 AEAD 相比,这是一个巨大的改进,因为后者的随机数复用会泄露明文异或结果。

AES-SIV 构造

AES-SIV(RFC 5297)使用 S2V 函数(基于 AES-CMAC 的链式 PRF)生成合成 IV,随后使用第二个子密钥进行 AES-CTR 加密。它需要两个 AES 密钥,因此密钥管理比单密钥 AEAD 模式略复杂。

AES-GCM-SIV:现代替代方案

AES-GCM-SIV(RFC 8452)是一种效率更高且能够抵抗随机数误用的 AEAD,旨在结合 GCM 的性能与类似 SIV 的安全性。它根据随机数派生每条消息的子密钥,并使用 Polyval 认证器;在保持随机数误用抵抗能力的同时,其性能优于 AES-SIV。

两次遍历的性能代价

SIV 需要对数据进行两次遍历:一次用于计算合成 IV,另一次用于加密。与 AES-GCM 等单遍历 AEAD 模式相比,这会使计算成本大约增加一倍。对于注重延迟或高吞吐量的应用,必须考虑这一额外开销。

何时应优先选择 SIV 而不是 GCM

在随机数生成不可靠、应用是无状态的因而无法维护随机数计数器,或者需要确定性加密时,应优先选择 SIV。例如,对数据库字段进行加密时,如果出于索引目的要求相同的值始终产生相同的密文,就适合使用 SIV。

无状态服务与确定性加密

无法在多个副本之间协调随机数状态的无状态微服务,是 SIV 模式的理想使用场景。SIV 不必依赖全局计数器来避免意外的随机数复用,而是自动提供安全性。密钥封装(RFC 3394)也采用了 SIV 的原则来实现确定性密钥加密。

SIV 的实际应用

主要的密码学库都提供 AES-SIV,包括 libsodium(近期版本中的 crypto_aead_aes256gcm_siv)和 Google Tink。BoringSSL 与 Go 标准库支持 AES-GCM-SIV。在随机数管理困难时,相比标准 AES-GCM,这些方案是更安全的默认选择。

SIV 随机数误用检查

使用同一个密钥,通过 AES-SIV 将同一明文加密两次时会发生什么?

课程回顾:使用 SIV 防止随机数问题

SIV 模式通过从明文本身派生 IV,消除了随机数复用造成的灾难性后果。随机数复用只会暴露发送了相同的消息,而不会暴露消息内容。AES-GCM-SIV(RFC 8452)为需要无状态或确定性加密的现代应用提供了高效的随机数误用抵抗能力。

免费开始

用 AI 导师学习 Cryptology Academy — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
67
课程
261

常见问题解答

「SIV 模式:抵抗随机数误用的 AEAD」课时是免费的吗?

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

「SIV 模式:抵抗随机数误用的 AEAD」这节课中我会学到什么?

探索合成 IV(SIV)模式,以及它如何防止随机数灾难性重用 你通过在浏览器中直接运行的动手代码来练习 Cryptology Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Cryptology Academy 需要有经验吗?

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

「SIV 模式:抵抗随机数误用的 AEAD」课时需要多长时间?

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

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

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

此课程中的所有课时

  1. 先加密后认证为何优于先认证后加密
  2. SIV 模式:抵抗随机数误用的 AEAD
  3. AEGIS:高速认证加密
  4. 为生产系统选择 AEAD
← 返回 Cryptology Academy