一种RSA密钥对快速生成系统及方法与流程

文档序号:12182279阅读:734来源:国知局
一种RSA密钥对快速生成系统及方法与流程
本发明涉及信息安全领域的密码学技术,特别是用于密码学中非对称算法RSA密钥对的快速生成,其可适用于安全芯片、支付终端、网络安全等各个领域,潜在价值在于能够快速生成指定范围内的大素数,利用寻得的大素数进行加解密、数字签名验签等运算,提升系统传输的安全性和可靠性。
背景技术
:信息产业是当今世界经济发展中最快和最富活力的新兴产业,随着信息技术的快速发展和信息产品的快速普及应用,特别是金融银行卡、居民健康卡、金融社保卡、USBKey、移动支付芯片、TCM芯片等安全芯片的问世,对于芯片的安全问题越来越重视,安全芯片成为厂商的准入门槛,安全问题正遭遇日益巨大的挑战,已成为信息产业发展最引人注目的一个问题。信息安全技术是专门针对信息安全问题的技术,它是通过技术手段解决信息安全问题所形成的技术,利用信息安全技术,可以有力地帮助信息安全问题的解决,密码技术是信息安全技术的核心,主要由密码算法和密码协议组成,其中密码算法是基础。RSA算法是目前应用最普遍的非对称算法,该算法是基于数论的公钥密码体质,RSA算法的公开密钥和私有密钥是一对大素数,因此素数的生成算法在计算机领域占着举足轻重的地位,更加高效地搜索大素数、素数筛选和进行素数判定一直是研究的热点和难点。大素数密钥对生成对RSA算法的安全性有着至关重要的影响,主要涉及大素数的寻找、过滤和判定,由于大素数分布具有稀疏性和不规律性,故无法用一种直接的方式计算出大素数。常用的素性检测算法有费尔马小定理、Solovay-Strassen、Lehman、Miller-Rabin等,由于素性判定涉及到开销极大的模幂运算,所以大素数的产生速度非常慢,一直以来没有比较好的办法,成为制约RSA算法效率的瓶颈,因此,快速寻找与判定高效安全的大素数成为业界面临的难题。目前传统的方法有以下几种:方法1:随机搜索法:随机产生一个大奇数进行测试,若是素数,则结束;否则,重新随机产生一个大奇数进行素性测试,重复进行搜索判定操作,直到找到一个大素数。缺点:由于素数分布不确定性,1024位以上的素数分布更无规律性,采用这种方法很不切实际。方法2:随机递增搜索法:随机产生一个奇数,以该奇数为起点,步长为2,依次进行素性测试,直到找到一个大素数为止。定理可证明,随机递增搜索法的次数大于随机搜索法次数的一半,小于随机搜索法的次数。优点:相比随机搜索法,在速度上有一定的提高。缺点:同方法1类似,没有本质上区别。方法3:试除法:由于判断大整数能否被小素数整除的时间远低于各种概率测试法,故可首先产生一个随机大奇数,然后用一定范围内的小素数(比如:小于100)进行筛选,如果不能被该小素数整除,则取下一个小素数继续整除,遍历完一定范围所有小素数,仍旧不能被小素数整除,则将该大奇数房缓冲区备用;如果能被该小素数整除,则取一组新的随机大奇数进行试除;循环遍历所有的小素数组,直到遍历完为止,紧接着,对不能被所有小素数整除的大奇数,采用概率素性测试算法进行判断。优点:从某种意义上说,这样可以加快大素数的生成速度。缺点:在整除小素数的过程中,一旦该随机大奇数数能被某小素数整除,就得重取新的随机大整数进行试除,实际测试结果也不明显。方法4:同余快速筛除法,根据同余定理,大素数分块相加再除以小素数,若能除尽则该大整数肯定能被除尽。举例:判定一个整数能否被3整除,可以把十进制的每一位上的数字相加除以3,如果能除尽则该数能被3整除,这比直接用3除的要快;用偶数位数字之和减去奇数位数字之和得到的结果如果能被11整除,则该数能被11整除。优点:被除数的位数指数级降低,减少了整除小素数的时间,从而加快过滤合数的速度。缺点:跟方法3类似,如果能被小素数整除的话,也存在重新取新的随机数判定问题。方法5:Lucas定理设n属于N,若存在一整数a,1<a<n且a^(n-1)=1modn,同时对n-1的每一个素因子p都满足a^((n-1)/q)modn!=1,则n为素数。优点:该方法是确定性素数判定方法。缺点:该方法需要知道n-1的全部素因子。现有研究主要集中在素性检测算法上,而对素数的快速搜索算法很少有所涉及,导致素数寻找时间开销很大。目前,主流的Miller-Rabin算法的传统实现方式,涉及到耗时的模幂算法和模乘算法,这样会导致素性判定时间也会较长,并且绝大多数情况下,需要上百次、甚至上千次执行素性检测算法,所以导致加解密过程中生成大素数的时间会很长,导致系统性能极度下降。因此,如何快速寻找和判定一对大素数成为快速生成密钥对的一条捷径。技术实现要素:本发明的目的在于提供一种RSA密钥对快速生成系统及方法,实现RSA密钥对快速检索、过滤和判定,并且对现有素数判定算法进行优化,以提高密钥对生成速度,解决现有加解密技术中RSA密钥对生成时间过长的问题。为了解决上述技术问题,本发明所采用的技术方案是:一种用于非对称算法中密钥对快速生成系统,包括CPU、密码协处理器、素数生成器、存储器,所述CPU,用于调度控制;所述密码协处理器,用于模乘运算、模幂运算、模运算、整数运算、曲线运算、散列运算等加解密运算;所述存储器,用于存储程序和数据;所述素数生成器,用于过滤合数,采用硬件方式实现,支持256位、512位、1024位、2048位、4096位模式的合数过滤,完成模余、计算并置位标识表。优选地,过滤合数的方法,具体步骤如下:A.首先选取Nbits的随机数,随机数首末位置为1;B.将一定范围内的小素数组存放到存储器对应位置;C.将标识组的标识全部清零,然后存储到存储器;D.将随机数和小素数作为参数输入,硬件执行小整数除法取余或者取模运算;E.根据运算结果,硬件计算出对应该小素数的最小标识位,然后以该小素数为步长,将标识组的对应位分别置1;F.循环执行步骤D、E,直到遍历完所有小素数集为止;G.根据没有置位的标识位状态,计算出伪素数对应的偏移量并写入到存储器中;H.根据随机数和伪素数的偏移量,计算出对应的伪素数;I.依次选择其中伪素数,首先用费尔马小定理预检测是否是素数,如果不是素数,则继续执行该步骤;如果可能是素数,则执行下一步骤;J.然后使用Miller-Rabin算法检查是否是素数,如果不是素数,则跳回到步骤I;如果是素数,则输出大素数。优选地,所述模幂运算,既支持二进制算法,又支持滑动窗口法,具体实现步骤如下:从右到左BR算法的乘法并行运算,减少运算时间;优化幂指数e,减少模乘调用次数;滑动窗口法对幂指数e处理,抵抗功耗分析。优选地,模乘运算为改进的蒙哥马利模乘运算,具体实现步骤如下:减少数据相关,存储临时变量,运算在单一结构完成;采用两级流水线结构,加强流水执行效率;采用双乘法器方案,并行执行运算;以32位为步进,支持任意长度位模式;蒙哥马利模乘步骤中减法做功耗平衡处理,防止攻击分析。一种用于非对称算法中密钥对快速生成方法,具体实现步骤如下:A1、建立长度为N全0列表T[N];A2、生成一组随机数X;A3、取该组随机数X,计算最小S,对小素数spl[i]进行小整数除或模余运算,使(X+2*S)modspl[i]=0;(其中,S>=0);A4、若能整除尽,则S+i*spl[i]<N的所有位标为1,表示合数;否则,标识位仍为0,表示伪素数;A5、对伪素数采用费尔马小定理算法进行素数检测,如果是合数,则返回步骤A4重取下一个伪素数进行检测;如果可能是素数,则继续执行下述步骤;A6、上述步骤伪素数再进行Miller-Rabin素性判定,若判定为素数,则继续执行后续步骤A7;否则,则返回步骤A5,继续取伪素数进行判定;A7、判定好两个大素数后,进行计算私钥d和公钥e。优选地,随机数,首末位均置为1,所涉及步长为大于0的偶数,模除或小整数除方法过滤合数,硬件实现进行合数过滤和置位标识位。本发明技术方案采用高效的硬件素数过滤法,费尔马小定理,改进的并行蒙哥马利模乘实现,以及并行实现模幂运算,极大地缩减了寻找大素数生成时间,减少了密钥对的生成时间,显著地提高了加解密运算的速度,最终提升了芯片处理数据的速度。附图说明下面结合附图和具体实施方式对本发明作进一步说明。图1为公钥加解密的示意图。图2为数字签名的示意图。图3为本发明合数过滤流程图。图4为本发明密钥对生成的流程图。图5为本发明的系统结构示意图。具体实施方式为了便于本领域技术人员的理解,下面结合附图对本发明做进一步描述,但不能用来限制本发明的保护范围。首先,RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。RSA的算法涉及三个参数,假设为n、e1、e2。其中,n是两个大质数p、q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。e1和e2是一对相关的值,e1可以任意取,但要求e1与(p-1)*(q-1)互质;再选择e2,要求(e2*e1)mod((p-1)*(q-1))=1。(n,e1),(n,e2)就是密钥对。其中(n,e1)为公钥,(n,e2)为私钥。RSA加解密的算法完全相同,设A为明文,B为密文,则:A=B^e2modn;B=A^e1modn;(公钥加密体制中,一般用公钥加密,私钥解密)e1和e2可以互换使用,即:A=B^e1modn;B=A^e2modn。为了便于说明RSA算法的加解密流程,图1和图2分别说明了RSA算法所示的公钥加解密流程和数字签名流程。如图1所示公钥加解密流程图,目标端B生成一对密钥,公钥B0,私钥B1,并将该公钥B0向信息源A公开。得到公钥的信息源A使用该公钥B0对机密信息进行加密后再发送给目标端B。目标端B用自己保存的私钥B1,对加密后的信息进行解密,目标端B只能用其专用的私钥B1解密由其对应的公钥B0加密后的信息。如图2所示数字签名流程图,信息源A生成一对密钥,公钥A0,私钥A1,并将该公钥A0向目标源B公开。信息源A使用该私钥A1对机密信息进行加密后再发送给目标端B。目标端B用自己保存的公钥A0,对加密后的信息进行解密,目标端B只能用其专用的公钥A0解密由其对应的私钥A1加密后的信息。为了实现RSA密钥对快速检索、过滤和判定,并且对现有素数判定算法进行优化,以提高密钥对生成速度,所以,本发明方案中,首要目标是,实现素数筛选的效率,为此,采用硬件实现合数过滤,是本发明方案的主要目的之一。如图3所示合数过滤流程图,采用硬件预处理算法,尽可能多地过滤合数。根据素数分布呈现先密后疏的特性,且无规律性,然而,在一定范围内,随机整数的素数概率变化非常小,可近似地认为符合准均匀分布。首先,素数定理:设P(x)为不超过x的全部素数的个数,当x无穷大时,则P(x)=x/lnx。由于长度为m的二进制共有2^m个,则长度为m的二进制素数p(2^m)=2^m/ln2^m,由此可知,素数的概率密度为q=p(2^m)/2^m=1/ln2^m,奇数的素数概率q为2/ln2^m。由奇数的素数概率密度公式可知,长度为256位时,q约为1/89,长度为512位时,q约为1/178。根据长度为m的二进制素数分布规律,计算得平均素性探测次数为1/q。如下表1中奇数中含有素数的几率。表1平均多少个Nbits的奇数中含有一个素数:位数(bits)256bits512bits1024bits2048bits平均探测次数89次178次355次710次根据上表数据可知,大素数的概率很小,所以尽可能多地排除合数显得格外重要,上述搜素范围限定在M个连续奇数范围内,各奇数和初始随机奇数的差为2j,分析发现,初始随机数和各个奇数之间存在一定关系:当初始整数xmod3=1,则(x+2)mod3=0,…,(x+2+3*i)mod3=0,则界限范围内值x+2和x+2+3*i的大奇数均为合数,可以预先淘汰。对初始随机数进行一轮小素数(3,5,7,…,1021,…)取模运算,即可将指定范围内所有能整除小素数的合数排除,从而避免对大量奇数的素性探测,大大地节省了运算开销时间。为此,设定预过滤算法如下:设定预过滤算法Bit_Finding:intT[N];//N为搜索范围,初始T[i]=0for(i=0;i<K;i++)//K为小素数表元素个数{ M=X%spl[i];//X随机奇数,首末位为1,spl[i]小素数 根据M,计算最小S,使(X+2*S)modspl[i]=0;(其中,S>=0)将T[S],T[S+spl[i]],T[S+2spl[i]],…,T[S+i*spl[i]]都置为1,(S+i*spl[i]<N);//合数标志位}。举例:当初始整数X为7,则Xmod3=1,由于3|X+2S,得出S=1,则3|X+2+3*(2*i),则界限范围内值X+2和X+2+3*(2*i)的均为合数,可以预先淘汰。分析算法发现,关键是求最小的S,其满足下列关系:(M+2S)modspl[i]=0方法1:S=(0-M)/2modspl[i]//模减、模除2方法2:当M为奇数,满足M+2S=spl[i],也即S=(spl[i]-M)/2;当M为偶数,满足M+2S=2spl[i],也即S=(2spl[i]-M)/2。根据上述预过滤算法,如图3所示,设Spl(N)表示小于N的小素数,a(X)长度为X的标识表,P(i)表示伪素数的偏移量(对应a(X)中被置为1的偏移量),首先将标识表(全部初始化成零)和小素数存储到存储器中,设计硬件加速素数生成器和RAM器件结合方式,存储标识位、小素数,通过编码特定状态机、控制逻辑实现过滤合数的目的,即可将指定范围内所有从而避免对大量奇数的素性探测,能整除小素数的合数排除,增大寻找大素数的概率,节省了运算开销时间。然后,为了缩短每次执行素性检测的时间,如图4所示本发明密钥对生成流程图,先采用费尔马小定理预检测素性,减少素性探测的次数。费尔马小定理(Fermat):若P为一个素数,且0<a<P,则有:a(P-1)modP=1。于是可以通过计算d=a(n-1)modn来判断整数n的素性。当d不等于1时,n不是素数;当d等于1时,n可能是素数。使用费尔马小定理筛选出的伪素数确实为素数的可能性,仅是“可能性相当大”,并不完全等同于素数。也就是说,有些合数也满足费尔马小定理条件。从上述可知,费尔马小定理只有一次模幂运算,而模幂运算可通过专门逻辑运算单元、算法IP核,或专用算法电路来完成,利用费尔马小定理进行素性探测是简单而快速的,但是测试结果有较大的误判率。为了缩短每次执行素性检测的时间,可先采用费尔马小定理预检测素性;为了保证素性探测的正确性,再将伪素数采用比较通用的Miller-Rabin来检测素性。这样既可以减少Miller-Rabin算法检测的次数,也可以保证素性探测的正确性。对Miller-Rabin算法的优化主要集中在这两步骤的运算上,对模幂优化主要有两种途径:优化模乘运算和减少模乘运算的次数。为了尽可能提升芯片运算速度,考虑到实现效率,可采用改进的蒙哥马利模乘算法和优化的模幂算法。如图4所示本发明密钥对生成流程图,优化的模乘算法采用改进的蒙哥马利模乘。改进的蒙哥马利算法:设N为模数,且N>1,R是与N互素的一个基,通常R=2t,t是N的位数;R–1和N满足0<R-1<N,0<N0′<R,RR-1-NN0′=1,即RR-1(modN)=1或NN0′(modR)=-1;对给定大整数T,且0≤T<R*N的蒙哥马利算法如下:1.m←(TmodR)N0′modR2.u←(T+m*N)/Rifu≥Nthenu-Nelsereturnu。上述算法从表面上看仅有两次大数乘法T*N0’和m*N,但由于模乘运算时T=A*B,0≤A<N,0≤B<N,所以算法共进行三次大数乘法运算。当A,B和N都为1024位的大整数时,大数相乘给硬件实现带来了困难,因此必须对大数进行分解。为了硬件实现,优化蒙哥马利模乘运算,其算法如下:MonPro(A,B,N)=A*B*2-t(modN)Step1:MontProMul(A,B,N);T=0;C2=0;fori=0toe-1doC1=0;forj=0toe-1doif(j=0)begin{C1,S1}=A[0]B[i]+C1+T[j];OP=S1*n0′(mod2w);{C2,S2}=N[0]*OP+S1;endelsebegin{C1,S1}=A[j]B[i]+C1+T[j];{C2,S2}=N[j]*OP+C2+S1;T[j-1]=S2;endendfor{C2,S2}=C2+C1+T_carry2;T[e-1]=S2;T_carry2=C2[0];endforStep2:ResultReturn(T,N)if(Cmp)beginforj=0toe-1doT[j]=T[j]-N[j];endforendelsebeginforj=0toe-1doT[j]=T[j]–0;endforend。一般来讲,速度的提高和操作的并行性有直接的关系,这意味着在蒙哥马利算法的改进时应该尽量减少数据相关性,通过增加控制逻辑和存储器来存储中间变量以及中间结果,使某个运算尽可能在同一个周期内完成。上述硬件实现方式,内部循环运算采用两级流水结构,同时并行执行乘加运算。这种运算结构,1024位的蒙哥马利运算,1000个时钟周期就可以完成,耗费的硬件资源很少,是一种相当不错的方法。下一步,为了解决指数计算的速度问题,如图4所示本发明密钥对生成流程图,采用的硬件模幂算法:BR算法和滑动窗口算法。几乎所有的指数运算都建立在二进制运算(binaryrepresentation)的基础上,BR算法的思想是在计算xe时,设e二进制化后的长度为n(n≈log2e)位,将e表示为一个二元整数:,(公式3.1)。根据扫描指数e的方向不同,模幂算法可以分为两种:一种为从左到右的扫描,一种为从右到左的扫描。算法如下所示:计算模幂从左到右的BR方法:Input:M,e,N;Output:C:=MemodN;1.ife[t-1]=1thenC:=M;elseC:=1goto3;2.fori=t-2downto02.1C:=C·C(modN);2.2ife[i]=1thenC:=C·M(modN);3.returnC;参数说明:1)n:模数,算法安全要求是素数,硬件计算要求必须是质数;2)e:加密指数;3)M:明文,0=<M<=N-1;4)C:密文,0=<C<=N-1;5)t:e的有效位数。计算模幂从右到左的BR方法:Input:M,e,N;Output:C:=MemodN;1.C:=1;P:=MmodN;2.fori=0tot-2beginifei=1thenC:=C*P(modN);P:=P*P(modN);end3.ifet-1=1thenC:=C*P(modN);4.returnC;算法复杂度:((t-1)×1.5)×模乘周期数。上述两种方法的执行时间不一样。前者采用串行计算,后者可采用并行计算,平均条件下,后者比前者快1.5倍。但在算法5.2循环体中,运算C:=C*P(modN)和P:=P*P(modN)需要由两个模乘器并行完成,所以它的速度比较快,但是由于硬件规模要大一些,功耗也会相对较高,所以,本发明采用模幂从右到左的BR方法。滑动窗口法:滑动窗先从低位到高位将指数e分解成0和非0窗口(Fi),它的长度为L(Fi),窗口数为p。设最大窗口长度为d,即d=max(L(Fi)),i=0,1,2,…,p-1,由于分解从低位到高位进行的,所以Fi的最低位一定是1,模幂的指数为e,那么计算Me的算法如下所示:滑动窗口法模幂算法:Input:M,e,N;output:C=Me(modN);计算并存储Mw(modN)forallw=3;5;7;…;2^d–1;分解e成0和非0窗口Fi长度L(Fi);1.fori=0;1;2;…;p-1C:=MF(p-1)(modN);2.fori=p-2downto02.1C:=C2^L(Fi)(modN);2.2if(Fi≠0)thenC:=C*MFi(modN);3.returnC;其中,2L(Fi)是每个滑动窗的权重,相当于2进制中的平方计算。滑动窗口法,将展开的二进制序列多个相邻的非零比特位处理成一个整体(非零窗口),并对应一次模乘迭代,而连续的零比特位组成的整体,叫零窗口。采用滑动窗口法能够减少模乘的次数,实际测试统计发现,基本上可以提升约1/5的效率。具体测试比对数据如下表2所示:表2二进制法和滑动窗口法的比较综上所述,从左到右的BR、从右到左的BR、滑动窗口法时间比例约为6:4:5,滑动窗口法对幂指数e进行重新排列处理,在安全上更占优势,从右到左的BR算法在速度上更占优势,在硬件实现逻辑上,同时兼容两种模幂算法的实现;因此,本发明采取从右到左的BR算法。如图4所示本发明密钥对生成流程图,描述了本发明方案中,根据预过滤算法,设Spl(N)表示小于N的小素数,a(X)长度为X的标识表,P(i)表示伪素数的偏移量(对应a(X)中被置为1的偏移量),首先将标识表(全部初始化成零)和小素数存储到存储器ROM和RAM中,设计一个硬件加速素数过滤模块和RAM器件结合方式,存储标识位、小素数,通过编码特定状态机、控制逻辑实现过滤合数的目的,从而增大寻找大素数的概率。采用预过滤合数算法,整除前k个小素数能过滤的奇数的概率为:1-[(1-1/3)(1-1/5)…(1-1/Pk)],通过计算,若取小于1000的前160多个小素数进行预处理,可以淘汰掉约83%大奇数。实际测试结果如下表3所示:表3实测合数淘汰率(N表示表长,Spl(N)表示小于N的小素数)位数a(256)a(512)a(1024)a(2048)a(4096)伪素数5398169306558淘汰率79.2969%80.8594%83.4961%85.0586%86.377%通过上述预过滤算法过滤,合数淘汰率高达80%左右,大大减少素性测试次数,从而提高素性测试的速度,加快密钥对生成的速度。总之,依照上述所述方法,一种用于非对称算法中密钥对快速生成方法,具体实现步骤如下:A.首先选取Nbits的随机数,随机数首末位置为1;B.将一定范围内的小素数组存放到存储器对应位置;C.将标识组的标识全部清零,然后存储到存储器;D.将随机数和小素数作为参数输入,硬件执行小整数除法取余或者取模运算;E.根据运算结果,硬件计算出对应该小素数的最小标识位,然后以该小素数为步长,将标识组的对应位分别置1;F.循环执行步骤D、E,直到遍历完所有小素数集为止;G.根据没有置位的标识位状态,计算出伪素数对应的偏移量并写入到存储器中;H.根据随机数和伪素数的偏移量,计算出对应的伪素数;I.依次选择其中伪素数,首先用费尔马小定理预检测是否是素数,如果不是素数,则继续执行该步骤;如果可能是素数,则执行下一步骤;J.然后使用Miller-Rabin算法检查是否是素数。如果不是素数,则跳回到步骤I;如果是素数,则输出大素数;K.根据判定好的两个大素数,计算公开模式n;L.根据计算得到的公开模式n,计算公钥e和私钥d。如图5所示密钥对快速生成系统的系统结构图,包括CPU、密码协处理器、素数生成器、存储器组成。其中,所述CPU,用于系统调度控制,包括管理存储器ROM和RAM;所述密码协处理器,用于模乘运算、模幂运算、模运算、整数运算、曲线运算、散列运算等加解密运算;所述存储器,包括ROM和RAM,用于存储程序和数据;所述素数生成器,用于过滤合数,采用硬件方式实现,本发明方案支持256位、512位、1024位、2048位、4096位模式的合数过滤,完成模余、计算并置位标识表,实现快速找出大素数。以上是对本发明的较佳实施例进行了具体说明,但本发明并不限于所述的实施例,熟悉本领域的技术人员在不违背本发明目的和精神的前提下还可以做出各种等同或者替换,这些等同或者替换均应包括在本发明的权利要求所限定的范围之内。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1