流水线型的蒙哥马利模乘运算方法转让专利

申请号 : CN201910839580.6

文献号 : CN110351087B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 胡世文沈亚明常洪明马晓涵

申请人 : 南京秉速科技有限公司

摘要 :

本发明公开了一种流水线型的蒙哥马利模乘运算方法,涉及数据密码算法技术领域,采用流水线型方式来提升蒙哥马利模乘算法性能,增加了单个蒙哥马利模乘器的吞吐量,在吞吐量相同的情况下,本发明比传统使用多个蒙哥马利模乘器的方法消耗更少的硬件资源和面积。如此使本发明数十倍地提升了单位时间里的模乘运算个数,使得本发明比非流水线型的蒙哥马利模乘器具有更高的性能/资源比。同时,使用流水线型的蒙哥马利模乘器的非对称密钥算法硬件可以用更少的硬件资源达到更高的性能,提高任意长度的蒙哥马利模乘运算的吞吐量。

权利要求 :

1.一种流水线型的蒙哥马利模乘运算方法,其特征在于:输入为S和T,输出S*T*2-R 模 P,其中,在非对称密钥算法中,S, T,和P均为R位的大整数,其中P为素数;算法分为两部分:第一部分是S与T相乘的普通乘法步骤,得到一个2R位的乘积;第二部分是余下的步骤,即将

2R位的乘积约减成为R位的最终结果S*T*2-R 模 P;在这个过程中,R可分解为L* K,以循环K次,每次处理L位的数据;

用于实现蒙哥马利模乘运算的硬件乘法器的输入位宽分别为U和V,远小于R;

蒙哥马利模乘运算过程:

R -1 L

输入:P<2 ,0≤S,T

1)Z=S*T;循环K次:2)T1=Z模2L;3)Y=T1*K0模2L;4)T2=Y*P;5)T3=(Z+T2);6)Z=T3/2L;循环结束;7)如果Z≥P,则X=Z–P;否则X=Z;返回X;

整个计算过程分为三个乘法步骤和两个约减步骤,

乘法步骤1:通过使用多个输入分别为U和V位的小位宽全流水线型乘法器实现本步骤;

输入数据 ,其中 , 表示向上取整;则

乘法运算式:

乘法步骤2:该步骤将乘法步骤1中小位宽全流水线型乘法器的相乘结果按位对齐,获得多个不同长度的整数,并将各整数分别存入不同寄存器中;由于硬件易于实现对齐,即把乘法器输出结果连接至相应寄存器的相应输入,因此该步骤只需要一个时钟周期;

乘法步骤3:该步骤将乘法步骤2中获得的所有整数相加,最后得到2*R位的乘法结果;

约减步骤1:该步骤采用K个流水线型蒙哥马利约减单元,每一次将结果约减L位;已知参数为P=∑Bi*2i,为椭圆曲线相应素数,其中i=(0,1,2,…,R); Bi∈(-1,0,1),以及K0=-P-1模2L;

其中,一个流水线型蒙哥马利约减单元将乘法器输出结果从B*L位约减为(B-1)*L位的过程包含以下步骤:其中,B=2K,2K-1,…,K+1,a)对Z进行模2L运算,即取Z的低L位得到T1;

b)计算Y=(T1*K0)模2L,计算T1乘K0使用一个全流水的乘法器,两个输入均为L位,输出为2L位,然后取该乘法器结果的低L位得到Y;

i

c)计算T2=Y*P,得到T2=∑Bi*Y*2 ,该处乘法使用移位相加实现:每一部分都是Y左移i位,然后添加符号位,最后将这些部分相加得到T2;

d)Z与T2相加,得到T3;

e)计算Z=T3/2L,即将 T3右移L位,运算结果用于更新Z;

其中,步骤a)和步骤e)均仅需单时钟周期即可完成,步骤b)、c)和步骤d)需要若干个时钟周期完成;为了实现流水线型蒙哥马利约减单元,每一个时钟周期都保存输出结果到相应寄存器中;一个蒙哥马利约减器包含K个流水线型蒙哥马利约减单元,使得整个蒙哥马利约减器都支持流水线型;

