信 息 保 障 和 安 全
实
验
报
告
学院名称 计算机科学与技术学院
专 业 计算机科学与技术
学生姓名 XXX
学 号 XXXXXX
年 班 级 XXXXXX
2014 年 6 月 5 日
目 录
一. 算法原理...........................................................................................................................................3
1.1 简介..............................................................................................................................................3
1.2 设计者..........................................................................................................................................3
1.3 形成过程......................................................................................................................................3
1.4 AES 的设计思想..........................................................................................................................4
1.5 密码说明......................................................................................................................................5
1.6 高级数据加密标准......................................................................................................................6
二. 程序设计总体结构...........................................................................................................................6
2.1 系统主要目标..............................................................................................................................6
2.2 功能模块与系统结构..................................................................................................................7
2.2.1 字节替换 SubByte............................................................................................................7
2.2.2 行移位 ShiftRow...............................................................................................................7
2.2.3 列混合 MixColumn..........................................................................................................8
2.2.4 轮密钥加 AddRoundKey.................................................................................................9
2.2.5 逆字节替换.......................................................................................................................9
2.2.6 逆行移位 InvShiftRow.....................................................................................................9
2.2.7 逆列混淆.........................................................................................................................10
三. 程序实现方法与代码.....................................................................................................................11
3.1 加密............................................................................................................................................11
3.2 解密............................................................................................................................................12
四. 数据测试结果.................................................................................................................................13
五. 实验启示.........................................................................................................................................14
一. 算法原理
1.1 简介
密码学中的高级加密标准(Advanced Encryption Standard,AES),又称 Rijndael 加密
法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的 DES,已经被多
方分析且广为全世界所使用。
1.2 设计者
该算法为比利时密码学家 Joan Daemen 和 Vincent Rijmen 所设计,结合两位作者的名字,
以 Rijndael 之命名之,投稿高级加密标准的甄选流程。Rijdael 的发音近于 "Rhinedoll,两位
设计者的名字,参考荷兰语原发音可译为尤安·达蒙、文森特·莱蒙。
1.3 形成过程
1997 年 4 月 15 日,美国 ANSI 发起征集 AES(advanced encryption standard)的活动,
并为此成立了 AES 工作小组。
1997 年 9 月 12 日,美国联邦登记处公布了正式征集 AES 候选算法的通告。对 AES 的
基本要求是: 比三重 DES 快、至少与三重 DES 一样安全、数据分组长度为 128 比特、密
钥长度为 128/192/256 比特。
1998 年 8 月 12 日,在首届 AES 候选会议(first AES candidate conference)上公布了
AES 的 15 个候选算法,任由全世界各机构和个人攻击和评论。
1999 年 3 月,在第 2 届 AES 候选会议(second AES candidate conference)上经过对全
球各密码机构和个人对候选算法分析结果的讨论,从 15 个候选算法中选出了 5 个。分别是
RC6、Rijndael、SERPENT、Twofish 和 MARS。
2000 年 4 月 13 日 至 14 日 , 召 开 了 第 3 届 AES 候 选 会 议 ( third AES candidate
conference),继续对最后 5 个候选算法进行讨论。
2000 年 10 月 2 日,NIST 宣布 Rijndael 作为新的 AES。经过 3 年多的讨论,Rijndael 终
于脱颖而出。
Rijndael 由比利时的 Joan Daemen 和 Vincent Rijmen 设计。算法的原型是 Square 算法,
它的设计策略是宽轨迹策略(wide trail strategy)。算法有很好的抵抗差分密码分析及线性
密码分析的能力。
1.4 AES 的设计思想
Rijndael 密码的设计力求满足以下 3 条标准:
① 抵抗所有已知的攻击。
② 在多个平台上速度快,编码紧凑。
③ 设计简单。
当前的大多数分组密码,其轮函数是 Feistel 结构。
Rijndael 没有这种结构。
Rijndael 轮函数是由 3 个不同的可逆均匀变换
Rijndael (State, ExpandedKey)
{
AddRoundKey (State, ExpandedKey);
for (i=1; i <Nr; i ++)
Round (State, ExpandedKey+Nb* i);
FinalRound (State, ExpandedKey+Nb*Nr)
}
Round (State, RoundKey)
{
ByteSub (State);
ShiftRow (State);
MixColumn (State);
AddRoundKey (State, RoundKey)
}
FinalRound (State, RoundKey)
{
ByteSub (State);
ShiftRow (State);
AddRoundKey (State, RoundKey)
}
1.5 密码说明
严格地说,AES 和 Rijndael 加密法并不完全一样(虽然在实际应用中二者可以互换),
因为 Rijndael 加密法可以支持更大范围的区块和密钥长度:AES 的区块长度固定为 128 比
特,密钥长度则可以是 128,192 或 256 比特;而 Rijndael 使用的密钥和区块长度可以是 32
位的整数倍,以 128 位为下限,256 比特为上限。加密过程中使用的密钥是由 Rijndael 密钥
生成方案产生。
大多数 AES 计算是在一个特别的有限域完成的。
AES 加密过程是在一个 4×4 的字节矩阵上运作,这个矩阵又称为“状态(state)”,其
初值就是一个明文区块(矩阵中一个元素大小就是明文区块中的一个 Byte)。(Rijndael
加密法因支持更大的区块,其矩阵行数可视情况增加)加密时,各轮 AES 加密循环(除最
后一轮外)均包含 4 个步骤:
AddRoundKey — 矩阵中的每一个字节都与该次轮秘钥(round key)做 XOR 运算;每
个子密钥由密钥生成方案产生。
SubBytes — 通过个非线性的替换函数,用查找表的方式把每个字节替换成对应的字节。
ShiftRows — 将矩阵中的每个横列进行循环式移位。
MixColumns — 为了充分混合矩阵中各个直行的操作。这个步骤使用线性转换来混合
每列的四个字节。
最后一个加密循环中省略 MixColumns 步骤,而以另一个 AddRoundKey 取代。