您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 中南大学现代密码学实验报告
信息安全1302-郁博文-0906130205现代密码学学生姓名郁博文学号0906130205专业班级信息安全1302指导教师段桂华学院信息科学与工程学院完成时间2015年5月中南大学实验报告信息安全1302-郁博文-09061302051AES1.背景AES,密码学中的高级加密标准(AdvancedEncryptionStandard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPSPUB197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。AES有一个固定的128位的块大小和128,192或256位大小的密钥大小。Rijndael算法汇聚了安全性、效率高、易实现性和灵活性等优点,是一种较DES更好的算法。该算法为比利时密码学家JoanDaemen和VincentRijmen所设计,结合两位作者的名字,以Rijndael之命名之,投稿高级加密标准的甄选流程。(Rijdael的发音近于Rhinedoll。)AES在软体及硬件上都能快速地加解密,相对来说较易于实作,且只需要很少的记忆体。作为一个新的加密标准,目前正被部署应用到更广大的范围.1.1Rijndael密码的设计标准:①抵抗所有已知的攻击。信息安全1302-郁博文-09061302052②在多个平台上速度快,编码紧凑。③设计简单。当前的大多数分组密码,其轮函数是Feistel结构。Rijndael没有这种结构。Rijndael轮函数是由3个不同的可逆均匀变换1.2设计思想分组和密钥长度可变,各自可独立指定为128、192、256比特。状态算法中间的结果也需要分组,称之为状态,状态可以用以字节为元素的矩阵阵列表示,该阵列有4行,列数Nb为分组长度除32种子密钥以字节为元素的矩阵阵列描述,阵列为4行,列数Nk为密钥长度除322.系统设计2.1系统主要目标基本要求部分:1.在深入理解AES加密/解密算法理论的基础上,设计一个AES加密/解密软件系统;信息安全1302-郁博文-090613020532.2功能模块与系统结构主要功能模块如下:2.2.1字节替换SubByte非线性代换是可逆的,由以下两个变换的合成得到:①首先,将字节看作GF(28)上的元素,映射到自己的乘法逆元,‘00’映射到自己。②其次,对字节做如下仿射变换:0011223344556677100011111110001111111000110111100010111110000011111001001111101000111110yxyxyxyxyxyxyxyx图1字节代换示意图2.2.2行移位ShiftRow将状态阵列的各行进行循环移位,移位量与分组长度的关系0行:不动NbC1C2C3412361238134信息安全1302-郁博文-09061302054图2行移位示意图2.2.3列混合MixColumn图3列混合示意图状态阵列的每个列a(x)与一个固定的多项式c(x)进行模x4+1乘法后混淆为b(x).记为c(x)是模x4+1可逆的多项式‘03’x3+‘01’x2+‘01’x+‘02’逆d(x)=‘0B’x3+‘0D’x2+‘09’x+‘0E’0011223302030101010203010101020303010102babababa2.2.4轮密钥加AddRoundKey图4轮密钥加示意图密钥加:轮密钥与状态进行逐比特异或。轮密钥长度等于分组长度Nb。密钥加运算的逆运算是其自身。信息安全1302-郁博文-090613020552.2.5逆字节替换通过逆S盒的映射变换得到2.2.6逆行移位InvShiftRow图5逆行移位示意图与加密时的行移位区别在于移位方向相反。2.2.7逆列混淆图6逆列混合示意图加密与解密系统流程图如下所示,信息安全1302-郁博文-09061302056读进明文读进密钥(1)产生轮子密钥(2)AddRoundKey变换(3)轮变换Round(State,RoundKey){ByteSub(State);ShiftRow(State);MixColumn(State);AddRoundKey(State,RoundKey);}(4)最后轮变换FinalRound(State,RoundKey){ByteSub(State)ShiftRow(State)AddRoundKey(State,RoundKey);}密文1rN图4.103.AES算法java实现3.1代码见附录13.2测试结果:信息安全1302-郁博文-09061302057RC41.背景RC4加密算法是大名鼎鼎的RSA三人组中的头号人物RonaldRivest在1987年设计的密钥长度可变的流加密算法簇。之所以称其为簇,是由于其核心部分的S-box长度可为任意,但一般为256字节。该算法的速度可以达到DES加密的10倍左右,且具有很高级别的非线性。RC4起初是用于保护商业机密的。但是在1994年9月,它的算法被发布在互联网上,也就不再有什么商业机密了。RC4也被叫做ARC42.系统设计2.1系统主要目标基本要求部分:分析RC4的实现过程。用程序设计语言将算法过程编程实现。完成字符串数据的加密运算和解密运算2.2功能模块与系统结构主要功能模块如下:信息安全1302-郁博文-09061302058RC4算法的原理很简单,包括初始化算法(KSA)和伪随机子密码生成算法(PRGA)两大部分。3.RC4算法java实现2.1代码见附录22.2测试结果:i=0;j=0;i=(i+1)%256j=(j+s[i])%256交换Si,Sj;t=(s[i]+s[j])%256k=St;初始化S盒并打印加密明文,并输出加密后的密文解密,并输出结束输入密钥输入明文开始信息安全1302-郁博文-09061302059[问题讨论]1.改变明文或密钥中的一个比特值可能影响AES值中的多少比特?答:明文和密钥在S盒置换时,不同的字节会替换出不同的结果。算法过程中一共进行了10轮加密,所以改变一个比特值可能影响AES值中的80比特(8x10)。2.在RC4的密钥流生成中,改变初始密钥的一个比特值可能影响输出中的多少比特?答:初始密钥的不同会导致S盒的不同,所以可能影响输出中的256比特。3.分析实验中在编辑编译运行等各环节中所出现的问题及解决方法。答:在算法的实现过程中,对于异或等平时很难接触到的位操作不熟悉导致在轮密钥加密等过程的实现变得很艰难,并且使用java这种面向对象的高级语言来处理数据从速度上就会慢很多。最难处理的是字符串对的补足长度问题,这个问题在设计之初并没有想到过导致最后测试时出现了信息安全1302-郁博文-090613020510很多问题,最后通过查阅资料等方式解决了这些问题。SKEY1.SKEY协议的作用身份认证,是任何网络安全方案的一个基础。如在大部分情况下,需要认证的实体是通信的发送者,即需要确定访问者的合法性问题。S/KEY协议主要是用于身份认证。2.SKEY协议的安全性分析。S/KEY身份认证解决方案,可以有效解决重放攻击。重放攻击是指攻击者通过某种方式在网络连接中获取他人的登陆账户与口令,然后利用它多某个网络资源的访问权限。而现在S/Key协议分配给访问者的口令每次都不同,所以,就可以有效解决口令泄漏问题。因此,可以避免重放攻击。3.SKEY协议的实现过程。3.1实现过程分析:为了实现起来简单明了一些,我采用了一个比较简单的方式进行。要模拟客户端保存数据比较不容易实现,对服务器生成的hash值,保存在本地文件中,当然这个hash的值是动态的,每次hash都会加上相应的登陆次数(这个hash方式和一般的s/key协议有些不同),这样可以动态的获取。通过文件读写的方式获得。对于生成的hash信息安全1302-郁博文-090613020511值从100到0次访问的问题也是使用一个文件来储存,每次验证完成后,都会把前一次存的数据减1然后重新的写入文件中。为了模拟登陆过程,我用到了两个文件client.txt,sever.txt分别模拟客户端和服务器端,分别存储客户端和服务器端密钥3.1实现过程流程图:信息安全1302-郁博文-0906130205124.SKEY协议的java实现4.1Java实现代码见附录三4.2实现结果:服务器端返回true表明认证成功附录1/***AES字节数组加密算法类**@authorDC2011/11/5*/publicclassAes{/***************************成员变量************************************/privateintNb;//以32位为单位的字长privateintNk;//以32位为单位的密钥长度privateintNr;//轮数privatebyte[]key;//密钥privatebyte[][]Sbox;//S盒矩阵privatebyte[][]iSbox;//s盒逆矩阵privatebyte[][]w;//密钥调度表privatebyte[][]Rcon;//轮常数表privatebyte[][]State;//状态矩阵/***构造方法信息安全1302-郁博文-090613020513**@paramkeySize*@paramkeyBytes*/publicAes(intkeySize,byte[]keyBytes,intNb){SetNbNkNr(keySize,Nb);this.key=newbyte[this.Nk*4];this.key=keyBytes;BuildSbox();BuildInvSbox();BuildRcon();KeyExpansion();}/***************************私有方法************************************//***生成Rcon轮常数矩阵*/privatevoidBuildRcon(){//0x00,0x01,0x02,0x04,//0x08,0x10,0x20,0x40,//0x80,0x1b,0x36,0x6c,//0xd8,0xab,0x4d,0x9a,//0x2f,0x5e,0xbc,0x63,//0xc6,0x97,0x35,0x6a,//0xd4,0xb3,0x7d,0xfa,//0xef,0xc5,0x91,0x39};this.Rcon=newbyte[100][4];Rcon[0][0]=0x00;//Rcon[1][0]=0x01;for(inti=1;i100;i++){Rcon[i][0]=gfmultby02(Rcon[i-1][0]);}}/***设置Nb,Nk,Nr**@paramkeysize*/信息安全1302-郁博文-090613020514privatevoidSetNbNkNr(intkeysize,intNb){this.Nb=Nb;switch(keysize){caseKEYSIZE.Bit128:this.Nk=4;this.Nr=10;break;caseKEYSIZE.Bit192:this.Nk=6;this.Nr=12;break;caseKEYSIZE.Bit256:this.Nk=8;this.Nr=14;break;}}/***生成S盒矩阵*/privatevoidBuildSbox(
本文标题:中南大学现代密码学实验报告
链接地址:https://www.777doc.com/doc-2761347 .html