Z Z Z是整数集,假设 a , r , m ∈ Z a,r,m \in Z a,r,m∈Z,其中 m > 0 m > 0 m>0,若 ( a − r ) ∣ m (a-r)|m (a−r)∣m即存在 q ∈ Z q \in Z q∈Z使得 ( a − r ) = q ⋅ m (a-r)=q \cdot m (a−r)=q⋅m,则称 a ≡ r m o d m a \equiv r \ mod \ m a≡r mod m。我们称 a a a与 r r r模 m m m同余,一般的我们称 m m m为模数, r r r为余数。
推论1 若 a ≡ b m o d m a \equiv b \ mod \ m a≡b mod m及 x ≡ y m o d m x \equiv y \ mod \ m x≡y mod m,则 a ± x ≡ b ± y m o d m a \pm x \equiv b \pm y \ mod \ m a±x≡b±y mod m以及 a ⋅ x ≡ b ⋅ y m o d m a \cdot x \equiv b \cdot y \ mod \ m a⋅x≡b⋅y mod m。(可加减乘)
证明:这里证明乘法部分,根据定义,存在 q 1 q_1 q1和 q 2 q_2 q2,使得 ( a − b ) = q 1 ⋅ m (a-b)=q_1 \cdot m (a−b)=q1⋅m和 ( x − y ) = q 2 ⋅ m (x-y)=q_2 \cdot m (x−y)=q2⋅m。
则 a ⋅ x − b ⋅ y a \cdot x-b \cdot y a⋅x−b⋅y
= a ⋅ x − a ⋅ y + a ⋅ y − b ⋅ y = a \cdot x-a \cdot y+a \cdot y-b \cdot y =a⋅x−a⋅y+a⋅y−b⋅y
= a ⋅ ( x − y ) + ( a − b ) ⋅ y =a\cdot (x-y)+(a-b)\cdot y =a⋅(x−y)+(a−b)⋅y
= a ⋅ q 1 ⋅ m + q 2 ⋅ m ⋅ y =a\cdot q_1 \cdot m+q_2 \cdot m \cdot y =a⋅q1⋅m+q2⋅m⋅y
= ( a ⋅ q 1 + q 2 ⋅ y ) ⋅ m =(a \cdot q_1+q_2 \cdot y) \cdot m =(a⋅q1+q2⋅y)⋅m,证毕。
推论2 若 a ⋅ x ≡ b ⋅ y m o d m a \cdot x \equiv b \cdot y \ mod \ m a⋅x≡b⋅y mod m,若 a ≡ b m o d m a \equiv b \ mod \ m a≡b mod m及 a a a与 m m m互质,则 x ≡ y m o d m x \equiv y \ mod \ m x≡y mod m。(可约)
证明:引用一个结论,若 a a a与 m m m互质,则存在 a a a的逆 a − 1 a^{-1} a−1使得 a − 1 ⋅ a ≡ 1 m o d m a^{-1} \cdot a \equiv 1 \ mod \ m a−1⋅a≡1 mod m(证明参考2.1.2扩展欧拉算法)。
则根据 推论1
由 a ≡ b m o d m a \equiv b \ mod \ m a≡b mod m,根据可乘性得 1 ≡ a − 1 ⋅ a ≡ a − 1 ⋅ b m o d m 1 \equiv a^{-1} \cdot a \equiv a^{-1} \cdot b \ mod \ m 1≡a−1⋅a≡a−1⋅b mod m
由 a ⋅ x ≡ b ⋅ y m o d m a \cdot x \equiv b \cdot y \ mod \ m a⋅x≡b⋅y mod m,根据可乘性得 a − 1 ⋅ a ⋅ x ≡ a − 1 ⋅ b ⋅ y m o d m a^{-1} \cdot a \cdot x \equiv a^{-1} \cdot b \cdot y \ mod \ m a−1⋅a⋅x≡a−1⋅b⋅y mod m
由 x ≡ x m o d m x \equiv x \ mod \ m x≡x mod m和 a − 1 ⋅ a ≡ 1 m o d m a^{-1} \cdot a \equiv 1 \ mod \ m a−1⋅a≡1 mod m,根据可乘性得 a − 1 ⋅ a ⋅ x ≡ x m o d m a^{-1} \cdot a \cdot x \equiv x \ mod \ m a−1⋅a⋅x≡x mod m。
同理由 y ≡ y m o d m y \equiv y \ mod \ m y≡y mod m和 a − 1 ⋅ b ≡ 1 m o d m a^{-1} \cdot b \equiv 1 \ mod \ m a−1⋅b≡1 mod m,根据可乘性得 a − 1 ⋅ b ⋅ y ≡ y m o d m a^{-1} \cdot b \cdot y \equiv y \ mod \ m a−1⋅b⋅y≡y mod m。证毕。
推论3 若 a ≡ b m o d m a \equiv b \ mod \ m a≡b mod m,则若 n ≠ 0 n \ne 0 n=0,则 a ⋅ n ≡ b ⋅ n m o d m ⋅ n a \cdot n \equiv b \cdot n \ mod \ m\cdot n a⋅n≡b⋅n mod m⋅n,反之亦然。
证明:根据定义证明,结论显然成立。
推论4 若 p p p与 q q q互质,则 a ≡ b m o d p ⋅ q a \equiv b \ mod \ p \cdot q a≡b mod p⋅q等价于 a ≡ b m o d p a \equiv b \ mod \ p a≡b mod p和 a ≡ b m o d q a \equiv b \ mod \ q a≡b mod q。
证明:根据定义,存在 n n n和 m m m使得 a − b = n ⋅ p a-b=n\cdot p a−b=n⋅p和 a − b = m ⋅ q a-b=m\cdot q a−b=m⋅q,所以 n ⋅ p = m ⋅ q n\cdot p=m\cdot q n⋅p=m⋅q,因为 p p p与 q q q互质,则存在 n 1 n_1 n1使得 n = n 1 ⋅ q n=n_1\cdot q n=n1⋅q,则 a − b = n 1 ⋅ p ⋅ q a-b=n_1 \cdot p \cdot q a−b=n1⋅p⋅q。证毕。
费马小定理 若 p p p是素数,则对任何整数 a a a,有 a p ≡ a m o d p a^{p} \equiv a \ mod \ p ap≡a mod p。
证明:
若 a = n ⋅ p a=n\cdot p a=n⋅p,则 a ≡ 0 m o d p a \equiv 0 \ mod \ p a≡0 mod p,则 a p ≡ 0 ≡ a m o d p a^p \equiv 0 \equiv a \ mod \ p ap≡0≡a mod p。
若 a a a与 p p p互质,则考虑序列1 { 1 , 2 , 3 , ⋯ , p − 1 } \{1,2,3,\cdots,p-1 \} {1,2,3,⋯,p−1}和序列2 { a ⋅ 1 m o d p , a ⋅ 2 m o d p , a ⋅ 3 m o d p , ⋯ , a ⋅ ( p − 1 ) m o d p } \{a\cdot 1 \ mod \ p,a \cdot 2 \ mod \ p,a\cdot 3 \ mod \ p,\cdots,a\cdot (p-1) \ mod \ p \} {a⋅1 mod p,a⋅2 mod p,a⋅3 mod p,⋯,a⋅(p−1) mod p}其中 a m o d p a \ mod \ p a mod p 的结果就是 a a a除 p p p的余数,则序列2是序列1的一个重排列。为证明这点只需证明序列2中的每个数都不相等,反证法,若 a ⋅ x m o d p = a ⋅ y m o d p a\cdot x \ mod \ p = a \cdot y \ mod \ p a⋅x mod p=a⋅y mod p,则 a ⋅ x ≡ a ⋅ y m o d p a\cdot x \equiv a\cdot y \ mod \ p a⋅x≡a⋅y mod p,根据推论2得出 x ≡ y m o d p x \equiv y \ mod \ p x≡y mod p,因为 x x x和 y y y都小于 p p p,则 x = y x=y x=y,与我们计算过程中 x x x与 y y y不相等矛盾。
我们重写上述的结论如下:
a ⋅ 1 ≡ p 1 m o d p a \cdot 1 \equiv p_1 \ mod \ p a⋅1≡p1 mod p
a ⋅ 2 ≡ p 2 m o d p a \cdot 2 \equiv p_2 \ mod \ p a⋅2≡p2 mod p
a ⋅ 3 ≡ p 3 m o d p a \cdot 3 \equiv p_3 \ mod \ p a⋅3≡p3 mod p
⋯ \cdots ⋯
其中序列 { p 1 , p 2 , p 3 , ⋯ } \{p_1,p_2,p_3,\cdots \} {p1,p2,p3,⋯}是 { 1 , 2 , 3 , ⋯ , p − 1 } \{1,2,3,\cdots,p-1 \} {1,2,3,⋯,p−1}的一个重排列。
则根据可乘性
a p − 1 ⋅ 1 ⋅ 2 ⋅ 3 ⋯ ( p − 1 ) ≡ 1 ⋅ 2 ⋅ 3 ⋯ ( p − 1 ) m o d p a^{p-1} \cdot 1 \cdot 2 \cdot 3 \cdots (p-1) \equiv 1 \cdot 2 \cdot 3 \cdots (p-1) \ mod \ p ap−1⋅1⋅2⋅3⋯(p−1)≡1⋅2⋅3⋯(p−1) mod p
又 1 , 2 , 3 , ⋯ , ( p − 1 ) 1,2,3,\cdots, (p-1) 1,2,3,⋯,(p−1)与 p p p互质,根据可约性得 a p − 1 ≡ a m o d p a^{p-1} \equiv a \ mod \ p ap−1≡a mod p,证毕。
最大公约数
给定两个正整数 r 0 r_0 r0和 r 1 r_1 r1,求它们的最大公约数,最大公约数记为 g c d ( r 0 , r 1 ) gcd(r_0,r_1) gcd(r0,r1)。
我们称 a ∣ b a|b a∣b为 a a a整除 b b b,若存在 q q q使得 b = q ⋅ a b=q\cdot a b=q⋅a,其中 a a a和 b b b为正整数。
一个有用的结论
若 r 0 > r 1 r_0>r_1 r0>r1,我们可计算 q q q使得 r 0 = q ⋅ r 1 + r 2 r_0=q\cdot r_1 + r_2 r0=q⋅r1+r2,其中 r 2 < r 1 r_2 < r_1 r2<r1,则 g c d ( r 0 , r 1 ) gcd(r_0,r_1) gcd(r0,r1)= g c d ( r 1 , r 2 ) gcd(r_1,r_2) gcd(r1,r2)。证明:若 g = g c d ( r 0 , r 1 ) g=gcd(r_0,r_1) g=gcd(r0,r1),则 g ∣ r 0 g|r_0 g∣r0且 g ∣ r 1 g|r_1 g∣r1,则 g ∣ r 0 − q ⋅ r 1 g|r_0 - q \cdot r_1 g∣r0−q⋅r1,则 g ∣ r 2 g|r_2 g∣r2。
欧拉算法
伪代码
假设r0>r1为非负整数
while r1 !=0:
r2= r0 % r1
r0=r1
r1=r2
return r0
Python测试代码
def gcd(r0,r1):
r0=abs(r0)
r1=abs(r1)
if r0 < r1:
temp=r0
r0=r1
r1=temp
while r1 !=0:
r2= r0 % r1
r0=r1
r1=r2
return r0
结论
给定两个正整数 r 0 r_0 r0和 r 1 r_1 r1,存在 s s s和 t t t使得 s ⋅ r 0 + t ⋅ r 1 = g c d ( r 0 , r 1 ) s \cdot r_0 + t \cdot r_1 = gcd(r_0,r_1) s⋅r0+t⋅r1=gcd(r0,r1),其中 s s s和 t t t是整数。
证明:直接用欧拉算法证明
假设r0>r1为非负整数
初始值r0和r1
初始值s0=1,t0=0 满足r0=s0*r0+t0*r1
初始值s1=0,t1=1 满足r1=s1*r0+t1*r1
while r1 !=0:
r2= r0 % r1
q= r0/r1
r0=r1 r1=r2
s0_temp=s0 t0_temp=t0
s0=s1 t0=t #r0=r1=s1*r0+t1*r1 所以s0=s1 t0=t1
s1=s0_temp-q*s1 t1=t0_temp-q*t1#r1=r2=r0-q*r1=(s0*r0+t0*r1)-q*(s1*r0+t1*r1)=(s0-q*s1)*r0+(t0-q*t1)*r1
return r0=s0*r0+t0*r1
扩展欧拉算法
Python测试代码
def exgcd(r0,r1): #r0和r1为正整数
if r0 < r1:
temp=r0
r0=r1
r1=temp
#满足r0=s0*r0+t0*r1
s0=1
t0=0
#满足r1=s1*r0+t1*r1
s1=0
t1=1
while r1 !=0:
r2= r0 % r1
q= r0//r1
r0=r1
r1=r2
s0_temp=s0
t0_temp=t0
#r0=r1=s1*r0+t1*r1 所以s0=s1 t0=t1
s0=s1
t0=t1
#r1=r2=r0-q*r1=(s0*r0+t0*r1)-q*(s1*r0+t1*r1)=(s0-q*s1)*r0+(t0-q*t1)*r1
s1=s0_temp-q*s1
t1=t0_temp-q*t1
return s0,t0#r0=s0*r0+t0*r1
重要结论
给定两个正整数 r 0 r_0 r0和 r 1 r_1 r1,若互质,则存在 s s s和 t t t使得 s ⋅ r 0 + t ⋅ r 1 = 1 s \cdot r_0 + t \cdot r_1 = 1 s⋅r0+t⋅r1=1,其中 s s s和 t t t是整数.
若 p p p是素数,求 r r r的逆 r − 1 r^{-1} r−1,使得 r ⋅ r − 1 m o d p r \cdot r^{-1} \ mod \ p r⋅r−1 mod p,其中 r r r和 r − 1 r^{-1} r−1为整数。
Python求逆测试代码
import math
def inverseP(p,r1): #p为正整数,r0为整数
#修正r0为0=p:
r1=r1-math.floor(r1/p)*p
r0=p
r1=r1
#满足r0=s0*r0+t0*r1
s0=1
t0=0
#满足r1=s1*r0+t1*r1
s1=0
t1=1
while r1 !=0:
r2= r0 % r1
q= r0//r1
r0=r1
r1=r2
s0_temp=s0
t0_temp=t0
#r0=r1=s1*r0+t1*r1 所以s0=s1 t0=t1
s0=s1
t0=t1
#r1=r2=r0-q*r1=(s0*r0+t0*r1)-q*(s1*r0+t1*r1)=(s0-q*s1)*r0+(t0-q*t1)*r1
s1=s0_temp-q*s1
t1=t0_temp-q*t1
if r0!=1:
print("No inverseP")
return 0
else:
if t0<0 or t0>p:
t0=t0-math.floor(t0/p)*p #修正到0和p-1之间
return t0
欧拉函数
对于正整数 m m m,小于 m m m的整数中与 m m m互质的数的数目为 Φ ( m ) \Phi(m) Φ(m), Φ \Phi Φ称为欧拉函数。
引理1:若 p p p与 q q q互质,则 Φ ( p ⋅ q ) = Φ ( p ) ⋅ Φ ( q ) \Phi(p\cdot q)=\Phi(p)\cdot \Phi(q) Φ(p⋅q)=Φ(p)⋅Φ(q)。
证明:定义小于 m m m且与 m m m互质的集合称为 Z ( m ) Z(m) Z(m),称这个集合为 m m m的完全余数集合,显然 ∣ Z ( x ) ∣ = Φ ( m ) |Z(x)|=\Phi(m) ∣Z(x)∣=Φ(m)。
若 m = p ⋅ q m=p\cdot q m=p⋅q,且 p p p与 q q q互质,则下面证明 Z ( m ) Z(m) Z(m)与 Z ( p ) × Z ( q ) Z(p)\times Z(q) Z(p)×Z(q)之间存在一一映射。定义映射 f f f: f ( x ) = ( x m o d p , x m o d q ) f(x)=(x \ mod \ p,x \ mod \ q) f(x)=(x mod p,x mod q),其中 x ∈ Z ( m ) x \in Z(m) x∈Z(m), ( x m o d p , x m o d q ) ∈ Z ( p ) × Z ( q ) (x \ mod \ p,x \ mod \ q) \in Z(p)\times Z(q) (x mod p,x mod q)∈Z(p)×Z(q)。
首先映射满足条件:若 x ∈ Z ( m ) x \in Z(m) x∈Z(m),则 x x x与 m m m互质,根据扩展欧拉算法知存在 x − 1 x^{-1} x−1,使得 x − 1 ⋅ x ≡ 1 m o d m x^{-1} \cdot x \equiv 1 \ mod \ m x−1⋅x≡1 mod m,则根据推论4有 x − 1 ⋅ x ≡ 1 m o d p x^{-1}\cdot x \equiv 1 \ mod \ p x−1⋅x≡1 mod p 且 x − 1 ⋅ x ≡ 1 m o d p x^{-1}\cdot x \equiv 1 \ mod \ p x−1⋅x≡1 mod p,则 x m o d p ∈ Z ( p ) x \ mod \ p \in Z(p) x mod p∈Z(p)且 x m o d q ∈ Z ( q ) x \ mod \ q \in Z(q) x mod q∈Z(q)。
其次满足单射:若 x 1 ≠ x 2 x_1 \ne x_2 x1=x2,则 f ( x 1 ) ≠ f ( x 2 ) f(x_1)\ne f(x_2) f(x1)=f(x2)。反证法,若 f ( x 1 ) = f ( x 2 ) f(x_1)= f(x_2) f(x1)=f(x2),则 x 1 ≡ x 2 m o d p x_1 \equiv x_2 \ mod \ p x1≡x2 mod p且 x 1 ≡ x 2 m o d q x_1 \equiv x_2 \ mod \ q x1≡x2 mod q,由于 p p p与 q q q互质,则 x 1 ≡ x 2 m o d p ⋅ q x_1 \equiv x_2 \ mod \ p\cdot q x1≡x2 mod p⋅q,则 x 1 ≡ x 2 m o d m x_1 \equiv x_2 \ mod \ m x1≡x2 mod m,则 x 1 = x 2 x_1 = x_2 x1=x2。
最后满足满射:对任意 ( x p , x q ) ∈ ( Z ( p ) , Z ( q ) ) (x_p,x_q) \in (Z(p),Z(q)) (xp,xq)∈(Z(p),Z(q)),令 x = t ⋅ q ⋅ x p + s ⋅ p ⋅ x q x=t\cdot q \cdot x_p + s \cdot p \cdot x_q x=t⋅q⋅xp+s⋅p⋅xq,其中 s ⋅ p + t ⋅ q = 1 s \cdot p + t\cdot q =1 s⋅p+t⋅q=1,因为 p p p与 q q q互质,由扩展欧拉算法可得,也即 t ⋅ q ≡ 1 m o d p t \cdot q \equiv 1 \ mod \ p t⋅q≡1 mod p及 s ⋅ p ≡ 1 m o d q s \cdot p \equiv 1 \ mod \ q s⋅p≡1 mod q,则 x m o d p = t ⋅ q ⋅ x p m o d p = x p m o d p x \ mod \ p = t \cdot q \cdot x_p \ mod \ p = x_p \ mod \ p x mod p=t⋅q⋅xp mod p=xp mod p,则 x m o d p ∈ Z ( p ) x \ mod \ p \in Z(p) x mod p∈Z(p),同理 x m o d q ∈ Z ( q ) x \ mod \ q \in Z(q) x mod q∈Z(q),另外 x ⋅ x p − 1 ≡ t ⋅ q ⋅ x p ⋅ x p − 1 + s ⋅ p ⋅ x q ⋅ x p − 1 m o d p x \cdot x_p^{-1} \equiv t \cdot q \cdot x_p \cdot x_p^{-1} + s \cdot p \cdot x_q \cdot x_p^{-1} \ mod \ p x⋅xp−1≡t⋅q⋅xp⋅xp−1+s⋅p⋅xq⋅xp−1 mod p,则 x ⋅ x p − 1 ≡ t ⋅ q ⋅ x p ⋅ x p − 1 m o d p x \cdot x_p^{-1} \equiv t \cdot q \cdot x_p \cdot x_p^{-1} \ mod \ p x⋅xp−1≡t⋅q⋅xp⋅xp−1 mod p,则 x ⋅ x p − 1 ≡ 1 m o d p x \cdot x_p^{-1} \equiv 1 \ mod \ p x⋅xp−1≡1 mod p,则 x x x与 p p p互质,同理 x x x与 q q q互质,则 x x x与 p ⋅ q p \cdot q p⋅q互质。
定理1 若 m = p 1 e 1 ⋅ p 2 e 2 ⋅ p 3 e 3 ⋯ p n e n m=p_1^{e_1} \cdot p_2^{e_2} \cdot p_3^{e_3} \cdots p_n^{e_n} m=p1e1⋅p2e2⋅p3e3⋯pnen, p 1 , p 2 , p 3 ⋯ p n p_1,p_2, p_3 \cdots p_n p1,p2,p3⋯pn互质,则 Φ ( m ) = ∏ 1 n ( p i e i − p i e i − 1 ) \Phi(m)=\prod_1^n(p_i^{e_i} - p_i^{e_i-1}) Φ(m)=∏1n(piei−piei−1)。
证明:只需证明 Φ ( p e ) = p e − p e − 1 \Phi(p^e)=p^e-p^{e-1} Φ(pe)=pe−pe−1,再根据引理1即可得出结论。因为p为素数,则 p e p^e pe中形式为 n ⋅ p n\cdot p n⋅p的数的个数为从 1 1 1开始数,数到 p e − 1 p^{e-1} pe−1结束,共有 p e − 1 p^{e-1} pe−1个。
推论5 若 p p p为素数,则 Φ ( p ) = p 1 − p 1 − 1 = p 1 − p 0 = p − 1 \Phi(p)=p^1-p^{1-1}=p^1-p^0=p-1 Φ(p)=p1−p1−1=p1−p0=p−1
定理2 欧拉定理 若 a a a为整数, m m m为正整数,且 a a a与 m m m互质,则 a Φ ( m ) ≡ 1 m o d m a^{\Phi(m)} \equiv 1 \ mod \ m aΦ(m)≡1 mod m。
证明:定义小于 m m m且与 m m m互质的集合称为 Z ( m ) Z(m) Z(m),则 ∣ Z ( x ) ∣ = Φ ( m ) |Z(x)|=\Phi(m) ∣Z(x)∣=Φ(m),
令 Z ( m ) = { χ ( 1 ) , χ ( 2 ) , ⋯ , χ ( ϕ ( m ) ) } Z(m)=\{\chi(1),\chi(2),\cdots,\chi(\phi(m))\} Z(m)={χ(1),χ(2),⋯,χ(ϕ(m))},则 a ⋅ Z ( m ) = { a ⋅ χ ( 1 ) , a ⋅ χ ( 2 ) , ⋯ , a ⋅ χ ( ϕ ( m ) ) } m o d m a \cdot Z(m)=\{a\cdot \chi(1),a\cdot \chi(2),\cdots,a\cdot \chi(\phi(m))\} \ mod \ m a⋅Z(m)={a⋅χ(1),a⋅χ(2),⋯,a⋅χ(ϕ(m))} mod m,下面证明 a ⋅ Z ( m ) a \cdot Z(m) a⋅Z(m)是Z(m)的一个重排列,证明参考费马小定理的证明。
加密算法
给定公钥 k p u b = { n , e } k_{pub}=\{n,e\} kpub={n,e},则明文 x x x对应的密文 y y y为 y ≡ x e m o d n y \equiv x^e \ mod \ n y≡xe mod n,其中 x , y , e ∈ Z n x,y,e \in Z_n x,y,e∈Zn。 Z n = { 0 , 1 , 2 , ⋯ ( n − 1 ) } Z_n=\{0,1,2,\cdots (n-1)\} Zn={0,1,2,⋯(n−1)}
解密算法
给定私钥 k p r i = { n , d } k_{pri}=\{n,d\} kpri={n,d},则密文 y y y对应的明文 x x x为 x ≡ y d m o d n x \equiv y^d \ mod \ n x≡yd mod n,其中 x , y , d ∈ Z n x,y,d \in Z_n x,y,d∈Zn。 Z n = { 0 , 1 , 2 , ⋯ ( n − 1 ) } Z_n=\{0,1,2,\cdots (n-1)\} Zn={0,1,2,⋯(n−1)}
密钥生成
step 1:随机选取两个素数 p p p和 q q q,计算 n = p ⋅ q n=p\cdot q n=p⋅q,这里的 n n n成为RSA的模。
step 2: Φ ( n ) = Φ ( p ⋅ q ) = Φ ( p ) ⋅ Φ ( q ) = ( p − 1 ) ⋅ ( q − 1 ) \Phi(n)=\Phi(p\cdot q)=\Phi(p)\cdot \Phi(q)=(p-1)\cdot (q-1) Φ(n)=Φ(p⋅q)=Φ(p)⋅Φ(q)=(p−1)⋅(q−1),随机选取 e e e,使得 0 < e < Φ ( n ) 0 < e < \Phi(n) 0<e<Φ(n)且与 Φ ( n ) \Phi(n) Φ(n)互质。 e e e就是公钥,我们一般成为公钥指数。
step 3:计算 d d d, d d d满足 e ⋅ d ≡ 1 m o d Φ ( n ) e \cdot d \equiv 1 \ mod \ \Phi(n) e⋅d≡1 mod Φ(n),即 d d d是 e e e的逆。 d d d就是私钥,我们一般称为私钥 d d d。
算法正确性证明
证明: x ≡ y d ≡ x e d m o d n x \equiv y^d \equiv x^{ed} \ mod \ n x≡yd≡xed mod n,又由 e ⋅ d ≡ 1 m o d Φ ( n ) e \cdot d \equiv 1 \ mod \ \Phi(n) e⋅d≡1 mod Φ(n)知存在 λ \lambda λ使得 e ⋅ d = λ ⋅ Φ ( n ) + 1 e \cdot d = \lambda \cdot \Phi(n) + 1 e⋅d=λ⋅Φ(n)+1,则 x e d ≡ x λ ⋅ Φ ( n ) + 1 m o d m x^{ed} \equiv x^{\lambda \cdot \Phi(n) + 1} \ mod \ m xed≡xλ⋅Φ(n)+1 mod m
情况1:若 x x x与 n n n互质,则根据欧拉定理结论显然
情况2:若 x x x与 n n n存在公约数,则公约数为 p p p或者 q q q,假设为 p p p,则 x = r ⋅ p x=r\cdot p x=r⋅p,则 ( r ⋅ p ) λ ⋅ Φ ( p ) ⋅ Φ ( q ) ⋅ x m o d p ⋅ q {(r \cdot p)}^{\lambda \cdot \Phi(p) \cdot \Phi(q)} \cdot x\ mod \ p \cdot q (r⋅p)λ⋅Φ(p)⋅Φ(q)⋅x mod p⋅q,又 x ≡ ( r ⋅ p ) λ ⋅ Φ ( p ) ⋅ Φ ( q ) ⋅ x m o d p {x \equiv (r \cdot p)}^{\lambda \cdot \Phi(p) \cdot \Phi(q)} \cdot x \ mod \ p x≡(r⋅p)λ⋅Φ(p)⋅Φ(q)⋅x mod p( x ≡ 0 m o d p x\equiv 0 \ mod \ p x≡0 mod p)且 x ≡ ( r ⋅ p ) λ ⋅ Φ ( p ) ⋅ Φ ( q ) ⋅ x m o d q {x \equiv (r \cdot p)}^{\lambda \cdot \Phi(p) \cdot \Phi(q)} \cdot x \ mod \ q x≡(r⋅p)λ⋅Φ(p)⋅Φ(q)⋅x mod q(若 r p rp rp与 q q q互质,则根据欧拉定理可得;若 r p rp rp与 q q q有公约数 q q q,则同上),根据推论4得 x ≡ ( r ⋅ p ) λ ⋅ Φ ( p ) ⋅ Φ ( q ) ⋅ x m o d p ⋅ q {x \equiv (r \cdot p)}^{\lambda \cdot \Phi(p) \cdot \Phi(q)} \cdot x \ mod \ p\cdot q x≡(r⋅p)λ⋅Φ(p)⋅Φ(q)⋅x mod p⋅q,证毕。
考虑下述线性同余方程组( S S S)
{ x ≡ a 1 m o d m 1 x ≡ a 2 m o d m 2 ⋯ x ≡ a n m o d m n \begin{cases} x \equiv a_1 \ mod \ m_1\\ x \equiv a_2 \ mod \ m_2\\ \cdots\\ x \equiv a_n \ mod \ m_n \end{cases} ⎩⎪⎪⎪⎨⎪⎪⎪⎧x≡a1 mod m1x≡a2 mod m2⋯x≡an mod mn
若 m 1 , m 2 , ⋯ , m n m_1,m_2,\cdots,m_n m1,m2,⋯,mn互质,则对于任何正整数 a i a_i ai,方程组( S S S)有解。
用构造法证明
考虑下述二维线性同余方程组( S 1 S^1 S1),其中 m 1 , m 2 m_1,m_2 m1,m2互质
{ x ≡ a 1 m o d m 1 x ≡ a 2 m o d m 2 \begin{cases} x \equiv a_1 \ mod \ m_1\\ x \equiv a_2 \ mod \ m_2\\ \end{cases} {x≡a1 mod m1x≡a2 mod m2
证明:
根据推论3重写方程组( S 1 S^1 S1)如下,记为( S 2 S^2 S2):
{ m 2 ⋅ x ≡ m 2 ⋅ a 1 m o d m 2 ⋅ m 1 m 1 ⋅ x ≡ m 1 ⋅ a 2 m o d m 1 ⋅ m 2 \begin{cases} m_2 \cdot x \equiv m_2 \cdot a_1 \ mod \ m_2 \cdot m_1\\ m_1 \cdot x \equiv m_1 \cdot a_2 \ mod \ m_1 \cdot m_2\\ \end{cases} {m2⋅x≡m2⋅a1 mod m2⋅m1m1⋅x≡m1⋅a2 mod m1⋅m2
又 m 1 , m 2 m_1,m_2 m1,m2互质,根据扩展欧拉算法知存在 s s s和 t t t使得 s ⋅ m 1 + t ⋅ m 2 = 1 s\cdot m_1+t\cdot m_2=1 s⋅m1+t⋅m2=1
则根据推论1重写方程组( S 2 S^2 S2)如下,记为( S 3 S^3 S3):
{ t ⋅ m 2 ⋅ x ≡ t ⋅ m 2 ⋅ a 1 m o d m 2 ⋅ m 1 s ⋅ m 1 ⋅ x ≡ s ⋅ m 1 ⋅ a 2 m o d m 1 ⋅ m 2 \begin{cases} t \cdot m_2 \cdot x \equiv t\cdot m_2 \cdot a_1 \ mod \ m_2 \cdot m_1\\ s\cdot m_1 \cdot x \equiv s\cdot m_1 \cdot a_2 \ mod \ m_1 \cdot m_2\\ \end{cases} {t⋅m2⋅x≡t⋅m2⋅a1 mod m2⋅m1s⋅m1⋅x≡s⋅m1⋅a2 mod m1⋅m2
根据推论1将方程组( S 3 S^3 S3)相加得到:
( t ⋅ m 2 ⋅ x + s ⋅ m 1 ⋅ x ) ≡ ( t ⋅ m 2 ⋅ a 1 + s ⋅ m 1 ⋅ a 2 ) m o d m 1 ⋅ m 2 (t \cdot m_2 \cdot x +s\cdot m_1 \cdot x) \equiv (t\cdot m_2 \cdot a_1+s\cdot m_1 \cdot a_2) \ mod \ m_1 \cdot m_2 (t⋅m2⋅x+s⋅m1⋅x)≡(t⋅m2⋅a1+s⋅m1⋅a2) mod m1⋅m2
继续简化:
( t ⋅ m 2 ⋅ x + s ⋅ m 1 ⋅ x ) ≡ ( t ⋅ m 2 + s ⋅ m 1 ) ⋅ x ≡ x m o d m 1 ⋅ m 2 (t \cdot m_2 \cdot x +s\cdot m_1 \cdot x) \equiv (t \cdot m_2 +s\cdot m_1 )\cdot x \equiv x \ mod \ m_1 \cdot m_2 (t⋅m2⋅x+s⋅m1⋅x)≡(t⋅m2+s⋅m1)⋅x≡x mod m1⋅m2
所以
x ≡ ( t ⋅ m 2 ⋅ a 1 + s ⋅ m 1 ⋅ a 2 ) m o d m 1 ⋅ m 2 x \equiv (t\cdot m_2 \cdot a_1+s\cdot m_1 \cdot a_2) \ mod \ m_1 \cdot m_2 x≡(t⋅m2⋅a1+s⋅m1⋅a2) mod m1⋅m2
证毕。
利用费马小定理和中国剩余定理加快RSA解密过程
计算 x ≡ y d m o d n x \equiv y^d \ mod \ n x≡yd mod n
计算 x ≡ y d m o d n x \equiv y^d \ mod \ n x≡yd mod n,即 x ≡ y d m o d p ⋅ q x \equiv y^d \ mod \ p\cdot q x≡yd mod p⋅q,因为 p p p与 q q q互质,则根据推论4,求解上述方程等价于求解下述二维线性同余方程组;
{ x ≡ y d m o d p x ≡ y d m o d q \begin{cases} x \equiv y^d \ mod \ p\\ x \equiv y^d \ mod \ q\\ \end{cases} {x≡yd mod px≡yd mod q
计算 y d m o d p y^d \ mod \ p yd mod p
因为p是素数,根据费马小定理,若 y y y与 p p p互质,则 y p − 1 ≡ 1 m o d p y^{p-1} \equiv 1 \mod p yp−1≡1modp,则 y d ≡ y d m o d ( p − 1 ) m o d p y^d \equiv y^{d \ mod \ (p-1)} \ mod \ p yd≡yd mod (p−1) mod p;若 y y y是 p p p的倍数,则 y p − 1 ≡ 0 m o d p y^{p-1} \equiv 0 \ mod \ p yp−1≡0 mod p,则 y d ≡ 0 ≡ y d m o d ( p − 1 ) m o d p y^d \equiv 0 \equiv y^{d \ mod \ (p-1)} \ mod \ p yd≡0≡yd mod (p−1) mod p,所以可得 y d ≡ y d m o d ( p − 1 ) m o d p y^d \equiv y^{d \ mod \ (p-1)} \ mod \ p yd≡yd mod (p−1) mod p,同理可得 y d ≡ y d m o d ( q − 1 ) m o d q y^d \equiv y^{d \ mod \ (q-1)} \ mod \ q yd≡yd mod (q−1) mod q。
改写方程组
改写上述线性同余方程组如下:
{ x ≡ y d m o d ( p − 1 ) m o d p x ≡ y d m o d ( q − 1 ) m o d q \begin{cases} x \equiv y^{d \ mod \ (p-1)} \ mod \ p\\ x \equiv y^{d \ mod \ (q-1)} \ mod \ q\\ \end{cases} {x≡yd mod (p−1) mod px≡yd mod (q−1) mod q
直接写出答案: x ≡ q − 1 ⋅ q ⋅ y d m o d ( p − 1 ) + p − 1 ⋅ p ⋅ y d m o d ( q − 1 ) m o d n x \equiv q^{-1} \cdot q \cdot y^{d \ mod \ (p-1)} + p^{-1} \cdot p \cdot y^{d \ mod \ (q-1)} \ mod \ n x≡q−1⋅q⋅yd mod (p−1)+p−1⋅p⋅yd mod (q−1) mod n,其中 1 ≡ p − 1 ⋅ p m o d q 1 \equiv p^{-1} \cdot p \ mod \ q 1≡p−1⋅p mod q, 1 ≡ q − 1 ⋅ q m o d p 1 \equiv q^{-1} \cdot q \ mod \ p 1≡q−1⋅q mod p。
通常RSA的解密函数中有几个参数
p p p :模 n n n的两个因子之一
q q q :模 n n n的两个因子之一
d m p 1 dmp1 dmp1: d m o d ( p − 1 ) d \ mod \ (p-1) d mod (p−1)
d m q 1 dmq1 dmq1 : d m o d ( p − 1 ) d \ mod \ (p-1) d mod (p−1)
i q m p iqmp iqmp= q − 1 q^{-1} q−1 :inverse of q q q, q q q的逆$q^{-1} $,即 1 ≡ q − 1 ⋅ q m o d p 1 \equiv q^{-1} \cdot q \ mod \ p 1≡q−1⋅q mod p。
i p m q ipmq ipmq= p − 1 p^{-1} p−1 :inverse of p p p, p p p的逆 p − 1 p^{-1} p−1,即 1 ≡ p − 1 ⋅ p m o d q 1 \equiv p^{-1} \cdot p \ mod \ q 1≡p−1⋅p mod q,一般没有这个参数,因为这个参数可以由 i q m p iqmp iqmp快速计算出来。由 1 ≡ q − 1 ⋅ q m o d p 1 \equiv q^{-1} \cdot q \ mod \ p 1≡q−1⋅q mod p,知存在 p ′ p' p′使得 ( q − 1 ⋅ q − 1 ) = p ′ ⋅ p (q^{-1} \cdot q-1)=p' \cdot p (q−1⋅q−1)=p′⋅p,则 − ( q − 1 ⋅ q − 1 ) = − p ′ ⋅ p -(q^{-1} \cdot q-1)=-p' \cdot p −(q−1⋅q−1)=−p′⋅p,则 − q − 1 ⋅ q = − p ′ ⋅ p − 1 -q^{-1} \cdot q=-p' \cdot p - 1 −q−1⋅q=−p′⋅p−1,即 − p ′ ⋅ p ≡ 1 m o d q -p' \cdot p \equiv 1 \ mod \ q −p′⋅p≡1 mod q,即 − p ′ -p' −p′为 p p p的逆,所以 p − 1 = ( − q − 1 ⋅ q + 1 ) / p p^{-1}=(-q^{-1}\cdot q+1)/p p−1=(−q−1⋅q+1)/p。
快速幂乘法
计算 c = a x m o d n c=a^x mod n c=axmodn ,若 n n n为素数,则令 x = x m o d ( n − 1 ) x=x \ mod \ (n-1) x=x mod (n−1)
x从左向右扫描,共有n位
c=1
for n to 1:
c=c*c mod n
if x[i]==1:
c=c*a
x从右向左扫描,共有n位
c=1
d=a
for 1 to n:
if x[i]==1:
c=c*d mod n
d=d*d mod n
蒙哥马利算法
利用 a ⋅ b m o d n = ( ( a m o d n ) ⋅ ( b m o d n ) ) m o d n a \cdot b \ mod \ n=((a \ mod \ n) \cdot (b \mod \ n) )\ mod \ n a⋅b mod n=((a mod n)⋅(bmod n)) mod n,此式可由推论1可得,因为 ( a ≡ a m o d n ) m o d n (a \equiv a \ mod \ n) \ mod \ n (a≡a mod n) mod n, ( b ≡ b m o d n ) m o d n (b \equiv b \ mod \ n) \ mod \ n (b≡b mod n) mod n,在做运算时可以随意进行取模运算。
Python测试代码
def fastModExp(base,exp,mod):
c=1
for bit in reversed(range(exp.bit_length())):
c=c*c % mod
if(exp & (1<< bit)):
c=c*base % mod
return c
def fastModExp1(base,exp,mod):
c=1
d=base
for bit in range(exp.bit_length()):
if(exp & (1<< bit)):
c=c*d % mod
d=d*d % mod
return c
if __name__=="__main__":
import math
import random
for i in range(0,100):
base=random.randint(0,1000000)
exp=random.randint(0,1000000)
mod=random.randint(0,1000000)
x=fastModExp(base,exp,mod)
y=fastModExp1(base,exp,mod)
z=pow(base,exp,mod)
if x==y and x==z:
pass#print("succ")
else:
print("fail")
常用的公钥指数
便于快速指数运算
3=101
65537=100001
#参考
[1] Understanding Cryptography: A Textbook for Students and Practitioners,
Paar, Christof, Pelzl, Jan