这篇讲一下如何使用中国剩余定理CRT来对RSA加密运算进行加速。
RSA运算
当我们使用RSA私钥(n,d)对密文c进行解密(或者计算数字签名时),我们需要计算模幂m=cdmod n。私钥指数d并不像公钥指数e那样方便。一个k比特的模n,对应的私钥指数d差不多跟它一样长。计算的工作量同长度k成正比,所以对于RSA私钥的运算,有更多的计算量。
我们可以使用CRT模式更有效的计算m=cd
-
- 使用p,q,p>q提前计算以下值:
dP=e−1mod (p−1)
dQ=e−1mod (q−1)
qInv=q−1mod p
e−1表示模逆,表达式x=e−1mod Ny也会写成x=(1/e)mod N。x是任意整数满足x⋅e≡1(mod N)。N=n=pq。
m1=cdPmod p
m2=cdQmod q
h=qInv⋅(m1−m2)modp
m=m2+h⋅q
我们把(p,q,dP,dQ,qInv)作为私钥保存。
下面需要了解两个数论的原理,分别是中国剩余定义的一个特殊情况和欧拉定理。
中国剩余定理-特殊情况
中国剩余定理的特殊情况可以表述如下:
p和q是不相同的素数,n=p⋅q.对于任意的一对(x1,x2),0≤x1<p且0≤x2<q,存在唯一的数x,0≤x<n
x1=x mod p,且x2=x mod q
所以任意整数x都可以使用CRT表示方法唯一的表示成(x1,x2)。
欧拉定理 Euler's Theorem
欧拉定理是费马小定理(Fermat's Little Theorem)的推广,也称作欧拉-费马定理(Euler-Fermat Theorem)。
如果n是一个正整数,a是任意整数,且gcd(a,n)=1,那么aϕ(n)≡1 (mod n),ϕ(n)是Euler′stotient函数,求小于n的正整数中与n互质的个数
一个质数p,ϕ(n)=p−1
CRT表示法中的运算
我们需要计算m=cd mod n。如果我们知道(cd mod p,cd modq)那么CRT告诉我们存在唯一的值cd mod n在范围[0,n-1]。
使用CRT表示方法(x1,x2)恢复出x,我们使用Garner's方程式。
x=x2+h⋅q
h=((x1−x2)(q−1 mod p)) mod p
CRT系数qInv=q−1 mod p可以提前计算。模幂的运算量随着模的比特数k的立方增加而增加。所以做两次幂运算mod p和mod q,比做一次幂运算mod n效率要高。
计算cd mod p,可以使用欧拉定理来减少指数d modulo (p-1):
cd mod p=cd mod ϕ(p) mod p=cd mod (p−1) mod p
对于q使用相同的算法。
RSA运算
d mod (p−1)=e−1 mod (p−1),
d mod (q−1)=e−1 mod (q−1).
dP=e−1 mod (p−1)=d mod (p−1)
dQ=e−1 mod (q−1)=d mod (q−1)
m1=cdP mod p
m2=cdQ mod q
qInv=q−1 mod p
h=qInv⋅(m1−m2) mod p
m=m2+h⋅q