大整数乘法的实现与分析.doc
- 文档编号:78247
- 上传时间:2022-10-02
- 格式:DOC
- 页数:64
- 大小:1.12MB
大整数乘法的实现与分析.doc
《大整数乘法的实现与分析.doc》由会员分享,可在线阅读,更多相关《大整数乘法的实现与分析.doc(64页珍藏版)》请在冰豆网上搜索。
本科毕业设计(论文)
大整数乘法的实现与分析
课程名称
题目名称
学生学院
专业班别
学号
学生姓名
指导教师
2008年6月
摘要
随着计算机信息安全要求的不断提高,密码学被大量应用到生活中。
RSA、ElGamal、DSA、ECC等公钥密码算法和数字签名算法都建立在大整数运算的基础上,比较耗时的大整数乘法、模乘、幂运算、模幂乘运算等却被上述算法大量使用,它们的运算速度对这些算法的高效实现起着重要的作用,如何快速实现上述几种运算是公钥密码领域普遍关注的热点问题。
本文基于32位的系统,首先采用模块化的思想建立大整数运算库的基础框架,在实现一些辅助函数后在此框架上讨论并实现多精度大整数的基本乘法、Comba乘法、Karatsuba乘法、各种平方算法、Barrett缩减、Mentgomery缩减、模乘、Mentgomery模幂乘等算法及相关的算法。
本文讨论的所用程序均采用C语言编写,所采用的优化也均建立在C语言这一层面上,在保证算法有足够高的效率的同时力求代码清晰易懂,函数接口简单明了,具有可移植性和稳定性。
关键词:
多精度大整数,缩减,模幂乘,滑动窗口
注:
本设计(论文)题目来源于实际应用。
Abstract
Nowadays,ascomputerinformationsecurityrequirementsimprovecontinuously,thecryptologyiswidelyappliedtolife.PublickeycryptographicalgorithmsanddigitalsignaturealgorithmssuchasRSA,ElGamal,DSA,ECCareallbaseonmultipleprecisionarithmetic.Multipleprecisionmultiplication,modularmultiplication,exponentiation,modularexponentiationwhichneedmoreworkingtimeisusedbypublickeycryptographicalgorithmswidely,theirspeedisveryimportanttotheimplementationsofthosealgorithms.Howtofastimplementthosearithmeticaboveisthehottopicinthepublickeycryptographicfield.
Thispaperisbasedonthe32bitsystem.First,wefoundthemodularfoundationofmultipleprecisionarithmeticlibrary;Aftersomeauxiliaryfunctionisformed,wediscussandimplementthemultipleprecisionintegerbasicmultiplication,Combamultiplication,Karatsubamultiplication,kindsofsquarealgorithms,Barrettreduction,Montgomeryreduction,MontgomeryModularExponentiationalgorithmandsomerelationalfunction.AllthealgorithmsdiscussinthispaperisimplemententirelyinportableISOCandtheoptimizationofthosealgorithmsimplementationsisbuiltontheclanguagelevel.Clearcode,simpleapplicationprogramminginterfaceisasimportantastheefficiency,therobustnessandtheportability.
Keywords:
MultiplePrecisionInteger,Reduction,ModularExponentiation,SlidingWindow
目录
1绪论 1
1.1题目背景 1
1.2国内外研究状况 1
1.3本文构成及研究内容 2
2基础设置 3
2.1大整数的表示 3
2.2部分预定义的量 4
2.3底层函数 5
2.3.1初始化大整数 5
2.3.2清除大整数 6
2.3.3扩展大整数的精度 6
2.3.4把一个大整数赋值给另一大整数 6
2.3.5格式化的表示 6
3特殊优化 7
3.1字移位 7
3.2乘以2或除以2 7
3.3乘以或除以2的幂 8
3.4模2的幂 10
4乘法 12
4.1传统的乘法 12
4.2使用Comba思想的乘法 14
4.3只计算低半部或高半部的乘法 17
4.4Karatsuba乘法 17
4.5平方 22
4.5.1基本的平方算法 22
4.5.2使用Comba思想的平方 24
4.5.3Karatsuba平方 26
5模缩减 27
5.1Barrett缩减 27
5.2Montgomery缩减 30
6幂乘 33
6.1幂乘概述 33
6.1.1字幂乘 34
6.2k-ray幂乘 35
6.2.1滑动窗口幂乘 36
6.3模幂乘 36
结论 43
参考文献 44
致谢 46
附录 47
1绪论
1.1题目背景
科技的发展特别是网络的发展使计算机深入到了各行各业的方方面面,计算机在带来方便和提高了工作效率的同时却也带来了各种各样的新问题,其中信息安全问题最为突出,随着计算机信息安全要求的不断提高,计算机保密系统已变得越来越重要,密码学应用不再是局限于军事、国防等有限领域,而是迅速的走进了千家万户,如CA认证、电子政务、电子商务、数字签名、身份认证、密钥分发等。
RSA、ElGamal、DSA、ECC等公钥密码算法和数字签名算法都建立在大整数运算的基础上,耗时的大整数乘法、模乘、幂运算、模幂乘运算等更是被上述算法大量使用,它们的运算速度对这些算法的高效实现起着重要的作用,如何快速实现上述几种运算是公钥密码领域普遍关注的热点问题。
1.2国内外研究状况
长期以来,各方面的工作者对大数模幂的快速实现问题进行了大量研究,主要围绕模幂算法设计与优化、模乘算法设计与优化、专用芯片设计等,并且已经取得不少研究成果。
模幂通常都转化为一系列模乘和模平方运算,目前较好的算法已经能够将1次n比特数的模幂运算转化为约5n/4次n比特的模乘运算,再减少模乘的次数的难度很大,因此,提高模乘的速度是模幂快速实现的关键[1]。
目前,模乘主要有估商型、加法型和Montgomery型3类方法。
1960年,Pope和Stein就提出了采用估商方法将模乘转化为一系列乘法和除法进行计算的思想;1981年,Knuth具体给出了一种转换为乘法和除法的估商型模乘算法[2];1987年,Barrett提出了一种转换为乘法和加法而没有除法的估商型模乘算法[3]。
1983年,Blakley提出了一种加法型模乘算法,其设计思想是将模乘转换为一系列加法[4]。
为减少加法次数,人们提出了窗口模乘算法和滑动窗口模乘算法,并相继提出了不少改进方法,获得较理想的结果。
1985年Montgomery提出了一种计算模乘的有效算法,其设计思想是将普通模乘转换为易于计算的特殊模乘[5]。
此后,人们提出了不少基于Montgomery思想的改进算法,并得到了广泛的实际应用。
大多数情况下,一种算法的理论描述和实际实现之间有不小的差距,是两个完全的不同的概念,因此,众多学者为这些优秀算法的具体的软、硬件实现、优化付出了辛勤的汗水,在软件实现方面这些算法多数被包含在某些算法库中,其中也有不少是开放源代码的算法函数库,最著名的就是GNU的号称地球上最快的多精度大数库GMP,还有Miracl、openssl、cryptopp、cryptlib、flint等优秀的算法库,而我国的郭先强先生的HugeCalc.dll库也同样出名,虽然它不是开放源码的,但它的速度赶得上GMP甚至在某些方面超越了GMP[6]。
然而,正如TomStDenis所说,不存在一个易懂的大数库[7]!
从目前收集到的信息看,凡是效率高的算法实现,要么结构复杂、层次庞大,要么编码风格奇特;所有速度快的库都使用了汇编,同时大部分都使用了MMX、SSE2、SIMD系列指令作加速,也对多核心CPU进行了优化,使用了多线程等,甚至运行时监测CPU类型而使用相关的特殊优化,最大限度地榨取CPU的性能。
然而,这些很好的优化技术却大大地降低了代码的可读性,极大地提高了理解、学习的门槛。
在学术专著方面,大数算术也备受欢迎,DonaldE.Knuth也用了一整本书——《TheArtofComputerProgrammingVolume2》来从理论的角度讲述了多精度算术,并讲解了高效的算法背后关键的数学概念;《HandbookofAppliedCryptography》[8]也讲述了应用密码学相关的大数算术算法的有效实现;而《KryptographieinCundC++》[9]和《BigNumMath:
ImplementingCryptographicMultiplePrecisionArithmetic》等则从编码学的角度对大数算术进行了多方面的讨论。
1.3本文构成及研究内容
本文基于32位的系统,首先采用模块化的思想建立大整数运算库的基础框架,在实现一些辅助函数后在此框架上讨论并实现多精度大整数的基本乘法、Comba乘法、Karatsuba乘法、各种平方算法、Barrett缩减、Mentgomery缩减、模乘、Mentgomery模幂乘等算法及相关的算法。
本文所讨论的所有算法的实现都不使用汇编、多媒体加速指令、多线程等技术,本文讨论的所用程序均采用C语言编写,所采用的优化也均建立在C语言这一层面上,在保证算法有足够高的效率的同时力求代码清晰易懂,函数接口简单明了,具有可移植性和稳定性。
2基础设置
大整数运算是一些相当复杂的运算,虽然本文要实现的只是乘法类运算,但还是很有必要采用模块化思想按照层次结构来设计及实现一些其它的辅助函数,而不是把它们内嵌在算法函数内,这样既能够避免算法函数的程序代码的过分冗长、使代码清晰易懂、突出算法过程又能够使程序易于测试、排错、更新和复用。
由于本文重点在乘法类算法,下面只介绍一些关键的辅助
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 整数 乘法 实现 分析