★ 为啥要做这个
早在大一的时候,我便对密码学产生兴趣。那时在计算机导论后面看到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