流程
密钥生成流程
- 选取两个质数p,q
- 令n=p*q
- 求n的欧拉函数值为 ϕ ( n ) \phi(n) ϕ(n)
- 取任意的一个e,使得e在1到 ϕ ( n ) \phi(n) ϕ(n)内并且e和 ϕ ( n ) \phi(n) ϕ(n)互素
- 求d为e在 ϕ ( n ) \phi(n) ϕ(n)下的逆元
- 则私钥为(d,n),公钥为(e,n)
加密解密流程
假设Alice有一个信息需要发给Bob,但是没有可靠的通路来传递信息
那么Bob使用上面的方式生成私钥对和公钥对,将公钥对发给Alice,自己留着私钥对。公钥可以被通路上的窃听者收到
Alice收到公钥对(e,n)后对信息进行加密。假设信息为数字m,加密后的密文为C,则加密方式为 C = m e m o d n C=m^e\mod n C=memodn,然后Alice将密文C发给Bob,密文可以被通路上的窃听者收到
Bob收到密文后使用密钥对(d,n)解密: m = C d m o d n m=C^d\mod n m=Cdmodn得到原文
窃听者只能收到的是公钥对(e,n)和密文C,不能收到私钥对(d,n),理论上无法破解原文
原理
数学运算正确性证明:
已知:
e
d
≡
1
(
m
o
d
ϕ
(
n
)
)
ed\equiv 1 \pmod {\phi (n)}
ed≡1(modϕ(n))
C = ( m e ) m o d n C = (m^e) \mod n C=(me)modn
求证:
m = ( C d ) m o d n m = (C^d) \mod n m=(Cd)modn
证明:
∵ e d ≡ 1 ( m o d ϕ ( n ) ) \because ed\equiv 1 \pmod {\phi (n)} ∵ed≡1(modϕ(n))
∴ e d − 1 = k ϕ ( n ) \therefore ed-1=k\phi(n) ∴ed−1=kϕ(n)
∵ 由 欧 拉 定 理 : a ϕ ( n ) ≡ 1 ( m o d n ) , g c d ( a , m ) = 1 \because 由欧拉定理:a^{\phi(n)}\equiv1\pmod n,gcd(a,m)=1 ∵由欧拉定理:aϕ(n)≡1(modn),gcd(a,m)=1
又 ∵ C = ( m e ) m o d n , 即 C = m e + k n , k ∈ Z 又\because C = (m^e) \mod n,即C=m^e+kn,k\in Z 又∵C=(me)modn,即C=me+kn,k∈Z
∴ C d m o d n = m e d m o d n = m k ϕ ( n ) + 1 m o d n = m k ϕ ( n ) m o d n × m m o d n \therefore C^d\mod n \\=m^{ed}\mod n\\=m^{k\phi(n)+1}\mod n\\=m^{k\phi(n)}\mod n\times m\mod n ∴Cdmodn=medmodn=mkϕ(n)+1modn=mkϕ(n)modn×mmodn
此时对m和n的关系展开分类讨论
- 1:当 g c d ( m , n ) = 1 gcd(m,n)=1 gcd(m,n)=1时
1 ≡ m k ϕ ( n ) ( m o d n ) 1\equiv m^{k\phi(n)}\pmod n 1≡mkϕ(n)(modn)
故 C d ≡ m ( m o d n ) C^d\equiv m\pmod n Cd≡m(modn)
- 2: 当 g c d ( m , n ) ≠ 1 gcd(m,n)\not= 1 gcd(m,n)=1时
由于 n = p q n=pq n=pq,则 m = p k 1 q k 2 , k 1 , k 2 ∈ N m=p^{k_1}q^{k_2},k_1,k_2\in N m=pk1qk2,k1,k2∈N
此时: m k ϕ ( n ) m o d n = p k 1 k ϕ ( n ) q k 2 k ϕ ( n ) m o d n = ( p k 1 k ϕ ( n ) m o d n × q k 2 k ϕ ( n ) m o d n ) m o d n = [ { ( p ϕ ( n ) m o d n ) k 1 k } m o d n × { ( q ϕ ( n ) m o d n ) k 2 k } m o d n ] m o d n = 1 m o d n m^{k\phi(n)}\mod n\\= p^{k_1k\phi(n)}q^{k_2k\phi(n)}\mod n\\=(p^{k_1k\phi(n)}\mod n\times q^{k_2k\phi(n)}\mod n)\mod n\\=[\{(p^{\phi(n)}\mod n)^{k_1k}\}\mod n\times\{(q^{\phi(n)}\mod n)^{k_2k}\}\mod n]\mod n\\=1\mod n mkϕ(n)modn=pk1kϕ(n)qk2kϕ(n)modn=(pk1kϕ(n)modn×qk2kϕ(n)modn)modn=[{(pϕ(n)modn)k1k}modn×{(qϕ(n)modn)k2k}modn]modn=1modn,即此时也满足 1 ≡ m k ϕ ( n ) ( m o d n ) 1\equiv m^{k\phi(n)}\pmod n 1≡mkϕ(n)(modn)
综上所述, C d ≡ m ( m o d n ) , Q . E . D . C^d\equiv m\pmod n,Q.E.D. Cd≡m(modn),Q.E.D.
流程可靠性证明
假设窃听者收到了公钥对和密文,那么破解的关键就是解出密钥参数d。已知 d e ≡ 1 m o d ϕ ( n ) de\equiv1\mod {\phi(n)} de≡1modϕ(n),也就是 d e = k n + 1 de=kn+1 de=kn+1,那么关键就是要解出来 ϕ ( n ) \phi(n) ϕ(n)
关于欧拉函数的计算有三种方法:
-
如果知道p和q,那么就可以有 ϕ ( n ) = ( p − 1 ) ( q − 1 ) \phi(n)=(p-1)(q-1) ϕ(n)=(p−1)(q−1),时间复杂度为 O ( 1 ) O(1) O(1)
-
如果不知道p和q,那么可以尝试线性素数筛法,时间复杂度为 O ( n ) O(n) O(n)
-
或者可以尝试将n分解为p和q,现在最先进的算法可以做到时间复杂度为 O ( n ) O(\sqrt n) O(n)
但在现实生活中,p和q至少都是512位长的数字(512个二进制位),基本上是 1 0 154 10^{154} 10154的数量级,那么n就是 1 0 308 10^{308} 10308的数量级,就算使用时间复杂度为 O ( n ) O(\sqrt n) O(n)的算法也需要 1 0 154 10^{154} 10154数量级的操作。按照CPU每秒钟操作 1 0 8 10^8 108来算,也需要大概 1 0 20 10^{20} 1020秒,也就是大约 1 0 15 10^{15} 1015天才能破解出一个512位长的密码。
当然,量子计算机出来后另说。