本發(fā)明涉及信息安全領域的密碼學技術,特別是用于密碼學中非對稱算法RSA密鑰對的快速生成,其可適用于安全芯片、支付終端、網(wǎng)絡安全等各個領域,潛在價值在于能夠快速生成指定范圍內的大素數(shù),利用尋得的大素數(shù)進行加解密、數(shù)字簽名驗簽等運算,提升系統(tǒng)傳輸?shù)陌踩院涂煽啃浴?br>
背景技術:
:信息產(chǎn)業(yè)是當今世界經(jīng)濟發(fā)展中最快和最富活力的新興產(chǎn)業(yè),隨著信息技術的快速發(fā)展和信息產(chǎn)品的快速普及應用,特別是金融銀行卡、居民健康卡、金融社??āSBKey、移動支付芯片、TCM芯片等安全芯片的問世,對于芯片的安全問題越來越重視,安全芯片成為廠商的準入門檻,安全問題正遭遇日益巨大的挑戰(zhàn),已成為信息產(chǎn)業(yè)發(fā)展最引人注目的一個問題。信息安全技術是專門針對信息安全問題的技術,它是通過技術手段解決信息安全問題所形成的技術,利用信息安全技術,可以有力地幫助信息安全問題的解決,密碼技術是信息安全技術的核心,主要由密碼算法和密碼協(xié)議組成,其中密碼算法是基礎。RSA算法是目前應用最普遍的非對稱算法,該算法是基于數(shù)論的公鑰密碼體質,RSA算法的公開密鑰和私有密鑰是一對大素數(shù),因此素數(shù)的生成算法在計算機領域占著舉足輕重的地位,更加高效地搜索大素數(shù)、素數(shù)篩選和進行素數(shù)判定一直是研究的熱點和難點。大素數(shù)密鑰對生成對RSA算法的安全性有著至關重要的影響,主要涉及大素數(shù)的尋找、過濾和判定,由于大素數(shù)分布具有稀疏性和不規(guī)律性,故無法用一種直接的方式計算出大素數(shù)。常用的素性檢測算法有費爾馬小定理、Solovay-Strassen、Lehman、Miller-Rabin等,由于素性判定涉及到開銷極大的模冪運算,所以大素數(shù)的產(chǎn)生速度非常慢,一直以來沒有比較好的辦法,成為制約RSA算法效率的瓶頸,因此,快速尋找與判定高效安全的大素數(shù)成為業(yè)界面臨的難題。目前傳統(tǒng)的方法有以下幾種:方法1:隨機搜索法:隨機產(chǎn)生一個大奇數(shù)進行測試,若是素數(shù),則結束;否則,重新隨機產(chǎn)生一個大奇數(shù)進行素性測試,重復進行搜索判定操作,直到找到一個大素數(shù)。缺點:由于素數(shù)分布不確定性,1024位以上的素數(shù)分布更無規(guī)律性,采用這種方法很不切實際。方法2:隨機遞增搜索法:隨機產(chǎn)生一個奇數(shù),以該奇數(shù)為起點,步長為2,依次進行素性測試,直到找到一個大素數(shù)為止。定理可證明,隨機遞增搜索法的次數(shù)大于隨機搜索法次數(shù)的一半,小于隨機搜索法的次數(shù)。優(yōu)點:相比隨機搜索法,在速度上有一定的提高。缺點:同方法1類似,沒有本質上區(qū)別。方法3:試除法:由于判斷大整數(shù)能否被小素數(shù)整除的時間遠低于各種概率測試法,故可首先產(chǎn)生一個隨機大奇數(shù),然后用一定范圍內的小素數(shù)(比如:小于100)進行篩選,如果不能被該小素數(shù)整除,則取下一個小素數(shù)繼續(xù)整除,遍歷完一定范圍所有小素數(shù),仍舊不能被小素數(shù)整除,則將該大奇數(shù)房緩沖區(qū)備用;如果能被該小素數(shù)整除,則取一組新的隨機大奇數(shù)進行試除;循環(huán)遍歷所有的小素數(shù)組,直到遍歷完為止,緊接著,對不能被所有小素數(shù)整除的大奇數(shù),采用概率素性測試算法進行判斷。優(yōu)點:從某種意義上說,這樣可以加快大素數(shù)的生成速度。缺點:在整除小素數(shù)的過程中,一旦該隨機大奇數(shù)數(shù)能被某小素數(shù)整除,就得重取新的隨機大整數(shù)進行試除,實際測試結果也不明顯。方法4:同余快速篩除法,根據(jù)同余定理,大素數(shù)分塊相加再除以小素數(shù),若能除盡則該大整數(shù)肯定能被除盡。舉例:判定一個整數(shù)能否被3整除,可以把十進制的每一位上的數(shù)字相加除以3,如果能除盡則該數(shù)能被3整除,這比直接用3除的要快;用偶數(shù)位數(shù)字之和減去奇數(shù)位數(shù)字之和得到的結果如果能被11整除,則該數(shù)能被11整除。優(yōu)點:被除數(shù)的位數(shù)指數(shù)級降低,減少了整除小素數(shù)的時間,從而加快過濾合數(shù)的速度。缺點:跟方法3類似,如果能被小素數(shù)整除的話,也存在重新取新的隨機數(shù)判定問題。方法5:Lucas定理設n屬于N,若存在一整數(shù)a,1<a<n且a^(n-1)=1modn,同時對n-1的每一個素因子p都滿足a^((n-1)/q)modn!=1,則n為素數(shù)。優(yōu)點:該方法是確定性素數(shù)判定方法。缺點:該方法需要知道n-1的全部素因子?,F(xiàn)有研究主要集中在素性檢測算法上,而對素數(shù)的快速搜索算法很少有所涉及,導致素數(shù)尋找時間開銷很大。目前,主流的Miller-Rabin算法的傳統(tǒng)實現(xiàn)方式,涉及到耗時的模冪算法和模乘算法,這樣會導致素性判定時間也會較長,并且絕大多數(shù)情況下,需要上百次、甚至上千次執(zhí)行素性檢測算法,所以導致加解密過程中生成大素數(shù)的時間會很長,導致系統(tǒng)性能極度下降。因此,如何快速尋找和判定一對大素數(shù)成為快速生成密鑰對的一條捷徑。技術實現(xiàn)要素:本發(fā)明的目的在于提供一種RSA密鑰對快速生成系統(tǒng)及方法,實現(xiàn)RSA密鑰對快速檢索、過濾和判定,并且對現(xiàn)有素數(shù)判定算法進行優(yōu)化,以提高密鑰對生成速度,解決現(xiàn)有加解密技術中RSA密鑰對生成時間過長的問題。為了解決上述技術問題,本發(fā)明所采用的技術方案是:一種用于非對稱算法中密鑰對快速生成系統(tǒng),包括CPU、密碼協(xié)處理器、素數(shù)生成器、存儲器,所述CPU,用于調度控制;所述密碼協(xié)處理器,用于模乘運算、模冪運算、模運算、整數(shù)運算、曲線運算、散列運算等加解密運算;所述存儲器,用于存儲程序和數(shù)據(jù);所述素數(shù)生成器,用于過濾合數(shù),采用硬件方式實現(xiàn),支持256位、512位、1024位、2048位、4096位模式的合數(shù)過濾,完成模余、計算并置位標識表。優(yōu)選地,過濾合數(shù)的方法,具體步驟如下:A.首先選取Nbits的隨機數(shù),隨機數(shù)首末位置為1;B.將一定范圍內的小素數(shù)組存放到存儲器對應位置;C.將標識組的標識全部清零,然后存儲到存儲器;D.將隨機數(shù)和小素數(shù)作為參數(shù)輸入,硬件執(zhí)行小整數(shù)除法取余或者取模運算;E.根據(jù)運算結果,硬件計算出對應該小素數(shù)的最小標識位,然后以該小素數(shù)為步長,將標識組的對應位分別置1;F.循環(huán)執(zhí)行步驟D、E,直到遍歷完所有小素數(shù)集為止;G.根據(jù)沒有置位的標識位狀態(tài),計算出偽素數(shù)對應的偏移量并寫入到存儲器中;H.根據(jù)隨機數(shù)和偽素數(shù)的偏移量,計算出對應的偽素數(shù);I.依次選擇其中偽素數(shù),首先用費爾馬小定理預檢測是否是素數(shù),如果不是素數(shù),則繼續(xù)執(zhí)行該步驟;如果可能是素數(shù),則執(zhí)行下一步驟;J.然后使用Miller-Rabin算法檢查是否是素數(shù),如果不是素數(shù),則跳回到步驟I;如果是素數(shù),則輸出大素數(shù)。優(yōu)選地,所述模冪運算,既支持二進制算法,又支持滑動窗口法,具體實現(xiàn)步驟如下:從右到左BR算法的乘法并行運算,減少運算時間;優(yōu)化冪指數(shù)e,減少模乘調用次數(shù);滑動窗口法對冪指數(shù)e處理,抵抗功耗分析。優(yōu)選地,模乘運算為改進的蒙哥馬利模乘運算,具體實現(xiàn)步驟如下:減少數(shù)據(jù)相關,存儲臨時變量,運算在單一結構完成;采用兩級流水線結構,加強流水執(zhí)行效率;采用雙乘法器方案,并行執(zhí)行運算;以32位為步進,支持任意長度位模式;蒙哥馬利模乘步驟中減法做功耗平衡處理,防止攻擊分析。一種用于非對稱算法中密鑰對快速生成方法,具體實現(xiàn)步驟如下:A1、建立長度為N全0列表T[N];A2、生成一組隨機數(shù)X;A3、取該組隨機數(shù)X,計算最小S,對小素數(shù)spl[i]進行小整數(shù)除或模余運算,使(X+2*S)modspl[i]=0;(其中,S>=0);A4、若能整除盡,則S+i*spl[i]<N的所有位標為1,表示合數(shù);否則,標識位仍為0,表示偽素數(shù);A5、對偽素數(shù)采用費爾馬小定理算法進行素數(shù)檢測,如果是合數(shù),則返回步驟A4重取下一個偽素數(shù)進行檢測;如果可能是素數(shù),則繼續(xù)執(zhí)行下述步驟;A6、上述步驟偽素數(shù)再進行Miller-Rabin素性判定,若判定為素數(shù),則繼續(xù)執(zhí)行后續(xù)步驟A7;否則,則返回步驟A5,繼續(xù)取偽素數(shù)進行判定;A7、判定好兩個大素數(shù)后,進行計算私鑰d和公鑰e。優(yōu)選地,隨機數(shù),首末位均置為1,所涉及步長為大于0的偶數(shù),模除或小整數(shù)除方法過濾合數(shù),硬件實現(xiàn)進行合數(shù)過濾和置位標識位。本發(fā)明技術方案采用高效的硬件素數(shù)過濾法,費爾馬小定理,改進的并行蒙哥馬利模乘實現(xiàn),以及并行實現(xiàn)模冪運算,極大地縮減了尋找大素數(shù)生成時間,減少了密鑰對的生成時間,顯著地提高了加解密運算的速度,最終提升了芯片處理數(shù)據(jù)的速度。附圖說明下面結合附圖和具體實施方式對本發(fā)明作進一步說明。圖1為公鑰加解密的示意圖。圖2為數(shù)字簽名的示意圖。圖3為本發(fā)明合數(shù)過濾流程圖。圖4為本發(fā)明密鑰對生成的流程圖。圖5為本發(fā)明的系統(tǒng)結構示意圖。具體實施方式為了便于本領域技術人員的理解,下面結合附圖對本發(fā)明做進一步描述,但不能用來限制本發(fā)明的保護范圍。首先,RSA算法是一種非對稱密碼算法,所謂非對稱,就是指該算法需要一對密鑰,使用其中一個加密,則需要用另一個才能解密。RSA的算法涉及三個參數(shù),假設為n、e1、e2。其中,n是兩個大質數(shù)p、q的積,n的二進制表示時所占用的位數(shù),就是所謂的密鑰長度。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算法所示的公鑰加解密流程和數(shù)字簽名流程。如圖1所示公鑰加解密流程圖,目標端B生成一對密鑰,公鑰B0,私鑰B1,并將該公鑰B0向信息源A公開。得到公鑰的信息源A使用該公鑰B0對機密信息進行加密后再發(fā)送給目標端B。目標端B用自己保存的私鑰B1,對加密后的信息進行解密,目標端B只能用其專用的私鑰B1解密由其對應的公鑰B0加密后的信息。如圖2所示數(shù)字簽名流程圖,信息源A生成一對密鑰,公鑰A0,私鑰A1,并將該公鑰A0向目標源B公開。信息源A使用該私鑰A1對機密信息進行加密后再發(fā)送給目標端B。目標端B用自己保存的公鑰A0,對加密后的信息進行解密,目標端B只能用其專用的公鑰A0解密由其對應的私鑰A1加密后的信息。為了實現(xiàn)RSA密鑰對快速檢索、過濾和判定,并且對現(xiàn)有素數(shù)判定算法進行優(yōu)化,以提高密鑰對生成速度,所以,本發(fā)明方案中,首要目標是,實現(xiàn)素數(shù)篩選的效率,為此,采用硬件實現(xiàn)合數(shù)過濾,是本發(fā)明方案的主要目的之一。如圖3所示合數(shù)過濾流程圖,采用硬件預處理算法,盡可能多地過濾合數(shù)。根據(jù)素數(shù)分布呈現(xiàn)先密后疏的特性,且無規(guī)律性,然而,在一定范圍內,隨機整數(shù)的素數(shù)概率變化非常小,可近似地認為符合準均勻分布。首先,素數(shù)定理:設P(x)為不超過x的全部素數(shù)的個數(shù),當x無窮大時,則P(x)=x/lnx。由于長度為m的二進制共有2^m個,則長度為m的二進制素數(shù)p(2^m)=2^m/ln2^m,由此可知,素數(shù)的概率密度為q=p(2^m)/2^m=1/ln2^m,奇數(shù)的素數(shù)概率q為2/ln2^m。由奇數(shù)的素數(shù)概率密度公式可知,長度為256位時,q約為1/89,長度為512位時,q約為1/178。根據(jù)長度為m的二進制素數(shù)分布規(guī)律,計算得平均素性探測次數(shù)為1/q。如下表1中奇數(shù)中含有素數(shù)的幾率。表1平均多少個Nbits的奇數(shù)中含有一個素數(shù):位數(shù)(bits)256bits512bits1024bits2048bits平均探測次數(shù)89次178次355次710次根據(jù)上表數(shù)據(jù)可知,大素數(shù)的概率很小,所以盡可能多地排除合數(shù)顯得格外重要,上述搜素范圍限定在M個連續(xù)奇數(shù)范圍內,各奇數(shù)和初始隨機奇數(shù)的差為2j,分析發(fā)現(xiàn),初始隨機數(shù)和各個奇數(shù)之間存在一定關系:當初始整數(shù)xmod3=1,則(x+2)mod3=0,…,(x+2+3*i)mod3=0,則界限范圍內值x+2和x+2+3*i的大奇數(shù)均為合數(shù),可以預先淘汰。對初始隨機數(shù)進行一輪小素數(shù)(3,5,7,…,1021,…)取模運算,即可將指定范圍內所有能整除小素數(shù)的合數(shù)排除,從而避免對大量奇數(shù)的素性探測,大大地節(jié)省了運算開銷時間。為此,設定預過濾算法如下:設定預過濾算法Bit_Finding:intT[N];//N為搜索范圍,初始T[i]=0for(i=0;i<K;i++)//K為小素數(shù)表元素個數(shù){ M=X%spl[i];//X隨機奇數(shù),首末位為1,spl[i]小素數(shù) 根據(jù)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);//合數(shù)標志位}。舉例:當初始整數(shù)X為7,則Xmod3=1,由于3|X+2S,得出S=1,則3|X+2+3*(2*i),則界限范圍內值X+2和X+2+3*(2*i)的均為合數(shù),可以預先淘汰。分析算法發(fā)現(xiàn),關鍵是求最小的S,其滿足下列關系:(M+2S)modspl[i]=0方法1:S=(0-M)/2modspl[i]//模減、模除2方法2:當M為奇數(shù),滿足M+2S=spl[i],也即S=(spl[i]-M)/2;當M為偶數(shù),滿足M+2S=2spl[i],也即S=(2spl[i]-M)/2。根據(jù)上述預過濾算法,如圖3所示,設Spl(N)表示小于N的小素數(shù),a(X)長度為X的標識表,P(i)表示偽素數(shù)的偏移量(對應a(X)中被置為1的偏移量),首先將標識表(全部初始化成零)和小素數(shù)存儲到存儲器中,設計硬件加速素數(shù)生成器和RAM器件結合方式,存儲標識位、小素數(shù),通過編碼特定狀態(tài)機、控制邏輯實現(xiàn)過濾合數(shù)的目的,即可將指定范圍內所有從而避免對大量奇數(shù)的素性探測,能整除小素數(shù)的合數(shù)排除,增大尋找大素數(shù)的概率,節(jié)省了運算開銷時間。然后,為了縮短每次執(zhí)行素性檢測的時間,如圖4所示本發(fā)明密鑰對生成流程圖,先采用費爾馬小定理預檢測素性,減少素性探測的次數(shù)。費爾馬小定理(Fermat):若P為一個素數(shù),且0<a<P,則有:a(P-1)modP=1。于是可以通過計算d=a(n-1)modn來判斷整數(shù)n的素性。當d不等于1時,n不是素數(shù);當d等于1時,n可能是素數(shù)。使用費爾馬小定理篩選出的偽素數(shù)確實為素數(shù)的可能性,僅是“可能性相當大”,并不完全等同于素數(shù)。也就是說,有些合數(shù)也滿足費爾馬小定理條件。從上述可知,費爾馬小定理只有一次模冪運算,而模冪運算可通過專門邏輯運算單元、算法IP核,或專用算法電路來完成,利用費爾馬小定理進行素性探測是簡單而快速的,但是測試結果有較大的誤判率。為了縮短每次執(zhí)行素性檢測的時間,可先采用費爾馬小定理預檢測素性;為了保證素性探測的正確性,再將偽素數(shù)采用比較通用的Miller-Rabin來檢測素性。這樣既可以減少Miller-Rabin算法檢測的次數(shù),也可以保證素性探測的正確性。對Miller-Rabin算法的優(yōu)化主要集中在這兩步驟的運算上,對模冪優(yōu)化主要有兩種途徑:優(yōu)化模乘運算和減少模乘運算的次數(shù)。為了盡可能提升芯片運算速度,考慮到實現(xiàn)效率,可采用改進的蒙哥馬利模乘算法和優(yōu)化的模冪算法。如圖4所示本發(fā)明密鑰對生成流程圖,優(yōu)化的模乘算法采用改進的蒙哥馬利模乘。改進的蒙哥馬利算法:設N為模數(shù),且N>1,R是與N互素的一個基,通常R=2t,t是N的位數(shù);R–1和N滿足0<R-1<N,0<N0′<R,RR-1-NN0′=1,即RR-1(modN)=1或NN0′(modR)=-1;對給定大整數(shù)T,且0≤T<R*N的蒙哥馬利算法如下:1.m←(TmodR)N0′modR2.u←(T+m*N)/Rifu≥Nthenu-Nelsereturnu。上述算法從表面上看僅有兩次大數(shù)乘法T*N0’和m*N,但由于模乘運算時T=A*B,0≤A<N,0≤B<N,所以算法共進行三次大數(shù)乘法運算。當A,B和N都為1024位的大整數(shù)時,大數(shù)相乘給硬件實現(xiàn)帶來了困難,因此必須對大數(shù)進行分解。為了硬件實現(xiàn),優(yōu)化蒙哥馬利模乘運算,其算法如下: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。一般來講,速度的提高和操作的并行性有直接的關系,這意味著在蒙哥馬利算法的改進時應該盡量減少數(shù)據(jù)相關性,通過增加控制邏輯和存儲器來存儲中間變量以及中間結果,使某個運算盡可能在同一個周期內完成。上述硬件實現(xiàn)方式,內部循環(huán)運算采用兩級流水結構,同時并行執(zhí)行乘加運算。這種運算結構,1024位的蒙哥馬利運算,1000個時鐘周期就可以完成,耗費的硬件資源很少,是一種相當不錯的方法。下一步,為了解決指數(shù)計算的速度問題,如圖4所示本發(fā)明密鑰對生成流程圖,采用的硬件模冪算法:BR算法和滑動窗口算法。幾乎所有的指數(shù)運算都建立在二進制運算(binaryrepresentation)的基礎上,BR算法的思想是在計算xe時,設e二進制化后的長度為n(n≈log2e)位,將e表示為一個二元整數(shù):,(公式3.1)。根據(jù)掃描指數(shù)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;參數(shù)說明:1)n:模數(shù),算法安全要求是素數(shù),硬件計算要求必須是質數(shù);2)e:加密指數(shù);3)M:明文,0=<M<=N-1;4)C:密文,0=<C<=N-1;5)t:e的有效位數(shù)。計算模冪從右到左的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)×模乘周期數(shù)。上述兩種方法的執(zhí)行時間不一樣。前者采用串行計算,后者可采用并行計算,平均條件下,后者比前者快1.5倍。但在算法5.2循環(huán)體中,運算C:=C*P(modN)和P:=P*P(modN)需要由兩個模乘器并行完成,所以它的速度比較快,但是由于硬件規(guī)模要大一些,功耗也會相對較高,所以,本發(fā)明采用模冪從右到左的BR方法?;瑒哟翱诜ǎ夯瑒哟跋葟牡臀坏礁呶粚⒅笖?shù)e分解成0和非0窗口(Fi),它的長度為L(Fi),窗口數(shù)為p。設最大窗口長度為d,即d=max(L(Fi)),i=0,1,2,…,p-1,由于分解從低位到高位進行的,所以Fi的最低位一定是1,模冪的指數(shù)為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進制中的平方計算?;瑒哟翱诜ǎ瑢⒄归_的二進制序列多個相鄰的非零比特位處理成一個整體(非零窗口),并對應一次模乘迭代,而連續(xù)的零比特位組成的整體,叫零窗口。采用滑動窗口法能夠減少模乘的次數(shù),實際測試統(tǒng)計發(fā)現(xiàn),基本上可以提升約1/5的效率。具體測試比對數(shù)據(jù)如下表2所示:表2二進制法和滑動窗口法的比較綜上所述,從左到右的BR、從右到左的BR、滑動窗口法時間比例約為6:4:5,滑動窗口法對冪指數(shù)e進行重新排列處理,在安全上更占優(yōu)勢,從右到左的BR算法在速度上更占優(yōu)勢,在硬件實現(xiàn)邏輯上,同時兼容兩種模冪算法的實現(xiàn);因此,本發(fā)明采取從右到左的BR算法。如圖4所示本發(fā)明密鑰對生成流程圖,描述了本發(fā)明方案中,根據(jù)預過濾算法,設Spl(N)表示小于N的小素數(shù),a(X)長度為X的標識表,P(i)表示偽素數(shù)的偏移量(對應a(X)中被置為1的偏移量),首先將標識表(全部初始化成零)和小素數(shù)存儲到存儲器ROM和RAM中,設計一個硬件加速素數(shù)過濾模塊和RAM器件結合方式,存儲標識位、小素數(shù),通過編碼特定狀態(tài)機、控制邏輯實現(xiàn)過濾合數(shù)的目的,從而增大尋找大素數(shù)的概率。采用預過濾合數(shù)算法,整除前k個小素數(shù)能過濾的奇數(shù)的概率為:1-[(1-1/3)(1-1/5)…(1-1/Pk)],通過計算,若取小于1000的前160多個小素數(shù)進行預處理,可以淘汰掉約83%大奇數(shù)。實際測試結果如下表3所示:表3實測合數(shù)淘汰率(N表示表長,Spl(N)表示小于N的小素數(shù))位數(shù)a(256)a(512)a(1024)a(2048)a(4096)偽素數(shù)5398169306558淘汰率79.2969%80.8594%83.4961%85.0586%86.377%通過上述預過濾算法過濾,合數(shù)淘汰率高達80%左右,大大減少素性測試次數(shù),從而提高素性測試的速度,加快密鑰對生成的速度??傊勒丈鲜鏊龇椒?,一種用于非對稱算法中密鑰對快速生成方法,具體實現(xiàn)步驟如下:A.首先選取Nbits的隨機數(shù),隨機數(shù)首末位置為1;B.將一定范圍內的小素數(shù)組存放到存儲器對應位置;C.將標識組的標識全部清零,然后存儲到存儲器;D.將隨機數(shù)和小素數(shù)作為參數(shù)輸入,硬件執(zhí)行小整數(shù)除法取余或者取模運算;E.根據(jù)運算結果,硬件計算出對應該小素數(shù)的最小標識位,然后以該小素數(shù)為步長,將標識組的對應位分別置1;F.循環(huán)執(zhí)行步驟D、E,直到遍歷完所有小素數(shù)集為止;G.根據(jù)沒有置位的標識位狀態(tài),計算出偽素數(shù)對應的偏移量并寫入到存儲器中;H.根據(jù)隨機數(shù)和偽素數(shù)的偏移量,計算出對應的偽素數(shù);I.依次選擇其中偽素數(shù),首先用費爾馬小定理預檢測是否是素數(shù),如果不是素數(shù),則繼續(xù)執(zhí)行該步驟;如果可能是素數(shù),則執(zhí)行下一步驟;J.然后使用Miller-Rabin算法檢查是否是素數(shù)。如果不是素數(shù),則跳回到步驟I;如果是素數(shù),則輸出大素數(shù);K.根據(jù)判定好的兩個大素數(shù),計算公開模式n;L.根據(jù)計算得到的公開模式n,計算公鑰e和私鑰d。如圖5所示密鑰對快速生成系統(tǒng)的系統(tǒng)結構圖,包括CPU、密碼協(xié)處理器、素數(shù)生成器、存儲器組成。其中,所述CPU,用于系統(tǒng)調度控制,包括管理存儲器ROM和RAM;所述密碼協(xié)處理器,用于模乘運算、模冪運算、模運算、整數(shù)運算、曲線運算、散列運算等加解密運算;所述存儲器,包括ROM和RAM,用于存儲程序和數(shù)據(jù);所述素數(shù)生成器,用于過濾合數(shù),采用硬件方式實現(xiàn),本發(fā)明方案支持256位、512位、1024位、2048位、4096位模式的合數(shù)過濾,完成模余、計算并置位標識表,實現(xiàn)快速找出大素數(shù)。以上是對本發(fā)明的較佳實施例進行了具體說明,但本發(fā)明并不限于所述的實施例,熟悉本領域的技術人員在不違背本發(fā)明目的和精神的前提下還可以做出各種等同或者替換,這些等同或者替換均應包括在本發(fā)明的權利要求所限定的范圍之內。當前第1頁1 2 3