毕业设计(论文)-口令共享认证算法研究与实现.doc

上传人:爱问知识人 文档编号:3944860 上传时间:2019-10-10 格式:DOC 页数:34 大小:380.50KB
返回 下载 相关 举报
毕业设计(论文)-口令共享认证算法研究与实现.doc_第1页
第1页 / 共34页
毕业设计(论文)-口令共享认证算法研究与实现.doc_第2页
第2页 / 共34页
毕业设计(论文)-口令共享认证算法研究与实现.doc_第3页
第3页 / 共34页
毕业设计(论文)-口令共享认证算法研究与实现.doc_第4页
第4页 / 共34页
毕业设计(论文)-口令共享认证算法研究与实现.doc_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《毕业设计(论文)-口令共享认证算法研究与实现.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)-口令共享认证算法研究与实现.doc(34页珍藏版)》请在三一文库上搜索。

1、第1章 绪论1.1课题的研究意义1.1.1密码学随着计算机网络的蓬勃发展,网络服务的日益增多,以及电子商务的深入广泛发展,网络的安全问题也随着网络应用的普及和深入而日益突出。现代的网络必须面对各种安全隐患:机密信息的泄露、篡改和伪造,以及网络犯罪、计算机病毒的猖獗给人类造成了极大的威胁。因此,如何堵住网络的安全漏洞已成为当今社会急需解决的重要问题,而信息安全也成为信息科学领域的热点课题,对此方向的研究不但具有重要的理论意义,而且具有广泛的实用价值。古老而年轻的密码技术是保证信息安全的最重要手段之一。密码技术包括加密、消息认证、数字签名等等。现在越来越多的人力物力都投入到信息安全的研发当中,由此

2、可见,密码学的重要性越来越受重视。现在我们简单的对密码学的概念和发展做一些介绍。密码学是研究编制密码和破译密码的技术科学。研究密码变化的客观规律,应用于编制密码以保守通信秘密的,称为编码学;应用于破译密码以获取通信情报的,称为破译学,总称密码学。作为一门学科,密码学的重大突破出现在1976年。当时,Whitfield.Diffie和Martin.Hellman1在密码学的新方向一文中提出了“公钥密码”的概念。与传统加密系统不同,在公钥密码系统中,加密的密钥(公钥)和解密的密钥(私钥)不同,而且从计算的可行角度来看,从一个加密公钥是无法计算出相应的解密私钥。这样,公钥拥有者可以将公钥作为公开参数

3、公布,而无须担心解密用的私钥被泄漏。公钥密码系统解决了私钥密码系统中密钥量随群组增加而激增的问题,而且也使得密钥更加容易管理。尽管Diffie和Hellman没有提出具体的加密方案,但他们的工作引起了大家的广泛关注。近20多年来,公钥密码领域的研究如雨后春笋,出现了一系列的公钥密码算法,还出现了很多新的应用和概念,比如数字签名,认证协议,基于身份的密码系统等等。在公钥密码学领域也逐渐多了许多研究主题,比如门限密码系统,各种特种签名方案和加密方案,密钥管理相关主题等等。1.1.2数字签名数宇签名(Digitial Signature),是对手写签名(Handwriting Signature)的

4、电子模拟。数字签名的相关主体也是签名方(即发送方)和验证方(即接收方)。且类似于手写签名,数字签名也应满足以下条件:可证实性:验证方能够方便而准确地确认、证实发方的签名;发方不可否认性:签名一旦发放,发方就不能否认该签名是他签署的。但数字签名和手写签名之间也有很大的区别,具体表现在三方面:执行媒体不同:手写签名的签署和验证都是人工的,所以签名容易被模仿、伪造;验证容易失误、容易发生纠纷。而数字签名的执行媒体是计算机(或其它类似的电子设备),所以伪造非常困难,验证过程快速、准确,结果公正,不易发生纠纷。签名特征不同:手写签名因人而异,而数字签名则因人、因消息而异。时空效果不同:手写签名的支撑媒体

5、(如纸张)容易损坏、遗失,传送也不方便;而数字签名则易于长期保存,远距离传送。为了实现签名目标,签名方必须公开足够的验证信息,以便使验证方能顺利地检查签名的真伪;但又不能泄露产生签名的机密信息,以防止他人伪造自己的签名。签名一旦发送,消息的签署者就承担了对所签消息的责任。数字签名在包括身份认证识别、数据完整性保护、信息不可否认性及匿名性等许多信息安全领域中都有重要的用途。甚至可以毫不夸张地说,有信息安全的地方,就有数字签名。特别是在大型网络安全通信、电子商务系统的密钥分配、用户认证等过程中,数字签名都具有重要作用。签名与加密有所不同。加密的目的是保护信息不被非授权用户存取,而签名是目的是使消息

6、的接收者确信信息的发送者是谁、信息是否被他人篡改。另外,消息加解密可能是一次性的,所以要求它在解密之前是安全的即可;而一个签名的消息(比如文件、合同等)很可能在签署了许多年之后才验证其有效性,而且还可能要进行多次验证。因此签名的安全性和防伪造性的要求更高。1.1.3 秘密共享和门限签名秘密共享是门限密码的基础。在现实生活中,我们经常需要保存些秘密信息,但如果把秘密信息存放在一个地方的话,安全性得不到保证,我们可以用秘密共享来解决这类问题。秘密共享是一种分割秘密的技术,目的是防止秘密过于集中,自从1979年Shamir2和Blakley3提出这种思想以来,秘密共享的理论和技术达到了空前的发展和应

