AES-CMAC实验报告--信息与通信安全

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1本科实验报告课程名称:信息与通信安全姓名:选择课题:C/C++实现加解密算法及其应用(实验一)系:信电系专业:信息与通信工程学号:指导教师:年月日2目录1.实验内容与要求.......................................................................................................................32.实验原理....................................................................................................................................32.1AES原理..........................................................................................................................32.1.1AES总体结构.......................................................................................................32.1.2AES详细结构.......................................................................................................41.1CMAC原理................................................................................................................72.实验环境...........................................................................................................................94.代码实现...............................................................................................................................94.1字节代替变换.................................................................................................................94.2行移位变换..................................................................................................................114.3列混淆变换...................................................................................................................144.4轮密钥加......................................................................................................................174.5AES的加密与解密的实现............................................................................................224.6CMAC代码实现............................................................................................................235.思考题...................................................................................................................................276.心得体会...............................................................................................................................27附录(完整程序).....................................................................................................................2831.实验内容与要求(1).复习AES原理。(2).用C/C++编写AES算法并调试通过。(3).复习CMAC原理。(4).在实现AES基础上,用C/C++编写CMAC算法并调试通过。(5).回答下列思考题。AES解密算法和AES的逆算法之间有什么不同?CMAC与HMAC相比,有什么优点?2.实验原理2.1AES原理2.1.1AES总体结构下图展示了AES加密过程的总体结构。明文分组长度为128位即16字节密钥长度可以为16,24或32字节(在本次设计中选择16字节)。加密和解密算法是输入是一个128位的分组。在FIPSPUB197中,这个分组被描述为4*4的字节方阵。这个分组被复制到state数组,饼子啊加密或解密的各个阶段被修改。同样,密钥也被描述为字节的方阵,并被扩展为44字的密钥字序列。密码由N轮组成,其中轮数依赖于密钥长度,16字节密钥是10轮,前N-1轮由4个不同的变换组成:字节代替,行位移,列混淆,轮密钥加。最后一轮包含三个变换,而在第一轮的前面有一个起始的单变换(轮密钥加),可视为第0轮。每一个变换输入一个活多个4*4的矩阵,并输出一个4*4的矩阵,最后一轮输出为密文。同样,密钥扩展函数为N+1轮密钥,它们是互不相同的4*4矩阵。每一个轮密钥作为每轮的轮密钥加变换的一种输入。42.1.2AES详细结构1)AES算法未使用Feisel结构,而是在每一轮都使用代替和混淆将整个数据分组作为一个单一的矩阵处理。2)输入的密钥被扩展为44个32位字所组成的数组w[i],每轮由四个不同的字作为该轮的轮密钥。3)由四个不同的阶段组成,包括一个置换和三个代替。字节代替:用一个S盒完成分组的字节到字节的代替。行位移:一个简单的置换。列混淆:利用GF(2^8)上的算术特性的一个代替。轮密钥加:当前分组和扩展秘钥的一部分进行按位异或。(一)字节代替变换5如上图,字节代替变换是一个简单的查表操作。AES定义了一个S盒,它由16*16个字节组成的矩阵,包含了8位所能表示的256个数的一个置换。State中的每个字节按照如下的方式映射为一个新的字节,把改字节的搞4位作为行值,低四位作为列值,以这些行列值作为索引从S盒的对应位置取出元素作为输出。而其逆向操作则是有对应的逆S盒可进行查表。(二)行移位变换如上图,其正向行移位变换中,state的第一行保持不变,把state的第二行循环左移一个字节,state的第三行循环左移两个字节,state的第四行循环左移四个字节。例如:逆向行移位变换将state中的后三行执行相反方向的一位操作即可。(三)列混淆变换如上图,列混淆的正向变换是对每列单独进行操作。每列中的每个字节被映射为一个新值,此值由该列中的4个字通过函数变换得到。这个变换可有下面基于state的矩阵乘法表示:6乘积矩阵中的每个元素军事一行和一列中对应元素的乘积之和。这里的乘法和假发都是定义在GF(2^n)上的。状态中单列的列混淆变换可表示为:其中一个例子如下:(四)轮密钥加变换如上图,在轮密钥加变换中,128位的state按位与128位的轮秘钥XOR。该操作可以视为state的一列中的四个字节与轮秘钥的一个字进行列间的操作,例如:(五)AES密钥扩展AES密钥扩展算法的输入值是一个4个字,输出值是一个由44个字组成的移位线性数组。输入密钥字节被复制到扩展密钥数组的前4个字。然后每次用四个字填充扩展密钥数组余下的部分。在扩展数组中,每一个新增的字w[i]的值依赖于w[i-1]和w[i-4]。在47个情形中,三个使用了异或。对w数组中下标为4的倍数的的元素采用了更复杂的函数来计算:(1)字循环的功能时使一个字中的四个字节的循环左移一个字节,即将输入字[B0,B1,B2,B3]变成为[B1,B2,B3,B0].(2)字代替利用S盒对输入字中的每个字节进行字节代替。(3)步骤1和步骤2的结果再与轮常量Rcon[j]相异或。1.1CMAC原理基于密码的消息认证码(CMAC)对于AES,3DES适用,它使用三个密钥:一个密钥长为K,用在密文分组链接的每一步,两个长度为n的密钥,其中k是密钥长度,n为密文分组长度。并且两个n位的密钥可以从加密密钥导出,而不是单独提供。首先,当消息长度是分组长度b的n倍时,我们考虑CMAC的运算情况。对AES,b=128,对于3DES,b=64.这个消息被划分为n组,(M1,M2…,Mn)。算法使用了k比特的加密密钥K和n比特的常数K1。对于AES,密钥长度k为128,192和256比特,对于3DES,密钥长度为112或168比特。CMAC按如下方式计算:8)(])[,(...])[,(])[,(),(1123312211nTlennNnCMSBTKCMKECCMKECCMKECMKEC其中:T——消息认证码,也称为tagTlen——T的比特长度MSBs(X)——比特串X最左边的s位如果消息不是密文分组长度的整数倍,则最后分组的右边(低有效位)填充一个1和若干个0,使得最后的分组长度为b。除了使用一个不同的n比特密钥K2代替K1外,与前面所述一样进行CMAC运算。两个n比特的密钥由k比特的加密密钥按如下方式导出:xxLXLKxLKKELn)()0,(221其中乘法(·)是在域GF(2^n)内进行,X和X^2是该域的一次和二次多项式。因此X的二元表示为n-2个0,后跟10,X^2的二元表示为n-3个0,后跟100。对于AES,已获批准的分组长度为X^128+X^7+X^2+X+2.。当消息长度是分组长度的整数倍:当消息长度不是分组长度的整数倍:92.实验环境装有C_Free的笔记本4.代码实现首先是实现AES的各个子模块,在验证其正确以后,再进行CMAC的认证算法的实现。4.1字节代替变换#includestdio.hstaticunsignedcharSbox[256]={//AES的S盒0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5,0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76,0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0,0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0,0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc,0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15,0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a,0x07,0x12,0x80,0xe2,0xeb,0x27,0x

1 / 40
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功