RSA 算法
当前最著名、应用最广泛的公钥系统RSA 是在1978 年,由美国麻省理工学院(MIT) 的Ron Rivest, Adi Shamir 和Leonard Adleman 在题为《获得数字签名和公开钥密码系统的方法》的论文中提出的。它是一个基于数论的非对称( 公开钥) 密码体制,是一种分组密码体制。其名称 来自于三个发明者的姓名首字母。 它的安全性是基于大整数素因子分解的困难性,而大整数因子分解问题是数学上的著名难题,至今没有有效的方法予以解决,因此可以确保RSA 算法的安全性。 RSA 系统是公钥系统的最具有典型意义的方法,大多数使用公钥密码进行加密和数字签名的产品和标准使用的都是RSA 算法。
RSA
算法是第 一个既能用于数据加密也能用于数字签名的算法,因此它为公用网络上信息的加密和鉴别提供了一种基本的方法。它通常是先生成一对RSA
密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可在网络服务器中注册,人们用公钥加密文件发送给个人,个人就可以用私钥解密
接受。为提高保密强度,RSA
密钥至少为500
位长,一般推荐使用1024
位。
该算法基于下面的两个事实,
这些事实保证了RSA
算法的安全有效性:
1.
已有确定一个数是不是质数的快速算法;
2.
尚未找到确定一个合数的质因子的快速算法。
工作原理
1)
任意选取两个不同的大质数
p
和
q
,计算乘积
r=p*q
;
2)
任意选取一个大整数
e
,
e
与
(p-1)*(q-1)
互质,整数
e
用做加密密钥。注意:
e
的选取是很容易的,例如,所有大于
p
和
q
的质数都可用。
3)
确定解密密钥
d
:
d * e ≡ 1
(mod (p
-1)(q
-1))
根据
e
、
p
和
q
可以容易地计算出
d
。
4)
公开整数
r
和
e
,但是不公开
d
;
5)
将明文
P (
假设
P
是一个小于
r
的整数
)
加密为密文
C
,计算方法为:
C = P^e modulo r
6)
将密文
C
解密为明文
P
,计算方法为:
P = C^d modulo r
然而只根据
r
和
e
(不是
p
和
q
)要计算出
d
是不可能的。因此,任何人都可对明文进行加密,但只有授权用户(知道
d
)才可对密文解密。
运算符号的解释 :
≡ 就是≡
余数
(≡)
同余
一般来说就是取余数
a≡b(mod c)
就是说
a
除以
c
所的余数和
b
除以
c
所得的余数相同
,
换句话说
a-b
能整除
c
可以表示
c
|
a-b
数学原理
定理
若
p, q
是相异质数
, rm
≡
1 (mod (p-1)(q-1)),
a
是任意一个正整数
, b
≡
a^m (mod pq), c
≡
b^r (mod pq),
则
c ≡ a (mod pq )
证明的过程
,
会用到费马小定理
,
叙述如下
:
m
是任一质数
, n
是任一整数
,
则
n^m ≡ n mod m
(
换另一句话说
,
如果
n
和
m
互质
,
则
n^(m-1) ≡ 1 (mod m)
运用一些基本的群论的知识
,
就可以很容易地证出费马小定理的
........
证明
因为
rm ≡ 1 (mod (p-1)(q-1)),
所以
rm = k(p-1)(q-1) + 1,
其中
k
是整数
因为在
modulo
中是
preserve
乘法的
(x ≡ y (mod z) and u ≡ v (mod z ) => xu ≡ yv (mod z)),
所以
, c ≡ b^r ≡ (a^m)^r ≡ a^(rm) ≡ a^(k(p-1)(q-1)+1) mod pq
1.
如果
a
不是
p
的倍数
,
也不是
q
的倍数时
,
则
a^(p-1) ≡ 1 mod p (
费马小定理
) => a^(k(p-1)(q-1)) ≡ 1 mod p
a^(q-1) ≡ 1 mod q (
费马小定理
) => a^(k(p-1)(q-1)) ≡ 1 mod q
所以
p, q
均能整除
a^(k(p-1)(q-1)) - 1 => pq | a^(k(p-1)(q-1)) - 1
即
a^(k(p-1)(q-1)) ≡ 1 mod pq
=> c ≡ a^(k(p-1)(q-1)+1) ≡ a mod pq
2.
如果
a
是
p
的倍数
,
但不是
q
的倍数时
,
则
a^(q-1) ≡ 1 mod q (
费马小定理
)
=> a^(k(p-1)(q-1)) ≡ 1 mod q
=> c ≡ a^(k(p-1)(q-1)+1) ≡ a mod q
=> q | c - a
因
p | a
=> c ≡ a^(k(p-1)(q-1)+1) ≡ 0 mod p
=> p | c - a
所以
, pq | c - a => c ≡ a mod pq
3.
如果
a
是
q
的倍数
,
但不是
p
的倍数时
,
证明同上
4.
如果
a
同时是
p
和
q
的倍数时
,
则
pq | a
=> c ≡ a^(k(p-1)(q-1)+1) ≡ 0 mod pq
=> pq | c - a
=> c ≡ a mod pq
Q.E.D.
这个定理说明 a
经过编码为 b
再经过解码为 c
时, a ≡ c mod n (n = pq)....
但我们在做编码解码时,
限制 0 <= a < n, 0 <= c < n,
所以这就是说 a
等於 c,
所以这个过程确实能做到编码解码的功能.....
示例
为了说明该算法的工作过程,
我们下面给出一个简单例子,
显然我们在这只能取很小的数字,但是如上所述,为了保证安全,在实际应用上我们所用的数字要大的多得多。
例:选取p=3, q=5
,则r=15
,(p-1
)*
(q-1
)=8
。选取e=11
(大于p
和q
的质数),通过d * 11 = 1 modulo 8
,计算出d =3
。
假定明文为整数13
。则密文C
为
C = P^e modulo r
= 13^11 modulo 15
= 1,792,160,394,037 modulo 15
= 7
复原明文P
为:
P = C^d modulo r
= 7^3 modulo 15
= 343 modulo 15
= 13
因为e
和d
互逆,公开密钥加密方法也允许采用这样的方式对加密信息进行"
签名"
,以便接收方能确定签名不是伪造的。
两个在不安全信道中通信的人,假设为Alice
(收信者)和Bob
(发信者),他们希望能够安全的通信而不被他们的敌手Oscar
破坏。Alice
想到了一种办法,她使用了一种锁(相当于公钥),这种锁任何人只要轻轻一按就可以锁上,但是只有Alice
的钥匙(相当于私钥)才能够打开。然后 Alice
对外发送无数把这样的锁,任何人比如Bob
想给她寄信时,只需找到一个箱子,然后用一把Alice
的锁将其锁上再寄给Alice
,这时候任何人(包括 Bob
自己)除了拥有钥匙的Alice
,都不能再打开箱子,这样即使Oscar
能找到Alice
的锁,即使Oscar
能在通信过程中截获这个箱子,没有 Alice
的钥匙他也不可能打开箱子,而Alice
的钥匙并不需要分发,这样 Oscar
也就无法得到这把“
私人密钥”
。
优点
RSA 算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。RSA 是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐 渐为人们接受,普遍认为是目前最优秀的公钥方案之一。该算法的加密密钥和加密算法分开,使得密钥分配更为方便。它特别符合计算机网络环境。对于 网上的大量用户,可以将加密密钥用电话簿的方式印出。如果某用户想与另一用户进行保密通信,只需从公钥簿上查出对方的加密密钥,用它对所传送的信息加密发 出即可。对方收到信息后,用仅为自己所知的解密密钥将信息脱密,了解报文的内容。由此可看出,RSA 算法解决了大量网络用户密钥管理的难题,这是公钥密码 系统相对于对称密码系统最突出的优点。
缺点
1)
产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。
2)
安全性, RSA
的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA
的难度与大数分解难度等价,而且密码学界多数人士倾向于因子分解不是NPC
问题。目
前,人们已能分解140
多个十进制位的大素数,这就要求使用更长的密钥,速度更慢;另外,目前人们正在积极寻找攻击RSA
的方法,如选择密文攻击,一般攻击者是将某一信息作一下伪装(Blind)
,让拥有私钥的实体签署。然后,经过计算就可得到它所想要的信息。实际上,攻击利用的都是同一个弱点,即存在这
样一个事实:乘幂保留了输入的乘法结构:
( XM )d = Xd *Md mod n
前面已经提到,这个固有的问题来自于公钥密码系统的最有用的特征--
每个人都能使用公钥。但从算法上无法解决这一问题,主要措施有两条:一条是采用好的公钥协议,保证工作过程中实体不对其他实体任意产生的信息解密,不对自己一无所知的信息签名;另一条是决不对陌生人送来的随机文档签名,签名时首先使用One-Way Hash Function
对文档作HASH
处理,或同时使用不同的签名算法。除了利用公共模数,人们还尝试一些利用解密指数或φ
(n
)等等攻击.
3)
速度太慢,
由于RSA
的分组长度太大,为保证安全性,n
至少也要 600 bitx
以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。目前,SET(Secure Electronic Transaction)
协议中要求CA
采用2048
比特长的密钥,其他实体使用1024
比特的密钥。为了速度问题,
目前人们广泛使用单,
公钥密码结合使用的方法,
优缺点互补:
单钥密码加密速度快,
人们用它来加密较长的文件,
然后用RSA
来给文件密钥加密,
极好的解决了单钥密码的密钥分发问题。
公钥加密算法中使用最广的是RSA
。RSA
算法研制的最初理念与目标是努力使互联网安全可靠,旨在解决DES
算法秘 密密钥的利用公开信道传输分发的难题。而实际结果不但很好地解决了这个难题;还可利用RSA
来完成对电文的数字签名以抗对电文的否认与抵赖;同时还可以利 用数字签名较容易地发现攻击者对电文的非法篡改,以保护数据信息的完整性。目前为止,很多种加密技术采用了RSA
算法,该算法也已经在互联网的许多方面得 以广泛应用,包括在安全接口层(SSL
)标准(该标准是网络浏览器建立安全的互联网连接时必须用到的)方面的应用。此外,RSA
加密系统还可应用于智能 IC
卡和网络安全产品。
但目前RSA
算法的专利期限即将结束,取而代之的是基于椭圆曲线的密码方案(ECC
算法)。较之于RSA
算法,ECC
有其相对优点,这使得ECC
的特性更适合当今电子商务需要快速反应的发展潮流。此外,一种全新的量子密码也正在发展中。