为啥要做这个

        早在大一的时候,我便对密码学产生兴趣。那时在计算机导论后面看到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年年初便开始动工,花了有大半年的时间来做,目前已经完工了,虽然跟其他的库比起来可能还有一些不足,但是我花在这上面的心血还是很大的,所以决定写点博文来分享一些自己的心得。

 

            为了方便阅读,把本系列博文的目录整理如下

         01. 大整数的表示和相关定义

         02. 基本的操作(维护算法)

         03. 比较操作

         04. 位操作

         05. 移位操作

         06. 绝对值加法

         07. 绝对值减法

         08. 有符号加法和减法

         09. Comba乘法(原理)

         10. Comba乘法(实现)

         11. Karatsuba乘法

         12. 有符号乘法

         13. 单数位乘法

         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