——用相同的密钥进行加密和解密
此次主要介绍比特序列运算和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之后需要进行ShiftRows处理。这一步是将以4字节为单位的行,按照一定的规则向左平移,且每一行平移的字节数是不同的。

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

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

通过上面的结构,我们可以发现输入比特在一轮中都会被加密。和每一轮都只加密一般输入的比特的Feistel网络相比,这种方式的优势在于加密所需要的轮数更少。此外,这种方式还有一个优势,即SubBytes、ShiftRows、MixColumns可以分别以字节、行、列为单位进行并行计算。
在加密过程中,每一轮所进行的处理为:
SubBytes——>ShiftRows——>MixColumns——>AddRoundKey
而在解密时,则是相反的顺序来进行的,即
AddRoundKey——>MixColumns——>ShiftRows——>SubBytes
其中,AddRoundKey是与轮密钥进行XOR运算,因此这一步在加密和解密是是完全相同的。



Rijndael的破译
对于Rijndael来说,可能会出现以前不存在的新的攻击方式。Rijndael的算法背后有这严谨的数学结构,也就是说从明文到密文的计算过程可以全部用公司来表达,这是在以前任何密码算法都不具备的性质。如果Rijndael的公司能够通过数学运算求解,哪也就是意味着Rijndael能够通过数学方法进行POI,而这也就为新的攻击方式的产生提供了可能。
应该使用哪种对称密码呢
首先,DES不应再应用任何新的用途。
其次,我们也没有理由将三重DES用于任何新的用途。
一般来说,我们不应该使用任何自制的密码算法,而是应该使用AES。
因为其在选定的过程中,经过了全世界密码学家所进行的高品质的验证
工作,而对于自制的密码算法则很难进行这样的验证。
该系列的主要内容来自《图解密码技术第三版》
我只是知识的搬运工
文章中的插图来源于原著
网友评论