本發(fā)明涉及數(shù)據(jù)加密的技術(shù)領(lǐng)域,具體涉及一種基于蒙哥馬利模乘的數(shù)據(jù)處理方法、模乘運(yùn)算方法及裝置。
背景技術(shù):
RSA、ECC和SM2是目前廣泛使用的公鑰密碼算法。其中,RSA算法中的模冪運(yùn)算、ECC和SM2算法中的點乘運(yùn)算,都會大量使用到大數(shù)模乘??梢哉f,大數(shù)模乘是上述公鑰加密算法中的核心運(yùn)算,直接決定了上述公鑰加密算法的性能。
蒙哥馬利模乘是目前主流的大數(shù)模乘實現(xiàn)方法。相對于對輸入數(shù)據(jù)直接進(jìn)行模乘運(yùn)算,蒙哥馬利模乘不僅可以節(jié)省一倍的存儲空間,還可以避免除法運(yùn)算,通過移位的方式達(dá)到取模的效果,有效提高數(shù)據(jù)的處理效率。
然而,目前在實現(xiàn)任意長度的蒙哥馬利模乘運(yùn)算時,計算量較大,且計算效率較低。
技術(shù)實現(xiàn)要素:
本發(fā)明解決的技術(shù)問題是如何降低蒙哥馬利模乘器運(yùn)算的計算量,提高計算效率。
為解決上述技術(shù)問題,本發(fā)明實施例提供一種基于蒙哥馬利模乘的數(shù)據(jù)處理方法,所述方法包括:
當(dāng)接收到模數(shù)N時,計算得到第一值s2,以根據(jù)所述第一值s2,調(diào)用蒙哥馬利模乘器,對待處理的數(shù)據(jù)執(zhí)行模乘運(yùn)算;采用如下步驟計算所述第一值s2:
將所述模數(shù)N左移n-c位,獲得N1;計算R對N1取模后的值,得到計算結(jié)果s1,并將所述s1寫入至第一存儲器,其中,R=2n,w為所述蒙哥馬利模乘器的位長,k為滿足k*w≥c的最小整數(shù),n=k*w,c為所述模數(shù)N的位長,k及N均為正整數(shù);
對所述第一存儲器的值s1執(zhí)行一次模加運(yùn)算后,得到計算結(jié)果s21,將所述計算結(jié)果s21作為第二存儲器的初始值寫入至所述第二存儲器;調(diào)用所述蒙哥馬利模乘器對所述第二存儲器的初始值s21執(zhí)行n-1次模乘運(yùn)算,并將第n-1次模乘運(yùn)算的結(jié)果R2mod N作為所述第一值s2輸出。
本發(fā)明實施例還提供了一種模乘運(yùn)算方法,所述方法包括:
按照上述的基于蒙哥馬利模乘的數(shù)據(jù)處理方法計算獲得第一值s2;
當(dāng)接收到待處理的數(shù)據(jù)A及B時,根據(jù)所述第一值s2,對所述待處理的數(shù)據(jù)A與R2執(zhí)行蒙哥馬利模乘運(yùn)算,獲得運(yùn)算結(jié)果y1,以及計算所述待處理的數(shù)據(jù)B與R2執(zhí)行蒙哥馬利模乘運(yùn)算,獲得運(yùn)算結(jié)果y2;
對運(yùn)算結(jié)果y1和y2執(zhí)行蒙哥馬利模乘運(yùn)算,獲得運(yùn)算結(jié)果y3;
對運(yùn)算結(jié)果y3與數(shù)值1執(zhí)行蒙哥馬利模乘運(yùn)算,獲得所述待處理的數(shù)據(jù)A及B的模乘運(yùn)算結(jié)果y。
本發(fā)明實施例還提供了一種基于蒙哥馬利模乘的數(shù)據(jù)處理裝置,所述裝置包括:
第一計算單元,適于當(dāng)接收到模數(shù)N時,計算得到第一值s2,以根據(jù)所述第一值s2,調(diào)用蒙哥馬利模乘器,對待處理的數(shù)據(jù)執(zhí)行模乘運(yùn)算;所述第一計算單元包括:
第一計算子單元,適于將所述模數(shù)N左移n-c位,獲得N1;計算R對N1取模后的值,得到計算結(jié)果s1,并將所述s1寫入至第一存儲器,其中,R=2n,w為所述蒙哥馬利模乘器的位長,k為滿足k*w≥c的最小整數(shù),n=k*w,c為所述模數(shù)N的位長,k及N均為正整數(shù);
第二計算子單元,適于對所述第一存儲器的值s1執(zhí)行一次模加運(yùn)算后,得到計算結(jié)果s21,將所述計算結(jié)果s21作為第二存儲器的初始值寫入至所述第二存儲器;調(diào)用所述蒙哥馬利模乘器對所述第二存儲器的初始值s21執(zhí)行n-1次模乘運(yùn)算,并將第n-1次模乘運(yùn)算的結(jié)果R2mod N作為所述第一值s2輸出。
本發(fā)明實施例還提供了一種模乘運(yùn)算裝置,所述裝置包括:
上述的基于蒙哥馬利模乘的數(shù)據(jù)處理裝置,通過所述數(shù)據(jù)處理裝置獲得 所述第一值s2;
第二計算單元,適于當(dāng)接收到待處理的數(shù)據(jù)A及B時,根據(jù)所述第一值s2,對所述待處理的數(shù)據(jù)A與R2執(zhí)行蒙哥馬利模乘運(yùn)算,獲得運(yùn)算結(jié)果y1,以及計算所述待處理的數(shù)據(jù)B與R2執(zhí)行蒙哥馬利模乘運(yùn)算,獲得運(yùn)算結(jié)果y2;
第三計算單元,適于對運(yùn)算結(jié)果y1和y2執(zhí)行蒙哥馬利模乘運(yùn)算,獲得運(yùn)算結(jié)果y3;
第四計算單元,適于對運(yùn)算結(jié)果y3與數(shù)值1執(zhí)行蒙哥馬利模乘運(yùn)算,獲得所述待處理的數(shù)據(jù)A及B的模乘運(yùn)算結(jié)果y。
與現(xiàn)有技術(shù)相比,本發(fā)明實施例的技術(shù)方案具有以下有益效果:
在基于蒙哥馬利模乘計算中間值s1時,通過將位長為c的模數(shù)N左移n-c位,可以獲得位長為n的N1,僅需要n-c次模加運(yùn)算即可獲得位長為n的s1的值,因此相對于現(xiàn)有技術(shù)中的方案,在獲得s1的值的過程中,可以有效減少計算量,提高計算效率。并且由于c為任意值,因此,應(yīng)用所述方法可以實現(xiàn)任意長度的蒙哥馬利模乘運(yùn)算。
附圖說明
圖1是本發(fā)明實施中一種模乘運(yùn)算方法的流程圖;
圖2是本發(fā)明實施例中一種基于蒙哥馬利模乘的數(shù)據(jù)處理方法的流程圖;
圖3是本發(fā)明實施中一種基于蒙哥馬利模乘的數(shù)據(jù)處理裝置的結(jié)構(gòu)示意圖;
圖4是本發(fā)明實施中一種模乘運(yùn)算裝置的結(jié)構(gòu)示意圖。
具體實施方式
目前,在基于蒙哥馬利模乘計算s1時,通常令s1=0xFF…F-N+1,其中,0xFF…F的位長為n,n為機(jī)器字長的整數(shù)倍,N為模數(shù),進(jìn)而可以通過0xFF…F與模數(shù)N之間的模減運(yùn)算來獲得s1的值,此時s1的位長為n。因此,上述方法僅能實現(xiàn)機(jī)器字長整數(shù)倍的蒙哥馬利模乘運(yùn)算。
并且,由于硬件實現(xiàn)模減運(yùn)算時,如果兩數(shù)相減的結(jié)果超過硬件的位長 即溢出,則需要對兩數(shù)相減的結(jié)果再與模數(shù)N相減,直至與模數(shù)相減后的結(jié)果沒有溢出,并將此時與模數(shù)相減后的結(jié)果作為兩數(shù)模減運(yùn)算的結(jié)果,因此,在基于蒙哥馬利模乘計算s1時,通常需要進(jìn)行2n-c次減法運(yùn)算,才能獲得s1的值,導(dǎo)致模乘運(yùn)算的計算量仍然較大,計算效率較低。
針對上述問題,本發(fā)明實施例提供了一種基于蒙哥馬利模乘的數(shù)據(jù)處理方法,所述方法在基于蒙哥馬利模乘計算s1時,通過將位長為c的模數(shù)N左移n-c位,可以獲得位長為n的N1,進(jìn)而可以通過n-c次模加運(yùn)算來獲得位長為n的s1的值。相對于現(xiàn)有技術(shù)中的方案,在獲得s1的值的過程中,可以有效減少計算量,提高計算效率。并且由于c為任意值,因此,應(yīng)用所述方法可以幫助實現(xiàn)任意長度的蒙哥馬利模乘運(yùn)算。
為使本發(fā)明的上述目的、特征和有益效果能夠更為明顯易懂,下面結(jié)合附圖對本發(fā)明的具體實施例做詳細(xì)的說明。
如圖1所示,本發(fā)明實施例提供了一種模乘運(yùn)算方法,所述方法可以包括如下步驟:
步驟11,計算第一值s2。
在具體實施中,所述第一值s2的值為R2mod N,位長為c。其中,R=2n,w通常為機(jī)器字長的蒙哥馬利模乘器的位長,例如,w的值通常為8bit,16bit或32bit等。k為滿足k*w≥c的最小整數(shù),n=k*w,c為所述模數(shù)N的位長,c、k及N均為正整數(shù)。
需要說明的是,在接收到模數(shù)N的值時,即可計算第一值s2。這樣,在接收到待處理的數(shù)據(jù)時,即可根據(jù)所述第一值s2將待處理的數(shù)據(jù)由實數(shù)域轉(zhuǎn)換為蒙哥馬利域,以對待處理的數(shù)據(jù)進(jìn)行模乘運(yùn)算。
步驟12,當(dāng)接收到待處理的數(shù)據(jù)A及B時,根據(jù)所述第一值s2,對所述待處理的數(shù)據(jù)A與R2執(zhí)行蒙哥馬利模乘運(yùn)算,獲得運(yùn)算結(jié)果y1,以及計算所述待處理的數(shù)據(jù)B與R2執(zhí)行蒙哥馬利模乘運(yùn)算,獲得運(yùn)算結(jié)果y2。
在具體實施中,所述待處理的數(shù)據(jù)A及B的位長為任意值。當(dāng)接收到待處理的數(shù)據(jù)A時,對所述待處理的數(shù)據(jù)A與R2執(zhí)行蒙哥馬利模乘運(yùn)算,即計算M(A,R2,R,N),獲得運(yùn)算結(jié)果y1=A*R2*R-1mod N=A*R mod N。當(dāng) 接收到待處理的數(shù)據(jù)B時,對所述待處理的數(shù)據(jù)B與R2執(zhí)行蒙哥馬利模乘運(yùn)算,即計算M(B,R2,R,N),獲得運(yùn)算結(jié)果y2=B*R2*R-1mod N=B*R mod N。
步驟13,對運(yùn)算結(jié)果y1和y2執(zhí)行蒙哥馬利模乘運(yùn)算,獲得運(yùn)算結(jié)果y3。
在具體實施中,對運(yùn)算結(jié)果y1和y2執(zhí)行蒙哥馬利模乘運(yùn)算,即計算M(A*R,B*R,R,N),獲得運(yùn)算結(jié)果y3=(A*R)*(B*R)*R-1mod N=A*B*R mod N。
步驟14,對運(yùn)算結(jié)果y3與數(shù)值1執(zhí)行蒙哥馬利模乘運(yùn)算,獲得所述待處理的數(shù)據(jù)A及B的模乘運(yùn)算結(jié)果y。
在具體實施中,對運(yùn)算結(jié)果y3執(zhí)行蒙哥馬利模乘運(yùn)算,即計算M(A*B*R,1,R,N)mod N,獲得運(yùn)算結(jié)果y=A*B*R*1*R-1mod N=A*B mod N,且y的位長為c。
通常情況下,當(dāng)所述第一值s2的位長為c時,調(diào)用蒙哥馬利模乘器可以獲得位長為c的運(yùn)算結(jié)果。而當(dāng)所述第一值s2的位長為n時,c≠n,調(diào)用蒙哥馬利模乘器仍然可以獲得位長為c的運(yùn)算結(jié)果。以下結(jié)合對蒙哥馬利模乘運(yùn)算的具體過程對運(yùn)算結(jié)果的位長證明如下:
以蒙哥馬利模乘器的輸入數(shù)據(jù)為A及B為例,A及B的位長為k*w,w為所述蒙哥馬利模乘器的位長。模數(shù)N的低w位為N[0],N[0]*N[0]’mod r=1,r=2w。令m=r-N[0]’,C’的初始值為0。
所述蒙哥馬利模乘器每次對輸入數(shù)據(jù)A及B的w位進(jìn)行處理。所述蒙哥馬利模乘器對輸入數(shù)據(jù)A及B的第i個w位進(jìn)行處理時,i為整數(shù),依次執(zhí)行以下步驟,直至獲得對輸入數(shù)據(jù)A及B的第i個w位進(jìn)行處理的運(yùn)算結(jié)果C’[i]:q=(C’[0]+A[i]*B[0])*m mod r;C’[i]=(C’[i-1]+A[i]*B+q*N)/r;當(dāng)C’[i]≥N時,將C’[i]-N的結(jié)果作為所述C’[i]的值。當(dāng)i在0至k-1內(nèi)依次取值時,可以獲得C’[k-1]。
因此,當(dāng)A<N,B<N或者A>N,B>N時,均可以得出C’[k-1]-N<(r*N+r*N)/r–N=2N-N=N,進(jìn)而得到C’[k-1]<2N,由此可以得出,所述蒙哥馬利模乘器每次對輸入數(shù)據(jù)A及B進(jìn)行模乘運(yùn)算的處理結(jié)果位長小于c。
在具體實施中,可以采用多種方法計算第一值s2,以根據(jù)所述第一值s2,調(diào)用蒙哥馬利模乘器,對待處理的數(shù)據(jù)執(zhí)行模乘運(yùn)算。為了降低計算量,在本發(fā)明的一實施例中,可以采用如圖2所示的方法計算第一值s2。具體地,所述方法可以包括如下步驟:
步驟21,將所述模數(shù)N左移n-c位,獲得N1;計算R對N1取模后的值,得到計算結(jié)果s1,并將所述s1寫入至第一存儲器。
也就是說,當(dāng)獲得n以及模數(shù)N的位長c后,根據(jù)所述n及c的值,將所述模數(shù)N左移n-c位,即N<<<n-c,獲得N1。此時N的位長為n位。再計算R mod N1,獲得位長為n的s1。
步驟22,對所述第一存儲器的值s1執(zhí)行一次模加運(yùn)算,獲得計算結(jié)果s21,并將所述計算結(jié)果s21作為第二存儲器的初始值寫入至所述第二存儲器;調(diào)用所述蒙哥馬利模乘器對所述第二存儲器的初始值執(zhí)行n-1次模乘運(yùn)算,并將第n-1次模乘運(yùn)算的結(jié)果R2mod N作為所述第一值s2輸出。
在具體實施中,令s21=(s1+s1)mod N,并將s21作為第二存儲器的初始值。
調(diào)用蒙哥馬利模乘器對s21執(zhí)行1次模乘運(yùn)算,獲得計算結(jié)果s22=M(s21,s21,R,N);
調(diào)用蒙哥馬利模乘器對s22執(zhí)行1次模乘運(yùn)算,獲得計算結(jié)果s23=M(s22,s22,R,N);
調(diào)用蒙哥馬利模乘器對s23執(zhí)行1次模乘運(yùn)算,獲得計算結(jié)果s24=M(s23,s23,R,N);
……
依此類推,直至執(zhí)行蒙哥馬利模乘運(yùn)算的次數(shù)為n-1次,獲得計算結(jié)果s2=s2n=M(s2n-1,s2n-1,R,N)。=R2mod N,即獲得第一值。此時可以將所述第一值s2輸出。
由于所述s1的位長為n,因此s2的位長也為n。
由上述內(nèi)容可知,采用圖2中所示實施例的方法計算s1時,通過將位長 為c的模數(shù)N左移n-c位,可以獲得位長為n的N1,進(jìn)而可以通過n-c次模加運(yùn)算能獲得位長為n的s1的值,而非執(zhí)行2n-c次模加運(yùn)算才能獲得s1的值,因此可以有效減少計算量,尤其在n>c時,效果更加明顯。并且,由于c為任意值,因此應(yīng)用上述方法可以實現(xiàn)任意位長的蒙哥馬利模乘運(yùn)算。
為了使本領(lǐng)域技術(shù)人員更好地理解和實現(xiàn)本發(fā)明,以下對上述方法對應(yīng)的裝置進(jìn)行詳細(xì)描述。
如圖3所示,本發(fā)明實施例提供了一種基于蒙哥馬利模乘的數(shù)據(jù)處理裝置,所述裝置可以包括:第一計算單元31。其中,所述第一計算單元31適于當(dāng)接收到模數(shù)N時,計算第一值s2,以根據(jù)所述第一值s2,調(diào)用蒙哥馬利模乘器,對待處理的數(shù)據(jù)執(zhí)行模乘運(yùn)算。
在具體實施中,所述第一計算單元31可以包括:第一計算子單元311,以及第二計算子單元312。其中:
所述第一計算子單元311適于將所述模數(shù)N左移n-c位,獲得N1;計算R對N1取模后的值,得到計算結(jié)果s1,并將所述s1寫入至第一存儲器,其中,R=2n,w為所述蒙哥馬利模乘器的位長,k為滿足k*w≥c的最小整數(shù),n=k*w,c為所述模數(shù)N的位長,k及N均為正整數(shù)。
所述第二計算子單元312適于對所述第一存儲器的值s1執(zhí)行一次模加運(yùn)算后,得到計算結(jié)果s21,將所述計算結(jié)果s21作為第二存儲器的初始值寫入至所述第二存儲器;調(diào)用所述蒙哥馬利模乘器對所述第二存儲器的初始值s21執(zhí)行n-1次模乘運(yùn)算,并將第n-1次模乘運(yùn)算的結(jié)果=R2mod N,即獲得第一值。此時可以將所述第一值s2輸出。
如圖4所示,本發(fā)明實施例還提供了一種模乘運(yùn)算裝置40,所述裝置40可以包括上述基于蒙哥馬利模乘的數(shù)據(jù)處理裝置,第二計算單元41,第三計算單元42,第四計算單元43。其中:
通過所述第一計算單元31獲得所述第一值s2后,所述第二計算單元41當(dāng)接收到待處理的數(shù)據(jù)A及B時,根據(jù)所述第一值s2,對所述待處理的數(shù)據(jù)A與R2執(zhí)行蒙哥馬利模乘運(yùn)算,獲得運(yùn)算結(jié)果y1,以及計算所述待處理的數(shù)據(jù)B與R2執(zhí)行蒙哥馬利模乘運(yùn)算,獲得運(yùn)算結(jié)果y2。
所述第三計算單元42適于對運(yùn)算結(jié)果y1和y2執(zhí)行蒙哥馬利模乘運(yùn)算,獲得運(yùn)算結(jié)果y3。
所述第四計算單元43適于對運(yùn)算結(jié)果y3與數(shù)值1執(zhí)行蒙哥馬利模乘運(yùn)算,獲得所述待處理的數(shù)據(jù)A及B的模乘運(yùn)算結(jié)果y。
由上述內(nèi)容可以看出,通過本發(fā)明實施例中基于蒙哥馬利模乘的數(shù)據(jù)處理裝置,可以在實現(xiàn)任意位長的蒙哥馬利模乘運(yùn)算的同時,有效降低計算量,提高計算效率。
本領(lǐng)域普通技術(shù)人員可以理解上述實施例的各種方法中的全部或部分步驟是可以通過程序來指令相關(guān)的硬件來完成,該程序可以存儲于一計算機(jī)可讀存儲介質(zhì)中,存儲介質(zhì)可以包括:ROM、RAM、磁盤或光盤等。
雖然本發(fā)明披露如上,但本發(fā)明并非限定于此。任何本領(lǐng)域技術(shù)人員,在不脫離本發(fā)明的精神和范圍內(nèi),均可作各種更動與修改,因此本發(fā)明的保護(hù)范圍應(yīng)當(dāng)以權(quán)利要求所限定的范圍為準(zhǔn)。