对称加密算法模式简介

#声明:本文创作内容含代码均为个人创作所得,允许学习、传阅,不得用于商业用途#

为什么会有很多加密模式存在?

        在对称加密算法中,我们常用的AES和SM4是不是可以满足所有的应用需求的数据块加密呢?比如我们将大量数据存放到硬盘中,又比如通信两端传输大量数据的应用场景。答案是否定的,如果简单的使用AES去加密所有的信息,则比较容易被破解,因为相同的数据块加密后的结果是一样的。假设我们将数据分为多块,每一块的数据加密后同时又影响到另一块的数据加密,然后依次影响后面的数据加密,这样的加密方案才是更加安全的,于是诞生了多种加密模式。不同加密需求适用于不同的加密模式;

下面(一 ,二,三,四,五)为最常见的五种加解对称加解密模式,剩下的是不常用的模式

一:ECB(Electronic Codebook Mode)电码本模式

如下图所示,将信息分组,然后对每组信息使用key加密,其实就是无模式加密,图中P为明文,E为加密算法,C为密文;图来源国家密码局

7233e49ab47244728e8b0bc0643a4fd3.png

1.1 应用场景:

在计算机终端之间,或多人公用一个计算机终端,所交换的二级制数据可能有重复或者共同使用的序列。

1.2 性质:

需要将加密数据进行分组,如果最后一组数据不够长,需要进行填充;

优点:可以单独对某一个分组消息进行加解密;

缺点:相同的分组信息,得到的加密密文是一样的,这种方式容易收到“字典攻击”。要注意组之间的码间干扰。

二:CBC(Cipher Block Chaining)密码分组链接

如下图所示,将数据进行分组,将明文与上一组密文异或后,再进行加密;第一组明文和初始向量IV异或;

即:Ci = EK(Pi ^ Ci-1)

034bbf09635749c6b43aefc26bd6a32f.png

2.1应用背景:

从其加密方式来看,即使我们知道密钥和初始值IV,也很难得破解其中一个组的明文,也就说,这种加密方式最好适用于一块快数据,比如我们的磁盘,或者固态硬盘;IV我们设置为其数据块的初始地址,计算机读取磁盘数据是基于数据块的,对于整个磁盘,我们可以使用多个加密密钥key。

2.2 性质:

优点:相比于ECB,上一级数据的加密会影响到下一级的数据,且是用来IV 和 key两个参数用于加密,这种加密方式更安全。

缺点:没法单独对某一个小的分组数据来加解密,如果数据长度很小,那这种方式不太适合

三:CFB(Cipher Feedback ) 密文反馈模式

CFB模式如下图所示,CFB和CBC有点类似,对初始向量进行加密,然后上一级密文输出影响下一级的加密,区别是在于,上一级的密文不是直接影响,而是先做一个数据转换;

1721bb665d6e4a7d8a76624109a287ea.png

简述加密过程:

1. 设定一个初始值IV,二进制为r个比特,然后直接赋值给FB1;

2. 取FB1的前n个比特,做为加密的数据输入

3. 取加密后的数据的前 j 个比特与分组密文异或得到本组的密文 C1

4. 在密文C1前面拼接上 k-j 个 比特 1, 使其长度为 k bit;

5. 将步骤4中 k bit数据 拼接在FB1的后面

6. 将取步骤5数据的后 r 比特作为下一轮FB2的数据

7. 重复步骤2 ~ 6, 得到所有分组密文

3.1 应用背景

对应采用CBC来加密,使用相同的IV和key可以得到相同的密文,更加增加安全性,于是可以把IV增长,想要获得密文,得需要另外一个参数 n, 也就是取IV前多少bit来加密;加密系统每增加一个参数,其系统也就越复杂一级。

3.2 性质:

系统安全性增加了,因为多了几个参数,k,j,n,r;另外由于我们加密的是IV及其中间变量,对分组明文的位宽并没有定义,所以可以不必按照AES,SM4来划分分组明文的大小。

四: OFB(Output Feedback) 输出反馈模式

OFB与CBC比较类似,CBC的密文是通过加密  分组明文与上级密文的异或;而OFB的密文是 明文与加密中间值前 j 比特的异或;即我们通过对初始值IV反复加密,然后用分组明文Pi与 加密每组的输出的前 j 比特异或。如下图所示:

02e84fa35c4d465f93df1420bfb15767.png

4.1 应用背景:

该模式算是CBC的一个简单的升级版,安全性简单提高了。

4.2 性质:

优点:可以通过 j 的大小来控制明文分组的数量,,缺点:安全性不够高,需要经常更换IV和key

五:CTR(Counter mode) 计数器模式

算法说明:分组加密的明文是 明文与 计算器值T的加密结果 异或;也就是每组的T是在前一个T上加一个常数,作为加密算法的输入。

如果最后一组数据位宽d不匹配加密输出的结果,可以只取加密值的前d bit异或。

这里的Ti是一个计数器的值,也就是 Ti+1 = Ti + m,至于这里T1的取值是啥呢?没有明确规定,可以是地址,可以是TRNG的一个值,或随机设定的一个数;n一般取1,也可以协商,

ef7e91ab88754363ae531d86c881a6c4.png

