RSA算法介绍

1.基础知识

1.1模运算

模运算

ZZZ是整数集,假设a,r,m∈Za,r,m \in Za,r,mZ,其中m>0m > 0m>0,若(a−r)∣m(a-r)|m(ar)m即存在q∈Zq \in ZqZ使得(a−r)=q⋅m(a-r)=q \cdot m(ar)=qm,则称a≡r mod ma \equiv r \ mod \ mar mod m。我们称aaarrrmmm同余,一般的我们称mmm为模数,rrr为余数。

一些结论

推论1a≡b mod ma \equiv b \ mod \ mab mod mx≡y mod mx \equiv y \ mod \ mxy mod m,则a±x≡b±y mod ma \pm x \equiv b \pm y \ mod \ ma±xb±y mod m以及a⋅x≡b⋅y mod ma \cdot x \equiv b \cdot y \ mod \ maxby mod m。(可加减乘)

证明:这里证明乘法部分,根据定义,存在q1q_1q1q2q_2q2,使得(a−b)=q1⋅m(a-b)=q_1 \cdot m(ab)=q1m(x−y)=q2⋅m(x-y)=q_2 \cdot m(xy)=q2m
a⋅x−b⋅ya \cdot x-b \cdot yaxby
=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⋅q1⋅m+q2⋅m⋅y=a\cdot q_1 \cdot m+q_2 \cdot m \cdot y=aq1m+q2my
=(a⋅q1+q2⋅y)⋅m=(a \cdot q_1+q_2 \cdot y) \cdot m=(aq1+q2y)m,证毕。

推论2a⋅x≡b⋅y mod ma \cdot x \equiv b \cdot y \ mod \ maxby mod m,若a≡b mod ma \equiv b \ mod \ mab mod maaammm互质,则x≡y mod mx \equiv y \ mod \ mxy mod m。(可约)

证明:引用一个结论,若aaammm互质,则存在aaa的逆a−1a^{-1}a1使得a−1⋅a≡1 mod ma^{-1} \cdot a \equiv 1 \ mod \ ma1a1 mod m(证明参考2.1.2扩展欧拉算法)。
则根据 推论1
a≡b mod ma \equiv b \ mod \ mab mod m,根据可乘性得1≡a−1⋅a≡a−1⋅b mod m1 \equiv a^{-1} \cdot a \equiv a^{-1} \cdot b \ mod \ m1a1aa1b mod m
a⋅x≡b⋅y mod ma \cdot x \equiv b \cdot y \ mod \ maxby mod m,根据可乘性得a−1⋅a⋅x≡a−1⋅b⋅y mod ma^{-1} \cdot a \cdot x \equiv a^{-1} \cdot b \cdot y \ mod \ ma1axa1by mod m
x≡x mod mx \equiv x \ mod \ mxx mod ma−1⋅a≡1 mod ma^{-1} \cdot a \equiv 1 \ mod \ ma1a1 mod m,根据可乘性得a−1⋅a⋅x≡x mod ma^{-1} \cdot a \cdot x \equiv x \ mod \ ma1axx mod m
同理由y≡y mod my \equiv y \ mod \ myy mod ma−1⋅b≡1 mod ma^{-1} \cdot b \equiv 1 \ mod \ ma1b1 mod m,根据可乘性得a−1⋅b⋅y≡y mod ma^{-1} \cdot b \cdot y \equiv y \ mod \ ma1byy mod m。证毕。

推论3a≡b mod ma \equiv b \ mod \ mab mod m,则若n≠0n \ne 0n=0,则a⋅n≡b⋅n mod m⋅na \cdot n \equiv b \cdot n \ mod \ m\cdot nanbn mod mn,反之亦然。

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

推论4pppqqq互质,则a≡b mod p⋅qa \equiv b \ mod \ p \cdot qab mod pq等价于a≡b mod pa \equiv b \ mod \ pab mod pa≡b mod qa \equiv b \ mod \ qab mod q

