第二十一個知識點: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方法: