1.基础知识
1.1模运算
模运算
ZZZ是整数集,假设a,r,m∈Za,r,m \in Za,r,m∈Z,其中m>0m > 0m>0,若(a−r)∣m(a-r)|m(a−r)∣m即存在q∈Zq \in Zq∈Z使得(a−r)=q⋅m(a-r)=q \cdot m(a−r)=q⋅m,则称a≡r mod ma \equiv r \ mod \ ma≡r mod m。我们称aaa与rrr模mmm同余,一般的我们称mmm为模数,rrr为余数。
一些结论
推论1 若a≡b mod ma \equiv b \ mod \ ma≡b mod m及x≡y mod mx \equiv y \ mod \ mx≡y mod m,则a±x≡b±y mod ma \pm x \equiv b \pm y \ mod \ ma±x≡b±y mod m以及a⋅x≡b⋅y mod ma \cdot x \equiv b \cdot y \ mod \ ma⋅x≡b⋅y mod m。(可加减乘)
证明:这里证明乘法部分,根据定义,存在q1q_1q1和q2q_2q2,使得(a−b)=q1⋅m(a-b)=q_1 \cdot m(a−b)=q1⋅m和(x−y)=q2⋅m(x-y)=q_2 \cdot m(x−y)=q2⋅m。
则a⋅x−b⋅ya \cdot x-b \cdot ya⋅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⋅q1⋅m+q2⋅m⋅y=a\cdot q_1 \cdot m+q_2 \cdot m \cdot y=a⋅q1⋅m+q2⋅m⋅y
=(a⋅q1+q2⋅y)⋅m=(a \cdot q_1+q_2 \cdot y) \cdot m=(a⋅q1+q2⋅y)⋅m,证毕。
推论2 若a⋅x≡b⋅y mod ma \cdot x \equiv b \cdot y \ mod \ ma⋅x≡b⋅y mod m,若a≡b mod ma \equiv b \ mod \ ma≡b mod m及aaa与mmm互质,则x≡y mod mx \equiv y \ mod \ mx≡y mod m。(可约)
证明:引用一个结论,若aaa与mmm互质,则存在aaa的逆a−1a^{-1}a−1使得a−1⋅a≡1 mod ma^{-1} \cdot a \equiv 1 \ mod \ ma−1⋅a≡1 mod m(证明参考2.1.2扩展欧拉算法)。
则根据 推论1
由a≡b mod ma \equiv b \ mod \ ma≡b mod m,根据可乘性得1≡a−1⋅a≡a−1⋅b mod m1 \equiv a^{-1} \cdot a \equiv a^{-1} \cdot b \ mod \ m1≡a−1⋅a≡a−1⋅b mod m
由a⋅x≡b⋅y mod ma \cdot x \equiv b \cdot y \ mod \ ma⋅x≡b⋅y 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 \ ma−1⋅a⋅x≡a−1⋅b⋅y mod m
由x≡x mod mx \equiv x \ mod \ mx≡x mod m和a−1⋅a≡1 mod ma^{-1} \cdot a \equiv 1 \ mod \ ma−1⋅a≡1 mod m,根据可乘性得a−1⋅a⋅x≡x mod ma^{-1} \cdot a \cdot x \equiv x \ mod \ ma−1⋅a⋅x≡x mod m。
同理由y≡y mod my \equiv y \ mod \ my≡y mod m和a−1⋅b≡1 mod ma^{-1} \cdot b \equiv 1 \ mod \ ma−1⋅b≡1 mod m,根据可乘性得a−1⋅b⋅y≡y mod ma^{-1} \cdot b \cdot y \equiv y \ mod \ ma−1⋅b⋅y≡y mod m。证毕。
推论3 若a≡b mod ma \equiv b \ mod \ ma≡b mod m,则若n≠0n \ne 0n=0,则a⋅n≡b⋅n mod m⋅na \cdot n \equiv b \cdot n \ mod \ m\cdot na⋅n≡b⋅n mod m⋅n,反之亦然。
证明:根据定义证明,结论显然成立。
推论4 若ppp与qqq互质,则a≡b mod p⋅qa \equiv b \ mod \ p \cdot qa≡b mod p⋅q等价于a≡b mod pa \equiv b \ mod \ pa≡b mod p和a≡b mod qa \equiv b \ mod \ qa≡b mod q。
证明:根据定义,存在nnn和mmm使得a−b=n⋅pa-b=n\cdot pa−b=n⋅p和a−b=m⋅qa-b=m\cdot qa−b=m⋅q,所以n⋅p=m⋅qn\cdot p=m\cdot qn⋅p=m⋅q,因为ppp与qqq互质,则存在n1n_1n1使得n=n1⋅qn=n_1\cdot qn=n1⋅q,则a−b=n1⋅p⋅qa-b=n_1 \cdot p \cdot qa−b=n1⋅p⋅q。证毕。
1.2费马小定理
费马小定理 若ppp是素数,则对任何整数aaa,有ap≡a mod pa^{p} \equiv a \ mod \ pap≡a mod p。
证明:
若a=n⋅pa=n\cdot pa=n⋅p,则a≡0 mod pa \equiv 0 \ mod \ pa≡0 mod p,则ap≡0≡a mod pa^p \equiv 0 \equiv a \ mod \ pap≡0≡a mod p。
若aaa与ppp互质,则考虑序列1 {1,2,3,⋯ ,p−1}\{1,2,3,\cdots,p-1 \}{1,2,3,⋯,p−1}和序列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 \}{a⋅1 mod p,a⋅2 mod p,a⋅3 mod p,⋯,a⋅(p−1) mod p}其中a mod pa \ mod \ pa mod p 的结果就是aaa除ppp的余数,则序列2是序列1的一个重排列。为证明这点只需证明序列2中的每个数都不相等,反证法,若a⋅x mod p=a⋅y mod pa\cdot x \ mod \ p = a \cdot y \ mod \ pa⋅x mod p=a⋅y mod p,则a⋅x≡a⋅y mod pa\cdot x \equiv a\cdot y \ mod \ pa⋅x≡a⋅y mod p,根据推论2得出x≡y mod px \equiv y \ mod \ px≡y mod p,因为xxx和yyy都小于ppp,则x=yx=yx=y,与我们计算过程中xxx与yyy不相等矛盾。
我们重写上述的结论如下:
a⋅1≡p1 mod pa \cdot 1 \equiv p_1 \ mod \ pa⋅1≡p1 mod p
a⋅2≡p2 mod pa \cdot 2 \equiv p_2 \ mod \ pa⋅2≡p2 mod p
a⋅3≡p3 mod pa \cdot 3 \equiv p_3 \ mod \ pa⋅3≡p3 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,⋯,p−1}的一个重排列。
则根据可乘性
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 \ pap−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)与ppp互质,根据可约性得ap−1≡a mod pa^{p-1} \equiv a \ mod \ pap−1≡a mod p,证毕。
2.RSA算法
2.1基础知识
2.1.1欧拉算法
最大公约数
给定两个正整数r0r_0r0和r1r_1r1,求它们的最大公约数,最大公约数记为gcd(r0,r1)gcd(r_0,r_1)gcd(r0,r1)。
我们称a∣ba|ba∣b为aaa整除bbb,若存在qqq使得b=q⋅ab=q\cdot ab=q⋅a,其中aaa和bbb为正整数。
一个有用的结论
若r0>r1r_0>r_1r0>r1,我们可计算qqq使得r0=q⋅r1+r2r_0=q\cdot r_1 + r_2r0=q⋅r1+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_0g∣r0且g∣r1g|r_1g∣r1,则g∣r0−q⋅r1g|r_0 - q \cdot r_1g∣r0−q⋅r1,则g∣r2g|r_2g∣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
2.1.2扩展欧拉算法
结论
给定两个正整数r0r_0r0和r1r_1r1,存在sss和ttt使得s⋅r0+t⋅r1=gcd(r0,r1)s \cdot r_0 + t \cdot r_1 = gcd(r_0,r_1)s⋅r0+t⋅r1=gcd(r0,r1),其中sss和ttt是整数。
证明:直接用欧拉算法证明
假设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_0r0和r1r_1r1,若互质,则存在sss和ttt使得s⋅r0+t⋅r1=1s \cdot r_0 + t \cdot r_1 = 1s⋅r0+t⋅r1=1,其中sss和ttt是整数.
若ppp是素数,求rrr的逆r−1r^{-1}r−1,使得r⋅r−1 mod pr \cdot r^{-1} \ mod \ pr⋅r−1 mod p,其中rrr和r−1r^{-1}r−1为整数。
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:若ppp与qqq互质,则Φ(p⋅q)=Φ(p)⋅Φ(q)\Phi(p\cdot q)=\Phi(p)\cdot \Phi(q)Φ(p⋅q)=Φ(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=p⋅q,且ppp与qqq互质,则下面证明Z(m)Z(m)Z(m)与Z(p)×Z(q)Z(p)\times Z(q)Z(p)×Z(q)之间存在一一映射。定义映射fff:f(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)x∈Z(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)x∈Z(m),则xxx与mmm互质,根据扩展欧拉算法知存在x−1x^{-1}x−1,使得x−1⋅x≡1 mod mx^{-1} \cdot x \equiv 1 \ mod \ mx−1⋅x≡1 mod m,则根据推论4有x−1⋅x≡1 mod px^{-1}\cdot x \equiv 1 \ mod \ px−1⋅x≡1 mod p 且 x−1⋅x≡1 mod px^{-1}\cdot x \equiv 1 \ mod \ px−1⋅x≡1 mod p,则x mod p∈Z(p)x \ mod \ p \in Z(p)x mod p∈Z(p)且x mod q∈Z(q)x \ mod \ q \in Z(q)x mod q∈Z(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 \ px1≡x2 mod p且x1≡x2 mod qx_1 \equiv x_2 \ mod \ qx1≡x2 mod q,由于ppp与qqq互质,则x1≡x2 mod p⋅qx_1 \equiv x_2 \ mod \ p\cdot qx1≡x2 mod p⋅q,则x1≡x2 mod mx_1 \equiv x_2 \ mod \ mx1≡x2 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=t⋅q⋅xp+s⋅p⋅xq,其中s⋅p+t⋅q=1s \cdot p + t\cdot q =1s⋅p+t⋅q=1,因为ppp与qqq互质,由扩展欧拉算法可得,也即t⋅q≡1 mod pt \cdot q \equiv 1 \ mod \ pt⋅q≡1 mod p及s⋅p≡1 mod qs \cdot p \equiv 1 \ mod \ qs⋅p≡1 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=t⋅q⋅xp mod p=xp mod p,则x mod p∈Z(p)x \ mod \ p \in Z(p)x mod p∈Z(p),同理x mod q∈Z(q)x \ mod \ q \in Z(q)x mod q∈Z(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 \ px⋅xp−1≡t⋅q⋅xp⋅xp−1+s⋅p⋅xq⋅xp−1 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 \ px⋅xp−1≡t⋅q⋅xp⋅xp−1 mod p,则x⋅xp−1≡1 mod px \cdot x_p^{-1} \equiv 1 \ mod \ px⋅xp−1≡1 mod p,则xxx与ppp互质,同理xxx与qqq互质,则xxx与p⋅qp \cdot qp⋅q互质。
定理1 若m=p1e1⋅p2e2⋅p3e3⋯pnenm=p_1^{e_1} \cdot p_2^{e_2} \cdot p_3^{e_3} \cdots p_n^{e_n}m=p1e1⋅p2e2⋅p3e3⋯pnen,p1,p2,p3⋯pnp_1,p_2, p_3 \cdots p_np1,p2,p3⋯pn互质,则Φ(m)=∏1n(piei−piei−1)\Phi(m)=\prod_1^n(p_i^{e_i} - p_i^{e_i-1})Φ(m)=∏1n(piei−piei−1)。
证明:只需证明Φ(pe)=pe−pe−1\Phi(p^e)=p^e-p^{e-1}Φ(pe)=pe−pe−1,再根据引理1即可得出结论。因为p为素数,则pep^epe中形式为n⋅pn\cdot pn⋅p的数的个数为从111开始数,数到pe−1p^{e-1}pe−1结束,共有pe−1p^{e-1}pe−1个。
推论5 若ppp为素数,则Φ(p)=p1−p1−1=p1−p0=p−1\Phi(p)=p^1-p^{1-1}=p^1-p^0=p-1Φ(p)=p1−p1−1=p1−p0=p−1
2.1.4欧拉定理
定理2 欧拉定理 若aaa为整数,mmm为正整数,且aaa与mmm互质,则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 \ ma⋅Z(m)={a⋅χ(1),a⋅χ(2),⋯,a⋅χ(ϕ(m))} mod m,下面证明a⋅Z(m)a \cdot Z(m)a⋅Z(m)是Z(m)的一个重排列,证明参考费马小定理的证明。
2.2RSA算法定义
加密算法
给定公钥kpub={n,e}k_{pub}=\{n,e\}kpub={n,e},则明文xxx对应的密文yyy为y≡xe mod ny \equiv x^e \ mod \ ny≡xe mod n,其中x,y,e∈Znx,y,e \in Z_nx,y,e∈Zn。Zn={0,1,2,⋯(n−1)}Z_n=\{0,1,2,\cdots (n-1)\}Zn={0,1,2,⋯(n−1)}
解密算法
给定私钥kpri={n,d}k_{pri}=\{n,d\}kpri={n,d},则密文yyy对应的明文xxx为x≡yd mod nx \equiv y^d \ mod \ nx≡yd mod n,其中x,y,d∈Znx,y,d \in Z_nx,y,d∈Zn。Zn={0,1,2,⋯(n−1)}Z_n=\{0,1,2,\cdots (n-1)\}Zn={0,1,2,⋯(n−1)}
2.3公钥e与私钥d的关系
密钥生成
step 1:随机选取两个素数ppp和qqq,计算n=p⋅qn=p\cdot qn=p⋅q,这里的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)=Φ(p⋅q)=Φ(p)⋅Φ(q)=(p−1)⋅(q−1),随机选取eee,使得0<e<Φ(n)0 < e < \Phi(n)0<e<Φ(n)且与Φ(n)\Phi(n)Φ(n)互质。eee就是公钥,我们一般成为公钥指数。
step 3:计算ddd,ddd满足e⋅d≡1 mod Φ(n)e \cdot d \equiv 1 \ mod \ \Phi(n)e⋅d≡1 mod Φ(n),即ddd是eee的逆。ddd就是私钥,我们一般称为私钥ddd。
算法正确性证明
证明:x≡yd≡xed mod nx \equiv y^d \equiv x^{ed} \ mod \ nx≡yd≡xed mod n,又由e⋅d≡1 mod Φ(n)e \cdot d \equiv 1 \ mod \ \Phi(n)e⋅d≡1 mod Φ(n)知存在λ\lambdaλ使得e⋅d=λ⋅Φ(n)+1e \cdot d = \lambda \cdot \Phi(n) + 1e⋅d=λ⋅Φ(n)+1,则xed≡xλ⋅Φ(n)+1 mod mx^{ed} \equiv x^{\lambda \cdot \Phi(n) + 1} \ mod \ mxed≡xλ⋅Φ(n)+1 mod m
情况1:若xxx与nnn互质,则根据欧拉定理结论显然
情况2:若xxx与nnn存在公约数,则公约数为ppp或者qqq,假设为ppp,则x=r⋅px=r\cdot px=r⋅p,则(r⋅p)λ⋅Φ(p)⋅Φ(q)⋅x mod 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 mod p{x \equiv (r \cdot p)}^{\lambda \cdot \Phi(p) \cdot \Phi(q)} \cdot x \ mod \ px≡(r⋅p)λ⋅Φ(p)⋅Φ(q)⋅x mod p(x≡0 mod px\equiv 0 \ mod \ px≡0 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≡(r⋅p)λ⋅Φ(p)⋅Φ(q)⋅x mod q(若rprprp与qqq互质,则根据欧拉定理可得;若rprprp与qqq有公约数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≡(r⋅p)λ⋅Φ(p)⋅Φ(q)⋅x mod p⋅q,证毕。
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}⎩⎪⎪⎪⎨⎪⎪⎪⎧x≡a1 mod m1x≡a2 mod m2⋯x≡an 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}{x≡a1 mod m1x≡a2 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}{m2⋅x≡m2⋅a1 mod m2⋅m1m1⋅x≡m1⋅a2 mod m1⋅m2
又m1,m2m_1,m_2m1,m2互质,根据扩展欧拉算法知存在sss和ttt使得s⋅m1+t⋅m2=1s\cdot m_1+t\cdot m_2=1s⋅m1+t⋅m2=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}{t⋅m2⋅x≡t⋅m2⋅a1 mod m2⋅m1s⋅m1⋅x≡s⋅m1⋅a2 mod m1⋅m2
根据推论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(t⋅m2⋅x+s⋅m1⋅x)≡(t⋅m2⋅a1+s⋅m1⋅a2) mod m1⋅m2
继续简化:
(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(t⋅m2⋅x+s⋅m1⋅x)≡(t⋅m2+s⋅m1)⋅x≡x mod m1⋅m2
所以
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≡(t⋅m2⋅a1+s⋅m1⋅a2) mod m1⋅m2
证毕。
3.2加快解密RSA
利用费马小定理和中国剩余定理加快RSA解密过程
重写解密函数
计算x≡yd mod nx \equiv y^d \ mod \ nx≡yd mod n
计算x≡yd mod nx \equiv y^d \ mod \ nx≡yd mod n,即x≡yd mod p⋅qx \equiv y^d \ mod \ p\cdot qx≡yd mod p⋅q,因为ppp与qqq互质,则根据推论4,求解上述方程等价于求解下述二维线性同余方程组;
{x≡yd mod px≡yd mod q\begin{cases} x \equiv y^d \ mod \ p\\ x \equiv y^d \ mod \ q\\ \end{cases}{x≡yd mod px≡yd mod q
利用费马小定理改写上述方程组
计算yd mod py^d \ mod \ pyd mod p
因为p是素数,根据费马小定理,若yyy与ppp互质,则yp−1≡1mod py^{p-1} \equiv 1 \mod pyp−1≡1modp,则yd≡yd mod (p−1) mod py^d \equiv y^{d \ mod \ (p-1)} \ mod \ pyd≡yd mod (p−1) mod p;若yyy是ppp的倍数,则yp−1≡0 mod py^{p-1} \equiv 0 \ mod \ pyp−1≡0 mod p,则yd≡0≡yd mod (p−1) mod py^d \equiv 0 \equiv y^{d \ mod \ (p-1)} \ mod \ pyd≡0≡yd mod (p−1) mod p,所以可得yd≡yd mod (p−1) mod py^d \equiv y^{d \ mod \ (p-1)} \ mod \ pyd≡yd mod (p−1) mod p,同理可得yd≡yd mod (q−1) mod qy^d \equiv y^{d \ mod \ (q-1)} \ mod \ qyd≡yd mod (q−1) 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}{x≡yd mod (p−1) mod px≡yd mod (q−1) 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 \ nx≡q−1⋅q⋅yd mod (p−1)+p−1⋅p⋅yd mod (q−1) mod n,其中1≡p−1⋅p mod q1 \equiv p^{-1} \cdot p \ mod \ q1≡p−1⋅p mod q,1≡q−1⋅q mod p1 \equiv q^{-1} \cdot q \ mod \ p1≡q−1⋅q mod p。
名词解释
通常RSA的解密函数中有几个参数
ppp :模nnn的两个因子之一
qqq :模nnn的两个因子之一
dmp1dmp1dmp1:d mod (p−1)d \ mod \ (p-1)d mod (p−1)
dmq1dmq1dmq1 :d mod (p−1)d \ mod \ (p-1)d mod (p−1)
iqmpiqmpiqmp=q−1q^{-1}q−1 :inverse of qqq,qqq的逆$q^{-1} $,即1≡q−1⋅q mod p1 \equiv q^{-1} \cdot q \ mod \ p1≡q−1⋅q mod p。
ipmqipmqipmq=p−1p^{-1}p−1 :inverse of ppp,ppp的逆p−1p^{-1}p−1,即1≡p−1⋅p mod q1 \equiv p^{-1} \cdot p \ mod \ q1≡p−1⋅p mod q,一般没有这个参数,因为这个参数可以由iqmpiqmpiqmp快速计算出来。由 1≡q−1⋅q mod p1 \equiv q^{-1} \cdot q \ mod \ p1≡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 mod q-p' \cdot p \equiv 1 \ mod \ q−p′⋅p≡1 mod q,即−p′-p'−p′为ppp的逆,所以p−1=(−q−1⋅q+1)/pp^{-1}=(-q^{-1}\cdot q+1)/pp−1=(−q−1⋅q+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 (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 mod n=((a mod n)⋅(bmod n)) mod na \cdot b \ mod \ n=((a \ mod \ n) \cdot (b \mod \ n) )\ mod \ na⋅b mod n=((a mod n)⋅(bmod n)) mod n,此式可由推论1可得,因为(a≡a mod n) mod n(a \equiv a \ mod \ n) \ mod \ n(a≡a mod n) mod n,(b≡b mod n) mod 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

3305

被折叠的 条评论
为什么被折叠?



