"); //-->
在以前介绍的基本工作模式中,ECB、CFB、OFB 三种模式可以解决 ECB 模式中相同明文生成相同密文的缺陷,CTR 又可以在此基础上提供多分组并行加密特性,但是它们都不能提供密文消息完整性校验功能,所有就有了 GCM 模式。
讲解 GCM 模式之前,我们先要讲一下 MAC和GMAC。
MACMAC 全称是 Message Authentication Code,中文名称为消息认证码,一串由密钥和密文生成的固定值,有时也称 Auth Tag。
MAC 的使用流程如下:
首先 Sender 和 Receiver 共享同一个 Key,约定一个 MAC 计算算法 Algorithm
Sender 把要传递的消息 Message 通过 Key 和 Algorithm 计算出 MAC,将 Message 和 MAC 发送给 Receiver
Receiver 收到 Message 和 MAC 后,将 Message 通过约定的 Key 和算法 Algorithm 计算出 MAC_1,通过对比 MAC 和 MAC_1 是否相等
MAC == MAC_1 消息无篡改且是 Sender 发布的
MAC != MAC_1 消息有篡改或者根本不是 Sender 发布的,也就是有问题
消息认证码是密码学家工具箱中的 6 大工具之一:对称密码、公钥密码、单向散列函数、消息认证码、数字签名和伪随机数生成器。
MAC 跟哈希有点像但比哈希要复杂,因为 Mac 的生成和验证过程都是需要密钥的。
GMACGMAC 全称是 Galois Message Authentication Code,中文名称为伽罗瓦消息验证码。
GMAC 就是利用伽罗华域(Galois Field,GF,有限域)乘法运算来计算消息的 MAC 值。
GCM 模式GCM 全称为 Galois/Counter Mode,可以看出 G 是指 GMAC,C 是指 CTR。它在 CTR 加密的基础上增加 GMAC 的特性,解决了 CTR 不能对加密消息进行完整性校验的问题。
GCM 加密所需数据:明文 P、加密密钥 Key、初始向量 IV、附加消息 F。
GCM 加密步骤如下:
将 P 分为 P1、P2、…、Pn,Px 长度 <= 128
生成累加计数器 c0、c1、c2、…、cn,由密钥 Key 计算出密钥 H
将 IV、c0 进行运算(连接、加和、异或等)得到 IV_c0,用 Key 加密 IV_c0 得到 IVC0
将 IV、c1 进行运算(连接、加和、异或等)得到 IV_c1,用 Key 加密 IV_c1 得到 IVC1,将 IVC1、P1 做异或运算得到 C1,用密钥 H 通过 GMAC 算法将附加消息 F 计算出 F1, F1 与 C1 做异或运算得到 FC1
将 IV、c2 进行运算(连接、加和、异或等)得到 IV_c2,用 Key 加密 IV_c2 得到 IVC2,将 IVC2、P2 做异或运算得到 C2,用密钥 H 通过 GMAC 算法将附加消息 FC1 计算出 F2, F2 与 C2 做异或运算得到 FC2
…
将 IV、cn 进行运算(连接、加和、异或等)得到 IV_cn,用 Key 加密 IV_cn 得到 IVCn,将 IVCn、Pn 做异或运算得到 Cn,用密钥 H 通过 GMAC 算法将附加消息 FC(n-1) 计算出 Fn, Fn 与 Cn 做异或运算得到 FCn
拼接 C1、…Cn 得到密文 C,用密钥 H 通过 GMAC 算法结合 FCn 和 IVC0 最终计算出 MAC
GCM 加密步骤相关资料较少,本文根据维基百科大致做了步骤拆解,如有不准确请敬请斧正
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。