★ 為啥要做這個
早在大一的時候,我便對密碼學產生興趣。那時在計算機導論后面看到RSA加密的計算原理,覺得十分有趣,於是就很想自己實現一個RSA加密,不過我很快就放棄了,因為實在搞不定那超長的整數計算。C里面最長的整數類型也就64位,對於動輒就1024位的RSA密鑰,這連個零頭都沒有。為了完成這個目標,我便開始琢磨着弄一個用來計算大整數的庫。原本我也打算使用別人已經寫好的大數庫,不過最終還是決定自己搞一個,因為凡是效率高速度快的大數庫 (OpenSSL, Crypto++, GMP),要么使用的數據結構很復雜,要么編碼風格比較奇葩,對於剛學編程的我來說水平和耐心都實在是有限,以至於無法完全讀懂這些東西,有一些我能看明白的代碼,其實現方式又比較幼稚,效率很低速度慢得一塌糊塗,最后想想,自己做一個的話不僅能弄明白大整數計算是如何實現的,而且也順帶提升一下自己的編碼能力,何樂而不為呢?
★ 用途
做一個項目,清晰的定位還是十分有必要的,不然容易偏離自己的初衷。對於這個大整數庫,我的定位就是用於密碼學(准確的說是公鑰密碼學),只做整數計算,不做浮點數計算(那是給科學計算用的,加密完全用不上)
★ 要求
雖然大整數算法的計算開銷比其他算法的開銷要大,但是通過精心的優化,大部分開銷還是可以保持在較小的水平。對於我自己做的這個庫,只要能接近OpenSSL的效率,我就滿足了,但是代碼盡量做到簡潔易懂,不要像OpenSSL或者GMP那樣太復雜。編程使用C語言,對於一些關鍵的地方,考慮使用內聯匯編進行優化。
★ 本系列博文的內容
本系列博文,主要是介紹大整數算法的實現,分享一些編程心得,順帶講講算法背后的一點點理論。
★ 參考的資料
Handbook of Applied Cryptography ( HAC )
BigNum Math-Implementing Cryptographic Multiple Precision Arithmetic
OpenSSL
PolarSSL
LibTomMath
★ 結尾
這個大整數庫在2014年年初便開始動工,花了有大半年的時間來做,目前已經完工了,雖然跟其他的庫比起來可能還有一些不足,但是我花在這上面的心血還是很大的,所以決定寫點博文來分享一些自己的心得。
為了方便閱讀,把本系列博文的目錄整理如下
14. Comba平方
15. Karatsuba平方
16. 有符號平方
17. 帶余數除法
18. 單數位除法
19. 模運算
20. 字符串讀寫
21. 二進制讀寫
22. 文件讀寫
23. 數論算法:最大公約數算法
24. 數論算法:模逆
25. 蒙哥馬利縮減算法(原理)
26. 蒙哥馬利縮減算法(實現)
27. 冪乘
28. 模冪乘
29. 隨機數生成
30. 數論算法:Miller-Rabin素性測試
31. 隨機素數生成
32. 計時攻擊防范的相關計算
33. 總結
版權聲明
原創博文,轉載必須包含本聲明,保持本文完整,並以超鏈接形式注明作者Starrybird和本文原始地址:http://www.cnblogs.com/starrybird/p/4350084.html
