具体实施方式
一些素数具体这样的特性:大于该素数的二进制整位数对该素数取模的结果,等于若干个小于该素数的二进制整位数的加权和对该素数取模,并且权值为整数。换言之,具备上述特性的BP位二进制数素数P,满足式1:
式1中,BWm为自然数;Nm=(B
P+mod(B
P,BWm))/BWm;m为0或者正整数;n是取值范围为从0到(Nm-1)的整数;对n的每个取值,ω
Nm+m,n为整数。对任意一个m,2
(Nm+m)*BWm为大于素数P的二进制整位数;
2
n*BWm为小于素数P的二进制整位数。当m取值为0、1、以及任意一个其他正整数时,每个2
(Nm+m)*BWm对P取模,都可以表示为Nm个2
n*BWm的加权和对P取模。
对最大位数为BA位的二进制数A,令Na=(BA+mod(BA,BWm))/BWm;对取值范围为从0到的(Na-1)的整数i,将A的第i*BWm位到第((i+1)*BWm-1)位记为ai(即ai∈[0,2BWm-1]),当BA≥BP时,Na≥Nm,A可以表示为式2:
则可以得到:
设B为Nm*BWm位的二进制数,并且B≡A mod P,b
n为B的第n*BWm位到第((n+1)*BWm-1)位(即b
n∈[0,2
BWm-1]),则
由于对从Nm到(Na-1)的任意整数k,根据式1,
从式3可以得出式4:
由于ωk,n为整数,对具备上述特性的素数P,可以按照式4从ai计算得出各个bn,通过求解B mod P来得到A mod P,从而将取模运算的位数从BA位降低到接近于Nm*BWm位,以加快取模运算的速度。
因此,本说明书的实施例提出一种新的对素数取模的实现方法、和一种新的素域中模乘运算的实现方法,对于满足式1的素数P,提取A的第i*BWm位到第((i+1)*BWm-1)位a
i,以a
i为基础构造Ns个Nm*BWm位的S
t和S
t的权值σ
t,使得σ
t和S
t的第n*BWm位到第((n+1)*BWm-1)位s
t,n满足
通过对S
t的加权和SumS对P取模得到A mod P的运算结果,从而减小了取模运算的位数,在绝大多数实际应用场景中能够极大的加快取模运算的速度,降低资源占用和延迟。
本说明书的实施例可以运行在任何具有计算和存储能力的设备上,如手机、平板电脑、PC(Personal Computer,个人电脑)、笔记本、服务器等设备;还可以由运行在两个或两个以上设备的逻辑节点来实现本说明书实施例中的各项功能。
本说明书的实施例一中,对素数取模的实现方法的流程如图1所示。实施例一的方法用来通过硬件求解最大位数为B
A的二进制数A(即A的取值范围为从0到
对满足式1的B
P位二进制数素数P的取模运算结果。
步骤110,将a
i输入Nm个BWm位的取模加法器,计算Ns个Nm*BWm位的加数项S
t的加权和
其中,Ns为自然数,t为从1到Ns的自然数,σ
t为整数。
如前所述,本说明书的实施例中,通过求解B mod P来得到A mod P。由于式4中σt,n为整数,可以以BWm位的加法器作为取模加法器(为区别实施例二中用于乘法运算中的加法器,将用于取模运算的加法器称为取模加法器),按照式4将ai作为取模加法器的输入项来得到bn,通过Nm个BWm位的独立的级联取模加法器即可得到B。
具体而言,可以构造Ns个Nm*BWm位的加数项St和St的权值σt。对从0到(Nm-1)的每个整数n,将St的第n*BWm位到第((n+1)*BWm-1)位记为st,n,构造Ns个St和St的权值σt的约束条件是:每个st,n或者是ai或者是0,σt为整数,并且σt和st,n满足式5:
在采用Nm个BWm位取模加法器来计算Ns个加数项S
t的加权和
时,对从0到(Nm-1)的每个整数n,从低位起第(n+1)个取模加法器的输入是s
t,n(即或者是某个a
i,或者是0),该第(n+1)个取模加法器计算的加权和是/>
等于/>
即式4中的b
n。而Nm个BWm位取模加法器计算的加权和SumS=B。
可见,换个角度看,构造加数项St及其权值σt是一种能够并行计算出b0到bNm-1,从而得到B的处理方式。对于某个满足式1的素数,可以有很多种构造St及σt的具体方式,本说明书的实施例不做限定,只要满足式5即可。
可以以采用并行进位链的BWm位加法器来组成Nm个独立的级联取模加法器,从而加快计算SumS的速度。
需要说明的是,在采用Nm个BWm位取模加法器来计算SumS时,通常需要在最高位的加法器之前采用另外的加法器来处理可能出现的进位或借位,可参照现有技术实现,不再赘述。
在一个例子中,满足式1的256位素数P256=fffffffe ffffffff ffffffffffffffff ffffffff 00000000 ffffffff ffffffff,A512为512位二进制数,BWm为32,Nm为8,Na为16。对P256,以下等式成立:
P256=2256-2224-296+264-1
2256≡(2224+296-264+1)mod P256
2288≡(2224+2128-264+232+1)mod P256
2320≡(2224+2160+232+1)mod P256
2352≡(2224+2192+296+232+1)mod P256
2384≡(2*2224+2128+296+232+1)mod P256
2416≡(2*2224+2160+2128+2*296-264+232+2*1)mod P256
2448≡(2*2224+2192+2160+2*2128+296-264+2*232+2*1)mod P256
2480≡(3*2224+2192+2*2160+2128+296+2*232+2*1)mod P256
对
设/>
并且B
256≡A
512 mod P
256,则可以得到:
b7=a7+3*a15+2*a14+2*a13+2*a12+a11+a101+a9+a8
b6=a6+a15+a14+a11
b5=a5+2*a15+a14+a13+a10
b4=a4+a15+2*a14+a13+a12+a9
b3=a3+a15+a14+2*a13+a12+a11+a8
b2=a2-a14-a13-a9-a8
b1=a1+a15+2*a14+a13+a12+a11+a1o+a9
b0=a0+2*a15+2*a14+2*a13+a12+a11+a10+a9+a8
按照约束条件:每个st,n或者是ai或者是0,σt为整数,并且σt和st,n满足式5,来构造加数项St及其权值σt。一种满足约束条件的St及其权值σt如表1和式6所示,14个St由a0到a15按照表1中对应于St的行串接而成。
表1
SumS=S1+S2+2*S3+2*S4+2*S5+S6+S7+S8+S9+2*S10-S11-S12-S13-S14 式6
在按照式6计算SumS时,以32位的加法器作为取模加法器,采用8个独立的级联取模加法器。在向取模加法器输入加数项St时,按照表1中的排列将组成该St的ai输入到用于计算对应位数的取模加法器中;对σt为正整数的St,可以将该St加σt次;对σt为负整数的St,可以将该St减σt次。计算完毕后,得到的SumS=B256。
步骤120,将加权和SumS对P取模。
在绝大多数应用场景中,A的二进制位数BA远大于的P二进制位数BP。由于SumS的位数Nm*BWm与BP相当接近,用SumS代替A进行取模运算能够极大的加快取模运算的速度。
取模运算通常采用除法器来进行。当Nm*BWm与Bp的差距很小时,本步骤中也可以采用减法运算来对P取模,即从SumS中重复减去P直至差值小于P,从而可以采用加法器或减法器来得到取模结果。
本说明书的实施例二中,素域中模乘运算的实现方法的流程如图2所示。实施例二的方法用来通过硬件求解特征为素数P、并且P满足式1的素域中的模乘运算结果。
特征为素数P的素域FP包括P个元素,FP=(0,1,…,P-1)。素域中元素的乘法是整数的模P乘法,即若C、D属于FP,则C*D=(C*D)mod P。由于C或D的取值范围为从0到(P-1),C和D均为最大位数为BP的二进制数。
步骤210,采用乘法器阵列和乘积加法器阵列,计算C与D的乘积A。
实际应用场景中通常BP大于单个乘法器的位宽,而C与D的乘积A的最大位宽BA=2*BP,通常也大于单个加法器的位宽,在这种情况下可以采用乘法器阵列和乘积加法器阵列(为区别用于取模运算中的加法器,将用于乘法运算的加法器称为乘积加法器),来计算A=C*D。
具体而言,设每个乘法器的输入位宽为BWpC×BWpD,BWpC和BWpD均为正整数;则乘法器阵列可以由Nc×Nd个这样的乘法器组成,其中Nc=(BP+mod(BP,BWpc))/BWpc,Nd=(BP+mod(BP,BWpD))/BWpD。
设每个乘积加法器的位宽为BWm,乘积加法器阵列可以由Na个这样的独立的级联乘积加法器组合而成。
设u为从0到(Nc-1)的整数,v为从0到(Nd-1)的整数,可以用(u,v)来作为某个乘法器在乘法器阵列中的序号。将C的第u*BWp
c位到第((u+1)*BWp
c-1)位记为c
u(即
),将D的第v*BWp
D位到第((v+1)*BWp
D-1)位记为d
v(即/>
),则可以把c
u和d
v输入第(u,v)个乘法器,该乘法器的输出为部分积PP
u,v,PP
u,v=c
u*d
v,PP
u,v的最大位宽为(BWp
C+BWp
D)。一种乘法器阵列的输入输出示意图如图3所示。Nc×Nd个部分积PP
u,v可以同时计算得出,并行度为Nc×Nd。
将Nc×Nd个PPu,v输入乘积加法器阵列,Na个乘积加法器的输出为A,每个乘积加法器的输出为一个ai。由Na个独立的级联乘积加法器构成的乘积加法器阵列共有Na*BWm个输入位,将每个乘法器输出的部分积PPu,v输入到乘积加法器阵列从低位起的第(u*BWpC+v*BWpD)位到第((u+1)*BWpC+(v+1)*BWpD-1)位,由乘积加法器阵列按照相对应的输入位对Nc×Nd个PPu,v求和,乘积加法器阵列的输出即为A,从低位起第i个乘积加法器的输出为ai。
可以以采用并行进位链的加法器来组成Na个独立的级联乘积加法器,从而加快计算A的速度。
步骤220,将a
i输入Nm个BWm位的加法器,计算Ns个Nm*BWm位的加数项S
t的加权和
a
i为A的第i*BWm位到第((i+1)*BWm-1)位;i为从0到(Na-1)的整数;Na=(B
A+mod(B
A,BWm))/BWm;B
A=2*B
P;Ns为自然数;t为从1到Ns的自然数;σ
t为整数,σ
t和s
t,n满足/>
s
t,n为S
t的第n*BWm位到第((n+1)*BWm-1)位,s
t,n或者等于某个a
i或者等于0。
步骤230,将加权和SumS对P取模。
实施例二中的步骤220和步骤230分别与实施例一的步骤110和步骤120相同,对步骤220和步骤230的详细描述请参见实施例一,不再重复。
需要说明的是,本说明书的实施例一和实施例二既可以采用可编程逻辑阵列FPGA来实现加法器、减法器、和/或除法器等硬件,也可以采用集成电路ASIC来实现上述硬件,还可以采用其他的方式,不做限定。
可见,本说明书的各个实施例中,对于满足式1的素数P,通过计算Ns个Nm*BWm位的加数项S
t的加权和
再计算SumS mod P即可得到A对P取模运算结果,其中S
t及其σ
t基于a
i构造并且使得σ
t和s
t,n满足式5。由于SumS的二进制位数接近P的位数而通常远小于实际应用中A的位数,本说明书的实施例减小了取模运算的位数,极大的加快了取模运算的速度,降低了使用大位数除法器导致的资源占用和延迟。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在本说明书的一个应用示例中,一种FPGA加速卡用来进行SM2算法的解密和生成数字签名。SM2是2010年12月17日发布的椭圆曲线公钥密码算法,SM2采用256位素域P256=fffffffe ffffffff ffffffff ffffffff ffffffff 00000000 ffffffff ffffffff下,椭圆曲线y2=x3+ax+b。在FPGA加速卡中需要实现素域P256中的模乘运算,即计算(C*D)modP256,其中C和D均为素域P256中的元素,其最大位数为256。
一种素域P256中实现模乘运算的FPGA结构如图4所示。
采用160个DSP(Digital Signal Processing,数字信号处理)乘法器来组成乘法器阵列,每个DSP乘法器的输入位宽分别为26位和17位(即BWpc=26,BWpD=17,Nc=10,Nd=16)。以MULu,v来表示第(u,v)个DSP乘法器,将把cu和dv输入MULu,v,得到MULu,v的输出PPu,v=cu*dv,PPu,v的最大位宽为43位;其中u为从0到9的整数,v为从0到15的整数,cu为C的第u*26位到第(u*26+25)位,dv为D的第v*17位到第(v*17+16)位。
将16个位宽为32位的独立的级联加法器组成乘积加法器阵列(即BWm=32,Na=16),将160个PPu,v分别输入到乘积加法器阵列从低位起的第(u*26+v*17)位到第(u*26+v*17+42)位。以ADDpi来表示乘积加法器阵列中从低位起的第i个加法器,其输出为ai,其中i为从0到15的整数,ai为A=C*D的第i*32位到第(i*32+31)位。ADDpi为采用并行进位链的加法器。
将8个位宽为32位的独立的级联加法器组成取模加法器阵列(即BWm=32,Nm=16),以ADDmn来表示取模加法器阵列中从低位起的第n个加法器,其中n为从0到7的整数,ADDmn对应于表1中第n*32位到第(n*32+31)位的一列。按照表1中的各列将ai输入到ADDmn,分别组成14个St,其中t为从1到14的整数。用取模加法器阵列按照式6计算14个St的加权和SumS。ADDmn为采用并行进位链的加法器。
将SumS输入取模运算器MOD,对素数P256取模,输出即为(C*D)mod P256。
与上述流程实现对应,本说明书的实施例还提供了一种对素数取模的实现装置,和一种素域中模乘运算的实现装置。这两种装置均可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为逻辑意义上的装置,是通过所在设备的CPU(Central Process Unit,中央处理器)将对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,除了图5所示的CPU、内存以及存储器之外,上述两种装置所在的设备通常还包括用于进行无线信号收发的芯片等其他硬件,和/或用于实现网络通信功能的板卡等其他硬件。
图6所示为本说明书实施例提供的一种对素数取模的实现装置,用于计算A modP,其中A是最大位数为B
A的二进制数,P为B
P位二进制数素数、并且P满足
Nm=(B
P+mod(B
P,BWm))/BWm;m为非负整数;n为从0到(Nm-1)的整数;ω
Nm+m,n为整数;BWm为自然数;所述装置包括加权和运算单元和取模运算单元,其中:加权和运算单元用于将a
i输入Nm个BWm位的取模加法器,计算Ns个Nm*BWm位的加数项S
t的加权和/>
a
i为A的第i*BWm位到第((i+1)*BWm-1)位;i为从0到(Na-1)的整数;Na=(B
A+mod(B
A,BWm))/BWm;Ns为自然数;t为从1到Ns的自然数;σ
t为整数,σ
t和s
t,n满足/>
s
t,n为S
t的第n*BWm位到第((n+1)*BWm-1)位,s
t,n或者等于某个a
i或者等于0;取模运算单元用于将加权和SumS对P取模。
可选的,所述取模运算单元具体用于:采用减法运算,将加权和SumS对P取模。
可选的,所述取模加法器为采用并行进位链的加法器。
图7所示为本说明书实施例提供的一种素域中模乘运算的实现装置,用于计算(C*D)mod P,其中C、D为所述素域中的元素,P为所述素域的特征;P为B
P位二进制数且P满足
Nm=(B
P+mod(B
P,BWm))/BWm;m为非负整数;n为从0到(Nm-1)的整数;ω
Nm+m,n为整数;BWm为自然数;所述装置包括乘法运算单元、加权和运算单元和取模运算单元,其中:乘法运算单元用于采用乘法器阵列和乘积加法器阵列,计算C与D的乘积A;加权和运算单元用于将a
i输入Nm个BWm位的加法器,计算Ns个Nm*BWm位的加数项S
t的加权和/>
a
i为A的第i*BWm位到第((i+1)*BWm-1)位;i为从0到(Na-1)的整数;Na=(B
A+mod(B
A,BWm))/BWm;B
A=2*B
P;Ns为自然数;t为从1到Ns的自然数;σ
t为整数,σ
t和s
t,n满足/>
s
t,n为S
t的第n*BWm位到第((n+1)*BWm-1)位,s
t,n或者等于某个a
i或者等于0;取模运算单元用于将加权和SumS对P取模。
可选的,所述乘法器阵列包括Nc×Nd个输入位宽为BWpC×BWpD的乘法器;BWpC和BWpD均为正整数;Nc=(BP+mod(BP,BWpC))/BWpC,Nd=(BP+mod(BP,BWpD))/BWpD;所述乘积加法器阵列包括Na个位宽为BWm的乘积加法器;所述乘法运算单元包括部分积计算子单元和部分积累加子单元,其中:部分积计算子单元用于将cu和dv输入第(u,v)个乘法器,得到部分积PPu,v;u为从0到(Nc-1)的整数;v为从0到(Nd-1)的整数;cu为C的第u*BWpC位到第((u+1)*BWpC-1)位;dv为D的第v*BWpD位到第((v+1)*BWpD-1)位;部分积累加子单元用于将Nc×Nd个PPu,v分别输入乘积加法器阵列,每个乘积加法器的输出为一个ai,Na个乘积加法器的输出为A。
可选的,所述取模运算单元具体用于:采用减法运算,将加权和SumS对P取模。
可选的,所述取模加法器为采用并行进位链的加法器;和/或,所述乘积加法器为采用并行进位链的加法器。
本说明书的实施例提供了一种计算机设备,该计算机设备包括存储器和处理器。其中,存储器上存储有能够由处理器运行的计算机程序;处理器在运行存储的计算机程序时,执行本说明书实施例中对素数取模的实现方法的各个步骤。对对素数取模的实现方法的各个步骤的详细描述请参见之前的内容,不再重复。
本说明书的实施例提供了一种计算机设备,该计算机设备包括存储器和处理器。其中,存储器上存储有能够由处理器运行的计算机程序;处理器在运行存储的计算机程序时,执行本说明书实施例中素域中模乘运算的实现方法的各个步骤。对素域中模乘运算的实现方法的各个步骤的详细描述请参见之前的内容,不再重复。
本说明书的实施例提供了一种计算机可读存储介质,该存储介质上存储有计算机程序,这些计算机程序在被处理器运行时,执行本说明书实施例中对素数取模的实现方法的各个步骤。对对素数取模的实现方法的各个步骤的详细描述请参见之前的内容,不再重复。
本说明书的实施例提供了一种计算机可读存储介质,该存储介质上存储有计算机程序,这些计算机程序在被处理器运行时,执行本说明书实施例中素域中模乘运算的实现方法的各个步骤。对素域中模乘运算的实现方法的各个步骤的详细描述请参见之前的内容,不再重复。
以上所述仅为本说明书的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本说明书的实施例可提供为方法、系统或计算机程序产品。因此,本说明书的实施例可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本说明书的实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。