应用在密码技术中的大整数乘法运算方法及装置制造方法

文档序号:6543772阅读:243来源:国知局
应用在密码技术中的大整数乘法运算方法及装置制造方法
【专利摘要】本发明公开了一种应用在密码技术中的大整数乘法运算方法及装置,在密码技术中进行大整数乘法运算时,将被乘数和乘数拆分为若干字,利用高低位分离的带进位乘加指令,根据一定次序累加被乘数的一个字和乘数的一个字相乘的高位或低位乘积到结果的对应位置中,指令产生的进位将用于计算高一字结果的下一指令输入中;算法重复此类计算,直到被乘数的每一个字和乘数的每一个字的高低位结果均被累加到结果中。本发明实现的大整数乘法运算,可以减少大整数乘法计算的复杂度,提升计算速度。
【专利说明】应用在密码技术中的大整数乘法运算方法及装置
【技术领域】
[0001]本发明涉及密码计算【技术领域】,特别涉及一种应用在密码技术中的大整数乘法运算方法及装置。
【背景技术】
[0002]随着互联网和电子商务等产业的发展,基于公钥密码算法的数字签名和验签在各种协议中得到广泛利用,同时,对这些算法性能和效率的要求也在不断提升。公钥密码算法如RSA算法和椭圆曲线算法都依赖于大整数的乘法运算。比如,在P-256椭圆曲线算法中,需要进行256比特数的模乘计算。大整数乘法运算的效率直接影响到密码算法的实现效率。
[0003]目前,进行密码计算的平台非常多,包括现场可编程门阵列(FPGA)和x86架构平台等,而NVIDIA公司的统一计算设备架构(CUDA)平台以其大规模、高并行和易开发的特点,逐渐在高性能密码计算中得到广泛应用。 [0004]NVIDIA的CUDA平台支持高低位分离的带进位乘加指令。一个w比特的数与另一个w比特的数相乘将会生成2w比特的结果,w为自然数。CUDA平台在进行单字长,也就是w比特的乘法时有如下特点:
[0005]I)与传统平台不同,CUDA平台上高w比特和低w比特的结果是分开运算的,单次只能计算乘积的高w比特或低w比特,一个完整的乘法需要进行两次运算。
[0006]2) CUDA平台支持乘加指令,可以同时计算乘积的高w比特或低w比特与一个w比特数相加的结果。
[0007]3)CUDA平台还可以根据标志寄存器的进位标志位(CF),对上次加法或乘加的结果进位同时进行累加计算。
[0008]依据CUDA平台的上述特点,就可以非常灵活地进行大整数乘法运算的实现。在现有密码算法实现中的大整数乘法,通常基于单字长的乘法将大整数分块进行处理,大致如下所述。
[0009]设置两个乘数a,b的长度为w比特,一个加数c的长度为w比特,计算前标志寄存器的进位标志为carry_in,结果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比特的被乘数A表示为A[O:N-1],其中A[0]是A的最低位w比特、A [N-1]是A的最高位w比特;类似地,将Mw比特的乘数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]
【权利要求】
1.一种应用在密码技术中的大整数乘法运算方法,其特征在于,包括: 设置两个乘数a,b的长度为w比特,一个加数c的长度为W比特,计算前标志寄存器的进位标志为carry_in,结果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比特的被乘数A表示为A[0:N_1],其中A[0]是A的最低位w比特、A[N-1]是A的最高位w比特;类似地,将Mw比特的乘数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)累积结果到C[p] (0≤p≤M+N-1)中直到产生结果,其中carry为前一次计算累积结果C[p-1]产生的进位。
2.如权利要求1所述的大整数乘法运算方法,其特征在于,所述A[0:N-1]和B[0:M-1]不同,分M轮计算; 其中第O轮累积结果的过程为: 首先,从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次计算完成后,取最后一次计算产生的carry,计算 C [N] = (A [N-1] X B [O]) h+carry, 其中第i轮(1≤i≤M-1)累积结果的过程为: 首先,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次计算完成后,取最后一次计算产生的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.如权利要求1所述的大整数乘法运算方法,其特征在于,所述A[0:N-1]和B[0:M-1]一致,即计算(A[O:N-1])2时,首先分N-1轮计算; 其中第I轮累积结果的过程为: 从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 可在限定范围内任意选取; 其中第i轮(2≤i≤N-1)累积结果的过程为: 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可在限定范围内任意选取,选择时保证被选中的(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在限定范围内任意选取,选择时保证被选中的(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.如权利要求2或3所述的大整数乘法运算方法,其特征在于,所述大整数乘法运算基于NVIDIA公司的统一计算设备架构CUDA平台。
5.如权利要求2或3所述的大整数乘法运算方法,其特征在于,所述大整数乘法运算应用在公钥密码算法中。
6.一种应用在密码技术中的大整数乘法运算装置,其特征在于,包括:设置模块及计算模块,其中, 设置模块,用于设置两个乘数a,b的长度为w比特,一个加数c的长度为w比特,计算前标志寄存器的进位标志为carry_in,结果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比特的被乘数A表示为A[0:N-1],其中A[0]是A的最低位w比特、A[N-1]是A的最高位w比特;类似地,将Mw比特的乘数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)累积结果到C[p] (0≤p≤M+N-1)中直到产生结果,其中carry为前一次计算累积结果C[p-1]产生的进位。
7.如权利要求6所述的大整数乘法运算装置,其特征在于,所述装置基于NVIDIA公司的统一计算设备架构CUDA平台建立。
8.如权利要求6所述的大整数乘法运算装置,其特征在于,所述大整数乘法运算应用在公钥密码算法中。
【文档编号】G06F7/537GK103942028SQ201410150320
【公开日】2014年7月23日 申请日期:2014年4月15日 优先权日:2014年4月15日
【发明者】郑昉昱, 荆继武, 潘无穷, 林璟锵, 赵原 申请人:中国科学院数据与通信保护研究教育中心
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1