第二十一个知识点:CRT算法如何提高RSA的性能?

第二十一个知识点: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

posted @ 2020-01-31 15:27  WangZhuo2000  阅读(3280)  评论(0编辑  收藏  举报