江苏大学
学院计算机学院
专业信息安全0902
姓名***
学号3090604035 小组成员*******
AES对称加密算法实现
一.AES对称加密算法实现原理
AES(The Advanced Encryption Standard)接受一个128位的明文,并且在一个128、192或者256位秘密密钥的控制下产生一个128位的密文。
它是一个替代-置换网络的设计,并且带有一个称作轮(rand)的步骤的集合,其中轮数可以是9、11或者13(取决于密钥的长度),这样可以将明文映射为密文。
AES实际上能定义为在域GF(2)的元素上的一系列标量的运算。
它实质上是在整数模2所组成的域,但是它扩展到了多项式域GF(2)[x]中。
为了构造一个域,需要使用一个能够不被任何一个具有相同底GF(2)的度数更小的多项式整除的多项式,在AES中选择了v (x)= x^8 + x^4 + x^3 + x + 1。
用整数存储时,它表示值0x11B。
域中的加法是一个简单异或(xor)操作。
乘法就是乘以其他的多项式。
一个单元a的乘法逆元是另一个单元b,使得ab模AES的多项式和多项式p(x)=1是同余的。
a(x)=0的逆是它本身。
二.AES对称加密算法实现过程
AES 算法是分组密码算法,它的输入分组、输出分组以及加/ 解密过程中的中间分组都是128比特。
(对称密码算法根据对明文消息加密方式的不同可分为两大类,即分组密码和流密码。
分组密码将消息分为固定长度的分组,输出的密文分组通常与输入的明文分组长度相同。
)
1、AES 的加密与解密框图如图所示
(1) 加密变换
设X是AES 的128 比特明文输入,Y是128 比特的密文输出,则AES 密文Y可以用下面的复合变换表示: Y= Ak(r + 1)·R·S·Akr·C·R·S·Ak(r21)·⋯·C·R·S·Ak1 (X)其中“·”表示复合运算。
这里Aki :表示对X 的一个变换Aki (X) = XÝ Ki (Ki 为第i 轮的子密钥,为比特串的异或运算) 。
S:S 盒置换。
即对每一个字节用S2Box 做一个置换。
S2Box 是一个给定的转换表。
R: 行置换。
C: 列置换。
s′(x) = a (x) á s (x)
这里á 是特殊的乘法运算
(2) 解密变换
解密变换是加密变换的逆变换。
2、AES(128bits密钥)加密解密流程如下图所示
若一个程序或者两个程序之间没有前后的依赖关系(即一个运算的输入与另一个运算的输出无关),则在具有多个处理器的条件下这些运算可以在同一时间段并行运行。
AES算法中的绝大多数运算都是基于state上进行的,而state可以表示为一个四行,Nb列的矩阵,算法的变换都是独立作用于state的字节、行或者列无关,所以可以将变换对state的运算分割成对state的每个字节、行或列的并行运算。
字节替换是独立作用在每个状态字节上的。
假设做一次S盒替换需要一个时间单位,串行模式下需要4Nb个时间单位,但在并行模式下这些S盒替代可以在一个时间单位内进行,并行模式速度是穿行模式速度的4Nb倍;位移变换是作用在独立的行上的,若对一行做一次移位操作占用一个单位时间,串行模式下需用3个单位时间,并行模式下只用一个单位时间,是串行模速度的3倍;列变换独立作用在state 的每一列上,若对一列做一次需一个单位时间,速度是串行模式的Nb倍;密钥系统是作用在每个独立字节上的,若对一个字节进行操作需用一个单位时间,则在串行模式下密钥变换需要4Nb个单位时间,并行模式下只需要一个单位时间,速度是串行模式的4Nb倍。
六.分析与总结
AES算法流程主要有三个大的模块,即密钥扩展模块、加密模块和解密模块。
密钥扩展模块由产生加密密钥的模块和解密密钥的模块组成;加、解密模块均由AddRoundkey模块、轮函数模块、FinalRound变换模块组成,其中最重要的是轮函数模块,它是AES算法的核心模块。
通过这次课程设计,更加清晰的了解了AES算法,同时也熟悉了C++编程,由于是和同学合作完成,使用C++的封装性很重要,一个好的类既安全又代码效率高,可以减少大量重复的劳动,所以这次也算C++的练习吧。
不过这次课设还是存在不足的,比如加密结果是乱码,这一问题尚未解决,有待进一步学习。
2012.06.20。