毕业实习报告-AES加密、解密算法原理及实现.doc

上传人:龙*** 文档编号:4220666 上传时间:2019-10-05 格式:DOC 页数:12 大小:114KB
下载 相关 举报
毕业实习报告-AES加密、解密算法原理及实现.doc_第1页
第1页 / 共12页
毕业实习报告-AES加密、解密算法原理及实现.doc_第2页
第2页 / 共12页
毕业实习报告-AES加密、解密算法原理及实现.doc_第3页
第3页 / 共12页
毕业实习报告-AES加密、解密算法原理及实现.doc_第4页
第4页 / 共12页
毕业实习报告-AES加密、解密算法原理及实现.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

1、毕业实习设计选题报告 指导老师: 学 院: 计算机科学与技术学院 专 业: 班 级: 姓 名: 学 号: AES 加密、解密算法原理及实现 摘要 AES 是美国高级加密标准算法,将在未来几十年里代替 DES 在各个领域中得到广泛应用。此 次实习在研究分析 AES 加密算法原理的基础上,着重说明算法的实现步骤,并结合 C 语言语 言完整地实现 AES 加密和解密。根据 AES 原理,提出几种列变化的优化算法,并根据实验结 果分析和比较它们的优缺点。 关键词 AES 算法 DES AVR 汇编语言 加密算法 解密算法 0.引言 随着对称密码的发展,DES 数据加密标准算法由于密钥长度较小(56 位

2、),已经不适应当 今分布式开放网络对数据加密安全性的要求,因此 1997 年 NIST 公开征集新的数据加密标准,即 AES1。经过三轮的筛选,比利时 Joan Daeman 和 Vincent Rijmen 提交的 Rijndael 算法被 提议为 AES 的最终算法。此算法将成为美国新的数据加密标准而被广泛应用在各个领域中。 尽管人们对 AES 还有不同的看法,但总体来说,AES 作为新一代的数据加密标准汇聚了强安全 性、高性能、高效率、易用和灵活等优点。AES 设计有三个密钥长度:128,192,256 位,相对 而言,AES 的 128 密钥比 DES 的 56 密钥强 1021 倍2

3、。AES 算法主要包括三个方面:轮变化、 圈数和密钥扩展。本文以 128 为例,介绍算法的基本原理;结合 AVR 汇编语言,实现高级数 据加密算法 AES 1. AES 加密、解密算法原理和 AVR 实现 原理: AES 是分组密钥,算法输入 128 位数据,密钥长度也是 128 位。用 Nr 表示对一个数据分组 加密的轮数(加密轮数与密钥长度的关系如表 1 所列) 。每一轮都需要一个与输入分组具有 相同长度的扩展密钥 Expandedkey(i)的参与。由于外部输入的加密密钥 K 长度有限,所以在 算法中要用一个密钥扩展程序(Keyexpansion)把外部密钥 K 扩展成更长的比特串,以生

4、成各 轮的加密和解密密钥。 对称密码算法根据对明文消息加密方式的不同可分为两大类,即分组密码和流密码。分组密码将消息 分为固定长度的分组,输出的密文分组通常与输入的明文分组长度相同。AES 算法属于分组密码算法,它的 输入分组、输出分组以及加/ 解密过程中的中间分组都是 128 比特。密钥的长度 K 为 128,192 或 256 比特。 用 Nk=4,6,8 代表密钥串的字数(1 字=32 比特),在本文编制的程序中由用户选定。用 Nr 表示对一个数据分 组加密的轮数(加密轮数与密钥长度的关系见表 1)。每一轮都需要一个和输入分组具有同样长度 (128 比特) 的扩展密钥 Ke 的参与。由于

5、外部输入的加密密钥 K 长度有限,所以在 AES 中要用一个密钥扩展程序 (KeyExpansion)把外部密钥 K 扩展成更长的比特串,以生成各轮的加密密钥。 1.1 圈变化 AES 每一个圈变换由以下三个层组成: 非线性层进行 Subbyte 变换; 线行混合层进行 ShiftRow 和 MixColumn 运算; 密钥加层进行 AddRoundKey 运算。 S 盒变换 SubBytes()对输入矩阵的任一个元素 A 做如下变换 SA:(1)一个元素 A 从 存储角度看都是一个八位的二进制数。算出前四位所代表的十六进制数 x 和后四位所代表的 十六进制数 y。如 A=11010100 时