7、用,特别是其应用至今人们仍十分关注。秘密共享技术是指将一个秘密信息利用密码技术分拆成n个称为子秘密的信息,分发给n个成员,只有找n个合法成员的子秘密才可以恢复该秘密信息其中任何一个或m(mMINFOperl utilmk1mf.pl no-asm VC-WIN32 msnt.makperl utilmk1mf.pl dll no-asm VC-WIN32 msntdll.makperl utilmk1mf.pl no-asm VC-CE msce.makperl utilmk1mf.pl dll no-asm VC-CE mscedll.makperl utilmkdef.pl 32 libe

8、ay mslibeay32.defperl utilmkdef.pl 32 ssleay msssleay32.def添加debug后如下:perl utilmkfiles.pl MINFOperl utilmk1mf.pl debug no-asm VC-WIN32 msnt.mak#添加debugperl utilmk1mf.pl debug dll no-asm VC-WIN32 msntdll.mak#添加debugperl utilmk1mf.pl debug no-asm VC-CE msce.mak#添加debugperl utilmk1mf.pl debug dll no-as

9、m VC-CE mscedll.mak#添加debugperl utilmkdef.pl 32 libeay mslibeay32.defperl utilmkdef.pl 32 ssleay msssleay32.def安装完毕后,生成的头文件放在inc32目录,动/静态库和可执行文件放在outdll目录。另外用户可以在windows集成环境下建自己的工作环境,来编译Openssl,操作比较烦琐,也可以从网上址下载已有的VC+6.0工程。 4.1.2 Openssl应用实例将大数转换成整数字符串。返回值中存放整数字符串,它由内部分配空间,用户必须在外部用OPENSSL_free函数释放该空间

10、。示例:#include #include intmain()BIGNUM*ret1=NULL;char*p=NULL;intlen=0;ret1=BN_bin2bn(242424ab,8, NULL);p=BN_bn2dec(ret1);printf(%sn,p);/* 3617571600447332706 */BN_free(ret1);OPENSSL_free(p);getchar();return 0;4.2 NTL库简介公钥密码算法中的计算都是大整数运算,所取的整数位数都是很大的(这样在计算上不容易被破解)。正确地实现大整数算术并不是一件容易的事。大整数例程几乎总是与平台有关的。通

11、过使用特定平台的性质而得到的效率都很大,因而不能忽视。实现口令共享所使用的数论库是Shoup等开发和维护的NTL库。4.2.1 建立NTL静态库将NTL压缩软件包WinNTL-5_3_2.zip解压到例如c:WinNTL-5_3_2,目录里的子目录doc有使用说明,子目录includeNTL里是类库的全部头文件,子目录src里是静态库的源代码,可如下用VC+6.0编译为静态库供VC+6.0使用:1) 运行VC+6.0;2) 将c:WinNTL-5_3_2includes加入VC+6.0的Include头文件搜索目录;选菜单“Tools|Options|Directories|Include f

12、iles”将“c:WinNTL-5_3_2includes”选入。今后,只要不改变磁盘上的这个目录,用VC+6.0编译程序时就会从这个目录里找到NTL类库的有关头文件。3) 建立Win32静态库(空)工程;选菜单“File|New|Projects|Win32 Static Library”,在“Location”里写“c:000”、ProjectName栏里写“ntllib”(即:要在c:000ntllib里,只要不改变磁盘上的这个目录,用VC+6.0编译程序时就会从这个目录里找到NTL类库的有关头文件。在建立静态库出现的第1步时,不要选Pre-Compiled Header和MFC Sup

13、port;4) 加入src中的源文件,生成静态库NTLLIB.lib;选菜单“Projects | Add To Project | Files”,将src里的全部文件加入;选菜单“Build | Build All”,编译通过后(有一些警告-warring,不妨害编译成功),打开c:000ntllibdebug,取出其中的NTLLIB.lib(有大约10M)放入c: WinNTL-5_3_2lib中(新建一个子目录lib)。5) 在VC+6.0里使用静态库NTLLIB.lib;选菜单“Tools | Options | Directories | Libarary files”将“c:Win

14、NTL-5_3_2lib”选入。今后,只要不改变磁盘上的这个目录,用VC+6.0编译程序时就会从这个目录里找到NTL的静态库。关闭VC+6.0。4.2.2 NTL库用法实例在VC+6.0里使用静态库NTLLIB.lib的控制台编程示例:在C:WinNTL-5_3_2建一子目录mycpp,存放自己的程序,运行VC+6.0,在c:000里建立一个空的控制台工程(选菜单“File | New | Projects | Win32 Console Project”,在“Location”里写“c:000”、ProjectName栏里写“myntl”),今后的控制台编程调试均可在此工程下进行。示例my0

15、1.cpp:计算并显示210000,录入下列代码为my01.cpp并存盘到C:WinNTL-5_3_2mycpp(子目录mycpp为新建)。#include #pragma comment(lib,NTLLIB.lib) /使用NTL静态库int main() ZZ a, b, c; c=1; for(int i=0;i10000;i+)c=2*c; /迭代计算210000 cout c p);char *strq = BN_bn2dec(myDSA-q);char *strg = BN_bn2dec(myDSA-g);ZZ m_q,m_g,m_p; m_p=to_ZZ(strp);m_q=to_ZZ(strq); m_g=to_ZZ(strg);其中bit是生成的大素数p的位数,本程序选择1024位,能够基本满足本设计的密码安全性。p,q,g生成的表达式为myDSA = DSA_generate_parameters(bit, seeds, 6, NULL, NULL, NULL, NULL);该函数的原型为DSA_generate_parameters(int bits,unsigned char *seed,int seed_

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1