公开密钥加密毕业论文_第1页
公开密钥加密毕业论文_第2页
公开密钥加密毕业论文_第3页
公开密钥加密毕业论文_第4页
公开密钥加密毕业论文_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

公开密钥加密算法RSA的Matlab实现 (陕西理工学院 电信工程系 通信工程专业,级班,陕西 汉中 723003)指导教师:摘要RSA算法是基于数论的公开密钥加密算法,它已经成为现在最流行的公钥加密算法和数字签名算法之一。其算法的安全性基于数论中大素数分解的困难性,所以RSA公钥密码体制算法的关键是如何产生大素数和进行大指数模幂运算。本文首先介绍了RSA 公开密钥加密算法的数学原理,并介绍了几种流行的产生大素数的算法。然后用matlab具体实现公钥加密算法RSA的加密和解密,从而实现了数据的安全传输。关键词 RSA算法;加密;素数The Realization of RSA Algorithm for Public Key Encryption Based on Matlab(Grade 07,Class 3,Major electronics and information engineering ,Communication engineering Dept.,Shaanxi University of Technology, Hanzhong 723003, Shaanxi) Tutor: abstract :The algorithm is based on the theory of RSA public key encryption algorithm, it has become the most popular public key encryption algorithm and digital signature algorithm of one. The safety of the algorithm based on number theory cuhk the difficulty of prime decomposition, so the RSA public key cryptography algorithms is key to how to produce large prime Numbers DaZhi and transmit power operation. This paper first introduced the RSA public key encr -yption algorithm of mathematical theory, and introduces several popular produce large prime Numbers of the algorithm. Then use matlab RSA public key encryption algorithm re -alization of encryption and decryption is realized, and the safety of the data trans -mission.Key words: RSA algorithm; encryption; prime number 目录引言11数据加密概述21.1基本概念21.2 数据加密分类32 Matlab工具介绍62.1 MATLAB语言的主要特点62.2 Matlab的程序设计622.1 脚本文件和函数文件622.2 函数调用和参数传递822.3 MATLAB的程序结构和控制流程83 RSA公钥密码体制103.1 算法简介103.2算法的数学基础103.3 RSA公钥密码算法10 3.3.1 算法步骤103.3.2 参数分析113.3.3 安全性分析123.4 公钥密码体制中安全大素数的生成133.4.1 素数筛选133.4.2 素数检测143.5 RSA的Matlab实现163.5.1算法原理163.5.2 运行过程203.5.3结论分析224 基于RSA的数字签名234.1 数字签名概述234.2 基于RSA的数字签名244.3 RSA数字签名方案的不足245 RSA算法的实际应用和发展255.1 算法的应用255.2算法的改进26结论27致谢28参考文献29附录30附录A:英文资料及翻译30附录B:源程序40引言随着Internet用户的激增,世界正步入网络经济的新时代。如网上购物、网上银行、网上证券等。然而,有一些人利用利用他们所掌握的技术非法侵入他人的计算机系统,窃取、篡改、破坏一些重要的数据,给社会造成巨大的损失。密码技术的发展与应用,对解决信息交换的安全问题,保障数据信息的安全,起着不可忽视的作用。所谓密码技术,就是针对信息进行重新编码,从而达到隐藏信息的内容,使非法用户无法获取信息真实内容的一种手段。目前在网络中,一般采用两种密码体制:对称密钥体制和非对称密钥体制。对称密钥体制中的加密密钥和解秘密钥是相同的,所以又称密秘密钥密码体制。对称密钥算法运算效率高、使用方便、加密效率高,在处理大量数据时被广泛使用,但其关键是要保证密钥的安全,为安全起见,密钥要定期改变,所以,对称密钥就存在一个如何安全管理密钥的问题。与对称密钥体制相对应的非对称密钥体制又称为公开密钥密码体制,它是在1976 年由Diffe 和Hellman 发表的密码学的新方向一文中提出的,从此打破了长期使用单密钥体制的束缚。自此提出公约密码思想以后,涌现出很多的公约密钥算法体系,经过20多年的实践检验,公约系统的应用技术日趋完善,应用领域日趋广泛。公开密钥密码体制,加密密钥和解秘密钥是分开采用一对不同的密钥进行的,分别存在一个公钥和私钥,公钥公开,私钥保密,并且知道其中一个时并不能从中推出另一个。其典型的算法有背包密码、RSA等。 其中RSA公约算法系统因为其可靠安全性,易于实现性,更是受大家的认可和欢迎。RSA加密算法的最大优点就是不需要对密钥通信进行保密,所需传输的只有公开密钥,这样就省去了一条开销很大的密钥传输信道。其保密性强,密钥管理方便,并且具有数字签名、认证和签别等多种功能,特别适合于现代保密通信的需要。大多数使用公钥密码进行加密和数字签名的产品和标准使用的都是RSA算法。RSA的安全性是基于大数因子分解的困难性。目前一般认为RSA需要1024位以上的字长才有安全保障。由于RSA所采用的模幂运算耗时太多,因此它通常只能用于加密少量数据或者加密密钥。需要注意的是,RSA的安全性只是一种计算安全性,绝对不是无条件的安全性,这是由它的理论基础决定的。所以,在实现RSA算法的过程中,每一步都应该尽量从安全性方面考虑。本文就RSA算法以及如何用Matlab语言实现给于了详细的分析。1 数据加密概述 密码学是一门古老而深奥的学科,它对一般人来说是陌生的,因为长期以来,它只在很少的范围内,如军事、外交、情报等部门使用。计算机密码学是研究计算机信息加密、解密及其变换的科学,是数学和计算机的交叉学科,也是一门新兴的学科。随着计算机网络和计算机通讯技术的发展,计算机密码学得到前所未有的重视并迅速普及和发展起来。在国外,它已成为计算机安全主要的研究方向,也是计算机安全课程教学中的主要内容。密码是实现秘密通讯的主要手段,是隐蔽语言、文字、图象的特种符号。凡是用特种符号按照通讯双方约定的方法把电文的原形隐蔽起来,不为第三者所识别的通讯方式称为密码通讯。在计算机通讯中,采用密码技术将信息隐蔽起来,再将隐蔽后的信息传输出去,使信息在传输过程中即使被窃取或载获,窃取者也不能了解信息的内容,从而保证信息传输的安全。 任何一个加密系统至少包括下面四个组成部分: (1)未加密的报文,也称明文。 (2)加密后的报文,也称密文。 (3)加密解密设备或算法。 (4)加密解密的密钥。 发送方用加密密钥,通过加密设备或算法,将信息加密后发送出去。接收方在收到密文后,用解密密钥将密文解密,恢复为明文。如果传输中有人窃取,他只能得到无法理解的密文,从而对信息起到保密作用。1.1 基本概念数据加密技术就是指将一个信息或明文经过加密钥匙及加密函数转换,变成无意义的密文,而接收方则将此密文经过解密函数.解密钥匙还原成明文。加密技术是网络安全技术的基石。明文,即加密前的真实的数据或信息,它是可以被外界所识别,它指代的含义比较广泛,比如用户A要将一份文件发送给用户B,那么我们就将用户A手里所拿的那份文件称之为明文。密文,就是对信息经过一定的处理,使它变成无意义的乱码,非指定用户无法对它进行识别,例如A使用密钥K加密消息并将其发送给B,B收到加密的消息后,使用密钥K对其解密以恢复原始消息,那么在这一过程当中A在途中发送给B的东西我们就叫它密文,因为这个文件除B外,其他人得到它也没有任何意义,这就保证了信息传送的保密性。完成加密和解密的算法成为为密码体制。人们一方面要把自己的信号隐蔽起来,另一方面则想把别人的隐蔽信息挖掘出来,于是就产生了密码分析的逆科学密码分析。密码分析研究的问题是如何把密文转换成明文。把密文转换成明文的过程称为破译。破译也是进行函数变换,变换过程中使用的参数也叫密钥。 一般地,如果求解一个问题需要一定量的计算,但环境所能提供的实际资源却无法实现,则这种问题是计算上不可能的。如果一个密码体制的破译是计算上不可能的。则称该密码体制是计算上安全的。密码体制必须满足三个基本要求:(1)对所有的密钥、加密和解密都必须迅速有效;(2)体制必须容易使用;(3)体制的安全性必须只依赖于密钥的保密性。密码体制要实现的功能可分为保密性和真实性两种。保密性要求密码分析员无法从截获的密文中求出明文。一般情况下一个密码体制的保密性包括两项要求:(1)即使截获了一段密文C,甚至知道了与它对应的明文M,密码分析要从系统中求出解密变换,仍然是计算上不可行的。(2)密码分析员要由截获的密文C中系统的求出明文M是计算上不可能的。数据的真实性要求密码分析员无法用虚假的密文代替真是密文而不被察觉,它也包括两个要求:(1)对于给定的C,即使密码分析员知道了对应于它的明文M,要系统的求出加密变换仍然是计算上不可能的。(2)密码分析员要系统地找到密文,使其是明文空间上有意义的明文,这在计算上是不可能的。1.2 数据加密分类专用密钥:又称为对称密钥或单密钥,加密和解密时使用同一个密钥,即同一个算法。如DES和MIT的Kerberos算法。单密钥是最简单方式,通信双方必须交换彼此密钥,当需给对方发信息时,用自己的加密密钥进行加密,而在接收方收到数据后,用对方所给的密钥进行解密。当一个文本要加密传送时,该文本用密钥加密构成密文,密文在信道上传送,收到密文后用同一个密钥将密文解出来,形成普通文体供阅读。在对称密钥中,密钥的管理极为重要,一旦密钥丢失,密文将无密可保。这种方式在与多方通信时因为需要保存很多密钥而变得很复杂,而且密钥本身的安全就是一个问题。公开密钥:又称非对称密钥,加密和解密时使用不同的密钥,即不同的算法,虽然两者之间存在一定的关系,但不可能轻易地从一个推导出另一个。有一把公用的加密密钥,有多把解密密钥,如RSA算法。 非对称密钥由于两个密钥(加密密钥和解密密钥)各不相同,因而可以将一个密钥公开,而将另一个密钥保密,同样可以起到加密的作用。 在这种编码过程中,一个密码用来加密消息,而另一个密码用来解密消息。在两个密钥中有一种关系,通常是数学关系。公钥和私钥都是一组十分长的、数字上相关的素数(是另一个大数字的因数)。有一个密钥不足以翻译出消息,因为用一个密钥加密的消息只能用另一个密钥才能解密。每个用户可以得到唯一的一对密钥,一个是公开的,另一个是保密的。公共密钥保存在公共区域,可在用户中传递,甚至可印在报纸上面。而私钥必须存放在安全保密的地方。任何人都可以有你的公钥,但是只有你一个人能有你的私钥。它的工作过程是:“你要我听你的吗?除非你用我的公钥加密该消息,我就可以听你的,因为我知道没有别人在偷听。只有我的私钥(其他人没有)才能解密该消息,所以我知道没有人能读到这个消息。我不必担心大家都有我的公钥,因为它不能用来解密该消息。” 公钥加密体制具有以下优点:(1) 密钥分配简单。(2) 密钥的保存量少。(3) 可以满足互不相识的人之间进行私人谈话时的保密性要求。(4) 可以完成数字签名和数字鉴别。密码分析用户B解密加密用户A 明文M 密文C=E(M,) M=D(C,) 私钥空间公钥空间 (密钥本) 图1.1 公钥密码体制示意图对称密钥:对称密钥是最古老的,一般说“密电码”采用的就是对称密钥。由于对称密钥运算量小、速度快、安全强度高,因而目前仍广泛被采用。 DES是一种数据分组的加密算法,它将数据分成长度为64位的数据块,其中8位用作奇偶校验,剩余的56位作为密码的长度。第一步将原文进行置换,得到64位的杂乱无章的数据组;第二步将其分成均等两段;第三步用加密函数进行变换,并在给定的密钥参数条件下,进行多次迭代而得到加密密文。 非对称加密技术:数字签名一般采用非对称加密技术(如RSA),通过对整个明文进行某种变换,得到一个值,作为核实签名。接收者使用发送者的公开密钥对签名进行解密运算,如其结果为明文,则签名有效,证明对方的身份是真实的。当然,签名也可以采用多种方式,例如,将签名附在明文之后。数字签名普遍用于银行、电子贸易等。 数字签名:数字签名不同于手写签字,数字签名随文本的变化而变化,手写签字反映某个人个性特征,是不变的;数字签名与文本信息是不可分割的,而手写签字是附加在文本之后的,与文本信息是分离的。 值得注意的是,能否切实有效地发挥加密机制的作用,关键的问题在于密钥的管理,包括密钥的生存、分发、安装、保管、使用以及作废全过程。2 Matlab工具介绍 2.1 MATLAB语言的主要特点(1)具有丰富的数学功能。 包括矩阵各种运算。如:正交变换、三角分解、特征值、常见的特殊矩阵等。 包括各种特殊函数。如:贝塞尔函数、勒让德函数、伽码函数、贝塔函数、椭圆函数等。 包括各种数学运算功能。如:数值微分、数值积分、插值、求极值、方程求根、FFT 、常微分方程的数值解等。(2)具有很好的图视系统。 可方便地画出两维和三维图形。 高级图形处理。如:色彩控制、句柄图形、动画等。 图形用户界面GUI制作工具,可以制作用户菜单和控件。使用者可以根据自己的需求编写出满意的图形界面。(3)可以直接处理声言和图形文件。 声言文件。如: WAV文件(例:wavread,sound等)。 图形文件。如: bmp 、gif 、 pcx 、tif 、jpeg等文件。(4). 具有若干功能强大的应用工具箱。如:SIMULINK、COMM、DSP、 SIGNAL等16种工具箱。(5). 使用方便,具有很好的扩张功能。 使用MATLAB语言编写的程序可以直接运行,无需编译。 可以M文件转变为独立于平台的EXE可执行文件。 MATLAB的应用接口程序API是MATLAB提供的十分重要的组件 ,由 一系列接口指令组成 。用户就可在FORTRAN或C中 , 把MATLAB当作计算引擎使用 。 (6). 具有很好的帮助功能 提供十分详细的帮助文件(PDF 、HTML 、demo文件)。 联机查询指令:help指令(例:help elfun,help exp,help simulink),lookfor关键词(例: lookfor fourier )。2.2 Matlab的程序设计 2.2.1 脚本文件和函数文件M文件有两种形式 :脚本文件(Script File)和函数文件(Function File )。这两种文件的扩展名,均为“ . m” 。(1)M脚本文件: 对于一些比较简单的问题 ,在指令窗中直接输入指令计算 。 对于复杂计算,采用脚本文件(Script file)最为合适 。 MATLAB只是按文件所写的指令执行 。 M脚本文件的特点是: 脚本文件的构成比较简单,只是一串按用户意图排列而成的(包括控制流向指令在内的)MATLAB指令集合。 脚本文件运行后 ,所产生的所有变量都驻留在 MATLAB基本工作空间(Base workspace)中。只要用户不使用清除指令(clear), MATLAB指令窗不关闭,这些变量将一直保存在基本工作空间中。(2)M函数文件: 与脚本文件不同 ,函数文件犹如一个“黑箱”,把一些数据送进并经加工处理,再把结果送出来。 MATLAB提供的函数指令大部分都是由函数文件定义的。 M函数文件的特点是: 从形式上看,与脚本文件不同 ,函数文件的笫一行总是以 “function”引导的“函数申明行”。 从运行上看 ,与脚本文件运行不同 ,每当函数文件运行, MATLAB就会专门为它开辟一个临时工作空间,称为函数工作空间( Function workspace) 。当执行文件最后一条指令时 ,就结束该函数文件的运行,同时该临时函数空间及其所有的中间变量就立即被清除。 MATLAB允许使用比 “标称数目 ”较少的输入输出宗量,实现对函数的调用 。(3)M文件的一般结构: 由于从结构上看 ,脚本文件只是比函数文件少一个“函数申明行”,所以只须描述清楚函数文件的结构 。 典型M函数文件的结构如下 : 函数申明行:位于函数文件的首行,以关键functio开头,函数名以及函数的输入输出宗量都在这一行被定义。 笫一注释行:紧随函数申明行之后以%开头笫一注释行。该行供lookfor关键词查询和 help在线帮助使用 。 在线帮助文本区:笫一注释行及其之后的连续以%开头的所有注释行构成整个在线帮助文本。 编写和修改记录:与在线帮助文本区相隔一个“空”行,也以%开头,标志编写及修改该M文件的作者和日期等 。 函数体:为清晰起见,它与前面的注释以“空”行相隔。2.2.2 函数调用和参数传递(1)局部变量和全局变量: 局部(Local)变量:它存在于函数空间内部的中间变量,产生于该函数的运行过程中,其影响范围也仅限于该函数本身 。 全局(Global)变量:通过 global 指令,MATLAB也允许几个不同的函数空间以及基本工作空间共享同一个变量,这种被共享的变量称为全局变量。(2)函数调用: 在MATLAB中,调用函数的常用形式是:输出参数1,输出参数2, = 函数名(输入参数1,输入参数2, ) 函数调用可以嵌套,一个函数可以调用别的函数,甚至调用它自己 (递归调用)。(3)参数传递: MATLAB在函数调用上有一个与众不同之处 :函数所传递的参数具有可调性 。 传递参数数目的可调性来源于如下两个MATLAB永久变量: 函数体内的 nargin 给出调用该函数时的输入参数数目。 函数体内的 nargout 给出调用该函数时的输出参数数目。 只要在函数文件中包括这两个变量,就可以知道该函数文件调用时的输入参数和输出参数数目。 值得注意:nargin、 nargout 本身都是函数,不是变量,所以用户不能赋值,也不能显示。 “变长度”输入输出宗量:varargin 、 varrgout。具有接受 “任意多输入” 、返回“任意多输出”的能力 。 跨空间变量传递:evalin。2.2.3 M文件的调试(1)编写 M文件时,错误(Bug)在所难免。错误有两种:语法(Syntax)错误和运行(Run-time)错误。(2)语法错误是指变量名、函数名的误写,标点符号的缺、漏等。对于这类错误,通常能在运行时发现,终止执行,并给出相应的错误原因以及所在行号。(3)运行错误是算法本身引起的,发生在运行过程中。相对语法错误而言,运行错误较难处理 。尤其是M函数文件,它一旦运行停止,其中间变量被删除一空,错误很难查找。(4)有两种调试方法:直接调试法和工具调试法。(5)直接调试法:可以用下面方法发现某些运行错误。(6)在M文件中,将某些语句后面的分号去掉, 迫使M文件输出一些中间计算结果,以便发现可能的错误。(7)在适当的位置,添加显示某些关键变量值的语句(包括使用 disp 在内)。(8)利用 echo 指令,使运行时在屏幕上逐行显示文件内容。echo on 能显示M脚本文件;echo FunNsme on 能显示名为FunNsme 的M函数文件。(9)在原M脚本或函数文件的适当位置,增添指令 keyboard 。 keyboard 语句可以设置程序的断点 。(10)通过将原M函数文件的函数申明行注释掉,可使一个中间变量难于观察的M函数文件变为一个所有变量都保留在基本工作空间中的M脚本文件。 3 RSA公钥密码体制3.1 算法简介公钥加密算法的典型代表是RSA (Rivest , Shamir , Adelman)算法 ,它是公共密钥机制中的一种比较成熟的算法。它是建立在“大数分解和素数据检测”的理论基础上的,两个大素数相乘在计算机上是容易实现的, 但将该乘积分解成两个素数因子的计算量却相当巨大, 大到甚至在计算机上不可能实现,所以就确保了RSA算法的安全性。RSA算法是第一个既能用于数据加密又能用于数字签名的算法, 它为公用网络上信息的加密和鉴别提供了一种基本的方法,因此对它的开发和研究对我们进行知识总结和积累并将所学与实际相结合都有重大的实际意义。3.2 算法的数学基础基于RSA算法的数学定理:定义:设m 是正整数,1,2,3,m 中与m 互素的数的个数记作,称为欧拉函数。定理1(欧拉定理) 若整数a和m 互素,即gcd(a,m)=1,则 特别当p为素数时,对任意的a,有定理2 若m1, gcd(a,m)=1,则存在c,使得 ca1(modm),称c 为a 的模m 的逆,记作(modm)定理3 若, , ,则有 定理4 (中国剩余定理) 设: 是两两互素的正整数,则对任意的整数一次同余方程组: (i=1,2,k)对模: 有惟一解, 是满足 的一个整数,即对模的逆。3.3 RSA公钥密码算法3.3.1 算法步骤 首先,产生密钥(1)随机选取两个大素数p与q;(2)计算n=p*q(公开),(n)=(p-1)*(q-1)(保密);(3)随机选取正整数e,使之满足gcd(e,(n)=1,且1e(n);(4)利用欧几里得算法计算d,使之满足ed1(mod(n),d为保密的解密密钥;(5)用E=作为公钥,用D=作为私钥。其次,加密和解密,用RSA公钥密码体制加密时,先将明文数字化,然后进行分组,每组的长度不超过log(n),再每组单独加密和解密。加密过程如下:假设要加密的明文组为m(0mn),加密过程就是c=E(m)=(mod n),c为密文;解密过程是:m=D(c)=(mod n);m就为恢复出的明文,它应该与前面输入的待加密的明文内容一致。RSA算法整体思路如上所示,在本文中我们就此算法过程用对应Matlab语言实现。3.3.2 参数分析RSA 算法的安全性等价于分解n 的困难性,但是在实际的应用中,很多时候是因为算法实现的细节漏洞导致被攻击,所以在RSA算法构造密码系统时,为了保证系统的安全性需要仔细地选择使用的参数。RSA 算法主要的参数有3 个:模数n 、加密密钥e和解密密钥d 。(1)算法模n的确定:RSA模数n =p*q是RSA算法安全性的核心,如果模数n被分解,则RSA公钥密码体制将立刻被攻破,所以选择合适的n是实现RSA 算法的重要环节。一般来讲,模数n的选择可以遵守以下4个原则: n=p*q , 要求p 和q 为强素数(Strong Prime);强素数定义如下:存在两个大素数使得;存在4 个大素数,使得;称为三级素数,为二级素数。 p 和q 之差要大,相差几位以上; p 1 与q 1 的最大公因子要小; p 和q 要足够大。这是应用R S A 算法要遵守的最基本原则,如果RSA算法是安全的,则n=p*q 必须足够大,使得因式分解模数n 在计算上是不可行的,下面给出的是一般性使用原则: 临时性(Casual)384bit,经过努力可以破译; 商用性(Commercial)512bit,可由专业组织破译; 军用性(Military)1024b it,专家预测十年内不可破译。随着计算机能力的不断提高和分布式运算的发展,没有人敢断言具体的安全密钥长度。(2)算法e 与d 的选取原则:在RSA算法中的条件是很容易满足的,这是因为任意两个随机数互素的概率为,如果e ,d 比较小,加、解密的速度快,也便于存储,但这必然导致安全性问题,一般的e,d 的选取原则如下: e不可过小。经验上e 选16位的素数,这样既可以有效地防止攻击,又有较快的加、解密速度。 最好选e 为的阶数,即存在i ,使得,i 达到,可以有效地抗击攻击。 d 要大于。选定e 后可使用欧几里德算法在多项式时间内计算出d。3.3.3 安全性分析 如果说RSA体制的安全性等价于因子分解,那就是说,作为公钥选择的(e,n)参数,n是不能轻易被因子分解的,否则构造单向函数的T=(n)=(p-1)(q-1)就没有秘密可言了。原因很简单,RSA的安全性依赖于因子分解的困难性,目前因子分解速度最快方法的时间复杂度为:T=O(exp(sqrt(ln(n)ln ln(n)=O(),且n因子被分解,就意味着RSA系统被攻破。反过来,能攻破RSA系统,表明可以分解n的因子,不过这不是绝对的。所以出于安全性考虑,在设计RSA系统时,对n的选择是很重要的。在RSA算法中,若n =p*q 被因数分解,则RSA便被攻破。因为若p,q 已知,则(n)=(p- 1)*(q - 1)便可以计算出,解密密钥d 便可利用欧几里得算法求出。因此RSA的安全性是依赖于因数分解的困难性。在上一节的参数分析中我们重点讲了对各参数选取原则,这里不再重复。在许多实际应用中,人们总希望使用位数较短的密钥d,一是可降低解出或签名的时间,二是能够满足计算能力低于主机的硬件芯片的需求,比如IC卡中的CPU处理。现在我们就分析几个RSA体制的安全性问题。(1)弱密钥情形类似其他密码体制一样,RSA体制也存在弱密钥现象。若已知明文组=123,=183,=72,=30,假定n=pq=17X11=187,取e=7时,可以发现,明文m经过RSA连续变换后,就能恢复原文。比如:根据=RSA()=(mod n),则有: =183(mod187) =72(mod187) =30(mod187) =123(mod187)这时=,对加密系统来说是不可靠的,必须加以克服。(2)同模攻击的可能性假定两个用户,共享一个模为n的RSA算法,加密密钥分别为,并且gcd(,)=1,如果用户A想加密同一个明文m,分别从,加密得到密文:= mod n和=mod n,分别将送给,送给。而攻击者截获两个密文后,可以通过使用扩展欧几里得算法得到r,s,使得r. +s. =1.然后按下列计算: . mod n=()()mod n= m其中,=为同一明文,表明即使RSA密码系统很安全,但攻击者破获A发送的明文也是可能的。所以实际中建议不同用户不可使用公共的模n。除此之外,不同用户选用的素数也是不能相同的。否则,任何人都可以用欧几里得算法获得(,)= p,结果容易得到,的分解式。(3)由密文泄露明文相关的部分信息量与其他一些密码弱点一样,RSA体制同样存在将明文的部分信息由密文泄露出去的可能。比如给定密文:C=mod ,由可知,其中e必为 奇数情形。根据Jcaobi符号容易推出. 因此,只要给定一个密文C,不用通过解密密文就能有效的计算出结果,即反映了在RSA密码系统中,通过加密密文也会泄露一些有关的明文信息。 3.4 公钥密码体制中安全大素数的生成构造RSA公钥密码体制,关键就在于选取大素数p ,q 。产生素数的方法可分为以下两类:确定性素数的产生方法和概率性素数的产生方法。确定性素数产生方法的优点在于产生的数一定是素数,缺点是产生的素数带有一定的限制;而概率性素数产生方法的缺点在于它不能证明该数是素数,也就是说,产生的数只能是伪素数,为合数的可能性很小。但这种可能依然存在。优点在于使用概率性素数产生方法,产生的伪素数速度很快,构造的伪素数无规律性。于是在构造RSA体制中的大素数时,首先利用概率性素数测试产生伪素数,然后再利用确定性素数测试法进行检验,这样可以发挥二者的优越性。所以文中的算法基于这个原理,预先对密钥素数进行筛选,采用Montgomery模乘算法优化的概率性素数产生方法Miller-Rabin算法进行检测,最后用确定性素数产生方法Pocklington定理进行验证。3.4.1 素数筛选对于产生的大数,在进行后面的素数判别时会比较耗时,所以,在把大数送入到素数判别程序前,将一些容易判别出的合数过滤掉。这里采用大数除以小素数过滤掉一部分合数,选取53个小素数进行对大数的过滤。算法的步骤如下:(1) 随机产生一个大整数n ;(2) 选取从2 开始的一组个数约为53个的素数,记为ai ;(3) i 0;(4) 当i 53时,计算y n (mod ai);(5) 若y = 0,表示没有余数,则数n 不为素数,结束;否则,i i+ 1,转(4);(6) 若i= 52,返回n 为素数。3.4.2 素数检测素性检测就是判断一个整数是否为素数的准则。最简单的素性检测就是“试除法”,对于给定的数n ,用p 进行试除(0p)。检测一个数n 是素数的最确定的方法就是验证它不能被2和之间的任何数整除,但这种方法计算量太大,十分耗时,在实际中需要更有效的素性检测方法。Miller- Rabin算法检测是实际中应用最多的素性检测,它在计算上较省时、容易实现且错误概率较低。(1). Miller - Rabin算法Miller-Rabin算法是Fermat算法的一个变形改进,它的理论基础是由Fermat定理引申而来。Fermat定理:n是一个奇素数,a是任何整数(1an-1) ,则a= 1(mod n)。Miller-Rabin算法的理论基础:如果n是一个奇素数,将n-1= 2m ,r是非负整数,m是正奇数, a 是和n互素的任何整数,那么a1(mod n)或者对某个h(0hr-1),等式a 1(mod n)成立,其中w =2m 。这个理论是通过一个事实经由Fermat定理推导而来:n是一个奇素数,则方程x=1mod n有1两个解。Miller-Rabin算法的步骤如下: 将n-1表示成2m(其中r 是非负整数, m 是正奇数) ; 随机产生一个整数a(1an-1); i0 ,计算xa(mod n); 若x=1或x=n-1,则n 通过测试,转(7); 若i=1,则n为非素数,结束;否则转(6); 当ir 时,ii+1,xx(mod n),若x=n-1,则n 通过测试,转(7)。否则转(5); 返回n为素数。Miller-Rabin算法并不是一个确定算法。若n 是奇合数,则n通过以a 为基的Miller-Rabin算法测试的数目最多为(n-1)/4,1an - 1。若n 是正整数,选k个小于n 的正整数,以这k 个数作为基用Miller-Rabin算法进行测试,若n 是合数,k 次测试全部通过的概率为(1/4)。比如: k = 100, n 是合数, 但测试全部通过的概率为(1/4), 这是很小的数,说明这样的事情几乎不可能发生。(2). 采用Montgomery 算法进行优化Miller-Rabin算法最耗时的步骤是(3)和(6)的模幂运算。Montgomery算法将部分积对任意的N 取模转化为对基数R 取模,简化了计算过程, 提高了模幂运算的速度.Montgomery算法的理论基础是:设N 和R是互素的两个整数,且RR- NN=1(N=-Nmod R) ,则对于任意整数T,当M = TNmod R 时,( T+ MN)/R 为整数,且满足(T+MN) / R =TRmod N 。上述理论中,T+MN =T+(TN- kR)N =T(1+ NN)-kRN = TRR - kRN ,为R的倍数,所以(T+MN)/R为整数。又因为T+ MN =T modN , 所以可以很容易推导出(T+ MN)/R= TRmodN 。可以看出,Montgomery在算法中选取0 T N R ,这样(T+MN)/R2N ,(T+MN)/R与TRmod N 也就至多相差一个N ,只需一次额外的大数减法。这样就给出了满足0TNR 的任意整数T时TR mod N的快速算法, 那么就可以类似于ABmodN 的模乘运算,其中0A ,B N 。所以S=Mon(A ,B ,N)=A*B*Rmod N的计算步骤如下: 计算AAR mod N ,BB R mod N ,TAB; 选择与N互素的基数R ,并选取R和N,满足0R N 及0 N T; 计算S T+(Tmod R )Nmod RN/R ; 若SN , S=S-N ; 返回S 。然而,这样计算出的结果S 并不是严格意义上的模乘ABmod N ,而是多了一个因子R,那么模乘ABmod N 可以通过两次Montgomery算法得到,即:ABmod N =(A*B *Rmod N)*Rmod N =Mon(A,B,N) *R mod N = S*1*R mod N =Mon(Mon(A ,B,N),1,N)。所以模幂运算Z=a(mod n) 的计算步骤如下: im -1; 计算ZMon(a,1,n); 计算ZMon(Z,1,n); ii- 1,若i 0,转(3),否则转(5); 返回Z。可以看出, 如果仅仅是求模乘运算,Montgomery算法需要用到一般的模运算和模逆运算进行预处理,Montgomery算法并不能有任何速度上的提高,但对于模幂运算,模幂运算中约有(3log e)/2次的模乘运算,这样预处理时,只要处理一次就可以进行多次的没有除法的Montgomery模乘运算,这样将大大提高模幂运算的速度,进而提高Miller-Rabin算法的速度。(3). 素数验证采用Pocklington定理对素数进行验证,基于Pocklington定理的确定性素数产生方法,它需要已知n - 1的部分素因子。Pocklington定理:设n = R *F + 1, 这里F=,其中q,q,q是不同的素数,若存在a 满足:a1(mod n)且gcd(a- 1,n) = 1,其中j =1, r 。那么n 的每一个素因子p 都有p=F *m + 1的形式(m 1)。于是若F ,则n 为素数。则此算法的步骤如下:, 分解n - 1,使n - 1= R F ,其中F ; 分解F ,使F = ,其中q( j = 1,2,r)为不同的素数; a 1; a a + 1; 若a (mod n) = 1,则转(7); 转(4) ,否则n 可能不是素数,转(8); 若对于任意的j(j =1,2,r),gcd(a- 1,n)= 1,则n 是素数,否则转(4); 退出。3.5 RSA的Matlab实现3.5.1算法原理 RSA算法的理论基础是数论中的欧拉函数,他的安全性基于大数分解的困难性,在理论上要计算两个大素数的乘积是容易的,但反过来要把一个大数分解成两个素数因子相乘的形式是很困难的,正是由于这个原因保证了此算法的安全性。RSA的安全性依赖于大数分解。公钥和私钥都是两个大素数 ( 大于 100个十进制位)的函数。据猜测,从一个密钥和密文推断出明文的难度等同于分解两个大素数的积。 密钥对的产生:选择两个大素数,p 和q 。计算:n = p * q 。然后随机选择加密密钥e,要求 e 和 ( p - 1 ) * ( q - 1 ) 互质。最后,利用Euclid 算法计算解密密钥d, 满足 e * d = 1 ( mod ( p - 1 ) * ( q - 1 ) ) 其中n和d也要互质。数e和 n是公钥,d是私钥。两个素数p和q不再需要,应该丢弃,不要让任何人知道。 加密信息 m(二进制表示)时,首先把m分成等长数据块 m1 ,m2,., mi ,块长s,其中 2s = n, s 尽可能的大。对应的密文是:ci = mie ( mod n ) ( a ) 解密时作如下计算: mi = cid ( mod n ) ( b )算法流程(1). 产生密钥 任意选取两个不同的大质数p和q,计算乘积n=p*q; 任意选取一个大整数e,e与(p-1)*(q-1)互素,整数e用做加密密钥。注意:e的选取是很容易的,例如,所有大于p和q的素数都可用。 确定解密密钥d: d * e = 1 mod(p - 1)*(q - 1) 根据e、p和q可以容易地计算出d。 公开整数n和e,但是不公开d;开始随机选取两个素数和计算计算欧拉函数在2和之间随机选择一个和互素的加密密钥已知和欧拉函数,利用,求出解密密钥得出:公钥为,私钥为结束图3.1产生密钥(2). 加密输入待加密的明文,经过hash变换求出其ASCALL码值,再经过加密算法:,得到密文。将明文P (假设P是一个小于r的整数)加密为密文C,计算方法为:C= mie ( mod n )开始打开要加密的明文成功打开文件? N Y新建一个文件,用于存密文 成功新建文件? NY Y将明文的扩展名逐字节加密,并将结果写入密文从明文中一次读入固定长度的字节到缓冲结束对缓冲区的数据逐字节加密,并将结果写入密文关闭明文明文的数据全部读出了吗?关闭密文NY图3.2 加密流程图(3). 解密经过解密算法,将密文回复为原来的明文。将密文C解密为明文P,计算方法为:P = cid ( mod n )打开要解密的密文成功打开文件吗?从密文中读出固定长度的数据到密文缓冲 然而只根据r和e(不是p和q)要计算出d是不可能的。因此,任何人都可对明文进行加密,但只有授权用户(知道d)才可对密文解密。 开始对密文缓冲中的数据解密,结果存入明文缓冲从密文中读出加密过的明文扩展名对密文形式的明文扩展名进行解密,并将解密得到的扩展名与新明文的文件名连接成新明文的全名 用新明文的全名创建一个文件将明文缓冲区中的解密结果写入新明文成功创建文件?结束密文中的数据全部读出了吗?关闭密文关闭新明文图3.3 解密流程图3.5.2 运行过程 具体实现过程如下:在matlab环境下新建

温馨提示

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

评论

0/150

提交评论