AES-128与CMAC实现及实验报告
版权申诉
81 浏览量
更新于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消息认证码的工作流程,以及它们在实际应用中的重要性。
107 浏览量
2339 浏览量
2760 浏览量
410 浏览量
145 浏览量
371 浏览量
207 浏览量
2024-10-26 上传
329 浏览量
若♡
- 粉丝: 6459
- 资源: 1万+
最新资源
- LucenceInActionCH
- 动态视位模型及其参数估计
- 计算机等级考试三级网络题集
- [70-549] 70-549 MCPD Training Kit.pdf
- ActionScript3.0 Design Patterns
- 关于交换网络故障的全面分析排除实战
- D 语言编程参考手册 2.0
- javascript语言精髓与编程实践
- 画pcb图的经验所得
- 分治分治法及其应用,具体说明如何进行分治
- 03.漫谈兼容内核之三:关于kernel-win32的文件操作
- 漫谈兼容内核之二:关于kernel-win32的对象管理
- C#完全手册 C#入门教程
- 漫谈兼容内核之一:ReactOS怎样实现系统调用
- JSP技术的详细简介
- Windows驱动开发笔记