网络安全导论大作业
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
网络安全导论
课程考核大作业
题目:AES高级加密标准
网络攻击图研究
院(系):物联网工程学院
专业: 计算机科学与技术班级: 计科1101班
学号: 0304110106
姓名: 冯小龙
成绩:
目录
1.AES高级加密标准 (3)
1.1 AES算法基本原理 (3)
1.1.1 AddRoundKey步骤 (3)
1.1.2 SubBytes步骤 (4)
1.1.3 ShiftRows步骤 (4)
1.1.4 MixColumns步骤 (5)
1.2 AES算法流程图 (6)
1.3 测试结果 (7)
1.4 程序清单 (7)
1.5 设计心得 (17)
2. 网络攻击图研究 (18)
2.1 基本概念 (18)
2.2 研究现状 (18)
2.2.1、针对攻击模型的研究 (19)
2.2.2、攻击分类研究 (19)
2.2.3、具体攻击原理的研究 (19)
2.2.3.1认证协议攻击研究 (19)
2.2.3.2缓冲溢出研究 (19)
2.2.3.3木马技术研究 (20)
2.2.4、攻击发现技术研究 (20)
2.3 面临的问题 (20)
2.3.1、可扩展性 (20)
2.3.2、漏洞细节 (20)
2.3.3、可达性计算 (20)
2.3.4、攻击图分析 (21)
2.4 发展趋势 (21)
2.5 参考文献 (21)
1.A ES高级加密标准
密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。
1.1 AES算法基本原理
AES加密过程是在一个4×4的字节矩阵上运作,这个矩阵又称为“体(state)”,其初值就是一个明文区块(矩阵中一个元素大小就是明文区块中的一个Byte)。(Rijndael加密法因支持更大的区块,其矩阵行数可视情况增加)加密时,各轮AES加密循环(除最后一轮外)均包含4个步骤:
1.AddRoundKey:矩阵中的每一个字节都与该次回合金钥(round key)做XOR运算;
每个子密钥由密钥生成方案产生。
2.SubBytes:通过个非线性的替换函数,用查找表的方式把每个字节替换成对应的字节。
3.ShiftRows :将矩阵中的每个横列进行循环式移位。
4.MixColumns :为了充分混合矩阵中各个直行的操作。这个步骤使用线性转换来混
合每列的四个字节。
最后一个加密循环中省略MixColumns步骤,而以另一个AddRoundKey取代。
1.1.1 AddRoundKey步骤
AddRoundKey步骤中,回合密钥将会与原矩阵合并。在每次的加密循环中,都会由主密钥产生一把回合密钥(通过Rijndael密钥生成方案产生),这把密钥大小会跟原矩阵一样,以与原矩阵中每个对应的字节作异或(⊕)加法。
1.1.2 SubBytes步骤
在SubBytes步骤中,矩阵中的各字节通过一个8位的S-box进行转换。这个步骤提供了加密法非线性的变换能力。S-box与GF(28)上的乘法反元素有关,已知具有良好的非线性特性。为了避免简单代数性质的攻击,S-box结合了乘法反元素及一个可逆的仿射变换矩阵建构而成。此外在建构S-box时,刻意避开了固定点与反固定点,即以S-box替换字节的结果会相当于错排的结果。此条目有针对S-box的详细描述:Rijndael S-box
1.1.3 ShiftRows步骤
ShiftRows是针对矩阵的每一个横列操作的步骤。在此步骤中,每一行都向左循环位移某个偏移量。在AES中(区块大小128位),第一行维持不变,第二行里的每个字节都向左循环移动一格。同理,第三行及第四行向左循环位移的偏移量就分别是2和3。128位和192比特的区块在此步骤的循环位移的模式相同。经过ShiftRows之后,矩阵中每一竖列,都是由输入矩阵中的每个不同列中的元素组成。Rijndael算法的版本中,偏移量和AES有少许不同;对于长度256比特的区块,第一行仍然维持不变,第二行、第三行、第四行的偏移量分别是1字节、3字节、4位组。除此之外,ShiftRows操作步骤在Rijndael和AES中完全相同。
1.1.4 MixColumns步骤
在MixColumns步骤,每一直行的四个字节通过线性变换互相结合。每一直行的四个元素分别当作1 , x , x^2 , x^3的系数,合并即为GF(28)中的一个多项式,接着将此多项式和一个固定的多项式c(x) = 3x^3 + x^2 + x + 2在modulo x^4+1下相乘。此步骤亦可视为Rijndael 有限域之下的矩阵乘法。MixColumns函数接受4个字节的输入,输出4个字节,每一个输入的字节都会对输出的四个字节造成影响。因此ShiftRows和MixColumns两步骤为这个密码系统提供了扩散性。
矩阵表示形式:
1.2 AES算法流程图加密流程图如下:
算法流程图如下:
1.3 测试结果
测试结果如下:
1.4 程序清单
#include
#include
#include
using namespace std;
//构造AES类
class AES
{
public:
AES(unsigned char* key); //AES类中的构造函数,给类传进密钥
virtual ~AES(); //释放类
unsigned char* Cipher(unsigned char* input); //先将输入的明文按列序组合成4*4的矩阵,直接与第0组密钥(即输入的密钥)相加(异或),作为轮加密的输入
unsigned char* InvCipher(unsigned char* input);//对加密后的函数逆字节替代,逆行移位,逆列混淆,得到解密函数的输入字符串
void* Cipher(void* input, int length=0); //加密函数
void* InvCipher(void* input, int length); //解密函数
private:
unsigned char Sbox[256]; //仿射变换置换表