CN103942028A - 应用在密码技术中的大整数乘法运算方法及装置 - Google Patents
应用在密码技术中的大整数乘法运算方法及装置 Download PDFInfo
- Publication number
- CN103942028A CN103942028A CN201410150320.5A CN201410150320A CN103942028A CN 103942028 A CN103942028 A CN 103942028A CN 201410150320 A CN201410150320 A CN 201410150320A CN 103942028 A CN103942028 A CN 103942028A
- Authority
- CN
- China
- Prior art keywords
- carry
- bit
- integers
- computing
- calculate
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Landscapes
- Complex Calculations (AREA)
Abstract
本发明公开了一种应用在密码技术中的大整数乘法运算方法及装置,在密码技术中进行大整数乘法运算时,将被乘数和乘数拆分为若干字,利用高低位分离的带进位乘加指令,根据一定次序累加被乘数的一个字和乘数的一个字相乘的高位或低位乘积到结果的对应位置中,指令产生的进位将用于计算高一字结果的下一指令输入中;算法重复此类计算,直到被乘数的每一个字和乘数的每一个字的高低位结果均被累加到结果中。本发明实现的大整数乘法运算,可以减少大整数乘法计算的复杂度,提升计算速度。
Description
技术领域
本发明涉及密码计算技术领域,特别涉及一种应用在密码技术中的大整数乘法运算方法及装置。
背景技术
随着互联网和电子商务等产业的发展,基于公钥密码算法的数字签名和验签在各种协议中得到广泛利用,同时,对这些算法性能和效率的要求也在不断提升。公钥密码算法如RSA算法和椭圆曲线算法都依赖于大整数的乘法运算。比如,在P-256椭圆曲线算法中,需要进行256比特数的模乘计算。大整数乘法运算的效率直接影响到密码算法的实现效率。
目前,进行密码计算的平台非常多,包括现场可编程门阵列(FPGA)和x86架构平台等,而NVIDIA公司的统一计算设备架构(CUDA)平台以其大规模、高并行和易开发的特点,逐渐在高性能密码计算中得到广泛应用。
NVIDIA的CUDA平台支持高低位分离的带进位乘加指令。一个w比特的数与另一个w比特的数相乘将会生成2w比特的结果,w为自然数。CUDA平台在进行单字长,也就是w比特的乘法时有如下特点:
1)与传统平台不同,CUDA平台上高w比特和低w比特的结果是分开运算的,单次只能计算乘积的高w比特或低w比特,一个完整的乘法需要进行两次运算。
2)CUDA平台支持乘加指令,可以同时计算乘积的高w比特或低w比特与一个w比特数相加的结果。
3)CUDA平台还可以根据标志寄存器的进位标志位(CF),对上次加法或乘加的结果进位同时进行累加计算。
依据CUDA平台的上述特点,就可以非常灵活地进行大整数乘法运算的实现。在现有密码算法实现中的大整数乘法,通常基于单字长的乘法将大整数分块进行处理,大致如下所述。
设置两个乘数a,b的长度为w比特,一个加数c的长度为w比特,计算前标志寄存器的进位标志为carry_in,结果d的长度为w比特,计算完成后标志寄存器的进位标志为carry_out,高低位分离的带进位的乘加运算表示为
(d,carry_out)=(a×b)h+c+carry_in
或
(d,carry_out)=(a×b)l+c+carry_in
其中(a×b)h表示a×b的高w比特,(a×b)l表示a×b的低w比特。单次高位或低位的这种乘加运算在CUDA平台下只需要一个高低位分离的带进位的乘加指令即可完成。
为了叙述方便,将位宽w比特定义为一个字,定义以下符号:A[0:s](s≥0)表示A的第0个字到第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[0:M-1]和C[0:M+N-1]。
计算A[0:N-1]与B[0:M-1]乘法时,需要依次计算A[0:N-1]与B[i](0≤i≤M-1)的乘积,以A[0:N-1]与B[1]相乘为例,如表一所示:
表一
首先,计算(C[1],carry)=(A[0]×B[1])l+C[1]
(C[2],carry)=(A[0]×B[1])h+C[2]+carry
C[2]的计算会产生进位,因此需要保存进位到临时变量temp1中,
temp1=carry
如果不保存在临时变量temp1中而直接进位到C[3]上将会产生连锁进位,进行大量加法。
然后,计算(C[2],carry)=(A[1]×B[1])l+C[2]
temp2=(A[1]×B[1])h+temp1+carry
(C[3],carry)=temp2+C[3]
temp1=carry
引入temp2的目的是为了减少加法的使用。因为temp2=(A[1]×B[1])h+temp1+carry不会产生进位。这是由xy+u+v≤(2w-1)(2w- 1)+(2w-1)+(2w-1)=22w-1保证的,其中x,y,u,v均为w比特数。
之后,类似地依次计算
(C[i+1],carry)=(A[i]×B[1])l+C[i+1]
temp2=(A[i+1]×B[1])h+temp1+carry
(C[i+2],carry)=temp2+C[i+2]
temp1=carry
即可,其中2≤i≤N-1。
特殊地,A[0:N-1]与B[0]相乘时,由于C的各个字初值均为0,不需要额外使用temp1和temp2保存进位,故也不需要额外的加法运算。因此,在计算加法运算数量时,只需要考虑A[0:N-1]与B[i](1≤i≤M-1)部分。根据上述算法,A[0:N-1]与B[i](1≤i≤M-1)相乘时,需要2(N-2)+1=2N-3次加法运算。综合起来,完成A[0:N-1]与B[0:M-1]的乘法,共需要(2N-3)(M-1)次加法运算。
在进行平方算法时,即计算A[0:N-1]×A[0:N-1]时,利用A[s]×A[t]和A[t]×A[s]结果的一致性,只需要计算A[s]×A[t](s>t)的计算块的累加结果,再将累加结果翻倍,最后累加A[s]×A[t](s=t)的计算块即可。
计算A[s]×A[t](s>t)的计算块的累加结果时,可以从i=1到N-1,依次累加A[i:N-1]×A[i-1],共计N-1个计算块序列。其中,A[1:N-1]×A[0]作为第一轮,由于C的各个字初值均为0,不需要额外使用temp1和temp2保存进位,故也不需要额外的加法运算;而A[N-1]×A[N-2],只需要计算(C[2N-3],carry)=(A[N-1]×A[N-2])l+C[2N-3]和C[2N-2]=(A[N-1]×A[N-2])h+C[2N-2]+carry,同样也不需要额外加法;而计算A[i+1:N-1]×A[i],1≤i≤N-3时,根据之前类似的讨论, 需要{2[(N-1)-(i+1)+1]-3)=2N-2i-5次加法。因此,总共需要 次加法;将上述累加结果翻倍,这需要2N-1次加法;而累加A[s]×A[t](s=t)时,利用带进位高低位分离的乘加指令,不需要加法。
因此,利用现有算法,完成A[0:N-1]×A[0:N-1],一共需要(N-3)2+2N-1=N2-4N+8次加法。
综上所述,在CUDA平台下,利用现有算法,实现N字长乘以M字长的乘法,需要2MN次乘法或乘加运算以及(2N-3)(M-1)次加法运算;实现N字长的平方运算,需要N2+N次乘法或乘加运算以及N2-4N+8次加法运算。该算法中,因为CUDA平台的乘法指令特性,乘法次数不能降低,但是加法数量复杂度很高,因此亟需一种复杂度低的大整数乘法,以降低CUDA平台的运算负载、提升计算的速度。
发明内容
有鉴于此,本发明实施例提供一种应用在密码技术中的大整数乘法运算方法,该方法能够减少大整数乘法计算的复杂度,提升计算速度。
本发明实施例还提供一种应用在密码技术中的大整数乘法运算装置,该装置能够减少大整数乘法计算的复杂度,提升计算速度。
根据上述目的,本发明是这样实现的:
一种应用在密码技术中的大整数乘法运算方法,包括:
设置两个乘数a,b的长度为w比特,一个加数c的长度为w比特,计算前标志寄存器的进位标志为carry_in,结果d的长度为w比特,计算完成后标志寄存器的进位标志为carry_out,高低位分离的带进位的运算指令表示为
(d,carry_out)=(a×b)h+c+carry_in
(d,carry_out)=(a×b)l+c+carry_in
其中(a×b)h表示a×b的高w比特,(a×b)l表示a×b的低w比特;
将位宽w比特定义为一个字,定义以下符号:A[0:s](s≥0)表示A的第0个字到第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[0:M-1]和C[0:M+N-1];
计算C[0:M+N-1]=A[0:N-1]×B[0:M-1](N≥M)时,利用运算(C[p],carry)=(A[p-k]×B[k])l+C[p]+carry(p-k≥0)或(C[p],carry)=(A[p-k-1]×B[k])h+C[p]+carry(p-k-1≥0)累积结果到C[p](0≤p≤M+N-1)中直到产生结果,其中carry为前一次计算累积结果C[p-1]产生的进位。
一种应用在密码技术中的大整数乘法运算装置,包括:设置模块及计算模块,其中,
设置模块,用于设置两个乘数a,b的长度为w比特,一个加数c的长度为w比特,计算前标志寄存器的进位标志为carry_in,结果d的长度为w比特,计算完成后标志寄存器的进位标志为carry_out,高低位分离的带进位的运算指令表示为
(d,carry_out)=(a×b)h+c+carry_in
(d,carry_out)=(a×b)l+c+carry_in
其中(a×b)h表示a×b的高w比特,(a×b)l表示a×b的低w比特;将位宽w比特定义为一个字,定义以下符号:A[0:s](s≥0)表示A的第0个字到第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[0:M-1]和C[0:M+N-1];
计算模块,用于计算C[0:M+N-1]=A[0:N-1]×B[0:M-1](N≥M)时,利用运算(C[p],carry)=(A[p-k]×B[k])l+C[p]+carry(p-k≥0)或(C[p],carry)=(A[p-k-1]×B[k])h+C[p]+carry(p-k-1≥0)累积结果到C[p](0≤p≤M+N-1)中直到产生结果,其中carry为前一次计算累积结果C[p-1]产生的进位。
由上述方案可以看出,在密码技术中进行大整数乘法运算时,将被乘数和乘数拆分为若干字,利用高低位分离的带进位乘加指令,根据一定次序累加被乘数的一个字和乘数的一个字相乘的高位或低位乘积到结果的对应位置中,指令产生的进位将用于计算高一字结果的下一指令输入中;算法重复此类计算,直到被乘数的每一个字和乘数的每一个字的高低位结果均被累加到结果中。本发明的大整数乘法运算,相比现有技术,可以有效地减少大整数乘法过程中的加法运算数量。当大整数乘法是一般乘法运算时,则将乘法运算过程中的加法数量从(2N-3)(M-1)次加法运算减少到(M-1)次;而当大整数乘法是平方运算时,则将平方运算过程中的加法数量从(N2-4N+8)降低到(2N-1)次,从而可以减少大整数乘法计算的复杂度,提升计算速度。
附图说明
图1为本发明实施例提供的应用在密码技术中的大整数乘法方法流程图;
图2为本发明实施例提供的应用在密码技术中的大整数乘法装置流程图。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明作进一步详细说明。
为了减小大整数乘法计算的复杂度,提升计算速度,在密码技术中进行大整数乘法运算时,将被乘数和乘数拆分为若干字,利用高低位分离的带进位乘加指令,根据一定次序累加被乘数的一个字和乘数的一个字相乘的高位或低位乘积到结果的对应位置中,指令产生的进位将用于计算高一字结果的下一指令输入中;算法重复此类计算,直到被乘数的每一个字和乘数的每一个字的高低位结果均被累加到结果中。
本发明实施例在进行大整数乘法计算时,有效地减少大整数乘法过程中的加法计算速度,当大整数乘法是一般乘法运算时,将乘法运算过程中的加法数量从(2N-3)(M-1)次加法运算减少到(M-1)次,而当大整数乘法是平方运算时,则将平方运算过程中的加法数量从(N2-4N+8)降低到(2N-1)次,进而可以减少大整数乘法计算的复杂度,提升计算速度。
采用本发明提供的方法应用在现有的CUDA开普勒核心,其32比特加法的速度为乘法速度的5倍,对于2048比特的大整数乘法运算,可以提升16.1%的计算速度;对于2048比特的大整数平方运算,可以提升15.7%的计算速度。更进一步地,计算速度的提升效果会随着大整数的字长数而增长。
采用本发明提供的方法中算法的通用性强,不仅仅限于CUDA平台,只要密码技术中的计算平台支持高低位分离的带进位乘加指令,都可以适用。
图1为本发明实施例提供的应用在密码技术中的大整数乘法方法流程图,其具体步骤为:
步骤101、在密码技术中进行大整数乘法运算时,将被乘数和乘数拆分为若干字;
步骤102、利用高低位分离的带进位乘加指令,根据一定次序累加被乘数的一个字和乘数的一个字相乘的高位或低位乘积到结果的对应位置中;
步骤103、所述指令产生的进位将用于计算高一字结果的下一指令输入中;
步骤104、按照步骤102~步骤103的过程重复计算,直到被乘数的每一个字和乘数的每一个字的高低位结果均被累加到结果中。
本发明实施例提供的方法可以应用在密码算法中,提高算法的性能和效率。
以下详细说明本发明实施例提供的大整数计算
为了说明方便,定义以下符号:A[u:v]表示A中的第u个字到第v个字,A[u]表示A的第u个字。
将长度为Mw比特的被乘数A表示为A[0:N-1],其中A[0]是A的最低位w比特、A[N-1]是A的最高位w比特;类似地,将Nw比特的乘数B和(M+N)w比特的乘积C表示为B[0:M-1]和C[0:M+N-1]。
本发明实施例可以按照如下步骤开始进行乘积累加操作:
步骤1,令轮次序号i=0;
步骤2,从j=0到N-1,依次选择计算
C[j]=(A[j]×B[0])l
或C[j]=(A[j-1]×B[0])h(j≥1时方能选取)的其中之一。
步骤3,置carry为0,从j=0到N-2,依次选择计算
(C[j+1],carry)=(A[j+1]×B[0])l+C[j+1]+carry
(j+1≤N-1时方能选取)
(C[j+1],carry)=(A[j]×B[0])h+C[j+1]+carry的其中之一,选择时 须保证被选中的(A[j+1]×B[0])l或(A[j]×B[0])h在步骤2中未参与过运算。
步骤4,取步骤3最后一次计算产生的carry,计算C[N]=(A[N-1]×B[0])h+carry,跳至步骤8;
步骤5,置carry为0,从j=0到N-1,依次选择计算
(C[i+j],carry)=(A[j]×B[i])l+C[i+j]+carry或(C[i+j],carry)=(A[j-1]×B[i])h+C[i+j]+carry(j≥1时方能选取)的其中之一。
步骤6,取步骤5最后一次计算产生的carry,计算C[i+N]=carry;
步骤7,置carry为0,从j=0到N-1,依次选择计算
(C[i+j+1],carry)=(A[j+1]×B[i])l+C[i+j+1]+carry
(j+1≤N-1时方能选取)
或(C[i+j+1],carry)=(A[j]×B[i])h+C[i+j+1]+carry的其中之一,选择时须保证被选中的(A[j+1]×B[i])l或(A[j]×B[i])h在步骤5未参与过运算。
步骤8,令i=i+1,若i=M,算法结束,否则跳至步骤5。
算法结束后,对于任意i,j(0≤i≤M-1,0≤j≤N-1),(A[j]×B[i])l和(A[j]×B[i])h各参加过一次运算。
综合上述过程,本发明只会在步骤6中使用加法保存进位,而步骤6需要执行(M-1)次,因此算法一共需要(M-1)次加法。
如果被乘数A[0:N-1]与乘数B[0:M-1]完全一致,即计算被乘数A[0:N-1]的平方时,计算算法还可以进一步优化。
本发明实施例可以按照如下步骤开始进行乘积累加操作:
步骤1,令轮次序号i=1;
步骤2,从j=1到N依次选择计算
(C[j],carry)=(A[j-k]×A[k])l(0≤k<j-k)
或(C[j],carry)=(A[j-1-k]×A[k])h(0≤k<j-1-k)的其中之一,其中k可在限定范围内任意选取。N次计算完成后,跳至步骤5。
步骤3,carry置0,从j=i到i+N-2依次选择计算
(C[j],carry)=(A[j-k]×A[k])l+C[j]+carry(0≤k<j-k)或(C[j],carry)=(A[j-1-k]×A[k])h+C[j]+carry(0≤k<j-1-k)的其中之一,其中k可在限定范围内任意选取,但选择时须保证被选中的(A[j-k]×A[k])l或(A[j-1-k]×A[k])h在此之前均未参与过运算。
步骤4,取步骤3中最后一次计算产生的carry,计算C[i+N-1]=(A[i+N-2-k]×A[k])h+carry(0≤k<i+N-2-k);
其中k可在限定范围内任意选取,但须保证被选中的(A[i+N-2-k]×A[k])h在此之前均未参与过运算。
步骤5,令i=i+1,若i<N,跳至步骤3,否则,跳至步骤6;
步骤6,carry置0,从j=1到2N-2依次累加
(C[j],carry)=C[j]+C[j]+carry
步骤7,取步骤6中最后一次计算产生的carry,令C[2N-1]=carry;
步骤8,carry置0,首先计算
C[0]=(A[0]×A[0])l,
(C[1],carry)=(A[0]×A[0])h+C[1],
然后从j=1到N-1依次累加
(C[2j],carry)=(A[j]×A[j])l+C[2j]+carry
(C[2j+1],Carry)=(A[j]×A[j])h+C[2j+1]+carry
算法完毕。
算法结束后,对于任意i,j(0≤i≤j≤N-1),(A[j]×A[i])l和(A[j]×A[i])h各参加过一次运算。综合上述过程,本发明只会在步骤6和步骤7中使用加法,完成算法一共需要2N-1次加法。
以下举一个具体例子说明本发明实施例。
以乘法运算示例,以下以其单字长乘法位数为32bit,计算96bit×96bit的乘法举例说明,其中被乘数为A[0:2],乘数为B[0:2],结果为C[0:5]。
计算示意如表二所示:
表二
在计算时,分为3轮计算:
第0轮,依次计算C[0]=(A[0]×B[0])l,C[1]=(A[1]×B[0])l,C[2]=(A[2]×B[0])l;再依次计算(C[1],Carry)=(A[0]×B[0])h+C[1],(C[2],carry)=(A[1]×B[0])h+C[2]+carry,C[3]=(A[2]×B[0])h+carry;
第1轮,依次计算(C[1],carry)=(A[0]×B[1])l+C[1],(C[2],carry)=(A[1]×B[1])l+C[2]+carry,(C[3],carry)=(A[2]×B[1])l+C[3]+carry,C[4]=carry;再依次计算(C[2],carry)=(A[0]×B[1])h+C[2],(C[3],carry)=(A[1]×B[1])h+C[3]+carry,C[4]=(A[2]×B[1])h+C[4]+carry;
第2轮,依次计算(C[2],carry)=(A[0]×B[2])l+C[2],(C[3],carry)=(A[1]×B[2])l+C[3]+carry,(C[4],carry)=(A[2]×B[2])l+C[4]+carry,C[5]=carry;再依次计算(C[3],carry)=(A[0]×B[2])h+C[3],(C[4],carry)=(A[1]×B[2])h+C[4]+carry,C[5]=(A[2]×B[2])h+C[5]+carry,算法完毕。
以平方运算示例,以下以其单字长乘法位数为32Bit,计算128Bit×128Bit的平方举例说明,其中被乘数和乘数均为A[0:3],结果为C[0:7]。
计算示意如表三所示:
表三
首先分3轮计算:
第1轮,依次计算C[1]=(A[1]×A[0])l,C[2]=(A[2]×A[0])l,C[3]=(A[3]×A[0])l,C[4]=(A[3]×A[0])h;
第2轮,依次计算(C[2],carry)=(A[1]×A[0])h+C[2],(C[3],carry)=(A[2]×A[0])h+C[3]+carry,(C[4],carry)=(A[3]×A[1])l+C[4]+carry,C[5]=(A[3]×A[1])h+carry;
第3轮,依次计算(C[3],carry)=(A[2]×A[1])l+C[3],(C[4],carry)=(A[2]×A[1])h+C[4]+carry,(C[5],carry)=(A[3]×A[2])l+C[5]+carry,C[6]=(A[3]×A[2])h+carry。
之后,将C[1:6]翻倍,依次计算(C[1],carry)=C[1]+C[1],(C[2],carry)=C[2]+C[2]+carry,(C[3],carry)=C[3]+C[3]+carry,(C[4],carry)=C[4]+C[4]+carry,(C[5],carry)=C[5]+C[5]+carry,(C[6],carry)= C[6]+C[6]+carry,C[7]=carry。
最后加上A[i]×A[i](0≤i≤3),依次计算C[0]=(A[0]×A[0])l,(C[1],carry)=(A[0]×A[0])h+C[1],(C[2],carry)=(A[1]×A[1])l+C[2]+carry,(C[3],carry)=(A[1]×A[1])h+C[3]+carry,(C[4],carry)=(A[2]×A[2])l+C[4]+carry,(C[5],carry)=(A[2]×A[2])h+C[5]+carry,(C[6],carry)=(A[3]×A[3])l+C[6]+carry,C[7]=(A[3]×A[3])h+C[7]+carry,算法计算完毕。
本发明还提供一种应用在密码技术中的大整数乘法运算装置,如图2所示,包括:设置模块及计算模块,其中,
设置模块,用于设置两个乘数a,b的长度为w比特,一个加数c的长度为w比特,计算前标志寄存器的进位标志为carry_in,结果d的长度为w比特,计算完成后标志寄存器的进位标志为carry_out,高低位分离的带进位的运算指令表示为
(d,carry_out)=(a×b)h+c+carry_in
(d,carry_out)=(a×b)l+c+carry_in
其中(a×b)h表示a×b的高w比特,(a×b)l表示a×b的低w比特;将位宽w比特定义为一个字,定义以下符号:A[0:s](s≥0)表示A的第0个字到第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[0:M-1]和C[0:M+N-1];
计算模块,用于计算C[0:M+N-1]=A[0:N-1]×B[0:M-1](N≥M)时,利用运算(C[p],carry)=(A[p-k]×B[k])l+C[p]+carry(p-k≥0)或(C[p],carry)=(A[p-k-1]×B[k])h+C[p]+carry(p-k-1≥0)累积结果到C[p](0≤p≤M+N-1)中直到产生结果,其中carry为前一次计算累积结果C[p-1]产生的进位。
在本发明中,所述装置基于NVIDIA公司的CUDA平台建立。
在本发明中,所述大整数乘法运算应用在公钥密码算法中。
以上举较佳实施例,对本发明的目的、技术方案和优点进行了进一步详细说明,所应理解的是,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (8)
1.一种应用在密码技术中的大整数乘法运算方法,其特征在于,包括:
设置两个乘数a,b的长度为w比特,一个加数c的长度为w比特,计算前标志寄存器的进位标志为carry_in,结果d的长度为w比特,计算完成后标志寄存器的进位标志为carry_out,高低位分离的带进位的运算指令表示为
(d,carry_out)=(a×b)h+c+carry_in
(d,carry_out)=(a×b)l+c+carry_in
其中(a×b)h表示a×b的高w比特,(a×b)l表示a×b的低w比特;
将位宽w比特定义为一个字,定义以下符号:A[0:s](s≥0)表示A的第0个字到第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[0:M-1]和C[0:M+N-1];
计算C[0:M+N-1]=A[0:N-1]×B[0:M-1](N≥M)时,利用运算(C[p],carry)=(A[p-k]×B[k])l+C[p]+carry(p-k≥0)或(C[p],carry)=(A[p-k-1]×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轮计算;
其中第0轮累积结果的过程为:
首先,从j=0到N-1,依次选择计算C[j]=(A[j]×B[0])l
或C[j]=(A[j-1]×B[0])h(j≥1时选取)中的其中之一;
N次计算完成后,置carry为0,从j=0到N-2,依次选择计算
(C[j+1],carry)=(A[j+1]×B[0])l+C[j+1]+carry
(j+1≤N-1时选取)
或(C[j+1],carry)=(A[j]×B[0])h+C[j+1]+carry的其中之一,选择时保证被选中的(A[j+1]×B[0])l或(A[j]×B[0])h未参与过运算;
N-1次计算完成后,取最后一次计算产生的carry,计算
C[N]=(A[N-1]×B[0])h+carry,
其中第i轮(1≤i≤M-1)累积结果的过程为:
首先,carry置0,从j=0到N-1依次选择计算
(C[i+j],carry)=(A[j]×B[i])l+C[i+j]+carry或(C[i+j],carry)=(A[j-1]×B[i])h+C[i+j]+carry(j≥1时选取)的其中之一;
N次计算完成后,取最后一次计算产生的carry,计算
C[j+N]=carry
然后,carry置0,从j=0到N-1依次累加
(C[i+j+1],carry)=(A[j+1]×B[i])l+C[i+j+1]+carry(j+1≤N-1时选取);
或(C[i+j+1],carry)=(A[j]×B[i])h+C[i+j+1]+carry的其中之一,选取时保证被选中的(A[j+1]×B[0])l或(A[j]×B[0])h之前未参与过运算;
M轮计算完毕后,对于任意s,t(0≤s≤N-1,0≤t≤M-1),(A[s]×B[t])l和(A[s]×B[t])h必须各参与过一次运算。
3.如权利要求1所述的大整数乘法运算方法,其特征在于,所述A[0:N-1]和B[0:M-1]一致,即计算(A[0:N-1])2时,首先分N-1轮计算;
其中第1轮累积结果的过程为:
从j=1到N依次选择计算
(C[j],carry)=(A[j-k]×A[k])l(0≤k<j-k);
或(C[j],carry)=(A[j-1-k]×A[k])h(0≤k<j-1-k)的其中之一,其中k可在限定范围内任意选取;
其中第i轮(2≤i≤N-1)累积结果的过程为:
carry置0,从j=i到i+N-2依次累加
(C[j],carry)=(A[j-k]×A[k])l+C[j]+carry(0≤k<j-k);
或(C[j],carry)=(A[j-1-k]×A[k])h+C[j]+carry(0≤k<j-1-k)的其中之一,其中k可在限定范围内任意选取,选择时保证被选中的(A[j-k]×A[k])l或(A[j-1-k]×A[k])h在此之前未参与过运算;
N-1次累加完毕后,累积C[i+N-1]:
C[i+N-1]=(A[i+N-2-k]×A[k])h+carry(0≤k<i+N-2-k);
其中k在限定范围内任意选取,选择时保证被选中的(A[i+N-2-k]×A[k])h在此之前均未参与过运算;
N-1轮计算完成后,carry置0,从j=1到2N-2依次累加
(C[j],carry)=C[j]+C[j]+carry
并取最后一次计算的carry,计算C[2N-1]=carry;
最后,carry置0,先依次计算
C[0]=(A[0]×A[0])l,
(C[1],carry)=(A[0]×A[0])h+C[1],
之后,从j=1到N-1依次累加
(C[2j],carry)=(A[j]×A[j])l+C[2j]+carry
(C[2j+1],carry)=(A[j]×A[j])h+C[2j+1]+carry
计算完毕后,对于任意s,t(0≤s≤t≤N-1),(A[s]×B[t])l和(A[s]×B[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)=(a×b)h+c+carry_in
(d,carry_out)=(a×b)l+c+carry_in
其中(a×b)h表示a×b的高w比特,(a×b)l表示a×b的低w比特;将位宽w比特定义为一个字,定义以下符号:A[0:s](s≥0)表示A的第0个字到第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[0:M-1]和C[0:M+N-1];
计算模块,用于计算C[0:M+N-1]=A[0:N-1]×B[0:M-1](N≥M)时,利用运算(C[p],carry)=(A[p-k]×B[k])l+C[p]+carry(p-k≥0)或(C[p],carry)=(A[p-k-1]×B[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所述的大整数乘法运算装置,其特征在于,所述大整数乘法运算应用在公钥密码算法中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410150320.5A CN103942028B (zh) | 2014-04-15 | 2014-04-15 | 应用在密码技术中的大整数乘法运算方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410150320.5A CN103942028B (zh) | 2014-04-15 | 2014-04-15 | 应用在密码技术中的大整数乘法运算方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103942028A true CN103942028A (zh) | 2014-07-23 |
CN103942028B CN103942028B (zh) | 2017-04-05 |
Family
ID=51189708
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410150320.5A Active CN103942028B (zh) | 2014-04-15 | 2014-04-15 | 应用在密码技术中的大整数乘法运算方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103942028B (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104461449A (zh) * | 2014-11-14 | 2015-03-25 | 中国科学院数据与通信保护研究教育中心 | 基于向量指令的大整数乘法实现方法及装置 |
CN104636113A (zh) * | 2015-02-06 | 2015-05-20 | 周炜 | 一种计算机处理大整数的算法 |
CN104793922A (zh) * | 2015-05-04 | 2015-07-22 | 中国科学院软件研究所 | 一种大整数乘法Comba算法基于OpenMP的并行实现方法 |
CN105930128A (zh) * | 2016-05-17 | 2016-09-07 | 中国科学院数据与通信保护研究教育中心 | 一种利用浮点数计算指令实现大整数乘法计算加速方法 |
CN109214213A (zh) * | 2017-06-29 | 2019-01-15 | 中国科学院数据与通信保护研究教育中心 | 一种大整数模乘加算法的实现电路及方法 |
CN109388372A (zh) * | 2018-10-19 | 2019-02-26 | 华东交通大学 | 一种基于最小模块的三值光学处理器msd乘法计算方法 |
CN110262773A (zh) * | 2019-04-28 | 2019-09-20 | 阿里巴巴集团控股有限公司 | 一种计算机数据处理方法及装置 |
CN110365481A (zh) * | 2019-07-04 | 2019-10-22 | 上海交通大学 | 加速国密sm2算法的优化实现系统及方法 |
CN117149129A (zh) * | 2023-10-31 | 2023-12-01 | 共模半导体技术(苏州)有限公司 | 专用大整数乘法微控制器 |
CN117908835A (zh) * | 2024-03-20 | 2024-04-19 | 南京邮电大学 | 一种基于浮点数计算能力加速sm2国密算法的方法 |
-
2014
- 2014-04-15 CN CN201410150320.5A patent/CN103942028B/zh active Active
Non-Patent Citations (4)
Title |
---|
CIARA MOORE等: "《Financial Cryptography and Data Security》", 30 April 2013 * |
OWEN HARRISON等: ""Efficient Acceleration of Asymmetric Cryptography on Graphics Hardware"", 《PROGRESS IN CRYPTOLOGY-AFRICACRYPT 2009》 * |
PASCAL GIORGI等: ""Comparison of Modular Arithmetic Algorithms on GPUs"", 《 PARCO’09: INTERNATIONAL CONFERENCE ON PARALLEL COMPUTING(2009)》 * |
PEDRO SILVEIRA PISA等: "《2012 Global Information Infrastructure and Networking Symposium (GIIS)》", 31 December 2012 * |
Cited By (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104461449A (zh) * | 2014-11-14 | 2015-03-25 | 中国科学院数据与通信保护研究教育中心 | 基于向量指令的大整数乘法实现方法及装置 |
CN104461449B (zh) * | 2014-11-14 | 2018-02-27 | 中国科学院数据与通信保护研究教育中心 | 基于向量指令的大整数乘法实现方法及装置 |
CN104636113A (zh) * | 2015-02-06 | 2015-05-20 | 周炜 | 一种计算机处理大整数的算法 |
CN104793922A (zh) * | 2015-05-04 | 2015-07-22 | 中国科学院软件研究所 | 一种大整数乘法Comba算法基于OpenMP的并行实现方法 |
CN104793922B (zh) * | 2015-05-04 | 2017-08-25 | 中国科学院软件研究所 | 一种大整数乘法Comba算法基于OpenMP的并行实现方法 |
CN105930128A (zh) * | 2016-05-17 | 2016-09-07 | 中国科学院数据与通信保护研究教育中心 | 一种利用浮点数计算指令实现大整数乘法计算加速方法 |
CN105930128B (zh) * | 2016-05-17 | 2018-11-06 | 中国科学院数据与通信保护研究教育中心 | 一种利用浮点数计算指令实现大整数乘法计算加速方法 |
CN109214213A (zh) * | 2017-06-29 | 2019-01-15 | 中国科学院数据与通信保护研究教育中心 | 一种大整数模乘加算法的实现电路及方法 |
CN109388372A (zh) * | 2018-10-19 | 2019-02-26 | 华东交通大学 | 一种基于最小模块的三值光学处理器msd乘法计算方法 |
CN109388372B (zh) * | 2018-10-19 | 2023-04-07 | 华东交通大学 | 一种基于最小模块的三值光学处理器msd乘法计算方法 |
CN110262773A (zh) * | 2019-04-28 | 2019-09-20 | 阿里巴巴集团控股有限公司 | 一种计算机数据处理方法及装置 |
CN110262773B (zh) * | 2019-04-28 | 2020-08-04 | 阿里巴巴集团控股有限公司 | 一种计算机数据处理方法及装置 |
WO2020220743A1 (zh) * | 2019-04-28 | 2020-11-05 | 创新先进技术有限公司 | 一种计算机数据处理方法及装置 |
TWI731543B (zh) * | 2019-04-28 | 2021-06-21 | 開曼群島商創新先進技術有限公司 | 計算機資料處理方法及裝置 |
CN110365481A (zh) * | 2019-07-04 | 2019-10-22 | 上海交通大学 | 加速国密sm2算法的优化实现系统及方法 |
CN117149129A (zh) * | 2023-10-31 | 2023-12-01 | 共模半导体技术(苏州)有限公司 | 专用大整数乘法微控制器 |
CN117149129B (zh) * | 2023-10-31 | 2024-01-26 | 共模半导体技术(苏州)有限公司 | 专用大整数乘法微控制器 |
CN117908835A (zh) * | 2024-03-20 | 2024-04-19 | 南京邮电大学 | 一种基于浮点数计算能力加速sm2国密算法的方法 |
CN117908835B (zh) * | 2024-03-20 | 2024-05-17 | 南京邮电大学 | 一种基于浮点数计算能力加速sm2国密算法的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103942028B (zh) | 2017-04-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103942028A (zh) | 应用在密码技术中的大整数乘法运算方法及装置 | |
CN107451658B (zh) | 浮点运算定点化方法及系统 | |
Vun et al. | A new RNS based DA approach for inner product computation | |
CN106951211B (zh) | 一种可重构定浮点通用乘法器 | |
US7308471B2 (en) | Method and device for performing operations involving multiplication of selectively partitioned binary inputs using booth encoding | |
CN109284083A (zh) | 一种乘法运算装置及方法 | |
CN102184161A (zh) | 基于余数系统的矩阵求逆装置及方法 | |
CN106951394A (zh) | 一种可重构定浮点通用fft处理器 | |
CN101295237A (zh) | 求商和余数的高速除法器 | |
CN100435088C (zh) | 优化的标准带符号数字的系数乘法器 | |
CN109933304A (zh) | 适用于国密sm2p256v1算法的快速蒙哥马利模乘器运算优化方法 | |
EP2431865B1 (en) | Semiconductor integrated circuit and index calculation method | |
CN107885486B (zh) | 一种基于查找树的复合有限域求逆装置 | |
CN103955585B (zh) | 一种适用于低功耗容错电路的fir滤波器结构 | |
CN108897526B (zh) | 一种基于多次平方运算的复合有限域求逆器及其求逆方法 | |
CN101276268B (zh) | 一种计算整数的模数除法的余数的方法 | |
CN113672196B (zh) | 一种基于单数字信号处理单元的双乘法计算装置和方法 | |
CN104951279A (zh) | 一种基于NEON引擎的向量化Montgomery模乘器的设计方法 | |
Laxman et al. | FPGA implementation of different multiplier architectures | |
CN103699729B (zh) | 模乘法器 | |
Meghana et al. | High speed multiplier implementation based on Vedic Mathematics | |
CN108268243B (zh) | 一种基于查找的复合域乘法装置 | |
CN103023519B (zh) | 一种费马数变换的方法和装置 | |
Sahoo et al. | A high speed FIR filter architecture based on novel higher radix algorithm | |
Patil et al. | High speed-low power radix-8 booth decoded multiplier |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |