最新大整数基本运算的研究与实现分析Word下载.docx

上传人:b****3 文档编号:16094668 上传时间:2022-11-19 格式:DOCX 页数:52 大小:256.51KB
下载 相关 举报
最新大整数基本运算的研究与实现分析Word下载.docx_第1页
第1页 / 共52页
最新大整数基本运算的研究与实现分析Word下载.docx_第2页
第2页 / 共52页
最新大整数基本运算的研究与实现分析Word下载.docx_第3页
第3页 / 共52页
最新大整数基本运算的研究与实现分析Word下载.docx_第4页
第4页 / 共52页
最新大整数基本运算的研究与实现分析Word下载.docx_第5页
第5页 / 共52页
点击查看更多>>
下载资源
资源描述

最新大整数基本运算的研究与实现分析Word下载.docx

《最新大整数基本运算的研究与实现分析Word下载.docx》由会员分享,可在线阅读,更多相关《最新大整数基本运算的研究与实现分析Word下载.docx(52页珍藏版)》请在冰豆网上搜索。

最新大整数基本运算的研究与实现分析Word下载.docx

多精度大整数,Comba,Montgomery,二分查找,笔算

注:

本设计(论文)题目来源于企业项目。

Abstract

Nowadays,ascomputerinformationsecurityrequirementsimprovecontinuously,thecryptologyhasbeenwidelyappliedtolife.PublickeycryptographicalgorithmsanddigitalsignaturealgorithmssuchasRSA,ElGamal,DSA,ECCareallbaseonmultipleprecisionarithmetic.Multipleprecisionmultiplication,Division,modularmultiplication,exponen-tiation,modularexponentiationwhichneedmoreworkingtimeisusedbypublickeycryptographicalgorithmswidely,theirspeedisveryimportanttotheimplementationsofthosealgorithms.Howtofastimplementthosearithmeticaboveisthehottopicinthepublickeycryptographicfield.

Thispaperisbasedonthe32bitsystem.Firstofall,wefoundthemodularfoundationofmultipleprecisionarithmeticlibrary;

Aftersomeauxiliaryfunctionisformed,wediscussandimplementthemultipleprecisionintegerbasicaddition,Subtraction,multiplication,,kindsofsquarealgorithms,division,reduction,andsomerelationalfunction.AllthealgorithmdiscussinthispaperisimplemententirelyinportableISOC/C++andtheoptimizationofthosealgorithmsimplementationsisbuiltontheC/C++languagelevel.thealgorithmhashighenoughtoensuretheefficiencyofthecodeatthesametimestrivetoclearlyunderstand,simpleinterfacefunctionwithportabilityandstability.

Keywords:

MultiplePrecisionInteger,Comba,Montgomery,Binarysearch,

Writtencalculation

1绪论1

1.1题目的背景1

1.2国内外研究状况1

1.3本文研究内容2

2大整数的结构3

2.1大整数的存取结构3

2.1.1大整数结构分析3

2.1.2大整数结构4

2.2预定义的变量5

2.3大整数基本函数定义5

2.3.1大整数初始化操作5

2.3.2大整数的销毁操作6

2.3.3大整数的扩展6

2.3.4大整数的输入和输出函数6

2.4大整数的移位函数7

2.4.1字移位运算7

2.4.2比特移位运算9

3大整数加法和减法实现13

3.1符号相同的加法运算13

3.2符号不相同的加法运算16

4大整数乘法实现19

4.1笔算乘法19

4.2使用Comba方法的快速乘法22

4.3平方算法24

4.3.1笔算平方算法25

4.3.2Comba思想的平方算法27

5大整数模缩减实现30

5.1模2的幂30

5.2Barrett缩减31

5.3Montgomery缩减33

6大整数除法实现37

6.1使用减法替换除法运算37

6.2模拟笔算除法38

7大整数幂运算实现43

7.1单数位幂乘43

7.2k—ray幂乘45

7.3滑动窗口幂乘45

结论47

参考文献48

附录A49

1绪论

1.1题目的背景

科学技术和网络的发展使计算机深入到了各行业的方方面面,计算机在带来方便和提高了工作效率的同时却也带来了各种各样的新问题,其中信息安全问题最为突出,随着计算机信息安全要求的不断提高,计算机保密系统已变得越来越重要。

随着香农定理的发表,信息安全技术得到了迅猛的发展。