约减步骤2:该步骤通过相应的模减模块确保最终结果在 [1, P) 范围内,如果上一步骤的结果Z≥P,则输出结果X=Z-P;否则X=Z。

2.根据权利要求1所述的流水线型的蒙哥马利模乘运算方法,其特征在于:在乘法步骤

1中,两个R位的整数乘法被分解为N*M个U位数*V位数的小整数乘法,该乘法结果为(U+V)位,其使用的乘法器每一个都为多时钟、流水线型的;同时,这些乘法器都是并行的,因此,该步骤的时钟延迟等于一个U位数*V位数的小整数乘法器的时钟延迟个数。

3.根据权利要求1所述的流水线型的蒙哥马利模乘运算方法,其特征在于:在进行约减步骤1时,对于特定的椭圆曲线,K0在特定L值时等于1,此时无需计算蒙哥马利模乘运算过程的步骤b),而其步骤c)改为计算T2=T1*P。

4.根据权利要求1所述的流水线型的蒙哥马利模乘运算方法,其特征在于:该运算方法利用的运算装置包括有存储单元、控制单元、若干用于乘法步骤的流水线型乘法器、若干用于对齐步骤的寄存器、若干用于加法步骤的流水线型加法器,以及流水线型约减器;其中,用于乘法步骤的流水线型乘法器,将两个R位的整数乘法分解为N*M个U位数*V位数的小整数乘法,即Xab=Sa*Tb,该乘法结果为(U+V)位,且这些乘法器每一个都是多时钟、流水线型的、并行的;

用于对齐步骤的寄存器,将所述乘法步骤中的相乘结果按位对齐,获得多个不同长度的整数,并将各整数分别存入不同寄存器中,其即是把乘法器输出结果连接至相应寄存器的相应输入,因此该步骤只需要一个时钟周期;

用于加法步骤的流水线型加法器,将所述对齐步骤中的所有整数相加,最后得到2*R位的乘法结果;

流水线型约减器,用于实现蒙哥马利约减步骤1和约减步骤2。

说明书 :

流水线型的蒙哥马利模乘运算方法

技术领域

[0001] 本发明涉及数据密码算法技术领域,具体涉及一种蒙哥马利模乘运算方法及计算装置。

背景技术

[0002] 信息的安全保障基于安全算法,安全算法有一类是非对称密钥算法。非对称密钥算法的优点是安全性高,缺点是加密速度比分组密码慢很多,所以人们一直在研究如何提升非对称密钥算法的运算速度。目前,非对称密钥算法主要有两种,一是RSA,二是椭圆曲线密码ECC(Elliptic Curve Cryptography),上述两种公钥密码算法都需要使用模乘计算(S*T mod P)。
[0003] 模乘算法中效率高、便于实现的算法是蒙哥马利模乘算法。蒙哥马利模乘使用过程中需要把普通数A转换成蒙哥马利数S’=S*R mod P。为使两个蒙哥马利数S’=S*R mod P和T’=T*R mod P相乘的结果为(S*T)’=(S*T)*R mod P,蒙哥马利模乘运算定义为MM(S’, -1 32 64T’) = (S’* T’) * R  mod P。R通常为一个便于约减的整数,比如2 或2 等。
[0004] 目前,大多数的硬件模乘器都是基于蒙哥马利算法及其变形算法设计的。但是它们大都通过牺牲性能来节省资源和面积,造成系统性价比的下降以及能耗的上升。单个蒙哥马利模乘运算耗时过长,因此单个蒙哥马利模乘器如果不支持流水线型,很难提高其单位时间里模乘运算个数,即其吞吐量。一种可行的性能提升方案是在一个计算装置中使用多个蒙哥马利模乘器,但是这会造成硬件资源、面积和能耗的成倍增加。

发明内容

