密码学实验报告(AES,RSA)

  • 格式:doc
  • 大小:357.00 KB
  • 文档页数:18

下载文档原格式

  / 18
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

华北电力大学

实验报告|

|

实验名称现代密码学课程设计

课程名称现代密码学

|

|

专业班级:学生姓名:

学号:成绩:

指导教师:实验日期:

[综合实验一] AES-128加密算法实现 一、实验目的及要求

(1)用C++实现;

(2)具有16字节的加密演示;

(3)完成4种工作模式下的文件加密与解密:ECB, CBC, CFB,OFB.

二、所用仪器、设备

计算机、Visual C++软件。

三. 实验原理

3.1、设计综述

AES 中的操作均是以字节作为基础的,用到的变量也都是以字节为基础。State 可以用4×4的矩阵表示。AES 算法结构对加密和解密的操作,算法由轮密钥开始,并用Nr 表示对一个数据分组加密的轮数(加密轮数与密钥长度的关系如表2所示)。AES 算法的主循环State 矩阵执行1 r N 轮迭代运算,每轮都包括所有 4个阶段的代换,分别是在规范中被称为 SubBytes(字节替换)、ShiftRows(行位移变换)、MixColumns(列混合变换) 和AddRoundKey ,(由于外部输入的加密密钥K 长度有限,所以在算法中要用一个密钥扩展程序(Keyexpansion)把外部密钥 K 扩展成更长的比特串,以生成各轮的加密和解密密钥。最后执行只包括 3个阶段 (省略 MixColumns 变换)的最后一轮运算。

表2 AES 参数

比特。

3.2、字节代替(SubBytes )

AES 定义了一个S 盒,State 中每个字节按照如下方式映射为一个新的字节:把该字节的高4位作为行值,低4位作为列值,然后取出S 盒中对应行和列的元素作为输出。例如,十六进制数{84}。对应S 盒的行是8列是4,S 盒中该位置对应的值是{5F}。

S 盒是一个由16x16字节组成的矩阵,包含了8位值所能表达的256种可能的变换。S 盒按照以下方式构造:

(1) 逐行按照升序排列的字节值初始化S 盒。第一行是{00},{01},{02},…,{OF};

第二行是{10},{l1},…,{1F}等。在行X 和列Y 的字节值是{xy}。

(2) 把S 盒中的每个字节映射为它在有限域GF(k 2)中的逆。GF 代表伽罗瓦域,GF(82)

由一组从0x00到0xff 的256个值组成,加上加法和乘法。

)

1(]

[2)2(3488++++=

x x x x X Z GF 。{00}被映射为它自身{00}。

(3) 把S 盒中的每个字节记成),,,,,,,,(012345678b b b b b b b b b 。对S 盒中每个字节的每位

做如下变换:

i i i i i i c b b b b b i b ⊕⊕⊕⊕⊕='++++8mod )7(8mod )6(8mod )5(8mod )4(

上式中i c 是指值为{63}字节C 第i 位,即)01100011(),,,,,,,,(012345678=c c c c c c c c c 。符号(')表示更新后的变量的值。AES 用以下的矩阵方式描述了这个变换:

⎥⎥

⎥⎥

⎥⎦⎤

⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡+⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢

⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡0110001111111000011111000011111000011111100011111100011111100011111100017654321076543210b b b b b b b b b b b b b b b b

最后完成的效果如图:

3.3、行移位(ShiftRows)

一.State的第一行字节保持不变,State的第二行字节循环左移一个字节,State 的第三行字节循环左移两个字节,State的第四行循环左移三个字节。

行移位左偏移量:

变化如图2所示。

3.4、列混合(MixColumn)

一.列混合变换是一个替代操作,是AES 最具技巧性的部分。它只在AES 的第0,1,…,Nr 一1轮中使用,在第N r 轮中不使用该变换。乘积矩阵中的每个元素都是一行和一列对应元素的乘积之和。在MixColumns 变换中,乘法和加法都是定义在GF(82)上的。State 的每一列 (j i b ,) 1=0,…,3;J=0,…,b L 被理解为 GF(82)上的多项式,该多项式与常数多项式012233)(a x a x a x a x a +++=相乘并模1)(4+=x x M 约化。

这个运算需要做GF(82)上的乘法。但由于所乘的因子是三个固定的元素02、03、01,所以这些乘法运算仍然是比较简单的(注意到乘法运算所使用的模多项式为

1)(348++++=x x x x x m )。设一个字节为b=(b7b6b5b4b3b2b1b0),则

b ב01’=b;

b ב02’=(b6b5b4b3b2b1b00)+(000b7b70b7b7); b ב03’=bב01’+b×’02’。

(请注意,加法为取模2的加法,即逐比特异或) 写成矩阵形式为:

00112233b a 02

030101b a 01020301b 01010203a 03

010102b a ⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥

⎢⎥⎢⎥⎢⎥

⎣⎦⎣⎦⎣⎦

最后完成的效果如图: