AES-128与CMAC实现及实验报告
版权申诉
27 浏览量
更新于2024-06-26
收藏 1.26MB PDF 举报
"AES-与基于AES-的CMAC_New.pdf"
本文主要介绍的是AES(高级加密标准)及其在CMAC(Cipher-based Message Authentication Code,基于密码的完整性检验码)中的应用。AES是一种广泛使用的对称加密算法,而CMAC是基于AES的一种消息认证码,用于确保数据的完整性和来源的真实性。
### AES 加密原理
AES,全称为Advanced Encryption Standard,是一种块密码,其设计基于替换和置换的操作,以确保密码的安全性。AES的核心特点是它的分组长度固定为128位,同时支持三种不同的密钥长度:128位(AES-128)、192位(AES-192)和256位(AES-256)。在这个实验中,采用的是AES-128。
**1.1 AES加密流程**
AES加密过程分为10轮,每轮包含四个步骤:
1. **字节代替(SubBytes)**:使用一个预定义的8x8位的S盒(S-box),将状态矩阵中的每个字节进行非线性替换,增强加密的复杂度。
2. **行移位(ShiftRows)**:对状态矩阵的行进行循环移位,第0行不移动,第1行左移1个字节,第2行左移2个字节,第3行左移3个字节,这增加了数据的混淆性。
3. **列混淆(MixColumns)**:通过线性变换作用于状态矩阵的列,使得相邻的列之间相互影响,进一步增加密码的强度。
4. **轮密钥加(AddRoundKey)**:将当前轮的轮密钥与状态矩阵进行异或操作,轮密钥是由主密钥通过密钥扩展得到的。
最后一轮(第10轮)省略了列混淆步骤。
### CMAC 原理
CMAC是基于AES的一种消息认证码算法,用于验证数据的完整性。CMAC的生成过程中,首先需要一个密钥K和一个消息M。基本步骤如下:
1. **密钥扩展**:使用AES的密钥扩展算法将主密钥扩展成一系列轮密钥。
2. **初始化向量处理**:取一个特定的初始向量IV,与密钥K进行AES加密,生成一个子密钥K1。
3. **消息分块**:将消息M分成多个128位的数据块Mi。
4. **计算MAC**:对于第一个数据块M1,使用K1进行AES加密,得到中间结果C1;对于后续的数据块Mi(i>1),先对前一块的输出Ci-1和Mi异或,再用K1加密,得到Ci。最后的数据块处理类似,但可能会进行填充以满足128位长度。
5. **生成CMAC**:将最后一个加密后的块Ci(可能需要截取128位的部分)作为CMAC值。
CMAC的优势在于它既能提供数据完整性,又可验证消息的来源,适用于保护通信中的数据免受篡改。
### 实验任务
实验旨在让学生熟悉AES和CMAC的原理,并通过编程实现。实验者需要完成以下步骤:
1. 复习AES的基本原理。
2. 使用C/C++语言编写AES算法的实现,并进行调试。
3. 学习CMAC的工作机制。
4. 在已经实现的AES基础上,用C/C++编写CMAC算法,并完成调试。
通过这样的实验,学生能够深入理解AES加密算法和CMAC消息认证码的工作流程,以及它们在实际应用中的重要性。
2022-09-23 上传
2022-07-14 上传
2022-09-20 上传
2019-08-12 上传
2023-07-14 上传
若♡
- 粉丝: 6348
- 资源: 1万+
最新资源
- 探索数据转换实验平台在设备装置中的应用
- 使用git-log-to-tikz.py将Git日志转换为TIKZ图形
- 小栗子源码2.9.3版本发布
- 使用Tinder-Hack-Client实现Tinder API交互
- Android Studio新模板:个性化Material Design导航抽屉
- React API分页模块:数据获取与页面管理
- C语言实现顺序表的动态分配方法
- 光催化分解水产氢固溶体催化剂制备技术揭秘
- VS2013环境下tinyxml库的32位与64位编译指南
- 网易云歌词情感分析系统实现与架构
- React应用展示GitHub用户详细信息及项目分析
- LayUI2.1.6帮助文档API功能详解
- 全栈开发实现的chatgpt应用可打包小程序/H5/App
- C++实现顺序表的动态内存分配技术
- Java制作水果格斗游戏:策略与随机性的结合
- 基于若依框架的后台管理系统开发实例解析