公开密钥加密算法rsa的matlab实现毕业论文(编辑修改稿)内容摘要:

以 %开头,标志编写及修改该 M文件的作者和日期等。 ⑦ 函数体:为清晰起见,它与前面的注释以 “ 空 ” 行相隔。 陕西理工学院毕业论文(设计) 第 8 页 共 41 页 函数调用和参数传递 ( 1)局 部变量和全局变量 : ① 局部( Local)变量:它存在于函数空间内部的中间变量,产生于该函数的运行过程中,其影响范围也仅限于该函数本身。 ② 全局( Global)变量:通过 global 指令, MATLAB 也允许几个不同的函数空间以及基本工作空间共享同一个变量,这种被共享的变量称为全局变量。 ( 2)函数调用 : ① 在 MATLAB中,调用函数的常用形式是: [输出参数 1,输出参数 2,„] = 函数名 (输入参数 1,输入参数 2, „) ② 函数调用可以嵌套,一个函数可以调用别的函数,甚至调用它自己 (递 归调用)。 ( 3)参数传递 : ① MATLAB在函数调用上有一个与众不同之处 :函数所传递的参数具有可调性。 ② 传递参数数目的可调性来源于如下两个 MATLAB永久变量: ③ 函数体内的 nargin 给出调用该函数时的输入参数数目。 ④ 函数体内的 nargout 给出调用该函数时的输出参数数目。 ⑤ 只要在函数文件中包括这两个变量,就可以知道该函数文件调用时的输入参数和输出参数数目。 ⑥ 值得注意: nargin、 nargout 本身都是函数,不是变量,所以用户不能赋值,也不能显示。 ⑦ “ 变长度 ” 输入输出宗量: varargin 、 varrgout。 具有接受 “ 任意多输入 ” 、返回“ 任意多输出 ” 的能力。 ⑧ 跨空间变量传递: evalin。 M 文件的调试 ( 1)编写 M文件时,错误( Bug)在所难免。 错误有两种:语法( Syntax)错误和运行( Runtime)错误。 ( 2)语法错误是指变量名、函数名的误写,标点符号的缺、漏等。 对于这类错误,通常能在运行时发现,终止执行,并给出相应的错误原因以及所在行号。 ( 3)运行错误是算法本身引起的,发生在运行过程中。 相对语法错误而言, 运行错误较难处理。 尤其是 M函数文件,它一旦运行停止,其中间变量被删除一空,错误很难查找。 ( 4)有两种调试方法:直接调试法和工具调试法。 ( 5)直接调试法:可以用下面方法发现某些运行错误。 ( 6)在 M 文件中,将某些语句后面的分号去掉, 迫使 M文件输出一些中间计算结果,以便发现可能的错误。 陕西理工学院毕业论文(设计) 第 9 页 共 41 页 ( 7)在适当的位置,添加显示某些关键变量值的语句(包括使用 disp 在内)。 ( 8)利用 echo 指令,使运行时在屏幕上逐行显示文件内容。 echo on 能显示 M脚本文件; echo FunNsme on 能显示名为 FunNsme 的 M函数文件。 ( 9)在原 M脚本或函数文件的适当位置,增添指令 keyboard。 keyboard 语句可以设置程序的断点。 ( 10)通过将原 M函数文件的函数申明行注释掉,可使一个中间变量难于观察的 M 函数文件变为一个所有变量都保留在基本工作空间中的 M脚本文件。 陕西理工学院毕业论文(设计) 第 10 页 共 41 页 3 RSA 公钥密码体制 算法简介 公钥加密算法的典型代表是 RSA (Rivest , Shamir , Adelman)算法 , 它 是公共密钥 机制中的一种比较成熟的算法。 它 是建立在“大数分解和素数据检测”的理论基础上的,两个大素数相乘在计算机上是容易实现的 , 但将该乘积分解成两个素数因子的计算量却相当巨大 , 大到甚至在计算机上不可能实现,所以就确保了 RSA算法的安全性。 RSA算法是第一个既能用于数据加密又能用于数字签名的算法, 它为公用网络上信息的加密和鉴别提供了一种基本的方法,因此 对它的开发和研究对我们进行知识总结和积累并将所学与实际相结合都有重大的实际意义。 算法的数学基础 基于 RSA算法的数学定理: 定义:设 m 是正整数, 1, 2, 3,„, m 中与 m 互素的数的个数记作 ()m ,称为欧拉函数。 定理 1(欧拉定理) 若整数 a和 m 互素,即 gcd(a,m)=1,则 () 1(mod )mam  特别当 p为素数时,对任意的 a,有 1(mod )pap 定理 2 若 m 1, gcd(a,m)=1,则存在 c,使得 ca 1(modm),称 c 为 a 的模 m 的逆,记作 1a (modm) 定理 3 若 , 1(mod )a b m , 2(mod )a b m ,„ , (mod )ka b m ,则有 12m od( ... )ka b m m m 定理 4 (中国剩余定理) 设 : 12, ,..., km m m 是两两互素的正整数,则对任意的整数 12, ,..., ka a a ,一次同余方程组 : (mod )iix a m (i=1,2,„ ,k)对模 [: 12, ,..., km m m ] 有惟一解, 111 1 1 ( m o d ) ,k k kx M M a M M a m (1 )jjm m j k   1jM 是满足 1 1 ( m o d ) ,1j j jM M m j k    的一个整数,即 1jM 对模 jM 的逆。 RSA 公钥密码算法 算法步骤 首先,产生密钥 (1)随机选取两个大素数 p与 q; (2)计算 n=p*q(公开), Φ( n) =( p1) *( q1)(保密); (3)随机选取正整数 e,使之满足 gcd(e,Φ (n))=1,且 1eΦ (n)。 (4)利用欧几里得算法计算 d,使之满足 ed≡ 1(modΦ (n)), d为保密的解密密钥。 (5)用 E=n,e作为公钥 ,用 D=n,d)作为私钥。 其次,加密和解密,用 RSA公钥密码体制加密时 ,先将明文数字化 ,然后进行分组 ,每组的长度不超过 log(n),再每组单独加密和解密。 陕西理工学院毕业论文(设计) 第 11 页 共 41 页 加密过程如下 : 假设要加密的明文组为 m(0≢ mn),加密过程就是 c=E(m)= em (mod n),c为密文。 解密过程是 : m=D(c)= dc (mod n)。 m就为恢复出的明文,它应该与前面输入的待加密的明文内容一致。 RSA算法整体思路如上所示,在本文中我们 就此算法过程用对应 Matlab语言实现。 参数分析 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); 强素数定义如下 :存在两个大素数 12,pp使得 12( 1), ( 1)p p p p;存在 4 个大素数1 1 2 2, , ,r s r s ,使得 1 1 1 2 2 2 2( 1 ) , ( 1 ) , ( 1 ) , ( 1 )r p s p r p s p   ;称 1 1 2 2, , ,r s r s 为三级素数, 12,pp为二级素数。 ② 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算法中 gcd( , ( )) 1en  的条件是很容易满足的,这是因为任意两个随机数互素的概率 为 15 ,如果 e ,d 比较小,加、解密的速度快,也便于存储,但这必然导致安全性问题,一般的 e,d 的 陕西理工学院毕业论文(设计) 第 12 页 共 41 页 选取原则如下: ① e不可过小。 经验上 e 选 16位的素数,这样既可以有效地防止攻击,又有较快的加、解密速度。 ② 最好选 e 为 mod ( )n 的阶数,即存在 i ,使得 1(mod ( ))ien , i 达到,可以有效地抗击攻击。 ③ d 要大于。 选定 e 后可使用欧几里德算法在多项式时间内计算出 d。 安全性分析 如果说 RSA 体制的安全性等价于因子分解,那就是说,作为公钥选择的( e,n)参数, n 是不能轻易被因子分解的,否则构造单向函数的 T=Φ( n) =(p1)(q1)就没有秘密可言了。 原因很简单,RSA 的安全性依赖于 因子分解的困难性,目前因子分解速度最快方法的时间复杂度为:T=O(exp(sqrt(ln(n)ln ln(n))))=O( )ln(ln).ln( nne ),且 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体制也存在弱密钥现象。 若已知明文组1m =123, 2m =183, 3m =72, 4m =30,假定 n=pq=17X11=187,取 e=7时,可以发现,明文 m经过 RSA连续变换后,就能恢复原文。 比如 :根据 kC =RSA( 1km ) = 1km e ( mod n),则有: 1C = 7123 =183( mod187) 2C = 7183 =72( mod187) 3C = 772 =30( mod187) 4C = 730 =123( mod187) 这时 4C = 1m ,对加密系统来说是不可靠的,必须加以克服。 ( 2)同模攻击的可能性 假定两个用户 1B , 2B 共享一个模为 n的 RSA算法,加密密钥分别为 1em 1e , 2e ,并且 gcd(1e ,2e )=1,如果用户 A想加密同一个明文 m,分别从 1e , 2e 加密得到密文: 1C = 1em mod n和2C = 1em mod n,分别将 1C 送给 1B , 2C 送给 2B。 而攻击者截获两个密文后,可以通过使用扩展。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。