【密码算法 之七】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)置 Y0 为 0128(即 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 浅析相关推荐
- 【密码算法 之零】对称算法(DES,、3DES、 AES、DM5、HMAC、CMAC、SHAxx、SM3、SM4),非对称算法(RSA、ECC、ECDSA、ECDH、SM2、SM9...)
由于工作的需要,在过去的两年中学习.适配了很多算法,包括对称算法.非对称算法.国密算法.国际算法等.为了逼迫自己能够牢记并掌握这些算法的基本知识点,故本人写了一个关于算法的专栏(持续更新中...) ...
- 【密码算法 之六】CCM 浅析
CCM模式浅析 1. 综述 2. 加密 2.1 前置条件(Prerequisites) 2.2 输入(Input) 2.3 输出(Output) 2.4 加密流程(Steps) 3. 解密 3.1 前 ...
- 【密码算法 之八】Hash类算法(单向散列函数) MD5 \ SHA1 \ SHA224 \ SHA256 \ SHA384 \ SHA512等浅析
1. 综述 Hash算法,又称单向散列函数(one-way hash function). 单向散列函数有一个输入和一个输出,其中输入称为消息(message),输出称为散列值(hash va ...
- 密码算法(SM1、SM2、SM3、SM4、同态加密、密态计算、隐私计算和安全多方计算)
文章目录 SM1 对称密码 SM2 椭圆曲线公钥密码算法 SM3 杂凑算法 SM4 对称算法 同态加密 密态计算和隐私计算 安全多方计算技术 安全多方计算的应用场景 对称加密算法 非对称加密算法(公钥 ...
- 商用密码应用与安全性评估要点笔记(密码发展、密码算法)
1.3 密码发展 词条 内容 创新的动力 信息系统的应用需求和攻击威胁 发展三个阶段 古典密码.机械密码.现代密码 古典密码 代换密码,采用一个代换表将一段明文变换成一段密文.若代换表只有一个,是单表 ...
- SM4密码算法(附源码)
from:http://blog.csdn.net/mao0514/article/details/52930944 SM4是我们自己国家的一个分组密码算法,是国家密码管理局于2012年发布的.网址戳 ...
- python如何调用文件进行换位加密_python 换位密码算法的实例详解
python 换位密码算法的实例详解 一前言: 换位密码基本原理:先把明文按照固定长度进行分组,然后对每一组的字符进行换位操作,从而实现加密.例如,字符串"Error should neve ...
- JavaScript实现希尔密码 算法(附完 整源码)
JavaScript实现希尔密码 算法 Matrix.js完整源代码 hillCipher.js完整源代码 hillCipher.test.js完整源代码 Matrix.js完整源代码 export ...
- 古典密码算法------替代密码算法
替代密码算法的原理是使用替代法进行加密,就是将明文中的字符用其它字符替代后形成密文.例如:明文字母a.b.c.d ,用D.E.F.G做对应替换后形成密文. 替代密码包括多种类型,如单表替代密码.多明码 ...
最新文章
- ASP.NET2.0自定义控件组件开发 第六章 深入讲解控件的属性
- 母校/母语/母公司怎么说?
- 【ArcGIS遇上Python】使用add-in向导开发ArcGIS插件(1):add-in工具介绍及安装
- java 日期类代码_java 日期时间处理类
- BAT老程序员分享:Linux C/C++ 开发程序员的黄金方向和学习路线!
- 三星5nm产品开发进度出问题,高通紧急向台积电求援
- 【OpenCV】形态学处理
- c语言五个整数排列,刚学c语言,老师让用if编一个五个数字从大到小的排序,有那个大神能帮我,谢谢啦...
- 投资的收益与风险的数学建模
- 关于华为任正非裁员事件
- Win11如何查看自己电脑的显卡信息?Win11查看显卡信息的方法
- 疾病负担研究(GBD)-如何绘制GBD相关性图
- 统计二叉树中不平衡节点树的个数
- 学习Android开发只要这些东西,Android篇
- linux u盘分区 mdev 卸载问题,迅为开发板最小Linux自动挂载TF卡/U盘等存储设备
- 天刀一代宗师服务器维护,3月13日服务器例行维护公告(已完成)
- Android SOS功能模块开发
- 2018第九届蓝桥杯大赛软件类B组C/C++省赛题解
- C++(MFC)各控件或取和属性
- tcpdump 命令使用教程
热门文章
- 190606-190610《跟秋叶学PPT》
- 到底什么是SDWAN服务?
- 新版ECharts实现“暂无数据”的完美解决方案
- 【Redis-6.0.8】CRC16
- tomcat用c语言开发服务,apache tomcat是什么语言开发的
- c语言butter函数,butter函数
- ubuntu播放mp4的插件
- 【摘记】心:稻盛和夫的一生嘱托
- Quartus报错“Can't place multiple pins assigned to pin location Pin_76”
- 深度学习笔记--基于Pytorch搭建VGG16网络