证明:根据定义,存在nnnmmm使得a−b=n⋅pa-b=n\cdot pab=npa−b=m⋅qa-b=m\cdot qab=mq,所以n⋅p=m⋅qn\cdot p=m\cdot qnp=mq,因为pppqqq互质,则存在n1n_1n1使得n=n1⋅qn=n_1\cdot qn=n1q,则a−b=n1⋅p⋅qa-b=n_1 \cdot p \cdot qab=n1pq。证毕。

1.2费马小定理

费马小定理ppp是素数,则对任何整数aaa,有ap≡a mod pa^{p} \equiv a \ mod \ papa mod p

证明:
a=n⋅pa=n\cdot pa=np,则a≡0 mod pa \equiv 0 \ mod \ pa0 mod p,则ap≡0≡a mod pa^p \equiv 0 \equiv a \ mod \ pap0a mod p
aaappp互质,则考虑序列1 {1,2,3,⋯ ,p−1}\{1,2,3,\cdots,p-1 \}{1,2,3,,p1}和序列2 {a⋅1 mod p,a⋅2 mod p,a⋅3 mod p,⋯ ,a⋅(p−1) mod 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 mod pa \ mod \ pa mod p 的结果就是aaappp的余数,则序列2是序列1的一个重排列。为证明这点只需证明序列2中的每个数都不相等,反证法,若a⋅x mod p=a⋅y mod pa\cdot x \ mod \ p = a \cdot y \ mod \ pax mod p=ay mod p,则a⋅x≡a⋅y mod pa\cdot x \equiv a\cdot y \ mod \ paxay mod p,根据推论2得出x≡y mod px \equiv y \ mod \ pxy mod p,因为xxxyyy都小于ppp,则x=yx=yx=y,与我们计算过程中xxxyyy不相等矛盾。
我们重写上述的结论如下:
a⋅1≡p1 mod pa \cdot 1 \equiv p_1 \ mod \ pa1p1 mod p
a⋅2≡p2 mod pa \cdot 2 \equiv p_2 \ mod \ pa2p2 mod p
a⋅3≡p3 mod pa \cdot 3 \equiv p_3 \ mod \ pa3p3 mod p
⋯\cdots
其中序列{p1,p2,p3,⋯ }\{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}的一个重排列。
则根据可乘性
ap−1⋅1⋅2⋅3⋯(p−1)≡1⋅2⋅3⋯(p−1) mod pa^{p-1} \cdot 1 \cdot 2 \cdot 3 \cdots (p-1) \equiv 1 \cdot 2 \cdot 3 \cdots (p-1) \ mod \ pap1123(p1)123(p1) mod p
1,2,3,⋯ ,(p−1)1,2,3,\cdots, (p-1)1,2,3,,(p1)ppp互质,根据可约性得ap−1≡a mod pa^{p-1} \equiv a \ mod \ pap1a mod p,证毕。

2.RSA算法

2.1基础知识

2.1.1欧拉算法

最大公约数

给定两个正整数r0r_0r0r1r_1r1,求它们的最大公约数,最大公约数记为gcd(r0,r1)gcd(r_0,r_1)gcd(r0,r1)
我们称a∣ba|babaaa整除bbb,若存在qqq使得b=q⋅ab=q\cdot ab=qa,其中aaabbb为正整数。

一个有用的结论

r0>r1r_0>r_1r0>r1,我们可计算qqq使得r0=q⋅r1+r2r_0=q\cdot r_1 + r_2r0=qr1+r2,其中r2<r1r_2 < r_1r2<r1,则gcd(r0,r1)gcd(r_0,r_1)gcd(r0,r1)=gcd(r1,r2)gcd(r_1,r_2)gcd(r1,r2)。证明:若g=gcd(r0,r1)g=gcd(r_0,r_1)g=gcd(r0,r1),则g∣r0g|r_0gr0g∣r1g|r_1gr1,则g∣r0−q⋅r1g|r_0 - q \cdot r_1gr0qr1,则g∣r2g|r_2gr2

欧拉算法
伪代码

假设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扩展欧拉算法

结论

给定两个正整数r0r_0r0r1r_1r1,存在sssttt使得s⋅r0+t⋅r1=gcd(r0,r1)s \cdot r_0 + t \cdot r_1 = gcd(r_0,r_1)sr0+tr1=gcd(r0,r1),其中sssttt是整数。

证明:直接用欧拉算法证明

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

重要结论

给定两个正整数r0r_0r0r1r_1r1,若互质,则存在sssttt使得s⋅r0+t⋅r1=1s \cdot r_0 + t \cdot r_1 = 1sr0+tr1=1,其中sssttt是整数.

ppp是素数,求rrr的逆r−1r^{-1}r1,使得r⋅r−1 mod pr \cdot r^{-1} \ mod \ prr1 mod p,其中rrrr−1r^{-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欧拉函数

欧拉函数

对于正整数mmm,小于mmm的整数中与mmm互质的数的数目为Φ(m)\Phi(m)Φ(m)Φ\PhiΦ称为欧拉函数。

引理1:若pppqqq互质,则Φ(p⋅q)=Φ(p)⋅Φ(q)\Phi(p\cdot q)=\Phi(p)\cdot \Phi(q)Φ(pq)=Φ(p)Φ(q)
证明:定义小于mmm且与mmm互质的集合称为Z(m)Z(m)Z(m),称这个集合为mmm的完全余数集合,显然∣Z(x)∣=Φ(m)|Z(x)|=\Phi(m)Z(x)=Φ(m)
m=p⋅qm=p\cdot qm=pq,且pppqqq互质,则下面证明Z(m)Z(m)Z(m)Z(p)×Z(q)Z(p)\times Z(q)Z(p)×Z(q)之间存在一一映射。定义映射ffff(x)=(x mod p,x mod 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 mod p,x mod 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),则xxxmmm互质,根据扩展欧拉算法知存在x−1x^{-1}x1,使得x−1⋅x≡1 mod mx^{-1} \cdot x \equiv 1 \ mod \ mx1x1 mod m,则根据推论4x−1⋅x≡1 mod px^{-1}\cdot x \equiv 1 \ mod \ px1x1 mod px−1⋅x≡1 mod px^{-1}\cdot x \equiv 1 \ mod \ px1x1 mod p,则x mod p∈Z(p)x \ mod \ p \in Z(p)x mod pZ(p)x mod q∈Z(q)x \ mod \ q \in Z(q)x mod qZ(q)
其次满足单射:若x1≠x2x_1 \ne x_2x1=x2,则f(x1)≠f(x2)f(x_1)\ne f(x_2)f(x1)=f(x2)。反证法,若f(x1)=f(x2)f(x_1)= f(x_2)f(x1)=f(x2),则x1≡x2 mod px_1 \equiv x_2 \ mod \ px1x2 mod px1≡x2 mod qx_1 \equiv x_2 \ mod \ qx1x2 mod q,由于pppqqq互质,则x1≡x2 mod p⋅qx_1 \equiv x_2 \ mod \ p\cdot qx1x2 mod pq,则x1≡x2 mod mx_1 \equiv x_2 \ mod \ mx1x2 mod m,则x1=x2x_1 = x_2x1=x2
最后满足满射:对任意(xp,xq)∈(Z(p),Z(q))(x_p,x_q) \in (Z(p),Z(q))(xp,xq)(Z(p),Z(q)),令x=t⋅q⋅xp+s⋅p⋅xqx=t\cdot q \cdot x_p + s \cdot p \cdot x_qx=tqxp+spxq,其中s⋅p+t⋅q=1s \cdot p + t\cdot q =1sp+tq=1,因为pppqqq互质,由扩展欧拉算法可得,也即t⋅q≡1 mod pt \cdot q \equiv 1 \ mod \ ptq1 mod ps⋅p≡1 mod qs \cdot p \equiv 1 \ mod \ qsp1 mod q,则x mod p=t⋅q⋅xp mod p=xp mod px \ mod \ p = t \cdot q \cdot x_p \ mod \ p = x_p \ mod \ px mod p=tqxp mod p=xp mod p,则x mod p∈Z(p)x \ mod \ p \in Z(p)x mod pZ(p),同理x mod q∈Z(q)x \ mod \ q \in Z(q)x mod qZ(q),另外x⋅xp−1≡t⋅q⋅xp⋅xp−1+s⋅p⋅xq⋅xp−1 mod px \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 \ pxxp1tqxpxp1+spxqxp1 mod p,则x⋅xp−1≡t⋅q⋅xp⋅xp−1 mod px \cdot x_p^{-1} \equiv t \cdot q \cdot x_p \cdot x_p^{-1} \ mod \ pxxp1tqxpxp1 mod p,则x⋅xp−1≡1 mod px \cdot x_p^{-1} \equiv 1 \ mod \ pxxp11 mod p,则xxxppp互质,同理xxxqqq互质,则xxxp⋅qp \cdot qpq互质。

定理1m=p1e1⋅p2e2⋅p3e3⋯pnenm=p_1^{e_1} \cdot p_2^{e_2} \cdot p_3^{e_3} \cdots p_n^{e_n}m=p1e1p2e2p3e3pnenp1,p2,p3⋯pnp_1,p_2, p_3 \cdots p_np1,p2,p3pn互质,则Φ(m)=∏1n(piei−piei−1)\Phi(m)=\prod_1^n(p_i^{e_i} - p_i^{e_i-1})Φ(m)=1n(pieipiei1)

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

推论5ppp为素数,则Φ(p)=p1−p1−1=p1−p0=p−1\Phi(p)=p^1-p^{1-1}=p^1-p^0=p-1Φ(p)=p1p11=p1p0=p1

2.1.4欧拉定理

定理2 欧拉定理 若aaa为整数,mmm为正整数,且aaammm互质,则aΦ(m)≡1 mod ma^{\Phi(m)} \equiv 1 \ mod \ maΦ(m)1 mod m

证明:定义小于mmm且与mmm互质的集合称为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))} mod ma \cdot Z(m)=\{a\cdot \chi(1),a\cdot \chi(2),\cdots,a\cdot \chi(\phi(m))\} \ mod \ maZ(m)={aχ(1),aχ(2),,aχ(ϕ(m))} mod m,下面证明a⋅Z(m)a \cdot Z(m)aZ(m)是Z(m)的一个重排列,证明参考费马小定理的证明。

2.2RSA算法定义

加密算法

给定公钥kpub={n,e}k_{pub}=\{n,e\}kpub={n,e},则明文xxx对应的密文yyyy≡xe mod ny \equiv x^e \ mod \ nyxe mod n,其中x,y,e∈Znx,y,e \in Z_nx,y,eZnZn={0,1,2,⋯(n−1)}Z_n=\{0,1,2,\cdots (n-1)\}Zn={0,1,2,(n1)}

解密算法

给定私钥kpri={n,d}k_{pri}=\{n,d\}kpri={n,d},则密文yyy对应的明文xxxx≡yd mod nx \equiv y^d \ mod \ nxyd mod n,其中x,y,d∈Znx,y,d \in Z_nx,y,dZnZn={0,1,2,⋯(n−1)}Z_n=\{0,1,2,\cdots (n-1)\}Zn={0,1,2,(n1)}

2.3公钥e与私钥d的关系

密钥生成

step 1:随机选取两个素数pppqqq,计算n=p⋅qn=p\cdot qn=pq,这里的nnn成为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),随机选取eee,使得0<e<Φ(n)0 < e < \Phi(n)0<e<Φ(n)且与Φ(n)\Phi(n)Φ(n)互质。eee就是公钥,我们一般成为公钥指数。
step 3:计算dddddd满足e⋅d≡1 mod Φ(n)e \cdot d \equiv 1 \ mod \ \Phi(n)ed1 mod Φ(n),即dddeee的逆。ddd就是私钥,我们一般称为私钥ddd

