带有查询表的乘法器的制作方法

文档序号:6422504阅读:218来源:国知局
专利名称:带有查询表的乘法器的制作方法
技术领域
本发明涉及用于高效率地执行长整数的模乘的方法及装置。
在电子器件中越来越多的密码算法的应用要求快速高效地执行长整数模乘。例如,智能卡及其它电子器件使用多种加密协议例如RSA,以及其它基于椭圆曲线和超椭圆计算的协议。作为基本要求,所有这些协议具有执行形式为R=X.Y mod N的长整数模乘法的能力。
典型地,对于协议例如RSA,长整数X和Y为1024位,甚至是2048位的整数,且为了完成加密或解密运算,所述乘法运算必须被执行数百或数千次。因此,我们希望执行这些运算的加密器件能够使用高速乘法器迅速执行长整数乘法。
通常,设计用于快速执行这种乘法的电子器件消耗大量功率,这对于要求具有低功耗的器件,例如智能卡和其它便携式电子器件来说是不合乎要求的。
因此,本发明的一个目的是提供一种用于在装置中以减小功耗的方式执行长整数模乘的方法。
根据一个方面,本发明提供了一种方法,用于执行整数X和Y的模乘来得到结果R,其中R=X.Y mod N,在乘法引擎中,包含下述步骤(a)将X分段为具有第一预定位数k的第一多个字xn;(b)将Y分段为具有第二预定位数m的第二多个字yn;(c)在预先计算电路中预先计算X的字xn的倍数,并使用所述预先计算的倍数来导出X的字xn与Y的各字yn的积;(d)计算中间结果Rj作为从所述预先计算倍数导出的累积和;(e)对于X的各连续字,重复预先计算以及计算的步骤,来为每个第一多个字xn产生连续的中间结果Rj;和(f)将各中间结果Rj作为输出来形成最终结果。
根据另一方面,本发明提供了一种装置,用于执行整数X和Y的模乘,来生成结果R,其中R=X.Y mod N,该装置包含用于将X分段为第一多个字xn的装置,每个字具有第一预定位数k;用于将Y分段为第二多个字yn的装置,每个字具有第二预定位数m;一个预先计算电路,用于预先计算X的字xn的倍数,并使用所述预先计算的倍数导出X的字xn与Y的各字yn的积;用于计算中间结果Rj的装置,所述中间结果Rj作为由所述预先计算的倍数导出的累积和;和控制装置,用于控制预先计算的重复,并且为X的各连续字计算中间结果,来为各第一多个字xn产生连续中间结果,Rj。
根据另一方面,本发明提供了一种计算电路,用于提供整数x的各多个倍数来形成积x.y,该电路包含加法器及位移电路,用于导出x的多个基本倍数;多个寄存器,用于存储x的至少数个所述多个基本倍数;多个复用器,每个复用器接收x的所述基本倍数,各复用器具有用于接收所选y字的所选择位的选择线;和一个累积电路,用于接收来自于各复用器的输出,并根据用作各自复用器选择线的输入的y字部分的数值有效性将所述输出组合。
现在通过实例并参考附图描述本发明的实施例,其中

图1示出了乘法器中的预先计算电路,该电路从所选择的x的基本倍数中产生x.y的积,图2示出了如图1所示电路的运行的定时图,图3示出了用来替换如图1所示电路的可选择的复用器/加法器电路,和图4示出了加法器的优选配置的示意图。
为了计算X.Y mod N的积,其中X和Y为长整数变量,例如达到1024或2048位的长度,所述长整数变量X和Y被分成较小的“字”,例如长度为32位。在下述的优选实施例中,X被分为长度为64位的字,Y被分为长度为16位的字。
首先,X被分为n个字,通常每个字的长度为k,即X=xn-1Bxn-1+xn-2Bxn-2+...+x0]]>
其中Bx=2k。在一个实例中,k=32,在另一个实例中k=64。
以这种方式,X被分为长度为k位的多个字。结果R就如下所示计算因此,Rj=(Xn-j-1Y+Rj-1Bx)mod N首先,我们将xn-1与全部的Y相乘,并计算它的模。结果为R0。其次,我们将xn-2与全部的Y相乘,将结果于Z0=R0·Bx相加,并计算模N归约。结果为R1。再次,我们将xn-3与全部的Y相乘,将结果与Z1=R1·Bx相加,并计算模N归约。结果为R2。此过程被重复,直到我们利用了X的所有的字,x0为要处理的X的最后一个字,来获得最终结果R=Rn-1。但是,从应用角度来看,用于长度为1024位的Y的乘法器不是我们期望的。因此,我们还需要将Y以及Rj分解为较小的“字”,例如长度为32位或16位。因此,基本乘法Rj=(Xn-j-1+Zj-1)mod N也被分解,其中Zj-1=Rj-1Bx。
我们将Y以及Rj分为长度为m位的字,即,By=2m Rj=rj,n-1Byn-1+rj,n-2Byn-2+...+rj,0]]>以这种方式,Y被划分为长度为m位的多个字。因此对于Rj的计算,我们进行下述运算 By·cj,0+rj,0=xn-j+1·y0其次,我们将Xn-j+1与y1相乘,并与前位进位字cj,0相加。此外,我们还加上z0=rj-1,0。结果再次被分为两个部分,长度分别为k位和m位低部分rj,1,以及高部分cj,1Bycj,1+rj,1=xn-j+1·y1+cj,0+z0再次,我们将Xn-j+1与y2相乘,并与前位进位字cj,1相加。此外,我们还加上z1=rj-1,1。结果再次被分为两个部分,长度分别为k位和m位低部分Rj,2(此处原文有错误,应该是rj,2),以及高部分cj,2Bycj,2+rj,2=xn-j+1·y2+cj,1+z1此过程被重复,直到我们进行与yn-1的最后一次乘法,即我们将Xn-j+1与yn-1相乘,并与前位进位字cj,n-2相加。此外,我们还加上zn-2=rj-1,n-2。结果再次被分为两个部分,长度分别为k位和m位低部分rj,n-1,以及高部分cj,n-1Bycj,n-1+rj,n-1=xn-j+1·yn-1+cj,n-2+zn-2最后一步为cj,n-1与zn-1的加法rj,n-1=cj,n-1+zn-1。
通常来说,可以看到,我们计算X的第一字与Y的各字的积,并计算中间结果Rj作为从各存储的积导出的累积和。
在更通常的意义上,所述计算的执行是通过(i)得到积,x.y;(ii)将进位字cj与前一项(当然,当计算第一项时为零)相加;(iii)将对应项z与前一中间结果(当然,当计算至少第一个Rj时也为零)相加;(iv)将结果分段为一个低阶m位字和一个高阶k位进位字;(v)对于每个存储积重复步骤(i)至(iv);和(vi)在使用过所有存储积之后,通过将最终进位字与来自于前一中间结果的对应项相加得到最终项。
现在完成了Rj,且Rj大于变量Y,该变量从X的一个字长度中导出。Rj的长度在模N减法中最好被一个字归约,且归约后的结果在计算随后的Rj+1期间被用作zj。
上述计算描述了通常的步骤,其中X字(xn)的长度与Y字(yn)的长度相同,即Bx=By。
X字与Y字的长度可能不相同。例如,如果k/m>1,k=64且m=16,那么Bx=By4,]]>于是1.z的加法必须被移动k/m(=4,在此例中)个字,而不是1个字。换句话说,在第一个k/m(=4)乘法期间,z=0。因此,在上述步骤(iii)中,在对应项z的加法中,该对应项来自于前一中间结果Rj-1,所述‘对应项’与前一中间结果Rj-1相比为第四个较低有效字,而不是来自于前一中间结果的邻近较低有效字。
2.在步骤(ii)中使用的进位字cj,ik/m倍(=4)长于(长度为4m位)结果rj,i(长度为m位)。
3.上述最后一步(vi)包含进位字与z字(来自于前一中间结果对应的项)的k/m=4次加法。在每次加法中,进位字归约m位。
因此,在基本运算中,省略所有的指数B.c+r=x.y+c+z在第一次运算期间,c=0在第一次k/m运算期间,z=0。
在最后一次k/m运算期间,y=0。
在Rj的每次计算的所有计算期间,x保持恒定。x字的值在每次中间结果Rj的迭代计算中保持恒定的事实可被用于充分减少执行X与Y模N的长字乘法中所需的处理功率。
在执行常规32位与32位的乘法中,必须将32个积、进位以及z项相加。因此,存在34项的加法,每个加法长度为32位。这种加法,当高速执行时,需要大量功率。
应该注意到,在前述算法中,对于每个中间项Rj,一个被乘数(即x)在整个序列中保持恒定。
因此,在开始计算Rj之前,多个倍数xn-j+1被预先计算并存储或锁存。回到上述实施例,对于将长字X分段为64位字(x),将Y分段为16位字(y),使用依据多种不同设计的预先计算电路是有效的。
在第一实施例中,预先计算电路10包含一个查询表11,该查询表和存储在各自行(或列)中x的各可能的倍数一起被预先载入。查询表可使用适当的加法电路构成。所述查询表可通过使用适当的读取行(或列)地址为每个x.y倍数访问。
但是,这种电路在构成具有所有可能x.y积(对于16位的y字的所有积可能为65536个)的查询表中可能没有效果。
优选的一种技术是使用预先计算电路,该电路计算并存储所选择的x的基本倍数,并通过与所选择的x的基本倍数进行适当的移位和/或加法运算确定x‘闲置’的所有其它数值。
这种预先计算电路的一个实施例如图1所示,适合预先计算所有64位x字与16位y字的倍数。预先计算电路10包含六个寄存器21...26(全部表示为寄存器20),所述寄存器用于存储预先选择的x的倍数;两个加法器31、32(全部表示为输入加法器30),所述加法器用于导出预定的x的基本倍数。
三个复用器41、42、43(全部表示为输入复用器40),所述复用器用于在预先选定的x的基本倍数的计算期间为输入加法器30、31提供输入。
七个位移器51...57(全部表示为位移器50),所述位移器用于调整预选的x的基本倍数;四个输出复用器61...64(全部表示为复用器60),所述复用器用于选择作为输出的适当的x的基本倍数;和一个输出加法器70,用于组合x的输出倍数来获得所需的x.y积。
各寄存器20存储预先选择的x的基本倍数。寄存器21存储数值1x。寄存器23存储数值3x,该数值由输入加法器31借助于输入复用器41和42组合1x及2x提供。寄存器22存储数值5x,该数值由加法器31借助于输入复用器41和42组合3x及2x提供。倍数7x由输入加法器31直接提供,通过在所有其它次数中组合来自于输入复用器41和42的4x和3x,目的是节省一个寄存器。寄存器24存储9x的数值,该数值由输入加法器32借助于输入复用器43合并8x+1x提供。寄存器25存储11x的数值,该数值由输入加法器32提供,通过组合来自于输入复用器43的8x与3x。寄存器26存储13x的数值,该数值由输入加法器32借助于输入复用器43组合8x和5x提供。倍数15x由输入加法器32直接提供,通过在所有其它次数中组合7x(来自于加法器31)与8x,来节省另一个寄存器。
偶数值没有必要存储在任何寄存器中,因为它们可以通过适当的基本倍数寄存器20使用适当的某一位移函数50进行简单左移位获得。特别的,2x是通过将1x寄存器21的内容1进行1位左移位获得的;4x是通过将1x寄存器21的内容进行2位左移位获得的;6x是通过将3x寄存器23进行1位左移位获得的;8x是通过将1x寄存器21的内容进行3位左移位获得的;10x是通过将5x寄存器22的内容进行1位左移位获得的;12x是通过将3x寄存器23进行2位左移位获得的;14x是通过将加法器31的输出进行1位左移位获得的。这些位移函数可通过寄存器20对于复用器60的输入的适当接线完成。
因此,总的来说,用于基本倍数的寄存器(或存储空间)的数量已经从16减少至仅有6个。在优选电路中,所述x寄存器21、nx寄存器22以及mx寄存器26被用作触发器,其它寄存器23、24、25为锁存器。
这十六个x基本倍数由四个输出复用器60为输出选择,各复用器接收作为选择输入66的16位y数值的各自四位。如图所示,输出复用器61接收y字的4个最低有效位(3:0);输出复用器62接收y字接下来的4个有效位(7:4);输出复用器63接收y字接下来的4个有效位(11:8);输出复用器64接收y字的4个最高有效位(15:12)。输出复用器60各自的输出P0、P1、P2、P3(全部表示为输出67)均关于彼此移位,来提供输出的正确相关有效性。特别的,复用器61提供P0作为x.y积的位(67:0);复用器62提供P1作为x.y积的位(71:4);复用器63提供P2作为x.y积的位(75:8);复用器64提供P3作为x.y积的位(79:12)。当然,各输出必须由加法器70组合来获得x.y的正确数值。
输出P0...P3的组合最好在加法器70中相加,同时作为数值z(来自于前一中间结果的对应项)以及来自于前一项的进位字c,来得到结果r和新的进位c。
所述预先计算电路或查询表必须提供范围在0,x...15x之间的x的倍数。参考图2,可以看到图1所示的预先计算电路在4个时钟周期内能够产生所有x的基本倍数。
在第一周期的起点,新的x数值被记录在1x寄存器中。在第一周期期间,所述nx加法器31与x和2x相连,mx加法器32与x和8x加法器相连。在第二周期的起点,结果3x=x+2x被存储在nx寄存器22中,结果9x=x+8x被存储在mx寄存器中。
在向第二周期的过渡期间,3x从nx寄存器22转移到3x寄存器23中,9x从mx寄存器26转移到9x寄存器24中。在周期2期间,nx加法器31与x及4x相连,mx加法器32与nx寄存器22及8x相连,因此加法器31、32分别计算5x=x+4x以及11x=3x+8x。
在向第三周期的过渡期间,结果5x被存储在nx寄存器22中,11x被存储在mx寄存器26中。在第三周期的第一部分期间,9x从mx寄存器26转移到9x寄存器24中。在第三周期期间,nx加法器31与3x及4x相连,mx加法器32与nx及8x相连,因此加法器31、32分别计算7x=3x+4x以及13x=5x+8x。
在第四周期期间,mx加法器32与nx加法器31的输出以及8x相连,因此mx加法器32计算15x=7x+8x。加法器的输出(7x及15x)不被存储,但是被用作输出复用器60的直接输入。
更可取地,为了最优效率,在中间结果Rj的计算的最后一部分期间,用于产生x的16个倍数的所述四个时钟周期被采用,其间应该注意到累积和计算中的最终项不需要使用x.y积,仅将z与c项相加(因为对于最终项x=0)。在此期间,复用器60的输出P0...P3必须被置为零,例如通过在各情况下选择‘0’输入。
从前面的描述中,可以看出以多种方式改变预先计算电路的配置是可能的。例如,复用器的数量可增加为八个,每个复用器接收y字的2位输入。相似地,使用y字的3位输入需要五个复用器以及一个标准与-积。
通常情况下,预先计算电路使用多个复用器,各复用器接收x的基本倍数,各复用器具有用于接收y字的所选位的选择线,以及求和电路,该求和电路用于接收来自于各复用器的输出,并根据被各自复用器选择线用作输入的y字部分的数值有效性将它们组合。
参考图3,示出了输出复用器160的一种可选择的形式。在图1所示的实施例中使用的输出复用器60的类型的潜在缺点在于,甚至当输出没有被选择一在一个时刻只需要各复用器61...64的一个输出,并且在多数情况下不需要特定复用器的输出时,所述复用器将会切换。例如,当从11x切换到12x时,只有复用器61的输出发生变化。复用器62、63和64仍将需要零输出。各复用器的切换导致不必要的功率损耗。因此,复用器160的可选择的电路如图3所示。
各基本倍数x...15x被作为输入提供,且被各自选择线S1...S15选择。x的必要的基本倍数被逻辑门161...167选择(当需要时被部分求和)。来自于逻辑门161...167的输出还由加法器171和181求和来在输出190处产生最终输出x.y。在此电路中,当选择输入变化时,只有受影响的逻辑门161...167被切换。例如,当x倍数需要从1x变为5x时,只有逻辑门161和163被切换。逻辑门162和164...167的所有其它输入将不会被切换,使得功率损耗减少。在控制输入中只有最少数量的逻辑门对于给定变化被切换。
因此,在通常情况下,可以认识到多个输出复用器包含一系列逻辑门161...167,各逻辑门与第一输入Xi相连,来接收x的各基本倍数,以及一个选择线S1,用于在逻辑门的输出完成基本倍数的确定。所述求和电路包含一系列加法器(部分在各逻辑电路161...167以及电路171,181中),所述加法器用于接收所述系列逻辑门的所有确定的输出,并根据用作复用器选择线的输入的y字部分的数值有效性将它们合并。
加法器70的优选配置为进位存储加法器类型,如图4所示,所述加法器将4个积P0...P3、z项以及进位项c相加。
只有最低有效的16位(R(15:0))被全加器相加。这意味着我们必须相加两个反馈项Cc’以及Cs’(进位项为两者之和)。这些项在16位移位之后相加。
事实上,Cc’(78:0)以及Cs’(78:0)被存储在触发器中。在下一时钟周期中,高部分(Cc’(78:16)以及Cs’(79:16))作为Cc’(62:0)以及Cs’(62:0)被输入至加法器,如箭头所示。Cc’(15:0)以及Cs’(15:0),以及前一进位位ci=R(16),被全加器相加,结果为R(16:0)。
R(15:0)相继存储在适当存储器中,例如RAM。R(16)在下一时钟周期中作为ci相加。
来自于中间结果Rj的Z(15:0)被相继存储在适当存储器中,例如RAM,并从存储器中为各相关运算读取。
权利要求
1.一种用于执行整数X和Y的模乘来产生结果R的方法,其中R=X.Y mod N,在乘法引擎中,包含下述步骤(a)将X分段为具有第一预定位数k的第一多个字xn;(b)将Y分段为具有第二预定位数m的第二多个字yn;(c)在预先计算电路中预先计算X的字xn的倍数,并使用所述预先计算倍数导出X的字xn与Y的多个字yn的积;(d)计算中间结果Rj,作为从预先计算倍数中导出的累积和;(e)对于X的各连续字,重复预先计算和计算的步骤,来为各第一多个字xn生成连续中间结果Rj;和(f)将各中间结果Rj作为输出,来形成最终结果。
2.如权利要求1所述的方法,其中X被分段为n个k位的字,根据表达式X=xn-1Bxn-1+xn-2Bxn-2+...+x0,]]>其中Bx=2k。
3.如权利要求1所述的方法,其中Y被分段为m位的n个字,根据表达式Y=yn-1Byn-1+yn-2Byn-2+...+y0,]]>其中By=2m。
4.如权利要求1所述的方法,其中计算中间结果Rj的步骤包含产生用于加法的连续项x.y+c+z,包含下述步骤(i)读取X的预先计算的倍数,来形成xn.yn积,(ii)将进位字cj与前一项相加;(iii)将对应项z与前一中间结果相加;(iv)将结果分段为低阶m位字和高阶k位进位字;(v)为每一个xn.yn重复步骤(i)至(iv);和(vi)在使用所有xn.yn积之后,通过将最终进位字与来自于前一中间结果的对应项相加形成最终结果。
5.如权利要求4所述的方法,其中计算中间结果的步骤如下所述执行Rj=xn-j+1y0+(xn-j+1y1+rj-1,0)By+(xn-j+1y2+rj-1,1)By2+...+]]>(xn-j+1yn-1+rj-1,n-2)Byn-1+rj-1,n-1Byn]]>
6.如权利要求1所述的方法,其中步骤(f)进一步包含组合所有中间结果Rj来形成R,根据表达式R=((((xn-1Ymod N)Bx+xn-2Y)mod N)Bn+...x0Y)mod N
7.如权利要求4所述的方法,其中步骤(i)包含读取所选择的X的字xn的基本倍数,并将它们合并来获得积xn.yn的步骤。
8.如权利要求7所述的方法,其中步骤(i)、(ii)和(iii)包含将所选择的X的基本倍数、进位字cj、以及对应项z在加法器电路(70)中组合。
9.如权利要求4所述的方法,其中来自于前一中间结果的对应项z为来自于前一中间结果的邻近较低有效字。
10.如权利要求4所述的方法,其中来自于前一中间结果的对应项z为来自于前一中间结果的第(k/m)个较低有效字。
11.如权利要求1所述的方法,其中预先计算的步骤包含下述步骤计算预先选择的X的字的基本倍数,并将所选择的某些基本倍数合并,来形成期望的x.y积。
12.如权利要求4所述的方法,其中X的字的倍数的预先计算在对于前一字的步骤(vi)期间发生。
13.用于执行整数X和Y的模乘来生成结果R的装置,其中R=X.Ymod N,所述装置包含用于将Y分段为第二多个字yn的装置,每个字具有第二预定数量的m位;一个预先计算电路(10),用于预先计算X的字xn的倍数,并使用预先计算的倍数导出X的字xn与Y的各字yn的积,;用于计算中间结果Rj的装置,此中间结果作为从所述预先计算倍数中导出的累积和;和控制方法,用于控制预先计算的重复以及为X的各连续字计算中间结果,目的是为各第一多个字xn产生连续中间结果Rj。
14.如权利要求13所述的装置,其中用于计算中间结果Rj的装置产生用于加法的连续项x.y+c+z,该装置包含(i)用于读取预先计算的X的字x的倍数来形成x.y积的装置(60),(ii)用于将进位字cj与前一项相加的装置(70);(iii)用于将对应项与前一中间结果相加的装置(70);(iv)用于将结果分段为低阶m位字以及高阶k位进位字的装置;(v)控制方法,用于实现重复读取预先计算的倍数,以及进位字与各x.y积的对应项的加法,以及通过将最终进位字与来自于前一中间结果的对应项相加形成最终项。
15.一个计算电路(10),用于提供整数x的各倍数,来形成积x.y,该电路包含用于导出x的多个基本倍数的加法器及位移电路(30,50);多个寄存器(20),用于存储x的至少某些所述基本步骤;多个复用器(60,160),各复用器接收x的所述基本倍数,各复用器具有用于接收所选择的y字的所选择的位的选择线(Y);和一个求和电路(70,161...181),用于接收来自于各复用器的输出,并根据用作各自复用器选择线的输入的y字部分的数值有效性将其组合。
16.如权利要求15所述的计算电路,其中多个寄存器(20)与所选择的x的奇数基本倍数相对应,x的偶数基本倍数被位移线(50)提供给各复用器,该位移线与所选择的某些寄存器相耦合。
17.如权利要求15所述的计算电路,其中多个复用器包含一系列逻辑门(161...167),各逻辑门具有用于接收x的基本倍数的第一输入(xi),以及在其输出完成确定基本倍数的选择线(Si),和求和电路,包含一系列用于接收多个逻辑门的所有确定输出的加法器(161...181),其中,在系列逻辑门中只有对应于选择输入变化的逻辑门在所选择的y字变化期间被切换。
18.一种计算机程序产品,包含计算机可读取介质,其上具有计算机程序编码装置,当所述程序被装入计算机时,用于使得计算机执行如权利要求1至12所述的任何过程。
19.一种计算机程序,由电子数据传输分配,包含计算机程序编码装置,当所述程序被装入计算机时,用于使得计算机执行如权利要求1至12所述的任何过程。
全文摘要
一种用于在乘法引擎中执行整数X和Y的模乘来产生结果R的方法,其中R=X.Y mod N。X被分段为第一多个字x
文档编号G06F7/72GK1717653SQ200380104355
公开日2006年1月4日 申请日期2003年11月11日 优先权日2002年11月29日
发明者G·T·M·哈伯特 申请人:皇家飞利浦电子股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1