【密码算法 之七】GCM 浅析

文章目录

  • 1. 概述
    • 1.1 GHASH
    • 1.3 GCTR
  • 2. GCM 加密
  • 3. GCM 解密
  • 4. 总结

  在我的另一篇博客【密码算法 之三】分组密码工作模式 (ECB \ CBC \ CFB \ OFB \ CTR \ XTS)浅析 中已经详细的介绍了对称算法(也称为“分组密码算法”)的各种工作模式。这些工作模式中,CBC、CFB、OFB 三种模式可以解决 ECB 模式中相同明文生成相同密文的缺陷,CTR 又可以在此基础上提供多分组并行加密特性,但是它们都不能提供密文消息完整性校验功能,所有就有了 GCM 模式。

1. 概述

  GCM 全称为 Galois/Counter Mode,其中 G 是指 GMAC,C 是指 CTR 模式,可以将 GCM 认为是认证模式的一种,提供认证和加密两种功能。GCM模式的分组大小为128bit
  在进行GCM原理分析之前,首先应该了解一下 GHASH函数GCTR函数

1.1 GHASH

  GHASH函数利用了“伽罗瓦域算法”计算HASH值。关于伽罗瓦域算法的不在这里详述(有兴趣的可以自行学习)。

  GHASH函数的执行步骤如下
  (1)将字符串 x 分为 128bit 的块 X1, X2, …, Xm
  (2)置 Y00128(即 Y0 为 128bit 的 0),由于 Y0 与 X1 异或不改变 X1 的值,故下图没有体现 Y0 的存在;
  (3)Yi = (Yi-1 ⊕ Xi) • H (H为hash的子秘钥),最后的 Ym 即为本次计算的 hash值。
【密码算法 之七】GCM 浅析_第1张图片

1.3 GCTR

  GCTR函数的执行步骤如下
  (1)若X为空串(empty string),则返回空串Y;
  (2)计算n的值,n = (len(X) + 127) / 128;
  (3)X = X1 || X2 || … || Xn-1 || Xn* ,其中 X1, X2 , …, Xn-1都是完整的block,Xn* 可能是不完整的block;
  (4)CB1 = ICB;
  (5)For i = 2 to n,计算CBi(计算公式为:CBi = inc32(CBi-1),即逐个计算出CBi的值;
  (6)For let i = 1 to n-1, Yi = Xi ⊕ CIPHK(CBi),首先对 CBi 加密,然后再与 Xi 异或运算得到 Yi
  (7)Yn* = Xn* ⊕ MSBlen(Xn)(CIPHK(CBi));当通过CIPHK(CBi)计算出结果后,仅取高位(len(Xn))的数据,然后与 Xn * 异或运算。
  (8)Y = Y1 || Y2 || … || Yn-1 || Yn*;
【密码算法 之七】GCM 浅析_第2张图片

2. GCM 加密

【密码算法 之七】GCM 浅析_第3张图片

注:对数据P进行GCTR运算时,计数器值是从J1开始的(J0用在了最后HASH值的GCTR运算,如下图)

【密码算法 之七】GCM 浅析_第4张图片

3. GCM 解密

【密码算法 之七】GCM 浅析_第5张图片

【密码算法 之七】GCM 浅析_第6张图片

4. 总结

  • GCM运算所需的对称加密算法的分组长度必须是128bit(DES\3DES不满足添加,AES\SM4满足条件);
  • 加密时,在计算MAC之前必别将附加数据(A)及密文(C)分别进行Block对齐;
  • GCM运算时,J0的获取需要分不同的情况,一种是len(IV)= 96bit,一种是len(IV) ≠ 96bit

你可能感兴趣的:(密码学,算法,GCM,GHASH,GCTR,AES-GCM)