6、,x=c,y=4。 (2)从 AES 算法给定的 S2Box(16 行 16 列的矩阵,其中每个元素为一个字节,具体的 S2Box 略)中找出 SA=Sx,y的值。如 A=11010100 时,SA=Sx,y=Sc,4=1c =00011101。或直接通过下面的公式将 A=b7b6b5b4b3b2b1b0 变为 SA=b7b6b5b 4b3b2b1b0。bi=bib(i+4)mod8b(i+5)mod8b(i+6)mod8b(i+6)mod8Ci 这里 c=(c0,c1,c2,c3,c4,c5,c6,c7) =(0,1,1,0,0,0,1,1) Subbyte 变换是作用在状态中每个字节上的一

7、种非线性字节转换,可以通过计算出 来的 S 盒进行映射。 Schange: ldi zh,01;将指针指向 S 盒的首地址 mov zl,r2;将要查找的数据作为指针低地址 ldtemp,z+;取出这个对应的数据 mov r2,temp;交换数据完成查表 ret ShiftRow 是一个字节换位。它将状态中的行按照不同的偏移量进行循环移位,而 这个偏移量也是根据 Nb 的不同而选择的3。 shiftrow:;这是一个字节换位的子程序 mov temp,r3;因为是 44 mov r3,r7; r2 r6 r10 r14 r2 r6 r10 r14 mov r7,r11; r3 r7 r11 r

8、15-r7 r11 r15 r3 mov r11,r15; r4 r8 r12 r17 r12 r17 r4 r8 mov r15,temp; r5 r9 r13 r18 r18 r5 r9 r13 mov temp,r4 mov temp1,r8 mov r4,r12 mov r8,r17 mov r12,temp mov r17,temp1 mov temp,r18 mov r18,r13 mov r13,r9 mov r9,r5 mov r5,temp ret 在 MixColumn 变换中,把状态中的每一列看作 GF(28)上的多项式 a(x)与固定多项式 c(x)相乘的结果。b(x)

