CN1729444A - 一种用于计算机***的快速模数运算"emod" - Google Patents
一种用于计算机***的快速模数运算"emod" Download PDFInfo
- Publication number
- CN1729444A CN1729444A CNA038162156A CN03816215A CN1729444A CN 1729444 A CN1729444 A CN 1729444A CN A038162156 A CNA038162156 A CN A038162156A CN 03816215 A CN03816215 A CN 03816215A CN 1729444 A CN1729444 A CN 1729444A
- Authority
- CN
- China
- Prior art keywords
- value
- computing
- modulus
- iteration
- emod
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/60—Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers
- G06F7/72—Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers using residue arithmetic
- G06F7/722—Modular multiplication
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/60—Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers
- G06F7/72—Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers using residue arithmetic
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2207/00—Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F2207/72—Indexing scheme relating to groups G06F7/72 - G06F7/729
- G06F2207/7276—Additional details of aspects covered by group G06F7/723
- G06F2207/728—Additional details of aspects covered by group G06F7/723 using repeated square-and-multiply, i.e. right-to-left binary exponentiation
Landscapes
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Mathematical Physics (AREA)
- General Engineering & Computer Science (AREA)
- Computing Systems (AREA)
- Executing Machine-Instructions (AREA)
- Complex Calculations (AREA)
- Hardware Redundancy (AREA)
- Advance Control (AREA)
- Stored Programmes (AREA)
Abstract
emod运算是对传统的模数运算而言是一种计算上的替代,这是一种减少了计算花销,但也降低了精度的运算。可以对某个基数n定义一种模数运算,此时,emod运算使用“假想模数”来确定操作数的模数,所述假想模数是n的整数倍。选择假想模数,使得emod运算与模数运算相比,在计算上不那么昂贵。因此,emod运算对于使用超大操作数的乘法或指数运算格外有用。在完成了与乘法或指数运算相关的中间处理后,可以使用一次传统的模数运算,以得到最终的结果。
Description
背景技术
本发明涉及模数运算。具体地说,它涉及可被高效率执行的模数运算。
模数运算(俗称为“mod”运算)用于确定除法运算的余数。因此,A mod N的表达式确定了将数A除以N后所获得的余数结果。例如,17除以3后商为5,余数是2,“17 mod3”产生值为2的结果。
在许多计算应用中都执行Mod运算,包括两方在从事加密通信前所进行的密钥协商。在密钥协商的上下文中,在两个终端处对具有(AB)mod n形式的方程进行估算。通常,A和B值可以很大——从1024到2048位那么长。当然,当两个具有长度I的操作数相乘时,结果可能长达2I。在这么大操作数的情况下,在处理器中建立具有全宽度乘法结果的结果寄存器是不切实际的。相反,当生成乘法结果时,一般通过对每个乘积进行mod运算来截断它们。因为mod运算利用具有自身长度(比如j)的模数来除每个乘积,所以结果的长度总是小于j。
假设长度为I的操作数其中含有相等数量的0和1,对(AB)mod n的估算就需要I次乘法和I次mod运算。这包含了大量的计算开销。与这些计算相关联的开销在高负载的环境中变得格外严重,例如在计算机服务器中,预计每小时将收到几千次密钥协商请求(也许更多)。
由此,在本领域中需要一种快速的、计算上节省的技术来求解具有大操作数的mod运算。
附图说明
图1图示了根据本发明一种实施方案的方法。
图2图示了根据本发明一种实施方案的方法。
图3图示了根据本发明一种实施方案的另一种方法。
图4是图示了根据本发明一种实施方案的中间积生成器的框图。
图5是图示了根据本发明一种可替换实施方案的IPG的框图。
图6图示了根据本发明一种实施方案的乘法器。
图7图示了根据本发明一种实施方案的乘法器电路。
图8图示了根据本发明另一种实施方案的乘法器电路。
图9图示了根据本发明一种实施方案的乘法器电路。
图10图示了根据本发明另一种实施方案的乘法器电路。
图11图示了根据本发明一种实施方案的另一种方法。
具体实施方式
本发明的各种实施方案介绍了一种用在mod计算中的“emod”运算。emod是对传统mod运算而言是一种计算上的替代,是一种计算上不那么昂贵,但精度也不那么精确的运算。emod运算可以与在(AB)mod n计算或(A·B)mod n计算的估算过程中产生的中间乘法(interstitial multiplication)一同使用。最后,当得到一个最终乘积时,可以执行传统的mod运算来获得最终的结果。按照这种方式,本发明的实施方案避免了也许数以千计的mod运算的计算开销,否则可能要在运算的中间阶段执行这些mod运算。
虽然计算机执行的是二进制值(基2)的算术运算,但是通过使用传统的十进制数(基10)的例子,可以最好地理解emod运算的优点。为了估算23754 mod 3331的运算,通常是将23754除以3331而获得余数437。然而,这种除法在计算上是很昂贵的。如果使用接近10k的某个模数的倍数(其中,k是任意数),就容易多了。使用这样一个倍数(比如用9993来取代3331),就可以利用一系列减法来取代除法运算。在从23754中两次减去9993后,剩余数为3768(该数包括正确的余数437加上3331)。这个剩余数足以和在计算的中间阶段所获得的中间积一起使用。当获得最终结果并采用真正的mod运算时,将会从可能已从各中间阶段延续下来的模数的任何倍数中分隔出正确的余数。然而,这个“假想模数”的使用提高了处理速度。
以上解释的实施例也适用于二进制方案。在基2域中,对于某个模数n,选择一个非常接近2k(k是任意数)的倍数。就像上面十进制实施例中在最高有效位位置中包含一串连续的9一样,在二进制的实施例中,假想模数在最高有效位位置中将包含一串连续的1。这个性质简化了在从操作数A中减去该假想模数时所进行的减法运算。
给定模数n,可以选出假想模数mn,使得m·n=2k-d,其中d<n。然后可以将emod运算用作递归减法,在所述的递归减法中,从源操作数中减去mn,直到剩余数小于mn。这两个参数d和m控制着emod运算。
(A·B)emod n的估算
根据一种实施方案,可以通过将操作数B解析为每个长w位的多个字来估算
c=(A·B)emod n (1)
因此:
于是,方程1变为
=((...(A·B[M-1]·2w+A·B[M-2])·2w+...)·2w+A·B[0])emod n
emod运算是分布式的,并且可以在圆括号内重复。这一性质导致了图1中所图示的方法。
图1示出了根据本发明一种实施方案的方法1000。根据方法1000,变量c可以被初始化为0(框1010)。此后,方法1000可以迭代地考虑被乘数B的每一个字,从对应于B的最高有效位位置的字一直到对应于最低有效位位置的字。在每次迭代期间,方法1000可以将前次迭代后的c值左移一个字的长度(框1020)。新的B字(标记为“B[i]”)与A相乘后的值可以和c移位后的值相加(框1030)。此后,可以对框1030所得到的结果执行emod运算(框1040)。emod的结果可以用作下一次迭代的初始值c。在最后一次迭代之后,所获得的c值就是计算结果。
在一种实施方案中,可以根据以下伪代码用软件实现图1中的方法。
c:=0for i:=(M-1)downto 0 doc:=(a·b[i]+shiftleft(w,c))emod n |
基本相乘/求模算法
其中,shiftleft(w,c)仅将c操作数左移w位。这等同于在二进制中乘以2w。
emod操作符基于假想模数mn=m·n进行运算,产生一个精度因子d=2k-mn。如果操作数c被分成两部分,商q和余数r,使得
c=q·2k+r (4)
则emod运算可以被定义为:
(c emod n)=((q·2k+r)emod n)
=(q-2k+r-q·mn) (5)
=(r+q·d)
这个emod函数可以被合并到图1的方法中,如图2的实施方案所示。
图2图示了根据本发明一种实施方案的方法1100。根据方法1100,虚拟变量c可以被初始化为0(框1110)。此后,该方法可以迭代地考虑被乘数B的每一个字,从对应于B的最高有效位位置的字一直到对应于最低有效位位置的字。所述方法可以由前次迭代得到的c值来计算商值q和余数值r(框1120、1130)。可以将c中从最高有效位位置到第k位位置之间的位范围(a span of bits)在左移w位后作为商q。可以将c中从第k-1位位置到第0位位置之间的剩余位在左移w位后作为余数r。此后,c值可被估算为:
c=A·B[i]+r+d·q (6)(框1140)。最后一次迭代所获得的c值可被当作emod函数的结果。
在一种实施方案中,可以根据以下伪代码用软件实现图2中的方法。
c:=0for i:=(M-1)downto 0 doq:=selectbits(max_bits downto k,c)r:=selectbits((k-1)downto 0,c)c:=a·b[i]+shiftleft(w,r)+shiftleft(w,d,q) |
相乘/求模算法
这种实现方式要求可以立即得到乘积d·q。实际上,由于要花一些时间来生成这个乘积,所以上述方法在该乘积变为可用之前实际上被停止了。
在可替换的实施方案中,所述方法在没有获得d·q乘积的情况下,可以完成当前的迭代。而且它还可以前进到i的下一次迭代,并结合从前面的迭代中取得d·q乘积。图3图示了这种实施方案。
图3图示了根据本发明一种实施方案的方法1200。根据方法1200,变量c可被初始化为0(框1210)。此后,该方法可以迭代地考虑被乘数B的每一个字,从对应于B的最高有效位位置的字一直到对应于最低有效位位置的字。在每次迭代中,方法1200可以由前次迭代得到的c值来计算商值q[i]和余数值r[i](框1120、1130)。可以将c中从最高有效位位置到第k位位置之问的位范围在左移w位后作为商q[i]。可以将c中从第k-1位位置到最低有效位位置之间的剩余位在左移w位后作为余数r[i]。前次迭代所获得的商q[i-1]也可以被左移w位(框1240)。此后,c值可被估算为:
c=A·B[i]+r[i]十d·q[i-1], (7)
这里,q[i-1]值是在框1240中所获得的移位后的值(框1250)。
在最后一次迭代之后,最后一次迭代所获得的商可以与c相加(框1260)。这一运算所获得的值可被当作emod运算的结果。
在一种实施方案中,可以根据以下伪代码用软件实现图3中的方法。
c:=0for i:=(M-1)downto 0 doq1:=qq:=selectbits(max_bits downto k,c)r:=selectbits((k-1)downto 0,c)c:=a·b[i]+shiftleft(w,r)+shiftleft(2·w,d·q1) |
q1:=qc:=shiftleft(w,c)+shiftleft(2·w,d·q1)c:=shiftright(w,c) |
具有1个周期q延迟的相乘/求模算法
在这种实施方案中,前次迭代所产生的d·q乘积(重新标记为d·q1)被向左移位,以解决两个字之间的位置差。
如上所述,图3的实施方案在等待d·q运算的估算结果时无需停止。这种实施方案适用于高负载的应用,在这种应用中最重要的就是避免计算延时。
大数与小数间的乘法
如上所述,被乘数B可以被解析为多个更小的字B[w],w=0到M-1,这些字可被用作与乘数A之间执行乘法的基础。下面将讨论这一实施方案的电路实现方式。
图4中的框图根据本发明的一种实施方案示出了中间积生成器(“IPG”)100。IPG 100由被乘数A生成中间积。它可以包括被乘数寄存器(这里被称为“A寄存器”)110、一对移位器120、130(分别标记为“移位1”和“移位2”)和“3A寄存器”140。图中用虚线来表示A寄存器和3A寄存器,这是因为它们可以(但不是必须)被放置在IPG 100自身内;或者,可以在某种其他电路中提供这些寄存器,但是它们的内容可以作为输入被提供给IPG100。IPG 100还可以包括一对多路复用器(俗称为“MUX”)150、160和反相器170。
移位器120、130中的每一个都提供了那些代表A寄存器中所存储的值在移位预定数量的位(bit)位置后的值。第一移位器120可以提供朝最高有效位位置移位了1位位置的A值。它被标记为“移位1”。第二移位器130可以提供己经朝最高有效位位置移位2位位置的A值,它被标记为“移位2”。在二进制数据***中,单位移位和双位移位分别导致了源数据值的两倍乘法和四倍乘法。
可以以任意数量的实施方案来提供移位器120、130。也许最简单的实施方案就是在A寄存器110和MUX 150之间提供硬连线互连作为移位器。例如,A寄存器110中的每个位位置i可以连接到MUX 150的位置i+1,以构成“移位1”移位器120。同样,A寄存器中的每个位位置i可以连接到MUX 150的位置i+2,从而满足“移位2”移位器130。移位1移位器的最低有效位位置可以接地。移位2移位器中输入到MUX 150的两个最低有效位位置也可以接地。就面积或控制层次而言,这种体系结构以最低的实现成本提供了所需要的移位功能。
可替换地,移位器120、130可被配备为正式的移位寄存器,它们完整地带有用于存储移位后的值的存储单元(未示出)。虽然这种替换方案不具有任何性能优势,但是它可以适用于为其他目的使用这种移位寄存器的应用中。
3A寄存器140,正如它的名字所暗示的那样,是用于存储代表三倍于A寄存器中数值的值的寄存器。存储在这个寄存器中的值可以通过将A寄存器110和移位1寄存器120的值直接相加而获得,或者可替换地,可以从移位2寄存器140的值中减去移位1寄存器120的值,从而获得该寄存器中的值。用于实现这些功能的电路是简单易懂的,并且为了保持图示说明的简洁,从图1中省去了上述电路。在一种实施方案中,3A寄存器140也可以被配备在IPG 100之外;因此用虚线示出。
A寄存器110、两个移位器120和130以及3A寄存器140的输出可以被输入到第一MUX 150。第一MUX 150的输出可被输入到第二MUX 160和反相器170。反相器170的输出可以作为第二输入被提供给第二MUX 160。反相器170可以生成从第一MUX 150输出的多个位的2的互补反码(complement inversion)。第二MUX 160可以具有直接耦合到零值“”的第三输入。或者,零值可被输入到第一MUX 150。因此,给定输入值A,则IPG 100可能生成以下任何输出:A、A、2A、2A、3A、3A、4A、4A和。
IPG 100可以包括控制器180,用于掌管两个MUX 150、160的操作。如下面讨论的那样,给定输入的“段”,控制器180可以产生一个控制信号(标记为ci),该信号使得MUX 150、160在驱动时钟(未示出)的每个周期上输出可能的输出中所选定的一个输出。
图5是图示了根据本发明一种可替换实施方案的IPG 200的框图。根据本发明的一种实施方案,IPG 200可以包括多个反相器210、220、230-1、230-2和3X乘法器240、一对移位器250-1和250-2以及多路复用器260。在这种实施方案中,IPG 200被图示为与外部的被乘数寄存器相连,而不是将被乘数寄存器包括为自身的一部分。被乘数可以在IPG200的第一终端270上被输入给IPG 200。反相器之一210可以耦合到第一终端270,以在被乘数出现时将其反相。
3X乘法器如同它的名称所暗示的那样,当被乘数出现在输入终端时生成一个三倍于被乘数的值。第二反相器220可以耦合到3X乘法器240以反相它的输出。
移位器250-1、250-2和图2实施方案中的一样,提供了移位后的被乘数。它们之一(例如移位器250-1)将输入的被乘数移位单个位位置;另一个250-2将被乘数移位2个位位置。与各个移位器250-1、250-2相接的反相器230-1、230-2可以生成被乘数的反相的移位后的值。可以根据上述任何一种实施方案来提供移位器250-1、250-2。
反相器210、220、230-1、230-1,3X乘法器240和移位器250-1、250-2的输出可被输入到多路复用器260。多路复用器260也可被控制为不输出来自IPG 200的任何输入。这种情况下,多路复用器260使IPG 200从中生成零输出。
根据一种实施方案,当想要基于一个长被乘数A和短乘数B来执行乘法运算时,被乘数A可被输入到IPG 200中。A、3A、A和3A的值将在一个短的初始化时期后对多路复用器260可用。同样,A和A移位后的值也将对多路复用器260可用。一旦这些值可用,则它们可从IPG中被取出,并基于乘数段的值被转发到乘法电路的剩余部分(在图5中未示出)。
所述的IPG包括控制器290,该控制器响应于这些乘数段,让多路复用器260从该IPG内取出先前存储的值之一。我们知道,许多乘法电路包括用于其他目的的控制器。控制器290可被集成到这些公知的控制器中,或者在需要时以独立的元件出现。图5仅为方便起见,图示了与IPG 200独立的控制器290。
在一种实施方案中,乘数B可被解析成几个四位段si。每个段si包括乘数B中的B3i+2-B3i-1位。由这些段可以生成控制信号CTRL,用以确定IPG内的哪一个值应当从多路复用器输出。在一种实施方案中,所述IPG可以根据下面表1所示的方案来生成输出。
第si段的输入模式 | CTRL | 中间积 |
0000 | 0 | 0 |
0001 | 1 | A |
0010 | 1 | A |
0011 | 2 | A<<1 |
0100 | 2 | A<<1 |
0101 | 3 | 3A |
0110 | 3 | 3A |
0111 | 4 | A<<2 |
1000 | -4 | A<<2 |
1001 | -3 | 3A |
1010 | -3 | 3A |
1011 | -2 | A<<1 |
1100 | -2 | A<<1 |
1101 | -1 | A |
1110 | -1 | A |
1111 | 0 | 0 |
表1
其中,
A是输入A的2的补码(complement)。控制值CTRL可以按照下式与四位输入模式相关:
CTRL=-4si3+2si2+si1+si0 (8)
其中,sij代表si段的第j位位置。对于s0段,作为虚构位位置“B-1”的第0位位置可被设置为0,以使得所述控制器对s0段的响应与表1一致。
从图6中可以看出,乘数B不会将所有段全部填满,除非该乘数的长度是3的倍数。在一种实施方案中,当乘数的长度不是3的倍数时,它可以进行充分长度地符号扩展,以填满最后一段中尚未使用的部分。这一般包括复制符号位,即最高有效位BMSB,以填充在该最高有效位之外的虚构的位位置。
前面所描述的IPG实施方案可被应用于不同体系结构的乘法器电路。在每种应用中,IPG的使用基本上都通过每三位位置进行一次加法,而不像传统技术那样每个位位置都进行一次加法,从而使得乘法器电路实现了更快的运算。
图7是根据本发明一种实施方案在组合乘法器300中应用IPG的图。组合乘法器300可以包括第一和第二寄存器310,分别用于存储被乘数A和乘数B。它可以包括IPG 330、控制器340、多个中间积寄存器350.1-350.L、加法器树360和乘积寄存器370。
在运算期间,IPG 330可被初始化来建立A、
A、3A和
3A值以及A和
A移位后的值。控制器340可以将乘数B解析为多个段,并且响应于每个段中的位模式,让IPG 330将其中一个值加载到对应的中间积寄存器(比如350.1)中。在一种实施方案中,中间积寄存器350.1-350.L的数量可以取决于乘数B所支持的段的数量。因此,中间积寄存器350.1-350.L的数量可以与乘数寄存器320的长度绑定。
一旦将值加载到每一个中间积寄存器350.1-350.L中,组合乘法器300就可以通过对所有的中间积寄存器350.1-350.L求和,从而使最终的乘积被存储在乘积寄存器370中。加法器树360接受来自每个乘积寄存器的中间积值,并以认识中间积寄存器之间的各个位偏移量的方式来对它们求和。加法器树本身是公知的,可以针对这一目的进行修改。
在一种被乘数A长m,乘数B长n的实施方案中,乘积寄存器370可以象传统的组合乘法器中一样,具有n+m的长度。而中间积寄存器350.1-350.L可以具有m+2的长度,虽然在传统的组合乘法器中它们的长度为m。
传统的组合乘法器对于乘数B的每个位位置都包括一个中间积寄存器。在前面的实施方案中,对于乘数B的每三个位位置才只有一个中间积寄存器(例如350.1)。因此,由于上述实施方案中的组合乘法器300与传统的对应部分相比,包括大约三分之一数量的中间积寄存器,所以加法器树包括三分之一数量的用于计算最终总和的加法器。因为在更少的中间值上执行最终的加法,因而可以更快地获得最终的和,所以预计在本实施方案中将更快地产生结果。因此,这一实施方案以更少的逻辑产生了更高的吞吐率。
图8是根据本发明一种实施方案的、与移位-相加乘法器电路400集成在一起的IPG的应用框图。乘法器电路400可以包括一对寄存器410、420,用于存储被乘数A和乘数B。移位-相加乘法器电路400还可以包括IPG 430、控制器、进位存储加法器(carry saveadder)450和乘积寄存器460。
在运算期间,乘法器电路400可以被初始化。在这种实施方案中,乘积寄存器460可以被清零,并可用被乘数A的值来初始化中间积生成器430。此后,在运算期间,控制器440可以从乘数寄存器420中移出每个段,并且响应于新的段,可使得所选择的值从IPG430被输出到进位存储加法器450的第一输入端。乘积寄存器460的最高有效位可被移位3个位置,并被输入到进位存储加法器的第二输入端。进位存储加法器450可以将提供给它两个输入端的每一个的值加起来,并将该值写回到乘积寄存器460。按照乘数B所支持的段的数量多少,可以以递增的方式多次重复这一过程。
与图4的实施方案一样,图8的实施方案相对于传统的移位-相加乘法器电路提供了改善的性能。传统电路对乘数B的每个位位置都执行加法。相反,图8中所示的实施方案对乘数B的每三个位位置才执行一次加法。同样,更少数量的加法使得图8的移位-相加乘法器能够比传统电路花费更少量的时间来生成乘法积。
在另一种实施方案中,乘法器电路可以省略掉乘数寄存器(例如图8的乘数寄存器420)。图9图示了一个乘法器500,它由被乘数寄存器510、IPG 520、控制器530、进位存储加法器540和乘积寄存器550组成。作为初始化步骤,被乘数值(A)可被输入到IPG520。此外,乘数值(B)可被加载到乘积寄存器550的最低有效位位置中。
在每个时钟周期上,乘积寄存器550的内容都可以向下移动三个位位置(three bitpositions)。当乘积寄存器的最低有效位被移出乘积寄存器时,它们可以作为新的段被输入到控制器530。响应于这三位(及从前一个时钟周期的移位中的1位),控制器530可以使得IPG 520生成前面表1中所示的输出。该IPG输出可被提供给进位存储加法器540的第一输入端。乘积寄存器向下移位后的值可以被提供给进位存储加法器540的第二输入端。进位存储加法器540可以将这两个输入值加起来,并将它们存储到乘积寄存器的最高有效位位置。再一次,本实施方案相对于一次执行单位移位的其他移位-相加乘法器而言,提供了改善的性能。与图4的实施方案相比,由于寄存器420(图4)可被省略,所以这种实施方案还提供了更好的寄存器利用。
图10图示了根据本发明另一种实施方案的乘法电路600。这一实施方案可被用来估值前面的方程7。在这一实施方案中,乘法器600可以包括一对IPG 610、620。第一IPG 610可以估值方程7中的A·B[i]项,第二IPG 620可以估值d·q[i-1]项。第一IPG 610可以接受来自各个寄存器630、640的值A和3A作为输入。第一IPG 610可以由控制器650来控制,而该控制器650又被B的各个字(未示出的输入)控制。
第二IPG 620可以接受来自各个源660、670的值d和3d。第二IPG 620可以由q值680来控制。
乘法电路600可以包括进位存储加法器690,它接受两个IPG 610、620的输出以及乘积寄存器700的结果值作为其输入。进位存储加法器690的输出可被输入到乘积寄存器700。乘积寄存器700可以是一个移位寄存器,用于实现关于图3所描述的移位。从最低有效位位置开始的位范围(span of bits)可以作为r[i]值输出到进位存储加法器690。
众所公知,进位存储加法器生成所谓“冗余形式”的结果。由于进位存储加法器不必执行传统的进位传播(费时的操作)就可以生成加法运算的结果,所以它们比其他类型的加法器要快一些。取而代之的是,每个“位位置”使用多位来存储加法结果。以冗余形式执行多次加法。在最终的加法后,可以执行一次进位传播,以获得非冗余形式的结果。
根据一种实施方案,乘积寄存器700中对应于商q的部分可被输入到先行进位(carrylookahead)加法器之类的第二加法器710。第二加法器710可以生成非冗余的结果,该结果可以作为q值被反馈到第二IPG 610。
关于(A·B)emod n运算的估算,已提供了以上的实施方案。如果是关于(A·B)modn运算而进行的,则在图1-3所示的方法后可以进行单次mod运算,以完成估算过程。然而,为了估算其他的运算,例如可以推迟mod n运算的AB emod n运算,可以有利地使用这些实施方案。
A
B
emod n的估算
下面针对AB mod n运算来描述emod运算的实施方案。该运算的求解可以按照嵌入式循环过程来进行,所述循环过程由外循环和内循环组成。
外循环可以扫描指数的位,用以控制乘法。外循环的每次运行过程可以包括平方操作:
c=(c·c)emod n, (9)
并且取决于指数的当前位,还可以包括附加的乘法:
c=(c·a)emod n。 (10)
这种实施方案如图11所示。
图11图示了根据本发明一种实施方案的另一种方法1300。根据方法1200,虚拟变量c可被初始化为0(框1210)。此后,所述方法迭代地考虑指数B的每个位i。在每次迭代中,所述方法可以使用内循环来估算方程9(框1320)。此后,方法1300可以确定指数B的第i位(B[i])是否等于1。如果是的,则方法1300可以使用内循环来估算方程10(框1330)。当框1330的操作结束时,或者如果第i位不是1,那么运算可以前进到下一次迭代。
在结束了最后的迭代后,方法1300可以对c值调用传统的mod运算(框1340)。这个结果得到了AB mod n的结果。
可以使用前面参考图1-3所描述的任何一种方法来执行运算的内循环。在内循环的处理期间,可以使用同一硬件来实现两种情形。对适合平方运算的情形无需特殊的处理。一般来说,操作数c和mn具有同样的大小,而a要小一些。
确定d和m
为了确定参数d和m,可以如下确定n中有效位的数量size(n),满足:
2size(n)-1≤n<2size(n) (11)
另外,k可以相对于某个期望的精度值被定义为:
k=size(n)+precision (12)
此外,mn可被定义为n的整数倍m·n,使得:
d=2k-mn<n (13)
参数mn在以二进制格式出现时,具有等于或超过精度值的前导1的数量。
为了根据n和2k得出m和d,注意:
其中,int(x)是得出某个值x的最大整数。为了得到m,可以使用Newton法:
ui+1=(ui·(2k+1-ui-n))/2k (15)
方程15具有以下性质:
ui=>(2k/n),当i=>∞时 (16)
由于只想得到(2k/n)的整数部分,所以这一迭代过程收敛得很快。为了保持ui中位的数量最小,也可以在每次迭代后取得整数部分,并丢弃小数部分:
ui+1=(ui·(2k+1-ui·n))/2k (17)
这种实施方案有时会导致以下问题,即迭代过程在到达正确的数值之前停止。然而,稍稍修改最后的迭代就可以解决这个问题。
uFinal=((uFinal-1+1)·(2k+1-uFinal-1·n)div2k
在另一种实施方案中,仅通过从位置(k+1)往上将负数-(ui·n)的前导1设置为0,就可以完成(2k+1-ui·n)的计算,其中(ui·n)<2k+1。这相当于保持从位置k到0的位不变。
在一种实施方案中,可以根据下列伪代码用软件来实现m和d的计算。
u:=1.5·2^(precision-1)for i:=1 to(final_iteration-1)dox:=-n·ux:=selectbits(k downto 0,x) //2^(k+1)-n·ux:=u·x |
u:=selectbits(max_bits downto k,x) //(...)div 2^kx:=-n·ux:=selectbits(k downto 0,x)u:=u+1x:=u·xx:=x-2^km:=selectbits(max_bits downto k,x) //(...)div 2^kx:=-n-md:=selectbits((k-1)downto 0,x) //2^k-m·n |
用于计算m=(2k div n)和d=(2k-mn)的算法
其中,函数selectbits(max downto min,c)返回c中从max位置到min位置之间的位(包括max和min位置)。
以上给出的实施方案提供了一种mod运算的替代计算方式,标记为“emod”,该运算以丢失一定精度为代价,带来少得多的计算花销。在执行带有乘法或指数运算的mod运算时,它是很有用的。通过对中间积使用emod运算,操作数长度可以保持在某一预定的长度窗内。当得到最终的乘积时,应用传统的mod运算以获得最终的结果。这种方案比只使用mod运算要花费少得多的处理量,就可以获得最终的结果。
这里具体图示并描述了本发明的几种实施方案。然而可以理解,本发明的修改和变化被以上教导所覆盖,并落入所附权利要求书的范围之内,而不会偏离本发明的精神和范围。
Claims (5)
1.一种对操作数执行模数运算的方法,所述操作数由迭代执行的数学函数来表示,所述模数取值为n,所述方法包括:
在完成了多次中间迭代的每一次迭代后,使用一个等于n的倍数的假想模数来确定其结果的模数,所述假想模数接近于取某个任意k值的2k值,以及
在完成了最终的迭代后,使用真正的模数n来确定其结果的模数。
2.一种求解(A·B)mod n运算的方法,包括:
对于B的几个字中的每一个字,迭代地:
将c值移位一个字长;
将移位后的c值与A·B[i]值相加,其中B[i]是B的第i个字,
使用等于n的倍数的假想模数mn,对所述相加的结果执行emod运算,以及在最后一次迭代之后,对所述最后一次迭代所得到的相加结果执行模数运算。
3.一种求解(A·B)mod n运算的方法,包括:
对于B的几个字中的每一个字,迭代地:
由c的先前估值的高次序部分生成商q,
由所述c值的低次序部分生成余数r,
将c重新估值为A·B[i]+r+d·q,其中d是假想模数的精度值,其中B[i]是B的第i个字,
在最后一次迭代之后,对所述最后一次迭代所得到的重新估值结果执行模数运算。
4.一种求解(A·B)mod n运算的方法,包括:
对于B的几个字中的每一个字,迭代地:
由c的先前估值的高次序部分生成商q[i],其中i代表当前迭代,
由所述c值的低次序部分生成余数r[i],
将商q[i-1]左移一个字宽,
将c重新估值为A·B[i]+r[i]+d·q[i-1],其中d是假想模数的精度值,其中B[i]是B的第i个字,并且所述重新估值过程使用移位后的商,
在最后一次迭代之后,对所述最后一次迭代所得到的重新估值结果执行模数运算。
5.一种求解AB mod n运算的方法,包括:
对于B的每个位位置i,迭代地:
执行c=(c·c)emod n运算,以及
如果B的第i位位置是1,则执行c=(c·A)emod n运算;
以及
在最后一次迭代之后,对所述最后一次运算所得到的c执行A mod N运算,
其中,所述emod n运算根据假想模数mn来计算模数结果,其中mn是n的整数倍。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/140,885 US7167885B2 (en) | 2002-03-22 | 2002-05-09 | Emod a fast modulus calculation for computer systems |
US10/140,885 | 2002-05-09 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN1729444A true CN1729444A (zh) | 2006-02-01 |
Family
ID=29418397
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA038162156A Pending CN1729444A (zh) | 2002-05-09 | 2003-05-02 | 一种用于计算机***的快速模数运算"emod" |
Country Status (7)
Country | Link |
---|---|
US (1) | US7167885B2 (zh) |
EP (1) | EP1504338B1 (zh) |
CN (1) | CN1729444A (zh) |
AT (1) | ATE334444T1 (zh) |
AU (1) | AU2003241350A1 (zh) |
DE (1) | DE60307089D1 (zh) |
WO (1) | WO2003096182A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106383809A (zh) * | 2016-12-07 | 2017-02-08 | 西安科技大学 | 一种用于求解数学函数的***的求解方法 |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE10223853B4 (de) * | 2002-05-28 | 2005-06-23 | Technische Universität Braunschweig Carolo-Wilhelmina | Verfahren und integrierte Schaltung zur Durchführung einer Multiplikation modulo M |
US7627114B2 (en) * | 2002-10-02 | 2009-12-01 | International Business Machines Corporation | Efficient modular reduction and modular multiplication |
US20040120516A1 (en) * | 2002-12-23 | 2004-06-24 | International Business Machines Corporation | Modular reduction method which recognizes special conditions |
US7966361B1 (en) * | 2006-02-10 | 2011-06-21 | Nvidia Corporation | Single-cycle modulus operation |
WO2009084026A2 (en) * | 2007-11-30 | 2009-07-09 | Chandra Mohan Umapathy | System and method for high speed modulo operations |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4208722A (en) * | 1978-01-23 | 1980-06-17 | Data General Corporation | Floating point data processing system |
US4864529A (en) * | 1986-10-09 | 1989-09-05 | North American Philips Corporation | Fast multiplier architecture |
EP0326414B1 (en) | 1988-01-29 | 1997-08-13 | Texas Instruments Incorporated | High speed multiplier |
FR2658932A1 (fr) * | 1990-02-23 | 1991-08-30 | Koninkl Philips Electronics Nv | Procede de codage selon la methode dite rsa, par un microcontroleur et dispositif utilisant ce procede. |
US5008850A (en) * | 1990-05-25 | 1991-04-16 | Sun Microsystems, Inc. | Circuitry for multiplying binary numbers |
US5373560A (en) * | 1991-12-06 | 1994-12-13 | Schlafly; Roger | Partial modular reduction method |
US5402369A (en) * | 1993-07-06 | 1995-03-28 | The 3Do Company | Method and apparatus for digital multiplication based on sums and differences of finite sets of powers of two |
US5644695A (en) * | 1994-01-03 | 1997-07-01 | International Business Machines Corporation | Array combinatorial decoding with multiple error and erasure detection and location using cyclic equivalence testing |
US5646877A (en) | 1995-05-25 | 1997-07-08 | Texas Instruments Incorporated | High radix multiplier architecture |
JPH1166045A (ja) | 1997-08-22 | 1999-03-09 | Oki Electric Ind Co Ltd | 乗算器 |
US6404890B1 (en) * | 1998-04-08 | 2002-06-11 | Citibank, Na | Generating RSA moduli including a predetermined portion |
WO2001025899A1 (en) | 1999-10-01 | 2001-04-12 | Koninklijke Philips Electronics N.V. | Improved multiplication circuit |
US20040010530A1 (en) * | 2002-07-10 | 2004-01-15 | Freking William L. | Systolic high radix modular multiplier |
-
2002
- 2002-05-09 US US10/140,885 patent/US7167885B2/en not_active Expired - Fee Related
-
2003
- 2003-05-02 AU AU2003241350A patent/AU2003241350A1/en not_active Abandoned
- 2003-05-02 WO PCT/US2003/013807 patent/WO2003096182A1/en active IP Right Grant
- 2003-05-02 CN CNA038162156A patent/CN1729444A/zh active Pending
- 2003-05-02 AT AT03731082T patent/ATE334444T1/de not_active IP Right Cessation
- 2003-05-02 EP EP03731082A patent/EP1504338B1/en not_active Expired - Lifetime
- 2003-05-02 DE DE60307089T patent/DE60307089D1/de not_active Expired - Lifetime
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106383809A (zh) * | 2016-12-07 | 2017-02-08 | 西安科技大学 | 一种用于求解数学函数的***的求解方法 |
Also Published As
Publication number | Publication date |
---|---|
EP1504338B1 (en) | 2006-07-26 |
US20030182339A1 (en) | 2003-09-25 |
DE60307089D1 (de) | 2006-09-07 |
WO2003096182A1 (en) | 2003-11-20 |
ATE334444T1 (de) | 2006-08-15 |
US7167885B2 (en) | 2007-01-23 |
AU2003241350A1 (en) | 2003-11-11 |
EP1504338A1 (en) | 2005-02-09 |
US20050246406A9 (en) | 2005-11-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8386546B2 (en) | Montgomery multiplication architecture | |
JP2002108606A (ja) | スティッキービット生成回路及び乗算器 | |
TWI715589B (zh) | 用於在執行浮點運算時控制捨入的裝置及方法 | |
CN1735880A (zh) | 用于执行计算操作的***、方法及设备 | |
CN1928809A (zh) | 用于执行浮点运算的***、设备和方法 | |
CN1570848A (zh) | 使用进位存储加法的蒙哥马利模乘器及其方法 | |
CN1310816A (zh) | 模乘法的电路及其方法 | |
JPH0969040A (ja) | 推測的演算を有する3つのオーバーラップしたステージにより基数2の平方根演算/除算を行う回路 | |
US11954456B2 (en) | Float division by constant integer | |
CN1258710C (zh) | 用于高效模数归约和模数乘法的电路和方法 | |
CN1821951A (zh) | 算术单元 | |
Ding et al. | Broken-Karatsuba multiplication and its application to Montgomery modular multiplication | |
Abd-Elkader et al. | Advanced implementation of montgomery modular multiplier | |
CN1729444A (zh) | 一种用于计算机***的快速模数运算"emod" | |
CN1650254A (zh) | 计算模数乘法之结果的装置及方法 | |
US8892621B2 (en) | Implementation of negation in a multiplication operation without post-incrementation | |
Yan et al. | An implementation of Montgomery modular multiplication on FPGAs | |
Pelzl et al. | Area–time efficient hardware architecture for factoring integers with the elliptic curve method | |
CN110506255B (zh) | 节能型可变功率加法器及其使用方法 | |
CN1717653A (zh) | 带有查询表的乘法器 | |
CN1829957A (zh) | 长整数乘法器 | |
CN1809806A (zh) | 改进的归约计算 | |
US20190324726A1 (en) | Performing Constant Modulo Arithmetic | |
CN1178588A (zh) | 使用移位装置的求幂电路及其使用方法 | |
EP4187368B1 (en) | Truncated array for performing division |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination |