1、 1 课 程 设 计 报 告 AESAES加密解密加密解密软件软件的实现的实现 2 目录目录 1、选题背景 . 3 2、设计的目标 3 2.1 基本目标: 3 2.2 较高目标: 4 3、功能需求分析 4 4、模块划分 . 5 4.1、密钥调度 . 5 4.2、加密 7 4.2.1、字节代替(SubBytes). 7 4.2.2、行移位(ShiftRows) 9 4.2.3、列混合(MixColumn) 10 4.2.4、轮密钥加(AddRoundKey) . 12 4.2.5、加密主函数 . 13 4.3、解密 15 4.3.1、逆字节替代(InvSubBytes) . 15 4.3.2、逆
2、行移位(InvShiftRows) . 16 4.3.3、逆列混合(InvMixCloumns) . 16 4.3.4、轮密钥加(AddRoundKey) . 17 4.3.5、解密主函数 . 17 5.测试报告 19 5.1 主界面 19 5.2 测试键盘输入明文和密钥加密 . 19 5.3 测试键盘输入密文和密钥加密 . 20 5.3 测试文件输入明文和密钥加密 . 21 5.4 测试文件输入密文和密钥加密 . 21 5.5 软件说明 22 6.课程设计报告总结 . 22 7.参考文献 23 3 1、选题背景选题背景 高级加密标准(Advanced Encryption Standard,
3、AES) ,在密码学中又称 Rijndael 加 密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的 DES,已经被多 方分析且广为全世界所使用。 经过五年的甄选流程, 高级加密标准由美国国家标准与技术研 究院(NIST)于 2001 年 11 月 26 日发布于 FIPS PUB 197,并在 2002 年 5 月 26 日成为有效 的标准。2006 年,高级加密标准已然成为对称密钥加密中最流行的算法之一。该算法为比 利时密码学家 Joan Daemen 和 Vincent Rijmen 所设计,结合两位作者的名字,以 Rijndael 之命名之,投稿高级加密标准的甄选流程。
4、 (Rijndael 的发音近于 “Rhine doll“) 严格地说,AES 和 Rijndael 加密法并不完全一样(虽然在实际应用中二者可以互换) , 因为 Rijndael 加密法可以支援更大范围的区块和密钥长度:AES 的区块长度固定为 128 位 元,密钥长度则可以是 128,192 或 256 位元;而 Rijndael 使用的密钥和区块长度可以是 32 位元的整数倍, 以 128 位元为下限, 256 位元为上限。 加密过程中使用的密钥是由 Rijndael 密钥生成方案产生。大多数 AES 计算是在一个特别的有限域完成的。 截至 2006 年,针对 AES 唯一的成功攻击是旁
5、道攻击 旁道攻击不攻击密码本身,而是攻击那些实作于不安全系统(会在不经意间泄漏资讯)上 的加密系统。2005 年 4 月,D.J. Bernstein 公布了一种缓存时序攻击法,他以此破解了一 个装载OpenSSL AES加密系统的客户服务器6。 为了设计使该服务器公布所有的时序资讯, 攻击算法使用了 2 亿多条筛选过的明码。 有人认为谁?, 对于需要多个跳跃的国际互联网 而言, 这样的攻击方法并不实用7。 Bruce Schneier 称此攻击为 “好的时序攻击法” 8。 2005 年 10 月,Eran Tromer 和另外两个研究员发表了一篇论文,展示了数种针对 AES 的缓 存时序攻击
6、法。其中一种攻击法只需要 800 个写入动作,费时 65 毫秒,就能得到一把完整 的 AES 密钥。 但攻击者必须在执行加密的系统上拥有执行程式的权限, 方能以此法破解该密 码系统。 虽然高级加密标准也有不足的一面,但是,它仍是一个相对新的协议。因此,安全研究人 员还没有那么多的时间对这种加密方法进行破解试验。 我们可能会随时发现一种全新的攻击 手段会攻破这种高级加密标准。至少在理论上存在这种可能性。 2、设计的目标设计的目标 2.1 基本基本目标目标: (1)在深入理解 AES 加密/解密算法理论的基础上,能够设计一个 AES 加密/解密软件 系统,采用控制台模式,使用 VS2010 进行开发,所用语言为 C 语言进行编程,实现加密解 密; (2)能够完成只有一个明文分组的加解密,明文和密钥是 ASCII 码,长度都为 16 个字 符(也就是固定明文和密钥为 128 比特),输入明文和密钥,输出密文,进行加密后,能够进 4 行正确的解密; (3)程序运行时,能够按照要求输出最后两轮的轮密钥,以及最后两轮加密或解密之后 的值,16 进制表示; (4)程序有良