密码学课程设计.doc
上传人:yy****24 上传时间:2024-09-09 格式:DOC 页数:15 大小:235KB 金币:14 举报 版权申诉
预览加载中,请您耐心等待几秒...

密码学课程设计.doc

密码学课程设计.doc

预览

免费试读已结束,剩余 5 页请下载文档后查看

14 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

密码学课程设计学号:班级:姓名:指导教师2010年7月4日AES加解密算法一.原理AES是美国高级加密标准算法,将在未来几十年里代替DES在各个领域中得到广泛应用。随着对称密码的发展,DES数据加密标准算法由于密钥长度较小(56位),已经不适应当今分布式开放网络对数据加密安全性的要求,因此1997年NIST公开征集新的数据加密标准,即AES[1]。经过三轮的筛选,比利时JoanDaeman和VincentRijmen提交的Rijndael算法被提议为AES的最终算法。此算法将成为美国新的数据加密标准而被广泛应用在各个领域中。尽管人们对AES还有不同的看法,但总体来说,AES作为新一代的数据加密标准汇聚了强安全性、高性能、高效率、易用和灵活等优点。AES设计有三个密钥长度:128,192,256位,相对而言,AES的128密钥比DES的56密钥强1021倍[2]。AES算法主要包括三个方面:轮变化、圈数和密钥扩展。本文以128为例,介绍算法的基本原理;结合AVR汇编语言,实现高级数据加密算法AES。AES加密、解密算法原理AES是分组密钥,算法输入128位数据,密钥长度也是128位。用Nr表示对一个数据分组加密的轮数(加密轮数与密钥长度的关系如表1所列)。每一轮都需要一个与输入分组具有相同长度的扩展密钥Expandedkey(i)的参与。由于外部输入的加密密钥K长度有限,所以在算法中要用一个密钥扩展程序(Keyexpansion)把外部密钥K扩展成更长的比特串,以生成各轮的加密和解密密钥。1圈变化AES每一个圈变换由以下三个层组成:非线性层——进行Subbyte变换;线行混合层——进行ShiftRow和MixColumn运算;密钥加层——进行AddRoundKey运算。①Subbyte变换是作用在状态中每个字节上的一种非线性字节转换,可以通过计算出来的S盒进行映射。Schange:ldizh,$01;将指针指向S盒的首地址movzl,r2;将要查找的数据作为指针低地址ldtemp,z+;取出这个对应的数据movr2,temp;交换数据完成查表…ret②ShiftRow是一个字节换位。它将状态中的行按照不同的偏移量进行循环移位,而这个偏移量也是根据Nb的不同而选择的[3]。shiftrow:;这是一个字节换位的子程序movtemp,r3;因为是4×4movr3,r7;r2r6r10r14r2r6r10r14movr7,r11;r3r7r11r15---r7r11r15r3movr11,r15;r4r8r12r17r12r17r4r8movr15,temp;r5r9r13r18r18r5r9r13movtemp,r4movtemp1,r8movr4,r12movr8,r17movr12,tempmovr17,temp1movtemp,r18movr18,r13movr13,r9movr9,r5movr5,tempret③在MixColumn变换中,把状态中的每一列看作GF(28)上的多项式a(x)与固定多项式c(x)相乘的结果。b(x)=c(x)*a(x)的系数这样计算:*运算不是普通的乘法运算,而是特殊的运算,即b(x)=c(x)?a(x)(modx4+1)对于这个运算b0=02。a0+03。a1+a2+a3令xtime(a0)=02。a0其中,符号“。”表示模一个八次不可约多项式的同余乘法[3]。movtemp,a0;这是一个mixcolimn子程序rcallxtime;调用xtime程序mova0,tempmovtemp,a1rcallxtimeeora0,a1eora0,tempeora0,a2eora0,a3;完成b(x)的计算…xtime:;这是一个子程序lditemp1,$1blsltempbrcsnext1;如果最高位是1,则转移next:ret;否则什么也不变化next1:eortemp,temp1rjmpnext对于逆变化,其矩阵C要改变成相应的D,即b(x)=d(x)*a(x)。④密钥加层运算(addround)是将圈密钥状态中的对应字节按位“异或”。⑤根据线性变化的性质[1],解密运算是加密变化的逆变化。这里不再详细叙述。2轮变化对不同的分组长度,其对应的轮变化次数是不同的。3密钥扩展AES算法利用外部输入密钥K(密钥串的字数为Nk),通过密钥的扩展程序得到共计4(Nr+1)字的扩展密钥。它涉及如下三个模块:①位置变换(rotword)——把一个4字节的序列[A,B,C,D]变化成[B,C,D,A];②S盒变换(subword)