應用在密碼技術(shù)中的大整數(shù)乘法運算方法及裝置制造方法
【專利摘要】本發(fā)明公開了一種應用在密碼技術(shù)中的大整數(shù)乘法運算方法及裝置,在密碼技術(shù)中進行大整數(shù)乘法運算時,將被乘數(shù)和乘數(shù)拆分為若干字,利用高低位分離的帶進位乘加指令,根據(jù)一定次序累加被乘數(shù)的一個字和乘數(shù)的一個字相乘的高位或低位乘積到結(jié)果的對應位置中,指令產(chǎn)生的進位將用于計算高一字結(jié)果的下一指令輸入中;算法重復此類計算,直到被乘數(shù)的每一個字和乘數(shù)的每一個字的高低位結(jié)果均被累加到結(jié)果中。本發(fā)明實現(xiàn)的大整數(shù)乘法運算,可以減少大整數(shù)乘法計算的復雜度,提升計算速度。
【專利說明】應用在密碼技術(shù)中的大整數(shù)乘法運算方法及裝置
【技術(shù)領域】
[0001]本發(fā)明涉及密碼計算【技術(shù)領域】,特別涉及一種應用在密碼技術(shù)中的大整數(shù)乘法運算方法及裝置。
【背景技術(shù)】
[0002]隨著互聯(lián)網(wǎng)和電子商務等產(chǎn)業(yè)的發(fā)展,基于公鑰密碼算法的數(shù)字簽名和驗簽在各種協(xié)議中得到廣泛利用,同時,對這些算法性能和效率的要求也在不斷提升。公鑰密碼算法如RSA算法和橢圓曲線算法都依賴于大整數(shù)的乘法運算。比如,在P-256橢圓曲線算法中,需要進行256比特數(shù)的模乘計算。大整數(shù)乘法運算的效率直接影響到密碼算法的實現(xiàn)效率。
[0003]目前,進行密碼計算的平臺非常多,包括現(xiàn)場可編程門陣列(FPGA)和x86架構(gòu)平臺等,而NVIDIA公司的統(tǒng)一計算設備架構(gòu)(CUDA)平臺以其大規(guī)模、高并行和易開發(fā)的特點,逐漸在高性能密碼計算中得到廣泛應用。 [0004]NVIDIA的CUDA平臺支持高低位分離的帶進位乘加指令。一個w比特的數(shù)與另一個w比特的數(shù)相乘將會生成2w比特的結(jié)果,w為自然數(shù)。CUDA平臺在進行單字長,也就是w比特的乘法時有如下特點:
[0005]I)與傳統(tǒng)平臺不同,CUDA平臺上高w比特和低w比特的結(jié)果是分開運算的,單次只能計算乘積的高w比特或低w比特,一個完整的乘法需要進行兩次運算。
[0006]2) CUDA平臺支持乘加指令,可以同時計算乘積的高w比特或低w比特與一個w比特數(shù)相加的結(jié)果。
[0007]3)CUDA平臺還可以根據(jù)標志寄存器的進位標志位(CF),對上次加法或乘加的結(jié)果進位同時進行累加計算。
[0008]依據(jù)CUDA平臺的上述特點,就可以非常靈活地進行大整數(shù)乘法運算的實現(xiàn)。在現(xiàn)有密碼算法實現(xiàn)中的大整數(shù)乘法,通常基于單字長的乘法將大整數(shù)分塊進行處理,大致如下所述。
[0009]設置兩個乘數(shù)a,b的長度為w比特,一個加數(shù)c的長度為w比特,計算前標志寄存器的進位標志為carry_in,結(jié)果d的長度為w比特,計算完成后標志寄存器的進位標志為carry_out,高低位分離的帶進位的乘加運算表示為
[0010](d, carry_out) = (aX b) h+c+carry_in
[0011]或
[0012](d, carry_out) = (aX b) 1+c+carry_in
[0013]其中(aXb)h表示aXb的高w比特,(aXb) i表示aXb的低w比特。單次高位或低位的這種乘加運算在CUDA平臺下只需要一個高低位分離的帶進位的乘加指令即可完成。
[0014]為了敘述方便,將位寬w比特定義為一個字,定義以下符號:A[0:s] (s^O)表示A的第O個字到第s個字,A[u]表示A的第u個字;將長度為Nw比特的被乘數(shù)A表示為A[O:N-1],其中A[0]是A的最低位w比特、A [N-1]是A的最高位w比特;類似地,將Mw比特的乘數(shù)B和(M+N)w比特的乘積C表示為B [O:M-1]和C [O:M+N_1]。
[0015]計算A [O:N-1]與B [O:M_1]乘法時,需要依次計算A [O:N_1]與B[i](O≤i≤M-ι)的乘積,以A[O:N-1]與B[l]相乘為例,如表一所示:
[0016]
【權(quán)利要求】
1.一種應用在密碼技術(shù)中的大整數(shù)乘法運算方法,其特征在于,包括: 設置兩個乘數(shù)a,b的長度為w比特,一個加數(shù)c的長度為W比特,計算前標志寄存器的進位標志為carry_in,結(jié)果d的長度為w比特,計算完成后標志寄存器的進位標志為carry_out,高低位分離的帶進位的運算指令表示為(d, carry_out) = (aX b) h+c+carry_in(d, carry_out) = (aX b) 1+c+carry_in 其中(aXb)h表示aXb的高w比特,(aXb)x表示aXb的低w比特; 將位寬w比特定義為一個字,定義以下符號:A[0:s] (s≥O)表示A的第O個字到第s個字,A[u]表示A的第u個字;將長度為Nw比特的被乘數(shù)A表示為A[0:N_1],其中A[0]是A的最低位w比特、A[N-1]是A的最高位w比特;類似地,將Mw比特的乘數(shù)B和(M+N)w比特的乘積C表示為B [O:M-1]和C [O:M+N-1]; 計算 C[0:Μ+Ν_1]=Α[0:Ν_1] ΧΒ[0:M_1] (N ^ M)時,利用運算(C[p], carry)=(A [p-k] X B [k]) X+C [p] +carry (p-k > 0)或(C [p], carry) = (A [p-k-1] X B [k])h+C[p]+carry (p-k-1≥0)累積結(jié)果到C[p] (0≤p≤M+N-1)中直到產(chǎn)生結(jié)果,其中carry為前一次計算累積結(jié)果C[p-1]產(chǎn)生的進位。
2.如權(quán)利要求1所述的大整數(shù)乘法運算方法,其特征在于,所述A[0:N-1]和B[0:M-1]不同,分M輪計算; 其中第O輪累積結(jié)果的過程為: 首先,從j=0到N-1,依次選擇計算C[j] = (A[j] XBtOD1 或C[j] = (A[j-l] XB[0])h(j≥1時選取)中的其中之一; N次計算完成后,置carry為O,從j=0到N-2,依次選擇計算 (C[j+1], carry) = (A[j+l] X B [O]) X+C [j+1] +carry (j+1 ( N-1時選取) 或(c[j+l], carry) = (A[j] XB[0])h+C[j+1] +carry的其中之一,選擇時保證被選中的(A[j+1] XBtOD1 ^ (A[j]XB[0])h 未參與過運算; N-1次計算完成后,取最后一次計算產(chǎn)生的carry,計算 C [N] = (A [N-1] X B [O]) h+carry, 其中第i輪(1≤i≤M-1)累積結(jié)果的過程為: 首先,carry置O,從j=0到N-1依次選擇計算
(C[i+j], carry) = (A[j] XBtiD^Cti+jJ+carry (C[i+j], carry) = (A[j-l] XB[i])h+C[i+j]+carry (j≥1時選取)的其中之一; N次計算完成后,取最后一次計算產(chǎn)生的carry,計算 C[j+N]=carry 然后,carry置O,從j=0到N-1依次累加
(C[i+j+l], carry) = (A[j+1] XB [i] h+C[i+j+1]+carry (j+1 ^ N-1 時選取); 或(C[i+j+l], carry) = (A[j] XB[i])h+C[i+j+l]+carry 的其中之一,選取時保證被選中的(A[j+1] XBtOD1 ^ (A[j] XB[O])h之前未參與過運算; M輪計算完畢后,對于任意s,t(0≤s≤N-1,0≤t≤M-1), (A[s] XBEtD1和(A[s] X B [t])h必須各參與過一次運算。
3.如權(quán)利要求1所述的大整數(shù)乘法運算方法,其特征在于,所述A[0:N-1]和B[0:M-1]一致,即計算(A[O:N-1])2時,首先分N-1輪計算; 其中第I輪累積結(jié)果的過程為: 從j=l到N依次選擇計算
(C[j],carry) = (A[j-k] X ALkD1 (O ≤ k〈j_k); 或(C[j], carry) = (A[j-1-k] XA[k])h(0 ≤ k〈j-1-k)的其中之一,其中 k 可在限定范圍內(nèi)任意選取; 其中第i輪(2≤i≤N-1)累積結(jié)果的過程為: carry置O,從j=i到i+N_2依次累加
(C[j], carry) = (A[j-k] X A[k]) X+C[ j] +carry (0 ( k〈j_k); 或(C[j], carry) = (A[j-1-k] XA[k])h+C[j]+carry (0 ≤ k〈j-1-k)的其中之一,其中 k可在限定范圍內(nèi)任意選取,選擇時保證被選中的(A[j-k] XADiD1* (A[j-1-k] XA[k])h在此之前未參與過運算; N-1次累加完畢后,累積C[i+N_l]:
C[i+N-l] = (A[i+N-2_k] XA[k])h+carry (O ≤ k〈i+N-2_k); 其中k在限定范圍內(nèi)任意選取,選擇時保證被選中的(A[i+N-2-k] XA[k])h在此之前均未參與過運算; N-1輪計算完成后,carry置0,從j=l到2N-2依次累加
(C[j], carry)=C[j]+C[j]+carry 并取最后一次計算的carry,計算C[2N_l]=carry ; 最后,carry置O,先依次計算 C[0] = (A[0]XA[0])1;
(C[l], carry) = (A[0] XA[0])h+C[l], 之后,從j=l到N-1依次累加
(C[2j],carry) = (A[j] XA[j])1+C[2j]+carry
(C[2j+1],carry) = (A[j] XA[j])h+C[2j+1]+carry 計算完畢后,對于任意s,t (O≤s≤t≤N-1),(A[s] XB [t]) i和(A[s] XB [t])h,必須各參與過一次運算。
4.如權(quán)利要求2或3所述的大整數(shù)乘法運算方法,其特征在于,所述大整數(shù)乘法運算基于NVIDIA公司的統(tǒng)一計算設備架構(gòu)CUDA平臺。
5.如權(quán)利要求2或3所述的大整數(shù)乘法運算方法,其特征在于,所述大整數(shù)乘法運算應用在公鑰密碼算法中。
6.一種應用在密碼技術(shù)中的大整數(shù)乘法運算裝置,其特征在于,包括:設置模塊及計算模塊,其中, 設置模塊,用于設置兩個乘數(shù)a,b的長度為w比特,一個加數(shù)c的長度為w比特,計算前標志寄存器的進位標志為carry_in,結(jié)果d的長度為w比特,計算完成后標志寄存器的進位標志為carry_out,高低位分離的帶進位的運算指令表示為(d, carry_out) = (aX b) h+c+carry_in(d, carry_out) = (aX b) 1+c+carry_in其中(aXb)h表示aXb的高w比特,(aXb) ι表示aXb的低w比特;將位寬w比特定義為一個字,定義以下符號:A[0:s] (s ^O)表示A的第O個字到第s個字,A[u]表示A的第u個字;將長度為Nw比特的被乘數(shù)A表示為A[0:N-1],其中A[0]是A的最低位w比特、A[N-1]是A的最高位w比特;類似地,將Mw比特的乘數(shù)B和(M+N)w比特的乘積C表示為B [O:M-1]和 C [O:M+N-1]; 計算模塊,用于計算c[0:M+N-1]=A[0:N-1]XB[0:M_1] (N≥Μ)時,利用運算(C[p],carry) = (A [p-k] X B [k]) X+C [p] +carry (p-k > 0)或(C[p], carry) = (A [p-k-1] XB [k])h+C[p]+carry (p-k-1≤0)累積結(jié)果到C[p] (0≤p≤M+N-1)中直到產(chǎn)生結(jié)果,其中carry為前一次計算累積結(jié)果C[p-1]產(chǎn)生的進位。
7.如權(quán)利要求6所述的大整數(shù)乘法運算裝置,其特征在于,所述裝置基于NVIDIA公司的統(tǒng)一計算設備架構(gòu)CUDA平臺建立。
8.如權(quán)利要求6所述的大整數(shù)乘法運算裝置,其特征在于,所述大整數(shù)乘法運算應用在公鑰密碼算法中。
【文檔編號】G06F7/537GK103942028SQ201410150320
【公開日】2014年7月23日 申請日期:2014年4月15日 優(yōu)先權(quán)日:2014年4月15日
【發(fā)明者】鄭昉昱, 荊繼武, 潘無窮, 林璟鏘, 趙原 申請人:中國科學院數(shù)據(jù)與通信保護研究教育中心