AES
高级加密标准
密码学中的高级加密标准(Advanced Encryption Standard,AES),又称 高级加密标准Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院 (NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。
该算法为比利时密码学家Joan Daemen和Vincent Rijmen所设计,结合两位作者的名字,以Rijndael之命名之,投稿高级加密标准的甄选流程。(Rijdael的发音近于 "Rhinedoll"。)
高级数据加密标准
对称密码体制的发展趋势将以分组密码为重点。分组密码算法通常由密钥扩展算法和加密(解密)算法两部分组成。密钥扩展算法将b字节用户主密钥扩展成r个子密钥。加密算法由一个密码学上的弱函数f与r个子密钥迭代r次组成。混乱和密钥扩散是分组密码算法设计的基本原则。抵御已知明文的差分和线性攻击,可变长密钥和分组是该体制的设计要点。
AES是美国国家标准技术研究所NIST旨在取代DES的21世纪的加密标准。
![](https://i-blog.csdnimg.cn/blog_migrate/294c6368d9ecac21f3d9ae0944b8513e.png)
AES的基本要求是,采用对称分组密码体制,密钥长度的最少支持为128、192、256,分组长度128位,算法应易于各种硬件和软件实现。1998年NIST开始AES第一轮分析、测试和征集,共产生了15个候选算法。1999年3月完成了第二轮AES2的分析、测试。2000年10月2日美国政府正式宣布选中比利时密码学家Joan Daemen 和 Vincent Rijmen 提出的一种密码算法RIJNDAEL 作为 AES.
在应用方面,尽管DES在安全上是脆弱的,但由于快速DES芯片的大量生产,使得DES仍能暂时继续使用,为提高安全强度,通常使用独立密钥的三级DES。但是DES迟早要被AES代替。流密码体制较之分组密码在理论上成熟且安全,但未被列入下一代加密标准。
AES加密数据块分组长度必须为128比特,密钥长度可以是128比特、192比特、256比特中的任意一个(如果数据块及密钥长度不足时,会补齐)。AES加密有很多轮的重复和变换。大致步骤如下:1、密钥扩展(KeyExpansion),2、初始轮(Initial Round),3、重复轮(Rounds),每一轮又包括:SubBytes、ShiftRows、MixColumns、AddRoundKey,4、最终轮(Final Round),最终轮没有MixColumns。
ECB(Electronic Code Book电子密码本)模式
ECB模式是最早采用和最简单的模式,它将加密的数据分成若干组,每组的大小跟加密密钥长度相同,然后每组都用相同的密钥进行加密。
优点: 1.简单; 2.有利于并行计算; 3.误差不会被扩散;
缺点: 1.不能隐藏明文的模式; 2.可能对明文进行主动攻击;
因此,此模式适于加密小消息。
CBC(Cipher Block Chaining,加密块链)模式
优点: 不容易主动攻击,安全性好于ECB,适合传输长度长的报文,是SSL、IPSec的标准。
缺点: 1.不利于并行计算; 2.误差传递; 3.需要初始化向量IV
CFB(Cipher FeedBack Mode,加密反馈)模式
优点:
1.隐藏了明文模式; 2.分组密码转化为流模式; 3.可以及时加密传送小于分组的数据;
缺点: 1.不利于并行计算; 2.误差传送:一个明文单元损坏影响多个单元; 3.唯一的IV;
OFB(Output FeedBack,输出反馈)模式
优点: 1.隐藏了明文模式; 2.分组密码转化为流模式; 3.可以及时加密传送小于分组的数据;
缺点: 1.不利于并行计算; 2.对明文的主动攻击是可能的; 3.误差传送:一个明文单元损坏影响多个单元;
AES共有ECB、CBC、CFB、OFB、CTR五种模式
1、AES是基于数据块的加密方式,也就是说,每次处理的数据是一块(16字节),当数据不是16字节的倍数时填充,这就是所谓的分组密码(区别于基于比特位的流密码),16字节是分组长度。
2、分组加密的几种方式
ECB:是一种基础的加密方式,密文被分割成分组长度相等的块(不足补齐),然后单独一个个加密,一个个输出组成密文。
CBC:是一种循环模式,前一个分组的密文和当前分组的明文异或操作后再加密,这样做的目的是增强破解难度。
CFB/OFB实际上是一种反馈模式,目的也是增强破解的难度。
ECB和CBC的加密结果是不一样的,两者的模式不同,而且CBC会在第一个密码块运算时加入一个初始化向量。
一. AES对称加密:
AES加密
分组
二. 分组密码的填充
分组密码的填充
e.g.:
PKCS#5填充方式
三. 流密码:
四. 分组密码加密中的四种模式:
3.1 ECB模式
优点:
1.简单;
2.有利于并行计算;
3.误差不会被传送;
缺点:
1.不能隐藏明文的模式;
2.可能对明文进行主动攻击;
3.2 CBC模式:
优点:
1.不容易主动攻击,安全性好于ECB,适合传输长度长的报文,是SSL、IPSec的标准。
缺点:
1.不利于并行计算;
2.误差传递;
3.需要初始化向量IV
3.3 CFB模式:
优点:
1.隐藏了明文模式;
2.分组密码转化为流模式;
3.可以及时加密传送小于分组的数据;
缺点:
1.不利于并行计算;
2.误差传送:一个明文单元损坏影响多个单元;
3.唯一的IV;
3.4 OFB模式:
优点:
1.隐藏了明文模式;
2.分组密码转化为流模式;
3.可以及时加密传送小于分组的数据;
缺点:
1.不利于并行计算;
2.对明文的主动攻击是可能的;
3.误差传送:一个明文单元损坏影响多个单元;
AES CFB/OFB/ECB/CBC/CTR优缺点
一、Cipher feedback(CFB)
CFB算法优点:
同明文不同密文,分组密钥转换为流密码。
CFB算法缺点:
串行运算不利并行,传输错误可能导致后续传输块错误。
二、Output feedback(OFB)
OFB算法优点:
同明文不同密文,分组密钥转换为流密码。
OFB算法缺点:
串行运算不利并行,传输错误可能导致后续传输块错误。
三、Electronic codebook(ECB)
ECB算法优点:
简单、孤立,每个块单独运算。适合并行运算。传输错误一般只影响当前块。
ECB算法缺点:
同明文输出同密文,可能导致明文攻击。
四、Cipher-block chaining(CBC)
CBC算法优点:
串行化运算,相同明文不同密文
CBC算法缺点:
需要初始向量,不过这其实不算缺点,下文的CTR也是需要随机数的。如果出现传输错误,那么后续结果解密后可能全部错误。
此外,还有Propagating cipher-block chaining(PCBC)加密模式,
五、Counter mode(CTR)
CTR算法优点:
无填充,同明文不同密文,每个块单独运算,适合并行运算。
CTR算法缺点:
可能导致明文攻击。
补充:
关于Padding补位问题,上文加密模式中,比如CBC等对输入块是有要求的,必须是块的整数倍,对不是整块的数据,要求进行填充,填充的方法有很多种,常见的有PKCS5和PKCS7、ISO10126等。
例如按照16字节分组的话:
- 对不足16字节部分(假设差n个满16字节),填充n个字节(n范围(1,15]),且每字节值均为n。
- 对正好16字节部分,则填充一个block,也就是补16个字节,每字节值为16
参考1:PKCS #7: Cryptographic Message Syntax
参考2:PKCS #5: Password-Based Cryptography Specification
所以上述算法中,默认:
需要Padding的有:CBC(,PCBC也需要,本文未涉及该加密模式)、ECB。
不需要Padding的有:CFB、OFB、CTR。
在线加密工具:http://www.seacha.com/tools/aes.html
总结
AES的这几种扩展算法,其中ecb和cbc需要填充,即加密后长度可能会不一样,cfb和ofb不需要填充,密文长度与明文长度一样,不知这样理解正确与否?