密码学相关基础一(对称加密篇)

一、加密

1.1、加密的定义

首先了解加密,我们先需要了解何为明文,何为密文?

  • 明文:是指没有加密的文字(或者字符串),一般人都能看懂的意思
  • 密文:密文是加了密的的文字,如果说明文是加密之前的文字,那么密文是对明文进行加密后的报文

密码学中,加密(英语:Encryption)是将明文信息改变为难以读取的密文内容,使之不可读的过程。
只有拥有解密方法的对象,经由解密过程,才能将密文还原为正常可读的内容。

1.2、加密算法

1.2.1、对称加密算法

在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥
密码学相关基础一(对称加密篇)_第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等等,具体的算法的优缺点如下图:
密码学相关基础一(对称加密篇)_第2张图片
明文的长度不固定,而分组密码只能处理特定长度的一块数据,这就需要对分组密码的算法进行迭代,以便将一段很长的明文全部加密,而迭代的方法就是分组的模式。
我们这里讲用得比较多的ECB,CBC这两种模式

  • ECB - Electronic Code Book, 电子密码本模式

密码学相关基础一(对称加密篇)_第3张图片
在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异或运算,然后再进行加密,过程如下图:
密码学相关基础一(对称加密篇)_第4张图片
我们来比较一下ECB模式与CBC模式的区别
密码学相关基础一(对称加密篇)_第5张图片
ECB模式只进行了加密,而CBC模式则在加密之前进行了一次XOR

  • 初始向量
    当加密第一个明文分组时,由于不存在“前一个密文分组”,因此需要事先准备一个长度为一个分组的比特序列来代替“前一个密文分组”,这个比特序列称为初始化向量(Initialization Vector),通常缩写为IV,一般来说,每次加密时都会随机产生一个不同的比特序列来作为初始化向量。
  • CBC模式的特点

明文分组在加密之前一定会与“前一个密文分组”进行XOR运算,因此即使明文分组1和明文分组2的值是相等的,密文分组1和2的值也不一定是相等的。这样一来,ECB模式的缺陷在CBC模式中就不存在了。

加密过程:在CBC模式中,无法单独对一个中间的明文分组进行加密。例如,如果要生成密文分组3,则至少需要凑齐明文分组1、2、3才行。

解密过程:假设CBC模式加密的密文分组中有一个分组损坏了。在这种情况下,只要密文分组的长度没有发生变化,则解密时最多只有2个分组受到数据损坏的影响。见下图:
密码学相关基础一(对称加密篇)_第6张图片
假设CBC模式的密文分组中有一些比特缺失了,那么此时即便只缺失1比特,也会导致密文分组的长度发生变化,此后的分组发生错位,这样一来,缺失比特的位置之后的密文分组也就全部无法解密。见下图:
密码学相关基础一(对称加密篇)_第7张图片
所以CBC优点在于安全性要高于ECB,不容易被主动攻击。
但是缺点也很明显,不利于并行计算,且需要额外的空间存储初始向量,容易出现误差影响后面的分组。
但是我们仍然推荐使用CBC。
下一篇为非对称加密和数字签证相关知识,有兴趣的同学可以浏览https://blog.csdn.net/qq_44754515/article/details/123594255?spm=1001.2014.3001.5502

你可能感兴趣的:(安全,java)