一、前言
RSA 公钥算法是MIT的 Rivest、Shamir和 Adleman在1978年提出来的。RSA方案是被最广泛接受并实现的通用公开密钥密码算法,目前已成为公钥密码的国际标准。该算法的数学基础是初等数论中的欧拉定理,其安全性建立在大整数因子分解的因难性之上。
二、RSA的算法描述
1.密钥生成
(1)选取两个随机的大素数p,q
(2)计算n=pq,Ø(n)=(p-1)(q-1)
(3)选择一个随机数e,并且1<e<Ø(n),且e与Ø(n)的最大公约数为1
(4)公钥为(e,n),私钥为(d,n),其中d= mod Ø(n)
2.加密
对于明文m<n,其对应的密文为c= mod n
3.解密
对密文c,其对应的明文为m= mod n
三、取余运算
1.正整数取余
例:7 mod 3=1
2.负整数取余
例:-1 mod 26=25
这个式子可以看成(-1+26) mod 26
于是上式等于25 mod 26
等于25
3.分数取余
下面通过一个实例向大家介绍分数取余的运算过程
例:取p=47,q=71
则:
(1)n=pq=47*71=3337;
(2)Ø(n)=(p-1)*(q-1)=46*70=3220;
(3)选取随机数e=79;
(4)则私钥d= mod 3220
那么这个式子(4)如何解呢?这里就要用到欧几里得算法(又称辗转相除法),解法如下:
(1)上式可以表示成79*d-3220*k=1(其中k为正整数);
(2)将3220对79取模得到的余数60代替3220,则变为79*d-60*k=1;
(3)同理,将79对60取模得到的余数19代替79,则变为19*d-60*k=1;
(4)同理,将60对19取模得到的余数3代替60,则变为19*d-3*k=1;
(5)同理,将19对3取模得到的余数1代替19,则变为d-3*k=1;
当d的系数最后化为1时,
令k=0,代入(e)式中,得d=1;
将d=1代入(d)式,得k=6;
将k=6代入(c)式,得d=19;
将d=19代入(b)式,得k=25;
将k=25代入(a)式,得d=1019,这个值即我们要求的私钥d的最终值。
此时,我们即可得到公钥为(e,n)=(79,3337),私钥为(d,n)=(1019,3337)