欢迎您访问科普小知识本站旨在为大家提供日常生活中常见的科普小知识,以及科普文章!
您现在的位置是:首页  > 生活科普

RSA算法原理(二)

科普小知识2022-10-25 09:28:51
...

作者:阮一峰

上次,我介绍了一些数论知识。

有了这些知识,我们就能理解RSA算法。这是目前地球上最重要的加密算法。

六、密钥生成步骤我们通过一个例子,来了解RSA算法。假设爱丽丝想与鲍勃进行加密通信,她应该如何生成公钥和私钥?

在第一步中,随机选择两个不相等的素数P和Q。

爱丽丝选择了61和53。(在实际应用中,这两个素数越大,就越难破解。)

第二步是计算p和q的乘积n。

爱丽丝把61和53相乘。

n = 61×53 = 3233

n的长度是密钥长度。3233被写成一个二进制数1100100010001,总共12位,所以这个密钥是12位。在实际应用中,RSA密钥一般为1024位,重要场合为2048位。

第三步是计算欧拉函数φ(n)

根据公式:

φ(n) = (p-1)(q-1)

爱丽丝计算出φ(3233)等于60×52,或3120。

第四步是随机选择一个整数e,条件是1

爱丽丝在1到3120之间,随机选择了17个。(在实际应用中,经常选择65537。)

在第五步中,计算φ(n)的e的模逆元素d。

所谓的“模逆元素”是指有一个整数d,它使ed的余数除以φ(n) 1。

ed ≡ 1 (mod φ(n))

这个公式相当于

ed - 1 = kφ(n)

因此,求模逆元素D本质上就是求解下面的二元一阶方程。

ex + φ(n)y = 1

已知e=17,φ(n)=3120,

17x + 3120y = 1

这个方程可以用“扩展欧几里德算法”来求解,这里省略了具体的过程。简而言之,爱丽丝计算出一组整数解为(x,y)=(2753,-15),即d=2753。

到目前为止,所有的计算都已完成。

步骤6:将N和E封装成公钥,将N和D封装成私钥。

在爱丽丝的例子中,n=3233,e=17,d=2753,所以公钥是(3233,17),私钥是(3233,2753)。

在实际应用中,公钥和私钥的数据以ASN.1格式表示(例如)。

七、RSA算法可靠性审查上述关键生成步骤,共六个数字:

pqnφ(n)ed

在这六个数字中,两个(n和e)用于公钥,其他四个数字不公开。密钥是D,因为N和D构成了私钥。一旦D泄露,就等于私钥泄露。

那么,有没有可能用已知的n和e来推导d?

(1)ed≡1 (mod φ(n)).只有当e和φ(n)已知时,才能计算d。

(2)φ(n)=(p-1)(q-1).只有当p和q已知时,才能计算φ(n)。

(3)n=pq .只有通过分解n因子才能计算p和q。

结论:如果n可以分解,d可以计算,这意味着私钥被破解了。

然而,大整数的因式分解非常困难。目前,除了暴力破解之外,还没有找到其他有效的方法。*写道:

RSA算法的可靠性取决于分解最大整数的难度。换句话说,分解最大整数越困难,RSA算法就越可靠。

如果有人找到一个快速的因式分解算法,RSA的可靠性将大大降低。但是找到这样一个算法的可能性非常小。今天只有一个短的RSA密钥可以被猛烈破解。直到2008年,世界上还没有可靠的方法来攻击RSA算法。

只要密钥的长度足够长,用RSA加密的信息实际上就无法解密。"

例如,您可以考虑3233 (61×53),但不能考虑以下整数。

1230186684530117755130494958384962720772853569595334792197322452151726400507263657518745202199786469389956474942774063845925192557326303453731548268507 917026122142913461670429214311602221240479274737794080665351419597459856902143413

它等于两个质数的乘积:

33478071698956898786044169848212690817704794983713768568912431388982883793878002287614711652531743087737814467999489×3674604360436043478071694949498373713771377781467999489489×36

事实上,这可能是人类分解的最大整数(232位十进制,768位二进制)。比这更大的因式分解还没有报道过,所以迄今为止破解的最长的RSA密钥是768位。

八、用公钥和密钥加密和解密,可以加密和解密。

(1)加密需要公钥(n,e)

假设鲍勃想把加密消息M发送给爱丽丝,他将用爱丽丝的公钥(n,e)加密M。请注意,m必须是整数(字符串可以是ascii码或unicode码),m必须小于n。

所谓“加密”就是计算下面的公式C:

me≡ c (mod n)

爱丽丝的公钥是(3233,17),鲍勃的M假设为65,那么可以计算出下面的等式:

6517≡ 2790 (mod 3233)

所以,C等于2790,鲍勃给爱丽丝发了2790。

(2)要解密的私钥(n,d)

爱丽丝从鲍勃那里得到2790英镑后,她用自己的私钥(3233,2753)解密了它。可以证明下面的等式一定是正确的:

cd≡ m (mod n)

也就是说,C的d次方除以n的余数是m。现在,C等于2790,私钥是(3233,2753),所以爱丽丝计算

27902753≡ 65 (mod 3233)

因此,爱丽丝知道鲍勃加密前的原始文本是65。

到目前为止,“加密-解密”的整个过程已经完成。

我们可以看到,如果我们不知道D,就没有办法从c中找到M。如前所述,要知道D,N必须分解,这是极其困难的,所以RSA算法保证了通信的安全性。

你可能会问,公钥(n,e)只能加密小于n的整数,所以如果我想加密大于n的整数,我应该怎么做?有两种解决方案:一种是将长信息分成几条短消息,每条短消息分别加密;另一种是先选择一种“对称加密算法”(如DES),用该算法的密钥加密信息,然后用RSA公钥加密DES密钥。

九.私钥解密的证明最后,让我们证明为什么用私钥解密可以正确地得到M。那就是证明下面的公式:

cd≡ m (mod n)

因为根据加密规则

me≡ c (mod n)

因此,C可以写成以下形式:

c = me- kn

将C代入我们需要证明的解密规则:

(me- kn)d≡ m (mod n)

这相当于证明

med≡ m(模n)

由于

ed ≡ 1 (mod φ(n))

因此

ed = hφ(n)+1

插入:

mhφ(n)+1≡ m (mod n)

接下来,分为两个案例来证明上述公式。

(1)m和n是质数。

根据欧拉定理,此时

mφ(n)1(mod n)

得到

(mφ(n))h× m ≡ m (mod n)

原始公式已被证明。

(2)m和n不是互素的。

此时,因为n等于素数p和q的乘积,所以m必须等于kp或kq。

以m = kp为例,考虑到此时K和Q必须互为质数,根据欧拉定理,下列公式成立:

(kp)q-1≡ 1(模q)

走得更远

[(kp)q-1]h(p-1)× kp ≡ kp (mod q)

也就是说,

(kp)ed≡ kp (mod q)

将其改写成以下等式

(kp)ed= tq + kp

此时,t必须能被p整除,即t=tp。

(kp)ed= tpq + kp

因为m=kp,n=pq,所以

med≡ m(模n)

原始公式已被证明。

(结束)