logo资料库

AES实验报告.docx

第1页 / 共33页
第2页 / 共33页
第3页 / 共33页
第4页 / 共33页
第5页 / 共33页
第6页 / 共33页
第7页 / 共33页
第8页 / 共33页
资料共33页,剩余部分请下载后查看
黑龙江大学 密码学实验报告 专业:网络工程 姓名:刘 毅 学号:20165113
实验一:DES 加密算法 1. 实验目的  了解 AES 算法的优缺点及应用场合  理解并掌握 AES 算法的原理  编写 AES 加解密算法程序 2. 实验内容与要求  解释 AES 加密算法原理  写出 AES 加密实验代码  AES 加密实验环境和效果图 3. 实验基本原理 3.1 AES 算法简介 高级加密标准(英语:Advanced Encryption Standard,缩写:AES), 在密码学中又称 Rijndael 加密法,是美国联邦政府采用的一种区块加 密标准。这个标准用来替代原先的 DES,已经被多方分析且广为全世 界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技 术研究院(NIST)于 2001 年 11 月 26 日发布于 FIPS PUB 197,并在 2002 年 5 月 26 日成为有效的标准。2006 年,高级加密标准已然成为 对称密钥加密中最流行的算法之一。 3.2 算法概述 AES 中的操作均是以字节作为基础的,用到的变量也都是以字 节为基础。State 可以用 4×4 的矩阵表示。 AES 算法结构对加密和
解密的操作,算法由轮密钥开始,并用 Nr 表示对一个数据分组加密 的轮数 (加密轮数与密钥长度的关系如表 2 所示)。AES 算法的主循 环 State 矩阵执行 Nr 1 轮迭代运算,每轮都包括所有 4 个阶段的代换, 分别是在规范中被称为 SubBytes(字节替换 ) 、ShiftRows( 行位移变 换 ) 、MixColumns( 列混合变换 ) 和 AddRoundKey,(由于外部输 入的加密密钥 K 长度有限,所以在算法中要用一个密钥扩展程序 (Keyexpansion)把外部密钥 K 扩展成更长的比特串,以生成各轮的加 密和解密密钥。 最后执行只包括 3 个阶段 (省略 MixColumns 变换)的最后 一轮运算。 密钥长度(bits) 明文分组长度(bits) 轮数 每轮密钥长度(bits) 扩展密钥长度(bytes) 128 128 10 128 176 192 128 12 128 206 256 128 14 128 240 基本要求按标准分组, 以 128 比特为分组大小。 所以轮数为 10 轮,密钥长度也为 128 比特。 3.3 字节代替( 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( 2k )中的逆。GF 代 表伽罗瓦域,GF( 28 )由一组从 0x00 到 0xff 的 256 个值组成,加上 加法和乘法。{00}被映射为它自身{00} 。 (3) 把 S 盒中的每个字节记成 (b8 , b7 , b6 , b5 , b4 , b3 , b2, b1 , b0 ) 。对 S 盒中每个字节的每位做如下变换: 上 式 中 Ci 是 指 值 为 {63} 字 节 C 第 i 位 , 即 (C8 ,C7 ,C6 ,C5 ,C4 ,C3 ,C2 ,C1 ,C0 )= (01100011) 符号( ' )表示更新后的变量的值。AES 用以下的矩阵方式描述了这个 变换:
最后完成的效果如图: 3.4 行移位(ShiftRows) State 的第一行字节保持不变,State 的第二行字节循环左移一个 字节,State 的第三行字节循环左移两个字节, State 的第四行循环 左移三个字节。行移位左偏移量:
变化如图所示。 3.5 列混合(MixColumn) AES 的第 0,1,⋯, 列混合变换是一个替代操作, 是 AES 最具技巧性的部分。它只在 Nr 一 1 轮中使用,在第 N r 轮中不使用该变换。乘积矩阵中的每个 元素都是一行和一列 对应元素的乘积之和。在 MixColumns 变换中,乘法和加法都是定义 在 GF( 28 ) 上的。State 的每一列 ( bi, j ) 1=0 ,⋯,3 ;J=0,⋯, Lb 被理解为 GF( 28) 上的 多项式。
这个运算需要做 GF(28 )上的乘法。但由于所乘的因子是三个固 定的元素 02、03、01, 所 以 这 些 乘 法 运 算 仍 然 是 比 较 简 单 的 。 设 一 个 字 节 为 b=(b7b6b5b4b3b2b1b0),则 3.6 轮密钥加( AddRoundKey) Add RoundKey 称为轮密钥加变换, 128 位的 State 按位与 128 位 的密钥 XOR: (b0 j ,b1 j ,b2 j , b3 j ) (b0 j ,b1 j ,b2 j ,b3 j ) (k0 j ,k1 j ,k2 j ,k3 j ) 对 j=0,⋯ ,L-1 轮密钥加变换很简单,却影响了 State 中的每一位。密
钥扩展的复杂性和 AES 的其他阶段运算的复杂性,却确保了该算法 的安全性。 最后完成的效果如图: 3.7 逆字节替换 通过逆 S 盒的映射变换得到。 3.8 逆行移位(InvShiftRow) 3.9 逆列混淆 4 实验说明 4.1 实验环境
分享到:
收藏