5.1 应用背景:

在一些常用的磁盘,或者大量数据存储的场景使用比较多

5.2 性质:

优点:可以并行处理,吞吐量与并行度成正比;使用不同计数器,得到不同密文

缺点:我也不知道,我不是研究密码学的,大家得找找论文,看看其破解难度与其他算法的定量区别。

六 :XTS(XEX  tweak ciphertext stealing) 带密文挪用模式

算法说明:初始值TW也叫teeak值,先经过加密后得到T1,然后每乘一次阿尔法a得到一个Ti;分组明文先与Ti异或,然后再经过加密,加密后结果与当前的Ti异或,结果为本组的密文。

如果最后一组明文为d bit数长度小于分组长度n,我们需要对最后一组和倒数第二组特殊处理,如下图,把倒数第二组得到的明文的最后 前d bit 最后最后一组的密文输出,n-d bit 拼接到最后一组明文的后面组成n bit,进过加密后,输出密文作为倒数第二组的最终密文输出。

从算法结构上来看,初始值TW不仅经过加密模块,同时又称上 阿尔法a,明文也经过加密模块,这里的乘法是基于伽罗化域的。相比于CTR来说,这里的安全性更高,因为CTR值是每次简单递增,而XTS是经过了有限域乘法计算的。

52733095c25249b99edfb952a208b8b1.png

6.1 应用背景:

该算法最常用的就是磁盘扇区加密,USB接口,等特殊的加密环境,其中tweak值用扇区地址表示,只要使用相同的密钥和tweak就可以得到相同的明文;

6.2 性质:

优点:可并行处理,吞吐量与并行度成正比,不同tweak下,相同明文产生不同的密文,加密安全性增加;

缺点:由于加入了有限域乘法,每轮两个加密操作,使得计算更加复杂,硬件实现面积更大,相对情况下,工作频率更低。

七:HCTR(Tweakable Enciphering Scheme)带泛杂凑函数的计数器模式

算法说明:

1. 明文分组为P1 P2,... , Pq, 已知一个初始值TW

2. 先利用压缩函数Hk2得到Z1中间变量,Z1 = P1^Hkz( P2|P3|...Pq|TW)

3. 利用加密函数AES或者SM4加密Z1 得到Z2

4. 生成C2...Cq ;生成方法就是上面讲的计数器模式CTR,count 为1,2,...,q-1

5. 利用压缩函数生成明文C1,C1=Z2^Hkz(C2|C2...|Cq|TW)

其中压缩函数表达式为:

HK2(M1|M2|...Mm-1) = M1*K^(m+1) ^ M2*K^(m)... ^(Mm|zero(n-d))*K2 ^(m1|m2..Mm-1)*k

公式说明:

压缩过程为:Mi 乘 K的m+1次幂,一共有m个改乘法,如果Mm的位宽d小于分组位宽n,则尾部补0,最后一组乘法为m个Mi拼接乘K,最后这些乘法的结果异或得到了压缩值,这里的乘法是伽罗华域乘,异或为二进制域。

从图上来看,输出密文为,P2,P3..., Pq,P1与所有的输入有关,好像是一种hash,因为只要有输入改变,那P1一定会变,类似于GCM模式;是不是可以认为这种模式就是AES-GCM的国密版呢?

7.1 应用背景:与XTS一样,用于磁盘扇区加密等特殊加密环境

7.2 性质:

优点:支持并行加解密(除第一行外)

HCTR明文和密文长度一样,无论加解密,任意输入数据的变化,都会来带输出比特的变化,安全性高

缺点:计算度复杂,硬件实现面积要大很多

八:BC(Block Chaing) 分组模式

与之前的XTS比较类似,不做介绍了,加密过程可以直接冲图上看出

九:OFBNLF(Output Feedback Non-lineing Function)带非线性函数的输出反馈模式

算法说明,将输入初始值IV经过加密,形成迭代的密钥Ki,然后每个Ki作为加密的K与明文加密,得到输出密文,过程比较简单,不做过多介绍;

十:GCM(Galios Count Mode)伽罗华域计数模式

从下图来看,GCM加密模式是在计数器模式上多增加了一个GHASH的功能,这样,通过对比TAG值来确定数据源是否被篡改;图上H值是用密钥对128bit 0加密所得;MultH为GF(2,128)的乘法,密文的获取和计数器模式一样,,每一级的tag值为 上一级tag * H 再异或上输出密文;最后一个级tag值为 迭代最后一级乘H,然后与A|C长度异或,再乘H,再与counter0加密值异或;

GCM最大的功能就是增加了Hash功能,防止信息被篡改。

我们将加密后的消息,与Auth tag一起 发送出去,接受者将数据解密后,同时计算Auth tag值,如果计算的值与消息中附加的值一致,我们可以认为消息是没被篡改的。    

类似这种带MAC的,还有很多种模式,如果OCB-MAC,CCM-MAC,OMAC,PMAC,CMAC等等,有些已经形成了标准,有些还没有,大家根据实际需求,按照应用场景选择模式加密模式和MAC方式;

十一:GCM模式 python实现

待我慢慢补充完善,算法说明,python脚本,verilog硬件实现

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值