一、加密
1.1、加密的定义
首先了解加密,我们先需要了解何为明文,何为密文?
- 明文:是指没有加密的文字(或者字符串),一般人都能看懂的意思
- 密文:密文是加了密的的文字,如果说明文是加密之前的文字,那么密文是对明文进行加密后的报文
密码学中,加密(英语:Encryption)是将明文信息改变为难以读取的密文内容,使之不可读的过程。
只有拥有解密方法的对象,经由解密过程,才能将密文还原为正常可读的内容。
1.2、加密算法
1.2.1、对称加密算法
在对称加密算法中,
使用的密钥只有一个
,发收信双方
都使用这个密钥
对数据进行加密和解密,这就要求
解密方事先必须知道加密密钥
。
常见的对称加密算法有DES,3DES,AES,RC2,RC4,RC5,SM4等算法。
-
AES算法
:(英语:Advanced Encryption Standard)
是美国联邦政府采用的一种分组加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。
现在,高级加密标准已然成为对称密钥加密中最流行的算法之一。
所以,如果要使用对称加密算法,我们一般使用AES即可
。
-
SM4算法:
是中华人民共和国政府采用的一种分组密码标准,由国家密码管理局于2012年3月21日发布,相关标准为“GM/T 0002-2012《SM4分组密码算法》(原SMS4
分组密码算法
)”。2016年8月,成为中国国家密码标准(GB/T 32907-2016)。
如果要求使用国密加密的新创场景我们使用SM4即可
。
而想更深入AES,SM4就要说到分组算法,那么我们就要知道如何分组:
1.2.2、分组模式
常用的分组模式:比如ECB,CBC,CFB,OFB等等,具体的算法的优缺点如下图:
明文的长度不固定,而分组密码只能处理特定长度的一块数据,这就需要对分组密码的算法进行迭代,以便将一段很长的明文全部加密,而迭代的方法就是分组的模式。
我们这里讲用得比较多的ECB,CBC这两种模式
-
ECB – Electronic Code Book, 电子密码本模式
在ECB模式中,将
明文分组加密之后的结果将直接成为密文分组
。
相同的明文分组会被转换为相同的密文分组
,我们可以将其理解为是一个巨大的“
明文分组->密文分组
”的对应表,因此ECB模式也称为电子密码本模式。
当最后一个明文分组的内容
小于分组长度时,需要用一些特定的数据进行填充
。
-
优点:
简单,可以并发加密
-
缺点:ECB模式中,明文分组与密文分组是一一对应的关系,因此,
如果明文中存在多个相同的明文分组,则这些明文分组最终都将被转换为相同的密文分组
。且
加密长度只能是分组的倍数,不够会补齐
,这样一来,
只要观察一下密文,就可以知道明文存在怎样的重复组合,并可以以此为线索来破译密码
,因此ECB模式是存在一定风险的。是不可抗攻击的 - 举一个例子说明:
假设分组长度为128bit(16个字节),某银行的转账请求数据由以下3个分组构成。
分组1=付款人的银行账号
分组2=收款人的银行账号
分组3=转账金额。
场景是:从A-5374账号向B-6671账号转账1亿元
16进制数据表示如下:
将上面数据用ECB加密,加密后,看不出明文分组内容。
攻击者将密文分组1和2对调。
攻击者没有试图破译密码,但场景却发生了变化:
现在场景变成了:B-6671账号向A-5374账号转账1亿元。
完全相反,这就是ECB的弱点,
不破译密文的情况下操纵明文
。
-
CBC密文分组链接模式
CBC模式的全称是Cipher Block Chaining模式(密文分组链接模式),之所以叫这个名字,是因为密文分组像链条一样相互连接在一起。
在CBC模式中,
首先将明文分组与前一个密文分组进行XOR异或运算,然后再进行加密
,过程如下图:
我们来比较一下ECB模式与CBC模式的区别
ECB模式只进行了加密,而CBC模式则在加密之前进行了一次XOR
。
-
初始向量
当加密第一个明文分组时,由于不存在“前一个密文分组”,因此需要事先准备一个长度为一个分组的比特序列来代替“前一个密文分组”,这个比特序列称为初始化向量(Initialization Vector),通常缩写为IV,一般来说,每次加密时都会随机产生一个不同的比特序列来作为初始化向量。 - CBC模式的特点
明文分组在加密之前一定会与“前一个密文分组”进行XOR运算,因此
即使明文分组1和明文分组2的值是相等的,密文分组1和2的值也不一定是相等的
。这样一来,ECB模式的缺陷在CBC模式中就不存在了。
加密过程:在CBC模式中,无法单独对一个中间的明文分组进行加密。例如,如果要生成密文分组3,则至少需要凑齐明文分组1、2、3才行。
解密过程:假设CBC模式加密的密文分组中有一个分组损坏了。在这种情况下,只要密文分组的长度没有发生变化,则解密时最多只有2个分组受到数据损坏的影响。见下图:
假设CBC模式的密文分组中有一些比特缺失了,那么此时即便只缺失1比特,也会导致密文分组的长度发生变化,此后的分组发生错位,这样一来,缺失比特的位置之后的密文分组也就全部无法解密。见下图:
所以CBC优点在于安全性要高于ECB,不容易被主动攻击。
但是缺点也很明显,不利于并行计算,且需要额外的空间存储初始向量,容易出现误差影响后面的分组。
但是我们仍然推荐使用CBC。
下一篇为非对称加密和数字签证相关知识,有兴趣的同学可以浏览
https://blog.csdn.net/qq_44754515/article/details/123594255?spm=1001.2014.3001.5502