AES对称加密
作者:
| 更新日期:简单介绍一下AES对称加密算法。
本文首发于公众号:天空的代码世界,微信号:tiankonguse
大家好,这里是tiankonguse的公众号(tiankonguse-code)。
tiankonguse曾是一名ACMer,现在是鹅厂视频部门的后台开发。
这里主要记录算法,数学,计算机技术等好玩的东西。这篇文章从公众号tiankonguse-code自动同步过来。
如果转载请加上署名:公众号tiankonguse-code,并附上公众号二维码,谢谢。
零、背景
之前介绍了ROT13替换加密,这次介绍一下AES对称加密算法。
为什么要有AES加密算法呢?
之前的对称加密都太简单了,一不小心加密算法就被破解了,比如ROT13就很容易发现规律,所以就有人设计出更高级的加密算法。
是的,前几天那个WannaCry电脑病毒就是使用了AES加密。
一、描述
AES全称是高级加密标准,密码学上称为Rijndael加密法。
既然是标准,那按照标准可以实现很多不同的算法,主要区别是分组加密的位数、密钥的位数、分组之间的关系,每组加密的次数。
具体的说是文本加密前需要分组,一般是128位一组,每次对一个分组加密,可以输出相同位数的加密后的串。
对一个分组加密时,我们可以使用一个固定长度的密钥,这个密钥的长度可以是128位、192位、256位。
分组之间没有关系时称为ECB加密模式, 分组之间有关系是称为CBC加密模式。
分组加密的次数是指的是使用相同的加密算法对一个串重复进行的次数。
下面我们来看看对一个具体的加密算法吧。
二、加密算法
一组待加密的串长度为16字节,组成一个4*4的矩阵。
然后下面的运算是在这个矩阵上运算。
1. 字节代换运算ByteSub
简单的说字节代换运算就是使用一个字典表对每个字节进行映射,这个映射表算是进行加密,然后有另外一个映射表进行解密。
字典表这里称为S盒(SBox)。
2. 行变换ShiftRows
行变换是一种线性变换,其目的就是使密码信息达到充分的混乱,提高非线形度。
行变换对状态的每行以字节为单位进行循环右移,移动字节数根据行数来确定,第0行不发生偏移,第一行循环右移一个字节,第二行移两个,依次类推。
这个和上篇的ROT13类似,不过这个是更复杂的循环移动。
3. 列混合变换MixColumns
列变换比较复杂了。
每一列的四个字节通过线性变换互相结合。每一列的四个元素分别当作 1 , x , x^2 , x^3
的系数,合并后即为一个多项式。
接着将此多项式和一个固定的多项式3x^3 + x^2 + x + 2
在取模x^4 + 1
下相乘,然后可以输出四个数字。
4. 轮密钥的添加变换AddRoundKey
在这个操作中,轮密钥被简单地异或到状态中,轮密钥根据密钥表获得,其长度等于数据块的长度。
上面四个步骤会进行很多轮,重要的是这些操作合起来是可逆的。
三、结论
AES加密算法在每个分组16字节里面进行各种的复杂运算,密钥相当于在运算中加盐,从而导致破解至少需要穷举2^128
次,这个复杂度太高了,所以目前还不能有效的破解这个加密算法。
好了,不多说了, 这篇文章主要介绍对称加密中最常见的AES加密算法。
对了现在开通了公众号和小密圈。
博客记录所有内容。
技术含量最高的文章放在公众号发布。
比较好玩的算法放在小密圈发布。
小密圈这周接受免费加入,欢迎大家加入看各种算法的思路。
长按图片关注公众号,接受最新文章消息。
本文首发于公众号:天空的代码世界,微信号:tiankonguse
如果你想留言,可以在微信里面关注公众号进行留言。