蒙哥马利模数乘法器及其方法 本申请要求2003年5月9日在韩国提交的申请号为P2003-29445的韩国申请的优先权,将其全部合并在此以做参考。
【技术领域】
本发明涉及密码系统的领域,尤其涉及蒙哥马利模数乘法器。
背景技术
由于网络系统使用的增长,所以网络通信的保护变得更为重要。对数据的整体性和保密性的保护成为一个问题。
代码传送和对消息进行解码的基本过程包括:获得消息(明码文本)、调整(加密)该明码文本为(密文)、向接收器发送密文、以及解调(解密)该密文以恢复原始的消息。
在密码系统中,使用加密匙来对明码文本进行加密。将所述密文发送到接收器,并且接收器使用解密匙对密文进行解密,然后回到原始的明码文本。所述加密匙和解密匙经常称作密匙对。
例如,公共和私有密匙对可以是两个或多个大的质数的函数。每个函数(加密和解密)依赖于大的质数,并且被称作密匙对。对于整个系统(加密和解密)存在两个密匙对(P,Q)。为了加强安全性,可以选择相等的P和Q字长,以便根据比特长度不能够区别它们,接着计算乘积M:
M=P*Q (1)
随机地选择加密匙KE,以便KE和(P-1)(Q-1)是互质数。所以,能够使用满足下列等式的扩展的欧几里得算法来计算解密匙KD:
KD=KE-1mod((P-1)(Q-1))---(2)]]>
数字KD和M也可以是互质数。这些数字(KE和M)可以是用来对数据加密的加密匙(或公共密匙),以及数字(KD和M)是用来对数据解密的解密匙。在生成密匙后,通过执行下列计算对原始消息进行加密。
C=TKEmodM---(3)]]>
其中T是原始消息(明码文本),C是加密的消息(密文)。为了对加密的数据进行解密,进行下列计算:
T′=CKDmodM---(4)]]>
其中T′是解密地消息。T′应该与原始消息T相同。如所能够知道的,执行几个模数乘法。
在一些加密系统中,通常,多于512比特的长的字长常用来满足安全的需要。然而,长的字长限止了快速执行,要求增加计算速度。为了计算的速度,快指数计算变得愈加重要。存在几种方法,例如,H-算法、L-算法等,这些方法能够用来加速指数计算。一种这样的算法是蒙哥马利模数乘法算法,其能够在高执行指数计算算法中用作核心运算。蒙哥马利模数乘法算法也提高了加密和解密运算的效率。
提供蒙哥马利模数乘法算法来计算结果的n位数:
R=A*B*r-1modM, (其中,基数r=2n) (5)
在模数指数算法中要求,其中A、B和M分别是被乘数、乘数以及模数,并且每个具有n位。示例的基数2蒙哥马利迭代模数乘法算法是:
S0=0;
for(I=0;I<N;I++){
qI=(SI+bIA)mod2;
SI+1=(SI+bIA+qIM)/2;}
if(SN>=M)SN=SN-M;
其中bIA(=PPI)是部分乘积;qIM(=MMI)是模数倍数,其使(SI+PPI)的一个最低位(LSB)成为零(0)值;N是模数M的位长;SI是先前周期的部分累加结果;SI+1是具有N位的当前周期的部分累加结果;以及SN是最终计算结果。示例的基数4蒙哥马利迭代模数乘法算法是:
S0=0;
for(I=0;I<N;I++){
qI=(((SI+bIA)mod4)*M′)mod4;
SI+1=(SI+bIA+qIM)/4;}
if(SN>=M)SN=SN-M;
其中N=n/2。基数2和基数4的过程是生成迭代数据的迭代过程;该数据的值随着在I=0;I<N;I++循环内的迭代而变化。模数的运算速度影响系统性能。所以,如果位长非常长,则系统性能下降。为了计算MMI(=qIM),首先计算PPI=(bIA),然后相加所计算的PPI和SI。所以,由于累加器执行两次逻辑计算,因此增加了功耗。
图1示出了传统的蒙哥马利模数乘法算法的硬件实现,其利用两个进位传送加法器91和92(其后缩写为CPA)。第一个CPA 91用作乘法运算,其接收先前的计算结果和从与逻辑电路93输出的ai和B进行与运算的结果,该与逻辑电路93接收ai和B。第二个CPA 92用于模数运算,其接收第一个CPA 91的输出结果和来自与逻辑电路94的qi和N与运算的结果。使用移位器95使CPA 92的输出向右移1位,以便将输出结果除2,从而生成一次迭代的计算结果。
为了完成512位蒙哥马利模数乘法,要进行512次迭代,则花费高的时间代价。结果,512位RSA加密/解密的速度仍然低于当前网络传输带宽的速度。
蒙哥马利模数乘法可能是耗时的并影响在包括密码计算器件的数字设备中的运算。为了生产高性能的数字设备,提高模数运算的速度通常是必要的。
除了速度,另外所关注的是功耗。期望较低的功耗,例如,在智能卡和移动产品中,低功耗尤为重要。智能卡和移动产品使用密码计算器件来使数据安全,并且提高器件的效率能够改善这些器件的功耗特性。附加计算的器件消耗许多功率,并且大部分功率是由模数乘法消耗的。尤其,当位长增加时,模数运算中要求更多的功率。
【发明内容】
本发明的示例性实施例提供了通过使用流水线型寄存器和/或处理数据到达累加器的时间来加速蒙哥马利模数乘法的速度和/或减小了功耗的方法。
在本发明的实施例中,流水线型方法能够用在蒙哥马利乘法器的布期重编码器中来加快蒙哥马利模数乘法的速度。
在本发明的实施例中,在累加器上第I次迭代的部分乘积(PPI)的到达和第I次迭代的模数倍数(MMI)几乎同时到达,蒙哥马利模数乘法中有助于减小功耗,从而,减少了加法器的计算运算。
在本发明的实施例中,反馈寄存器的使用减少了多路复用运算的数量。如果选择当前迭代的部分乘积PPI或模数倍数MMI值为“0”,其中“0”意味着该值不必进行相加,在没有多路复用运算的情况下使用先前迭代的值。从而,没有必要进行多路复用运算(其中多路复用运算数量是大于“n”)。
在本发明的实施例中,减小了平均汉明间距,其中汉明间距是相同的位位置的不同值的数量。从而,较少的位变化能够导致减少输出端的加载。
其后所提供的详细说明将使本发明的实施例的进一步可应用的范围变得明显。应该理解详细的说明和特定的示例,同时表示本发明的示例性实施例仅确定为说明的目的并不意味着限制本发明的范围。
【附图说明】
根据详细的说明和附图,本发明的实施例将变得完全可理解。
图1是蒙哥马利模数乘法算法的背景技术硬件实现的图解;
图2是本发明的示例性实施例的模数乘法器的图解;
图3是本发明的示例性实施例中说明模数MMI的倍数的选择标准的表格;
图4是本发明的示例性实施例中说明部分乘积PPI的选择标准的表格;
图5是本发明的示例性实施例中基数2模数乘法器的图解。
【具体实施方式】
下列示例性实施例的说明实际上仅仅是说明性的,并不意味着限制本发明、它的应用或使用。
图2是本发明示例性实施例的模数乘法器1000的图解。乘法器1000能够包括存储在寄存器1中的模数(M)、存储在寄存器3中的被乘数(A)、存储在寄存器7中的乘数(B)、布期处理器301、模数处理器300、辅助模数倍数MMI计算的多路复用器(MUX)10、辅助部分乘积PPI计算的MUX 20、以及辅助模数乘法计算的累加器100。累加器100输入部分乘积值PPI和模数倍数值MMI,并且产生用于蒙哥马利乘法器的结果。在本发明的示例性实施例中,正值M能够有n位(M[n-1:0])。正或负值A能够有n+1位(A[n:0]),一位用于符号位。结果,B能够是正或负。因此,如果n是偶数,则B具有n+2位,两位是符号位,或者,如果n是奇数,则B具有n+1位,一位是符号位。
在本发明的实施例中,寄存器1提供模数M和M,其中M是M的补码。同样,寄存器3提供被乘数A和A,其中A是A的补码。
如等式(5)所示,乘法器1000在迭代过程中对模数乘法求解。模数处理器300和多路复用器10用来选择模数倍数(MMI)值。为了选择MMI值,模数处理器300从累加器100接收迭代数据。迭代数据SPPI[1:0]是累加器的总记录中的值的两个LSB(SI[1:0])和部分乘积值的两个LSB(PPI[1:0])的组合。SI[1:0]和PPI[1:0]在2位加法器40中进行组合以形成SPPI[1:0]。除了SPPI[1:0],模数处理器300输入模数的第二个有效位M[1]。模数处理器300使用SPPI[1:0]和M[1]来产生输出信号,该输出信号确定模数倍数MMI值的选择。在本发明的另一示例性实施例中,SPPI值能够是多于两个值和/或位数的倍数的组合,此处所给的示例应当不限制本发明的范围。
模数处理器300能够输出倍数信号(例如,模数倍数选择信号SEL_MM[1:0]、模数倍数使能信号EN_MM、非模数倍数信号NEG_MM,...)。在本发明的示例性实施例中,模数处理器300向多路复用器10输出SEL_MM[1:0],该多路复用器10使用SEL_MM[1:0]的值来选择MMI的值(例如,2M、M、0、-M,...)。多路复用器(MUX)10输入模数M和模数倍数选择信号的两个LSB_SEL_MM[1:0],并且输出MMI值。非模数倍数信号NEG_MM和MMI在累加器100组合,其中NEG_MM用来表示位倒置,获得-M的MMI值。
每个MUX运算消耗功率和能量,因此,当使用新的SEL_MM[1:0]值时,执行MUX运算以改变设置并选择MMI值。在不改变设置中使用先前的SEL_MM[1:0]结果值,因此不进行MUX运算。在MMI的选择中减少必要的MUX运算的数量将降低乘法器1000的整个功耗。
在本发明的示例性实施例中,模数处理器300还包括模数倍数反馈寄存器61和模数重编码器70。反馈寄存器61存储先前迭代的SEL_MM[1:0]值作为SEL_MM_D[1:0]值。当期望值MMI=0的时,模数处理器300输出值为0的模数倍数使能信号EN_MM。该信号EN_MM输入到与门31。与门31输入多路复用器10的输出,该多路复用器10使用模数倍数选择信号SEL_MM[1:0]的先前值,从而不使用MUX运算,并且与门31输出MMI=0的值。没有MUX运算的MMI=0的安排降低了乘法器1000的功耗。在图3中示出了类似于上述的编码方案。
图3图解说明了根据本发明的示例性实施例的编码方案。尽管图3示出了到模数重编码器70的三个输入,本发明根据设计标准存在多种输入和输出,例如,图2示出附加的输入SEL_MM_D[1:0]。图3中的编码方案图解说明了对于EN_MM=0的值,所选择的MMI值是0,并且SEL_MM[1:0]的值=SEL_MM_D[1:0]。
在本发明的另一示例性实施例中,能够使用具有布期处理器301的降低功率的类似方法。如以上提到的,乘法器1000在迭代过程中对模数乘法求解,该求解包括向累加器100提供MMI和部分乘积值(PPI)。布期处理器301和多路复用器20被用来选择部分乘积(PPI)值(例如,0、A、2A、-2A、-A...)以提供给累加器100。布期处理器301输入两个被乘数(A[1:0])的LSB、两个乘数(B[1]和B[0])以及B[r]的LSB,B[1]的先前迭代值。
为了选择PPI值,布期处理器301向多路复用器20输出部分乘积选择信号SEL_PP[1:0]。多路复用器20接收被乘数(A)的值和SEL_PP[1:0],并且向与门32输出值。与门32接收来自复用器20的输入和来自布期处理器301的部分乘积使能信号EN_PP。然后,与门32输出所选择的部分乘积值(PPI),将该PPI提供给累加器100。
类似于以上讨论的过程,布期处理器301可以包括布期重编码器80和部分乘积反馈寄存器64。PPI的0值能够在部分乘积反馈寄存器64中通过存储SEL_PP_D[1:0](先前的SEL_PP[1:0]的值)来选择。当期望PPI=0的值,布期处理器301输出具有0值的的部分乘积使能信号EN_PP。该信号EN_PP输入到与门32。与门32将多路复用器20的输出作为输入,多路复用器20使用模数倍数选择信号SEL_PP_D[1:0]的先前值,此处,不使用MUX运算,以及与门32输出PPI=0的值。没有MUX运算的PPI=0的安排降低了乘法器1000的功耗。图4中示出了类似于上述的编码方案。
图4图解说明了根据本发明的示例性实施例的编码方案。尽管图4中示出了对布期重编码器70的三个输入,本发明能根据涉及标准而有各种输入和输出,例如图2示出的附加输入SEL_PP_D[1:0]和A[1:0]。图4中的编码方案图解说明了对于EN_PP=0的值,所选择的PPI的值是0,以及SEL_PP[1:0]=SEL_PP_D[1:0]的值。
此外,在本发明的示例性实施例中,在图4中图解说明的编码方案的示例减少了平均汉明间距。汉明间距是相同位的位置的不同值的数量。例如,如果在第(I-1)次迭代中SEL_PP[1:0]对应于PPI的“A”值具有值“00”,则在第I次迭代中SEL_PP[1:0]对应于PPI的“2A”值具有值“11”,导致二(2)的汉明间距。减少两个值间的汉明间距是所期望的,从而降低了位倒置的数量和计算功率的使用。通过选择编码方案,其中如果先前的迭代PPI值是A或2A,则随后的迭代PPI值受限制,并不可能是2A;如果先前的迭代PPI值是-A或-2A,则随后的迭代PPI值受限制,不不可能是-2A。图4图解说明了不同的编码方案的位值,然而,本发明的示例性实施例的编码方案应该不限于图4中所示的位模式。例如,对于“A”的PPI的值能够对应于SEL_PP[1:0]的值10,而不是所示的00。
如上讨论的PPI值的选择,类似的汉明间距编码方案能够应用于MMI值的选择。
尽管图2图解说明了4∶1多路复用器的使用,本发明的示例性实施例不限于特定的多路复用器的比率值。
在传统迭代中,模数处理器300和布期处理器301依次运行。然而,布期处理器301独立于多路复用器1000的求解的迭代特性。在本发明的示例性实施例中,布期处理器301提供部分乘积的两个LSB(PPI[1:0]),将该两个LSB加到由累加器100提供的先前迭代的累加的结果(SI[1:0]),产生SPPI[1:0]。在其他示例性实施例中,能够使用不同的位和位数来产生SPPI。由模数处理器使用值SPPI[1:0],同时寄存器7(存储B的值)向右移两位。在对寄存器7移位后,不依赖于模数处理器300的活动,将B[1]、B[0]和B[r]的新值输入到布期处理器301。从而,能够运算布期处理器301的同时运算模数处理器300。流水线型寄存器210将布期处理器(301)输出的SEL_PP[1:0]、EN_PP、NEG_PP和PPI[1:0]分别存储在子寄存器64-67中。流水线型寄存器通过减少关键路径的长度来提高乘法器的硬件性能。可以重复上述步骤,直到B[1]是乘数B的最高位。布期处理器301和模数处理器300的同时运算增加了整个乘法器1000的计算速度。
如上面所讨论的,乘法器1000输入模数倍数MMI和部分乘积PPI。通常,首先将PPI输入到累加器100,然后将MMI输入到累加器100。为了计算MMI,首先进行计算PPI的第一逻辑运算,然后进行组合PPI和SI的第二逻辑运算,接着由模数处理器计算SEL_MM[1:0]和EN_MM的如上所述的第三逻辑运算。不在相同的时间输入两个值MMI和PPPI,这是由于每个值行进于不同的路径。所以,由于累加器执行逻辑运算两次,因而增加了功耗。如果两个值MMI和PPI同时或几乎同时到达累加器100,则功耗能够减少。
在本发明的示例性实施例中,可以提供同步寄存器,用来对到累加器的PPI和MMI的到达时间进行同步。如上所述,布期处理器301分布向多路复用器20和与门32提供SEL_PP[1:0]和EN_PP,以便选择部分乘积PPI。同样的,模数处理器300分布向多路复用器10和与门31提供SEL_MM[1:0]和EN_MM,以便选择模数倍数值MMI。在同步寄存器中保存值SEL_PP[1:0]、EN_PP和/或SEL_MM[1:0]和EN_MM允许MMI和PPI的同步。
在本发明的示例性实施例中,提供模数倍数同步寄存器240和/或部分乘积同步寄存器220。对于乘法器1000中的其他寄存器的时钟相位,同步寄存器220和240使用反向时钟相位。模数倍数同步寄存器240能够在子寄存器62和63中分别存储SEL_MM[1:0]和EN_MM的值。如果使用部分乘积同步寄存器220,则它能够在子寄存器68和69中分别存储SEL_PP[1:0]和EN_PP的值。能够使用一个或两个寄存器,并且此处的讨论不限于针对一个同步寄存器的本发明的示例性实施例。在示例性实施例中,在使用两个同步寄存器时,在子寄存器62和68中分别存储SEL_MM[1:0]和SEL_PP[1:0],同时在子寄存器63和69中分别存储EN_MM[1:0]和EN_PP[1:0]。响应时钟信号CK,分别将SEL_MM[1:0]和SEL_PP[1:0]几乎同时输入到多路复用器10和多路复用器20,同时分别将EN_MM和EN_PP几乎同时输入到与门31和与门32。从而,MMI和PPI同步并被提供到累加器100。因此每个数据集MMI和PPI能够执行一个逻辑运算,正好相反于传统的两个逻辑运算,这样明显地减少了乘法器1000的功耗。
从而,所讨论的本发明的示例性实施例的变化和组合确定是在本发明的范围之内。
本发明的示例性实施例不被蒙哥马利乘法的基数所限制;本发明的示例性实施例能够在基于乘法器的各种基数中应用。例如,图5图解说明了具有模数倍数同步寄存器36和/或另一个同步寄存器37的基数2的系统,用于存储乘法器的值(B)。如上面所讨论的,同步寄存器36和37能够几乎同时用来向累加器200提供减小乘法器2000的功耗和提高乘法器2000的速度的MMI和PPI的值。本发明的其他示例性实施例能够使用一个或两个同步寄存器。
本发明的说明实际上仅仅是示例性的,从而,不偏离本发明的要点的变化确定是在本发明的实施例的范围之内。这样的变化不认为是偏离了本发明的精神和范围。例如,多路复用器10和20能够具有各种比率值。模数倍数同步子寄存器62能够起到作为模数倍数反馈寄存器而不具有附加的独立的模数倍数反馈寄存器230的双重目的的作用。同样地,部分乘积反馈寄存器64能够起到作为部分乘积同步寄存器220的子寄存器从而不需要子寄存器68和反馈寄存器64的双重作用。在其他变化中,能够不使用诸如流水线型寄存器和/或反馈寄存器的其他寄存器而使用同步寄存器220和240。