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 的特性更适合当今电子商务需要快速反应的发展潮流。此外,一种全新的量子密码也正在发展中。