密码学应用不再是局限于军事、国防等有限领域,而是迅速的走进了千家万户。

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提出了一种加法型模乘算法,其设计思想是将模乘转换为一系列加法。

为减少加法次数,人们提出了窗口模乘算法和滑动窗口模乘算法,并相继提出不少改进方法,获得较理想的结果。

1985年Montgomery提出了一种计算模乘的有效算法,其设计思想是将普通模乘转换为易于计算的特殊模乘[4]。

此后,人们提出了不少基于Montgomery思想的改进算法,并得到了广泛的实际应用。

大多数情况下,一种算法的理论描述和实际实现之间有不小的差距,是两个完全的不同的概念,因此,众多学者为这些优秀算法的具体的软、硬件实现、优化付出了辛勤的汗水,在软件实现方面这些算法多数被包含在某些算法库中,其中也有不少是开放源代码的算法函数库,最著名的就是GNU的号称地球上最快的多精度大数库GMP,还有Miracl、openssl、cryptopp、cryptlib、flint等优秀的算法库,而我国的郭先强先生的HugeCalc.dll库也同样出名,虽然它不是开放源码的,但它的速度赶得上GMP甚至在某些方面超越了GMP。

然而,正如TomStDenis所说,不存在一个易懂的大数库!

从目前收集到的信息看,凡是效率高的算法实现,要么结构复杂、层次庞大,要么编码风格奇特;

所有速度快的库都使用了汇编,同时大部分都使用了MMX、SSE2、SIMD系列指令作加速,也对多核心CPU进行了优化,使用了多线程等,甚至运行时监测CPU类型而使用相关的特殊优化,最大限度地榨取CPU的性能。

然而,这些很好的优化技术却大大地降低了代码的可读性,极大地提高了理解、学习的门槛。

在学术专著方面,大数算术也备受欢迎,DonaldE.Knuth也用了一整本书——《TheArtofComputerProgrammingVolume2》来从理论的角度讲述了多精度算术,并讲解了高效的算法背后关键的数学概念;

《HandbookofAppliedCryptography》[6]也讲述了应用密码学相关的大数算术算法的有效实现;

而《KryptographieinCundC++》[7]和《BigNumMath:

ImplementingCryptographicMultiplePrecisionArithmetic》等则从编码学的角度对大数算术进行了多方面的讨论。

1.3本文研究内容

本文基于32位的系统,首先采用模块化的思想建立大整数运算库的基础框架,在实现一些辅助函数后在此运算库框架上讨论并实现多精度大整数的基本加法、减法、乘法、平方算法、缩减算法、模乘、模幂乘等算法。

本文讨论的所用程序均采用C/C++语言编写,所采用的优化也均建立在C/C++语言这一层面上,在保证算法有足够高的效率的同时力求代码清晰易懂,函数接口简单明了,具有可移植性和稳定性。

2大整数的结构

大整数运算是一些相当复杂的运算,本文要实现的是大整数基本运算,采用模块化思想按照层次结构来设计及实现一些其它的辅助函数,而不是把它们内嵌在算法函数内,这样既能够避免算法函数的程序代码的过分冗长,使代码清晰易懂、突出算法过程又能够使程序易于测试、排错、更新和复用。

由于本文是介绍大整数的基本算法,在本文开始之前只介绍一些关键的辅助函数,其它辅助函数是在相关算法实现的时候再简略介绍它的功能。

2.1大整数的存取结构

2.1.1大整数结构分析

大数的存储方式主要是有两种——链式存储方式和顺序存储方式。

一是采用链表作为存储结构,这种方式可以适应不定长度的大数,这种方式的存储空间包括整数表示部分和链表指针部分,其空间利用率不高,而且其存储空间是离散的,所以随机访问效率也不高,而且频繁的堆操作和引用操作势必大量增加开销,不利于编译器优化速度;

另外,根据内存管理方式的不同,顺序存储方式可以再分为静态存储方式和动态存储方式。

静态存储方式数组的大小是事先已经知道的,适合知道大小的整数运算。

而因其数组长度是固定不变的,在运算的时候容易造成溢出。

所以其不适合不定长度的整数运算。

而动态方式,其可以动态分配内存空间。

可以根据整数位数的变化调整大小。

其是最常用的顺序存储方式,而且顺序存储方式是连续分配

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1