[0005] 本发明针对现有技术的缺陷,提供一种可大幅提升单位时间里的模乘运算个数、可以更少的硬件资源达到更高的性能、可提高任意长度的蒙哥马利模乘运算的吞吐量的流水线型的蒙哥马利模乘运算方法。
[0006] 为解决上述技术问题,本发明采用如下技术方案:一种流水线型的蒙哥马利模乘运算方法,其特征在于:输入为S和T,输出S*T*2-R 模 P,其中,在非对称密钥算法中,S、 T和P均为R位的大整数,其中P为素数;算法分为两部分:第一部分是S与T相乘的普通乘法步骤,得到一个2R位的乘积;第二部分是余下的步骤,即将2R位的乘积约减成为R位的最终结果S*T*2-R 模 P。在这个过程中,R可以分解为L* K,这样可以循环K次,每次处理L位的数据。
[0007] 并且,用于实现蒙哥马利模乘运算的硬件乘法器的输入位宽分别为U和V,远小于R。
[0008] 蒙哥马利模乘运算过程:
[0009] 输入:P<2R,0≤S,T
[0010] 输出:S*T*2-R 模 P
[0011] 1)Z=S*T;循环K次:2)T1=Z模2L;3)Y=T1*K0模2L;4)T2=Y*P;5)T3=(Z+T2);6)Z=T3/2L;循环结束;7)如果Z≥P,则X=Z–P;否则X=Z;返回X。
[0012] 整个计算过程分为三个乘法步骤和两个约减步骤,
[0013] 乘法步骤1:通过使用多个输入分别为U和V位的小位宽全流水线型乘法器实现本步骤;输入数据 其中 , 表示向上取整且其输入数据为R位二进制数;则乘法运算式:
[0014]
[0015] 乘法步骤2:该步骤将乘法步骤1中小位宽全流水线型乘法器的相乘结果按位对齐,获得多个不同长度的整数,并将各整数分别存入不同寄存器中;由于硬件易于实现对齐,即把乘法器输出结果连接至相应寄存器的相应输入,因此该步骤只需要一个时钟周期;
[0016] 乘法步骤3:该步骤将乘法步骤2中获得的所有整数相加,最后得到2*R位的乘法结果;
[0017] 约减步骤1:该步骤采用K个流水线型蒙哥马利约减单元,每一次将结果约减L位;已知参数为P=∑Bi*2i,为该椭圆曲线相应素数,其中i=(0,1,2,…,R); Bi∈(-1,0,1),以及K0=-P-1模2L。例如P256曲线中P=2256-2224+2192+296-1, 因此B256=B192=B96=1, B224=B0=-1, 其余Bi=0。
[0018] 其中,一个流水线型蒙哥马利约减单元将乘法器输出结果从B*L位约减为(B-1)*L位 (B=2K,2K-1,…,K+1) 的过程包含以下步骤:
[0019] a)对Z进行模2L运算,即取Z的低L位得到T1;
[0020] b)计算Y=(T1*K0)模2L,计算T1乘K0使用一个全流水的乘法器,两个输入均为L位,输出为2L位,然后取该乘法器结果的低L位得到Y;
[0021] c)计算T2=Y*P,得到T2=∑Bi*Y*2i,该处乘法使用移位相加实现:每一部分都是Y左移i位,然后添加符号位,最后将这些部分相加得到T2;
[0022] d)Z与T2相加,得到T3;
[0023] e)计算Z=T3/2L,即将 T3右移L位,运算结果用于更新Z;
[0024] 其中,步骤a)和步骤e)均仅需单时钟周期即可完成,步骤b)、c)和步骤d)需要若干个时钟周期完成;为了实现流水线型蒙哥马利约减单元,每一个时钟周期都保存输出结果到相应寄存器中;一个蒙哥马利约减器包含K个流水线型蒙哥马利约减单元,使得整个蒙哥马利约减器都支持流水线型;
[0025] 约减步骤2:该步骤通过相应的模减模块确保最终结果在 [1, P) 范围内,如果上一步骤的结果Z≥P,则输出结果X=Z-P;否则X=Z。
[0026] 在乘法步骤1中,两个R位的整数乘法被分解为N*M个U位数*V位数的小整数乘法,该乘法结果为(U+V)位,其使用的乘法器每一个都为多时钟、流水线型的;同时,这些乘法器都是并行的,因此,该步骤的时钟延迟等于一个U位数*V位数的小整数乘法器的时钟延迟个数。
[0027] 在进行约减步骤1时,对于特定的椭圆曲线,K0在特定L值时等于1(例如对于P256椭圆曲线,K0在L=64时等于1),此时无需计算蒙哥马利模乘运算过程的步骤b),而其步骤c)改为计算T2=T1*P。
[0028] 所述流水线型的蒙哥马利模乘运算装置,该运算装置包括有存储单元、控制单元、若干用于乘法步骤的流水线型乘法器、若干用于对齐步骤的寄存器、若干用于加法步骤的流水线型加法器,以及流水线型约减器;其中,用于乘法步骤的流水线型乘法器,将两个R位的整数乘法分解为N*M个U位数*V位数的小整数乘法,即Xab=Sa*Tb,该乘法结果为(U+V)位,且这些乘法器每一个都是多时钟、流水线型的、并行的;
[0029] 用于对齐步骤的寄存器,将所述乘法步骤中的相乘结果按位对齐,获得多个不同长度的整数,并将各整数分别存入不同寄存器中,其即是把乘法器输出结果连接至相应寄存器的相应输入,因此该步骤只需要一个时钟周期;
[0030] 用于加法步骤的流水线型加法器,将所述对齐步骤中的所有整数相加,最后得到2*R位的乘法结果;
[0031] 流水线型约减器,用于实现蒙哥马利约减步骤1和约减步骤2。
[0032] 本发明提供的以流水线型方式提升蒙哥马利模乘算法性能的方法和按照该方法实现的计算装置,增加了单个蒙哥马利模乘器的吞吐量,在吞吐量相同的情况下,本发明比传统使用多个蒙哥马利模乘器的方法消耗更少的硬件资源和面积。如此使本发明数十倍地提升了单位时间里的模乘运算个数,使得本发明比非流水线型的蒙哥马利模乘器具有更高的性能/资源比。同时,使用流水线型的蒙哥马利模乘器的非对称密钥算法硬件可以用更少的硬件资源达到更高的性能,提高任意长度的蒙哥马利模乘运算的吞吐量。

