第二十一个知识点:CRT算法如何提高RSA的性能?
中国剩余定理(The Chinese Remainder Theorem,CRT)表明,如果我们有两个等式\(x = a \mod N\) 和\(x = b \mod M\),那么\(x\)存在一个唯一一个\(\mod MN\)的解,当且仅当\(gcd(M,N)=1\).
在RSA中,我们可能会执行一个模幂在一个几千个位的数字上[1].一般来说,公钥加密要比对称加密要慢.这种特性可能导致web服务器网络变慢,而在实现过程中提高效率(软件算法)对于避免性能问题起着至关重要的作用.
我们表示RSA方案中主要的加密操作就是模幂算法\(M= C^d \mod N\).模幂能够用h-1次乘法和t-1次平方运算.(t是指数的长度,h是汉明系数).平均来说需要的次数一共是\(t + t/2 -1\).
更多的性能提升需要二进制指数算法或者窗口方法.对于后者我们依次处理\(w\)位.对于这个方案我们仍然需要t次平方运算,但是乘法次数减少到\(t/w\).更多的性能提升能通过滑动窗口法得到进一步改进.
为了让RSA指数算法更快,我们能够执行一些额外的小技巧,当我们加密或者解密RSA的时候.CRT被用于这种情况.因此我们首先考虑一个私钥操作,这意味着我们能够获得私钥,因此获得了\(N\)的分解数\(N = pq\).如果我们假设我们解密一个消息,那么我们的目标就是计算\(M = C^d \mod N\).
首先我们要计算\(M \mod p\)和\(M \mod q\):
\[
M_p = C^d \mod p = C^{d \mod {p-1}} \mod q
\]
\[ M_q = C^d \mod q = C^{d \mod p-1} \mod q \]
这个计算需要两个512模,512幂的运算,因为p, q都是512bit的.这会比1024,1024的快的多.
使用找CRT我们能恢复\(M\),通过使用\(M_p,M_q\).
计算\(T = p^{-1} \mod q\),然后保存下来.
M能够通过\(M_p\)和\(M_q\)用下面的办法恢复.
\(U = (M_q-M_p)*T \mod q\)
\(M = M_p + u*p\)
[1] http://www.cs.bris.ac.uk/~nigel/Crypto_Book/book.ps (Chapter 15)
good for write down
下面是说的比较好的CRT方法:
https://www.di-mgt.com.au/crt_rsa.html
来源:https://www.cnblogs.com/zhuowangy2k/p/12245513.html