RSA算法-实例分析
主要讲解5个问题:
一,6步生成公钥和私钥
二,明文X的加密成密文Y与密文Y的解密
三,实例分析
四,为什么说RSA是安全的?
五,需要知道一点数论知识:
(1)互质:这个小学就学过了,如果两个正整数,除了1之外,没有其他公因子,就称这两个数是互质关系(coprime)
(2) 欧拉函数:思考(任意给定一个正整数n,请问在小于等于n的正整数之中,有多少个与n构成关系?比如,在1到8之中,有多少个数与8构成互质关系?)
计算这个值的方法就叫做欧拉函数,以Φ(n)表示。在1到8之中,与8形成的互质关系的是1,3,5,7,所以Φ(n)= 4。
一,(6步)
1,首先选两个大素数,p,q
2,计算n,n = p*q
3,计算欧拉函数Φ(n)= (p-1)(q-1)
4,随机取整数e,且1<e<Φ(n),e与Φ(n)互质
5,计算秘密值d,由de ≡ 1modΦ(n),,≡ 为互余符号即≡号两边的数有相同的余数
6,公钥PK = (e,n),私钥SK = (d,n)
二,设明文为X,密文为Y
则密文X经过加密之后的密文Y = Xemod n
密文Y经过解密可得到明文X = Ydmod n
三,举个例子说明一下:
1,为了方便计算,首先我们选取两个小的素数,p = 3,q = 11
2,计算n,n = p*q = 3*11 = 33(100001这才六位二进制数,一般都是1024位,重要的文件有2048位的)
3,求出欧拉函数Φ(n) = (p-1)(q-1)= (3-1)(11-1) = 20
4,取一个随机数e=3,(1<e<20且e与20互质)
5,计算秘密数d,de ≡ 1mod Φ(n)因为1modΦ(n)= 1 恒成立,则此算式可以写成de modΦ(n)= 1
即3d mod 20 = 1 一个个试数解得d = 7
6,综上得,公钥PK = (3,33),私钥SK = (7,33)
假设明文X= key,首先我们需要把它转换成ASCII码
01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 |
a | b | c | d | e | f | g | h | i | j | k | l | m |
14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 |
n | o | p | q | r | s | t | u | v | w | x | y | z |
这里我们需要注意:如果X过大,则需要对其尽行分组,如本题X——11,05,25
对X进行加密的密文Y= Xe mod n 即 Y=X3 mod 33 ——>113mod 33 = Y mod 33 得Y= 11
053mod 33 = Y mod 33 得Y= 26
253mod 33 = Y mod 33 得Y= 16
对Y进行解密的明文X= Ydmod n 即 X = Y7mod 33——>117mod 33 = X mod 33 得X= 11
267mod 33 = X mod 33 得 X= 05
167mod 33 = X mod 33得 X= 25
四,为什么说RSA是安全的呢?
我们知道此过程一共用到了6个数 p,q,n,Φ(n),e,d
而公钥中的e,n是公开的,其余4个数我们是不知道的
假如我们采取暴力破解的方法:我们只需要解出d,也就知道了私钥
1,要解出d,de= 1mod Φ(n),需要解出e,Φ(n)
2,Φ(n)= (p-1)(q-1),需要解出p,q
3,n = p*q,也即是需要对n 进行分解,由上面的实例,我们也许可能回想,这不是很简答的事吗,但是当p,q超级大时,而我们目前的技术还无法分解两个超大素数
所以,就目前来说,时安全的。
而目前被破解的最长RSA密钥是(232个十进制数)768个二进制数,而我们用的一般为1024位或者2048位。所以限制人类分解大整数的是计算机的计算能力,相信如果有一天真正的量子计算机问世后,又会引发一轮安全加密竞赛。