黑龙江大学
密码学实验报告
专业:网络工程
姓名:刘
毅
学号: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 实验环境