RSA算法学习

一、 RSA密码体制背景

以前的加密都是对称性加密(Symmetric-key algorithm),即加密规则和解密规则相同。

这种加密最大的缺点就是对应的规则需要告诉其他人,否则无法解密。保存和传递这个规则是个难题。1974年瑞夫·墨克(Ralph C. Merkle)提出了一种新的构想:可以公开加密规则,然后可以在不传递解密规则的情况下完成解密。1976年惠特菲尔德·迪菲(BaileyWhitfield Diffie)和马丁·赫尔曼(MartinEdward Hellman)找到一种算法实现了这种构思。这个方法称为Diffie–Hellman–Merkle密钥交换。在Diffie 和Hellman 提出公钥密码体制的设想后,Merkle 和Hellman 首先共同提出MH 背包公钥加密体制后, 随后Rivest、Shamir、Adleman联合提出RSA公钥加密体制。

二、 RSA加解密过程

1.     密钥生成过程

(1)     选取两个安全大素数p和q(“大”指其长度要足够长,目前推荐长度至少为1024比特)

(2)   计算乘积n=p*q, ,其中 为n的欧拉函数;

(3)   随机选取整数e (1<e<  )作为公钥,要求满足gcd(e, ) = 1,即e与 互素;

(4)   用Euclid扩展算法计算私钥d,以满足d*e ,即d ,则e和n是公钥,d是私钥。

注意加解密算法中的两个素数p和q不再需要,可以销毁。

2.加密过程

加密时首先将明文比特串分组,使得每个分组对应的十进制数小于n,即分组长度小于log2n。然后对每个明文m,作加密运算:c≡  (mod n)明文要求:小于n的正整数

3.解密过程

对密文分组的解密运算为:m≡ (mod n)

三、 RSA数论基础

1.单向陷门函数

RSA加密体制与陷门单向函数有关,要满足上述公钥加密体制的要求,最终可以归结为设计一个单向陷门函数。单向陷门函数满足下列条件:

(1)   正向计算容易,即如果知道密钥k 和消息   ;

(2)     在不知道密钥S 的情况下,方向计算不可行,即如果只知道加密后的消息C而不知道密钥S, 则计算 不可行;

(3)     在知道密钥S的情况下,反向计算容易,即如果同时知道加密后的消息C和密钥S,则计算  是容易额,这里的密钥S 相当于陷门,他和P配对使用。

2.算法正确性

有公式 :



四、RSA实例

设接受方B选择p = 43,q = 59, e = 13,发送方A有消息m = cyber,按英文字母表顺序a = 00, b =01……z=25进行编码。A欲用RSA公钥体制加密后传送给B,求B的私钥并描述加解密过程

密钥生成:n = p * q = 3 * 59 = 2537,

e =13, 则根据d = ,得 d = 937

则公钥(n = 2537, e = 13), 私钥d = 937

A的加密过程:先将消息分块为cy,be,r

分组明文:cy = 0224   be =0104   r = 17

利用公钥(n = 2537, e =13)和加密算法c = 进行加密

对第一个分组m的加密过程为

             

        C2 =

              C3 =

解密过程:解密消息时用私钥d = 937 和解密算法 m 进行解密,对第一组密文c1

解密过程:           ,0224对应明文分组为m1 = cy,

以密文c1对应的明文为cy

同理可得其他明文, 最终明文为 cyber

五、RSA局限性(攻击方法)

RSA系统是第一个将安全性植基于因子分解的系统。很明显地,在公开密钥(e,N)中,若N能被因子分解,则在模N中所有元素价的最小公倍数(即所谓陷门)T=φ(N)=(p-1)(q-1)即无从隐藏。使得解密密钥d不再是秘密,进而整个RSA系统即不安全。虽然迄今人们尚无法“证明”,破解RSA系统等于因子分解。但一般“相信”RSA系统的安全性,等价于因子分解。即:若能分解因子N,即攻破RSA系统;

若能攻破RSA系统,即分解因子N(相信,但未证明)

因此,在使用RSA系统时,对于公开密钥N的选择非常重要。必须使得公开N后,任何人无法从N得到T。此外,对于公开密钥e与解密密钥d,亦需有所限制。否则在使用上可能会导致RSA系统被攻破,或应用在密码协议上不安全。

经过分析,我们知道RSA系统安全性与系统的参数有很大关系,X.931标准对此提出以下几点:

如果公钥e是奇数,e应与p-1,q-1互质;

如果公钥e是偶数,e必须与(p-1)/2,(q-1)/2互质,且poq mod 8不成立;

模数的长应该为1024+256x,x=0,1      ;

质数p,q应通过质数检测,使出错的概率小于;

p-1,q-1,p+1,q+1应有大质数因子;

gcd(p-1,q-1)应该小;

p/q不应靠近两个小整数比值,且 ;

|p-q|应有大质数因子。(来源与《现代密码学》)

六、 学习问题

1.     对于RSA的局限性中的参数选择问题的理解较难以接受,

2.     对于RSA安全问题比较烧脑:

(1)  二次筛法:

(2)  共模攻击

(3)  低指数攻击

3.     对于欧拉函数的分解素数

RSA是非对称密码体制,是基于大数分解困难的数学难题所构建起来的密码体制。因为安全性的原因。其次RSA的攻击方法其实是有很多的,比如广为流传的:二次筛法分解因子,共模攻击分解模式n,低指数攻击获取密钥,连分式攻击获得n的欧拉函数值。这些攻击方法使得RSA的安全密钥大大增加至少1024位以上。但是这又带来了其他难题,RSA的乘法和模运算,其实是加大了计算的难度,因为若要保证RSA的安全是要使密钥长度达到1024位,试想进行1024次方的大数计算,这是十分消耗时间的,但是我们又不能降低密钥长度来加快速度。所以RSA的计算速度一直是一个诟病。


猜你喜欢

转载自blog.csdn.net/AlexYoung28/article/details/80715130