1. RSA算法介绍
RSA算法是非对称加密算法的一种,RSA算法的核心在于制作公钥和私钥的过程。本文章试图阐明两个问题:
- RSA算法背后的数学基础是什么?
- RSA算法中为什么私钥和公钥的使用没有顺序限制?
1.1 RSA算法流程简介
公钥制作方法:
- 选取两个素数
a
,b
,例如a=17、b=19
- 求出
c=a×b
,c=323
- 求出
d=(a-1)*(b-1)
,d=288
- 选取与
d
没有公约数的e
,例如e=11
- 此时
c=323、e=11
作为公钥
私钥制作方法
- 求出
f
,使其满足(f*e)÷d余1
,即f*e≡1(mod d)
【注意这个式子】 - 将
c=323、f=131
作为私钥
公钥加密明文过程
- 密文= ( ( 明文 ) e / c ) ((明文)^e/c) ((明文)e/c)的余数= ( 明文 ) e ( m o d c ) (明文)^e(modc) (明文)e(modc)
私钥解密密文过程
- 明文= ( ( 密文 ) f / c ) ((密文)^f/c) ((密文)f/c)的余数= ( 密文 ) f ( m o d c ) (密文)^f(modc) (密文)f(modc)
1.2 RSA算法安全性保障
通过上述的RSA算法的加密与解密过程,可以得知,若想破解加密算法,必须求得私钥中的f,但是f是通过d得出的,进一步d又是通过所选取的两个素数得出的。当a
与b
足够大时,解密几乎
成为不可能。这就是RSA算法的安全性保障。
2. RSA算法中的数学原理
2.1 概念介绍
- 乘法逆元:数学上的乘法逆元就是指只管的倒数,即
a
的逆元是1/a
,也即与a
相乘得1
的数字。 - 取模运算的乘法逆元:即对与整数
a
,与互质的数b
作为模数,当整数x
满足 a x m o d b ≡ 1 ax \space mod b ≡ 1 ax modb≡1,称 x x x为a
为关于模b
的逆元。
例如: 3 ∗ 6 / 3 % 7 3*6/3\%7 3∗6/3%7,这种简单的运算,当然可以按照结合律,从左至右计算得出。但是在计算机世界中,运算数通常较大,需要基于同余理论进行取模。计算步骤就变成了如下形式:
- 3 ∗ 6 = 18 3*6=18 3∗6=18
- 18 % 7 = 4 18\%7=4 18%7=4
- 4 / 3 4/3 4/3 由于无法整除,运算无法进行下去。
但引入取模运算中的乘法逆元
概念后,可以求出除数3
关于模数7
的乘法逆元5
(根据定义,5符合
3
∗
5
%
7
=
1
3*5\%7=1
3∗5%7=1)所以,可以用乘5代替除以3。计算步骤转为如下形式:
4.
3
∗
6
=
18
3*6=18
3∗6=18
5.
18
%
7
=
4
18\%7=4
18%7=4
6.
4
∗
5
=
20
4*5=20
4∗5=20 就是将除3模7运算,转换成乘5模7,可以理解为在模7运算中,3和5互为“倒数”,所以除3和乘5是等同的
从中可以窥探一二,乘法逆元可以用来将除转换为乘,解决一些无法整除的问题。
2.2 乘法逆元在RSA算法中的体现
熟悉乘法逆元的概念后,细心的读者可以发现,在私钥制作过程中
,f
与e
是互为模d的乘法逆元
。那么整个加密过程就简化为:
设 明文=M ,密文=N;
N
=
M
e
%
c
N =M^e\%c
N=Me%c
M
=
N
f
%
c
M=N^f\%c
M=Nf%c
这里又出现了一个新得问题,之前f和e是互为模d得乘法逆元,这没有问题,但这里可不是模d,是模c
,那么就需要引入第二个概念欧拉函数
与费马小定理
以及欧拉定理
。
- 费马小定理:如果p是一个质数,而整数a不是p的倍数,则有 a p − 1 ≡ 1 ( m o d p ) a^{p-1} ≡1(mod p) ap−1≡1(modp)
- 欧拉函数: ϕ ( n ) \phi(n) ϕ(n),表示小于n的正整数中与n互质的数的数目。
- 欧拉定理:如果两个正整数
a
和n
互质,则n
的欧拉函数可以得出 a ϕ ( n ) ≡ 1 ( m o d n ) a^{\phi(n)}≡1(modn) aϕ(n)≡1(modn);
在RSA算法中:计算过程如下
创建公钥&私钥过程
- 选取两个素数
a
,b
,例如a=17、b=19
- 计算
a
和b
的乘积c=a*b=323
,c
的二进制写法为101000011
一共9
位,即为密钥的长度为9
- 计算
c
的欧拉函数 ϕ ( c ) \phi(c) ϕ(c),c
是质数,所以 ϕ ( c ) = c − 1 \phi(c)=c-1 ϕ(c)=c−1 , c = a ∗ b c=a*b c=a∗b,最终得出 ϕ ( c ) = ( a − 1 ) ∗ ( b − 1 ) \phi(c)=(a-1)*(b-1) ϕ(c)=(a−1)∗(b−1),即d=288 - 随机挑选一个整数,与d互质,
e=17
- 计算e对于
ϕ
(
c
)
\phi(c)
ϕ(c)的乘法逆元
f
; e f ≡ 1 ( m o d ϕ ( c ) ) ef≡1(mod \phi(c)) ef≡1(modϕ(c)) ;该式等价于 e f − 1 ≡ k ϕ ( c ) ef-1≡ k\phi(c) ef−1≡kϕ(c);带入已知项,得出 17 f + 288 y ≡ 1 ( − k = y ) 17f+288y≡1(-k=y) 17f+288y≡1(−k=y);利用“辗转相除法”得到f=131 - 将(323,17)封装乘公钥,(323,131)封装成私钥;
加密过程
- M e ≡ N ( m o d c ) M^{e}≡N(mod c) Me≡N(modc)
- N + k c + R e m a i n d e r = M e + R e m a i n d e r N+kc+Remainder=M^{e}+Remainder N+kc+Remainder=Me+Remainder
- N = M e − k c N=M^e-kc N=Me−kc
解密过程
1.
(
M
e
−
k
c
)
f
≡
M
(
m
o
d
c
)
(M^{e}-kc)^f≡M(mod\space c)
(Me−kc)f≡M(mod c)
2.由于带有
k
c
kc
kc的项都会被c整除,所以拆开后等同于下式;
3.
M
e
f
≡
M
(
m
o
d
c
)
M^{ef}≡M(mod c)
Mef≡M(modc)
4. 由于
e
f
≡
1
(
m
o
d
ϕ
(
c
)
)
ef≡1(mod\space \phi(c))
ef≡1(mod ϕ(c))
5. 所以
e
f
=
h
ϕ
(
c
)
+
1
ef=h \phi(c)+1
ef=hϕ(c)+1
6.
M
h
ϕ
(
c
)
+
1
≡
M
(
m
o
d
c
)
M^{h \phi(c)+1}≡M(mod\space c)
Mhϕ(c)+1≡M(mod c)
分情况讨论
case1:如果M与c互质
M
ϕ
(
c
)
≡
1
(
m
o
d
c
)
M^{\phi(c)}≡1(mod \space c)
Mϕ(c)≡1(mod c)
M
ϕ
(
c
)
≡
1
+
k
c
M^{\phi(c)}≡1+kc
Mϕ(c)≡1+kc
(
M
ϕ
(
c
)
)
h
≡
(
1
+
k
c
)
h
(M^{\phi(c)})^h≡(1+kc)^h
(Mϕ(c))h≡(1+kc)h
展开后,除c余数同样为1,所以可得
(
M
ϕ
(
c
)
)
h
≡
1
(
m
o
d
c
)
(M^{\phi(c)})^h≡1(mod\space c)
(Mϕ(c))h≡1(mod c)
M
h
ϕ
(
c
)
+
1
≡
M
(
m
o
d
c
)
M^{h \phi(c)+1}≡M(mod\space c)
Mhϕ(c)+1≡M(mod c) # 同乘M
case 2: 如果M与c不是互质关系
当M与c不互质时(m < c),由于c=a * b, 那么 gcd(M,c) = a 或者 gcd(M,c)=b,假设M=la
,且已知M<c,此时,M必然与c互质。
(1)根据费马小定理,M与c互质时,可以得到
M
h
ϕ
(
a
)
≡
1
(
m
o
d
a
)
M^{h \phi(a)}≡1(mod\space a)
Mhϕ(a)≡1(mod a)
(
M
a
−
1
)
h
(
b
−
1
)
m
o
d
a
=
1
(M^{a-1})^{h(b-1)}mod a =1
(Ma−1)h(b−1)moda=1
(
a
−
1
)
(
b
−
1
)
=
ϕ
(
c
)
=
d
(a-1)(b-1)=\phi(c)=d
(a−1)(b−1)=ϕ(c)=d ;
e
f
=
h
ϕ
(
c
)
+
1
ef=h\phi(c)+1
ef=hϕ(c)+1;
M
e
f
−
1
m
o
d
b
=
1
M^{ef-1}mod b=1
Mef−1modb=1
M
e
f
−
1
=
k
b
+
1
M^{ef-1}=kb+1
Mef−1=kb+1
M
e
f
=
k
b
M
+
M
M^{ef}=kbM+M
Mef=kbM+M
之前假设M=la,所以
M
e
f
=
(
k
b
)
(
l
a
)
+
(
l
a
)
=
(
k
l
)
(
a
b
)
+
M
=
(
k
l
)
(
c
)
+
M
=
M
(
m
o
d
c
)
M^{ef}=(kb)(la)+(la)=(kl)(ab)+M=(kl)(c)+M=M(mod c)
Mef=(kb)(la)+(la)=(kl)(ab)+M=(kl)(c)+M=M(modc)
说明
仅供参考,具体的证明过程紧扣“逆元”+“费马小定理”+”欧拉定理“即可。
致谢
特别鸣谢热心市民BIN