算法正确性证明

证明:x≡yd≡xed mod nx \equiv y^d \equiv x^{ed} \ mod \ nxydxed mod n,又由e⋅d≡1 mod Φ(n)e \cdot d \equiv 1 \ mod \ \Phi(n)ed1 mod Φ(n)知存在λ\lambdaλ使得e⋅d=λ⋅Φ(n)+1e \cdot d = \lambda \cdot \Phi(n) + 1ed=λΦ(n)+1,则xed≡xλ⋅Φ(n)+1 mod mx^{ed} \equiv x^{\lambda \cdot \Phi(n) + 1} \ mod \ mxedxλΦ(n)+1 mod m
情况1:若xxxnnn互质,则根据欧拉定理结论显然
情况2:若xxxnnn存在公约数,则公约数为ppp或者qqq,假设为ppp,则x=r⋅px=r\cdot px=rp,则(r⋅p)λ⋅Φ(p)⋅Φ(q)⋅x mod 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 mod p{x \equiv (r \cdot p)}^{\lambda \cdot \Phi(p) \cdot \Phi(q)} \cdot x \ mod \ px(rp)λΦ(p)Φ(q)x mod px≡0 mod px\equiv 0 \ mod \ px0 mod p)且x≡(r⋅p)λ⋅Φ(p)⋅Φ(q)⋅x mod q{x \equiv (r \cdot p)}^{\lambda \cdot \Phi(p) \cdot \Phi(q)} \cdot x \ mod \ qx(rp)λΦ(p)Φ(q)x mod q(若rprprpqqq互质,则根据欧拉定理可得;若rprprpqqq有公约数qqq,则同上),根据推论4得x≡(r⋅p)λ⋅Φ(p)⋅Φ(q)⋅x mod p⋅q{x \equiv (r \cdot p)}^{\lambda \cdot \Phi(p) \cdot \Phi(q)} \cdot x \ mod \ p\cdot qx(rp)λΦ(p)Φ(q)x mod pq,证毕。

