RSA算法介绍

1.基础知识

1.1模运算

模运算

Z Z Z是整数集,假设 a , r , m ∈ Z a,r,m \in Z a,r,mZ,其中 m > 0 m > 0 m>0,若 ( a − r ) ∣ m (a-r)|m (ar)m即存在 q ∈ Z q \in Z qZ使得 ( a − r ) = q ⋅ m (a-r)=q \cdot m (ar)=qm,则称 a ≡ r   m o d   m a \equiv r \ mod \ m ar 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 ab mod m x ≡ y   m o d   m x \equiv y \ mod \ m xy mod m,则 a ± x ≡ b ± y   m o d   m a \pm x \equiv b \pm y \ mod \ m a±xb±y mod m以及 a ⋅ x ≡ b ⋅ y   m o d   m a \cdot x \equiv b \cdot y \ mod \ m axby mod m。(可加减乘)

证明:这里证明乘法部分,根据定义,存在 q 1 q_1 q1 q 2 q_2 q2,使得 ( a − b ) = q 1 ⋅ m (a-b)=q_1 \cdot m (ab)=q1m ( x − y ) = q 2 ⋅ m (x-y)=q_2 \cdot m (xy)=q2m
a ⋅ x − b ⋅ y a \cdot x-b \cdot y axby
= a ⋅ x − a ⋅ y + a ⋅ y − b ⋅ y = a \cdot x-a \cdot y+a \cdot y-b \cdot y =axay+ayby
= a ⋅ ( x − y ) + ( a − b ) ⋅ y =a\cdot (x-y)+(a-b)\cdot y =a(xy)+(ab)y
= a ⋅ q 1 ⋅ m + q 2 ⋅ m ⋅ y =a\cdot q_1 \cdot m+q_2 \cdot m \cdot y =aq1m+q2my
= ( a ⋅ q 1 + q 2 ⋅ y ) ⋅ m =(a \cdot q_1+q_2 \cdot y) \cdot m =(aq1+q2y)m,证毕。

推论2 a ⋅ x ≡ b ⋅ y   m o d   m a \cdot x \equiv b \cdot y \ mod \ m axby mod m,若 a ≡ b   m o d   m a \equiv b \ mod \ m ab mod m a a a m m m互质,则 x ≡ y   m o d   m x \equiv y \ mod \ m xy mod m。(可约)

证明:引用一个结论,若 a a a m m m互质,则存在 a a a的逆 a − 1 a^{-1} a1使得 a − 1 ⋅ a ≡ 1   m o d   m a^{-1} \cdot a \equiv 1 \ mod \ m a1a1 mod m(证明参考2.1.2扩展欧拉算法)。
则根据 推论1
a ≡ b   m o d   m a \equiv b \ mod \ m ab 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 1a1aa1b mod m
a ⋅ x ≡ b ⋅ y   m o d   m a \cdot x \equiv b \cdot y \ mod \ m axby 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 a1axa1by mod m
x ≡ x   m o d   m x \equiv x \ mod \ m xx mod m a − 1 ⋅ a ≡ 1   m o d   m a^{-1} \cdot a \equiv 1 \ mod \ m a1a1 mod m,根据可乘性得 a − 1 ⋅ a ⋅ x ≡ x   m o d   m a^{-1} \cdot a \cdot x \equiv x \ mod \ m a1axx mod m
同理由 y ≡ y   m o d   m y \equiv y \ mod \ m yy mod m a − 1 ⋅ b ≡ 1   m o d   m a^{-1} \cdot b \equiv 1 \ mod \ m a1b1 mod m,根据可乘性得 a − 1 ⋅ b ⋅ y ≡ y   m o d   m a^{-1} \cdot b \cdot y \equiv y \ mod \ m a1byy mod m。证毕。

推论3 a ≡ b   m o d   m a \equiv b \ mod \ m ab 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 anbn mod mn,反之亦然。

证明:根据定义证明,结论显然成立。

推论4 p p p q q q互质,则 a ≡ b   m o d   p ⋅ q a \equiv b \ mod \ p \cdot q ab mod pq等价于 a ≡ b   m o d   p a \equiv b \ mod \ p ab mod p a ≡ b   m o d   q a \equiv b \ mod \ q ab mod q

