公钥密码体制RSA算法原理

RSA概述

假如你已经了解了对称密码体制,你肯定知道对称密码中存在着密钥分发和管理的难题。为了解决这一问题,Whitefield与Martin Hellman在1976年提出了一个奇妙的密钥交换协议,称为Diffie-Hellman密钥交换协议/算法(Diffie-Hellman Key Exchange/Agreement Algorithm)。这个机制的巧妙在于需要安全通信的双方可以用这个方法确定对称密钥。然后可以用这个密钥进行加密和解密。

1978年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出了著名的公钥密码公有制RSA。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。

1973年,在英国政府通讯总部工作的数学家克利福德·柯克斯(Clifford Cocks)在一个内部文件中提出了一个相同的算法,但他的发现被列入机密,一直到1997年才被发表。

对极大整数做因数分解的难度决定了RSA算法的可靠性。换言之,对一极大整数做因数分解愈困难,RSA算法愈可靠。假如有人找到一种快速因数分解的算法的话,那么用RSA加密的信息的可靠性就肯定会极度下降。但找到这样的算法的可能性是非常小的。今天只有短的RSA钥匙才可能被强力方式解破。到目前为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的。

1983年麻省理工学院在美国为RSA算法申请了专利。这个专利2000年9月21日失效。由于该算法在申请专利前就已经被发表了,在世界上大多数其它地区这个专利权不被承认。

RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。RSA是被研究得最广泛的公钥算法,从提出到现今的三十多年里,经历了各种攻击的考验,逐渐为人们接受,截止2017年被普遍认为是最优秀的公钥方案之一。

SET(Secure Electronic Transaction)协议中要求CA采用2048bits长的密钥,其他实体使用1024比特的密钥。RSA密钥长度随着保密级别提高,增加很快。下表列出了对同一安全级别所对应的密钥长度。

保密级别 对称密钥长度(bit) RSA密钥长度(bit) ECC密钥长度(bit) 保密年限
80 80 1024 160 2010
112 112 2048 224 2030
128 128 3072 256 2040
192 192 7680 384 2080
256 256 15360 512 2120

RSA算法原理

RSA算法的基于这样的数学事实:两个大质数相乘得到的大数难以被因式分解。
如:有很大质数p跟q,很容易算出N,使得 N = p * q,
但给出N, 比较难找p q(没有很好的方式, 只有不停的尝试)

下面来看看数学演算过程:

1、选取两个大质数p,q,计算N = p q 及 φ ( N ) = φ (p) φ (q) = (p-1) * (q-1)

三个数学概念: 质数(prime numbe):又称素数,为在大于1的自然数中,除了1和它本身以外不再有其他因数。
互质关系:如果两个正整数,除了1以外,没有其他公因子,我们就称这两个数是互质关系(coprime)。
φ(N):叫做欧拉函数,是指任意给定正整数N,在小于等于N的正整数之中,有多少个与N构成互质关系。

如果n是质数,则 φ(n)=n-1。 如果n可以分解成两个互质的整数之积即n=p1p2, 则φ(n) = φ(p1p2) =
φ(p1)φ(p2)。即积的欧拉函数等于各个因子的欧拉函数之积。

2、选择一个大于1 小于φ(N)的数e,使得 e 和 φ(N)互质

e其实是1和φ(N)之间的一个质数,即:1 < e <φ(N)

3、计算d,使得de=1 mod φ(N) 等价于方程式 ed-1 = k φ(N) 求一组解。

d 称为e的模反元素,e 和 φ(N)互质就肯定存在d。
模反元素是指如果两个正整数a和n互质,那么一定可以找到整数b,使得ab被n除的余数是1,则b称为a的模反元素。
可根据欧拉定理证明模反元素存在,欧拉定理是指若n,a互质,则:
这里写图片描述
a^φ(n) ≡ 1(mod n) 及 a^φ(n) = a * a^(φ(n) - 1), 可得a的 φ(n)-1 次方,就是a的模反元素。

模运算规则:

模运算加减法:
(a + b) mod p = (a mod p + b mod p) mod p (a - b) mod p = (a
模运算乘法: (a b) mod p = (a mod p b mod p) mod p
模运算幂 a ^ b mod p = ((a mod p)^b) mod p

4、 (N, e)封装成公钥,(N, d)封装成私钥。

假设m为明文,加密就是算出密文c:
m^e mod N = c (明文m用公钥e加密并和随机数N取余得到密文c)
解密则是:
c^d mod N = m (密文c用密钥解密并和随机数N取余得到明文m)

加解密步骤

具体还是来看看步骤,举个例子,假设Alice和Bob又要相互通信。

1、Alice 随机取大质数P1=53,P2=59,那N=53*59=3127,φ(N)=3016
2、取一个e=3,计算出d=2011。
3、只将N=3127,e=3 作为公钥传给Bob(公钥公开)
4、假设Bob需要加密的明文m=89,c = 89^3 mod 3127=1394,于是Bob传回c=1394。 (公钥加密过程)
5、Alice使用c^d mod N = 1394^2011 mod 3127,就能得到明文m=89。 (私钥解密过程)
6、假如攻击者能截取到公钥n=3127,e=3及密文c=1394,是仍然无法不通过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安全性建立在N的因式分解上。大整数的因数分解,是一件非常困难的事情。
只要密钥长度足够长,用RSA加密的信息实际上是不能被解破的。

猜你喜欢

转载自blog.csdn.net/anda0109/article/details/79799519
今日推荐