快捷搜索:  网络  后门  CVE  渗透  扫描  木马  黑客  as

高级加密标准(AES)阐发

0×00 媒介

在暗码学中,block(分组)暗码的工作模式被广泛使用,使用同一个分组暗码密钥对很多称之为块的数据加密,在优于很多诸如RSA、ECC暗码的性能的情形下,也不失为一种安全的加密算法,今天我们将要来具体认识一下在暗码学中盘踞重要地位的AES加密标准,在暗码学中又称为Rijindael加密法。起首AES是用来替换本来的DES,是美国NIST发布,俨然已经成为对称密钥中最流行的算法之一。

0×01 正文

AES 又称“矩阵加密算法”其道理采用字节矩阵上进行“或与非”的操作(置换以及替换),达到数据被重新排列、或者替代成为另一个完全不相同的数据;从而达到可以采用相同的密钥进行“归转”。 AES 加密的区块长度固定为 12八、192、256 位(bit).image.png加密会先将需要加密的明文拆分为许多明文块然后采取下面的加密图种的4种方式加密最后得到许多密文块。其次AES也不是一次性将明文转变为密文的算法,而是经过许多轮的加密而成的。详细分成若干轮呢?

初始轮(Initial Round)  1次

普通轮(Rounds)          N次

终极轮(Final Round)   1次

上面我们提到AES的Key支持三种长度:AES128,AES192,AES256。Key的长度决定了AES加密的轮数。除去初始轮,种种Key长度对应的轮数以下:

AES128:10轮

AES192:12轮

AES256:14轮

不同阶段的Round有不同的处理步骤。AES加密过程是在一个4×4的字节矩阵上运作,这个矩阵又称为“体(state)”,其初值就是一个明文区块(矩阵中一个元素大小就是明文区块中的一个Byte)。(Rijndael加密法因支持更大的区块,其矩阵行数可视情形增添)加密时,各轮AES加密轮回(除最后一轮外)均包含4个步骤。image.png初始轮只有一个步骤:

加轮密钥(AddRoundKey)

普通轮有四个步骤:

字节代替(SubBytes)

行移位(ShiftRows)

列混淆(MixColumns)

加轮密钥(AddRoundKey)

终极轮有三个步骤:

字节代替(SubBytes)

行移位(ShiftRows)

加轮密钥(AddRoundKey)

AddRoundKey—矩阵中的每个字节都与该次归合密钥(round key)做XOR运算;每一个子密钥由密钥生成方案产生。

SubBytes—通过一个非线性的替代函数,用查找表的方式把每一个字节替代成对应的字节。

ShiftRows—将矩阵中的每一个横列进行轮回式移位。

MixColumns—为了充分混合矩阵中各个直行的操作。这个步骤使用线性转换来混合每一内联的四个字节。最后一个加密轮回中省略MixColumns步骤,而以另一个AddRoundKey取代。

字节替代SubBytes

字节代替的首要功能是通过S盒实现一个字节到另外一个字节的映照。image.png步骤SubBytes,又称作S盒,它是AES加密过程中唯一的非线性变换。他是一个砖匠置换,该置换包含一个作用在状态字节上的S盒,用Srd表示AES中特使用的特定的S盒。

1.非线性度:

输入输出之间最大相干幅度必须绝可能小。
差分传播概率最大值必需绝可能小。

2.数复杂度

在GF(2^8)中Srd应当具有复杂的代数抒发式

image.png字节代替最首要的运算就是根据表2-1进行加密。

例:

image.png上图为需要加密的暗码块其中可以直接查表:如19就对应着0xd4;a0对应0xe0;…

行移位ShiftRows

行移位是一个4×4的矩阵内部字节之间的置换,用于提供算法的扩散性。在ShiftRows步骤中,矩阵中每行的各个字节轮回向左方位移。位移量则随着行数递增而递增。ShiftRows描摹矩阵的行操作。在此步骤中,每行都向左轮回位移某个偏移量。在AES中(区块大小128位),第一行维持不变,第二行里的每一个字节都向左轮回挪移一格。同理,第三行中举四行向左轮回位移的偏移量就分别是2以及3。128位以及192比特的区块在此步骤的轮回位移的模式相同。经过ShiftRows以后,矩阵中每竖列,都是由输入矩阵中的每一个不同列中的元素组成。Rijndael算法的版本中,偏移量以及AES有少量不同;对于长度256比特的区块,第一行仍旧维持不变,第二行、第三行、第四行的偏移量分别是1字节、2字节、3字节。除此之外,ShiftRows操作步骤在Rijndael以及AES中完全相同。

