一种常用的非对称加密算法. 非对称加密算法家族包含了鼻祖DH算法,基于因子分解难题的RSA算法,基于离散对数难题的ElGamal算法和ECC算法等.在本人对接过的多家银行和第三方支付接口中,RSA算法是非对称加密中的网红花旦,今天就浅谈下RSA算法.
二.RSA应用在JAVA中运用RSA算法,在网上都有成熟的案例,不再重复.公私钥的生成可以通过现成的工具软件或者写java代码来生成RSA公私钥对,java密钥类及keytools都可以.常用的RSA密钥长度有1028位和2048位,JAVA7本身实现了1028位.如果使用2048位可通过BouncyCastle实现.
三.RSA原理 1个数学题RSA算法是基于一个数学题:大数因子分解难题,一个大数很难分解成2个素数的乘积.
素数:只能被1和本身整除的数,也叫质数. 自然界中的素数有2,3,5,7,11等,注意1不是素数.
举例:一个数是15,可以分解成素数3乘以素数5, 但一个很大很大的数,很难分解成2个素数.但是反过来,即使2个很大的素数,计算2个数的乘积是容易的.
思考: 为什么不可以?穷举不可以吗?
答案: 素数是无穷的,几百年来,人类总共发现了 51 个梅森素数,最大素数是2^82,589,933-1,对于一个很大的数N,比如1024位的二进制数,穷举需要从2开始穷举到N/2寻找素数,以目前计算机能力还做不到.
基于大数的因子分解计算较复杂,我就用一个小的"大数"来解释,原理都一样.
这个"大数"是15.
任务背景: 风清扬要通过书信传授独孤九剑给令狐冲,又不能泄露武功秘籍.
令狐冲先选出2个素数,分别是3和5,将2个数字相乘.
公式: n= p*q. 其中n=15,p=3,q=5;
准备φ(n).
公式: 欧拉总计函数,φ(n)=(p-1)(q-1). 其中φ(n)是指小于n中与n互素的个数.互素的概念指2个数字没有公共因子(比如7和8).
计算: φ(15)=φ(35)=φ(3)φ(5)=(3-1)(5-1)=8.
验证: 按定义小于15且与15互素的数字有1,2,4,7,8,11,13,14.确实是8个.
公钥
公钥e 满足 1< e < φ(n) 且 e和φ(n)互素
计算: 满足小于8且和8互素(没有公共因子)数字有7,5,3等. 选个3吧.
公钥e = 3.
私钥
私钥d满足模逆元 e*d/φ(n)余1.
计算: e=3,φ(15)=8, 满足3d%8==1, 很多数字可以满足,比如数字11.
私钥d = 11.
东方不败窃取了第5步和第6步的书信,有风清扬书信中的c=2, 有大数n=15.公钥e=3,没有私钥d,怎么破解?
东方不败需要知道私钥d,就要获取φ(n),也就是φ(15),而φ(15)是有(p-1)*(q-1)计算出来的,也就是需要把大数15分解成2个质数p和q. 基于前面的数学题,现有计算机能力还解不出大数因子分解.
思考 如果东方不败获取了量子计算机,怎么办:以上,如有出入,烦请指正.感谢感谢!!
PS:第一次写技术BLOG.如转载请说明出处.码字不易,感谢支持.