RSA算法原理
RSA加密算法是一种非对称加密算法。对称加密算法中加密和解密都得用同一个秘钥,必须保证秘钥不泄露才能保证数据的安全,加解密两方之间密钥的传递是存在安全隐患的。非对称加密算法中加密和解密使用不同的秘钥(公钥和私钥)。比如:甲方可以使用乙方给的公钥进行加密,乙方收到密文后使用自己的私钥进行解密。
RSA算法是一种基于大数分解的非对称加密算法,由已知加密密钥推导出解密密钥在计算上是不可行的。
相关数论知识
使用一个秘钥进行加密,使用另外一个秘钥可以解密成功,这对秘钥在数学上肯定存在某种联系。为了便于理解RSA算法,应该先了解一些相关的数论知识。
互质关系
如果两个正整数,除了1以外,没有其他公因子,我们就称这两个数是互质关系。关于互质关系,有以下结论:
- 任意两个质数构成互质关系,比如13和61。
- 一个数是质数,另一个数只要不是前者的倍数,两者就构成互质关系,比如3和10。
- 如果两个数之中,较大的那个数是质数,则两者构成互质关系,比如97和57。
- 1和任意一个自然数是都是互质关系,比如1和99。
- p是大于1的整数,则p和p-1构成互质关系,比如57和56。
- p是大于1的奇数,则p和p-2构成互质关系,比如17和15。
欧拉函数
在数论中,欧拉函数φ(n)表示小于n的正整数中与n互质的数的数目。例如φ(8)=4,因为1,3,5,7均和8互质。
欧拉函数的值可以使用下列等式进行计算:
当n为质数时,n只有一个质因子n,则 。
欧拉定理
欧拉定理:如果两个正整数a和n互质,则n的欧拉函数φ(n)可以让下面的等式成立。
上式表示a的φ(n)次方除以n余数为1,或者说 。这里我们就不证明欧拉定理了,有兴趣的可以自己搜索相关资料。
费马小定理
费马小定理是欧拉定理的一个特殊情形,即 假设正整数a与质数p互质,因为质数p的φ(p)等于p-1,则欧拉定理可以写成:
这个就是费马小定理。
模反元素
如果两个正整数a和n互质,那么一定可以找到整数b,使得ab-1被n整除,或者说ab被n除的余数是1。
这里把b叫做a的模反元素。比如3和11互质,因为3x4-1可以被11整除,所以4是3的一个模反元素。模反元素不止一个。
欧拉定理可以来证明模反元素一定存在。
上式可见, 就是a的模反元素。
RSA秘钥生成步骤
加密和解密过程可以通过下列式子来表示:
式中Plain为明文数据,Cipher为密文数据,那么公钥和私钥则为:
下来来计算秘钥中的E/D/N。
- 选择两个不相等的质数p&q,计算两者的乘积作为 。(实际使用中这两个质数越大越难破解,而且可以使用多个质数,但是通常使用两个)。
- 计算N的欧拉函数值 。
- 选择一个整数e,条件是 ,且e与φ(n) 互质。
- 求得e关于 的模反元素d, 。
- 把N和e封装为公钥,把N和d封装成私钥。
RSA算法证明
实际数据验证
假设要使用公钥钥(N, e)对明文数据m进行加密,m必须是整数(计算机中字符串可以取ASCII值作为数字进行加解密),且m必须小于N。这里我们选择数字65作为明文, 。
1. 选择两个不相等的质数p和q,这里我们使用61和53两个数字作为p和q。
2. 计算二者的乘积作为N。
3. 计算N的欧拉函数
4. 随机选一个整数e,满足条件 且与 互质
这里我们选择17作为e, 。
5. 计算e对于 的模反元素,即使得ed被 整除的余数为1
。
这里不详细介绍模反元素的算法了,模反元素可能有多个,当d=2753时,公式成立,即 。所以 。
6. 加密
使用公钥 对数字65进行加密,Plain=65。
,即加密后的数字,即Cipher=2790。
7. 解密
使用私钥 ,
。即解出明文为65,解密成功。
公式推导证明
我们来证明为什么用私钥解密,一定可以正确地得到明文m。也就是证明下面这个式子:
因为,根据加密规则
于是,Cipher可以写成下面的形式:
将Cipher代入要我们要证明的那个解密规则:
它等同于求证
由于
所以
将 ed 代入:
接下来,分成两种情况证明上面这个式子。
1. Plain与n互质。
根据欧拉定理,
得到
原式得到证明。
2. Plain与n不是互质关系。
由于n等于质数p和q的乘积,所以Plain必然等于 kp 或 kq。
以 Plain = kp 为例,考虑到这时k与q必然互质,则根据欧拉定理,下面的式子成立:
进一步得到
即
将它改写成下面的等式
这时t必然能被p整除,即 t=t’p
因为 Plain=kp,n=pq,所以
原式得到证明。