在密码学中,block(分组)密码的工作模式被广泛使用,使用同一个分组密码密钥对很多称之为块的数据加密,在优于很多诸如RSA、ECC密码的性能的情况下,也不失为一种安全的加密算法。
其中,AES加密标准又称为高级加密标准,是在密码学中占据重要位置的安全的加密算法之一,在密码学中也可称为Rijindael加密法。Rijndael是由比利时密码学家设计的分组密码算法,于2000年被选为新一代的标准密码算法——AES。
首先,AES是美国国家标准技术研究所NIST发布的,旨在取代DES的21世纪的加密标准。如今,AES俨然已经成为对称密钥中最流行的算法之一。而AES高级加密标准大致经历这几个时间段的发展:
1998年,NIST开始AES第一轮分析、测试和征集,共产生了15个候选算法;
1999年3月,完成了第二轮AES2的分析、测试;
2000年10月2日,美国政府正式宣布选中比利时密码学家Joan Daemen和Vincent Rijmen提出的一种密码算法Rijndael作为AES的加密算法。
2001年11月26日,AES发布于FIPS PUB 197(《Federal InformationProcessing Standards Publication 197》文件);
2002年5月26日,AES正式成为有效的标准。
AES的基本要求是,采用对称分组密码体制,密钥长度可以为128、192或256位,分组长度128位,算法应易在各种硬件和软件上实现。
另外,AES加密数据块和密钥长度可以是128b、192b、256b中的任意一个。AES加密有很多轮的重复和变换。大致步骤如下:1、密钥扩展(Key Expansion);2、初始轮(InitialRound);3、重复轮(Rounds),每一重复轮又包括字节间减法运算(SubBytes)、行移位(ShiftRows)、列混合(MixColumns)、轮密钥加法运算(AddRoundKey)等操作;4、最终轮(Final Round),最终轮没有列混合操作(MixColumns)。
当然了,AES的整体架构也可以这样理解:AES加密体制由多轮加密构成,除了结尾的一轮,其他轮都是由四个步骤组成——字节代替、行移位、列混淆、轮密钥加。而最后一轮仅包括字节代替、行移位、轮密钥加这三步。AES迭代的轮数与密钥的长度相关,16字节的密钥对应着迭代10轮,24字节的密钥对应着迭代12轮,32字节的密钥对应着迭代14轮。在开始所有轮迭代之前,需要进行一次初始变换——一次轮密钥加,这一步往往被称为第0轮。
虽然AES没有采用Feistel密码体制,与加解密结构完全相同的DES相比,有着不同的加解密结构,但是AES每一个步骤都是可逆的,因此只要把AES加密中的每一步换成其逆变换,即可得到AES解密算法。值得一提的是,AES解密算法也是先进行第0轮,而且最后一轮也是只有三步。在解密算法中,需要倒着顺序使用轮密钥。
与此同时,AES加密算法的三个核心元素分别是密钥、填充、模式,而AES加密算法的实现就需要这三者并用:
私钥是实现AES加密和解密的根本,AES支持三种长度的密钥——128位、192位、256位,其中AES 256安全性最高,AES128性能最高,由于加密处理的复杂度不同,私钥越长,加密处理的循环数越多;
需要填充是因为AES加密是组加密,即,不是直接将明文全部统一加密,而是对明文进行分组,分割为一个个独立的明文块(各明文块的长度为128b),然后对各明文块独立地进行加密,形成不同的密文块,最后将这些明文块进行分组;由于AES明文块分割的长度固定为128b,因此如果长度小于128b或超过128b的明文不是其倍数,则无法将明文分割成长度为128b的等长明文块。在这种情况下,需要填充明文块以补充到128位;
AES的工作模式出现在将明文块加密为明文块的过程中,AES加密算法提供5种不同的工作模式:ECB电码本模式(Electronic Codebook Book)、CBC密码分组链接模式(Cipher Block Chaining)、CTR计算器模式(Counter)、CFB密码反馈模式(Cipher FeedBack)、OFB输出反馈模式(Output FeedBack).
当前,AES 加密的数据在某种意义上是安全的,因为没有已知的密码分析攻击可以解密AES密文,除非强行遍历搜索所有可能的256位密钥。
领取专属 10元无门槛券
私享最新 技术干货