一、RSA算法
1、算法简介
(1)RSA是目前最流行的非对称加解密算法之一,也被称为公钥加密算法,是三个人一起提出的,该算法的命名是由他们三个人的姓氏开头字母拼在一起组成的。
(2)RSA是非对称的,也就是用来加密的秘钥和用来解密的秘钥不是同一个。
(3)和DES一样的是,RSA也是分组加密算法,不同的是分组大小可以根据秘钥的大小而改变。如果加密的数据不是分组大小的整数倍,则会根据具体的应用方式增加额外的填充位。
(4)RSA作为一种非对称的加密算法,其中最重要的一个特点就是当数据在网络中传输时,用来加密数据的秘钥并不需要也和数据一起传送,这样就减少了秘钥泄露的可能性。加密的一方使用的秘钥称为公钥,解密方使用的秘钥称为私钥,在进行RSA加解密的时候,需要保证私钥的安全性和私有性。
(5)RSA被认为是非常安全的,但是他的计算速度比DES慢很多,通DES一样,其安全性也从未被证明过,但是想要破解RSA算法涉及的大数(至少200位)的因子分解是一个极其困难的问题,所以由于缺乏大数因子分解的有效方法,可以推测出目前没有有效的办法可以破解RSA.
(6)RSA算法基于的原理,基本上来说,加密和解密数据都是围绕模幂运算。取模运算就是x mod n的结果等于x/n的余数,而模幂运算即就算ab mod n的过程。
2、计算过程
RSA中的公钥和私钥需要紧密结合在一起才能很好的工作。公钥用来对数据进行加密,之后,只有对应私钥才能用来解密。生成密钥时,需要遵循一定的规则.
计算步骤:
(1)选择俩个大的素数,记为p和q。
(2)计算n=pq。
(3)寻找一个与(p-1)(q-1)互素的奇数e,作为公钥的一部分,通常选择3、17、65、 537作为e值,使用这些值不会对RSA的安全性造成影响,因为解密数据还需要用到私 钥。
(4)根据e计算相对应的d值,d将成为私钥的一部分,d的值就是e的逆元对(p-1)* (q-1)取模的结果,即d = e-1 mod (p-1)*(q-1).即d与e是模乘法逆元的关系。
(5)根据e和d的值,将(e,n)作为公钥p,将(d,n)作为私钥s,并保证公私钥不可 见。即 p = (e,n),s = (d,n)。
加密方使用p来加密数据,解密方使用s来解密,为防止就算有人知道了p也无法推算出s,就必须保证p和q的值绝对不能暴露。p和s结合在一起提供的安全性来自于乘法是一种很好的单向函数(即在一个方向上能够很容易算出结果,但是反向不能推到。如RSA加密中,计算pq就是一个单向函数,因为计算pq容易,但是将n分解为p和q却是非常难的)。
3、相关数学知识
(1)欧拉函数φ(n),所以小于n的正整数中与n互素的整数的个数称为欧拉函数。
①当n是素数时,φ(n) = n-1。因为n是素数,所以n的唯一因子是1和n,因此n与之前的所有n-1个正整数都是互素的。
②对于任意小于n且与n互素的正整数a,都有aφ(n) mod n = 1,a(aφ(n) mod n )= a或者aφ(n)+1 mod n = a。
调整之后得到的等式非常强大。因为对于某些等式c = me mod n,该等于可以让我们找出一个d的值,使得cd mod n = m。
这就是RSA算法中允许加密数据,之后再解密回原文的恒等式。可以按照如下方式表示:
cd mod n = (me)d mod n = med mod n = mφ(n)+1 mod n = m mod n
欧拉函数和指数间的关系保证了加密的任意数据都能够唯一地解密回来。为了找出d的值,解方程d = e-1 φ(n) +1。不巧的是,对于方程d = e-1φ(n)+1不一定总是有整数解。为了解决这种问题,转而计算
d mod φ(n)的值。换句话说,d = (e-1 φ(n) + 1) mod φ(n),可以简化为:
d = e-1 mod φ(n)
我们可以得到这样的简化形式,因为(φ(n)+1) mod φ(n) = (φ(n)+1) - φ(n) = 1。可以用任意的正整数替代φ(n)来证明等式成立。注意这个方程式同之前计算密钥的过程中得出d的推导式之间的相似之处。这提供了一种通过e和n来计算d的方法。当然了,e和n是公开的,对于攻击者来说是事先可知的,因此就有人问,这难道不是给了攻击者相同的机会来计算出私钥吗?讨论到这里,是时候来探讨一下RSA算法安全性保障的由来了。
RSA算法的安全性保障来自一个重要的事实,那就是欧拉函数是乘法性质的。这意味着如果p和q是互素的,那么有φ(pq)=φ§φ(q)。因此,如果有两个素数p和q,且n=p*q,则φ(n)=(p-1)(q-1),而且最重要的是:
d = e-1 mod (p-1)(q-1)
因此,尽管攻击者可能知道了e和n的值,为了计算出d必须知道φ(n),而这又必须同时得到p和q的值才能办到。由于p和q是不可知的,因此攻击者只能计算n的因子,只要给出的p和q的值足够大,这就是一个相当耗费时间的过程。