RSA加解密算法简析
对于下面的公式,已知m、e、N 求出c容易,但是已知c、N、e反推m就很难了
m
e
m
o
d
N
=
c
m^e mod N =c
memodN=c
这时钥匙就是一个陷门,是某种让加密逆过程很容易的信息,比如我们如果知道了一个d,使得
c
d
m
o
d
N
=
m
c^d mod N =m
cdmodN=m
那么,有
m
e
∗
d
m
o
d
N
=
m
m^{e*d} mod N =m
me∗dmodN=m
这里,e表示加密,d表示解密,这时我们需要一种方法构建e和d,导致其他人很难求出d的值,我们需要用到质因数分解
1.假设随机生成一个超过150位的质数p1,然后生成位数相同的第二个质数p2,将p1与p2相乘,这样就得到了N,N将超过300位,将p1与p2隐藏起来,这时如果其他人想得到p1与p2,用计算机求解会运算几年的时间
2.φ函数φ(n)是小于n的正整数中与n互质的数的数目,φ函数即欧拉函数,对于任意质数P都有φ§=P-1,比如对于质数21377,φ(21377)=21376
3.φ函数性质:
φ
(
A
∗
B
)
=
φ
(
A
)
∗
φ
(
B
)
φ(A*B)=φ(A)*φ(B)
φ(A∗B)=φ(A)∗φ(B)
那么如果已知N是两质数p1和p2的乘积,那么有
φ
(
N
)
=
φ
(
p
1
)
∗
φ
(
p
2
)
=
(
p
1
−
1
)
∗
(
p
2
−
1
)
φ(N)=φ(p1)*φ(p2)=(p1-1)*(p2-1)
φ(N)=φ(p1)∗φ(p2)=(p1−1)∗(p2−1)
比如77=7*11,那么φ(77)=6*10=60
4.欧拉定理
对于互质的m和N,有
m
φ
(
N
)
≡
1
(
m
o
d
N
)
m^{φ(N)}≡1(mod N)
mφ(N)≡1(modN)
也就是
m
φ
(
N
)
m
o
d
N
=
1
m
o
d
N
m^{φ(N)}mod N=1 mod N
mφ(N)modN=1modN
5 .根据欧拉定理有:
m
k
∗
φ
(
N
)
≡
1
k
(
m
o
d
N
)
m^{k*φ(N)}≡1^k(mod N)
mk∗φ(N)≡1k(modN)
将恒等式两边同乘m,有
m
∗
m
k
∗
φ
(
N
)
≡
m
∗
1
k
(
m
o
d
N
)
m*m^{k*φ(N)}≡m*1^k(mod N)
m∗mk∗φ(N)≡m∗1k(modN)
也就是
m
k
∗
φ
(
N
)
+
1
≡
m
(
m
o
d
N
)
m^{k*φ(N)+1}≡m(mod N)
mk∗φ(N)+1≡m(modN)
对于我们假设的包含d的公式,当N>m时,有
m
e
∗
d
(
m
o
d
N
)
=
m
=
m
(
m
o
d
N
)
m^{e*d} (mod N) =m=m(mod N)
me∗d(modN)=m=m(modN)
则有
d
=
(
k
∗
φ
(
N
)
+
1
)
/
e
d=(k*φ(N)+1)/e
d=(k∗φ(N)+1)/e
6.加解密具体步骤
-
Alice随机选择两个互质的数,比如p1=53,p2=59
-
N=p1*p2=3127
-
φ(N)=φ(p1)*φ(p2)=52*58=3016
-
取一个奇数e,并且该奇数不能同φ(N)有公因数,这里Alice选用了e=3
-
计算d=(k*φ(N)+1)/e=(k*3016+1)/3,这里取k=2,得d=2011
-
将d与N自己保存好作为私钥,将e于N作为公钥
-
Bob想给Alice发信息,就要用Alice的公钥进行加密,比如Bob给Alice发的信息转为数字为m,值为89,那么加密后的数据为c
c = m e m o d N = 8 9 3 m o d 3127 = 1394 c=m^emod N=89^3mod 3127=1394 c=memodN=893mod3127=1394 -
Bob将加密数据c发给Alice,Alice将d与N拿了出来用来解密
c d m o d N = 139 4 2011 m o d 3127 = 89 = m c^dmod N=1394^{2011}mod3127=89=m cdmodN=13942011mod3127=89=m
这样,Alice就拿到了Bob加密过的数据,如果有人想知道d就必须知道φ(N),这就涉及到了N的质因数分解,就像之前说的当N特别大时,用计算机求解也会运算几年的时间