密码学课程设计
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 *keyD mod Φ(n)=1 有解的充要条件, Φ(n)称为n的欧拉函数,值为: Φ(n)=(P-1)*(Q-1)
(4) 求解解密密钥keyD=keyE-1 mod (n) ,keyE-1为解密密钥keyD的逆元 ,此公式原方程为(keyE*keyD mod (n)=1)
由此公钥,加密密钥,解密密钥全部产生。 其次 对明文加密或对密文进行解密,过程如下: (1) 加密: C = M(2) 解密: M = C算法流程图:
keyE
mod publicKey;其中M表示明文,C表示密文 mod publicKey. 其中M表示明文,C表示密文
keyD
25
密码学课程设计
图1为加密或解密流程图
4.3 关键算法分析
该算法是主要生成大素数的,
大素数的产生是算法实现的关图3 产生密钥流程图 图2 总的流程图
26
密码学课程设计
键。因此,我没有使用素数生成头文件或者类,而是采取用小素数生成大素数的方法,先找到一些随机素数,然后由随机素数生成大素数。
当算法产生了大素数后,接着就是生成公钥和私钥了,求解密密钥实际上是如何去解一次同余方程 ax ≡ 1 mod n。根据费马定理与欧拉定理给出了同余方程的解为: x=a
(Φ(n)-1)
mod n
由此可得出iKeyD*iKeyE≡ 1 mod Φ(n) 即iKeyD=iKeyE
(Φ(Φ(n))-1)
mod Φ(n)
27
密码学课程设计
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公开密钥密码算法在信息交换过程中使用比较广泛,安全性比较高。以当前的计
28
密码学课程设计
算机水平,如选择1024位长的密钥(相当于300位十进制数字)就认为是无法攻破的。
实验总结和体会
经过这一段时间对密码学课程的深入学习和体会,我掌握和了解到了很多的知识,在密码学课程设计中,将这些知识灵活的应用起来,更加深了对密码学的认识。
第一个实验是古典密码实验。古典密码大多是由单表代换和置换产生的。这些密码体系曾经风靡一时,但是其单一的加密方法使得其很容易被统计攻击所破解。从而有了多表代换密码。但是随着科技的发展,穷举攻击还是能攻破它。虽然古典密码体系现在已经不在使用,但是其对于我们还是有借鉴意义和学习的价值。在编程中,我更深刻的了解到了古典密码的加密解密操作,也进一步的巩固的了课堂的只是。但是我也存在很大的不足。编程能力的不足导致我没有办法做出一个可视化界面,也没有办法把这四种加密方法合成一个程序。在以后的学习中我还要加强我的编程能力,进一步的学习。
第二个实验是ElGamal。在课设中我学会了通过数组随机选取其中的一个数,其次,我练习了一下程序调试,先通过取固定值得到一个正确的结果,再注释掉,取一般值得到一个结果,两相比较来发现并解决问题。同时,在遇到困难问题时,可以通过查书或上网寻找解决问题的办法,但是一定要有自己的思考。并且,我发现,当素数很大时,计算它的生产元时速度会很慢,等的时间很长,因此,我设定当算出一定数量的生成元时就停止继续运算,从算出来的生成元当中选取一个生成元即可。最后,对ELGamal数字签名有了更好的理解,ElGamal算法既能用于数据加密也能用于数字签名,其安全性依赖于计算有限域上离散对数这一难题。
而从第三个实验RSA加密解密实验中,我对 RSA公钥密码体制进行了学习,学习了怎么样选取密钥长度。同时我也考虑到在实际的应用过程中,在满足安全性前提下应当降低计算的复杂度,提高信息加、解密的速度。在RSA算法中,最基本的算法主要包括模加、模乘、模逆和模幂运算。大数运算很费时间,尤其是大整数的模逆和模幂运算。但是整个过程也存在着不少的瑕疵,就是我的算法是在大数运算时间上浪费了很多的时间,导致算法是以牺牲时间复杂度为基础来完成的。但是,我相信,在以后的学习生活中,我将会不断改变改密码的可用性和可靠性。
总之,通过独立完成此次课设,在编程的过程中遇到了很多问题,发现了自己编程能力的不足以及课堂学习的局限,知道了只有通过动手实践才能真正的掌握所学的知识。并且在此次课设中,通过询问同学和上网查询资料,也在自己的努力下完成了编程任务,锻炼了自
29
密码学课程设计
己的分析问题和解决问题的能力。但是也有很多不是很懂的地方,例如一些算法的具体实施和实现,在老师和同学们的帮助下,我最终完成了密码学课程设计的实验,因此,特别感谢任老师和其他同学的帮忙。
同时,通过实际编写密码分析程序,也极大地激发了我对密码学的兴趣,希望在以后的学习中不断地积累和丰富密码学的相关理论与技术。
30