实验报告
姓名:陈清扬学号:2051313 班级:信息安全日期:2011-04-23
AES加密算法
一、实验环境
1.硬件配置:酷睿i3cpu ,2G内存
2.使用软件:
(1) 操作系统:windows7旗舰版
(2) 软件工具:visualc++6.0
二、AES涉及的相关概念或基本原理
简介:
密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。
这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。
经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。
2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。
密码说明:
严格地说,AES和Rijndael加密法并不完全一样(虽然在实际应用中二者可以互换),因为Rijndael加密法可以支援更大范围的区块和密钥长度:AES的区块长度固定为128 位元,密钥长度则可以是
128,192或256位元;而Rijndael使用的密钥和区块长度可以是32位元的整数倍,以128位元为下限,256位元为上限。
加密过程中使用的密钥是由Rijndael密钥生成方案产生。
大多数AES计算是在一个特别的有限域完成的。
AES加密过程是在一个4×4的字节矩阵上运作,这个矩阵又称为“体(state)”,其初值就是一个明文区块(矩阵中一个元素大小就是明文区块中的一个Byte)。
(Rijndael加密法因支援更大的区块,其矩阵行数可视情况增加)加密时,各轮AES加密循环(除最后一轮外)均包含4个步骤:
1AddRoundKey—矩阵中的每一个字节都与该次回合金钥(round key)做XOR运算;每个子密钥由密钥生成方案产生。
2SubBytes—透过一个非线性的替换函数,用查找表的方式把每个字节替换成对应的字节。
3ShiftRows—将矩阵中的每个横列进行循环式移位。
4MixColumns—为了充分混合矩阵中各个直行的操作。
这个步骤使用线性转换来混合每行内的四个字节。
最后一个加密循环中省略MixColumns步骤,而以另一个AddRoundKey取代。
安全性:
截至2006年,针对AES唯一的成功攻击是旁道攻击。
旁道攻击不是攻击密码本身,而是攻击那些实作于不安全系统上的加密系统。
三、实验内容
四、实验总结分析
这次实验,代码是从密钥扩展开始写的。
因为这一部分是相对独立的。
因为密钥是按列置放到矩阵中的,但是按列输入时会出现一个问题,这个应该是语言的问题,所以输入的时候我用一个中间变量temp 暂存,在把temp的值按列赋值给数组。
密钥扩展函数难点在于w(i) 其中i%4 == 0.时较复杂,不过只要细心一点都没有什么问题。
接着是字节变换,比如要把s做字节变换,就直接取S_BOX[s / 16][s % 16]即可,逆字节变换就把S_BOX换成N_S_BOX。
行移位没什么好讲的,第i行左移i位,逆行变换就第i行右移i位。
列混合运算有点技巧,当然这个可逆矩阵是已经给定的,只要运算不要错就没问题。
这个过程要注意溢出是要即使异或0X1B。
逆列混合就是移位更多次而已,跟列混合没差别。
这次实验写代码发的时间比写DES的要多,原因我想是AES加解密过程是不对称的,每个加密过程都要写一个相对应的解密过程才行,而DES却是加密解密一视同仁,都是进行一种操作行为,只是解密的过程密钥是加密过程的逆序。
这些加密算法,不论是DES还是AES都是前辈们付出很多才有的知识。
本人在短时间的学习过程中也只是了解了加解密的具体流程,而对于为什么要进行这种操作的思考就显得很浅显,所以还要多花一点时间去更深层次的研究本质思想。
才能站在巨人的肩膀上去超越他们!。