- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
本科实验报告
课程名称: 信息与通信安全
姓 名: 邓敏
实 验: 实验一
系: 信电系
专 业: 信息与通信工程
学 号: 3110100978
指导教师: 谢磊
年 月 日
AES 与基于 AES 的 CMAC
一、实验目的
1、熟悉 AES 加解密过程,掌握其算法实现;
2、熟悉 CMAC 生成过程,掌握其算法实现。
二、实验任务
1、复习 AES 原理;
2、用 C/C++ 编写 AES 算法并调试通过;
3、复习 CMAC 原理;
4、在实现 AES 基础上,用 C/C++ 编写 CMAC 算法并调试通过。
三、实验原理
1.AES 原理
AES 加解密过程如下图所示, 明文分组的长度为 128 位即 16 字节,秘钥长度可以为 16,24
或 32 字节 (128,182 或 256 位 )。根据秘钥的长度, 算法被称为 AES-128 、AES-192 、或 AES-256, 本次实验采用 AES-128 。
1.1AES 加密过程
AES 明文输入为一个
128 位分组,在代码实现中被描述为
4x4 的字节方阵,一般称其
为 state 数组,并且按照如下方式填入到数组当中,原始密钥也为
128 为分组,并按同样的
方式填入数组。
in0
in4
in8
in12
k0
k4
k8
k12
in1
in5
in9
in13
k1
k5
k9
k13
in2
in6
in10
in14
k2
k6
k10
k14
in3
in7
in11
in15
k3
k7
k11
k15
AES 加密过程共进行十轮,前九轮由四个步骤组成,四个步骤依次为字节代替
(SubBytes) ,行移位 (ShiftRows) ,列混淆 (MixColumns) ,轮密钥加 (AddRoundKey) ,第十轮
依次进行除列混淆的三个步骤。
1.1.1 字节代替
AES 定义了一个 S 盒,它是由 16x16 个字节组成的矩阵,包含了 8 位所能表示的 256
个数的一个置换, 字节代替将输入字节的高四位作为行值, 低四位作为列值, 以这些行列值
作为索引从 S 盒的对应位置取出元素作为输入。
1.1.2 行移位变换
行移位变换完成基于行的循环移位操作, state 的第 0 行不动,第 1 行循环左移 1 个字
节,第 2 行循环左移 2 个字节,第 3 行循环左移 3 个字节。
1.1.3 列混淆
列混淆变换的正向列混淆变换对每列独立地进行操作。 每列中的每个字节被映射为一个
新值,此值由该列中的四个字节通过函数变换得到,这个变换可由下面基于 state 的矩阵乘
法表示。
状态中单列的列混淆变换可表示为
s0', j
(2 * s0 , j ) (3 * s1, j ) s2, j
s3, j
s1', j
s0 , j
(2 * s1, j ) (3 * s2 , j ) s3, j
s2', j
s0 , j
s1, j (2* s2, j ) (3 * s3, j )
s3', j
(3 * s0 , j ) s1, j s2, j (2 * s3, j )
1.1.4 轮密钥加
轮密钥加变换用于将输入或中间态
S 的每一列与一个密钥字
W[i] 进行按位异或, 其中,
W[i] 由原始密钥通过密钥扩展算法产生。
1.2AES 解密过程
AES 解密过程为加密过程的逆,同为十轮,四个步骤按一定顺序执行,四个步骤分别
为逆向字节替代 (InvSubBytes) ,逆向行移位 (InvShiftRows) ,逆向列混淆 (InvMixColumns) ,轮密钥加 (AddRoundKey) ,其中轮密钥加与加密过程中的步骤相同。
1.2.1 逆向字节替代
AES 定义了一个逆 S 盒,其替代方法与加密过程相同
1.2.2 逆向行移位
逆向行移位与行移位变换相反,逆行移位变换将态
位操作,即第 0 行保持不变,第 1 行向右移 1 个字节,第
移 3 个字节。
1.2.2 逆向列混淆
State 的后三行按相反的方向进行移
2 行向右移 2 个字节,第 3 行向右
逆列混淆变换的处理方法与列混淆变换类似, 每一列都通过与一个固定的多项相乘进行变换。 写为矩阵乘法的形式,逆列混淆变换按以下方式对列进行变换:
1.3AES 秘钥扩展
AES 加密解密过程中,每一轮都需要一个与输入分组具有相同长度的扩展密钥 W[i]
参与。由于外部输入的加密密钥长度有限 ,所以在算法中要用一个密钥扩展程序把外部密钥
扩展成更长的比特串 ,以生成各轮的加密和解密密钥。其一轮过程如下图所示,一共需要进
行十次,由原密钥扩展出 10 个密钥,分别用于每轮加解密。
的
其中
文档评论(0)