PHP加密解密 第8.1章 AES概念 PHP加密解密 第8.1章 AES概念

2023-06-15

一、前言

AES 的全称是 Advanced Encryption Standard,意思是高级加密标准。

它的出现主要是为了取代 DES 加密算法的,因为我们都知道 DES 算法的密钥长度是 56Bit,因此算法的理论安全强度是 2 的 56 次方。

但二十世纪中后期正是计算机飞速发展的阶段,元器件制造工艺的进步使得计算机的处理能力越来越强,虽然出现了 3DES 的加密方法,但由于它的加密时间是 DES 算法的 3 倍多,64Bit 的分组大小相对较小,所以还是不能满足人们对安全性的要求。于是 1997 年 1 月 2 号,美国国家标准技术研究所宣布希望征集高级加密标准,用以取代 DES。

AES 也得到了全世界很多密码工作者的响应,先后有很多人提交了自己设计的算法。最终有 5 个候选算法进入最后一轮:Rijndael,Serpent,Twofish,RC6 和 MARS。最终经过安全性分析、软硬件性能评估等严格的步骤,Rijndael 算法获胜。

二、密钥

密钥是 AES 算法实现加密和解密的根本。

对称加密算法之所以对称,是因为这类算法对明文的加密和解密需要使用同一个密钥。

AES 支持三种长度的密钥: 128位,192位,256位

平时大家所说的 AES128,AES192,AES256,实际上就是指 AES 算法对不同长度密钥的使用。

三种密钥的区别: 从安全性来看,AES256 安全性最高。

从性能看,AES128 性能最高。

本质原因是它们的加密处理轮数不同。

三、填充

要想了解填充的概念,我们先要了解 AES 的分组加密特性。

AES 算法在对明文加密的时候,并不是把整个明文一股脑的加密成一整段密文,而是把明文拆分成一个个独立的明文块,每一个明文块长度 128 bit。

这些明文块经过 AES 加密器复杂处理,生成一个个独立的密文块,这些密文块拼接在一起,就是最终的AES 加密的结果。

但这里涉及到一个问题,假如一段明文长度是 196bit,如果按每 128bit 一个明文块来拆分的话,第二个明文块只有 64bit,不足 128bit。这时候怎么办呢?就需要对明文块进行填充(Padding) 。

几种典型的填充方式:

  • NoPadding: 不做任何填充,但是要求明文必须是 16 字节的整数倍。

  • PKCS5Padding(默认): 如果明文块少于 16 个字节(128bit),在明文块末尾补足相应数量的字符,且每个字节的值等于缺少的字符数。 比如明文:{1,2,3,4,5,a,b,c,d,e} 缺少 6 个字节,则补全为 {1,2,3,4,5,a,b,c,d,e,6,6,6,6,6,6 }

  • PKCS7Padding 原理与 PKCS5Padding 相似,区别是 PKCS5Padding 的 blocksize 为 8 字节,而 PKCS7Padding 的 blocksize 可以为 1 到 255 字节

  • ISO10126Padding:如果明文块少于 16 个字节(128bit),在明文块末尾补足相应数量的字节,最后一个字符值等于缺少的字符数,其他字符填充随机数。比如明文:{1,2,3,4,5,a,b,c,d,e} 缺少 6个字节,则可能补全为 {1,2,3,4,5,a,b,c,d,e,5,c,3,G,$,6}

需要注意的是,如果在 AES 加密的时候使用了某一种填充方式,解密的时候也必须采用同样的填充方式。

四、模式

AES 的工作模式,体现在把明文块加密成密文块的处理过程中。

AES 加密算法提供了五种不同的工作模式:CBC,ECB,CTR,CFB,OFB

模式之间的主题思想是近似的,在处理细节上有一些差别

  • 电码本模式(Electronic Codebook Book (ECB))

  • 密码分组链接模式(Cipher Block Chaining (CBC))

  • 计算器模式(Counter (CTR))

  • 密码反馈模式(Cipher FeedBack (CFB))

  • 输出反馈模式(Output FeedBack (OFB))

4.1、ECB

电码本模式(Electronic Codebook Book (ECB),这种模式是将整个明文分成若干段相同的小段,然后对每一小段进行加密。

https://file.lulublog.cn/images/3/2023/06/HM8Gj2BbVJ99XvBkwwbWcIxBIX57g7.png

优点

  • 简单

  • 有利于并行计算

  • 误差不会被传送

缺点

  • 不能隐藏明文的模式

  • 可能对明文进行主动攻击

4.2、CBC

密码分组链接模式(Cipher Block Chaining (CBC)) 这种模式是先将明文切分成若干小段,然后每一小段与初始块或者上一段的密文段进行异或运算后,再与密钥进行加密。

https://file.lulublog.cn/images/3/2023/06/fVzY3UHVbhbRidrhiHvYiuazIV33sU.png

优点

  • 不容易主动攻击,安全性好于 ECB,适合传输长度长的报文,是 SSL、IPSec 的标准

缺点

  • 不利于并行计算

  • 误差传递

  • 需要初始化向量 IV

4.3、CTR

计算器模式(Counter (CTR)) 计算器模式不常见,在CTR模式中, 有一个自增的算子,这个算子用密钥加密之后的输出和明文异或的结果得到密文,相当于一次一密。这种加密方式简单快速,安全可靠,而且可以并行加密,但是在计算器不能维持很长的情况下,密钥只能使用一次。

https://file.lulublog.cn/images/3/2023/06/CmBIFrRbbIJWQRGsqBWRmWv0BWgIbg.png

4.4、CFB

密码反馈模式(Cipher FeedBack (CFB)) 这种模式较复杂。

https://file.lulublog.cn/images/3/2023/06/rYYsA9Wr0100Wj100pwsY0mYP1WmMv.png

优点

  • 隐藏了明文模式

  • 分组密码转化为流模式

  • 可以及时加密传送小于分组的数据

缺点

  • 不利于并行计算

  • 误差传送:一个明文单元损坏影响多个单元

  • 唯一的IV

4.5、OFB

输出反馈模式(Output FeedBack (OFB)) 这种模式较复杂。

https://file.lulublog.cn/images/3/2023/06/oI1W76061oB7xXi16k16bkkkkn7NW7.png

优点

  • 隐藏了明文模式

  • 分组密码转化为流模式

  • 可以及时加密传送小于分组的数据

缺点

  • 不利于并行计算

  • 对明文的主动攻击是可能的

  • 误差传送:一个明文单元损坏影响多个单元

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开微信扫一扫,即可进行扫码打赏哦

阅读 233