文章目录

  • 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值。

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*;

2. GCM 加密

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

3. GCM 解密

4. 总结

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

【密码算法 之七】GCM 浅析相关推荐

  1. 【密码算法 之零】对称算法(DES,、3DES、 AES、DM5、HMAC、CMAC、SHAxx、SM3、SM4),非对称算法(RSA、ECC、ECDSA、ECDH、SM2、SM9...)

      由于工作的需要,在过去的两年中学习.适配了很多算法,包括对称算法.非对称算法.国密算法.国际算法等.为了逼迫自己能够牢记并掌握这些算法的基本知识点,故本人写了一个关于算法的专栏(持续更新中...) ...

  2. 【密码算法 之六】CCM 浅析

    CCM模式浅析 1. 综述 2. 加密 2.1 前置条件(Prerequisites) 2.2 输入(Input) 2.3 输出(Output) 2.4 加密流程(Steps) 3. 解密 3.1 前 ...

  3. 【密码算法 之八】Hash类算法(单向散列函数) MD5 \ SHA1 \ SHA224 \ SHA256 \ SHA384 \ SHA512等浅析

    1. 综述   Hash算法,又称单向散列函数(one-way hash function).   单向散列函数有一个输入和一个输出,其中输入称为消息(message),输出称为散列值(hash va ...

  4. 密码算法(SM1、SM2、SM3、SM4、同态加密、密态计算、隐私计算和安全多方计算)

    文章目录 SM1 对称密码 SM2 椭圆曲线公钥密码算法 SM3 杂凑算法 SM4 对称算法 同态加密 密态计算和隐私计算 安全多方计算技术 安全多方计算的应用场景 对称加密算法 非对称加密算法(公钥 ...

  5. 商用密码应用与安全性评估要点笔记(密码发展、密码算法)

    1.3 密码发展 词条 内容 创新的动力 信息系统的应用需求和攻击威胁 发展三个阶段 古典密码.机械密码.现代密码 古典密码 代换密码,采用一个代换表将一段明文变换成一段密文.若代换表只有一个,是单表 ...

  6. SM4密码算法(附源码)

    from:http://blog.csdn.net/mao0514/article/details/52930944 SM4是我们自己国家的一个分组密码算法,是国家密码管理局于2012年发布的.网址戳 ...

  7. python如何调用文件进行换位加密_python 换位密码算法的实例详解

    python 换位密码算法的实例详解 一前言: 换位密码基本原理:先把明文按照固定长度进行分组,然后对每一组的字符进行换位操作,从而实现加密.例如,字符串"Error should neve ...

  8. JavaScript实现希尔密码 算法(附完 整源码)

    JavaScript实现希尔密码 算法 Matrix.js完整源代码 hillCipher.js完整源代码 hillCipher.test.js完整源代码 Matrix.js完整源代码 export ...

  9. 古典密码算法------替代密码算法

    替代密码算法的原理是使用替代法进行加密,就是将明文中的字符用其它字符替代后形成密文.例如:明文字母a.b.c.d ,用D.E.F.G做对应替换后形成密文. 替代密码包括多种类型,如单表替代密码.多明码 ...

最新文章

  1. ASP.NET2.0自定义控件组件开发 第六章 深入讲解控件的属性
  2. 母校/母语/母公司怎么说?
  3. 【ArcGIS遇上Python】使用add-in向导开发ArcGIS插件(1):add-in工具介绍及安装
  4. java 日期类代码_java 日期时间处理类
  5. BAT老程序员分享:Linux C/C++ 开发程序员的黄金方向和学习路线!
  6. 三星5nm产品开发进度出问题,高通紧急向台积电求援
  7. 【OpenCV】形态学处理
  8. c语言五个整数排列,刚学c语言,老师让用if编一个五个数字从大到小的排序,有那个大神能帮我,谢谢啦...
  9. 投资的收益与风险的数学建模
  10. 关于华为任正非裁员事件
  11. Win11如何查看自己电脑的显卡信息?Win11查看显卡信息的方法
  12. 疾病负担研究(GBD)-如何绘制GBD相关性图
  13. 统计二叉树中不平衡节点树的个数
  14. 学习Android开发只要这些东西,Android篇
  15. linux u盘分区 mdev 卸载问题,迅为开发板最小Linux自动挂载TF卡/U盘等存储设备
  16. 天刀一代宗师服务器维护,3月13日服务器例行维护公告(已完成)
  17. Android SOS功能模块开发
  18. 2018第九届蓝桥杯大赛软件类B组C/C++省赛题解
  19. C++(MFC)各控件或取和属性
  20. tcpdump 命令使用教程

热门文章

  1. 190606-190610《跟秋叶学PPT》
  2. 到底什么是SDWAN服务?
  3. 新版ECharts实现“暂无数据”的完美解决方案
  4. 【Redis-6.0.8】CRC16
  5. tomcat用c语言开发服务,apache tomcat是什么语言开发的
  6. c语言butter函数,butter函数
  7. ubuntu播放mp4的插件
  8. 【摘记】心:稻盛和夫的一生嘱托
  9. Quartus报错“Can't place multiple pins assigned to pin location Pin_76”
  10. 深度学习笔记--基于Pytorch搭建VGG16网络