9、=c(x)*a(x)的系数这样计算:*运算不是普通的乘法运算,而是特殊的 运算,即 b(x)=c(x)?a(x)(mod x4+1) 对于这个运算 b0=02。a0+03。a1+a2+a3 令 xtime(a0)=02。a0 其中,符号“。 ”表示模一个八次不可约多项式的同余乘法3。 经过上面的运算,原来的一列就被替换成下面的式子所表达的新列:S(0,c)=(02 S(0,c)(03S(1,c)S(2,c)S(3,c)S(1,c)=S(0,c)(02S(1,c)(03 S(2,c)S(3,c)S(2,c)=S(0,c)S(1,c)(02S(2,c)(03S(3,c)S(3,c)= (03S(0

10、,c)S(1,c)S(2,c)(02S(3,c) 这里 为按位异或运算,其中的乘法 按照下面介绍的模乘同余规则进行计算。列变换中要用到的模乘同余规则和我们一般用到的 乘法有些不同,由于每一个元素都是一个字节,于是可把这个字节看成一个形式上的七次多项 式,即将 b7b6b5b4b3b2b1b0 视为 b7x7+b6x6+b5x5+b4x4+b3x3+b2x2+b1x+b0,如11011001 2=d916 可以被看成是 x7+x6+x4+x3+1。列变换希望把一个字节变换为一个新的字节,所以 需要把两个形式上的七次多项式的乘法结果变为一个新的形式上的七次多项式,然后才能将 其恢复为一个字节的长度

11、。这里采用模一个八次不可约多项式的同余乘法,即将两七次多项 式的乘法结果除以这个八次不可约多项式再取其余式。在 AES 中这个八次不可约多项式为 m(x)=x8+x4+x3+x+。 如如:(x6+x4+x2+x+1)(x7+x+1) =x13+x11+x9+x8+x6+x5+x4+x3+1(x13+x11+x9+x8+x6+x5+x4+x3+1)mod(x8+x4+x3+x+1)=x7+x6 +1 对应为5783=c1。 mov temp,a0;这是一个 mixcolimn 子程序 rcall xtime;调用 xtime 程序 mov a0,temp mov temp,a1 rcall xt

12、ime eor a0,a1 eor a0,temp eor a0,a2 eor a0,a3;完成 b(x)的计算 xtime:;这是一个子程序 ldi temp1,1b lsl temp brcs next1;如果最高位是 1,则转移 next: ret;否则什么也不变化 next1:eor temp,temp1 rjmp next 对于逆变化,其矩阵 C 要改变成相应的 D,即 b(x)=d(x)a(x)。 密钥加层运算(addround)是将圈密钥状态中的对应字节按位“异或” 。 根据线性变化的性质1,解密运算是加密变化的逆变化。这里不再详细叙述。 1.2 轮变化 对不同的分组长度,其对应

13、的轮变化次数是不同的,如表 1 所列。 表 1 AES 类型与基参数的关系 1.3 密钥扩展 AES 算法利用外部输入密钥 K(密钥串的字数为 Nk),通过密钥的扩展程序得到共计 4(Nr+1)字的扩展密钥。 它涉及如下三个模块: 位置变换(rotword)把一个 4 字节的序列A,B,C,D变化成B,C,D,A; S 盒变换(subword)对一个 4 字节进行 S 盒代替; 变换 RconiRconi表示 32 位比特字xi-1,00,00,00。这里的 x 是(02) , 如 Rcon1=01000000;Rcon2=02000000;Rcon3=04000000 扩展密钥的生成:扩展密

14、钥的前 Nk 个字就是外部密钥 K;以后的字 W等于它前一 个字 Wi-1与前第 Nk 个字 Wi-Nk的“异或”,即 W=Wi-1 W- Nk。 但是若为 Nk 的倍数,则 W=Wi-Nk Subword(Rotword(W-1) Rconi/Nk。 程序执行的时候,主要调用以上几个子程序,具体实现如下: Keyexpansion: rcall rotwoed rcall subword rcall Rcon AES 的加密与解密流程如图 1 所示。 图 1 AES 的加密和解密流 1.4 扩展密钥的生成。 扩展密钥的前 Nk 个字就是外部密钥 K;以后的字 wi等于它前一个字 wi21与前

15、第 Nk 个字 wi2Nk的异或,即 wi=wi21XORwi2Nk。但是若 i 为 Nk 的倍数,则 wi =wi2NkXORSubWord(RotWord(wi21)XORRconi/Nk。 举例:设外部输入的加密密钥 CipherKey=2b7e151628aed2a6abf7158809cf4f3cNk=4,则 w0=2b7e1516w1=28aed2a6w2=abf71588w3=09cf4f3c;w4=w0XORSubWord(RotWord(w3)XORRcon 4/Nk=a0fafe17;w5=wi21XORwi2Nk=w4XORw1 =88542cb1;w43=b6630ca

16、6。输入明文:00112233445566778899aabbccddeeff;输入密钥: 000102030405060708090a0b0c0d0e0f 各轮密文:round0. input00112233445566778899aabbccddeeff;round0.ksch000102030405060708090a0b0c0d0 e0fround1.start00102030405060708090a0b0c0d0e0f0round10.output69c4e0d86a7b0 430d8cdb78070b4c55 128 位密钥 128 分组 AES:解密过程 DecryptAES(

17、const TAESBuffer InBuf , const TAESExpandedKey128_1408 Key ,TAESBuffer OutBuf ) Key40 704F71FF InBuf0-4) 8C64EC71 T00=InBuf0-4Key40 FC2B9D8E Key41 F14492AD InBuf1-5) 8C64EC71 T01=InBuf1-5Key41 4250BA26 Key42 66EC80B1 InBuf2-6) 8C64EC71 T02=InBuf2-6Key42 601B6935 Key43 68715BC9 InBuf3-7) 8C64EC71 T03

18、=InBuf3-7Key43 E72913FB 解密 Round:9 Round:8 4 对文件的加密/解密在完成了 DES 分组加密算法实现的基础上,现在利用密文分组链接 (CBC)方式将其用于对文件的加密/解密(密钥长度可选),程序的操作步骤如下: (1)根据文件处理方式选择模块,选择对文件加密、对文件解密或是退出程序。(2)输入密钥 K 的长度(128 比比特、192 比特、256 比特)和密钥。 (3)用密钥扩展程序对密钥加以扩展。128 比特、192 比特、256 比特密钥分别对应 KeyExpansion128(key),KeyExpansion192(key),KeyExpans

19、ion256(key),分别生成 72bytes,204bytes,236bytes 的扩展密钥。 (4)创建加密/解密文件。文件都是以文本格式存储的。 (5)从等待加密/解密文件中取出 16 字节。若是未取出 16 个字节文件就结束,则在结束处标 上文件结束符。把取出的数据放入中间变量(STATE)中。 (6)根据密钥的长度对 STATE 中的数据进行加密/解密。128 比特、192 比特、256 比特分别 对应 Cipher128(InvCipher128),Cipher192(InvCipher192),Cipher256(In2vCipher256)。 并把加密/解密后的数据保存在 S

20、TATE 中。把 STATE 中的数据写入加密/解密文件中。 (7)如果等待加密/解密的文件已经结束,则关闭文件,回到操作(1);否则回到操作(5)。这样 程序就实现了对一个文件的加密/解密操作。 2. AES 加密、解密算法的优化 由以上算法的流程中可以清楚地看到,整个算法中程序耗时最多的就是圈变化部分,因 此对于算法的优化也就在此;而圈变化部分可以优化的也就是列变化。因为列变化是一个模 乘同余规则。由于 AES 加密和解密是不对称的,如果不对其进行优化,会使算法的解密速度远 远大于加密的速度1。 加密运算。对列变换(Mixcolumn)可以通过调用 xtime 子程序进行优化。具体算 法1

21、实现如下: 另一种有效的优化方法就是离线构造一个表格,即列变化表格。这样只要通过查表的方 式就可以提高加密速度。 解密算法的优化。由于解密的列变换的系数分别是 09、0E、0B 和 0D。在 AVR 单片 机上实现以上的乘法显然是需要很多的时间,从而导致了解密的性能降低。 优化方法一:对列变化进行分解使倍乘次数降低。 仔细研究解密矩阵的系数,不难发现解密矩阵和加密矩阵有着一定的联系,即解密矩阵 等于加密矩阵和一个矩阵的相乘。通过这样的联系,就可以对算法进行优化: 这样一来,只用几个简单的“异或”就可以实现列变化,使倍乘的次数降低,提高解密的 速度。 优化方法二:构造表格。 同加密构造方法一样,

22、可以构造四个表格 Tea=ea; T9a=9a;T9a=9a;Tba =ba。这样一来,也只需要进行查表和简单的异或就可以完成解密的任务。虽然这种方法 将增加额外的开销,但是它却是一种有效的方法。 3. AES 加密与解密的实验仿真 根据以上实验步骤和优化方法得出表 2、3 所列实验结果。 表 2 AES-128 不同加密方法性能比较 设主密钥为:000102030405060708090a0b0c0d0e0f(128bit)。 加密明文:00112233445566778899AABBCCDDEEFF。 密文:69C4E0D86A7B0430D8CDB78070B4C55A。 解密密文:69

23、C4E0D86A7B0430D8CDB78070B4C55A。 明文:00112233445566778899AABBCCDDEEFF。 4.结束语 总之,AES 密码是一个非对称密码体制,它的解密要比加密复杂和费时。解密优化算法没有 增加存储空间的基础上,以列变化为基础进行处理,程序比原始的要小,而且节约了时间。 解密优化方法速度最快,效率最高,但要增加系统的存储空间,因此它的程序也是最大的一 个。AES 高级数据加密算法不管是从安全性、效率,还是密钥的灵活性等方面都优于 DES 数 据加密算法,在今后将逐步代替 DES 而被广泛应用。本文基于 AVR 的高速计算性能实现了 AES 算法,并

24、结合汇编语言进行了算法的优化。根据实际应用的具体需要,可以选用相应的 方法。 参考文献 1 宋震,等. 密码学. 北京:中国水利水电出版社,2002 2 杨义先.现代密码新理论.北京:科学出版社,2002 3 谷大武,等.高级加密标准(AES)算法Rijndael 的设计.北京:清华大学出版社,2003 4 耿德根,等.AVR 单片机应用技术.北京:北京航空航天大学出版社,2002 5 宋建国,等.AVR 高速嵌入式单片机原理与应用.北京:北京航空航天大学出版社,2001 6 NIST. Advanced Encryption Standard (AES) .Federal Informati

25、on Processing Standards Publication,2001 人与人之间的距离虽然摸不着,看不见,但的的确确是一杆实实在在的秤。真与假,善与恶,美与丑,尽在秤杆上可以看出;人心的大小,胸怀的宽窄,拨一拨秤砣全然知晓。 人与人之间的距离,不可太近。 与人太近了,常常看人不清。一个人既有优点,也有缺点,所谓人无完人,金无赤足是也。初识时,走得太近就会模糊了不足,宠之;时间久了,原本的美丽之处也成了瑕疵,嫌之。 与人太近了,便随手可得,有时得物,据为己有,太过贪财;有时得人,为己所用,也许贪色。贪财也好,贪色亦罢,都是一种贪心。 与人太近了,最可悲的就是会把自己丢在别人身上,找不

26、到自己的影子,忘了回家的路。 这世上,根本没有零距离的人际关系,因为人总是有一份自私的,人与人之间太近的距离,易滋生事端,恩怨相随。所以,人与人相处的太近了,便渐渐相远。 人与人之间的距离也不可太远。 太远了,就像放飞的风筝,过高断线。 太远了,就像南徙的大雁,失群哀鸣。 太远了,就像失联的旅人,形单影只。 人与人之间的距离,有时,先远后近;有时,先近后远。这每次的变化之中,总是有一个难以忘记的故事或者一段难以割舍的情。 有时候,人与人之间的距离,忽然间近了,其实还是远;忽然间远了,肯定是伤了谁。 人与人之间的距离,如果是一份信笺,那是思念;如果是一个微笑,那是宽容;如果是一句问候,那是友谊;

27、如果是一次付出,那是责任。这样的距离,即便是远,但也很近。 最怕的,人与人之间的距离就是一句失真的谗言,一个不屑的眼神,一叠诱人的纸币,或者是一条无法逾越的深谷。这样的距离,即便是近,但也很远。 人与人之间最美的距离,就是不远不近,远中有近,近中有远,远而不离开,近而不相丢。 太远的距离,只需要一份宽容,就不会走得太远而行同陌人;太近的距离,只需要一份自尊,就不会走得太近而丢了自己。不远不近的距离,多像一朵艳丽的花,一首悦耳的歌,一首优美的诗。 人生路上,每个人的相遇、相识,都是一份缘,我们都是相互之间不可或缺的伴。 人与人之间的距离虽然摸不着,看不见,但的的确确是一杆实实在在的秤。真与假,善

28、与恶,美与丑,尽在秤杆上可以看出;人心的大小,胸怀的宽窄,拨一拨秤砣全然知晓。 人与人之间的距离,不可太近。 与人太近了,常常看人不清。一个人既有优点,也有缺点,所谓人无完人,金无赤足是也。初识时,走得太近就会模糊了不足,宠之;时间久了,原本的美丽之处也成了瑕疵,嫌之。 与人太近了,便随手可得,有时得物,据为己有,太过贪财;有时得人,为己所用,也许贪色。贪财也好,贪色亦罢,都是一种贪心。 与人太近了,最可悲的就是会把自己丢在别人身上,找不到自己的影子,忘了回家的路。 这世上,根本没有零距离的人际关系,因为人总是有一份自私的,人与人之间太近的距离,易滋生事端,恩怨相随。所以,人与人相处的太近了,

29、便渐渐相远。 人与人之间的距离也不可太远。 太远了,就像放飞的风筝,过高断线。 太远了,就像南徙的大雁,失群哀鸣。 太远了,就像失联的旅人,形单影只。 人与人之间的距离,有时,先远后近;有时,先近后远。这每次的变化之中,总是有一个难以忘记的故事或者一段难以割舍的情。 有时候,人与人之间的距离,忽然间近了,其实还是远;忽然间远了,肯定是伤了谁。 人与人之间的距离,如果是一份信笺,那是思念;如果是一个微笑,那是宽容;如果是一句问候,那是友谊;如果是一次付出,那是责任。这样的距离,即便是远,但也很近。 最怕的,人与人之间的距离就是一句失真的谗言,一个不屑的眼神,一叠诱人的纸币,或者是一条无法逾越的深谷。这样的距离,即便是近,但也很远。 人与人之间最美的距离,就是不远不近,远中有近,近中有远,远而不离开,近而不相丢。 太远的距离,只需要一份宽容,就不会走得太远而行同陌人;太近的距离,只需要一份自尊,就不会走得太近而丢了自己。不远不近的距离,多像一朵艳丽的花,一首悦耳的歌,一首优美的诗。 人生路上,每个人的相遇、相识,都是一份缘,我们都是相互之间不可或缺的伴。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文资料库 > 毕业论文

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。