介绍
RSA 是一种非对称的公开密钥算法,它需要一对公钥和私钥,消息发送者使用公钥对消息进行加密,消息接收者使用私钥对消息进行解密。这个算法的特殊之处在他的加密、解密算法和公钥都是公开的,只有私钥是保密的,而试图破解的人即使拿到公钥和加密的消息,在知道加密、解密算法的情况下,依然无法对消息进行解密。下面我们看看它的加密、解密算法长什么样。
RSA 算法
p
\ p
p 和
q
\ q
q 是两个非常大的素数,
n
=
p
×
q
\ n=p \times q
n=p×q,
a
\ a
a 和
b
\ b
b 是正整数,满足
a
×
b
≡
1
(
m
o
d
φ
(
n
)
)
\ a \times b \equiv 1 (mod\ \varphi(n))
a×b≡1(mod φ(n)),
φ
(
n
)
\ \varphi(n)
φ(n) 表示小于
n
\ n
n 且与
n
\ n
n 互素的正整数个数。这里,
b
\ b
b 和
n
\ n
n 就是公钥,对外公开,
a
\ a
a 就是私钥,对外保密。假设消息明文为
x
\ x
x,密文为
y
\ y
y,
x
\ x
x 和
y
\ y
y 是小于
n
\ n
n 的正整数,则:
加密函数为:
e
(
x
)
=
x
b
m
o
d
n
\ e(x)=x^b\ mod\ n
e(x)=xb mod n
解密函数为:
d
(
y
)
=
y
a
m
o
d
n
\ d(y)=y^a\ mod\ n
d(y)=ya mod n
这个算法要能按照预期工作,必须保证两点:
- 解密后的消息和原来的消息一样,也就是 x = d ( e ( x ) ) \ x=d(e(x)) x=d(e(x))
- 根据公开的 b \ b b 和 n \ n n 无法破解保密的 a \ a a
在介绍证明方法前,我们先来看一个简化的例子:
假设
p
=
3
,
q
=
5
,
n
=
15
\ p=3,q=5,n=15
p=3,q=5,n=15,小于 15 且与 15 互素的正整数有:1、2、4、7、8、11、13、14,也就是一共有 8 个,所以
φ
(
15
)
=
8
\ \varphi(15)=8
φ(15)=8,找到
a
=
11
,
b
=
3
\ a=11,b=3
a=11,b=3 满足
a
×
b
=
33
≡
1
(
m
o
d
8
)
\ a\times b=33 \equiv 1 (mod\ 8)
a×b=33≡1(mod 8),所以在这里例子里,公钥就是 15 和 3,私钥就是 11。当某个明文消息
x
=
12
\ x=12
x=12,加密的过程是
y
=
1
2
3
m
o
d
15
=
1728
m
o
d
15
=
3
\ y=12^3\ mod\ 15=1728\ mod\ 15=3
y=123 mod 15=1728 mod 15=3。接收者得到密文 3 后解密的过程是:
3
11
m
o
d
15
=
177147
m
o
d
15
=
12
\ 3^{11}\ mod\ 15=177147\ mod\ 15=12
311 mod 15=177147 mod 15=12,可以看到解密后的 12 和原先的明文是一模一样的。
这里用的是简化的例子,实际上 p \ p p 和 q \ q q 是两个非常大的素数,比如说现在的 RSA 算法要求 n \ n n 是 1024 位甚至 2048 位,也就是 2 1024 \ 2^{1024} 21024 和 2 2048 \ 2^{2048} 22048,对于那么大的数字,寻找素数 p \ p p 和 q \ q q 以及计算 n \ n n 并不困难,但是对给定的 n \ n n 做素因数分解成 p \ p p 和 q \ q q 是极其困难的,同样的,因为 φ ( n ) \ \varphi(n) φ(n) 的计算也依赖于 p \ p p 和 q \ q q,所以计算出 φ ( n ) \ \varphi(n) φ(n) 也非常困难,而 a × b ≡ 1 ( m o d φ ( n ) ) \ a \times b \equiv 1 (mod\ \varphi(n)) a×b≡1(mod φ(n)),所以要根据 n \ n n 和 b \ b b 计算出 a \ a a 也就几乎是不可能的。
证明方法介绍
最后我们看下
x
=
d
(
e
(
x
)
)
\ x=d(e(x))
x=d(e(x)) 的证明,这里介绍的是《应用近世代数》(见参考资料)一书中的证明方法,这个方法只需要用到 Euler 定理,比较容易看懂,过程如下:
∵
e
(
x
)
=
x
b
m
o
d
n
∴
e
(
x
)
=
(
x
b
−
c
n
)
m
o
d
n
∴
d
(
e
(
x
)
)
=
(
x
b
−
c
n
)
a
m
o
d
n
∴
d
(
e
(
x
)
)
=
x
a
b
m
o
d
n
∵
a
b
≡
1
(
m
o
d
φ
(
n
)
)
∴
a
b
=
t
φ
(
n
)
+
1
∴
d
(
e
(
x
)
)
=
x
t
φ
(
n
)
+
1
m
o
d
n
\because e(x)=x^b\ mod\ n\\ \therefore e(x)=(x^b-cn)\ mod\ n\\ \therefore d(e(x))=(x^b-cn)^a\ mod\ n\\ \therefore d(e(x))=x^{ab}\ mod\ n\\ \because \ ab \equiv 1 (mod\ \varphi(n))\\ \therefore ab=t\varphi(n)+1\\ \therefore d(e(x))=x^{t\varphi(n)+1}\ mod\ n
∵e(x)=xb mod n∴e(x)=(xb−cn) mod n∴d(e(x))=(xb−cn)a mod n∴d(e(x))=xab mod n∵ ab≡1(mod φ(n))∴ab=tφ(n)+1∴d(e(x))=xtφ(n)+1 mod n
也就是说只需要证明
x
t
φ
(
n
)
+
1
m
o
d
n
=
x
\ x^{t\varphi(n)+1}\ mod\ n=x
xtφ(n)+1 mod n=x 就可以了,分两种情况讨论:
当
x
\ x
x 和
n
\ n
n 互素:
根据 Euler 定理:
x
φ
(
n
)
≡
1
m
o
d
n
\ x^{\varphi(n)} \equiv 1\ mod\ n
xφ(n)≡1 mod n,所以
x
t
φ
(
n
)
+
1
m
o
d
n
=
x
\ x^{t\varphi(n)+1}\ mod\ n=x
xtφ(n)+1 mod n=x
当
x
\ x
x 和
n
\ n
n 不是互素:
则
x
=
s
p
\ x=sp
x=sp
根据 Euler 函数,
φ
(
n
)
=
(
p
−
1
)
(
q
−
1
)
φ
(
q
)
=
q
−
1
\varphi(n)=(p-1)(q-1)\\ \varphi(q)=q-1
φ(n)=(p−1)(q−1)φ(q)=q−1
再根据 Euler 定理,
x
(
q
−
1
)
=
(
s
p
)
q
−
1
≡
1
m
o
d
q
x
t
φ
(
n
)
=
x
t
(
p
−
1
)
(
q
−
1
)
≡
1
m
o
d
q
∴
x
t
φ
(
n
)
=
r
q
+
1
∴
x
t
φ
(
n
)
+
1
=
x
t
φ
(
n
)
⋅
x
=
r
q
x
+
x
=
r
q
s
p
+
x
=
r
s
n
+
x
≡
x
m
o
d
n
∴
x
t
φ
(
n
)
+
1
m
o
d
n
=
x
x^{(q-1)}=(sp)^{q-1} \equiv 1\ mod\ q\\ x^{t\varphi(n)}=x^{t(p-1)(q-1)} \equiv 1\ mod\ q\\ \therefore x^{t\varphi(n)}=rq+1\\ \therefore x^{t\varphi(n)+1}=x^{t\varphi(n)}\cdot x=rqx+x=rqsp+x=rsn+x \equiv x\ mod\ n\\ \therefore x^{t\varphi(n)+1}\ mod\ n=x
x(q−1)=(sp)q−1≡1 mod qxtφ(n)=xt(p−1)(q−1)≡1 mod q∴xtφ(n)=rq+1∴xtφ(n)+1=xtφ(n)⋅x=rqx+x=rqsp+x=rsn+x≡x mod n∴xtφ(n)+1 mod n=x
证毕。可以看到在有了 Euler 定理后,配上一些技巧性的操作,就可以比较容易地证明
x
=
d
(
e
(
x
)
)
\ x=d(e(x))
x=d(e(x)),也就是保证了解密后的消息和原来的消息一样。下面我们看下 Euler 定理长什么样。
Eurler 函数和 Eurler 定理
Eurler 函数
若 n \ n n 是一个正整数, φ ( n ) \ \varphi(n) φ(n) 表示小于 n \ n n 且与 n \ n n 互素的正整数个数。当 n \ n n 是一个素数时,显然有 φ ( n ) = n − 1 \ \varphi(n)=n-1 φ(n)=n−1,若 n \ n n 的素因数分解是 n = p × q \ n=p \times q n=p×q,则 φ ( n ) = ( p − 1 ) ( q − 1 ) \ \varphi(n)=(p-1)(q-1) φ(n)=(p−1)(q−1),证明方法见参考资料。
Eurler 定理
若正整数 a \ a a 和 n \ n n 互素,则 a φ ( n ) ≡ 1 m o d n \ a^{\varphi(n)} \equiv 1\ mod\ n aφ(n)≡1 mod n,证明方法需要用到子群的阶数和指数关系,非常的巧妙,祥见参考资料。
参考资料
《应用近世代数》(第 3 版)胡冠章 王殿军 编著 清华大学出版社 ISBN 978-7-302-12566-2