目录
RSA加密算法
RSA加密算法 是一种 非对称加密算法,在公开密钥加密和电子商业中被广泛使用。例如:
- 在HTTPS协议的加密层(SSL/TLS)作为密钥交换的方法
- 支付宝支付API作为签名算法
- 银联支付API作为签名算法
- Secure Shell(安全外壳协议,简称SSH)是一种加密的网络传输协议
非对称加密算法
公开密钥密码学 (英语:Public-key cryptography,也称 非对称式密码学 )是密码学的一种算法,它需要两个密钥,一个是公开密钥,另一个是私有密钥;一个用作加密,另一个则用作解密。 使用其中一个密钥把明文加密后所得的密文,只能用相对应的另一个密钥才能解密得到原本的明文;甚至连最初用来加密的密钥也不能用作解密。由于加密和解密需要两个不同的密钥,故被称为非对称加密; 不同于加密和解密都使用同一个密钥的对称加密。虽然两个密钥在数学上相关,但如果知道了其中一个,并不能凭此计算出另外一个;因此其中一个可以公开,称为公钥,任意向外发布;不公开的密钥为私钥,必须由用户自行严格秘密保管,绝不透过任何途径向任何人提供,也不会透露给被信任的要通信的另一方。
工作原理
本质就是依赖于三个自然数: n , e , d n,e,d n,e,d, n n n 和 d d d 构成一个密钥, n n n 和 e e e 构成另一个密钥。对于 ( n , d ) (n, d) (n,d)与 ( n , e ) (n, e) (n,e)这两个密钥,无论用哪个密钥加密出来的密文都可以用另一个密钥解开, 所以不必强调哪个用于加密,哪个用于解密,只要把一个公布出去(称为公钥),另一个自己藏着(称为私钥)就行了。
根据这种特性,通常,
- 使用 公钥加密 , 私钥解密 ,实现 加密。
- 使用 私钥加密 , 公钥解密 ,实现 数字签名 。
- 代替 密码散列函数+Token,比如MD5、SHA2,做 消息认证。
(关于加密、数字签名,消息认证可以期待下篇文章。)
关于
- 如何确定 n , e , d n,e,d n,e,d这三个自然数?
- 如何进行加密解密?
- 已知公钥如何破解私钥?
我们需要了解RSA加解密的数学原理,主要包括
- 互质
- 欧拉函数
- 同余
- 欧拉定理
- 模反元素
- 扩展欧几里得算法
数学原理
你可以快速浏览这些定理和性质,然后进入下一章节,笔者在下一章节回答上述三个问题的同时,尽可能地将所需定理和性质做出了明确标注,阅读过程中可以随时回过头来确认。
因子
一个整数被另一整数整除,后者即是前者的 因子,如1、2、4、8都为8的因子。
质数
大于1的自然数,除1和本身外没有其他正因子,称为 质数 。
互质
两个自然数,除1以外没有其他公因子,则称它们为 互质 。
互质性质
根据以上定理可以得出以下几个性质(并不止于以下性质)
- 任意两个不相等质数一定互质(因为质数的因子只有1和本身,如果不相等则公因子只有1)
- 1和任意自然数都互质(只有1是公因子)
- 一个数是质数,另一个数只要不是前者的倍数,则二者互质(质数的因子只有1和本身,如果后者的因子不包含这个前者,那么二者公因子只有1)
- 两个数,较大的数是质数,那么二者互质(可由 互质性质3 得到)
- 两个不等质数之 积 的因子有4个,即,1,两个不等质数以及积本身(由 质数定理 和 组合 可以得到)
欧拉函数
我们把用来表示“ 小于或等于 n n n的正整数中与 n n n互质的数的数目 ”的函数,称为欧拉函数,计作 φ ( n ) \varphi(n) φ(n)
欧拉函数性质
-
若 n n n是质数,那么
φ ( n ) = n − 1 \varphi(n)=n-1 φ(n)=n−1
由 互质性质4 可得。 -
若 n = p q n=pq n=pq,且 p p p, q q q是 两个不相等的质数,那么
φ ( n ) = ( p − 1 ) ( q − 1 ) \varphi(n)=(p-1)(q-1) φ(n)=(p−1)(q−1)
证明:- 求 φ ( n ) \varphi(n) φ(n),即求:小于等于的 n n n的正整数,有多少数与 n n n互质
- 逆向思考,可以先求:小于等于的 n n n的正整数,有多少数与 n n n不互质
- 由于 p 、 q p、q p、q为 n n n的质因子,所以,如果一个数不与 n n n互质,那么这个数一定是 p p p或 q q q的整数倍(由 互质性质5 得)
- 由于 n = p q n=pq n=pq,所以, ( n − 1 ) (n-1) (n−1)中包含 1 q , 2 q , 3 q . . . ( p − 1 ) q 1q,2q,3q...(p-1)q 1q,2q,3q...(p−1)q,一共 ( p − 1 ) (p-1) (p−1)个 q q q的倍数;同时包含 1 p , 2 p , 3 p . . . ( q − 1 ) p 1p,2p,3p...(q-1)p 1p,2p,3p...(q−1)p,一共 ( q − 1 ) (q-1) (q−1)个 p p p的倍数
- 又因为 p 、 q p、q p、q是 n n n的质因子,所以, n n n是 p 、 q p、q p、q的最小公倍数,即,在小于等于 n n n的正整数中不存在 p 、 q p、q p、q的其它公倍数
- 所以,小于等于的 n n n的正整数,有 ( p − 1 ) + ( q − 1 ) (p-1)+(q-1) (p−1)+(q−1)个数与 n n n不互质
- 所以,小于等于的
n
n
n的正整数,与
n
n
n互质的数有
φ ( n ) = n − 1 − ( ( p − 1 ) + ( q − 1 ) ) φ ( n ) = p q − p − q + 1 φ ( n ) = ( p − 1 ) ( q − 1 ) \varphi(n)=n-1-((p-1)+(q-1))\\ \varphi(n)=pq-p-q+1\\ \varphi(n)=(p-1)(q-1) φ(n)=n−1−((p−1)+(q−1))φ(n)=pq−p−q+1φ(n)=(p−1)(q−1)
同余
两个整数
a
a
a,
b
b
b,若它们除以正整数
m
m
m所得的余数相等,则称
a
a
a,
b
b
b对于模
m
m
m同余,记作
a
%
m
=
b
%
m
⟹
a
≡
b
(
m
o
d
m
)
a\%m=b\%m\implies a\equiv b(\bmod m)
a%m=b%m⟹a≡b(modm)
同余性质
- 当 b < m b<m b<m时, b = a % m b=a\%m b=a%m
- 整除性 , a ≡ b ( m o d m ) ⇒ a − b = c ∗ m , c ∈ Z a\equiv b{(\bmod {m})}\Rightarrow a-b=c*m,c\in \mathbb {Z} a≡b(modm)⇒a−b=c∗m,c∈Z ,(即是说 a 和 b 之差是 m 的整数倍)
- 保持基本运算 ,
a
≡
b
(
m
o
d
m
)
c
≡
d
(
m
o
d
m
)
}
⇒
{
a
±
c
≡
b
±
d
(
m
o
d
m
)
a
c
≡
b
d
(
m
o
d
m
)
\left.{\begin{matrix}a\equiv b{(\bmod {m})}\\c\equiv d{(\bmod {m})}\end{matrix}}\right\}\Rightarrow \left\{{\begin{matrix}a\pm c\equiv b\pm d{(\bmod {m})}\\ac\equiv bd{(\bmod {m})}\end{matrix}}\right.
a≡b(modm)c≡d(modm)}⇒{a±c≡b±d(modm)ac≡bd(modm)
这性质更可进一步引申成为这样:
a ≡ b ( m o d m ) ⇒ { a n ≡ b n ( m o d m ) , ∀ n ∈ Z a n ≡ b n ( m o d m ) , ∀ n ∈ N 0 {\displaystyle a\equiv b{(\bmod {m})}\Rightarrow {\begin{cases}an\equiv bn{(\bmod {m})},\forall n\in \mathbb {Z} \\a^{n}\equiv b^{n}{(\bmod {m})},\forall n\in \mathbb {N} ^{0}\end{cases}}} a≡b(modm)⇒{an≡bn(modm),∀n∈Zan≡bn(modm),∀n∈N0 - 放大缩小底数 ,k为整数,n为正整数, ( k m ± a ) n ≡ ( ± a ) n ( m o d m ) {\displaystyle (km\pm a)^{n}\equiv (\pm a)^{n}{(\bmod {m})}} (km±a)n≡(±a)n(modm)
同余性质3、4 可以根据 同余性质2 整除性来证明。
例如,证明:
a
≡
b
(
m
o
d
m
)
⇒
a
n
≡
b
n
(
m
o
d
m
)
a\equiv b{(\bmod {m})}\Rightarrow an\equiv bn{(\bmod {m})}
a≡b(modm)⇒an≡bn(modm)
a
=
c
∗
m
+
b
,
c
∈
Z
a
∗
n
=
(
c
∗
m
+
b
)
∗
n
a
n
=
c
n
∗
m
+
b
n
a
n
≡
b
n
(
m
o
d
m
)
a=c*m+b,c\in \mathbb {Z}\\ a*n=(c*m+b)*n\\ an=cn*m+bn\\ an\equiv bn(\bmod m)
a=c∗m+b,c∈Za∗n=(c∗m+b)∗nan=cn∗m+bnan≡bn(modm)
其它可同理证明。
同余性质 是证明RSA加解密的关键。
欧拉定理
对任何两个互质的正整数
a
a
a 、
n
n
n,
n
≥
2
n\geq2
n≥2,有
a
ϕ
(
n
)
≡
1
(
m
o
d
n
)
a^{\phi(n)} \equiv 1(\bmod n)
aϕ(n)≡1(modn)
费马小定理
如果n是质数p,那么
a
p
−
1
≡
1
(
m
o
d
p
)
a^{p-1} \equiv 1(\bmod p)
ap−1≡1(modp)
由 欧拉函数性质1 可得
模反元素
如果两个正整数
a
a
a和
n
n
n互质,那么一定可以找到整数
b
b
b,使得
a
b
−
1
ab-1
ab−1被
n
n
n整除
a
b
≡
1
(
m
o
d
n
)
ab \equiv 1(\bmod n)
ab≡1(modn)
此时
b
b
b就是
a
a
a关于
n
n
n的 模反元素。由 欧拉定理 可证,
b
b
b一定存在。
a
ϕ
(
n
)
=
a
×
a
ϕ
(
n
)
−
1
≡
1
(
m
o
d
n
)
a^{\phi(n)}=a \times a^{\phi(n)-1} \equiv 1(\bmod n)
aϕ(n)=a×aϕ(n)−1≡1(modn)
a
ϕ
(
n
)
−
1
a^{\phi(n)-1}
aϕ(n)−1就是
a
a
a关于
n
n
n的 模反元素
b
b
b 。模反元素可以通过 扩展欧几里得算法 求得。
欧几里得算法
定义
又称 辗转相除法 ,是求最大公约数(最大公因子)的算法。两个整数 a , b a, b a,b的最大公约数,记作 gcd ( a , b ) \gcd(a,b) gcd(a,b)
计算过程
将前两次余数
分别作为被除数
与除数
,得到新的余数
,
r
i
+
1
=
r
i
−
1
−
q
i
r
i
,
(
r
0
=
a
,
r
1
=
b
)
r_{i+1}=r_{i-1}-q_{i} r_{i},(r_{0}= a,r_{1}=b)
ri+1=ri−1−qiri,(r0=a,r1=b)
递归计算,直到
r
i
+
1
=
0
r_{i+1}=0
ri+1=0,那么此时 最大公约数 为
gcd
(
a
,
b
)
=
r
i
\gcd(a,b)=r_{i}
gcd(a,b)=ri
证明
证明, r i + 1 = 0 r_{i+1}=0 ri+1=0时, r i r_{i} ri是 a , b a,b a,b的 最大公因子 ( g = gcd ( a , b ) g=\gcd(a,b) g=gcd(a,b) )
- 因为 a = m g , b = n g a=mg,b=ng a=mg,b=ng,所以 r 2 = r 0 − r 1 = a − q 1 b = m g − q 1 n g r_{2}=r_{0}-r_{1}=a-q_{1}b=mg-q_{1}ng r2=r0−r1=a−q1b=mg−q1ng,所以 r 0 , r 1 , r 2 r_{0},r_{1},r_{2} r0,r1,r2可以被 g g g整除,同理(递降归纳)可求所有余数 r 0 , r 1 . . . r i − 1 , r i r_{0},r_{1}...r_{i-1},r_{i} r0,r1...ri−1,ri都可以被 g g g整除,所以 g ≤ r i g\leq r_{i} g≤ri
- 当 r i + 1 = 0 r_{i+1}=0 ri+1=0,有 0 = r i − 1 − q i r i 0=r_{i-1}-q_{i} r_{i} 0=ri−1−qiri,即 r i r_{i} ri整除 r i − 1 r_{i-1} ri−1
- 又当 r i = r i − 2 − q i − 1 r i − 1 , ( r 0 = a , r 1 = b ) r_{i}=r_{i-2}-q_{i-1} r_{i-1},(r_{0}= a,r_{1}=b) ri=ri−2−qi−1ri−1,(r0=a,r1=b),又因为 r i r_{i} ri整除 r i − 1 r_{i-1} ri−1,那么 r i r_{i} ri可以整除 r i − 2 r_{i-2} ri−2,同理(递降归纳), r i r_{i} ri可以整除所有余数 r 0 , r 1 . . . r i − 2 , r i − 1 r_{0},r_{1}...r_{i-2},r_{i-1} r0,r1...ri−2,ri−1
- 又因为 r 0 = a , r 1 = b r_{0}= a,r_{1}=b r0=a,r1=b,所以,此时 r i ≤ g r_{i}\leq g ri≤g
- 结论,由于 g ≤ r i g\leq r_{i} g≤ri,当 r i + 1 = 0 r_{i+1}=0 ri+1=0时, r i ≤ g r_{i}\leq g ri≤g,所以当 r i + 1 = 0 r_{i+1}=0 ri+1=0时, r i = g r_{i}= g ri=g
扩展欧几里得算法
定义
顾名思义是 欧几里得算法 的扩展。已知整数
a
、
b
a、b
a、b,扩展欧几里得算法 可以在求得
a
、
b
a、b
a、b的最大公约数的同时,能找到整数
x
、
y
x、y
x、y(其中一个很可能是负数),使它们满足 贝祖等式
a
x
+
b
y
=
gcd
(
a
,
b
)
ax + by = \gcd(a, b)
ax+by=gcd(a,b)
在欧几里得算法中,我们仅仅利用了每步带余除法所得的余数。扩展欧几里得算法还利用了带余除法所得的商,在辗转相除的同时也能得到 贝祖等式
计算过程
扩展欧几里得算法 在 欧几里得算法 的基础上增加了两个递归等式的计算
r
i
+
1
=
r
i
−
1
−
q
i
r
i
,
(
r
0
=
a
,
r
1
=
b
)
s
i
+
1
=
s
i
−
1
−
q
i
s
i
,
(
s
0
=
1
,
s
1
=
0
)
t
i
+
1
=
t
i
−
1
−
q
i
t
i
,
(
t
0
=
0
,
t
1
=
1
)
r_{i+1}=r_{i-1}-q_{i} r_{i},(r_{0}= a,r_{1}=b)\\ s_{i+1}=s_{i-1}-q_{i} s_{i},(s_{0}= 1,s_{1}=0)\\ t_{i+1}=t_{i-1}-q_{i} t_{i},(t_{0}= 0,t_{1}=1)
ri+1=ri−1−qiri,(r0=a,r1=b)si+1=si−1−qisi,(s0=1,s1=0)ti+1=ti−1−qiti,(t0=0,t1=1)
递归计算,直到
r
i
+
1
=
0
r_{i+1}=0
ri+1=0,那么此时
gcd
(
a
,
b
)
=
r
i
=
a
s
i
+
b
t
i
\gcd(a,b)=r_{i}=as_{i}+bt_{i}
gcd(a,b)=ri=asi+bti
证明
证明, r i = a s i + b t i , i ∈ N r_{i}=as_{i}+bt_{i},i\in\N ri=asi+bti,i∈N(已知条件为上述三等式),使用 完整归纳法
- 当 i = 0 i=0 i=0, r 0 = a s 0 + b t 0 = a ∗ 1 + b ∗ 0 = a r_{0}=as_{0}+bt_{0}=a*1+b*0=a r0=as0+bt0=a∗1+b∗0=a
- 当 i = 1 i=1 i=1, r 1 = a s 1 + b t 1 = a ∗ 0 + b ∗ 1 = b r_{1}=as_{1}+bt_{1}=a*0+b*1=b r1=as1+bt1=a∗0+b∗1=b
- 假设
r
i
=
a
s
i
+
b
t
i
,
r
i
−
1
=
a
s
i
−
1
+
b
t
i
−
1
r_{i}=as_{i}+bt_{i},r_{i-1}=as_{i-1}+bt_{i-1}
ri=asi+bti,ri−1=asi−1+bti−1成立,那么
r i + 1 = r i − 1 − q i r i = ( a s i − 1 + b t i − 1 ) − q i ( a s i + b t i ) = a ∗ ( s i − 1 − q i s i ) + b ∗ ( t i − 1 − q i t i ) = a s i + 1 + b t i + 1 r_{i+1}=r_{i-1}-q_{i} r_{i}\\ =(as_{i-1}+bt_{i-1})-q_{i}(as_{i}+bt_{i})\\ =a*(s_{i-1}-q_{i}s_{i})+b*(t_{i-1}-q_{i}t_{i})\\ =as_{i+1}+bt_{i+1} ri+1=ri−1−qiri=(asi−1+bti−1)−qi(asi+bti)=a∗(si−1−qisi)+b∗(ti−1−qiti)=asi+1+bti+1
所以 r i = a s i + b t i , i ∈ N 成 立 r_{i}=as_{i}+bt_{i},i\in\N成立 ri=asi+bti,i∈N成立, s i , t i s_{i},t_{i} si,ti满足 贝祖等式。
Python实现
#python3.7
def ext_euclid(a, b):
r0, r1 = a, b
s0, s1 = 1, 0
t0, t1 = 0, 1
if a * b == 0:
raise Exception("a,b must be nonzero!")
while r1 != 0:
q = r0 // r1
r0, r1 = r1, r0 - q * r1
s0, s1 = s1, s0 - q * s1
t0, t1 = t1, t0 - q * t1
return r0, s0, t0
Java实现
public BigInteger[] extEuclid(String a, String b) {
BigInteger r0 = new BigInteger(a), r1 = new BigInteger(b),
s0 = BigInteger.ONE, s1 = BigInteger.ZERO,
t0 = BigInteger.ZERO, t1 = BigInteger.ONE;
if(r0.multiply(r1).equals(BigInteger.ZERO))
throw new IllegalArgumentException("a,b must be nonzero!");
BigInteger q;
BigInteger intermediate;
while (!r1.equals(BigInteger.ZERO)){
BigInteger[] quotientAndRemainder = r0.divideAndRemainder(r1);
q = quotientAndRemainder[0];
r0 = r1;r1 =quotientAndRemainder[1];
intermediate = s0 ;s0 = s1;s1=intermediate.subtract(s1.multiply(q));
intermediate = t0 ;t0 = t1;t1=intermediate.subtract(t1.multiply(q));
}
return new BigInteger[]{r0,s0,t0};
}
确定 n , e , d n,e,d n,e,d
- 选择两个 不等质数 p , q p,q p,q,让 n = p q n=pq n=pq。假设 p = 17 , q = 23 p=17,q=23 p=17,q=23,那么 n = 17 ∗ 23 = 391 n=17*23=391 n=17∗23=391
- 由上述 欧拉函数性质2 得, φ ( n ) = ( p − 1 ) ( q − 1 ) \varphi(n)=(p-1)(q-1) φ(n)=(p−1)(q−1)。我们随机选择一个数 e e e,保证 1 < e < φ ( n ) 1<e<\varphi(n) 1<e<φ(n),同时保证, e e e与 φ ( n ) \varphi(n) φ(n)互质。那么 φ ( n ) = ( 17 − 1 ) ∗ ( 23 − 1 ) = 352 \varphi(n)=(17-1)*(23-1)=352 φ(n)=(17−1)∗(23−1)=352,随机选择 e = 57 e=57 e=57
- 求
e
e
e关于
φ
(
n
)
\varphi(n)
φ(n)的 模反元素
d
d
d ,即,
e
d
≡
1
(
m
o
d
φ
(
n
)
)
⇒
e
d
−
k
∗
φ
(
n
)
=
1
,
k
,
d
∈
Z
ed\equiv1(\bmod\varphi(n))\Rightarrow ed-k*\varphi(n)=1,k,d\in\Z
ed≡1(modφ(n))⇒ed−k∗φ(n)=1,k,d∈Z,
57 d + 352 k 1 = 1 57d + 352k_{1}=1 57d+352k1=1
根据 扩展欧几里得算法 可求, ( d , k 1 ) = ( 105 , − 17 ) , d = 105 (d,k_{1})=(105,-17),d=105 (d,k1)=(105,−17),d=105
加密解密
计算过程
设 明文
为
m
m
m,密文
为
c
c
c,如果用
(
n
,
e
)
(n,e)
(n,e)加密,
(
n
,
d
)
(n,d)
(n,d)解密,过程如下:
-
加密公式 m e ≡ c ( m o d n ) , m < n ⇒ c < n c = m e % n m^e\equiv c(\bmod n),m<n \xRightarrow{c<n} c=m^e\%n me≡c(modn),m<nc<nc=me%n
-
解密公式 c d ≡ m ( m o d n ) , m < n ⇒ m = c d % n c^d\equiv m(\bmod n),m<n \Rightarrow m=c^d\%n cd≡m(modn),m<n⇒m=cd%n
-
已知
明文
为 m = 38 m=38 m=38,用 ( n , e ) = ( 391 , 57 ) (n,e)=(391,57) (n,e)=(391,57)加密 c = m e % n = 3 8 57 % 391 = 327 c=m^e\%n=38^{57}\%391=327 c=me%n=3857%391=327 -
已知
密文
为 c = 327 c=327 c=327,用 ( n , d ) = ( 391 , 105 ) (n,d)=(391,105) (n,d)=(391,105)解密 m = c d % n = 32 7 105 % 391 = 38 m=c^d\%n=327^{105}\%391=38 m=cd%n=327105%391=38
Python实现
#python3.7 注意,pow()当包含第三个参数时,指数不可为负值
print(pow(38, 57, 391))
print(pow(327, 105, 391))
Java实现
System.out.println(BigInteger.valueOf(38).modPow(BigInteger.valueOf(57), BigInteger.valueOf(391)));
System.out.println(BigInteger.valueOf(327).modPow(BigInteger.valueOf(105), BigInteger.valueOf(391)));
证明
证明,已知加密公式
m
e
≡
c
(
m
o
d
n
)
,
m
<
n
m^e\equiv c(\bmod n),m<n
me≡c(modn),m<n,证明解密公式
c
d
≡
m
(
m
o
d
n
)
,
m
<
n
c^d\equiv m(\bmod n),m<n
cd≡m(modn),m<n成立。
-
根据已知条件,得出公式
m e ≡ c ( m o d n ) , m < n ⇒ 同 余 性 质 3 , 保 持 基 本 运 算 m e d ≡ c d ( m o d n ) ⟹ c d ≡ m e d ( m o d n ) ⇒ e d ≡ 1 ( m o d φ ( n ) ) c d ≡ m 1 + k φ ( n ) ( m o d n ) ⟹ c d ≡ m ∗ m k φ ( n ) ( m o d n ) m^e\equiv c(\bmod n),m<n\xRightarrow{同余性质3,保持基本运算}m^{ed}\equiv c^d(\bmod n)\\ \implies c^d\equiv m^{ed}(\bmod n)\\ \xRightarrow{ed\equiv1(\bmod\varphi(n))}c^d\equiv m^{1+k\varphi(n)}(\bmod n)\\ \implies c^d\equiv m*m^{k\varphi(n)}(\bmod n) me≡c(modn),m<n同余性质3,保持基本运算med≡cd(modn)⟹cd≡med(modn)ed≡1(modφ(n))cd≡m1+kφ(n)(modn)⟹cd≡m∗mkφ(n)(modn) -
当 m 与 n m与n m与n互质, m φ ( n ) ≡ 1 ( m o d n ) m^{\varphi(n)}\equiv 1{(\bmod {n})} mφ(n)≡1(modn)(根据 欧拉定理)
1 ≡ m φ ( n ) ( m o d n ) c d ≡ m ∗ m k φ ( n ) ( m o d n ) } ⇒ 同 余 性 质 3 , 保 持 基 本 运 算 c d ≡ m ( m o d n ) \left.{\begin{matrix}1 \equiv m^{\varphi(n)}{(\bmod {n})}\\c^d\equiv m*m^{k\varphi(n)}(\bmod n) \end{matrix}}\right\}\xRightarrow{同余性质3,保持基本运算}c^d\equiv m(\bmod n) 1≡mφ(n)(modn)cd≡m∗mkφ(n)(modn)}同余性质3,保持基本运算cd≡m(modn) -
当 m 与 n m与n m与n不互质
- 因为 m 与 n m与n m与n不互质,所以 m 与 n m与n m与n,除1外有额外公共因子(根据 互质 定理)
- 因为 n = p q n=pq n=pq,所以 n n n有四个因子, 1 、 n 、 p 、 q 1、n、p、q 1、n、p、q(根据 互质性质5)
- 又因为 m < n m<n m<n,所以 m = h p , h < q , h ∈ N ∗ m=hp,h<q,h\in\N^* m=hp,h<q,h∈N∗ 或 m = h q , h < p , h ∈ N ∗ m=hq,h<p,h\in\N^* m=hq,h<p,h∈N∗
- 假设 m = h p , h < q , h ∈ N ∗ m=hp,h<q,h\in\N^* m=hp,h<q,h∈N∗,此时 h 与 q h与q h与q互质(根据 互质性质4 ),同时因为 p 与 q p与q p与q互质,所以 m 与 q m与q m与q互质。
- c d ≡ m ∗ m k φ ( n ) ( m o d n ) ⇒ 欧 拉 函 数 性 质 2 m ∗ m k ( p − 1 ) ( q − 1 ) ( m o d n ) ⟹ m ∗ ( m q − 1 ) k ( p − 1 ) ( m o d n ) c^d\equiv m*m^{k\varphi(n)}(\bmod n)\\ \xRightarrow{欧拉函数性质2}m*m^{k(p-1)(q-1)}(\bmod n)\\ \implies m*(m^{q-1})^{k(p-1)}(mod n) cd≡m∗mkφ(n)(modn)欧拉函数性质2m∗mk(p−1)(q−1)(modn)⟹m∗(mq−1)k(p−1)(modn)
- m 与 q 互 质 ⇒ 欧 拉 定 理 m φ ( q ) ≡ 1 ( m o d q ) ⇒ 欧 拉 函 数 性 质 1 m q − 1 ≡ 1 ( m o d q ) ⇒ 同 余 性 质 3 ( m q − 1 ) k ( p − 1 ) ≡ 1 k ( p − 1 ) ( m o d q ) ⇒ 同 余 性 质 2 , 整 除 性 ( m q − 1 ) k ( p − 1 ) = 1 + t q , t ∈ N m与q互质\xRightarrow{欧拉定理} m^{\varphi(q)}\equiv 1(\bmod q)\\ \xRightarrow{欧拉函数性质1}m^{q-1}\equiv1(\bmod q)\\ \xRightarrow{同余性质3}(m^{q-1})^{k(p-1)}\equiv 1^{k(p-1)}(\bmod q)\\ \xRightarrow{同余性质2,整除性} (m^{q-1})^{k(p-1)}=1+tq,t\in\N m与q互质欧拉定理mφ(q)≡1(modq)欧拉函数性质1mq−1≡1(modq)同余性质3(mq−1)k(p−1)≡1k(p−1)(modq)同余性质2,整除性(mq−1)k(p−1)=1+tq,t∈N
- 由4,5,6可得
c d ≡ m ∗ ( m q − 1 ) k ( p − 1 ) ( m o d n ) ( m q − 1 ) k ( p − 1 ) = 1 + t q , t ∈ N m = h p , h ∈ N ∗ } ⟹ c d ≡ [ h p ∗ ( 1 + t q ) ] ( m o d n ) ⟹ c d ≡ ( h p + t h ∗ p q ) ( m o d n ) , t h ∈ N ⟹ c d ≡ ( h p + t h ∗ n ) ( m o d n ) , t h ∈ N ⇒ 同 余 性 质 4 , 放 大 缩 小 底 数 c d ≡ h p ( m o d n ) ⟹ c d ≡ m ( m o d n ) \left.{\begin{matrix}c^d\equiv m*(m^{q-1})^{k(p-1)}(mod n)\\ (m^{q-1})^{k(p-1)}=1+tq,t\in\N \\ m=hp,h\in\N^*\end{matrix}}\right\}\implies c^d\equiv [hp*(1+tq)](\bmod n)\\ \implies c^d\equiv (hp+th*pq)(\bmod n),th\in\N\\ \implies c^d\equiv (hp+th*n)(\bmod n),th\in\N\\ \xRightarrow{同余性质4,放大缩小底数 }c^d\equiv hp(\bmod n)\\ \implies c^d\equiv m(\bmod n) cd≡m∗(mq−1)k(p−1)(modn)(mq−1)k(p−1)=1+tq,t∈Nm=hp,h∈N∗⎭⎬⎫⟹cd≡[hp∗(1+tq)](modn)⟹cd≡(hp+th∗pq)(modn),th∈N⟹cd≡(hp+th∗n)(modn),th∈N同余性质4,放大缩小底数cd≡hp(modn)⟹cd≡m(modn)
破解私钥
假如我们已知公钥
(
n
,
e
)
(n,e)
(n,e),所谓破解私钥
(
n
,
d
)
(n,d)
(n,d),就是通过
n
,
e
n,e
n,e,求出
d
d
d。
已知
e
d
≡
1
(
m
o
d
φ
(
n
)
)
ed\equiv 1(\bmod \varphi(n))
ed≡1(modφ(n)),所以要求
d
d
d,先求
φ
(
n
)
\varphi(n)
φ(n),
加密时我们通过
p
,
q
p,q
p,q计算出
φ
(
n
)
\varphi(n)
φ(n),而破解时我们根本不知道
p
,
q
p,q
p,q,需要通过对
n
n
n进行 因数分解 求出
φ
(
n
)
\varphi(n)
φ(n)。
所以,要破解私钥,就要对
n
n
n进行 因数分解 ,
n
n
n越大破解越困难。
目前已破解748-bit的密钥,如果你觉得1024-bit还不够安全,你可以使用2048-bit的密钥,如果未来它们也被破解了,你只需要增加到更大。