密码技术(三、四)之对称密码(AES)

——用相同的密钥进行加密和解密
此次主要介绍比特序列运算和XOR(异或)运算。这两种运算在计算机数据处理中经常出现,因此大家应该在此属性他们。

  • 一次性密码本 (绝对无法破解的密码,这一点已经得到证明)
  • DES
  • 三重DES
  • AES
  • 其他一些密码算法

AES

 AES(Advanced Encryption Standard)是取代前任标准DES而成为新标准的一种对称密码算法。全世界的企业和密码学家提交了多个对称密码算法作为AES候选,最终在2000年的时候,从这些候选算法中选出了有一种名为Rijndael的对称密码算法,并将其确定为AES。

Rijndael

 Rijndael是由比利时密码学家Joan Daemen 和Vincent Rijmen设计分组密码算法,于2000年被选为新一代的标准算法密码-AES。
Rijindael的分组长度和密钥长度可以分别为32比特为单位,在128比特到256比特的范围内进行选择。不过AES规格中,分组长度固定为128比特,密钥长度只有128、192和256比特三种。

Rijndael加密和解密

 和DES一样,Rijndael算法也是由多个轮构成,其中每一个轮分为SubBytes、ShiftRows、MixColumns和AddRoundKey共4个步骤。DES使用Feistel网络作为基本结构,而Rijndael没有使用Feistel网路,而是使用了SPN网路
  Rijndael的输入分组128比特,也就是16个字节。首先,需要逐个字节地对16字节地输入数据进行SubBytes处理。所谓SubBytes,就是以每个字节地值(0~255的任意值)为索引,从一张表拥有256个值替换表(S-Box)中查找出对应的值来处理。也就是说,要将一个1字节地值替换成另一个1字节地值。这个步骤用语言来描述比较麻烦,大家可以将它想象成为前面介绍的简单替换密码的256个字母的版本。

SubBytes(逐个字节替换).png

 SubBytes之后需要进行ShiftRows处理。这一步是将以4字节为单位的行,按照一定的规则向左平移,且每一行平移的字节数是不同的。


ShiftRows(平移行).png

 ShiftRows之后需要进行MixColumns处理。这一步是对一个4字节地值进行比特运算,将其变为另外一个4个字节值。


MixColumns(混合列).png

 最后,需要将MixColumns的输出与轮密钥进行XOR,即进行
AddRoundKey处理。到这里Rijndael的一轮就接收了。实际上,在Rijndael中需要重复进行10~14轮计算。


AddRoundKey(与轮密钥进行XOR).png

 通过上面的结构,我们可以发现输入比特在一轮中都会被加密。和每一轮都只加密一般输入的比特的Feistel网络相比,这种方式的优势在于加密所需要的轮数更少。此外,这种方式还有一个优势,即SubBytes、ShiftRows、MixColumns可以分别以字节、行、列为单位进行并行计算。

在加密过程中,每一轮所进行的处理为:
SubBytes——>ShiftRows——>MixColumns——>AddRoundKey
而在解密时,则是相反的顺序来进行的,即
AddRoundKey——>MixColumns——>ShiftRows——>SubBytes

其中,AddRoundKey是与轮密钥进行XOR运算,因此这一步在加密和解密是是完全相同的。


InvMixColumns(混合列).png
InvShiftRows(平移行).png
InvSubBytes(逐个字节替换).png

Rijndael的破译

 对于Rijndael来说,可能会出现以前不存在的新的攻击方式。Rijndael的算法背后有这严谨的数学结构,也就是说从明文到密文的计算过程可以全部用公司来表达,这是在以前任何密码算法都不具备的性质。如果Rijndael的公司能够通过数学运算求解,哪也就是意味着Rijndael能够通过数学方法进行POI,而这也就为新的攻击方式的产生提供了可能。

应该使用哪种对称密码呢

 首先,DES不应再应用任何新的用途。

 其次,我们也没有理由将三重DES用于任何新的用途。

 一般来说,我们不应该使用任何自制的密码算法,而是应该使用AES。
 因为其在选定的过程中,经过了全世界密码学家所进行的高品质的验证
 工作,而对于自制的密码算法则很难进行这样的验证。


该系列的主要内容来自《图解密码技术第三版》
我只是知识的搬运工
文章中的插图来源于原著

你可能感兴趣的:(密码技术(三、四)之对称密码(AES))