RSA算法原理

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(11p1)(11p2)(11p2)...(11pr)

p1p2...prn

当n为质数时,n只有一个质因子n,则φ(n)=n(11n)=n1

欧拉定理

欧拉定理:如果两个正整数a和n互质,则n的欧拉函数φ(n)可以让下面的等式成立。

aφ(n)1(mod n)

上式表示a的φ(n)次方除以n余数为1,或者说aφ(n)mod n=1 。这里我们就不证明欧拉定理了,有兴趣的可以自己搜索相关资料。

费马小定理

费马小定理是欧拉定理的一个特殊情形,即 假设正整数a与质数p互质,因为质数p的φ(p)等于p-1,则欧拉定理可以写成:

ap11(mod p)

这个就是费马小定理。

模反元素

如果两个正整数a和n互质,那么一定可以找到整数b,使得ab-1被n整除,或者说ab被n除的余数是1。

ab1(mod n)

这里把b叫做a的模反元素。比如3和11互质,因为3x4-1可以被11整除,所以4是3的一个模反元素。模反元素不止一个。

欧拉定理可以来证明模反元素一定存在。

aφ(n)=aaφ(n)11(mod n)

上式可见,aφ(n)1 就是a的模反元素。

RSA秘钥生成步骤

加密和解密过程可以通过下列式子来表示:

Cipher=PlainEmodNPlain=CipherDmodN

式中Plain为明文数据,Cipher为密文数据,那么公钥和私钥则为:

PublicKey=(E,N)PrivateKey=(D,N)

下来来计算秘钥中的E/D/N。

  1. 选择两个不相等的质数p&q,计算两者的乘积作为N=pq 。(实际使用中这两个质数越大越难破解,而且可以使用多个质数,但是通常使用两个)。
  2. 计算N的欧拉函数值φ(N)=(p1)(q1)
  3. 选择一个整数e,条件是1<e<φ(n) ,且e与φ(n) 互质。
  4. 求得e关于φ(n) 的模反元素d,ed1(modφ(N))
  5. 把N和e封装为公钥,把N和d封装成私钥。

RSA算法证明

实际数据验证

假设要使用公钥钥(N, e)对明文数据m进行加密,m必须是整数(计算机中字符串可以取ASCII值作为数字进行加解密),且m必须小于N。这里我们选择数字65作为明文,m=65

1. 选择两个不相等的质数p和q,这里我们使用61和53两个数字作为p和q。

p=61,q=53

2. 计算二者的乘积作为N。

N=pq=6153=3233

3. 计算N的欧拉函数

φ(N)=(p1)(q1)=6052=3120

4. 随机选一个整数e,满足条件1<e<φ(n) 且与φ(n) 互质

这里我们选择17作为e,e=17

5. 计算e对于φ(n) 的模反元素,即使得ed被φ(n) 整除的余数为1

ed1(modφ(N))11d=1(mod3120)
这里不详细介绍模反元素的算法了,模反元素可能有多个,当d=2753时,公式成立,即172753=46801=312015+1 。所以d=2753

6. 加密

使用公钥(e,N)=(17,3233) 对数字65进行加密,Plain=65。
6517mod 3233=2790 ,即加密后的数字,即Cipher=2790。

7. 解密

使用私钥(d,N)=(2753,3233)
27902753mod 3233=65 。即解出明文为65,解密成功。

公式推导证明

我们来证明为什么用私钥解密,一定可以正确地得到明文m。也就是证明下面这个式子:

PlainCipherd(mod n)

因为,根据加密规则

CipherPlaine(mod n)

于是,Cipher可以写成下面的形式:

Cipher=Plainekn

将Cipher代入要我们要证明的那个解密规则:

(Plainekn)dmod nPlain

它等同于求证

Plained (mod n)Plain

由于

ed1(mod φ(n))

所以

ed=hφ(n)+1

将 ed 代入:

Plainhφ(n)+1(mod n)Plain

接下来,分成两种情况证明上面这个式子。

1. Plain与n互质。

根据欧拉定理,

Plainφ(n)1(mod n)

得到

(Plainφ(n))hPlainPlain(mod n)

  原式得到证明。

2. Plain与n不是互质关系。

由于n等于质数p和q的乘积,所以Plain必然等于 kp 或 kq。

以 Plain = kp 为例,考虑到这时k与q必然互质,则根据欧拉定理,下面的式子成立:

(kp)q11(mod q)

进一步得到

[(kp)q1]h(q1)kpkp(mod q)

(kp)edkp(mod q)

将它改写成下面的等式

(kp)ed=tq+kp

这时t必然能被p整除,即 t=t’p

(kp)ed=tpq+kp

因为 Plain=kp,n=pq,所以

Plainedm(mod n)

原式得到证明。

参考

阮一峰 RSA算法原理

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章