现代密码学实验报告_第1页
现代密码学实验报告_第2页
现代密码学实验报告_第3页
现代密码学实验报告_第4页
现代密码学实验报告_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、现代密码学实验报告学生姓名 学 号 专业班级 计算机科学与技术指导教师 段桂华 学 院 信息科学与工程学院 完成时间 2016年4月实验一 密码算法实验实验目的1.掌握密码学中经典的对称密码算法AES、RC4的算法原理。2.掌握AES、RC4的算法流程和实现方法。实验预备1.AES算法的基本原理和特点。2.流密码RC4的密钥流生成以及S盒初始化过程。 实验内容1. 分析AES、RC4的实现过程。2. 用程序设计语言将算法过程编程实现。3. 完成字符串数据的加密运算和解密运算输入十六进制明文:11223344556677889900AABBCCDDEEFF 输入十六进制密钥:13579BDF02

2、468ACE1234567890ABCDEF 实验步骤1. 预习AES、RC4算法。2. 写出算法流程,用程序设计语言将算法过程编程实现。3. 输入指定的明文、密钥进行实验,验证结果。4. 自己选择不同的输入,记录输出结果。写出所编写程序的流程图和运行界面、运行结果。一、AES算法1、AES算法简介AES 是一种可用来保护电子数据的新型加密算法。特别是,AES 是可以使用 128、192 和 256 位密钥的迭代式对称密钥块密码,并且可以对 128 位(16 个字节)的数据块进行加密和解密。与使用密钥对的公钥密码不同的是,对称密钥密码使用同一个密钥来对数据进行加密和解密。由块密码返回的加密数据

3、与输入数据具有相同的位数。迭代式密码使用循环结构来针对输入数据反复执行排列和置换运算。2、 算法实现及流程以加密函数为例,如下所示,首先对密钥进行预处理密钥扩展,然后明文进行Nr(Nr与密钥长度有关)次迭代运算,包括字节替换SubBytes、 移位行运算ShiftRows、混合列运算MixColumns、以及轮秘钥加密AddRoundKey。void Cipher() int i,j,round=0; / 把明文赋值到状态数组中 for(i=0;i<4;i+) for(j=0;j<4;j+) stateji = ini*4 + j; / 先与初始轮密钥相加 AddRoundKey(

4、0); / 第一轮至(Nr-1)轮的迭代运算,第Nr轮不用进行列混合运算 for(round=1;round<Nr;round+) SubBytes(); /字节代换 ShiftRows(); /行移位 MixColumns(); /列混合 AddRoundKey(round); /密钥加 SubBytes(); ShiftRows(); AddRoundKey(Nr); / 加密结束,将机密结果填入数组out中以便输出 for(i=0;i<4;i+) for(j=0;j<4;j+) outi*4+j=stateji; 解密函数的流程和加密函数是一致的,只是对于行变换、列变换

5、、以及相关s盒子为加密的逆过程。 字节替换SubBytes是非线形置换,独立地对状态的每个字节进行。移位行运算ShiftRows是将状态阵列的各行进行循环移位,不同状态行的位移量不同。第0行不移动,第1行循环左移C1个字节,第2行循环左移C2个字节,第3行循环左移C3个字节。位移量C1、C2、C3的取值与Nb有关。混合列运算MixColumns是将状态阵列的每个列视为多项式,再与一个固定的多项式c(x)进行模x4+1乘法。Rijndael的设计者给出的c(x)为(系数用十六进制数表示):c(x)=03x3+01x2+01x+02。轮秘钥加密AddRoundKey是将轮密钥简单地与状态进行逐比特

6、异或。轮密钥由种子密钥通过密钥编排算法得到,轮密钥长度等于分组长度Nb。 程序流程图128位明文秘钥初始轮秘钥加密产生轮秘钥轮函数S盒变换Nr轮迭代控制 Nr个圈秘钥行移位与列混合 轮秘钥加密128位密文 AES流程图3、 运行结果 首先,输入指定密钥13579BDF02468ACE1234567890ABCDEF ,输入指定明文11223344556677889900AABBCCDDEEFF,进行实验,结果如图所示。 选择不同的输入,输入秘钥11223344556677889900AABBCCDDEEFF,输入明文13579BDF02468ACE1234567890ABCDEF ,输出结果如

7、图所示。二、RC4算法1、RC4算法简介 RC4加密算法是大名鼎鼎的RSA三人组中的头号人物Ron Rivest在1987年设计的密钥长度可变的流加密算法簇。首先,用从1到256个字节的可变长度密钥初始化一个256个字节的状态盒S256。然后,通过S盒子对密钥按字节进行变换。最后可以得到变换后的密钥。对于加密,只要让密钥按字节与明文进行异或。而解密,只要让密钥按字节与密文进行异或。2、 算法实现开始时,S中元素的值被置为按升序从0到255,即S0=0,S1=1, ,S255=255。同时对密钥keykey_len的进行填充到随机序列密钥rc4key256中,(key_len为key的字节长度,

8、且不大于256)。循环重复用key,直到rc4key的所有字节都被赋值。然后根据密钥re4key去对S盒进行变换。这些预操作可概括如下: /S盒先初始化为s0=0,s1=1.s255=255 for(i = 0; i < 255; i+) Si=i; /初始化序列化密钥 for(i = 0; i < 256; i+) j = i % key_len rc4keyi = key_dataj; /根据密钥rc4key,填充S盒 for( j = 0, i = 0; i < 256; i+) j = (rc4keyi + Si + j) % 256; swap(&Si, &

9、amp;Sj); /交换Si和Sj的数值 矢量S一旦完成初始化,输人密钥就不再被使用密钥流的生成是从s0到S255,对每个Si,根据当前S的值,将Si与S中的另一字节置换当S255完成置换后,操作继续重复,从S0开始。操作如下:/生成随机序列密钥 for(counter = 0; counter < buffer_len; counter+) i = (i + 1) % 256; j = (Si + j) % 256; swap(&Si, &Sj); t = (Si + Sj) % 256; rc4keycounter = St;这两个过程使用同样的函数即可,加密中,将k

10、的值与下一明文字节异或;解密中/将缓冲区数据和随机系列密钥进行异或,则可进行加密或者解密 ,将k的值与下一密文字节异或。操作如下: for(i = 0; i < buffer_len; i+) resulti = buffer_datai rc4keyi; 程序流程图S盒的初始化:S0=0,S1=1,.,S255=255秘钥与S盒做预算,生成序列rc4key得已知密文ciphertext得随机秘钥序列rc4key已知明文plaintext RC4流程图3、 运行结果 首先,输入指定密钥13579BDF02468ACE1234567890ABCDEF ,输入指定明文112233445566

11、77889900AABBCCDDEEFF,进行实验,结果如图所示。4、选择不同的输入,输入秘钥11223344556677889900AABBCCDDEEFF,输入明文13579BDF02468ACE1234567890ABCDEF ,输出结果如图所示。问题讨论1. 改变明文或密钥中的一个比特值可能影响AES值中的多少比特?2.在RC4的密钥流生成中,改变初始密钥的一个比特值可能影响输出中的多少比特?3.分析实验中在编辑、编译、运行等各环节中所出现的问题及解决方法。回答问题1.答:明文和密钥在S盒置换时,不同的字节会替换出不同的结果。算法过程 中一共进行了10轮加密,所以改变一个比特值可能影响

12、AES值中的80比特(8 x 10)。2.答:初始密钥的不同会导致S盒的不同,所以可能影响输出中的256比特。3.答:在算法的实现过程中,对于异或等平时很难接触到的位操作不熟悉导致在轮密钥加密等过程的实现变得很艰难。最难处理的是字符串对的补足长度问题,这个问题在设计之初并没有想到过导致最后测试时出现了很多问题,最后通过查阅资料等方式解决了这些问题。实验二 SKEY协议设计实验实验目的1.掌握身份认证协议的原理和基本思想。2.掌握SKEY协议的机制和实现方法。实验预备1.SKEY协议的作用。2.SKEY协议的安全性分析。3.SKEY协议的实现过程。实验内容1. 分析SKEY协议的实现过程。2.

13、用程序设计语言将算法过程编程实现。3. 演示SKEY协议的身份鉴别过程。 实验步骤1. 预习SKEY协议的机制。2. 选择和实现相应的摘要算法MD5或SHA。3. 写出算法流程,用程序设计语言将协议过程编程实现。4. 验证SKEY协议的身份鉴别过程。写出所编写程序的流程图和运行界面、运行结果。1、 SKEY协议的原理及作用 SKEY是一种鉴别程序,它依赖于单向函数的安全性。 为了设置系统,输入随机数R,计算机计算f(R), f(f(R), f(f(f(R)等等大约100次。调用x1 ,x2 ,x3 ,。,x100这些数。计算机打印出这些数的列表,Alice把这些数放入口袋妥善保管,计算机也顺利

14、地在登录数据库中Alice的名字后面存储x101的值。当Alice第一次登录时,她输入她的名字和x100,计算机计算f(x100),并把它和x101比较,如果它们匹配,那么证明Alice身份是真的。然后,计算机用x101代替数据库中的x100。Alice将从她的列表中取消x100。 Alice每次登录时,都输入她的列表中未取消的最后的数xI,计算机计算f(xI),并和存储在它的数据库中的xI+1比较。因为每个数只被用一次,并且这个函数是单向的,所以Eve不可能得到任何有用的信息。同样的,数据库对攻击者也毫无用处。当然,当Alice用完了她的列表上面的数后,她必须重新初始化系统。作用:身份认证,

15、是任何网络安全方案的一个基础。如在大部分情况下, 需要认证的实体是通信的发送者,即需要确定访问者的合法性问题。 S/KEY协议主要是用于身份认证。2、 用MD5实现加密1、 算法简介 MD5即Message-Digest Algorithm 5(信息-摘要算法 5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式(就是把一个任意

16、长度的字节串变换成一定长的十六进制数字串)。2.原理以及流程图 MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。 在MD5算法中,首先需要对信息进行填充,使其位长对512求余的结果等于448。因此,信息的位长(Bits Length)将被扩展至N*512+448,N为一个非负整数,N可以是零。填充的方法如下,在信息的后面填充一个1和无数个0,直到满足上面的条件时才停止用0对信息的填充。然后,在这个结果后面附加一个以64位二进制表示的填充前信息长度。经过这两步的处

17、理,现在的信息的位长=N*512+448+64=(N+1)*512,即长度恰好是512的整数倍。这样做的原因是为满足后面处理中对信息长度的要求。MD5中有四个32位被称作链接变量(Chaining Variable)的整数参数,他们分别为:A=0x67452301,B=0xefcdab89,C=0x98badcfe,D=0x10325476。当设置好这四个链接变量后,就开始进入算法的四轮循环运算。循环的次数是信息中512位信息分组的数目。 将输入消息按512-位分组,最后要填充成为512位的整数倍,且最后一组的后64位用来填充消息长度(填充前)。填充方法为附一个1在消息后,后接所要求的多个0。

18、这样可以确保不同消息在填充后不相同。 由于留出64位用来表示消息长度,那么消息的长度最多可达264字节,相当于4G×4G字节,文件的长度是不可能达到这么大,因此通常都是只采用64位中的低32位来表示消息长度,高32位填充0。 l 初始化MD变量。由于每轮输出128位,这128位可用下面四个32位字A,B,C,D来表示。CVqYqDCBAF,T116,XiG,T1732,Xp2 iH,T3348,Xp3 iL,T4964,Xp4i+CVq+1 其初始值设为: A=0x01234567 B=0x89ABCDEF C=0xFEDCBA98 D=0x76543210 开始进入算法主循环,循环的次数是消息中512位消息分组的数目。先将上面A、B、C、D四个变量分别复制到另外四个变量a、b、c、d中去。主循环有四 轮,每轮很相似。每轮进行16次操作,每次操作对a、b、c、d四个变量中的三个作一次非线性函数运算,然后将所得结果加上第四个变量,消息的一个子分组 和一个常数。再将所得结果向右环移一个

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论