RSA加密算法数学原理

RSA加密

RSA加密

符号说明

MOD

此符号有两个含义 由于网上资料对此符号的混用,故特此说明

  • 同余符号 给定正整数m,如果两个整数a和b满足a-b能被m整除,即m|(a-b),那么就称整数a与b对模m同余,记作a≡b(mod m)

  • 取余符号 a mod b = c 表示整数a除以整数b所得余数为c

gcd()

gcd(a,b)=ab

 

RSA加解密方法

欲加密明文m

  1. 选择两个大质数p和q

  2. 计算n=p*q,安全要求n至少为1024位长

  3. 计算φ(n)=(p-1)(q-1)

  4. 选择公钥e,满足1≤e<φ(n),gcd(e,φ(n))=1 (gcd最大公约数)

  5. 选择私钥d,满足于e*d≡1(mod φ(n) )

加密 传递e、n给对方 ,加密明文m为c方法如下

c=memodn

解密 已知d、n时 ,将密文c解密为明文方法如下

m=cdmodn

数学原理

欧拉函数 φ(n)的计算

定义:φ(n) 表示在小于等于 n 的正整数之中,与 n 构成互质关系的数的个数。

如果 n = p * q,p 与 q 均为质数,则

φ(n)=φ(pq)=φ(p1)φ(q1)=(p1)(q1)

明白了对于任意数n的φ(n)的计算方法即可得出上述结论

对于任意数n的φ(n)的计算

再说一遍:φ(n) 表示在小于等于 n 的正整数之中,与 n 构成互质关系的数的个数。

1~N共有N个数,去掉其中N的因数,剩下的就是与 n 构成互质关系的数。由此即可求出φ(n) 。

先对N进行质因数分解:

N=p1c1p2c2p3c3pmcm

1~N中,任一质数p的倍数的个数为[N/p]取整,另一质数q的倍数的个数为[N/q]取整。

1~N中除去p与q的倍数。剩下的,与 n 构成互质关系的数的,个数为

NNpNq+Npq=N(11p)(11q)

PS: 因为pq的倍数被多去了一次,所以要加上[N/pq]取整。使用了容斥原理。

由质因数分解的定义可得,N的全部因数为

p1p2p3pm

φ(N)=Ni=1mNpi+1i<jmNpipj1i<j<kmNpipjpk++(1)m+1Np1p2pm

化简得

φ(N)=Ni=1m(11pi)

上述方法的python实现:

python按欧拉函数定义计算任意数的欧拉函数

公钥私钥的生成

公钥的选择条件 gcd(e,φ(n))=1 保证了私钥d的存在,既e的逆元存在模φ(n)

为什么呢,需要理解 模的逆元 这个概念

模的逆元

定义:模m意义下,e与m互质时,存在k, 有de=km+1既de≡1(mod m ),则称d为e的逆元

逆元存在的充要条件

模m意义下,e的逆元存的冲要条件就是

gcd(em)=1

证明则需要使用 辗转相除法 的知识,见下文

辗转相除法

也叫欧几里得算法,对于e、φ(n)有s、d,有下式

gcd(Φ(n),e)=sΦ(n)+de

当 gcd(e,φ(n))=1时,上式为

1=sΦ(n)+de

可写成下式,后文的证明需要使用此式

de=1+sΦ(n)

证明解密是加密的逆过程

当我们知道d、n可对密文c进行如下操作得到明文m。 证明解密是加密的逆过程即证明下式成立

m=cdmodn

证:

考虑到

c=mdmodn=(cdmodn)emodn

对于c可进行如下代换

c=(me+k1n)

将上式带入后有

=cdmodn=(md+k1n)dmodn
=(i+j=dmie(k1n)j)modn
=(med)modn

 

对于ed有下式

de=1+sΦ(n)

带入右式有

=(med)modn=mmsΦ(n)modn

其中,由快速幂取模(后文有解释)有

msΦ(n)modn=i=1..s(mΦ(n)modn)modn

欧拉定理(后文有解释)得出

mφ(n)modn=1

带入后右式有

=m1modn=mmodn

由于0≤m<n则右式有

=mmodn=m

证毕

证明加密是解密的逆过程同理可证

快速幂取模

公式:

(a×b)modm=((amodm)×(bmodm))modm

证明:

这里,a、b和m都是整数,我们假设a和b的模除以m的结果分别为A和B,那么根据取模的定义我们有:

a=km+A (A<m)
b=nm+B (B<m)

我们把这两个表达式带入到等式左边得到:

(a×b)modm=(km+A)(nm+B)modm=(knm²+(kB+nA)m+(AB))modm=ABmodm

然后,再看一下等式的右边:

((amodm)×(bmodm))modm=(AB)modm

证毕

欧拉定理

对任何两个互质的正整数a, m(即 gcd(a,m) = 1),m>2,有m

aφ(m)1(modm)
1=aφ(m)modm

证明:

欧拉定理是数论中的一个重要定理,由著名数学家欧拉提出。欧拉定理可以表示为:如果a和n是互质的正整数,那么 a^(φ(n)) ≡ 1 (mod n),其中φ(n) 是欧拉φ函数,表示小于n并且与n互质的正整数数量。

证明:

首先,我们考虑一个集合S,这个集合包含了所有小于n并且与n互质的正整数。记φ(n)=m。

然后,我们考虑另一个集合T,它是由a乘以集合S的每个元素并且对n取模得到的。根据a和n互质,我们知道这样得到的集合T的元素是不重复的,并且与集合S一一对应。记作

S={x1,x2,...,xm}
T={y1,y2,...,ym}
yiaxi(modn)

我们考虑集合S的元素的乘积与集合T的元素的乘积,并且都对n取模,由于S和T是一一对应的,它们的乘积应该相等,即有:

x1x2...xmy1y2...ym(modn)ax1ax2...axm(modn)
x1x2...xmamx1x2...xm(modn)

因为等式左边和n互质,我们可以得到:

1am(modn)

因为m=φ(n)

证毕