证明:根据定义,存在 n n n m m m使得 a − b = n ⋅ p a-b=n\cdot p ab=np a − b = m ⋅ q a-b=m\cdot q ab=mq,所以 n ⋅ p = m ⋅ q n\cdot p=m\cdot q np=mq,因为 p p p q q q互质,则存在 n 1 n_1 n1使得 n = n 1 ⋅ q n=n_1\cdot q n=n1q,则 a − b = n 1 ⋅ p ⋅ q a-b=n_1 \cdot p \cdot q ab=n1pq。证毕。

1.2费马小定理

费马小定理 p p p是素数,则对任何整数 a a a,有 a p ≡ a   m o d   p a^{p} \equiv a \ mod \ p apa mod p

证明:
a = n ⋅ p a=n\cdot p a=np,则 a ≡ 0   m o d   p a \equiv 0 \ mod \ p a0 mod p,则 a p ≡ 0 ≡ a   m o d   p a^p \equiv 0 \equiv a \ mod \ p ap0a mod p
a a a p p p互质,则考虑序列1 { 1 , 2 , 3 , ⋯   , p − 1 } \{1,2,3,\cdots,p-1 \} {1,2,3,,p1}和序列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 \} {a1 mod p,a2 mod p,a3 mod p,,a(p1) 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 ax mod p=ay mod p,则 a ⋅ x ≡ a ⋅ y   m o d   p a\cdot x \equiv a\cdot y \ mod \ p axay mod p,根据推论2得出 x ≡ y   m o d   p x \equiv y \ mod \ p xy 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 a1p1 mod p
a ⋅ 2 ≡ p 2   m o d   p a \cdot 2 \equiv p_2 \ mod \ p a2p2 mod p
a ⋅ 3 ≡ p 3   m o d   p a \cdot 3 \equiv p_3 \ mod \ p a3p3 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,,p1}的一个重排列。
则根据可乘性
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 ap1123(p1)123(p1) mod p
1 , 2 , 3 , ⋯   , ( p − 1 ) 1,2,3,\cdots, (p-1) 1,2,3,,(p1) p p p互质,根据可约性得 a p − 1 ≡ a   m o d   p a^{p-1} \equiv a \ mod \ p ap1a mod p,证毕。

2.RSA算法

2.1基础知识

2.1.1欧拉算法

最大公约数

给定两个正整数 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 ab a a a整除 b b b,若存在 q q q使得 b = q ⋅ a b=q\cdot a b=qa,其中 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=qr1+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 gr0 g ∣ r 1 g|r_1 gr1,则 g ∣ r 0 − q ⋅ r 1 g|r_0 - q \cdot r_1 gr0qr1,则 g ∣ r 2 g|r_2 gr2

欧拉算法
伪代码

假设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

2.1.2扩展欧拉算法

结论

给定两个正整数 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) sr0+tr1=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 sr0+tr1=1,其中 s s s t t t是整数.

p p p是素数,求 r r r的逆 r − 1 r^{-1} r1,使得 r ⋅ r − 1   m o d   p r \cdot r^{-1} \ mod \ p rr1 mod p,其中 r r r r − 1 r^{-1} r1为整数。

Python求逆测试代码

import math
def inverseP(p,r1): #p为正整数,r0为整数
#修正r0为0=<r0<p
    if r1<0 or r1>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

2.1.3欧拉函数

欧拉函数