附图说明

[0033] 图1为本发明流水线型乘法器的乘法步骤;
[0034] 图2为本发明流水线型乘法器的对齐步骤;
[0035] 图3为本发明流水线型乘法器的加法步骤;
[0036] 图4为本发明流水线型约减器的示意框图。

具体实施方式

[0037] 下面结合具体实施例对本发明做进一步描述:
[0038] 本发明已经以硬件RTL代码的形式被实现,并被实现到一个基于FPGA上的产品中。它也可以被作为IP被集成到非对称加密算法以及相关安全硬件ASIC产品中。
[0039] 蒙哥马利模乘主要包括两部分,第一部分是普通乘法,只是由于相乘的两个数很大(比如256或者512位),必须把这个乘法分成多个更小的乘法来执行。
[0040] 乘法步骤1:如果一个FPGADSP计算单元的输入位宽分别为U、V,或者ASIC实现了较小位宽的乘法器,则可以使用多个小位宽的乘法器实现此步骤。假设输入数据,其中 , 表示向上取整且其输
入数据为R位二进制数;则乘法运算式:
[0041]
[0042] 如图1所示,两个R位的整数乘法可以被分解为N*M个U位数*V位数的小整数乘法(图中Xab=Sa * Tb),该乘法结果为(U+V)位。这些乘法器每一个都是多时钟、流水线型的。同时,这些乘法器都是并行的,因此,这一步骤的时钟延迟等于一个U位数*V位数的小整数乘法器的时钟延迟个数。
[0043] 乘法步骤2:这一步骤将乘法步骤1中小位宽全流水线型乘法器的相乘结果按位对齐,获得多个不同长度的整数,并将它们分别存入不同寄存器中,如图2所示。
[0044] 由于硬件实现对齐非常容易,就是把乘法器输出结果连接至相应寄存器的相应输入,因此这一步骤只需要一个时钟周期。
[0045] 图2中整数左端为最小端,“>>U”表示从最低位开始,填U位的0;图2中每行数据长度并不代表真实比例,比如U和V不相等时,图2中上半部分和下半部分每列的位数也是不同的。
[0046] 乘法步骤3:这一步将乘法步骤2中的所有整数相加,最后得到2*R位的乘法结果,不同的加法器实现有不同的资源使用和时间延迟;
[0047] 图3描绘了一个可能的加法实现,其将乘法步骤2中的整数分成多个固定长度的部分,每一部分由一个方框所标识。从左至右,将每一个方框里的整数相加,并将进位结果传至下一个方框里相加。需要注意的是,每一个方框里都可能有多个及多级加法器,因此每一个方框都需要至少一个时钟。为了使得乘法步骤3也是流水线型的,每个时钟之间需要使用寄存器来保存中间结果。
[0048] 一个优化是,如果在某一个方框中,一个整数的相应位全部由>>U 或者>>V组成,也就是全部为0,则无需使用该部分做加法;出于简化的目的,这些方框都是矩形的。需要注意的是,U和V不相等时,图3中上半部分和下半部分每列所表示的位数是不同的,因此为了达到相同的位宽,该方框或者为上宽下窄(UV)。
[0049] 蒙哥马利模乘运算第2部分将第1部分的2R位的乘法结果约减为R位。图4展示了将图3的乘法器输出结果从2R位约减为R位 (R=L*K) 的过程。它主要包含两部分:
[0050] 蒙哥马利约减步骤1:该步骤采用K个流水线型蒙哥马利约减单元,每一次将结果约减L位;已知参数为P=∑Bi*2i,为该椭圆曲线相应素数,其中i=(0,1,2,…,R); Bi∈(-1,0,1),以及K0=-P-1模2L。例如P256曲线中P=2256-2224+2192+296-1, 因此B256=B192=B96=1, B224=B0=-1, 其余Bi=0。
[0051] 其中,一个流水线型蒙哥马利约减单元将乘法器输出结果从B*L位约减为(B-1)*L位 (B=2K,2K-1,…,K+1) 的过程包含以下步骤:
[0052] 1)对Z进行模2L运算,即取Z的低L位得到T1;
[0053] 2)计算Y=(T1*K0)模2L,计算T1乘K0使用一个全流水的乘法器,两个输入均为L位,输出为2L位,然后取该乘法器结果的低L位得到Y;
[0054] 3)计算T2=Y*P,得到T2=∑Bi*Y*2i,该处乘法使用移位相加实现:每一部分都是Y左移i位,然后添加符号位,最后将这些部分相加得到T2;
[0055] 4)Z与T2相加,得到T3;
[0056] 5)计算Z=T3/2L,即将 T3右移L位,运算结果用于更新Z;
[0057] 其中,步骤1)和步骤5)均仅需单时钟周期即可完成,步骤2)、3)和步骤4)需要若干个时钟周期完成;为了实现流水线型蒙哥马利约减单元,每一个时钟周期都保存输出结果到相应寄存器中;一个蒙哥马利约减器包含K个流水线型蒙哥马利约减单元,使得整个蒙哥马利约减器都支持流水线型。
[0058] 对于一些特定的椭圆曲线,K0在特定L值时等于1。比如使用P256曲线的椭圆曲线加密算法以及国密2算法,K0 在L=64时等于1。这时可以无需计算上述步骤2,而上述步骤3改为计算T2=T1*P。
[0059] 蒙哥马利约减步骤2:该步骤是图4中最右侧的模减模块,其确保最终结果在[1, P) 范围内。如果上一步骤的结果Z≥P,则输出结果X=Z-P;否则X=Z。
[0060] 以上已将本发明做一详细说明,以上所述,仅为本发明之较佳实施例而已,当不能限定本申请实施范围,即凡依本申请范围所作均等变化与修饰,皆应仍属本发明涵盖范围内。