第二十一个知识点: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):
这个计算需要两个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方法: