奎斯扩特减少的制作方法

文档序号:6416681阅读:286来源:国知局
专利名称:奎斯扩特减少的制作方法
技术领域
本发明涉及两个长整数相乘再模第三个长整数的方法和设备。例如在密码处理器中公开密钥算法的执行期间,必须重复地执行这种乘法。
背景技术
因此,就执行所述乘法所花费的时间而言,以一种最有效的方式来执行所述乘法运算是重要的。此外,重要的是能够在通常具有诸如最大字长之类的某些实际限制的计算硬件上有效地执行计算,所述最大字长可以大大小于正在相乘的整数的长度。因此,同样重要的是提供一种计算算法,所述算法可以在有限的硬件上有效地执行乘法运算。
例如,在许多情况下需要使用只能够处理32比特宽度的数据字的硬件来乘1024比特数以至4096比特数。特别是,RSA加密算法目前要求处理1024比特数,其可以增加到4096比特数,用来改善安全性。

发明内容
因此,本发明的目的在于提供一种涉及更少计算的更有效的乘法方法,并且由此可以在现有硬件上更加快速地执行。
依照一个方面,本发明提供了一种用于计算第一数字X和第二数字Y的积P再模N的方法,其中Y被分割为长度均为p比特的j个字,并且X具有(m+n)比特的长度,所述方法包括以下步骤a)初始化乘积寄存器P;b)将Y的j个字的第一个载入到乘法器中;c)将载入的Y的字乘以X,以形成中间积T;d)利用T和P*2p的和来更新乘积寄存器P;e)通过减去值PH(N′/2)来减少乘积寄存器P的内容;f)将Y的j个字的相继一个载入乘法器,并为Y的j个字的每个重复步骤c)至e),其中N′是N的整数倍,以及选择值N′使得(m-1)个最高有效比特等于‘1’,而最低有效比特是‘0’,并且其中PH被选为寄存器中P的(p+2)个最高有效比特。
依照另一方面,本发明提供了一种用于计算第一数字X和第二数字Y的积P再模N的处理器,其中Y被分割为长度均为p比特的j个字,并且X具有(m+n)比特的长度,所述处理器包括a)初始化装置,用于初始化乘积寄存器P;b)载入装置,用于将Y的j个字的第一个载入乘法器;c)乘法器,用于将载入的Y的字乘以X,以形成中间积T;d)更新装置,利用T和P*2p的和来更新乘积寄存器P;e)减少装置,用于通过减去值PH(N′/2)来减少乘积寄存器P的内容;f)控制装置,用于将Y的j个字的相继的一个字载入乘法器,并且为Y的j个字的每个来重复乘法器、更新装置和减少装置的功能,其中N′是N的整数倍,以及选择值N′使得(m-1)个最高有效比特等于‘1’,而最低有效比特是‘0’,并且其中PH被选为寄存器中P的(p+2)个最高有效比特。


现在参照附图并通过举例来描述本发明的实施例,其中图1示出了说明常规的奎斯扩特(Quisquater)减少算法的流程图;图2示出了说明改善的奎斯扩特减少算法的流程图;图3示出了在减少运算之前乘积P及其组成部分PH和PL的布局的示意图;以及图4示出了执行图2算法的流水线处理器的示意图。
具体实施例方式
例如在RSA或者ECC公开密钥运算期间必须成千上万次执行的计算是下述乘积的确定P=X*Y mod N,其中X、Y和N都是长度为(m+n)比特的长整数。依照常规的方式,将长整数X和Y作为p比特字(典型地是32比特字)来处理。可以使用适当大小的乘法器来计算部分乘积,所述乘法器优选的是大小适合处理字长的乘法器,例如p*p乘法器。
正如现在参考图1所述,在常规的奎斯扩特减少方案10中,所执行的计算是P=X*Y mod N′其中N’被选作N的倍数,即N’=/.N,其中/是整数。
此外,专门选择N′,使得m个最高有效比特是‘1’,并且N′是(n+m)比特宽原文P3第30行乘积P及其减少模数N’是依照以下算法计算的B=2p(例如p=32)Y=Σi=0j-1yi*Bi]]>其中yi是Y的第i个p比特字,而j是Y中p比特字的数目(即j*p=(m+n))。
P=0;for i=j-1 downto 0{ T=X*y(i)P=P*B+TP=P-(PH*N′)//P的减少if msb(P)=1 then P=P-N′}参考图1,将P初始化为零(步骤11),并利用控制参数i=(j-1)来初始化for循环10a(步骤12)。
在步骤13,中间积T被计算为X*y(i)。X是(n+m)比特宽,y(i)是p比特宽,所以乘积T是(n+m+p)比特宽。这可以使用(n+m)*p比特乘法器来进行一遍计算,或者可以使用较小的乘法器以分段的方式来处理X。例如,如果还将X分为j个p比特字,那么可以使用p*p比特乘法器来计算X*y(i)。因为稍后描述的其他原因,所以优选的是使用(p+1)*p比特乘法器。
在for循环10a的每个周期中,P开始是(n+m)或者更少比特宽,所以乘积P*B是(n+m+p)比特宽。在加上T(步骤14)之后,P在减少运算15以前至多是(n+m+p+1)比特宽。此时,P可以被写为PH.2n+m+PL,其中PH是P的高(p+1)比特,而PL是P的剩余低(m+n)比特。对于模数减少来说,P的大小可以通过减去N′的倍数来减少,在第一次减少运算中包括减去PH*N′。
在第一次减去(PH*N)之后,P将至多是(m+n+1)比特宽。当最高比特是1(在步骤16进行检验)时,那么需要附加的减法运算P=P-N’(步骤17),其将P在长度上再次减少到(m+n)比特。此刻,i的值被减少(步骤18),并且重复循环10a直到在步骤19的控制下完成j个周期。
以这种算法,在每个循环10a中的P的减少需要检验(步骤16),看看是否需要附加的减法运算(步骤17)。在典型的实现方式中,m是大的,并且几乎不需要步骤17的附加减法运算P=P-N′。因此,检查其必要性的步骤16的操作很大程度上是浪费的操作。
可以表明,当至少所有高(m+n)-(p+1+n)即m-p-1比特是‘1’时,将需要附加的减法运算。这种情况发生的概率是2-(m-p-1)。此外,剩余(m+n)比特的总和还必须考虑到溢出。溢出发生的概率是(2(m+n)-1)/2(m+n+1),其对于m和n的所有通常值可以由0.5来近似。因此,需要附加减法步骤17的总概率是2-(m-p-1)*0.5=2-(m-p)。
在典型的应用中,m=63并且p=32,因此必须执行附加减法运算的场合的次数通常在2×109中只有一次。
因此可以看出,检验附加减法是否是必需的必要逻辑的结合对于几乎不需要的事件带来了相当大的处理开销。
尤其当使用流水线乘法器执行算法10时,可以看出直到减少运算(步骤15至17)结束才可以开始启动新的乘法运算(步骤13和14)。这是因为必须确立(步骤16)是否需要进一步的减少运算(步骤17),所述确立是在下一乘法运算开始以前通过检验P的最高有效比特来实现的。
参考图2,现在描述对图1的算法10的修改20,其中专门选择了N′的值,以便确保在每个周期结束时,在不需要附加减法运算的情况下P的最大长度不会大于(m+n)比特。
由于在初始减少运算之后不需要检验P的最高有效比特,并且不需要流水线处理器在开始下一周期的乘法运算之前等待减少运算的结束,所以这样做提供了可观的处理优势。
N′被再次专门选择为m+n比特整数,但是其中m-1个最高有效比特是‘1’,而最低有效比特是‘0’,以便N′是偶数P6页15行乘积P及其减少模数N′是依照以下算法计算的,其中Y被分成每个长度为p比特的j个块,所述算法为B=2p(例如p=32)Y=Σi=0j-1yi*Bi]]>其中yi是Y的第i个p比特字,以及j是Y中p比特字的数目(即j*p=(m+n))。在此方案中,p≤m-3。
P=0;for i=j-1 downto 0{ T=X*y(i)P=P*B+TP=P-PH(N′/2)//P的减少}参考图2,将P初始化为零(步骤21),并且利用控制参数i=(j-1)来初始化for循环20a(步骤22)。
在乘法步骤23,中间积T被计算为X*y(i)。X是(n+m)比特宽,y(i)是p比特宽,所以乘积T是(n+m+p)比特宽。这可以使用(n+m)*p比特乘法器来进行一遍计算,或者可以使用较小的乘法器以分段的方式来处理X。例如,如果X还被分为j个p比特字,那么X*y(i)可以使用p*p比特乘法器或者(p+1)*p比特乘法器来计算。然而,由于稍后讨论的原因,所以在优选的实施例中,当依照j个字、x(k)和y(i)来处理X和Y时,则使用(p+2)*p比特乘法器,其中i=0...(j-1)且k=0...(j-1)。
在for循环20a的每个周期中,P开始是(n+m)或者更少比特宽,所以乘积P*B是(n+m+p)比特宽。在步骤24,所述P寄存器通过加上T来更新。在加上T(步骤24)之后,P在减少运算25以前至多是(n+m+p+1)比特宽。
此时,P可以被写为PH*2(n+m-1)+PL,其中PH是P的高(p+2)比特,而PL是P的剩余低(m+n-1)比特。将因数k=PH/2用作N′的乘数的估计值,所述N′用于减少运算25。在这种情况下,减少的P’=P-(PH/2)*N’,或者如在步骤25中的P=P-PH*N’/2。因为PH可以是奇数,所以选择N′为偶数以便使得N′可被2整除。
在第一次减去PH*N’/2之后,P无论在何种情况下都是(m+n)比特宽。因此,不同于图1的算法,不需要最高有效比特的检验或者进一步的减法运算。此刻,i的值被减少(步骤28),并且重复循环20a直到在步骤29的控制下完成j个周期。
在当前的优选实施例中,步骤25实际上是作为加法运算来执行的,并且通过使用以下算法实现P=P+PH*M,其中在其二进制补码形式中M=-N′/2。
这种加法还可以被分为多个字(例如p比特的j个字)。更一般地,如果P被分为大小为p的q个字,那么对于每个字来说,P(k),其中k=0...(q-1)为{C(k),R(k)}=P(k)+PH*M(k)+C(k-1)其中P(k)是P的第k个字,M(k)是M的第k个字,R(k)是计算结果的最低有效字,而C(k)是乘法结果的高的剩余比特(最高有效字),其在对下一有效字的后续计算中被添加为C(k-1)。以下给出通过步骤25适当减少P的证据,以便使得P始终是非负的并且始终被减小到(m+n)比特的最大长度。
P是非负的当N’处于最大时P处于最小,即N′=2m+n-2.
那么我们必须证明P′>0。
P=PH.2n+m-1+PL-PH.(2m+n-2)/2=PL+PH.
因为PL和PH都是非负的,所以P’也是非负的。
P是(m+n)比特宽当N′处于最小时P处于最大,即,N′=2m+n-2n+1.
P=PH.2n+m-1+PL-PH.(2m+n-2n+1)/2=PL+PH*2nPL是(m+n-1)比特宽PH*2n是(p+2+n)比特宽因为p≤m-3,所以P至多是(m+n)比特宽。
如上所述,条件是m≥p+3。为了容易地计算PH,优选的是m+n应该是p比特的倍数。那么,根据所述添加的进位、所述添加的最高有效字以及第二高有效字的最高有效比特来计算PH。
图3中示出了在最大(n+n+p+1)比特的相乘级P=P*B+T之后P的布局。PH是使用Pn+m-1、Pn+m、Pn+m+1、...Pn+m+p、Pn+m+p+1位置的比特来确定的。
当质数N是160比特或者更小时,那么对于32比特系统(p=32)来说,用来计算的32比特字的数目是7。因此,m还可以选作64,而不会损失性能。
对于具有157比特或者更少长度的质数N来说,并且对于具有158和160比特之间的长度的一些质数来说,可以选择N’(=197比特),以便使得高(m-1)比特全部是‘1’。这意味着用来计算的字的数目是6而不是7。因为PH的长度是(p+2)比特,所以在优选的实施例中使用了(p+2)*p乘法器,而不是最低要求的p*p乘法器。在这种情况下,无须分解N′与PH的乘法并且减少了乘法的次数。
参考图4,现在描述实现图2的算法的示例性流水线处理器40。在处理器40中,所有运算数(X、Y和乘积P,在图4中称为“Z”)在处理期间被存储在存储器41中,并且依照在输入“A”上提供的存储器地址来访问,所述输入“A”如将要描述的由指针寄存器提供。将数据从数据线“Dout”上的存储器41中读出,并且写入数据线“Din”上的存储器中。使用诸如状态机(未示出)之类的适当的控制电路来保持处理器40的正确的运算顺序。
将运算数X的字x(k)以XPtr寄存器42X指向的地址存储在存储器41中。同样,将运算数Y的字y(i)以YPtr寄存器42Y指向的地址存储在存储器41中。将乘积和运算数Z的字z(k)以ZPtr寄存器42Z指向的地址存储在存储器中。将运算数和乘积中的字位置的值i和k存储在相应的计数器XCnt、YCnt和ZCnt中,这些计数器分别在43X、43Y和43Z处示出。XPtr、YPtr和ZPtr中的地址可以表明基址加上偏移量,所述偏移量可以从计数器XCnt、YCnt、ZCnt中推导出。
对于每个相关的运算,在指针42和计数器43的控制下从存储器41中检索X、Y和Z的下一字,并且将X、Y和Z的下一字分别存储在以44X、44Y和44Z标记的寄存器XReg、YReg和ZReg的其中一个中。每当取出一个字给寄存器44时,相应地增加或者减少相应的计数器43。
字X、Y或者Z的每个乘法结果R的最低有效字被传递至RReg寄存器44R,并且存储在存储器41中由标记为42R的指针RPtr所表示的地址处。所述进位比特,即结果的最高有效字C被传递至CReg寄存器44C,以备后续乘法使用。
接收到字的乘法器45根据需要为每个乘法运算输入x(k)、y(i)、z(k)和c(k)。
在新的for循环20a(图2)开始的时候,将CReg初始化为0。然后,在每次乘法时(即对于在for循环内步骤23和24中的每个值k而言),将先前结果的最高有效字(C(k-1))添加到x(k)和y(i)的第k次乘法中。可以看到,对于每个for循环20a,对i更新一次,然而对于X的j个字的每个来讲,在for循环20a的每一遍都更新k。步骤23(T=X*y(i))和步骤24(P=P*B+T)被有效地组合,但是对所有x(k)按照逐字地顺序来执行。
在大多数情况下,输入至乘法器(步骤24)的z(k)与先前在寄存器44R中存储的R相同,偏移一个字(乘以B=2p),但不是在减少步骤25期间。
计数器43递减计数用于每个系列乘法的字的数目。当然,计数器43X和43Z在每遍for循环20a时从k=(q-1)...0开始递减计数,同时计数器43Y在每遍for循环20a时减少一次。因此在每遍for循环20a之后复位计数器43X和43Z。在优选的实施例中可以组合计数器43X和43Z。
在每个系列k=(q-1)...0结束时,将再有一个与x(k)=0的乘法,其将乘法运算减少至R(k)=z(k)+C(k-1),这是要存储的最后结果。在最后的结果中,C(k)将始终是0。然后,可以开始与不同算子的减法步骤(步骤25)(或者如上所述的等效的添加)。这可以使用相同的乘法器45来执行。
在本发明中,在减少步骤25期间,X和Y的下一值可以始终被载入,但是在图1的常规方案中因进一步减少步骤17的可能性而不是这样的情况。
其他实施例在所附权利要求书的范围内。
权利要求
1.一种用于计算第一个数字X和第二个数字Y的积P再模N的方法,其中Y被分割为长度均为p比特的j个字,并且X具有(m+n)比特的长度,所述方法包括以下步骤a)初始化(21)乘积寄存器P;b)将Y的j个字的第一个载入乘法器;c)将所载入的Y的字乘以(23)X以形成中间积T;d)利用T和P*2p的和来更新(24)乘积寄存器P;e)通过减去值PH(N’/2)来减少(25)乘积寄存器P的内容;f)将Y的j个字的相继一个载入乘法器,并且为Y的j个字的每个重复步骤c)至e),其中N’是N的整数倍,而选择值N’以便使得(m-1)个最高有效比特等于‘1’,并且最低有效比特是‘0’,以及其中将PH选为寄存器中P的(p+2)个最高有效比特。
2.如权利要求1所述的方法,其中所述第二个数字Y在长度上也是(m+n)比特。
3.如权利要求1或者2所述的方法,还包括选择m≥p+3的步骤。
4.如前述任一项权利要求所述的方法,还包括选择(m+n)作为p比特的倍数的步骤。
5.如前述任一项权利要求所述的方法,还包括使用(p+2)*p乘法器(45)来执行乘法步骤并用于导出值PH(N’/2)的步骤。
6.如前述任一项权利要求所述的方法,其中载入乘法器中的Y的j个字的第一个是最高有效字,而j个字的相继的字是依照有效性递减的顺序被载入的。
7.如前述任一项权利要求所述的方法,在流水线处理体系结构中执行,其中在完成先前周期的减法步骤e)(25)之前,从步骤c)至e)开始相继周期的乘法步骤(23)。
8.一种用于计算第一个数字X和第二个数字Y的积P再模N的处理器(40),其中Y被分割为每个长度为p比特的j个字,并且X具有(m+n)比特的长度,所述处理器包括a)初始化装置,用于初始化乘积寄存器P(41);b)载入装置(42Y,43Y,44Y),用于将Y的j个字的第一个载入乘法器(45);c)乘法器(45),用于将载入的Y的字乘以X以形成中间积T;d)更新装置(44R),用于利用T和P*2p的和来更新乘积寄存器P(41);e)减少装置(45),用于通过减去值PH(N’/2)来减少乘积寄存器P的内容;f)控制装置(42Y,43Y,44Y),用于将Y的j个字的相继的字载入乘法器(45),并且为Y的j个字的每一个重复乘法器、更新装置和减少装置的功能,其中N′是N的整数倍,而选择值N′以便使得(m-1)个最高有效比特等于‘1’,并且最低有效比特是‘0’,以及其中将PH选为寄存器中P的(p+2)个最高有效比特。
9.如权利要求8所述的处理器,其中所述第二个数字Y在长度上也是(m+n)比特。
10.如权利要求8或者9所述的处理器,其中m≥p+3。
11.如权利要求8至10中任一项所述的处理器,其中(m+n)是p比特的整数倍。
12.如权利要求8至11任一项所述的处理器,其中所述乘法器(45)是(p+2)*p乘法器,其也适合于向减少装置(45)提供PH(N’/2)的值。
13.如权利要求8至12的任一项所述的处理器,其中所述载入装置(42Y,43Y,44Y)适于将Y的最高有效字作为Y的j个字的第一个载入乘法器(45),并且依照有效性递减的顺序载入j个字的相继的字。
14.如权利要求8至13任一项所述的处理器,在流水线处理体系结构中实现,其中在减少装置(45)完成先前周期的P中内容的减少之前,乘法器(45)开始乘法运算以获得相继周期的T的新值。
15.一种计算机程序产品,包括计算机可读介质,在所述计算机可读介质上具有适当的计算机程序代码装置,其在将所述程序载入到计算机上时使得计算机执行如权利要求1至7的任一项所述的过程。
全文摘要
一种用于计算第一数字X和第二数字Y的积P再模N的方法以及设备,其中Y被分割为长度均为p比特的j个字,并且X具有(m+n)比特的长度,对Y的连续的j个字进行循环操作,执行所形成的中间积的中间模数的减少。使用特别选择的N的倍数的N’,以便只有基于N’的中间积的单个减少来确保中间积P在每个周期结束时从未长于(m+n)比特。N’是N的整数倍,并选择值N’,以使得(m-1)个最高有效比特等于‘1’,而最低有效比特是‘0’。
文档编号G06F7/60GK1682179SQ03822343
公开日2005年10月12日 申请日期2003年9月10日 优先权日2002年9月20日
发明者G·T·M·胡伯特 申请人:皇家飞利浦电子股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1