1. 程式人生 > 實用技巧 >RSA遇上中國剩餘定理

RSA遇上中國剩餘定理

1.Introduction

最近讀論文剛好用到了這個,之前只是有耳聞,沒有仔細研究過,這裡就好好捋一下,會逐步完善

不過貌似CRT(中國剩餘定理)的實現更容易被攻擊

2. RSA: Overview

rsa演演算法描述如下:

  1. 選擇兩個大素數\(p、q\),計算\(N = p*q\)(最好保證N在2048bit以上,最新的研究工作已經可以成功分解762bit的N)

  2. 計算\(\phi(N)=(p-1)*(q-1)\)

  3. 選擇一個\(e\)使得\(gcd(e, \phi(n)) == 1\),e由於是作加密使用,故推薦使用小值,推薦使用3、65537(\(2^{16}+1\)),65537只有兩個1bit,所以在冪運算(參加我的另一篇部落格:

    快速指數演演算法)時只需要兩次額外的乘法運算;此外,不需要擔心使用固定值會造成的安全問題,RSA的安全性不會受影響

  4. 計算\(ed = 1 (\mod\phi(n))\),得到\(d\)值用於解密

  5. 公鑰:(N, e),私鑰:(N, d)

  6. 一次RSA加解密:

    \[c = m^e \mod N\\
    m = d^d \mod N\\
    \]

  7. 解釋:

    即$ m = (m^e)^d = m^{1\mod\phi(N)}=m^{h*\phi(N)+1}\mod N\(,由尤拉定理\)a^{\phi(n)}=1 \mod n$,得到前式等價於

    \(1^h*m^1 = m\)

3. Using CRT

3.1 中國剩餘定理

描述起來比較麻煩,見中國剩餘定理,可以把大模數變小模數

3.2 在RSA中使用CRT

RSA中計算耗時最大的地方是解密的\(c^d\)操作,由於d值往往較大,故計算難度較高,可以使用中國剩餘定理適當降低計算量。

計算私鑰

下面幾部分會被預計算並存入私鑰:

  • \(p、q\)
  • \(dp = d \mod {p-1}\)
  • \(dq = d \mod {q-1}\)
  • \(q_{inv} = q^{-1} \mod p\)

這樣最後的私鑰就是\((p,q,d,dp,dq,q_{inv})\)

解密

  • \(m_1 = c^{dp} \mod p\)
  • \(m_2 = c^{dq} \mod q\)
  • \(h = q_{inv}(m_1-m_2)\mod p\)
    • 當\(m_1<m_2\)時,有些實現會這樣計算\(h = q_{inv}[(m_1+\lceil{\frac{q}{p}}\rceil p)-m_2]\mod p\)
  • \(m = m_2+hq \mod {p*q}\)

這樣做雖然要計算兩次模冪,但效率依然要比直接計算高得多。因為不管是指數還是模數都要小得多

4. 列幾個常見的演演算法庫

5 Reference