AES算法描述及其实现技巧

2019-09-10 22:59李若菲
锦绣·上旬刊 2019年11期

李若菲

摘 要:AES算法是一种对称密码算法,对称密码算法又称传统密码算法,最常见的对称密钥算法是DES、AES和RC5。由于DES算法由于密钥较短,难以抵抗现有的攻击,因而不再作为加密标准,换做AES算法作为一种高级加密标准。

关键词:AES算法;DES算法;伪代码

一、AES算法的简介

AES算法是一个迭代型分组密码,它不同于信息摘要,它是对称加密算法的典型。我们知道,对称加密算法是可逆的,其主要功能是确保用户的私有信息不被公开。

AES算法可以理解为是DES和3DES的一个替代版本,DES现在已经被破解,所以十分不安全,虽然3DES还没有被破解,但是它的效率十分低,不是十分的安全,AES现在对我们来说,在已经公开的对称加密算法里面,是效率最高并且安全级别最高的一种对称加密算法,也是当今最流行的对称加密算法之一。

二、AES算法与DES算法的比较

1.相同点

密码算法包含对称加密算法,非对称加密算法,流密码算法等等。在对称加密算法中,最典型的是AES算法和DES算法。它们都属于分组密码,分组密码是将明文进行分组,当A向B传送信息,传送的信息为“我是小明”,则信息中的“我是小明”将会被分组,分成一个一个的整体,然后对这些整体进行编码,将“我是小明”这个人们能够理解的信息,转化成人们不能理解的信息,也就是乱码,对各种数据进行加密。

2.区别

DES:分组长度为64bits,换算成byte是8,密文报组长度也是64bits,密钥长度为64bits,奇偶校验有8bites,有56bits的有效密钥长度[2]。在安全性方面,DES密钥长度过短,不足以抵御攻击,它是一个F函数并且S-box的设计原理未知,可能含有陷阱,S盒的设计原理至今未公布。DES算法在1993年已被破译,故而退出历史舞台。

AES:我们可以改变分组长度和密钥长度,因为这两个长度是相互独立的,可以输入的密钥的长度有三种:128、192以及256比特,并且每次能加密128比特长的输入明文[3]。AES的密钥长度长,足以抵御现有的攻击。

三、AES算法的价值与实现

1.设计思想(技术描述)

AES算法是一个简单的设计,可以在多个平台上实现的时候比较容易、运行的时候速度快,并且编码紧凑,我们现今知道的所有攻击它都能抵抗。因为分组长度和密钥长度是相互独立的,所以我们可以改变分组和密钥的长度。现今的大多数分组密码,它们的轮函数结构是Feistel,也就是说,AES没有这种结构。

现今的大多数分组密码的中间状态的部分比特,可以位于其他位置,并且没有改变。而AES的轮函数由三个不同的可逆均匀变换(指状态的每个bit都用类似的方法处理)构成的,称为三个层[4]。

2.三个层

所谓的“均匀变换”意味着状态的每一点都是以类似的方式处理的。不同的层都有其规定好的选择,而且大部分选择是建立在“宽轨迹策略”的基础上应用的。也就是说,“宽轨迹策略”的设计就是用来分析抗线性密码、分析差分密码。

三个层中的每一层都有不同的功能,这些不同的功能最终都服务于“宽轨迹策略”,这三个层具体如下

线性混合层:为了确保多轮之上的高度扩散;

非线性层:将并行使用具有最佳“最坏情况非线性”的S盒;

密钥加层:将密钥加入到中间状态上,并掩盖其原来的状态。

3.轮函数

AES的轮函数包括:字节代换、行移变换、列混淆、轮密钥加。

字节代换:也就是S盒,是一个非线性代换,独立于状态的每个字节。在解密过程中,我们用的是逆S盒。

行移变换:状态数组的行移位是直接周期性地移动的,行移位的数量在每一行之间都是不同的。行0不移动。第1行向左挪动1字节,第2行向左挪动2字节,第3行向左挪动3字节,一样,逆行移位与行移位相反。

列混淆:将状态数组的每一列考虑为GF(28)上的多项式,然后用固定的多项式c(x)执行模x4+1乘法。列混淆也可以写成矩阵乘法,同样,逆列混淆是列混淆变换的逆。

轮密钥加:将轮密钥和密钥状态进行运算,经由过程简略的异运算和或运算,由种子密钥经由过程密钥编排算法获得,轮密钥长度与分组长度不异,轮密钥加的逆与轮密钥加是一样的[5]。

4.安全性。

对AES算法的要求是,长度只有三种,分别是16字节、24字节、32字节,换做比特位分别是128比特、192比特、256比特,也就是AES128、AES192、AES256,这三种不同长度的密钥,在使用效果上也有所不同。从安全性的角度来看,AES256具备最高的安全性,在性能方面,AES128具备最高的性能。之所以有这么大的差别,其基本原因是加密处理的数量差异。

5.伪代码(实现)

a.AES加密过程的伪代码

Rijndael(State,CipherKey)

{

KeyExpansion(CipherKey,ExpandedKey);

AddRoundKey(State,ExpandedKey);

for(i=1;i

Round(State,ExpandedKey+Nb*i);

FinalRound(State,ExpandedKey+Nb*Nr)

}

b.AES解密过程的伪代码

InvRound(State,RoundKey)

{

InvByteSub(State);

InvShiftRow(State);

InvMixColumn(State);

AddMixColumn(State);

AddRoundKey(State,RoundKey)

}

四、总结

尽管AES算法相对于DES而言,运算速度提高了,资源消耗也相对减少,安全性提高,但是AES算法仍然是双方之间的通信。明文经过对称对称加密算法处理后,变成了不可读的密文,也就是我们所谓的“乱码”。

如果我们想要解释原始文本,我们需要使用相同的加密算法和密鑰来解密它。也就是说,信息的加密过程和解密过程使用相同的算法,使用相同的密钥。

因此,由于通信双方都使用相同的密钥,如果通信双方之中存在着恶意用户,就会使得上述密码的安全性得不到保证,即存在密钥的安全问题。所以,密钥需要时常更换。

虽然AES算法已经在DES算法上升级,成为了最新的高级加密标准,从实现到应用,已经深入到了信息安全技术各个领域。但是AES算法仍存在上述的缺陷,因此公开密钥算法应运而生。但是,如今我们还在继续研究开发新的AES,以达到我们更高的要求。因此,无论是理论上还是实践上,AES的意义对我们来说具有很大,它将有一个很好的发展前景。