Cryptology Academy · 课时

GCM 与认证加密

为加密添加认证标签,以防止数据遭到篡改

第 4 / 4 课13 个步骤

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

欢迎

AES-GCM 是认证加密的黄金标准。它在一次操作中同时提供机密性和完整性,无需单独执行 HMAC 步骤即可防止篡改。

仅加密的问题

加密可以提供机密性,但不能提供完整性。拦截 AES-CBC 密文的攻击者可以翻转其中的比特,从而改变解密后的明文,而无需知道密钥。

AEAD:带关联数据的认证加密

AEAD 方案输出:密文 + 认证标签。该标签同时认证密文和可选的未加密关联数据(AAD)。任何修改都会使标签失效。

GCM 架构

AES-GCM 使用: 1. AES-CTR 进行加密 2. GHASH 进行认证 GHASH 使用 GF(2^128) 中的乘法,对密文 + AAD 计算多项式 MAC。

GHASH 概览

GHASH(H, A, C) = 使用子密钥 H = AES(K, 0^128) 对 AAD + 密文计算的哈希值。该多项式在 GF(2^128) 中以 H 为自变量求值。结果再与加密后的计数器进行 XOR,形成认证标签。

AES-GCM 的输入与输出

输入:128/192/256 位密钥、96 位随机数、明文、可选的 AAD 输出:密文(长度与明文相同)、128 位认证标签 该标签通常为 16 字节。不建议将其截短到 12 字节以下。

GCM 的随机数要求

GCM 要求使用相同密钥进行的每次加密都使用唯一的随机数。96 位随机数是标准做法。处理 2^32 条消息后,发生碰撞的概率会超过 1%。此时应轮换密钥。

GCM 随机数重复使用的灾难性后果

在 GCM 中重复使用(密钥、随机数)时,攻击者可以恢复 GHASH 子密钥 H,并伪造带有有效标签的任意密文。这会彻底破坏机密性和完整性。

关联数据(AAD)的使用场景

AAD 是您希望进行认证但不希望加密的元数据: - HTTP 标头:进行认证,以防止响应路由攻击 - 数据库记录 ID:确保密文在正确的记录中解密 - 协议版本:防止降级攻击

AES-GCM 的 Python 完整示例

from cryptography.hazmat.primitives.ciphers.aead import AESGCM import os key = AESGCM.generate_key(256) nonce = os.urandom(12) aad = b'user_id=12345' aesgcm = AESGCM(key) ct = aesgcm.encrypt(nonce, b'secret', aad) pt = aesgcm.decrypt(nonce, ct, aad) # raises if tampered

替代方案:ChaCha20-Poly1305

ChaCha20-Poly1305 是另一种主要的 AEAD 方案。它用于 TLS 1.3 中不支持 AES-NI 的设备(ARM/移动设备)。它提供与 AES-GCM 类似的安全性,但在没有硬件加速的软件环境中速度更快。

快速检查

AES-GCM 中的认证标签可以防御什么?

回顾

AES-GCM 是认证加密的正确默认选择。接下来,我们将学习流密码:从已经失效的 RC4 到现代的 ChaCha20。
免费开始

用 AI 导师学习 Cryptology Academy — 免费

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

课程
67
课程
261

常见问题解答

「GCM 与认证加密」课时是免费的吗?

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

「GCM 与认证加密」这节课中我会学到什么?

为加密添加认证标签,以防止数据遭到篡改 你通过在浏览器中直接运行的动手代码来练习 Cryptology Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Cryptology Academy 需要有经验吗?

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

「GCM 与认证加密」课时需要多长时间?

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

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

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

此课程中的所有课时

  1. 分组密码基础与填充
  2. ECB 与 CBC:模式与 IV
  3. CTR 模式与流密码行为
  4. GCM 与认证加密
← 返回 Cryptology Academy