AES-128与CMAC实现及实验报告

版权申诉
0 下载量 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消息认证码的工作流程,以及它们在实际应用中的重要性。