AES与基于AES的CMAC祥解.docx

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

152****6621 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

认证主体李**

1亿VIP精品文档

相关文档

相关课程推荐