对于正整数 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) Φ(pq)=Φ(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=pq,且 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) xZ(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) xZ(m),则 x x x m m m互质,根据扩展欧拉算法知存在 x − 1 x^{-1} x1,使得 x − 1 ⋅ x ≡ 1   m o d   m x^{-1} \cdot x \equiv 1 \ mod \ m x1x1 mod m,则根据推论4 x − 1 ⋅ x ≡ 1   m o d   p x^{-1}\cdot x \equiv 1 \ mod \ p x1x1 mod p x − 1 ⋅ x ≡ 1   m o d   p x^{-1}\cdot x \equiv 1 \ mod \ p x1x1 mod p,则 x   m o d   p ∈ Z ( p ) x \ mod \ p \in Z(p) x mod pZ(p) x   m o d   q ∈ Z ( q ) x \ mod \ q \in Z(q) x mod qZ(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 x1x2 mod p x 1 ≡ x 2   m o d   q x_1 \equiv x_2 \ mod \ q x1x2 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 x1x2 mod pq,则 x 1 ≡ x 2   m o d   m x_1 \equiv x_2 \ mod \ m x1x2 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=tqxp+spxq,其中 s ⋅ p + t ⋅ q = 1 s \cdot p + t\cdot q =1 sp+tq=1,因为 p p p q q q互质,由扩展欧拉算法可得,也即 t ⋅ q ≡ 1   m o d   p t \cdot q \equiv 1 \ mod \ p tq1 mod p s ⋅ p ≡ 1   m o d   q s \cdot p \equiv 1 \ mod \ q sp1 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=tqxp mod p=xp mod p,则 x   m o d   p ∈ Z ( p ) x \ mod \ p \in Z(p) x mod pZ(p),同理 x   m o d   q ∈ Z ( q ) x \ mod \ q \in Z(q) x mod qZ(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 xxp1tqxpxp1+spxqxp1 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 xxp1tqxpxp1 mod p,则 x ⋅ x p − 1 ≡ 1   m o d   p x \cdot x_p^{-1} \equiv 1 \ mod \ p xxp11 mod p,则 x x x p p p互质,同理 x x x q q q互质,则 x x x p ⋅ q p \cdot q pq互质。

定理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=p1e1p2e2p3e3pnen p 1 , p 2 , p 3 ⋯ p n p_1,p_2, p_3 \cdots p_n p1,p2,p3pn互质,则 Φ ( 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(pieipiei1)

证明:只需证明 Φ ( p e ) = p e − p e − 1 \Phi(p^e)=p^e-p^{e-1} Φ(pe)=pepe1,再根据引理1即可得出结论。因为p为素数,则 p e p^e pe中形式为 n ⋅ p n\cdot p np的数的个数为从 1 1 1开始数,数到 p e − 1 p^{e-1} pe1结束,共有 p e − 1 p^{e-1} pe1个。

推论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)=p1p11=p1p0=p1

2.1.4欧拉定理

定理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 aZ(m)={aχ(1),aχ(2),,aχ(ϕ(m))} mod m,下面证明 a ⋅ Z ( m ) a \cdot Z(m) aZ(m)是Z(m)的一个重排列,证明参考费马小定理的证明。

2.2RSA算法定义

加密算法

给定公钥 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 yxe mod n,其中 x , y , e ∈ Z n x,y,e \in Z_n x,y,eZn Z n = { 0 , 1 , 2 , ⋯ ( n − 1 ) } Z_n=\{0,1,2,\cdots (n-1)\} Zn={0,1,2,(n1)}

解密算法

给定私钥 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 xyd mod n,其中 x , y , d ∈ Z n x,y,d \in Z_n x,y,dZn Z n = { 0 , 1 , 2 , ⋯ ( n − 1 ) } Z_n=\{0,1,2,\cdots (n-1)\} Zn={0,1,2,(n1)}

2.3公钥e与私钥d的关系

密钥生成

step 1:随机选取两个素数 p p p q q q,计算 n = p ⋅ q n=p\cdot q n=pq,这里的 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)=Φ(pq)=Φ(p)Φ(q)=(p1)(q1),随机选取 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) ed1 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 xydxed mod n,又由 e ⋅ d ≡ 1   m o d   Φ ( n ) e \cdot d \equiv 1 \ mod \ \Phi(n) ed1 mod Φ(n)知存在 λ \lambda λ使得 e ⋅ d = λ ⋅ Φ ( n ) + 1 e \cdot d = \lambda \cdot \Phi(n) + 1 ed=λΦ(n)+1,则 x e d ≡ x λ ⋅ Φ ( n ) + 1   m o d   m x^{ed} \equiv x^{\lambda \cdot \Phi(n) + 1} \ mod \ m xedxλΦ(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=rp,则 ( 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 (rp)λΦ(p)Φ(q)x mod pq,又 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(rp)λΦ(p)Φ(q)x mod p x ≡ 0   m o d   p x\equiv 0 \ mod \ p x0 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(rp)λΦ(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(rp)λΦ(p)Φ(q)x mod pq,证毕。

3.RSA计算相关

3.1中国剩余定理

线性同余方程组

考虑下述线性同余方程组( 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} xa1 mod m1xa2 mod m2xan 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} {xa1 mod m1xa2 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} {m2xm2a1 mod m2m1m1xm1a2 mod m1m2
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 sm1+tm2=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} {tm2xtm2a1 mod m2m1sm1xsm1a2 mod m1m2
根据推论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 (tm2x+sm1x)(tm2a1+sm1a2) mod m1m2
继续简化:
( 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 (tm2x+sm1x)(tm2+sm1)xx mod m1m2
所以
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(tm2a1+sm1a2) mod m1m2
证毕。

3.2加快解密RSA

利用费马小定理和中国剩余定理加快RSA解密过程

重写解密函数

计算 x ≡ y d   m o d   n x \equiv y^d \ mod \ n xyd mod n

计算 x ≡ y d   m o d   n x \equiv y^d \ mod \ n xyd mod n,即 x ≡ y d   m o d   p ⋅ q x \equiv y^d \ mod \ p\cdot q xyd mod pq,因为 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} {xyd mod pxyd 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 yp11modp,则 y d ≡ y d   m o d   ( p − 1 )   m o d   p y^d \equiv y^{d \ mod \ (p-1)} \ mod \ p ydyd mod (p1) mod p;若 y y y p p p的倍数,则 y p − 1 ≡ 0   m o d   p y^{p-1} \equiv 0 \ mod \ p yp10 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 yd0yd mod (p1) 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 ydyd mod (p1) 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 ydyd mod (q1) 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} {xyd mod (p1) mod pxyd mod (q1) 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 xq1qyd mod (p1)+p1pyd mod (q1) mod n,其中 1 ≡ p − 1 ⋅ p   m o d   q 1 \equiv p^{-1} \cdot p \ mod \ q 1p1p mod q 1 ≡ q − 1 ⋅ q   m o d   p 1 \equiv q^{-1} \cdot q \ mod \ p 1q1q 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 (p1)
d m q 1 dmq1 dmq1 d   m o d   ( p − 1 ) d \ mod \ (p-1) d mod (p1)
i q m p iqmp iqmp= q − 1 q^{-1} q1 :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 1q1q mod p
i p m q ipmq ipmq= p − 1 p^{-1} p1 :inverse of p p p p p p的逆 p − 1 p^{-1} p1,即 1 ≡ p − 1 ⋅ p   m o d   q 1 \equiv p^{-1} \cdot p \ mod \ q 1p1p mod q,一般没有这个参数,因为这个参数可以由 i q m p iqmp iqmp快速计算出来。由 1 ≡ q − 1 ⋅ q   m o d   p 1 \equiv q^{-1} \cdot q \ mod \ p 1q1q mod p,知存在 p ′ p' p使得 ( q − 1 ⋅ q − 1 ) = p ′ ⋅ p (q^{-1} \cdot q-1)=p' \cdot p (q1q1)=pp,则 − ( q − 1 ⋅ q − 1 ) = − p ′ ⋅ p -(q^{-1} \cdot q-1)=-p' \cdot p (q1q1)=pp,则 − q − 1 ⋅ q = − p ′ ⋅ p − 1 -q^{-1} \cdot q=-p' \cdot p - 1 q1q=pp1,即 − p ′ ⋅ p ≡ 1   m o d   q -p' \cdot p \equiv 1 \ mod \ q pp1 mod q,即 − p ′ -p' p p p p的逆,所以 p − 1 = ( − q − 1 ⋅ q + 1 ) / p p^{-1}=(-q^{-1}\cdot q+1)/p p1=(q1q+1)/p

3.3快速指数运算

快速幂乘法

计算 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 (n1)

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 ab 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 (aa mod n) mod n ( b ≡ b   m o d   n )   m o d   n (b \equiv b \ mod \ n) \ mod \ n (bb 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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值