3.RSA计算相关

3.1中国剩余定理

线性同余方程组

考虑下述线性同余方程组(SSS)
{x≡a1 mod m1x≡a2 mod m2⋯x≡an mod mn\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
m1,m2,⋯ ,mnm_1,m_2,\cdots,m_nm1,m2,,mn互质,则对于任何正整数aia_iai,方程组(SSS)有解。

证明二维情形

用构造法证明
考虑下述二维线性同余方程组(S1S^1S1),其中m1,m2m_1,m_2m1,m2互质
{x≡a1 mod m1x≡a2 mod m2\begin{cases} x \equiv a_1 \ mod \ m_1\\ x \equiv a_2 \ mod \ m_2\\ \end{cases}{xa1 mod m1xa2 mod m2
证明:
根据推论3重写方程组(S1S^1S1)如下,记为(S2S^2S2):
{m2⋅x≡m2⋅a1 mod m2⋅m1m1⋅x≡m1⋅a2 mod m1⋅m2\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
m1,m2m_1,m_2m1,m2互质,根据扩展欧拉算法知存在sssttt使得s⋅m1+t⋅m2=1s\cdot m_1+t\cdot m_2=1sm1+tm2=1
则根据推论1重写方程组(S2S^2S2)如下,记为(S3S^3S3):
{t⋅m2⋅x≡t⋅m2⋅a1 mod m2⋅m1s⋅m1⋅x≡s⋅m1⋅a2 mod m1⋅m2\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将方程组(S3S^3S3)相加得到:
(t⋅m2⋅x+s⋅m1⋅x)≡(t⋅m2⋅a1+s⋅m1⋅a2) mod m1⋅m2(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⋅m2⋅x+s⋅m1⋅x)≡(t⋅m2+s⋅m1)⋅x≡x mod m1⋅m2(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⋅m2⋅a1+s⋅m1⋅a2) mod m1⋅m2x \equiv (t\cdot m_2 \cdot a_1+s\cdot m_1 \cdot a_2) \ mod \ m_1 \cdot m_2x(tm2a1+sm1a2) mod m1m2
证毕。

3.2加快解密RSA

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

重写解密函数

计算x≡yd mod nx \equiv y^d \ mod \ nxyd mod n

计算x≡yd mod nx \equiv y^d \ mod \ nxyd mod n,即x≡yd mod p⋅qx \equiv y^d \ mod \ p\cdot qxyd mod pq,因为pppqqq互质,则根据推论4,求解上述方程等价于求解下述二维线性同余方程组;
{x≡yd mod px≡yd mod q\begin{cases} x \equiv y^d \ mod \ p\\ x \equiv y^d \ mod \ q\\ \end{cases}{xyd mod pxyd mod q

利用费马小定理改写上述方程组

计算yd mod py^d \ mod \ pyd mod p

因为p是素数,根据费马小定理,若yyyppp互质,则yp−1≡1mod  py^{p-1} \equiv 1 \mod pyp11modp,则yd≡yd mod (p−1) mod py^d \equiv y^{d \ mod \ (p-1)} \ mod \ pydyd mod (p1) mod p;若yyyppp的倍数,则yp−1≡0 mod py^{p-1} \equiv 0 \ mod \ pyp10 mod p,则yd≡0≡yd mod (p−1) mod py^d \equiv 0 \equiv y^{d \ mod \ (p-1)} \ mod \ pyd0yd mod (p1) mod p,所以可得yd≡yd mod (p−1) mod py^d \equiv y^{d \ mod \ (p-1)} \ mod \ pydyd mod (p1) mod p,同理可得yd≡yd mod (q−1) mod qy^d \equiv y^{d \ mod \ (q-1)} \ mod \ qydyd mod (q1) mod q

改写方程组

改写上述线性同余方程组如下:
{x≡yd mod (p−1) mod px≡yd mod (q−1) mod 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⋅yd mod (p−1)+p−1⋅p⋅yd mod (q−1) mod nx \equiv q^{-1} \cdot q \cdot y^{d \ mod \ (p-1)} + p^{-1} \cdot p \cdot y^{d \ mod \ (q-1)} \ mod \ nxq1qyd mod (p1)+p1pyd mod (q1) mod n,其中1≡p−1⋅p mod q1 \equiv p^{-1} \cdot p \ mod \ q1p1p mod q1≡q−1⋅q mod p1 \equiv q^{-1} \cdot q \ mod \ p1q1q mod p

名词解释

通常RSA的解密函数中有几个参数
ppp :模nnn的两个因子之一
qqq :模nnn的两个因子之一
dmp1dmp1dmp1d mod (p−1)d \ mod \ (p-1)d mod (p1)
dmq1dmq1dmq1d mod (p−1)d \ mod \ (p-1)d mod (p1)
iqmpiqmpiqmp=q−1q^{-1}q1 :inverse of qqqqqq的逆$q^{-1} $,即1≡q−1⋅q mod p1 \equiv q^{-1} \cdot q \ mod \ p1q1q mod p
ipmqipmqipmq=p−1p^{-1}p1 :inverse of pppppp的逆p−1p^{-1}p1,即1≡p−1⋅p mod q1 \equiv p^{-1} \cdot p \ mod \ q1p1p mod q,一般没有这个参数,因为这个参数可以由iqmpiqmpiqmp快速计算出来。由 1≡q−1⋅q mod p1 \equiv q^{-1} \cdot q \ mod \ p1q1q 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 - 1q1q=pp1,即−p′⋅p≡1 mod q-p' \cdot p \equiv 1 \ mod \ qpp1 mod q,即−p′-p'pppp的逆,所以p−1=(−q−1⋅q+1)/pp^{-1}=(-q^{-1}\cdot q+1)/pp1=(q1q+1)/p

3.3快速指数运算

快速幂乘法

计算c=axmodnc=a^x mod nc=axmodn ,若nnn为素数,则令x=x mod (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 mod n=((a mod n)⋅(bmod   n)) mod na \cdot b \ mod \ n=((a \ mod \ n) \cdot (b \mod \ n) )\ mod \ nab mod n=((a mod n)(bmod n)) mod n,此式可由推论1可得,因为(a≡a mod n) mod n(a \equiv a \ mod \ n) \ mod \ n(aa mod n) mod n(b≡b mod n) mod 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值