以下图:行移位变换实现基于行的轮回移位操作,变换要领为:第0行不变,第1行轮回左移1个字节,第2行轮回左移两个字节,第3行轮回左移3个字节

image.png

正向行移位:

正向行移位用于加密,其道理图以下。其中:第一行保持不变,第二行轮回左移8比特,第三行轮回左移16比特,第四行轮回左移24比特。

假设矩阵的名字为state,用公式表示以下:

state’[i][j] = state[i][(j + i) % 4]

其中i、j属于[0,3]2) 逆向行移位,逆向行移位即是相反的操作,即:第一行保持不变,第二行轮回右移8比特,第三行轮回右移16比特,黑客网,第四行轮回右移24比特。

用公式表示以下:

state’[i][j] = state[i][(4 + j -i) % 4]

其中i、j属于[0,3]列混淆MixColumns。

列混淆:行使域GF(2^8)上算术特性的一个代替,一样用于提供算法的扩散性。
在MixColumns步骤,每列的四个字节通过线性变换互相结合。image.png

每列当做上元素的系数合并成为一个一个多项式,接着将此多项式以及一个固定的多项式image.png在模下image.png

乘起来,若两个多项式进行乘法运算,运算的要领为两个多项式相乘,若运算的效果超过8次方,则必须对此效果对一个多项式m(x)进行模运算。AES算法中,这个8次不可约多项式确定为m(x)=x^8+x^4+x^3+x+1。 image.png

轮密钥相加AddRoundKey

该部分就是把上一步的效果以及密钥进行异或;得到的效果作为初始值,重复以上操作9次。第10次的时辰不执行MixColumns直接以及密钥求异或操作,得到的终极效果就是密文。

第n组第i列 为 第n-1组第i列 与 第n组第i-1列之以及(模2加法,1<= i <=3)

对于每组 第一列即i=0,有特殊的处理:

将前一列即第n-1组第3列的4个字节轮回左移1个字节,

并对每一个字节进行字节替换变换SubBytes。

将第一行(即第一个字节)与轮常量rc[n]相加 ,

最后再与前一组该列相加。

这里的rc[n]是个定值:image.png

在AddRoundKey步骤中,将每一个状态中的字节与该归合密钥做异或(⊕)。AddRoundKey步骤,归合密钥将会与原矩阵合并。在每一次的加密轮回中,都会由主密钥产生一把归合密钥(通过Rijndael密钥生成方案产生),这把密钥大小会跟原矩阵同样,以与原矩阵中每一个对应的字节作异或(⊕)加法。

image.png

0×02 解密运算及安全

AES解密算法与加密不同,基本运算中除了AddRoundKey(轮密钥加)不变外,其余的都需要进行逆变换即

InvSubBytes(逆字节替换)

InvShiftRows(逆行移位)

InvMixColumns(逆列混淆)

0×03 总结

截至2006年,针对AES唯一的成功攻击是旁道攻击,新的 AES 将无疑成为加密所有情势电子信息的究竟上的标准,取代 DES。AES 加密的数据在某种意义上是安全的,因为没有已知的暗码阐发攻击可以解密 AES 密文,除非强行遍历搜索所有可能的 256 位密钥。

[1] William Stallings著;王张宜等译. 暗码编码学与收集安全——道理与实践(第五版)[M]. 北京:电子工业出版社,2012.1.

[2] Joan Daemen Vincent Rijmen 著;谷大武 徐胜波 译.高级加密标准(AES)算法——Rijindael 设计(第二版)[M].北京:清华大学出版社,2008,2

[3]wikipedia-高级加密标准

[4]https://blog.csdn.net/bcbobo21cn/article/details/51312335

[5]https://blog.csdn.net/qq_28205153/article/details/55798628

*

您可能还会对下面的文章感兴趣: