信息安全密码学课程设计报告Word格式.docx

上传人:b****5 文档编号:21407781 上传时间:2023-01-30 格式:DOCX 页数:16 大小:469.11KB
下载 相关 举报
信息安全密码学课程设计报告Word格式.docx_第1页
第1页 / 共16页
信息安全密码学课程设计报告Word格式.docx_第2页
第2页 / 共16页
信息安全密码学课程设计报告Word格式.docx_第3页
第3页 / 共16页
信息安全密码学课程设计报告Word格式.docx_第4页
第4页 / 共16页
信息安全密码学课程设计报告Word格式.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

信息安全密码学课程设计报告Word格式.docx

《信息安全密码学课程设计报告Word格式.docx》由会员分享,可在线阅读,更多相关《信息安全密码学课程设计报告Word格式.docx(16页珍藏版)》请在冰豆网上搜索。

信息安全密码学课程设计报告Word格式.docx

(2)如果分割后的明文字母对在矩阵的同一行中都出现,则分别用矩阵中其右侧的字母代替.行的最后一个字母山行的E第一个字母代替。

例如,on被加密成qo.而st被加密为tn。

(3)如果分割后的明文字母对在矩阵的一列中都出现,则分别用矩阵中其下方的字母代替.列的最后一个字母由列的第一个字母代替。

例如,en被加密成nU.而aW被加密成ba。

(4)如果分割后的明文字母对既不在矩阵的同一列中都出现也不在矩阵的同一行中都出现.密文是这两个字母所在的长方形的另两个顶点。

按纵向查找密文。

(5)如果明文有奇数个字母,末尾加一个无效字母。

1.3关键算法分析

上述代码主要是用来填充矩阵,首先将明文矩阵进行填充,也就是第一张图片所显示的,这是算法的关键,也是第一步所在。

然后上面的算法中还有因为是将明文两两分组,即每两个明文分为一组,那么当明文为奇数的时候,就需要添加一个无关字符,使它可以达到偶数个,以方便分组。

在算法设计过程中,为了把整个过程表示的更清晰,我把每个功能都分开,写了多个函数,最后由main()函数进行调用。

主函数中调用加密函数和解密函数,使程序可以比较顺利的进行。

1.4运行结果

1.5密码安全性分析

尽管Playfair密码被认为是比较安全的,它仍然是相对容易攻破的。

普莱费尔密码隐藏了的频率,但是该体制仍可以用统计分析方法来破译。

因为它的明文仍然完整地保留了明文语言的结果。

几百个字母的密文就足够我们分析出规律了。

在英文中各种连字:

th,he,an,in,re,es,…因此,Playfair密码对抗穷举攻击的效果比较差。

即有26*26=676个双字母,利用现代计算机来分析,很短时间内就可以将其破解。

实验二分组密码DES加密解密

2.1分组密码DES加密解密概述

DES使用一个56位的密钥以及附加的8位奇偶校验位,产生最大64位的分组大小。

这是一个迭代的分组密码,使用称为Feistel的技术,其中将加密的文本块分成两半。

使用子密钥对其中一半应用循环功能,然后将输出与另一半进行“异或”运算;

接着交换这两半,这一过程会继续下去,但最后一个循环不交换。

DES使用16个循环,使用异或,置换,代换,移位操作四种基本运算。

2.2算法原理与设计思想

DES的加密过程可分为加密处理,加密变换和子密钥生成几个部分组成。

1.加密处理过程

(1)初始变换。

加密处理首先要对64位的明文按表1所示的初始换位表IP进行变换。

表中的数值表示输入位被置换后的新位置。

例如输入的第58位,在输出的时候被置换到第1位;

输入的是第7位,在输出时被置换到第64位。

(2)加密处理。

上述换位处理的输出,中间要经过16轮加密变换。

初始换位的64位的输出作为下一次的输入,将64位分为左、右两个32位,分别记为L0和R0,从L0、R0到L16、R16,共进行16轮加密变换。

其中,经过n轮处理后的点左右32位分别为Ln和Rn,则可做如下定义:

Ln=Rn-1

Rn=Ln-1

其中,kn是向第n轮输入的48位的子密钥,Ln-1和Rn-1分别是第n-1轮的输出,f是Mangler函数。

(3)最后换位。

进行16轮的加密变换之后,将L16和R16合成64位的数据,再按照表2所示的最后换位表进行IP-1的换位,得到64位的密文,这就是DES算法加密的结果。

2.加密变换过程

通过重复某些位将32位的右半部分按照扩展表3扩展换位表扩展为48位,而56位的密钥先移位然后通过选择其中的某些位减少至48位,48位的右半部分通过异或操作和48位的密钥结合,并分成6位的8个分组,通过8个S-盒将这48位替代成新的32位数据,再将其置换一次。

这些S-盒输入6位,输出4位。

3.子密钥生成过程

钥通常表示为64位的自然数,首先通过压缩换位PC-1去掉每个字节的第8位,用作奇偶校验,因此,密钥去掉第8、16、24……64位减至56位,所以实际密钥长度为56位,而每轮要生成48位的子密钥。

4.解密处理过程

从密文到明文的解密过程可采用与加密完全相同的算法。

不过解密要用加密的逆变换,就是把上面的最后换位表和初始换位表完全倒过来变换。

这里不再赘述。

2.3DES加密解密设计分析

2.3.1DES基础加解密演示程序

1、说明:

此DES算法为演示程序,所以只需要实现其基本功能,以及把加密的过程表示清楚。

所以本程序界面设计分为3个部分,第一步部分实现对字符进行加解密,第二部分显示出16轮子密钥,可以进行分析,第三部分为清屏和退出。

代码为2个文件,DES.java和DES_show.java,其中DES.java实现了DES加密的基础功能,也就是DES的工具类,DES_show.java实现了DES加密的图形化显示,通过DES_show.java去调用DES工具类。

2、运行结果

A.加密部分

B.解密部分

2.3.2基于DES的文件加密分割系统(提高实验)

本系统是对文件进行分割并使用DES加密的,可以达到保证信息的机密性和完整性的目的。

2、主要功能:

对文件按分数进行分割,并且对分割文件进行加密。

反过来也可以进行解密合并。

3、界面设计:

如下图

3、程序设计:

分为3部分,第一部分为实现DES加解密的工具类,由DESDecrypt.java以及DESEncrypt.java组成,直接调用的java类库。

第二部分为文件分割操作部分,由fileio.java组成。

第三部分为界面部分,由index.java和about.java组成

4、运行结果:

A.加密设定:

B.分割:

C.合并:

D:

分割前后MD5对比:

解密合并后

分割加密前

2.4密码安全性分析

DES是对称的分组密码算法。

对称的分组密码算法最主要的问题是:

由于加解密双方都要使用相同的密钥,因此在发送、接收数据之前,必须完成密钥的分发。

因而,密钥的分发便成了该加密体系中的最薄弱、风险最大的环节,各种基本的手段均很难保障安全地完成此项工作,从而使密钥更新的周期加长,给他人破译密钥提供了机会。

其次,由于算法各轮的子密钥是通过改变初始密钥这种方式得到的,因此有些初始密钥成了弱密钥(weakkey)。

初始密钥分成两部分,每部分各自独立的移动。

如果每一部分的所有位都是0或1,那么算法的任意一个周期的密钥都是相同的。

当密钥是全1、全0、或者一半全1、一半全0时,会发生这种情况。

下面以十六进制编码的方式给出了四种弱密钥。

弱密钥值(带奇偶校验位) 

真实密钥

0101010101010101 

 

00000000000000

1F1F1F1FE0E0E0E0 

0000000FFFFFFF

E0E0E0E01F1F1F1F 

FFFFFFF0000000

FEFEFEFEFEFEFEFE 

FFFFFFFFFFFFFF

但是DES仅有56位二进制未免太短,许多密码学专家力荐使用更长的密钥,理由是穷举攻击的可能性。

设已知一段密码文C及与它对应的明码文M,用一切可能的密钥K加密M,直到得到E(M)=C,这时所用的密钥K即为要破译的密码的密钥。

穷举法的时间复杂性是T=O(n),空间复杂性是S=O

(1)。

对于DES密码,n=256≈7×

106,即使使用每秒种可以计算一百万个密钥的大型计算机,也需要算106天才能求得所使用的密钥,因此看来是很安全的。

但是密码专家Diffie和Hellman指出,如果设计一种一微秒可以核算一个密钥的超大规模集成片,那么它在一天内可以核算8.64×

1010个密钥。

如果由一个百万个这样的集成片构成专用机,他们当时估计:

这种专用机的造价约为两千万美元。

在五年内分期偿还,平均每天约需付一万美元。

由于用穷举法破译平均只需要计算半个密钥空间,因此获得解的平均时间为半天。

这样,破译每个DES密码的花销只是五千美元。

后来,Diffie在1981年又修改了他们的估计,认为以1980年的技术而论,用造价为五千万美元的专用机破译DES密码平均要花两天时间。

但是他与Hellman都预计:

1990年时,破译DES密码的专用机的造价将大幅度下降。

同时,DES的硬件实现方法逐步接近Diffie和Hellman的专用机所要求每秒百万次的速度。

在1993年,MuchaelWiener设计了一个一百万美元的机器,它能在平均3.5小时内,完成DES的穷举攻击,到1990年时,DES是完全不安全的。

实验三消息摘要算法MD5

3.1MD5算法概述

MD5是由RonRivest设计的单向散列函数。

MD表示消息摘要(messagedigest),对于输入的任意长度消息,算法产生128位的散列值(或消息摘要)。

由于MD5算法的散列值计算的快速性和很高的安全强度,使它成为目前比较流行的散列算法。

3.2MD5算法原理与设计思想

MD5算法以任意长度的信息作为输入,其处理操作包括以下几个步骤:

1、消息填充:

对输入信息进行填充使信息的长度(比特数)448模512同余(长度=448mod512),填充的最高位为1,其余位为0。

2、添加消息长度:

将用64位表示的初始信息(填充前)的位长度附加在步骤I的结果后(低位字节优先)。

如果初始长度大于64,仅使用该长度的低64位。

这样,该域所包含的长度值为初始信息长度模64的值。

前两步的结果将产生一个长度为512整数倍比特的信息。

经扩展的信息表示成512bit的分组序列

,扩展信息的长度等于

3、初始化MD5的缓存区:

使用一个128bit的缓存来存放该散列算法的中间及最终结果。

该缓存表示为4个32bit的寄存器(A,B,C,D),这些寄存器被初始化为如下32bit长的整数:

A=67452301;

B=EFCDAB84;

C=48BADCFE;

D=10325476。

这些值以小数在前的格式存储,即字的低位字节放在低地址字节上。

4、以分组为单位进行消息处理:

算法的核心是包含4个“循环”的压缩函数。

4个循环有相似的结构,但每次循环使用不同的原始逻辑函数,在说明中分别表示为F、G、H和I。

每一循环都以当前的I在处理的512bit分组(

)和128bit的缓存值ABCD为输入,然后更新缓存的内容。

每个循环还使用一个64元素表

的四分之一,该表通过正弦函数构建。

的第

个元素(表示为

)的值等于

的整数部分值,其中

的单位是弧度。

因为

是0到1之间的数,因此每个

的元素值均能用32bit表示。

这个表提供了一个“随机化”的32bit模式集,它将消除输入数据的任何规律性。

第四次循环的输出加到第一次循环的输入(

)上产生

5、输出:

所有L个512bit的分组处理完成后,最后一个输出即为产生的消息摘要。

3.3程序设计分析

1、由于MD5应用较为广泛,相关资料比较齐全,所以我结合MD5知识,实现一个对于文件计算MD5值的小工具。

2、主要功能:

计算文件MD5值。

3、界面设计:

分析一些MD5计算工具,所以设计了如下界面。

4、程序设计:

2个文件,1个是实现MD5的工具类,可以实现对字符串和二进制文件计算MD5值。

但考虑对于字符串计算MD5值意义不大,就没有实现对于字符串计算MD5。

另1个是实现图形界面的文件。

3.4运行结果

1、打开文件

2、输出MD5值

3、切换大小写

3.5密码安全性分析

MD5是一种在PGP中被用来单向变换用户口令和对信息签名的单向散列算法。

一种单向散列的强度体现在它能把任意的输入随机化到什么程度并且能产生唯一的输出。

对单向散列的直接攻击可以分为普通直接攻击和“生日”攻击。

1、对MD5的普通直接攻击

所谓直接攻击又叫野蛮攻击。

攻击者为了找到一份和原始明文m散列结果相同的明文m,就是H(m)=H(m)。

普通直接攻击,顾名思义就是穷举可能的明文去产生一个和H(m)相同的散列结果。

对MD5来说散列结果为128-bits,就是说如果攻击者有一台每秒尝试1,000,000,000条明文的机器需要算约10^22年,同时兴许会同时发现m本身:

))。

2、对MD5的生日攻击

生日攻击实际上只是为了找到两条能产生同样散列结果的明文。

记得那个有名的概率生日问题吗?

在N个人中至少有两个人生日相同的概率是多少?

所谓生日攻击实际上只是用概率来指导散列冲突的发现,对于MD5来说如果尝试2^64条明文,那么它们之间至少有一对发生冲突的概率就是50%。

仅此而已,对当今的科技能力来说,它也是不可能的。

一台上面谈到的机器平均需要运行585年才能找到一对,而且并不能马上变成实际的攻击成果。

因为码长和速度的关系,对crypt(3)的生日攻击就成功得多。

3、其他对MD5的攻击

微分攻击被证明对MD5的一次循环是有效的,但对全部4次循环无效。

(微分攻击是通过比较分析有特定区别的明文在通过加密后的变化传播情况来攻击加密体系的。

有一种成功的MD5攻击,不过它是对MD5代码本身做了手脚,是一种crack而不是hack更算不上cryptanalysis了。

而且如果你做了PGP发行包的签名校验,是容易发现代码被替换过了的。

实验四公钥密码算法RSA

4.1公钥密码算法RSA概述

RSA密码体制是美国麻省理工学院(MIT)Rivest、Shami和Adleman于1978年提出来的,它是第一个理论上最为成功的公开密钥密码体制,它的安全性基于数论中的Euler定理和计算复杂性理论中的下述论断:

求两个大素数的乘积是很容易计算的,但要分解两个大素数的乘积,求出它们的素数因子却是非常困难的,它属于NP—完全类,是一种幂模运算的加密体制。

除了用于加密外,它还能用于数字签字和身份认证。

下面将从各个方面来详细对RSA公钥体制进行研究。

4.2算法原理与设计思想

RSA算法的过程

首先产生密钥,过程如下:

(1)随机产生两个长度为K/2位的素数P和Q

(2)计算公钥publicKey=P*Q;

(publicKey是k位的长度)

(3)随机产生一个加密密钥keyE,2<

=keyE<

=Φ(n)-1其中GCD(keyE,Φ(n))=1;

注意这是保证解密密钥keyE*keyDmodΦ(n)=1有解的充要条件,Φ(n)称为n的欧拉函数,值为:

Φ(n)=(P-1)*(Q-1)

(4)求解解密密钥keyD=keyE-1mod(n),keyE-1为解密密钥keyD的逆元,此公式原方程为(keyE*keyDmod(n)=1)

由此公钥,加密密钥,解密密钥全部产生。

其次对明文加密或对密文进行解密,过程如下:

(1)加密:

C=MkeyEmodpublicKey;

其中M表示明文,C表示密文

(2)解密:

M=CkeyDmodpublicKey.其中M表示明文,C表示密文

算法流程图:

4.3程序设计分析

该算法是主要生成大素数的,大素数的产生是算法实现的关键。

虽然原理并不难,但是大素数的生成还是很有难度的,所以我调用了java类库里面的方法,而没有直接写。

主要功能:

对字符串进行RSA加密,并且输出公私钥。

程序设计:

有2个文件,RSAUtils.java为RSA工具类,SKey_RSA为主类。

先获取公私钥并把私钥保存在C:

//Skey_RSA_priv.dat中,之后用公钥加密输入的明文,输出相应的密文,之后用保存的私钥进行解密。

4.4运行结果

4.5密码安全性分析

在公布RSA算法之后,在使用RSA密码体制和分析RSA算法发现了一系列的算法本身脆弱性及其存在的问题。

(1)RSA公钥密码体制在加密或解密变化中涉及大量的数值计算,其加密和解密的运算时间比较长,这比数据加密标准DES的计算量开销大,在一定程度上限制了它的应用范围,以致于实际使用RSA密码体制无法用软件产品,必须用超大规模集成电路的硬件产品。

(2)虽然提高N=P*Q的位数会大大提高RSA密码体制的安全性,但其计算量呈指数增长,以致使其实现的难度增大,实用性降低。

(3)RSA公钥密码体制的算法完整性(指密钥控制加密或解密变换的唯一性)和安全性(指密码算法除密钥本身外,不应该存在其它可破译密码体制的可能性)沿有等进一步完善。

(4)RSA算法面临着数学方法的进步和计算机技术飞跃发展带来的破译密码能力日趋增强的严重挑战。

因子分解问题有了长跑的发展,1995年人类成功地分解了128位十进制数RSA密码算法,破译512位长的RSA指日可待。

尽管如此,自1978年RSA算法公布以来,公开密钥密码已从理论研究进入实际应用研究阶段。

RSA公开密钥密码算法在信息交换过程中使用比较广泛,安全性比较高。

以当前的计算机水平,如选择1024位长的密钥(相当于300位十进制数字)就认为是无法攻破的。

实验总结和体会

首先得说,通过实验去学习密码学,确实比看书学习密码学强,对于密码学实验中接触的几个密码,有了更深层次的了解。

由于想顺便学习java,所以我所有的密码学实验全都是用java编写,但毕竟java也是初学,我在试验中遇到了很大的困难,导致到课程快结束才交实验。

首先我是想做一个提高实验,题目为基于DES的文件加密分割系统,这个难点主要有2点,一个在于如何加密,另一个在于如何分割,参考网上的一些对文件进行DES加密的代码和文件分割的代码,理解和分析后,确定了分割方法和加密方式。

分割采用文件随机读取RandomAccessFile,并使用buf作为缓冲,每次读取1024字节大小,DES加密是对于buf进行加密,解密过程反之。

但由于调用的java类库的DES,解密总是解密不了,经研究,java类库的DES代码,加密后会使加密的buf从1024字节变为1032字节,多了8个字节,与标准的DES加密有些区别,这一点为什么网上没有查到信息。

把解密字符串长度改为1032字节,程序正常运行,但出现另外一个BUG,就是只有文件长度能被分割份数整除,才能加解密成功,否则加解密是不成功的,由于时间关系并没有去深究。

所以把一些基础实验做完,这个程序当做半成品交上去。

Playfair,原理很简单,实现起来也不难,只是由于不熟悉java,才用半天做完,这个实验既让我更深入的认识了playfair,也让我对于java的数据类型,数据操作有了更深入的了解,比如HashSet。

DES,这个是我了解的最全面的一个,是之前一直做“基于DES的文件加密分割系统”的缘故。

所以在这个程序里面,为突出这是一个对DES原理进行演示的程序,加入了显示16轮子密钥功能,并进行图形化。

MD5,我并没有去深究MD5的具体实现原理,但平时在编程和web开发中经常用到MD5,让我很了解这种信息摘要算法的特性。

这次写的计算文件MD5值的小程序,个人认为还是很实用的,比如在前面的“基于DES的文件加密分割系统”实验中,为验证是否解密成功就是使用这个小程序。

在编写这个的时候,对于byte[]和Hex进行了一些区别,我认为这个是做MD5的最大收获。

RSA,原理很简单,该算法是主要生成大素数的,大素数的产生是算法实现的关键。

在编程的过程中遇到了很多问题,通过反复地分析与调试,有的依靠自己将它们一一解决,锻炼了自己的分析问题和解决问题的能力。

但是也有很多不是很懂的地方,例如一些密码算法java的实现和byte[]与Hex等,在一些同学们的帮助下,我最终完成了密码学课程设计的实验,因此感谢同学们的帮助。

同时,通过实际编写密码分析程序,也极大地激发了我对密码学的兴趣,希望在以后的学习中不断地积累和丰富密码学的相关理论与技术。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 笔试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1