最近讀論文恰好用到了這個,以前只是有耳聞,沒有仔細研究過,這裏就好好捋一下,會逐步完善html
不過貌似CRT(中國剩餘定理)的實現更容易被攻擊算法
rsa算法描述以下:安全
選擇兩個大素數\(p、q\),計算\(N = p*q\)(最好保證N在2048bit以上,最新的研究工做已經能夠成功分解762bit的N)加密
計算\(\phi(N)=(p-1)*(q-1)\)spa
選擇一個\(e\)使得\(gcd(e, \phi(n)) == 1\),e因爲是做加密使用,故推薦使用小值,推薦使用三、65537(\(2^{16}+1\)),65537只有兩個1bit,因此在冪運算(參加個人另外一篇博客:快速指數算法)時只須要兩次額外的乘法運算;此外,不須要擔憂使用固定值會形成的安全問題,RSA的安全性不會受影響htm
計算\(ed = 1 (\mod\phi(n))\),獲得\(d\)值用於解密blog
公鑰:(N, e),私鑰:(N, d)ip
一次RSA加解密:get
解釋:博客
即\(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\)
描述起來比較麻煩,見中國剩餘定理,能夠把大模數變小模數
RSA中計算耗時最大的地方是解密的\(c^d\)操做,因爲d值每每較大,故計算難度較高,可使用中國剩餘定理適當下降計算量。
下面幾部分會被預計算並存入私鑰:
這樣最後的私鑰就是\((p,q,d,dp,dq,q_{inv})\)
這樣作雖然要計算兩次模冪,但效率依然要比直接計算高得多。由於無論是指數仍是模數都要小得多