扩展整数的计算域的范围的制作方法

文档序号:6625005阅读:208来源:国知局
专利名称:扩展整数的计算域的范围的制作方法
技术领域
本发明涉及一种用于加速加密协处理过程的外围设备,特别涉及但并不局限于一种用于基于多项式和素数域算法的加速处理装置,它扩展了整数的计算域的范围,以及在为椭圆曲线和RSA类型的计算所设计公开密钥加密协处理器中的模运算的串行输入的操作数的宽度。
发明的背景计算设备的安全性增强和性能加速在下列文献中予以描述本申请人的美国专利5,742,530,及其后续的“P1”,5,513,133,5,448,639,5,261,001;以及5,206,824和出版的PCT专利申请PCT/IL98/00148(WO98/50851);以及相应的美国专利申请09/050958,及其后续的“P2”,Onyszchuk等人的美国专利4,745,568;Omura等人的美国专利4,5877,627,以及本申请人的美国专利09/480,102;上述公开内容作为参考被引入本文。本申请人的美国专利5,206,824显示了一个用于实现基于多项式的乘法和平方的早期的装置,但它不能在素数域上执行运算,而且不是为基于多项式的计算中的交错过程而设计的。在Paar,C.,F.Fleischmann和P.Soria-Rodriguez,“Fast Arithmetic forPublic-Key Algorithms in Galois Fields with Composite Exponents”,IEEETransactions on Computers,vol.48,No 10,October 1999(以下称为“Paar”),一文中利用基于多项式运算中的扩展域的方法做了进一步的分析。在MIT Press,Cambridge,Mass.1972年出版的“Error-Correcting Codes”第二版的第174-179页,W.Wesley Peterson和E.J.Weldon Jr.展示了一个执行基于多项式的留数系统GF(2q)除法的电路,以下称为“Peterson”。Peterson的电路只能用于乘数恰好等于模的长度的设备中。典型地,这要求一个设备的长度超过本设备的两倍,并且这将不是对于紧凑型的应用有效的成本。它不能用于有交错的实施方案,并且当l长于1时也没有用处,因为它没有提供一个用于多比特字符Y0的装置。
尽管,Knuth[D.Knuth,The art of computer programming,vol.2Seminumerical algorithms,Addison-Wesley,Reading Mass.,1981]407页,暗示了在单l比特字符的基于多项式的除法中采用一种常规的除法,我们采取一种用于预测商的下一个字符的方法,本发明公布了一种用于预测商的下一个字符的方法,它确定性地采用一种逻辑结构。
发明的概述本发明的一个目的是提供一种用于在基于多项式和基于素整数的数域中执行大数计算的微电子电路的专用运算单元,采用用于同时进行交错的模数乘法和可变基数的乘数的约简的相同的预测法。
本发明的进一步的目的还涉及一种紧凑型的微电子电路专用的算术逻辑单元,用于在非常大的整数上执行模数的和正规的(自然数,整数的非负域)乘法、除法、加法、减法和幂运算。当提到模数乘法和平方,其中既采用了蒙哥马利方法又采用了反向形式的方法用于简化的基于多项式乘法和平方时,指的是本设备的某一特定部分,所述的设备是超标量模数算术协处理器,或SMAP,或MAP或SuperMAPTM,同时涉及存在于本申请人1998年3月31日提交的,并在审理中的美国专利申请09/050,958以及2000年1月10日提交的部分继续申请09/480,102中增补方案。
这里描述的本发明优选实施例提供了一个模数计算算符,用于在便携式智能卡(Smart Card)上的公开密钥加密应用,这种卡一般的形状和大小与流行的磁条信用卡和银行卡相同。类似的智能卡,象本申请人的美国专利5,513,133和5,742,530中的技术,以及本申请人上面提到的审理中的申请正被用于新一代的公开密钥加密设备,这些设备用于控制对计算机、数据库、和关键设备的访问;在商业、军事、以及国内交易中的数据流的管理和安全防范;扰频的付费电视节目的解扰等等,以及类似应用的终端设备。一般,这些设备也组装在计算机和传真终端中、门锁上、自动售货机里等等。
优选的结构是集成在多个微处理器或数字信号处理设备中的装置,以及用于精简指令集计算设计中,而该装置同主机的处理单元并行工作。
本实施例优选地仅采用一个乘法设备,它自然地可提供二或三个乘法装置的功能,基本上类似于在本申请人的5,513,133和进一步在美国专利申请09/050,958增补的以及PCT申请PCT/IL98/0048中所描述的结构。采用当前的常规的微电子电路技术,本发明的装置可以和带存储器的控制单元集成在一个智能卡的微电子电路上。
在基于多项式域上和在素数域上的硬件实现的主要区别是基于多项式加法和减法是简单的XOR逻辑运算,不需要从LS传播到MS的进位信号。因此,在硬件实现中邻近的单元之间没有交互作用,并且减法和加法是相同的过程。本申请人所知的最早的公开是在1994年theFondazione Ugo Bordoni的Marco Bucci在意大利的佩鲁贾在Eurocrypt大会的后期会议的一个短讯,从那以后,这个结构为本技术领域中的工程师们所熟知。
在P1和P2中描述的本申请人以前的装置是典型地为有效地在GF(p)域中计算椭圆曲线加密协议而准备的。对于在GF(2q)中的应用,在本发明中,我们证明由于在多项式域中相邻的二进制位之间没有交互,计算可以更有效地执行,在超标量乘法设备上同时进行约简和乘法而不用引入蒙哥马利函数和蒙哥马利寄生。进行在GF(2q)的乘法,作为计算机优选地从最高有效位部分乘积开始。约简是通过相加所需的足够数量的模而把MS的1复位为0进行的。由于没有进位,在这些加法中,结果被自动地模数约简。在本发明中,多项式计算采用同样的结构进行,这里,在GF(2q)中操作数首先被送入MS字符,这里所有内部的进位信号被强制为零。GF(p)计算优选地执行,如P1和P2中所述,这里首先处理LS字符而最后处理MS字符。
该结构已被扩展为允许一种潜在的更快的进程,方法是串行乘数是l比特宽的字符,并且在每一个时钟脉冲,从进位保存累加器CSA中发出一个l比特的字符。这是稍微使预测过程(Y0)变得复杂,因为对于单比特宽的总线,在模2x的基数上对一个奇数的求逆仍然是一个奇数,并且被乘数(J0)的最低有效位总是1。然而,对这两个数域,其约简过程是相同的,其中假定断开(抑制)进位,只要我们记住我们的唯一目的是要输出一个k字符的零串,并且我们认为Y0函数仅是一个零强制向量。
本发明也寻求提供一种用于数字设备的结构,它是常规数字处理器的一个外围设备,它在计算、逻辑和结构上相对于在美国专利5,513,133中所描述的处理器具有新的特性。
本发明提供了一种并发进程和一个硬件结构,它们执行模数幂,不必象典型的,传统的乘/除设备所执行的那样,把幂运算分为相同次数的操作,这里传统的设备一般地在每一次操作中既要执行一个大规模的乘法又要执行除法。本发明的一个优选的实施例的特别的特性是更大规模预测零强制函数的并发,数域的扩展,以及把这种类型的单元集成用于安全通信的能力。
本发明的一个优选的实施例所实现的优点源于串行进程的同步序列。这些进程经合并同时地(并行)在n字符操作数上完成了3个乘法运算,在n个有效的时钟周期内用到了一个多路的k字符串行/并行乘法器,其中结果中的左边最后k个字符驻留在乘法设备的输出缓存器中。就象蒙哥马利所描述的那样对素数域该过程完成了相当于在两个域中的三个乘法计算,以及在GF(2q)中相当于两个乘法和一个除法的处理。
通过对到SuperMAP操作数的同步装载和快速地检测操作数的值,以及快速地预装载并同时与下一个要用到的操作数相加,该装置可以以一种确定性方式执行计算。所有的乘法和幂电路都优选地加上,在快速地预装载中用于下一次迭代的平方序列的前三个k字符变量。优选地,要提供一个检测设备,其中三个操作数中仅选两个用作下次迭代的被乘数,省掉了k个有效时钟周期的等待状态。条件分支被替换为本地检测和补偿设备,这为简单控制机制提供了基础。这里所描述的基本操作被典型地在GF(p)中的确定性时间内执行,其中采用Gressel等人在美国专利5,513,133中所描述的设备或在法国Rousset的STMicroelectronics的商品名为ST19-CF58的设备。
对于大多数操作,本发明的装置对外部易失性存储器的需求是非常少的,因为对于操作中所需的操作数的全部长度都装载并存储在本装置中。本装置优选地使用这种CPU,它可使本装置附加于其上,为本装置执行简单地加载和卸载以及指令队列,而MAP执行其大数计算。目前应用于智能卡的大数的范围是从128比特到2048比特的基本应用。幂处理的时间实际上不依赖于控制它的CPU。实践中,当把本装置附加在任何CPU上时,结构的改变一般是不必要的。该硬件设备是自包含的,并且优选地是添加在任何CPU总线上。
总之,本发明还涉及大整数的算法处理。这些大整数一般地是在整数的自然(非负)域或者在素数的伽罗瓦域,GF(p),复合素数模,以及在GF(2q)中基于多项式的数。更特别地,本发明的优选的实施例寻求提供可以实现大数的模运算和幂的设备。这些设备适于执行公开密钥加密认证和加密协议的操作,这种操作是在素数域上在非常大的操作数上进行,并且它在当前一般的模运算协处理器上不能有效地执行,同时,在软件实现中不能安全地执行。优选地,同样的通用结构用于在数量级较小的整数上椭圆曲线。采用乘法的新的反转模式方法,多项式算法具有优势,因为生成零不妨碍寄生的2-n因数的计算。
本结构提供了一个大整数操作数运算的模数实现,同时也允许普通的,更小的操作数运算,这是通过加宽串行单字符总线,即采用大的基数实现的。一般地,这对于加速计算、减小实现SuperMAP的硅区域、以及制造与流行的数字信号处理器(DSP)的长度相兼容的设备是有用的。
对于在素数和奇数复合域上的模数乘法,A和B本别被定义为被乘数和乘数,而N被定义为模运算中的模。N一般地大于A或B。N同时表示存储模值的复合寄存器。在某些时候,N一般地比A小。A、B和N一般地是n个字符长,其中字符一般地是1到8比特长。k是在由乘法设备的大小(单元的数目)定义的组大小的l比特字符的数目。类似地在基于多项式的GF(2q)计算中,模数N是n比特长的,其中MS比特是1(首项系数为1),并且A、S和B操作数在适当约简后也是n比特长的。如果一个GF(2q)的计算结果是首项系数为1的,最好把它“约简”为一个值,这个值的MS位为零,约简的方法是把所述的结果与模进行异或。在优选的实施例中,当一个GF(2q)的第一有效比特以反向模式构成时,MAP可以判断该比特是否为1并执行适当的约简。
在素域中,“≡”,或者在某些情况下“=”,用于表示模数的同余,例如16≡2 mod 7。16被称为“同余”为2模7,因为当16除以7时余数为2。当Y mod N≡X mod N时;Y和X都可以比N大;然而,对于正数X和Y,其余数是相等的。还要注意负整数Y的同余数是Y+uN,其中N是模,并且如果Y的同余小于N,则u是给出正结果的最小的整数。
在GF(2q)中的同余更为简单,因为加法和减法是相同的,并且普通的计算一般不会有潜在的溢出问题。例于N=1101和A=1001,由于A的左边MS比特是1,我们必须通过采用模2运算从A中约简(“减法”)N,A XOR N=1001 XOR 1101=0100。
符号¥用来表示狭义的同余,这在GF(p)中特别有用。在这里所描述的过程中,一个值通常或为所需要的值,或等于所需要的值加上模。例如X2 mod 7。X可以等于2或9。X定义为狭义同余为2 mod 7。当¥符号用于上标时,就象在B中,那么0≤B<2N,或换一种说法,B或者等于与B同余的最小的正数B,或者等于最小的正同余数B加上模N。在本发明中专用的其它符号在本概述的后面出现。
当X=A mod N,X定义为A除以N的余数;例如,3=45 mod 7,而在GF(2q)中更简单一1111 mod 1001≡0110。
在数论中,X的模数乘法的逆记为X-1,其定义为X·X-1mod N=1。如果X=3,而N=13,则X-1=9,即在GF(p)中3·9除以13的余数是1。
对于两种数域,我们一般地选择用指数函数计算A的乘法逆,例如,A-1mod q≡Aq-2mod q。
在提及比特、字符、以及整个操作数值时,缩写MS和LS用来分别表示“最高位”和“最低位”,就象在数字术语中常用的那样,但在基于多项式的求逆模式中,操作数被装载为MS数据在先LS数据在后,其中数据字的比特顺序在装载时被反转。
在本说明书中N既表示值N,又表示存储N的移位寄存器的名称。值的星号上标表示这个值作为中间值可能不完整或将会改变。A是将需要求幂的数字的值,而n是操作数N的比特长度。初始化后当A被“蒙哥马利P域归一化”为A*(A*=2nA-P1中已说明)A*和N在幂运算的整个中间步骤中一般为常量。在GF(2q)计算中,当计算需要在正常的非逆的比特位置上执行时,我们将遵循同样的协议。然而,采用逆的形式,我们的计算导致最高有效位为0,这将被忽视,并且它不代表一个乘法的移位,因为这没有进位。
在第一次迭代,在求幂的初始化之后,B等于A*。B也是寄存器的名称,其中累加值最后会等于所需要的求幂的结果,它驻留在这个寄存器中。S或S*表示一个临时的值;并且S表示存储在GF(p)的数S的除了单MS比特外的所有比特的一个或若干寄存器。(S*连接上这个MS比特就等于S。)S(i-1)表示在第i次迭代输出端的S的值。在这些多项式计算中,在S上不需要执行模数约简。
一般地,在素数域上X和Y的蒙哥马利乘法实际上是执行(X·Y·2-n)mod N,其中n一般是在一个模数中字符的数量。这被记为,P(A·B)N,并记MM或在P域中的乘法。在蒙哥马利算法的上下文中,我们把在P域中和基于多项式域中乘法和平方称为乘法和平方操作。
我们将重新定义在GF(2q)中蒙哥马利型算法的这个创新性的扩展,使其表示逆形式的数据序列,其中MS零强制不会改变同余或产生一个繁重的寄生因子。因此,我们可以引入一套新的符号以适应运算的扩展,并且允许一种更宽的串行乘法器总线结构。这个不止一比特的串行乘法器流优先于允许一个自然整数的超标量的乘法器。这个乘法器设备可以接受32比特被乘数和4比特乘数,到一个可以同时执行模数算术乘法和约简的装置。
串行/并行超标量模数乘法器增强型符号l一个字符(数字)中的比特数。
r乘法器字符的基数,r=2l。
n操作数(乘数、被乘数和模)的大小,以字符计。在蒙哥马利算法GF(p)域中计算的示例中,l等于1,而n为模数操作数的比特长度。
k串行-并行乘法器的长度,以字符计。
m被乘数的交错片(段)的数目m=n/k。
Si第i次MM迭代的部分积;0≤i≤m-1;S0=0。
Si0第i次迭代的结果的右边的字符,在丢弃Z的右边前k字符的0后。
Si第i次迭代的结果左边n-k字符。
SijSi的第j个字符。
A并行的被乘数,由m·k个字符组成。
AiA的第i个k字符的片,(和/或存储Ai的寄存器)。
AitAi的第t个字符。
B一个串行乘数(和/或存储B的寄存器)。
B0B的右边最前面的k个字符。
BB的左边最后(n-k)个字符。
B0jB0的第j个字符。
BjB的第j个字符。
N模数操作数。(和/或存储所述的乘数的寄存器)。
N0N的右边k个字符。
{在GF(p)上的LS字符,在GF(2q)上的MS字符}NN的左边(n-k)个字符。
{在GF(p)上的MS字符,在GF(2q)上的LS字符}N0jN0的第j个字符。
NjN的第j个字符。
Y0在GF(p)域中蒙哥马利乘法和约简所需的零强制变量。Y0有k个字符长。
Y0jY0的第j个字符。
R驻留在进位保留累加器中的和值,(包括未解析的内部进位ins)以及来自最后的串行加法器进位,460。
J00对于“快速的”有限域乘法和约简,模数N的零强制字符函数。对于l=1,J00总是等于1。
Carryj基数r的串行-并行乘法器的第j个内部进位字符。
Carrya对于GF(p)计算,串行加法器输出的基数r的进位。
Sumj基数r的串行-并行乘法器第j个内部和字符。
LS最低有效位MS最高有效位‖串联,也就是A=110,B=1011;A‖B=1101101。
Right Hand所有GF(p)计算数据块的低位部分和求逆的GF(2q)格式的MS部分。
Left Hand所有GF(p)计算数据块的高位部分和求逆的GF(2q)格式的LS部分。
GF(p)伽罗瓦域,严格说来,在素数上的有限域,我们也使用复合整数(两个很大的素数的乘积)并允许做加、减、乘和伪除法。
GF(2q)伽罗瓦域,使用模2运算的有限域。
为了适应特殊的数字系统,用来外部地切换带进位或不带进位的加或减整数的算符或设备。
用于切换或者在GF(p)上或者在GF(2q)上执行乘法的算符或设备。
S数字域切换器,假如S=1,切换器使能所有进位输入/输出为GF(p)计算。
S=0,切换器禁用所有进位输入/输出为GF(2q)计算。
SuperMap私有的超标量模运算处理器系列的任何一个成员是从属于这个发明的。SuperMap商标是在欧洲登记的并且在美国正在审理中。
根据本发明的第一个方面,因此这里提供了一个作用于执行在基于多项式GF(2q)和GF(p)域的运算的乘法和平方的微电子电路装置,平方和约简采用一个串行馈送的基数为2l的乘数,B,和k字符的被乘数段,Ai,和一个k字符的累加器,其中约简到一个狭义同余是以“快速的”方式执行的,以一种收缩的方式,这里Ai是被乘数,乘以B,乘数,在模为N的条件下,并且其结果最多有2n+1个字符长,包括k个首先出现的被忽略的零字符,这些零字符不被保存,这里的k个字符没有比模数低的比特位,所述的操作在两个阶段里执行,本装置包括第一(B)、和第二(N)主存储寄存器部件,每个寄存器用于保持至少n比特长的操作数,分别用来存储一个乘数值,用B表示,以及一个模数,用N表示,这里这个模数小于2n;一个数字逻辑判断检测器,Y0,用于“快速的”预测何时需要把模数值的加到加法累加器中的值上,以使从该设备中发出的前k个字符被强制为零;对至少k字符输入乘数的一个模数乘法设备,它仅有一个,至少k字符长的加法器,求和设备用于接受k字符的乘数,乘法设备用依次换到累加器设备,乘数的值也依次从B寄存器中接收乘数值,并且一个“快速的”,同时生成的的预测值作为乘数,用于在第一阶段强制首先发出的k个零输出字符,其中在每个有效的机器周期里,至少一个指定的乘数被地加到累加器设备;被乘数值被依次切换到包括下面三个被乘数中的一个或两个的累加器设备,第一个被乘数是全零的字符串值,第二个值是被乘数Ai,而第三个值是模的N0段;一个预测器用于预测l比特的k字符串行输入乘数值Y0;本装置可用于轮流输入乘数值到乘法装置,所述的值在第一阶段首先是B操作数,而同时,由Y0组成的第二个乘数值,“快速的”预测k字符的字符串,用来强制首先出现的输出为零;本装置进一步包括一个累加器设备,,用于在被乘数被到累加器设备的同时输出值;
一种输出传递机制,在第二阶段用于从累加器设备上输出最终的模数乘法结果。
根据优选的实施例,到累加器设备的加法是通过每次重新串行地加载的更高阶乘数字符串来实现的。
优选地,乘数字符串可以保证在输入B字符和相应的输入Y0字符都为零时,使到累加器设备的求和不发生;可以保证在输入B字符为1而相应的Y0字符为零时,仅加到被乘数Ai上;可以保证在输入B字符为0而相应的Y0字符为1时,仅加到模N上;并且可以保证在输入B字符和相应的Y0字符都为1时,加到模数N和被乘数Ai的求和上。
优选地,本装置可用于预装载被乘数值Ai和N到两个专门的预装载缓冲器,并把这些值加到第三个被乘数预装载缓冲器,消除了单独对每个被乘数进行加操作的必要性。
优选地,乘数字符值为输入排列成串行的单字符形式,并且其中的Y0检测装置用于在一个时钟序中仅预测一个字符。
在一个优选的实施例中,其中的累加设备执行模2计算,异或加法/减法,其中加法和减法部件中的所有进位比特都被忽略,因此,排除了在计算中溢出和进一步限制的收敛条件。
优选地,进位输入被无效为零,用S=0来表示,一般用于进行基于多项式乘法。
优选地,本装置通过进位删除电路提供无进位运算,当S等于零时,它的作用是在GF(2q)中执行方程计算的电路单元,S指示删除电路和所有的加法器和减法器,专用的为XOR,模2加/减法单元。
一个优选的实施例被调整,使得从操作单元发出的前k个字符段为零,在下一个依次Y0字符的预测中通过下面四个量进行控制i.Ai寄存器的右边字符乘以B流的Bd字符,A0Bdmod 2l的l比特乘l比特模2l的乘法的结果中的l比特的Sout比特;ii.从累加器,S(CO0)中首先发出的进位字符;iii.从累加器,SO1,的右边字符发出单元中的第二个l比特的Sout字符;iv.l比特的J0值,它是N0模数被乘数寄存器中的右边字符负乘性逆,其中,值A0Bdmod 2l,S(CO0),以及SO1按字符相加到一起,并且“快速的”乘以J0字符,输出一个有效的Y0零强制预测字符以强制一个l比特的输出字符串为零。
本装置优选地用于执行基于多项式操作数的乘法以逆模式执行,乘法从右边的MS字符向左边的LS字符执行,用于执行模数约简的乘法,而不需要蒙哥马利型的寄生函数。
优选地,本装置进一步包括串行馈送的预装载缓冲器,被乘数从一个或多个存储器设备中“快速的”预装载进预装载缓冲器。
本装置优选地用于相加到一个被乘数流,一个从附加的n比特S寄存器发出的先前的值,通过一个l比特加法电路,使得当Y0检测器检测在累加器设备中把模加到求和的必要性时,首先发出的输出字符为零,其中Y0检测器用于检测、利用下一个依次的相加字符A0Bdmod 2l、S(CO0)、SO1、Sd和S(COz),合成的相加的字符被“快速地”有限域乘以l比特的J0值,其中定义了加法而定义了乘法,它们在本过程中适用于有限域。
优选地,对于l=1,J0固定为1,并且J0的乘法是固有的,不需要额外硬件。
优选地,一个比较器用于判断一个来自模数乘法设备的有限域输出,它工作在GF(p),这里发出的右边前k个零字符被忽略,这里输出大于模数N,它就控制一个模数约简,其中所述的值是来自乘发器设备的输出流的目标存储寄存器的输出,因此避免了为较小的积值分配第二个存储寄存器设备。
优选地,对于在GF(2q)中的模数乘法,本装置用于乘法,而无需一个额外的预先计算的超过l比特的零强制因子。
一个优选的实施例是,通过把A操作数值或B操作数值复位为零,并且设置部分结果值S0为1,来计算J0常数。
根据本发明的第二个方面,提供了一个微电子电路装置,用于执行整数A和B的交错有限域模数乘法,可以产生一个A乘以B模N的输出流,其中在模数操作数寄存器中的字符数目,n,大于k个字符的段长度,其中乘法过程以大量的交错迭代方式进行,在每一次交错的迭代中,操作数包括模数N、乘数B、上一步计算的部分结果S、以及被乘数A的k字符的字符串段被送入乘法设备,分段地处理从A0字符串段到Am-1字符串段,每次的迭代结果被依次加到序列中的下一个临时结果S,这里迭代结果的前面发出的字符是零,该装置包括第一(B)、第二(S)和第三(N)主存储寄存器,每个寄存器分别用于存储乘数值、部分结果值和模数;一个模数乘法设备用于在大量的乘法迭代过程的阶段中的每一步,把按顺序的大量的被乘数值中的一个或两个加到累加器设备,并且按顺序作为乘数轮流接收,输入来自所述的B寄存器,
一个“快速的”先行值Y0,作为乘数它用于强制在每次迭代中右边首先输出零字符,以及所述的N寄存器;被乘数并行寄存器用于至少依次接收来自A、B、和N寄存器源的值,以及依次地还有一个被乘数零强制Y0值;本装置进一步利用了Y0检测装置,它用于产生一个二进制字符串,在第一阶段用作乘数,在第二阶段用作被乘数;本装置用于获得适用于第一阶段切换到累加器设备的被乘数值,它包括第一个零值、第二个值Ai,它是被乘数A的k字符的字符串段、以及第三个值N0,它是模数N发出的前k个字符;本装置进一步作用于,利用一个临时的结果值S,它是上一次迭代的结果,用于和来自累加器设备发出的值相加,为顺序地下一次迭代产生一个部分结果;本装置进一步用于,利用依次输入的被乘数值,它送入累加器设备用于乘法的第二阶段,它包括第一个开头零值、第二个在第一阶段留在原位的Ai操作数、以及第三个在第一阶段已经预测得到的Y0值;乘数值在第一阶段被送入乘法装置,它首先是发出的字符串B0,所述的乘法装置用于,乘以所述的字符串段同时乘以第二个由预测值Y0字符串组成的乘数值,它是按字符同时装载的,它为第二阶段被生成到预装载被乘数缓冲器;两个乘数值在第二阶段输入到本装置,它们分别是B操作数的左边的n-k个字符值,记为B,以及模数N的左边的n-k个字符值,记为N;以及所述的装置还包括一个乘法输出设备,它在最后一个阶段作用于传送驻留在累加器设备上的结果的值的左边的段到一个结果寄存器。
优选地,本装置在基于多项式操作数上以逆模式执行乘法,乘法从MS字符到LS字符,用于执行模数约简而不需要象本申请人的美国专利5,742,530中那样的蒙哥马利类型的寄生函数。
根据本发明的第三个方面,提供了利用被乘数的首先输出值来预测Y0值的装置,而该输入有乘数B、来自累加器的进位值、来自累加器的累加值、来自上一步计算的部分结果的当前值、以及来自的加法器的进位值,这个加法器把来自累加器的结果和上一次的部分结果相加。
优选地,本装置被改造以确保来自该设备的前k个发出值为零字符,所述的改造包括对下一个依次的Y0字符的预测,它用到下列量i.Ai寄存器的右边字符乘以B流的Bd字符,A0Bdmod 2l的l比特乘l比特模2l的乘法的结果中的l比特的Sout比特;ii.从累加器,S(CO0)中首先的进位字符;iii.从累加器,SO1,的右边字符发出单元中的第二个l比特的Sout字符;iv.来自S流的依次下一个字符值,Sd;v.来自Z输出全加器的l比特的进位字符,S(COz);vi.l比特的J0值,它是N0模数被乘数寄存器中的右边字符负乘性逆,其中,值A0Bdmod 2l,S(CO0),SO1,Sd按字符相加到一起,并且“快速的”乘以J0字符,输出一个有效的Y0零强制预测字符。
在进一步的实施例中还提供了至少一个检测器用于比较输出结果和模数N,其机制在于在结果寄存器的输出上启动一个第二减法器,以输出一个模约简的值,它是输出结果值的狭义同余,免除了为较小结果分配第二个内存存储的必要。
在更进一步的实施例中,两个被乘数的和值被装载进一个预装载字符缓冲器,它有至少k字符的记忆部件的寄存器,而同时,前面的值之一被装载进另一个预装载缓冲器。
根据本发明的第四个方面,提供的装置具有一个累加器和一个具有零强制预测机制,用于执行一系列交错的模数乘法和平方,并被改造成并行执行等效于三个自然整数的乘法操作,使得结果是一个幂。
在一个实施例中,下一个依次地用到的被乘数被快速地预装载进一个预装载寄存器缓冲器。
在进一步的实施例中,缓冲器和寄存器装置作用于装载来自外部存储器源的值,所述的缓冲器和寄存器在计算时卸载到外部存储器源中,这样,操作数的最大尺寸就取决于可用的存储器部件。
在更进一步的实施例中,还提供了记忆寄存器部件,所述的记忆部件一般是串行单字符输入/串行单字符输出,并行至少k字符输入/并行至少k字符输出,串行单字符输入/并行至少k字符输出,以及并行k字符输入/串行单字符输出。
优选地本装置提供,在乘法型迭代的最后阶段,乘数输入为零的字符,它用于刷新进位保存累加器内存的左边段。
优选地,本装置先于迭代需要时,下一个顺序的被乘数快速地预装载到预装载记忆缓冲器。
优选地,本装置快速地从中心存储器部件上预装载被乘数值到预装载缓冲器。
同样的装置计算k字符的蒙哥马利常数J0,相对于模数的右边的k字符段,优选地通过把A和B都复位为零并设置S0=1,然后执行一个k比特的乘法。结果将驻留在Y0寄存器中。
使用蒙哥马利类型算法的模数乘法序列
k字符进位保存加法器,CSA,是用在多项式域和素数域的串行/并行超标量模数乘法的基础。基于多项式GF(2q)的算法最好在所有进位机制关闭下执行。
串行-并行超标量蒙哥马利乘法器分三个阶段计算蒙哥马利模数乘积,其中在一个最优的实施例中,最后一个阶段可能是带CAS进位的整个左边k个字符段的单时钟转储(MS用于通常的乘法,LS用于逆模式的多项式计算),并且在一个更简洁的实施例中,最后阶段可能是k个有效的时钟串行刷新CSA的内容。
在前面P2的公布中,Y0因子被1比特1比特的计算,因此,通过定义一个1和模数右边比特的方程,只有J0右边的比特是有意义的。在这个增强的设备中,设备是字符串行的,在每一个时钟周期Y0的一个l比特字符被产生。正如在前面P1中公布的,Y0是第一阶段的零强制函数,它在模数的值上增加必要的倍数到一个累加值,以致相关的结果是适合的,并且不会长于mk+1个字符,同时最右边出现的字符是全零的。X+ON≡X,当ON≡0modN。
模数乘法序列最初计算前,我们假设设备中没有以前暂时的或随机的值;操作数N,B和A的至少第一段值存在于设备的寄存器中。S0=0;初始化时部分乘积是典型值0。特别地,在操作数上执行的模数算法包括两个或多个k字符段,特别在三个不同的阶段。对于一个通常的完全乘法中,其中模数有m段,特别地有m个超标量乘法交错反复,因此被乘数的每一段被乘上一个总乘数,通常是B。
第一阶段的过程,在(i=0段)每一个交错超标量乘法的是通常的相互超标量乘法累加SiAI·B0Y0·N0(B0和Y0是馈送到乘法器的第一段操作数字符的串行字符,Ai和N0是并行单限操作数,Si是前一个迭代/计算产生的部分乘积。在第0次迭代时Si=0)第一个阶段使用带前一个结果的右边段的两个超标量乘积的累加。零的k字符串从乘法设备中送出,并被丢弃;部分的第一段结果放在设备缓存器中,并被求和成为第二阶段的结果。
第一阶段结果一般包括R,CSA的内容被与全零的右边段的串行输出联接。(在GF(p)计算中,R有另外的LS进位比特)第二阶段的过程是通常的相互超标量乘法累加RSiAI·BY0·N(注意,画线的变量,举例来说B是一个操作数保留的左边值。它一般地有一个或多个段,也就是,m-1个段。B和N是1比特1比特地串行馈送到乘法器中的,并且Ai是从第一个阶段保留下来的,Y0在第一个阶段是一个乘数,并在第一个阶段装载进机器,在后面的迭代中成为被乘数,是一个并行操作数)。
在第二个阶段的后面,一般包括m-1次迭代,保留在CSA中的Si的左边段-准备被传输-并且右边段(k字符段)从设备中发出,一般地进入一个S寄存器。注意在素数域的乘法是以通常的进位保留加法来执行的。在GF(2q)的逆形式乘法是从最高有效位到最低有效位进行的。当一个模数值必须被加到累加器中时,将使用Y0函数。除了在设备中禁用进位,机制过程对两个数字系统来说一般是一致的。
我们公布用于在有限域导出零强制向量Y0j字符的方法。
计算J0j≡-N00-1mod2l对一个模数是互素数的所有的自然整数在两个数域是乘性逆的。N00是奇数,因此没有2的因子。mod2l的所有因子是2,因此所有的数至少有最低有效位1,并且模数仅有因子2,是互素数,J0j总是存在的。形式上,对于素数N00和2l,gcd(N00,2l)=1。
方程的单字符可被用随机逻辑、带简单电路、或者带简单查找表的硬件实现。只有2k-1个不同的值必须能从查找表中推出。在逆模式格式中,多项式模数必须被右对齐,名义上是奇数。在典型的求幂方程中,两个数域,模数比特的右边比特位是1,名义上是奇数,并且一个奇数mod2k的乘性逆必须总是奇数。
假如l=1,J00的乘数显式的等于1,并且不需要被计算。
在第一个阶段被Y0方程所强制的一个字符输出的结果总是0,因此SuperMAP的第j个字符的输出Zij是0=(2lRSijAi0·B0jY0j·N00)mod2l=Zij;因此,(RSijAi0·B0j)≡-Y0j·N00;并且Y≡-N00-l(RSijAi0·B0j)mod r。
从上面的等式,我们可以知道在两个数域,J00最好是模数右边k个字符的模乘性逆的负值;注意模2运算,正值和负值是一样的。
R是CSA中的驻留值加上从图2中最后的串行加法器460输出的进位位的和。Sij是在第i次迭代的部分乘积的第j位。Ai0是A的第i片的最右边的字符(在GF(p)中的LS)。B0j是B的第j个字符。在蒙哥马利乘法的所有迭代中B0是常数(乘数)。Y0是在每一次(第i次)迭代中产生的k字符向量。Y0j是在迭代的第一个阶段的第j个时钟周期产生的第j个字符。N是一m模数。N0是模数的右边片。N00是N0的右边字符。
两个域标准化超标量模数乘法的方法S0=0对于i=0到m-1(交错迭代)
第一阶段(每一次交错)R=0对于j=0到k-1(第一阶段的每一个字符)Y0j=(J00(RS0jAi0B0j))mod 2lZij=(RS0jAi0B0jY0jN0)mod 2l;并且R=[(2lRS0jAi0B0jY0jN0)]/2lk个有效的时钟周期后,Z流的第一个段是全零,并被丢弃;相关的Y0、k字符向量,被准备用做下一个阶段的被乘数,并且和值R将被用在下一个阶段。
第二阶段对于j=k到n-1Zij=(RSijAi0B0jY0jN0j)mod 2lR=[(2lRSijAi0·B0jY0j·N0j)]/2l上面的基于串行-并行乘法器带一个字符的算法实现是上面的协议的简单扩展。
(Quotient(x,y)是不带余数的整数除法函数。例如,假如x=10101b,并且y=10000b,那么Quotient(x,y)=1)。
S0=0对于i=0到m-1(交错循环)第一阶段对于j=0到k-1Y0j=(J00Si0Ai0B0jSCarry0Sum1Quotient(Si0Sum0,r)))mod r对于t=0到k-1(带一个时钟周期的整个循环)Sumt=(Sumt+1SCarrytAitB0jY0jN0t)mod rCarryt=(Quotient((Sumt+1CarrytAitB0jY0jN0t),r)(在这个阶段乘法器输出是0)第二阶段
主要部分Carrya=0对于j=k到n-1对于t=0到k-1(带一个时钟周期的整个循环)Sumt=(Sumt+1SCarrytAitBjY0tNj)mod rCarryt=(Quotient((Sumt+1CarrytAitBjY0tNj),r)Si,j-k=(Si,j-2kSum0SCarrya)mod rCarrya=Quotient((Si,j-2kSum0SCarrya),r)乘法器的刷新对于j=n到(n+k-1)对于t=0到k-1(带一个时钟周期的整个循环)Sumt=(Sumt+1SCarryt)mod rCarryt=Quotient((Sumt+1Carryt),r)Si,j-k=(Si,j-2kSum0SCarrya)mod rCarrya=Quotient((Si,j-2kSum0SCarrya),r)在GF(p)中,对当l=1这个特殊情况例子的正式的解释,见P1。
上面描述了用于进行交错有限域整数A和B模数乘法运行产生A乘以B模N的输出流的一个微电子电路的方法和装置,其中n是在模操作数寄存器中的字符的数量,并且大于k,其中乘法过程是交错进行的,其中在每一个带操作数输入到乘法设备的交错迭代中,包括模数N、乘数B、前面计算的部分结果S和被乘数A的k字符串段、字符串段是从A0字符串段到Am-1字符串段,其中每一个迭代结果是加到S依次的下一个,暂时结果,依次地,其中,迭代结果第一个输出的字符是0,本装置包括一般地,这有四个用来给乘法器馈送串行l比特字符寄存器,第一个(B),第二个(S)和第三个(N)和被配置成乘法器有效负载的优选的(A)。为了计算那些特别在MAP内部积存器中不适用的长的操作数,CPU可从辅助存储器中装载操作数。
特别地,这些主存储寄存器存储和输出操作数,分别存储一个乘数,部分结果值和模数N。
在迭代乘法过程的阶段中,按顺序,模数乘法设备运行加到累加器,依次加上多个被乘数值的1个或2个,并且顺序地接受作为乘数,顺序地从第一个B寄存器中输入,第二个是一个快速的先行值Y0,在每一个迭代中作为乘数来强制输出字符先输出的右边为零,第三个值从模N寄存器中来。
被乘数并行寄存器运行顺序地接收从A、B和N寄存器来的值,和一个被乘数零强制Y0值。
零强制Y0值检测到设备运行产生了在运行的第一阶段作为乘数的二进制串,并作为每一个迭代乘法的第二阶段的被乘数。
用于第一阶段被切换到累加器的被乘数值可能包括四个值,第一个值是零,第二个值是Ai,是被乘数A的k字符串段,第三个值N0,作为模数N的发出的前k个字符。假如有如图6所示第四预装载缓存器在乘法的开始N0值特别地被切换。然后当A的k字符片被输入,Ai值被串行地与N0值累加并存储在第四个寄存器中。
假如一个计算是典型的单k字符模数,那么不需要S寄存器,或者用于临时结果的值S。假如操作数是2k个字符或更长,那么操作必须是Ai片的迭代。对于B的平方运算片特别地是从B流上抓取并预先装载到装载缓存器中。
乘法过程的第一次迭代,临时结果是零。
从前一次迭代来的后续的临时结果,被与从累加器产生的值累加,来产生用于下一次迭代的部分结果。
被输入的被乘数,依次进入用于第二阶段的累加器,第一个零值是伪寄存器值,第二个Ai操作数是在第一个阶段保留下来的,第三个值Y0是在第一个阶段预测用来继续乘以模N余下的字符。
在第一个阶段输入到乘法器设备的乘数值是先产生的串B0,是B操作数先产生的字符串段,同时乘以由先行值Y0字符串组成的第二个乘数,在第二阶段当它被产生到预装载缓存器是被一个字符一个字符地同时装载的。
在第二个阶段两个乘数输入进装置,分别地,从B操作数的左边n-k个字符值标记为B,从N操作数的左边n-k个字符值标记为N。
第三个阶段是刷新设备,它传输保留在累加器中的结果值的左边段。这或者是单个时钟数据转储,或者是单个串行卸载,被馈送在乘法器输入的零字符驱动。
假如转储是并行转储,一些部件被用来比较以决定是否结果要求模的额外的约减。
在本发明中,多个创新增强中的一个是在GF(29)的逆模式乘法。因为在这个算法中缺乏累加器单元间的相互作用,从乘积的MS端进行乘法和约减成为可能,因此乘积是没有因丢弃零导致的繁琐的寄生函数的模约减结果,这与在传统的蒙哥马利乘法中进行右移位是等价的。
第二个创新是允许自动零强制为专利申请P2的Y0函数的扩展,它描述了一个设备一次只有一个比特被预测。只有J00比特乘上单比特异或值。一个奇数的乘性逆和它的负数产生一个奇数。被保存的查询表或一个随机逻辑电路用来计算l=1时的J0值。注意,在非类似的数字系统中,J0是一个不同的量。在这个扩展中,对于相关的数域,我们证明Y0值是如何被推导出的。
下面描述来预测Y0值的电路单元,其利用被乘数的第一发出值,和乘数B的现有输入、累加器设备的进位值、来自累加器的求和值、来自前面计算的部分结果的现有值、以及来自加法器的进位值来预测Y0值,所述加法器把来自累加器设备的结果和上一次的部分结果相加。
不同的表述,用于控制零强制函数的六个值是i.Ai寄存器的右边字符乘以B流的Bd字符,A0Bdmod 2l的l比特乘l比特模2l的乘法的结果中的l比特的Sout比特;ii.从累加器,S(CO0)中首先发出的进位字符;iii.从累加器,SO1,的右边字符发出单元中的第二个l比特的Sout字符;iv.来自S流的按顺序的下一个字符值,Sd;v.来自Z输出全加器的l比特的进位字符,S(COz);vi.l比特的J0值,它是N0模数被乘数寄存器中的右边字符负乘性逆,其中,值A0Bdmod 2l,S(CO0),SO1,Sd按字符相加到一起,并且“快速的”乘以J0字符,输出一个有效的Y0零强制先行字符来强制一个l比特为零的输出字符串。正如P1,为了确定是否一个输出必须是模约简的,一个检测器用来与N比较输出结果,其机制在于在结果寄存器的输出上启动一个第二减法器,以输出一个模约简的值,它是输出结果值的狭义同余,负除了为较小结果分配第二个内存存储的必要。
被配置执行乘法的单累加器,和预测零强制机制一起执行一系列的交织模乘法和平方。所有的设备的执行相当于三个整数乘法,象在传统的蒙哥马利方法一样,J0是一个k字符的设备乘以B0Ai和Si的前k个字符,并且最后使用Y0来乘上N。
当SuperMAP在计算乘法的最后迭代,下一个乘法的第一片可被快速预装载进预装载寄存缓冲器装置。这个值可能是前一个乘法的结果或驻留在

图1或图5的寄存器块中的一个寄存器段中的被乘数的一片。
预装载值是两个被乘数的累加和,它被加进一个k字符寄存器,仅用于GF(2q)计算。在GF(p)计算中,必须用额外进位位规定。
特别地,对很长的模,缓存器和寄存器邻接SuperMAP典型地没有足够的存储器资源。用来直接装载操作数到预装载缓存器的装置将被提供,用来在CPU的存储器图中存储操作数。对于逆模式乘法,从CPU来是输入字的比特顺序一般在数据的输入和数据输出设备中被反向。
附图的简要说明在图中粗实线表示k字符(kl比特)宽的并行总线。细的相邻信号线描述l比特宽的线,大多数控制线没有画出;那些被认为是理解过程所必须的,特别地用点划线来画出。
图1是根据本发明是实施例装置的方框图,其中描述了四个主寄存器,并且显示了串性数据到运行部件的的流程,图3中到主CPU的输入和输出数据流程;图2是用来控制从图1的数据的运行单元的实施例的方框图;图3是一个完整的单芯片、单块集成电路的加密计算机的优选实施例的简化方框图,特别地在一个小卡中表示;图4是一个完整的单芯片、单块集成电路的加密计算机的优选实施例的简化方框图,其中数据禁用开关被用来提供加速卸载从运行单元来的数据。
图5是用来产生J0的数据寄存器块的简化方框图;图6是一个运行单元的简化方框图,其中Y0检测器是用来强制第一阶段零输出的设备;图7A是图6主计算部分的方框图,带计数圆圈的图标与图7B、7C和7D的时序图和流程图有关。
图7B是一个事件的时序指针图,显示了进程的逐级引入,并包括平方运算的第一次迭代;图7C是一个详细的事件序列,用于在平方序列第一次迭代中消除“下一次蒙哥马利平方”的延时,图标指针与图7A、图7B和图7C有关;图7D描述计算输出的时序,与图7A、图7B和图7C有关;图8A和8B,一起描述在GF(2q)和GF(p)中向量Y0的产生。图8A是一套查询表用来在l=2和l=4时确定N0右边字符的负乘性逆,图8B用简单的框图描述在两个数域中当l=2和l=4时产生Y0函数的信号。对优选的实施例的描述在图中粗线表示k字符(kl比特)宽的并行总线。连接信号线的细实线表示l比特宽的线。特别地,控制线不显示;被认为是理解过程必须的,特别用点划线画出。
图1-2,一起构成了一个简化的串行-并行算术逻辑单元(ALU)的框图,它是按照本发明的优选的实施例构造并工作的。图1-2的装置,优选地包括下列部件单复接器-受控切换元件,它从多个信号的输入中选择一个信号和字符流,并把这个选出的信号引向一个单独的输出。复接器标记为M1到M13,并且是更大的组件中的一个固有的元件。
复接器和预加器,390,是一个kl+1个复接器的阵列,它选择四个k或k+1字符的输入中的哪一个将被加入CSA,410。
B(70)和(80),SA(130),SB(180)和N(200)和(210)是在优选实施例中的四个主要的主串行寄存器。SA是在概念上和实际上冗余的,但却可以极大地加速非常长的数字的计算,并节省易失性存储器资源,特别是在模的长度是2·k·m字符长的情况下。
串行加法器和串行减法器是逻辑单元,它们有两个串行字符输入和一个串行字符输出,并且在两个长字符串的字符上执行加或减法。部件90和500是减法器,330和460是串行加法器。从输入到输出的传播时间非常短。串行减法器90和500如果B*大于或等于N,从B上减去B*,并且/或者,如果S*大于或等于N,从S上减去S*。串行减法器480作为比较器部件的一部分用于检测B*是否大于或等于N。全加器330,把送到装载缓冲器340的两个字符流加上一个等于290和320装载缓冲器中值的和的值。
快速装载器和卸载器10和20,以及30和40,分别地是加速CPU控制器的数据流的设备。特别地,这些设备消除了对其它直接内存访问部件的必要。20和40是用于反转数据字的,因为在GF(2q)的逆格式的乘法中反转数据字是必需的。
数据输入50,是一个并行输入串行输出的设备,因为当前的ALU设备是一个串行馈送的脉动处理器,数据是并行输入的,但处理是串行的。
数据输出60,是一个串行输入并行输出的设备,用于从协处理器输出结果。商产生器是图2的一部分,它在除法机制的每一次迭代中产生一个商字符。
刷新信号,Bd上的240,S*d上的250,和Nd上的260用于确保最后k+1个字符能从CSA中输出。第二个实施例将在第二阶段的结尾调整R数据,并将执行一个单并行数据转储以刷新CSA。
装载缓冲器R1,290;R2,320;和R3,340是串行输入并行输出的移位寄存器,适于接收三个可能的大于零的被乘数组合。
锁存器L1,360;L2,370;和L3,380;是用于接收来自装载缓冲器的输出,因此允许装载缓冲器可以在这个数据很好地锁存进L1,L2和L3之前临时地启动下一阶段数据的处理。锁存器L0是特别地到390的常数的全零的虚拟输入,它特别地不是用锁存逻辑实现的。
Y0检测器430,是逻辑设备,它确定模累加的次数,以使在乘法中的Z上存在LS的k字符的零字符串。
一字符延迟设备100,220和230插入到关键的数据流上,在图1的数据准备装置和图1的数据处理装置之间提供计算同步。
k字符延迟移位寄存器470,同步N,在丢弃输出的右边的零字符字符串后,对于大于N的比较,减法器从结果中减去N。
进位保持累加器几乎和串行/并行乘法器一样,不同的是三个大于零的不同的值可以相加,而不是象常规地锁存进s/p乘法器的输入的单一值。当用于基于多项式计算时所有“进位相关”的功能都被关闭。
最后进位插入440,用于插入S流中的第(m·k·l+1)个比特,因为S寄存器仅有m·k个字符长。
借位/溢出检测490,检测结果是否大于或等于模数(源于N),或者在GF(p)计算中。在基于多项式计算中溢出检测结果的第一有效比特是否为1。
控制机制没有显示出,但最好把它理解为一套用于特殊功能的在有限状态机上的级联的计数设备,以及在GF(p)和GF(2q)上用于脉动数据流的一系列开关。
对于在素数和复合素数域上的模数乘法,我们定义A和B为被乘数和乘数,而N是模数,它一般大于A或B。N同时表示存储模数值的寄存器。N,可能在某些时候,小于A。我们定义A、B和N为m·k=n字符长的操作数。每个k字符组被称为一个段,组的大小由乘法设备的大小决定。因此,A、B和N每个都是m字符长。为了简化,下面按步骤的过程解释,假设A、B和N是512比特长,(n=512);根据当前的成本有效的这种乘法器的长度,假设k为64字符长,并且是简单CPU的数据操作速度;m=8是一个操作数的段的数量,也是512比特操作数的乘法和平方循环的迭代次数。所有的操作数是正整数。更一般地,A、B、N、n、k和m可以假设为任意合适的值。
在非模数的函数中,N和S寄存器可被用于临时存储其它算术操作数。
我们用符号,≡,表示模数的同余,例如16≡2模7,并且我们说16同余为2 mod 7,因为当16除以7时余数为2。当我们写Y mod N≡X mod N时,Y和X都可以大于N;然而对于正数X和Y,余数是一样的。还要注意负整数Y的同余,是Y+u·N,其中N是模数,而且如果Y的同余小于N,u将是给出正结果的最小的整数。
我们用符号,,表示更狭义的同余。在这里描述的过程中,一个值要么是所需要的值,要么等于所需要的值加上模。例如X2 mod 7,X可以等于2或9。我们说X是狭义同余为2 mod 7。在基于多项式域中,类似的是一个首一的值,我们说它大于N,并且通过和模数异或进行约简。因为在GF(2q)中没有溢出,这个值一般被忽略。
当我们写X=A mod N,我们定义X是A除以N的余数;例如,3=45 mod 7。
在数论中,模数的乘性逆是一个基本概念。例如,X的模数乘性逆写作X-1,其定义为X X-1mod N=1。如果X=3及N=13,那么X-1=9,即3·9除以13的余数为1。
缩写MS和LS用于表示最高位和和最低位,它可以指比特、字符、段以及整个操作数值,就像常规的数字术语一样。
在本说明书中N既表示N的值,又表示包含N的移位寄存器的名称。一个值上的星号上标表示这个值作为中间值可能不完整或将会改变。A是将需要求幂的数字的值,而n是操作数N的字符长度。初始化后当A被“蒙哥马利归一化”为A*(A*=2n·A-以后说明)A*和N在幂运算的整个中间步骤中一般是常数。在第一次迭代,在求幂的初始化之后,B等于A*。B也是寄存器的名称,其中累加值最后会等于所需要的求幂的结果,它驻留在这个寄存器中。S*表示一个临时的值,并且S、SA和SB还表示存储除了单MS比特外的S的所有比特的一个或若干寄存器。(S*连接上这个MS比特就等于S。)S(i-1)表示在第i次迭代输出端的S的值。S0表示第S(i)的值的LS段。
我们称在GF(p)域(以后定义)中的P(A·B)N过程为在P域中的乘法,或者有时,简单地是一个乘法操作。
因为我们使用了串行/并行乘法器的标准结构作为构造一个两用的串行并行乘法器的基础,我们区分乘法器的求和部分,它是基于保留进位累加器的,(不同于超前进位加法器、或进位传送加法器,前者非常地复杂,后者非常地慢),并称之为保留进位加法器或累加器,分别处理预装载机制以及复接和锁存,这允许我们同时进行A乘以B和C乘以D的乘法,而连续地把这两个结果和前一次的结果S相加,例如A·B+C·D+S,把这个累加器转换为一个更加多用途的引擎。附加的逻辑被添加到这个乘法器上以便为模数约简和串行求和提供一个预测的检测操作,这是在非常大的数上进行模运算和普通整型运算所必需的。
在GF(p)上的蒙哥马利模数乘法下面的描述是指在GF(p)上的数的蒙哥马利算法。本设备可用于在GF(2q)上的基于多项式数蒙哥马利运算,但性能会下降,因为计算将在P域执行,而所有可执行的操作数都要乘以一个因子2n。
在一个计算模数乘法A·B mod N的传统的方法中,积A·B的余数是依靠除法过程计算的,在大操作数上实现一个传统的除法比执行串行/并行乘法更难。
用蒙哥马利的模数约简方法,除法基本上被采用两个预先计算的常数的乘法代替。在这里所展示的过程中,仅有一个预先计算的常数,它是模数的一个函数。这个常数是,或可以是,用本ALU设备计算的。
一个简化的蒙哥马利过程的表达,就像在本设备中所采用的,现在将被提供,同时后面还有一个完整的优选描述。
如果我们令一个奇数(LS比特为1),例如1010001(=8110)我们总可以把这个奇数转换为一个偶数(单LS比特为0),方法是把它加上一个修正的、补偿性的奇数,例如,1111(=1510);因为1111+1010001=1100000(9610)。在这种情况下,我们发现一个数能产生5个低位的零,因为我们事先知道整个字符串,81,并可以容易地确定能让我们加到81上的二进制数,将产生一个新的二进制数,它有我们所需的一些低位零的数量。这个修正数必须有一个右边的1,否则它对一个结果的顺序的LS字符串不起作用。
如果我们的进程是由时钟控制的串行/并行保留进位进程,我们希望有一个连续数量的LS零,这里面,在每一个时钟周期我们只要修正下一个比特,在每个时钟里,如果下一个比特是1就加上修正值,如果预期的比特是0就不加修正值,这就足够了。然而,为了不导致比特间的溢出(双进位),这个修正值最好事先和被乘数相加,当相应的乘数比特是1时,它要被加入累加器,而Y检测也预期为1。
现在,因为在模运算中,我们只关心一个值除以模的余数,我们知道我们可以在一个值上加任意多次的模,仍然得到一个值,它有同样的余数。这意味着我们可以加Y N=∑yiriN到任意整数而仍然具有同样的余数;Y是我们加入模N的次数,它可以产生所需的kl个右边零。如所描述的,我们加的模数只能是奇数。(存在这种方法,偶数模被定义为ri乘以所得的奇数,其中i为偶数中LS的零的数量)蒙哥马利交错的约简特别地减小了对存储的需求,以及乘法设备的有效成本的尺寸。这在执行公开密钥加密函数时特别有用,在公开密钥加密函数中,我们要把一个大整数,例如,n等于1024比特,乘以一个同样长度的大整数;这一过程一般会产生一个两倍长度的整数。
在乘法(或平方)的过程中我们可以在若干N(模数)中加入足够到A·B=X或A·B+S=X,使我们得到一个数Z,它有n个LS零位,同时最多有n+1个MS字符。
我们可以继续使用这些数,忽略LS的n个字符,只要我们记住通过忽略这些零,相当于我们把所要的结果除以了rn。
当LS的n个字符被忽略,而我们仅用到最高有效的n(或n+1)个字符时,我们有效地把结果乘以了r-n,rn的模数倒数。如果我们接下来把这个结果再乘以rnmod N(或rn),我们将获得一个值,它和所需的A·B+S mod N的值同余(有同样的余数)。如所看到的,采用MM,结果被恰当地乘上r2n来克服MM所引入的r-n寄生因子。
举例A·B+S mod N=(12#11+10)mod 13=(1100·1011+1010)2mod10112l=1,r=2无论何时,在n个LS比特上之一上的修正是必须的,我们将累加2iN。
B 1011X A1100add S 1010add A(0)·B 0000----- LS比特的和等于0不加Nadd 20(N·0)0000sum and shift 0101→为零的LS比特留在保留进位加法器中adderadd A(1)·B 0000------ LS比特的和等于0-加Nadd 21(N·1)1101sum and shift 1001→0 LS比特留在CS加法器中add A(2)·B 1011------ LS比特的和等于0不加Nadd 22(N·0)0000sum and shift 1010→为零的LS比特留在CS加法器中add A(3)·B 1011------ LS比特的和等于1加Nadd 23(N·1)1101sum and shift 10001→为零的LS比特留在CS加法器中结果是1000100002mod 13=17·24mod 13。
因为17大于13,我们约减13,结果是17·24≡4·24mod 13形式上2-n(A·B+S)mod N=9(12·11+10)mod 13≡4在蒙哥马利算法中,我们仅使用了MS的非零结果4,并一定要记住实际的结果已经被除以了2n;n个零已经被强制到MM结果上。
我们已经在有效地用24mod 13≡3乘以这个结果加到(8+2)·13=10·13。实际上,假如我们使用了多余的零,我们可以说我们已经在一个过程中执行了A·B+Y·N+S-(12·11+10·13+10),它在优选的实施例中被描述是可能的。
检查-(12·11+10)mod 13=12;4·3=12。
总的说来,蒙哥马利乘法的结果是希望的结果乘以2-n。
为了使用同样的乘法来将前面结果恢复到希望的结果,我们将前面的结果蒙哥马利乘以22n,我们称之为H,而每一个MM留给我们一个寄生因子2-n。
蒙哥马利乘法函数P(A·B)N将A·B乘积的乘法模N转换到P域。(在上面的示例中,我们推导出4)。从P域恢复到普通的模数域是通过使用预先计算的常数H在P(A·B)N的结果上执行P来实现的。现在假如P≡P(A·B)N,则P(P·H)N≡A·B mod N;因此两个P域乘法执行了一个普通的模数乘法。
蒙哥马利模数约简避免了n个或2n个字符长的操作数上一序列的乘法和除法操作,在n个或n+1个字符长的操作数上执行一序列的乘法、加法和加法。整个过程产生的结果小于或等于N。对于给定的A,B和奇数N,总是有一个Q,使得A·B+Q·N的结果为n个LS字符是零的数字,或者
P·2n=A·B+Q·N这意味着我们有一个2n字符长的表达式(可能带一比特的溢出),它的n个LS字符是零。
现在,对于基数r=2l;让I·rn≡1 mod N(对于所有的奇数N,I都存在)。前面等式的两边都乘以I将产生下面的同余从等式的左边P·I·rn≡P mod N(记住I·rn≡1 mod N)从右边A·B·I+Q·N·I≡A·B·I mod N;(记住Q·N·I≡0 mod N)因此P≡A·B·I mod N这也意味着寄生因子I=r-nmod N在每一次执行P域乘法时若P被引入。
我们定义P操作数使得P≡A·B·I mod N≡P(A·B)N并且我们称其为“在P域A乘以B的乘法”,或者蒙哥马利乘法。
从P域的恢复可通过在P·H上执行操作P来计算,使得P(P·H)N≡A·B mod N我们可通过在前一个同余中取代P来推导出H的值我们发现P(P·H)N≡(A·B·I)(H)(I)mod N(注意A·B·I←P;H←H;I←任意的乘法操作将引入寄生值I)假如H和I2的乘性倒数同余,那么同余是有效的,因此H=I-2mod N≡r2nmod N(H是N的一个函数并且我们称它为H参数)在通常的蒙哥马利方法中,在A·B上执行P操作,并使用了预先计算的常数J,下面的过程将被使用
1)X=A·B2)Y=(X·J)mod rn(只有n个LS字符是被需要的)3)Z=X+Y·N4)S=Z/rn(J上的要求是它强制Z可被rn除)5)PS mod N(N从S上约简,假如S≥N)最后,在步骤5)PP(A·B)N,[假如需要,约减N后P=P(A·B)N]接着上面Y=A·B·J mod rn(仅使用n个LS字符)并且Z=A·B+(A·B·J mod rn)·N为了Z可被rn除(Z的n个LS字符最好是零),下面的同余将存在[A·B+(A·B·J mod rn)N]mod rn≡0为了使这个同余存在,N·Jmod rn与-1同余或者J≡-N-1mod rn并且我们已经发现常数J。
因此J是一个预先计算的仅是一个N的函数的常数。然而在一个字符一个字符地输出MM结果的机器中,当使用硬件逻辑Y可以被一个字符一个字符地检测到时,在LS字符串的输出字符中有零的每一个实例中应制定在若干N中累加的规定,从而避免了预先计算J和后续计算Y=A·B·J mod rn的必要。我们也提到了这个方法仅能用于奇数N。
因此,显然,被描述的过程使用了三次乘法,一次累加和最多一次减法,对于给定的A、B、N和预先计算的常数以获得P(A·B)N。使用这个结果,同样的过程和一个预先计算的常数H(模N的一个函数),我们能够得到A·B mod N。当A也等于B时,这个基本的操作可被用做平方的装置或在模算法中的乘法。
交错的蒙哥马利模乘法前面的部分描述了一种方法,它涉及均是n个字符长的操作数乘法的模乘法,它的结果要求有2n+1个字符的存储空间。
正如P1中描述的使用蒙哥马利的交错约简,带较短操作数、寄存器和硬件乘法器的乘法操作的执行;使带相对少的逻辑门的电子设备的执行有效都是可能的。
首先我们将描述这个设备是如何工作的,假如在交错的任何一次迭代,我们使用J0常数计算N被累加的次数。然后我们使用Y0的硬件推导描述如何交错,它将消除每一次乘法{(2)在下面的例子中}的J0+阶段,并使我们将两个单独的串行/乘法器的功能集成到一个新的,使用较小的硅资源,并能够以两倍多的速度执行A·B+C·N+S的单个普通的乘法器中。
使用一个k字符乘法器是为了方便定义k个字符长的段;在n个字符中有m个段;也就是,m·k=n。
J0将是J的LS段。
因此J0≡-N0-1mod rk(当N是奇数时,J0存在)注意,当在非约简输出执行时J和J0常数是修正数,告诉我们为了低位的零有预定义的个数模数上累加了多少次。我们将在后面描述本串行设备的额外的优点;因为象输出的下一个串行比特可以被容易的确定一样,我们总是加上模数(总是奇数)到下一个中间结果。假如没有这个累加的情况,输出字符,从CAS发出的LS串行比特将是1;因此在模数中加到前面的偶中间结果,将有希望在输出字符串中有另外一个LS零。记住,一致性必须被保持,无论模数被累加到结果多少次,这个余数是一个常数。
在蒙哥马利交错约简的传统应用中,P(A·B)N正如步骤(1)到(5)描述的在m迭代中执行最初S(0)=0(在第一次迭代的起始S的值)对于i=1,2 m1)X=S(i-1)+Ai-1·B(Ai-1是A的第i-1个字符;S(i-1)是S在第i次迭代的值。)2)Y0=X0·J0mod rk(X0·J0的乘积的k个LS字符)(过程仅使用和计算了k个LS字符,举例来说,64个低位字符)在优选实施例中,这个步骤被避免,因为在串行设备中,Y0可被一个字符一个字符的预测)3)Z=X+Y0N4)S(i)=Z/rk(Z的K个LS字符总是0,因此Z总是能被rk除)。
5)S(i)=S(i)modN(N将被从那些大于N的S(i)中约tuj)。最后,在最后一次迭代(必要时,在约简N后)C=S(m)=P(A·B)N。
为了推导F=A·B mod N,P域计算,P(C·H)N被执行。
在优选实施例中,希望知道对于所有的S(i)的S(i)小于2N。这也意味着,最后结果(S(m))可总是被约简到一个小于N的量,最多约简一次N。
我们发现对于用在过程中的操作数S(i-1)<rn+1(暂存器可比B或N寄存器长1比特),B<N<rn和Ai-1<rk。
定义S(i)=Z/rk(在一个可能约简前,在过程的最后S的值)对于所有的Z,Z(i)<rn+k+1
Xmax=Smax+AI·B<rn+1-1(rk-1)(rn-1)Qmaz=Y0N<(rk-1)(rn-1)因此Zmax<rk+n+1-rk+1+1<rk+n+1-1并且Zmax被rk除S(m)<rn+1-rl因为Nmin>rn-r,S(m)maz总是小于2·Nmin,因此,在最后的结果上一次约简是全部所必须的。
S(m)maz-Nmin=(rn+1-rl-1)-(rn-1)=rn-4<Nmin交错的蒙哥马利模乘法的例子在十六进制格式中的下面的计算阐明了交错方法的意义N=a59,(模数),A=99b,(乘数),B=5c3(被乘数),n=12,r=2,(N的字符长度),k=4,(乘数的字符大小,也是段的大小),及m=3,当n=k·m。
J0=7,当7·9≡-1mod16和H≡22·16mod a59≡44b。
期望的值是F≡A·Bmod N≡99b·5c3 mod a59≡375811 moda59=22016。
初始时S(0)=0步骤1 X=S(0)+A0·B=0+b·5c3=3f61Y0=X0·J0mod rk=7(Y0是在SuperMAP中的硬件预测)Z=X+Y0·N=3f61+7·a59=87d0S(1)=Z/rk=87d步骤2 X=S(1)+A1·B=87d+9·5c3=3c58Y0=X0·J0mod rk=8·7 mod 24=8(硬件预测)Z=X+Y0·N=3c58+52c8=8f20S(2)=Z/rk=8f2步骤3 X=S(2)+A2·B=8f2+9·5c3=3ccdY0=d·7 mod 24=b(硬件预测)Z=X+Y0·N=3ccd+b·a59=aea0
S(3)=Z/rk=aea当S(3)>N,S(m)=S(3)-N=aea-a59=91因此C=P(A·B)N=9116。
P域的检索是通过计算P(C·H)N来执行的再一次初始化S(0)=0步骤1 X=S(0)+C0·H=0+1·44b=44bY0=d(在SuperMAP中的硬件预测)Z=X+Y0·N=44b+8685=8ad0S(1)=Z/rk=8ad步骤2 X=S(1)+C1·H=8ad+9·44b=2f50Y0=0(在SuperMAP中的硬件预测)Z=X+Y0·N=2f50+0=2f50S(2)=Z/rk=2f5步骤3 X=S(2)+C2·H=2f5+0·44b=2f5Y0=3(在SuperMAP中的硬件预测)Z=X+Y0·N=2f5+3·a59=2200S(3)=Z/rk=2201699b·5c3 mod a59的值是可以预测的。
假如在每一步我们丢弃k个LS零,我们本质上将n个MS字符乘以了rk。同样地,在每一步,乘数的第i段也是一个数乘以了rik,给它与S(i)同样的等级。
在另外一个优选实施例中也必须注意,在其中知道J0常数是有一些隐含的值的,假如AI·B+S=1;那么Y0=-N0-1=J0求幂一个序列[D.Knuth,The art of computer programming,vol.2Seminumerical algorithms,Addison-Wesley,Reading Mass.,1981]下述推导在下面称为“Knuth”,解释了使用了模求幂的平方和乘法序列。
预先计算蒙哥马利常数后,H=22n,当在P域这个设备平方和乘都可进行,我们计算C=AEmodN。
E(j)代表指数E的二进制表示的j比特,从序号是1的MS比特开始并包括序号是q的LS比特,我们能够如下方法对奇数指数取幂A*P(A·H)N A*现在等于A·2n。
B=A*FOR j=2 TO q-1BP(B·B)NIF E(j)=1 THENBP(B·A*)N*ENDFORBP(B·A)N E(0)=1;B是最终希望的临时结果乘以2nA是最初的AC=BC=C-N if C≥N。
最后迭代后,B值是为AEmod N,并且C是最后的值。
为了阐明,我们将使用下面的例子E=1011→E(1)=1;E(2)=0;E(3)=1;E(4)=1;寻找A1011mod N;q=4A*=P(A·H)N=A·I-2I=A·I-1mod NB=A*对于j=2到qB=P(B·B)N它的过程是A2(I-1)2·I=A2·I-1E(2)=0;B=A2·I-1j=3 B=P(B·B)N=A2(I-1)2·I=A4·I-1E(3)=1 B=P(B·A*)N=(A4·I-1)(A·I-1)·I=A5·I-1j=4 B=P(B·B)N=A10·I-2·I=A10·I-1当E(4)是奇数时,最后的乘法将是乘以A,不需要寄生函数I-1。
B=P(B·A)N=A10·I-1·A·I=A11C=B用倒数过程来计算H参数的方法在美国专利5,513,133中描述。
现在参考图3,图3是显示本发明如何在智能卡和其他安全设备中执行的简化方框图。内部总线500,连接包括CPU 502、RAM 504、非易失性存储器506、被控制的可访问EEPROM 508和模算法协处理器510在内的部件。在这里所显示的,协处理器510通过数据总线512和控制总线514,内部总线的寄存器500连接。被控制的可访问ROM508通过地址和数据锁存装置516和一个控制和测试寄存器518连接的。各种不同的设备可分别连接到总线上,例如物理序列随机发生器520、安全逻辑522、智能卡和外部接口电路524和526。
当一个加密程序,例如确认一个RSA签名被执行,是要求模算法函数的,例如模求幂。调用加密函数的密码程序优先运行在CPU 502上。
现在参考图4,图4是本发明用在智能卡上的一个实施例的另外一个简化的方框图。与图3所示相同的部分给出了相同的参考数字,除了哪些理解本实施例所必须的并且不再次描述。图4中,所示的CPU502带外部累加器7350。当从算术协处理器上卸载数据来使能从SMAP到存储器数据的直接传输,数据禁用开关7340从数据总线500上分离CPU累加器。
图5是数据寄存器块6250在协处理器6075中的优选实施例的一个简化方框图,如在图2、6和7中的协处理器中所描述的,带一个J0产生器,其中J0产生器特别汇编了一个l比特的首零强制函数。
如前图所示,协处理器6075被连接到带CPU的数据总线上。一个寄存器块6205包括一个B寄存器6070,一个A寄存器6130,一个S寄存器6180和一个N寄存器6200。每一个寄存器的输出被连接到一个串行数据开关和串行处理调节装置6020,它依次被连接到一个执行模算法操作的运行部件6206。连接在N寄存器6200和运行部件6206间的是一个J0产生器552。
在实施例中,J0产生器汇编了一个l比特的首零强制函数,用于上面描述的模算法函数中。
图6是图5运行部件的简化的内部方框图。因为在第一阶段额外的Y0B0串行缓存器接收Y0,在第二阶段模约简B0用于后续的平方操作,其中将发现B大于N,部件更适合支持加速的平方操作。
现在参考图7A,它是图6的运行部件的主要计算部分的方框图。圆圈里的数字与图7B和7D的时序图有关。
现在参考图7B,它是是一个事件的时序指针图,显示了过程的进程并包括平方运算的第一次迭代。
现在参考图7C,被归纳的事件序列表示了用于在平方序列第一次迭代中消除下一次蒙哥马利平方的延时的方法,画圈的数字参考图7A、图7B和图7D。
现在参考7D,被归纳的时间时序指针图描述了平方运算的第一次迭代计算输出的时序。
现在参考图8A,一套查询表特别地表示了J0的选择,它是N0的右边字符的模2l的乘性逆的负值。当N0或者对于GF(2q)首项系数为一或者对于GF(p)是奇数,则J0总是存在的。
在图8A和8B中,我们将模的右边字符认为是N0。我们将N0j认为是本地定义的N0字符的第j比特。
图8B是用于设计或者一个4比特或者一个2比特的Y0零强制函数字符的示意图。输入进强制函数的变量是N0比特(整个乘法中是常数),l、S0比特,和l乘数Aj0和被乘数B0j比特的乘积的l右边比特,进位开关S,它确定函数是工作在GF(2q)还是GF(p)。A和B比特被输入到乘法器并累加到S0上。当S=0,所有的进位被禁用。
可以理解发明的不同特性,为了阐明,被描述在分开的实施例的内容中,也可以在一个单实施例中共同提供。相反地,本发明的不同特性,为了简洁,在一个单实施例中描述,也可以分别或在任何适宜的子组合中被提供。
本领域的专业人员可以理解本发明并不限制于在上文中所特别表示和描述。本发明的范围包括上文所描述的不同特性及由此的变形和修正的组合或子组合,对于阅读在现有技术中没有的前面的描述的本领域的专业人员是可能发生的。
在权利要求书中,符号的含义在前面的描述中给出。
权利要求
1.一种预测Y0值的装置,其利用被乘数的第一发出值,和乘数B的现有输入、累加器设备的进位值、来自累加器的求和值、来自前面计算的部分结果的现有值、以及来自加法器的进位值来预测Y0值,所述加法器把来自累加器设备的结果和上一次的部分结果相加。
2.如权利要求1所述的装置,其中k个第一次发出的零将从设备中输出,该设备由依次预测下一个Y0字符的下面六个量来控制i.Ai寄存器的右边字符乘以B流的Bd字符,A0·Bdmod 2l的l比特乘l比特模2l的乘法的结果中的l比特的Sout比特;ii.从累加设备中第一次发出的进位字符,S(CO0);iii.来自累加设备,SO1,的发出单元的右边第二个字符中l比特的Sout字符;iv.来自S流的按顺序的下一个字符值,Sd;v.来自Z输出全加器的l比特的进位字符,S(COz);vi.l比特的J0值,它是N0模数被乘数寄存器中的右边字符的负乘法的逆,其中,值A0·Bdmod 2l,s(CO0),SO1,Sd按字符相加到一起,并且“快速的”乘以J0字符,输出一个有效的Y0零强制预测字符,以强制一个l比特零字符串的输出。
3.一种仅有一个累加器和具有零强值预测机制的装置,用于执行一系列交错的并行执行的模数乘法和平方,等效于三个自然整数的乘法操作,使得结果是一个幂。
全文摘要
一种对能同时约简的串行/并行蒙哥马利模乘法的扩展,这种方法与本申请人以前所采用的方法一样,其创新性的改造是它既可以在素数上执行又可以在基于GF(文档编号G06F7/60GK1758212SQ200510079518
公开日2006年4月12日 申请日期2001年5月14日 优先权日2000年5月15日
发明者伊泰·德罗尔, 卡尔米·戴维·格雷赛尔, 迈克尔·莫斯托瓦, 亚历克赛·莫尔恰诺夫 申请人:艾蒙系统股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1