CN102122241A - 一种适用于素域和多项式域的模乘模除器 - Google Patents
一种适用于素域和多项式域的模乘模除器 Download PDFInfo
- Publication number
- CN102122241A CN102122241A CN2010100226476A CN201010022647A CN102122241A CN 102122241 A CN102122241 A CN 102122241A CN 2010100226476 A CN2010100226476 A CN 2010100226476A CN 201010022647 A CN201010022647 A CN 201010022647A CN 102122241 A CN102122241 A CN 102122241A
- Authority
- CN
- China
- Prior art keywords
- output
- mux
- input
- mould
- register
- 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
Landscapes
- Complex Calculations (AREA)
Abstract
本发明涉及一种适用于高速网络应用以及便携式移动设备应用需要的针对ECC(椭圆曲线密码)算法的双域模乘模除器,它由4个PE运算单元、5个寄存器堆Regfile、Booth编码单元、输入寄存器Load file、控制模块control和17个多路选择器组成,由17个多路选择器来改变四个PE运算单元之间的连接以及数据的读取位置以完成模除或模乘操作,具有可扩展性,最高可支持480-bit的模乘除运算,模乘与模除运算能够共用硬件单元,以减小硬件的面积;算法中的长操作数的加减法和移位运算都以字为单位进行,大大加快的算法的收敛速度,从而使运算速度加倍。
Description
技术领域
本发明属于集成电路设计技术领域,具体涉及一种适用于高速网络应用以及便携式移动设备应用需要的针对椭圆曲线密码(ECC)算法的双域模乘模除器。
背景技术
在当代,随着信息化的不断深入,越来越多的信息将暴露在公开的媒介中。为了保护那些敏感信息,各种密码算法被应用到无线网络通信领域中。然而,通信设备尤其是便携式设备相对有限的处理能力已无法满足日益增大的数据量的需求。
密码体制一般可以划分为两种类型:对称密码体制和公钥密码体制。对称密码体制的最大优点是效率高,但是主要缺点却是比较明显:密钥分发问题,即要求分发密钥的信道既是保密的又是保真的;另一个缺点是密钥管理问题,即在有N个实体的网络中,每个实体都必须存取N-1个实体的密钥。而公钥密码体制却没有这些缺点,公钥密码仅要求密钥的交换是保真的,而不用保密,且提供了秘密性和不可否认性。
目前,椭圆曲线密码(ECC)已成为除RSA密码之外呼声最高的公钥密码之一,它可以提供同RSA密码体制同样的功能。它的安全性建立在椭圆曲线离散对数问题(ECDLP)的困难性之上。普遍认为160位椭圆曲线密码可提供相当于1024位RSA密码的安全程度。由于密钥短,所以在实际应用中加解密速度较快,并且可节省功耗、带宽和存储空间。ECC算法的核心运算是模乘和求逆,模乘和求逆的性能关系到整个ECC芯片的性能。另外,ECC算法时间上的并行性比较明显。一个高性能且功能齐全的模乘求逆器,并充分发掘算法时间上的并行性,则可以仅用较小的硬件代价,获得较高的加密速度,适应当前的高速网络应用的需要。另外由于硬件消耗小、功耗低,它也可以适应便携式移动设备的应用需要.随着计算机技术的发展,运算速度也在飞速提高。我们有必要增加数据长度以加强加密算法的安全性。本设计在硬件结构上具有可扩展性,可以方便地扩展数据宽度。
发明内容
本发明的目的是提出一种适用于高速网络应用以及便携式移动设备应用需要的针对椭圆曲线密码ECC算法的双域模乘模除器,具有可扩展性,同时显著地降低硬件成本。
本发明的技术方案是:一种适用于素域和多项式域的模乘模除器(如图1所示),由17个多路选择器(1~17)、4个运算单元PE(26~29)、输入寄存器(23)、5个寄存器堆(18~22)、Booth编码单元(24)和控制模块(25)组成;其中:
a.在第二多路选择器(2)和第八多路选择器(8)选1态、13个多路选择器(3~7、10~17)选0态时,由第一多路选择器(1)、第九多路选择器(9)、5个寄存器堆(18~22)、输入寄存器(23)、Booth编码单元(24)、控制模块(25)和4个PE运算单元(26~29)组成模除器(见图5),模除运算采用Euclidean算法;其中:
第一多路选择器(1),输入为运算单元PE0(26)的输出,由stage信号来选择输出,输出至第一寄存器堆(18)或第二寄存器堆(19);
第九多路选择器(9),输入为运算单元PE2(28)的输出,由stage信号来选择输出,输出至第三寄存器堆(20)或第四寄存器堆(21);
第一寄存器堆(18)和第二寄存器堆(19)的输出均到输入寄存器(23);
第三寄存器堆(20)和第四寄存器堆(21)的输出均到PE3运算单元(29);
第五寄存器堆(22)的输出到Booth编码器(24);
输入寄存器(23)的输出到PE0运算单元(26);
Booth编码单元(24)输出到PE2运算单元(28);
控制模块(25)输出到PE0和PE1运算单元(26、27);
PE0运算单元(26)的输出根据stage信号的选择写入到第一寄存器堆(18)或第二寄存器堆(19)中;
PE1运算单元(27)的输出到PE2运算单元(28);
PE2运算单元(28)的输出根据stage信号的选择写入到第三寄存器堆(20)或第四寄存器堆(21)中;
PE3运算单元(29)的输出到PE1运算单元(27);
b.在第一多路选择器(1)和第九多路选择器(9)不工作、13个多路选择器(3~7、10~17)选1态时,由第二多路选择器(2)、第八多路选择器(8)、5个寄存器堆(18~22)、输入寄存器(23)、Booth编码单元(24)、控制模块(25)和4个PE运算单元(26~29)组成模乘器(见图6),模乘运算采用模哥马利算法;其中:
第二多路选择器(2),输入为第一寄存器堆(18)和第四寄存器堆(21)内存储的数据,以First_round作为选择信号,选择输出正确的数据到输入寄存器(23)内;
第八多路选择器(8),输入为第二寄存器堆(19)和第五寄存器堆(22)内存储的数据,以First_round作为选择信号,选择输出正确的数据到输入寄存器(23)内;
第三寄存器堆(20)输出到Booth编码器(24)中;
输入寄存器(23)的两位输出到PE0运算单元(26);
Booth编码单元(24)的输出分别为4个PE运算单元(26~29)提供输入;
PE0运算单元(26)的输出到PE1运算单元(27);
PE1运算单元(27)的输出到PE2运算单元(28);
PE2运算单元(28)的输出到PE3运算单元(29);
PE3运算单元(29)的输出分别到第五寄存器堆(22)和第四寄存器堆(21)。
上述运算单元PE(如图2所示)由6个多路选择器(30~35)、2个寄存器(36、37)、2个反相控制器(38、39)、3个进位保留加法器(40、41、42)、PE内部控制模块(43)和PE内部移位器(44)组成;其中:
第十八多路选择器(30)的输入为模乘运算时累加被乘数的倍数mul_h和模除运算时累加D寄存器值的倍数div_h,由运算函数Func_sel作为选择,选择出正确的W寄存器值的倍数选择信号,输出到第十九多路选择器(31)的选择控制端;
第十九多路选择器(31)的输入为0、W寄存器的值和2*W寄存器的值,由第十八多路选择器(31)的输出作为选择信号,选择出正确的操作数值到第一反相控制器(38);
第二十多路选择器(32)的输入为字运算时模P的倍数double1和double2,由运算函数Func_sel作为选择,输出正确的倍数选择信号到第二十三多路选择器(35);
第二十一多路选择器(33)的输入为字运算时模P的倍数zero1和zero2,由运算函数Func_sel作为选择,输出正确的倍数选择信号到第二十三多路选择器(35);
第二十二多路选择器(34)的输入为字运算时模P的倍数neg1和neg2,由运算函数Func_sel作为选择,输出正确的倍数选择信号到第二反相控制器(39);
第二十三多路选择器(35)的输入为0、模P的值和2*模P的值,由第二十、第二十一多路选择器(32、33)的输出作为选择信号,选择出正确的操作数值到第二反相控制器(39);
第七寄存器(36)用来存放运算时的模P中一个字的值;
第八寄存器(37)用来存放运算时W中一个字的值;
第一反相控制器(38)的输入为第十九多路选择器(31)的输出值,控制信号为第十八多路选择器(30)的输出值,输出为输入经过取反后的数值;
第二反相控制器(39)的输入为第二十三多路选择器(35)的输出值,控制信号为第二十二多路选择器(34)的输出值,输出为输入经过取反后的数值;
第一进位保留加法器(40)的输入为保存一个操作数的U寄存器当前字的结果和进位(Uc,Us),以及素域或多项式域的域选择信号Field,第一个字First_word,和第一反相控制器(38)的输出,输出为通过进位保留加法器的值Us_1以及进位Uc_1;
第二进位保留加法器(41)的输入为第一进位保留加法器(40)的输出Uc_1,Us_1,素域或多项式域的域选择信号Field,第一个字First_word,和第二反相控制器(39)的输出,输出为通过进位保留加法器的值Us_2以及进位Uc_2;
第三进位保留加法器(42)的输入为PE内部移位器(44)的输入Uc_3、Us_3和carry,输出为经过进位保留加法器的值Us_out以及进位Uc_out;
PE内部控制模块(43)的输入为第一进位保留加法器(40)的输出Us_1、Uc_1的低两位,以及模P的低两位、右移的位数shift的值,输出为确定后面所加模P的倍数的控制信号;
PE内部移位器(44)的输入为第二进位保留加法器(41)的输出值Us_2、Uc_2的值,以及右移的位数shift的值,输出为经过右移后的Us_3、Uc_3以及右移出来的carry的值。
本发明提出的适用于高速网络应用以及便携式移动设备应用需要的针对ECC(椭圆曲线密码)算法的双域模乘模除器,最高可执行480-bit的模除运算,采用SMIC 0.18μm CMOS工艺综合,关键路径时延为4.71纳秒,最高频率达212.3MHz,完成256-bit模除用时13us,面积为37k等效门,256-bit模乘用时1.4us,面积为11.4k等效门。
ECC算法是一种公钥的算法,ECDH,ECDSA中主要运算集中在点乘的运算,而点乘又是由倍点和点加组成,而倍点和点加的运算主要是有限域下的模乘和模除算法。用硬件完成有限域的模乘模除算法,上层用软件去实现不同的公钥算法是一种性能和灵活性的最好折中。现在常用来处理有限域模除的算法主要是应用Euclidean算法,具体算法实现见图3;而处理有限域模乘的算法主要是用蒙哥马利模乘算法,具体算法实现见图4。
本发明的优点在于能同时处理ECC运算中素域及二进制域下的模乘和模除运算,主要的运算部件由相同结构的PE运算单元组成,并能通过重新配置运算单元之间的连接关系,能相应的加快不同算法的速度;同时也能尽可能的做到硬件的复用,在达到性能要求的同时,减少了硬件面积。
本发明的优点还在于提出了一种专门处理ECC运算中模乘模除的运算单元PE单元,通过分析素域及二进制域下的运算过程,提取出了运算中的基本运算:U=(U+mul_h*W+kP)>>shift操作。每个PE运算单元都能完成这一基本运算,在进行模乘模除运算时,可以通过合理分配每个PE单元进行的操作,加速模乘模除运算。
本发明的优点之三在于该模乘模除器主要运算部件由多个结构相同的PE运算单元组成,结构是可以配置的(图1中以四个PE运算单元说明),可以根据硬件或功率的要求,相应的增加或减少PE运算单元,以达到新的要求。
附图说明
图1是本发明双域模乘模除器顶层结构图;
图2是本发明双域模乘模除器的PE运算单元结构图;
图3是本发明改进后的Euclidean模除算法;
图4是本发明改进后的蒙哥马利模乘算法;
图5是本发明双域模乘模除器作模除时的等效硬件结构图;
图6是本发明双域模乘模除器作模乘时的等效硬件结构图;
图7a是本发明进行模除运算时数据通路的算法说明图;
图7b是图5的等效说明图;
图8a是本发明进行模乘运算时数据通路的算法说明图;
图8b是图6的等效说明图。
图中标号:1为第一多路选择器,2为第二多路选择器,3为第三多路选择器,4为第四多路选择器,5为第五多路选择器,6为第六多路选择器,7为第七多路选择器,8为第八多路选择器,9为第九多路选择器,10为第十多路选择器,11为第十一多路选择器,12为第十二多路选择器,13为第十三多路选择器,14为第十四多路选择器,15为第十五多路选择器,16为第十六多路选择器,17为第十七多路选择器,18为第一寄存器堆,19为第二寄存器堆,20为第三寄存器堆,21为第四寄存器堆,22为第五寄存器堆,23为输入寄存器,24为Booth编码单元,25为控制模块,26为PE0运算单元,27为PE1运算单元,28为PE2运算单元,29为PE3运算单元,30为第十八多路选择器,31为第十九多路选择器,32为第二十多路选择器,33为第二十一多路选择器,34为第二十二多路选择器,35为第二十三多路选择器,36为第七寄存器,37为第八寄存器,38为第一反相控制器,39为第二反相控制器,40为第一进位保留加法器,41为第二进位保留加法器,42为第三进位保留加法器,43为PE内部控制模块,44为PE内部移位器。
具体实施方式
下面结合附图进一步说明本发明。
图1是本发明双域模乘模除器顶层结构图,主要的运算部件是PE0(26)、PE1(27)、PE2(28)和PE3(29)四个运算单元,四个运算单元结构相同(见图2),且可加速完成模乘模除运算的基本运算。该模乘模除器能完成素域下及二进制域下的模乘模除操作,在进行模乘(模除)运算时,所用到的被乘数(被除数)、乘数(除数)、乘法结果(除法结果)及模等数据,都存储在五个寄存器堆(18~22)中。Booth编码单元用来提供模乘运算中所用到的mul_h的值,而Control单元用来提供模除运算时所用到的div_h的值。而17个多路选择器(1~17)用来改变四个PE运算单元之间的连接以及数据的读取位置以完成模除或模乘操作,整个ECC模乘模除器可以通过重新配置单元之间的连接通路,来完成不同的算法。
1.模除状态
模除状态由第一、第九多路选择器(1、9),五个寄存器堆Regfile(18~22),输入寄存器(23),Booth编码单元(24),控制模块(25),四个PE运算单元(26~29)组成,数据通路如附图5所示,完成的模除算法如附图7a所示,模除时的顶层说明图如附图7b所示,其中:
第一多路选择器(1),输入为PE0中计算的结果,由stage信号来选择,将输入的结果写入到Regfile1或Regfile2中。
第九多路选择器(9),输入为PE2中计算的结果,由stage信号来选择,将输入的结果写入到Regfile3或Regfile4中。
第一寄存器堆(18),在stage信号为0时,存储的是以除数初始化的C寄存器中的计算结果以及进位(Cc,Cs),stage信号为1时,存储的是以模P初始化的D寄存器中的计算结果及进位(Dc,Ds);输入为PE0的计算结果,输出到输入寄存器(23)中。
第二寄存器堆(19),在stage信号为0时,存储的是以模P初始化的D寄存器中的计算结果以及进位(Dc,Ds),stage信号为1时,存储的是以除数初始化的C寄存器中的计算结果及进位(Cc,Cs);输入为PE0的计算结果,输出到输入寄存器(23)中。
第三寄存器堆(20),在stage信号为0时,存储的是以被除数初始化的U寄存器中的计算结果以及进位(Uc,Us),stage信号为1时,存储的是以0初始化的W寄存器中的计算结果及进位(Wc,Ws);输入为PE2的计算结果,输出到PE3运算单元中。
第四寄存器堆(21),在stage信号为0时,存储的是以0初始化的W寄存器中的计算结果以及进位(Wc,Ws),stage信号为1时,存储的是以被除数初始化的U寄存器中的计算结果及进位(Uc,Us);输入为PE2的计算结果,输出到PE3运算单元中。
第五寄存器堆(22),在stage信号为0或1时,都存储的是模(0,P)的值;输出到Booth编码器(24)中。
输入寄存器(23),输入为第一,第二寄存堆(18,19)的输出结果;输出到PE0运算单元中。
Booth编码单元(24),在Func sel为模乘运算时,作为Booth编码器对乘数进行编码;而在模除运算时,只作为寄存器使用;输入为第五寄存器堆(22)的结果;输出到PE2运算单元中。
控制模块(25)为PE0、PE1运算单元提供计算所需的参数divh,输出到PE0和PE1运算单元。
PE0运算单元(26),完成C=(C+div_h*D)>>shift运算,输入来自输入寄存器(23)的输出(C,D)的值,以及控制模块(25)的输出divh;输出为保留进位加法器计算的结果(Cc,Cs);根据stage信号的选择写入到第一寄存器堆(18)或第二寄存器堆(19)中。
PE1运算单元(27),完成U=U+div_h*W运算,输入为(U,W)的值来自PE3运算单元(29),以及控制模块(25)的输出div_h;输出为保留进位加法器计算的结果(Uc,Us),输出到PE2运算单元(28)。
PE2运算单元(28),完成U=(U+kP)>>shift运算,输入为PE1运算单元(27)的输出,以及Booth编码单元的输入模P;输出为保留进位加法器计算的结果(Cc,Cs);根据stage信号的选择写入到第三(20)或第四寄存器堆(21)中.
PE3运算单元(29),只完成对读出的第三寄存器堆(20)或第四寄存器堆(21)中的数据进行存储;输出到PE1运算单元(27)。
当进行模除运算时,四个PE单元的连接关系经过多路选择器的选择后如附图5所示,PE0运算单元(26)完成C=(C+div_h*D)>>shift操作,而PE1、PE2配合,完成对寄存器U的计算,其中PE1完成U=(U+divh*W)的操作,PE2运算单元(28)完成U=(U+kp)>>shift的操作,PE3用作数据存储器使用。
在进行模除运算时,基本思想如下(见图3):针对已知的X、Y、P,求Z=X/Ymod P。使用两个等式:CX≡UY mod P和DX≡WY mod P。初始化时C=Y、U=X、D=P、W=0,然后用扩展Euclidean算法,将gcd(C,D)化为gcd(0,1)或gcd(0,-1),在此过程中W和U做相应的素域下的线性变换,最终得到W=X/Y mod P或W=-X/Y mod P。
模除算法中用到的基本运算有:C=(C+div_h*D)>>shift;U=U+div_h*W;U=(U+kP)>>shift,具有相似的结构,于是设计一个基本的运算单元,能够完成X=(X+kY)>>shift的运算,这样就可以完成模除的运算要求。考虑到取得最大的运算并行性,四个PE运算单元(26~29)进行相应的运算,而控制模块(25)为运算单元提供运算所需的参数div_h,五个寄存器堆(18~22)存储运算所需的数据,由于考虑到可扩展性和灵活性,所以运算中多bit的模运算都分解成字级运算.于是得到了针对模除运算的硬件单元,见附图5,顶层简图如附图7b所示。
设计的PE运算单元具有相似的运算结构,能够完成Z=(Z+mX+nY)>>shift的运算,如附图1所示。这样PE运算单元也即满足了除法中的运算要求。
PE0运算单元(26)完成C=(C+div_h*D)>>shift操作,操作数C、D、div_h和shift都由外部控制模块及寄存器堆提供。每个clock完成一个字的C=(C+div_h*D)>>shift的操作,为了保证能工作在一个较高的时钟频率下,所以运算采用进位保留加法器CSA,这样结果包含两部分,运算的结果和进位结果,各为32bit,将这两部分值再暂存入寄存器堆中。
PE1运算单元(27)完成U=(U+div_h*W)的操作,操作数U、W和div_h都来自外部控制模块及其他的运算单元提供。每个clock完成一个字的U=(U+div_h*W)的操作.运算结果包含运算的结果及进位(Uc,Us),将结果写入到下一个运算单元PE2中,完成后续的操作,形成一个小的两级流水线。
PE2运算单元(28)完成U=(U+kp)>>shift的操作,操作数U、P、k和shift来自其它的运算单元或外部寄存器堆。每个clock完成一个字的U=(U+kp)>>shift的操作,运算结果包含运算的结果及进位(Uc,Us),将这两部分结果再暂存到外部寄存器堆中。
PE3运算单元(29)这时完成数据存储功能,而不再参与运算,这样能够与算法相一致,并且不用再添加多的硬件结构来存储PE1运算单元(26)的运算数据。
这时所需要的运算操作数有C、D、U、W、P、div_h和shift,其中C、D、U和W一方面需要存储初始的值,另一方面还要处理C和D、U和W数据的交换,所以实现中采用了五个寄存器堆,为了不要添加太多的面积,所以采用stage信号进行区分,对寄存器堆在除法中进行复用。
第一寄存器堆(18)有16个64-bit的寄存器,在stage信号为0时,存储的是(Cc,Cs)的数据,而当stage信号为1时,存储的是(Dc,Ds)的数据。
第二寄存器堆(19)有16个64-bit的寄存器,在stage信号为0时,存储的是(Dc,Ds)的数据,而当stage信号为0时,存储的是(Cc,Cs)的数据。
第三寄存器堆(20)有16个64-bit的寄存器,在stage信号为0时,存储的是(Uc,Us)的数据,而当stage信号为0时,存储的是(Wc,Ws)的数据。
第四寄存器堆(21)有16个64-bit的寄存器,在stage信号为0时,存储的是(Wc,Ws)的数据,而当stage信号为0时,存储的是(Uc,Us)的数据。
第五寄存器堆(22)有16个64-bit的寄存器,在stage信号为0或1时,存储的都是模P的数据(0,P)。
而Booth编码单元(24)此时只提供模P的数据存储作用,这样复用模乘时的Booth编码单元,不用再为模P专门再添加暂存单元。
2.模乘状态
模乘状态由第二、第八多路选择器(2、8)、五个寄存器堆(18~22)、输入寄存器(23)、Booth编码单元(24)、四个PE运算单元(26~29)组成,数据通路如图6所示,具体实现的模乘算法如附图8a所示,模乘时的顶层说明简图如附图8b所示.其中:
第二多路选择器(2),输入为第一寄存器堆(18)和第四寄存器堆(21)内存储的数据,是否为第一次运算的信号First round作为选择信号,选择出正确的数据到输入寄存器(23)内。
第八多路选择器(8),输入为第二寄存器堆(19)和第五寄存器堆(22)内存储的数据,是否为第一次运算的信号First_round作为选择信号,选择出正确的数据到输入寄存器(23)内。
第一寄存器堆(18),存储的是被乘数W和模P的值(W,P),按字存储在寄存器堆中;输出到第二多路选择器(2)中。
第二寄存器堆(19),存储的是运算中的U的值及进位(Uc,Us),也是按字存储在寄存器堆中;输出到第八多路选择器(8)中。
第三寄存器堆(20),存储的是运算中的乘数的值(0,C),也是按字存储在寄存器堆中;输出到Booth编码器(24)中。
第四寄存器堆(21),存储的是运算中存储的被乘数和模(W,P)的值,在模乘时第四寄存器堆(21)作用是一个fifo,存储的数据也是按字存储在寄存器堆中;输出到第二多路选择器(2)中。
第五寄存器堆(22),存储的是运算中存储的U的值及进位(Uc,Us),在模乘时第五寄存器堆(22)的作用也是一个fifo,存储的数据按字存储在寄存器堆中;输出到第八多路选择器(8)中。
输入寄存器(23),有两个64bit的数据输入,分别是被乘数及模P(W,P)和计算中的进位及结果(Uc,Us);输出到PE0运算单元(26)。
Booth编码单元(24),输入为乘数C中的数据;分别为四个PE运算单元提供乘以W的倍数mul_h0、mul_h1、mul_h2和mul_h3。
PE0运算单元,输入为两个64bit的数据,分别是被乘数及模P(W,P)和计算中的进位及结果(Uc,Us);完成运算U=(U+mul_h*W+kP)>>shift;输出为计算后结果及进位(Uc,Us)和被乘数及模P(W,P)的值,输出到PE1运算单元中。
PE1运算单元,输入为两个64bit的数据,分别是被乘数及模P(W,P)和PE0中计算中的进位及结果(Uc,Us);完成运算U=(U+mul_h*W+kP)>>shift;输出为计算后结果及进位(Uc,Us)和被乘数及模P(W,P)的值,输出到PE2运算单元中。
PE2运算单元,输入为两个64bit的数据,分别是被乘数及模P(W,P)和PE1中计算中的进位及结果(Uc,Us);完成运算U=(U+mul_h*W+kP)>>shift;输出为计算后结果及进位(Uc,Us)和被乘数及模P(W,P)的值,输出到PE3运算单元中。
PE3运算单元,输入为两个64bit的数据,分别是被乘数及模P(W,P)和PE2中计算中的进位及结果(Uc,Us);完成运算U=(U+mul_h*W+kP)>>shift;输出为计算后结果及进位(Uc,Us)和被乘数及模P(W,P)的值,前者输出到第五寄存器堆中(22),后者输出到第四寄存器堆(21)中。
当进行模乘运算时,四个PE单元的连接关系经过多路选择器的选择后如附图8b所示,四个PE单元形成一个流水线结构,都进行U=(U+mul_h*W+kP)>>shift的操作。
对于模乘运算,对素域下,采用经过基-4的Booth编码的蒙哥马利模乘,算法中用到的基本运算有U=(U+mul_h*W+kP)>>shift。为了取得更快的运算速度,所以让四个PE运算单元(26~29)都进行U=(U+mul_h*W+kP)>>shift操作,形成一个四级流水线。
根据Field(素域还是多项式域)和C的值设置此次累加运算所需的参数值。其中mul_h表示累加时被乘数的倍数。参数shift表示此次累加后U要右移的位数。参数k的决定方式同算法1,目的也是使U+kP后值的最低shift位为0。参数h的值为乘数的位数。为了使素域下的运算结果在GF(P)内,算法对结果做了调整。而多项式域下的运算会将这一步跳过(见图4)。
可见,本算法可以支持双域下的模乘运算,而且素域下的模乘运算因为采用了booth编码,累加运算的次数可以缩减为原来的一半。需要说明的是:为了实现可扩展,并使模乘与模除运算能够共用硬件单元,算法1和算法2中的长操作数的加减法和移位运算都以字为单位进行。设操作数长度为n,字长为w,
则操作数以字为单位的向量表示为{0,W(e-1),...,W(1),W(0)}。高位上增加全零字的目的是为了防止加法运算时结果溢出,另外,它还可以作为符号字,方便加法结果右移后的符号位扩展。
PE0运算单元(26)完成U=(U+mul_h0*W+kP)>>shift操作,操作数U、W、P、mul_h0及shift都由外部控制模块及寄存器堆提供。每个clock完成一个字的U=(U+mul_h*W+kP)>>shift的操作,为了保证能工作在一个较高的时钟频率下,所以运算采用进位保留加法器CSA,这样结果包含两部分,运算的结果和进位结果,各为32bit,将这两部分值再写入到下一个运算单元中,进行流水线操作。
PE1运算单元(27)完成U=(U+mul_h1*W+kP)>>shift操作,操作数U、W、P、mul_h1及shift都由外部控制模块及上一个PE运算单元提供。每个clock完成一个字的U=(U+mul_h*W+kP)>>shift的操作,为了保证能工作在一个较高的时钟频率下,所以运算采用进位保留加法器CSA,这样结果包含两部分,运算的结果和进位结果,各为32bit,将这两部分值再写入到下一个运算单元中,进行流水线操作。
PE2运算单元(28)完成U=(U+mul_h2*W+kP)>>shift操作,操作数U、W、P、mul_h2及shift都由外部控制模块及上一个PE运算单元提供。每个clock完成一个字的U=(U+mul_h*W+kP)>>shift的操作,为了保证能工作在一个较高的时钟频率下,所以运算采用进位保留加法器CSA,这样结果包含两部分,运算的结果和进位结果,各为32bit,将这两部分值再写入到下一个运算单元中,进行流水线操作。
PE3运算单元(29)完成U=(U+mul_h3*W+kP)>>shift操作,操作数U、W、P、mul_h3及shift都由外部控制模块及上一个PE运算单元提供。每个clock完成一个字的U=(U+mul_h*W+kP)>>shift的操作,为了保证能工作在一个较高的时钟频率下,所以运算采用进位保留加法器CSA,这样结果包含两部分,运算的结果和进位结果,各为32bit,将这两部分值再写入到寄存器堆单元中,进行流水线操作。
这里需要提供U、W、P、mul_h等参数,于是设计U、W、P等参数存入到第一、第二、第三、第四和第五寄存器堆(18~22)中,而四个PE运算单元所用的mul_h0、mul_h1、mul_h2、mul_h3四个参数由Booth编码单元(24)提供。一个clock内,Booth编码单元一次提供四个运算单元所用的mul_h值,这样四个PE运算单元(26~29)组成一个四级流水线进行并行计算。其中:
第一寄存器堆(18)存储初始的被乘数和模P的值(W,P),输出到PE0运算单元(26),进行运算。
第二寄存器堆(19)存储运算单元所计算的进位及结果(Uc,Us),输出到PE0运算单元(27),进行运算。
第三寄存器堆(20)存储乘数C的值(0,C),输出到Booth编码单元(24)中,为四个PE运算单元(26~29)同时提供四个运算所需的参数mul_h。
第四寄存器堆(21)以fifo的形式存储当前运算的(W,P)的值,输出到PE0运算单元(26)进行运算。
第五寄存器堆(22)以fifo的形式存储当前运算的(Uc,Us)的值,输出到PE0运算单元(26)进行运算。
Claims (4)
1.一种适用于素域和多项式域的模乘模除器,其特征在于:它由17个多路选择器(1~17)、4个运算单元PE(26~29)、输入寄存器(23)、5个寄存器堆(18~22)、Booth编码单元(24)和控制模块(25)组成;其中:
a.在第二多路选择器(2)和第八多路选择器(8)选1态、13个多路选择器(3~7、10~17)选0态时,由第一多路选择器(1)、第九多路选择器(9)、5个寄存器堆(18~22)、输入寄存器(23)、Booth编码单元(24)、控制模块(25)和4个PE运算单元(26~29)组成模除器,模除运算采用Euclidean算法;
b.在第一多路选择器(1)和第九多路选择器(9)不工作、13个多路选择器(3~7、10~17)选1态时,由第二多路选择器(2)、第八多路选择器(8)、5个寄存器堆(18~22)、输入寄存器(23)、Booth编码单元(24)、控制模块(25)和4个PE运算单元(26~29)组成模乘器,模乘运算采用模哥马利算法。
2.按权利要求1所述的适用于素域和多项式域的模乘模除器,其特征在于:所述的步骤a中:
第一多路选择器(1),输入为运算单元PE0(26)的输出;由stage信号来选择输出,输出至第一寄存器堆(18)或第二寄存器堆(19);
第九多路选择器(9),输入为运算单元PE2(28)的输出;由stage信号来选择输出,输出至第三寄存器堆(20)或第四寄存器堆(21);
第一寄存器堆(18)和第二寄存器堆(19)的输出均到输入寄存器(23);
第三寄存器堆(20)和第四寄存器堆(21)的输出均到PE3运算单元(29);
第五寄存器堆(22)的输出到Booth编码器(24);
输入寄存器(23)的输出到PE0运算单元(26);
Booth编码单元(24)输出到PE2运算单元(28);
控制模块(25)输出到PE0和PE1运算单元(26、27);
PE0运算单元(26)的输出根据stage信号的选择写入到第一寄存器堆(18)或第二寄存器堆(19);
PE1运算单元(27)的输出到PE2运算单元(28);
PE2运算单元(28)的输出根据stage信号的选择写入到第三寄存器堆(20)或第四寄存器堆(21);
PE3运算单元(29)的输出到PE1运算单元(27)。
3.按权利要求1所述的适用于素域和多项式域的模乘模除器,其特征在于:所述的步骤b中:
第二多路选择器(2),输入为第一寄存器堆(18)和第四寄存器堆(21)内存储的数据;以First_round作为选择信号,选择输出正确的数据到输入寄存器(23)内;
第八多路选择器(8),输入为第二寄存器堆(19)和第五寄存器堆(22)内存储的数据;以First_round作为选择信号,选择输出正确的数据到输入寄存器(23)内;
第三寄存器堆(20)的输出到Booth编码器(24);
输入寄存器(23)的两位输出到PE0运算单元(26);
Booth编码单元(24)的输出分别为4个PE运算单元(26~29)提供输入;
PE0运算单元(26)的输出到PE1运算单元(27);
PE1运算单元(27)的输出到PE2运算单元(28);
PE2运算单元(28)的输出到PE3运算单元(29);
PE3运算单元(29)的输出分别到第五寄存器堆(22)和第四寄存器堆(21)。
4.根据权利要求1所述的模乘模除器,其特征在于:所述运算单元PE由6个多路选择器(30~35)、2个寄存器(36、37)、2个反相控制器(38、39)、3个进位保留加法器(40、41、42)、PE内部控制模块(43)和PE内部移位器(44)组成;其中:
第十八多路选择器(30)的输入为模乘运算时累加被乘数的倍数mul_h和模除运算时累加D寄存器值的倍数div_h,由运算函数Func_sel作为选择,选择出正确的W寄存器值的倍数选择信号,输出到第十九多路选择器(31)的选择控制端;
第十九多路选择器(31)的输入为0、W寄存器的值和2*W寄存器的值,由第十八多路选择器(31)的输出作为选择信号,选择出正确的操作数值到第一反相控制器(38);
第二十多路选择器(32)的输入为字运算时模P的倍数double1和double2,由运算函数Func_sel作为选择,输出正确的倍数选择信号到第二十三多路选择器(35);
第二十一多路选择器(33)的输入为字运算时模P的倍数zero1和zero2,由运算函数Func_sel作为选择,输出正确的倍数选择信号到第二十三多路选择器(35);
第二十二多路选择器(34)的输入为字运算时模P的倍数neg1和neg2,由运算函数Func_sel作为选择,输出正确的倍数选择信号到第二反相控制器(39);
第二十三多路选择器(35)的输入为0、模P的值和2*模P的值,由第二十、第二十一多路选择器(32、33)的输出作为选择信号,选择出正确的操作数值到第二反相控制器(39);
第七寄存器(36)用来存放运算时的模P中一个字的值;
第八寄存器(37)用来存放运算时W中一个字的值;
第一反相控制器(38)的输入为第十九多路选择器(31)的输出值,控制信号为第十八多路选择器(30)的输出值,输出为输入经过取反后的数值;
第二反相控制器(39)的输入为第二十三多路选择器(35)的输出值,控制信号为第二十二多路选择器(34)的输出值,输出为输入经过取反后的数值;
第一进位保留加法器(40)的输入为保存一个操作数的U寄存器当前字的结果和进位(Uc,Us),以及素域或多项式域的域选择信号Field,第一个字First_word,和第一反相控制器(38)的输出,输出为通过进位保留加法器的值Us_1以及进位Uc_1;
第二进位保留加法器(41)的输入为第一进位保留加法器(40)的输出Uc_1,Us_1,素域或多项式域的域选择信号Field,第一个字First_word,和第二反相控制器(39)的输出,输出为通过进位保留加法器的值Us_2以及进位Uc_2;
第三进位保留加法器(42)的输入为PE内部移位器(44)的输入Uc_3、Us_3和carry,输出为经过进位保留加法器的值Us_out以及进位Uc_out;
PE内部控制模块(43)的输入为第一进位保留加法器(40)的输出Us_1、Uc_1的低两位,以及模P的低两位、右移的位数shift的值,输出为确定后面所加模P的倍数的控制信号;
PE内部移位器(44)的输入为第二进位保留加法器(41)的输出值Us_2、Uc_2的值,以及右移的位数shift的值,输出为经过右移后的Us_3、Uc_3以及右移出来的carry的值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010100226476A CN102122241A (zh) | 2010-01-08 | 2010-01-08 | 一种适用于素域和多项式域的模乘模除器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010100226476A CN102122241A (zh) | 2010-01-08 | 2010-01-08 | 一种适用于素域和多项式域的模乘模除器 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102122241A true CN102122241A (zh) | 2011-07-13 |
Family
ID=44250803
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2010100226476A Pending CN102122241A (zh) | 2010-01-08 | 2010-01-08 | 一种适用于素域和多项式域的模乘模除器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102122241A (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2014115047A1 (en) * | 2013-01-23 | 2014-07-31 | International Business Machines Corporation | Vector floating point test data class immediate instruction |
CN104065478A (zh) * | 2014-06-18 | 2014-09-24 | 天津大学 | 基于格密码体系的多项式模乘协处理器 |
CN105094746A (zh) * | 2014-05-07 | 2015-11-25 | 北京万协通信息技术有限公司 | 一种椭圆曲线密码的点加/点倍的实现方法 |
US9471311B2 (en) | 2013-01-23 | 2016-10-18 | International Business Machines Corporation | Vector checksum instruction |
US9703557B2 (en) | 2013-01-23 | 2017-07-11 | International Business Machines Corporation | Vector galois field multiply sum and accumulate instruction |
US9715385B2 (en) | 2013-01-23 | 2017-07-25 | International Business Machines Corporation | Vector exception code |
US9740482B2 (en) | 2013-01-23 | 2017-08-22 | International Business Machines Corporation | Vector generate mask instruction |
CN107169380A (zh) * | 2017-05-19 | 2017-09-15 | 北京大学 | 一种rsa电路结构及rsa加密方法 |
US9823924B2 (en) | 2013-01-23 | 2017-11-21 | International Business Machines Corporation | Vector element rotate and insert under mask instruction |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1731345A (zh) * | 2005-08-18 | 2006-02-08 | 上海微科集成电路有限公司 | 可扩展高基蒙哥马利模乘算法及其电路结构 |
CN1738238A (zh) * | 2005-09-08 | 2006-02-22 | 上海微科集成电路有限公司 | 高速可配置rsa加密算法及协处理器 |
US20080130870A1 (en) * | 2004-12-23 | 2008-06-05 | Oberthur Card Systems Sa | Data Processing Method And Related Device |
CN101464920A (zh) * | 2008-12-10 | 2009-06-24 | 清华大学 | 一种自动生成二元域ecc协处理器电路的设计方法 |
-
2010
- 2010-01-08 CN CN2010100226476A patent/CN102122241A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080130870A1 (en) * | 2004-12-23 | 2008-06-05 | Oberthur Card Systems Sa | Data Processing Method And Related Device |
CN1731345A (zh) * | 2005-08-18 | 2006-02-08 | 上海微科集成电路有限公司 | 可扩展高基蒙哥马利模乘算法及其电路结构 |
CN1738238A (zh) * | 2005-09-08 | 2006-02-22 | 上海微科集成电路有限公司 | 高速可配置rsa加密算法及协处理器 |
CN101464920A (zh) * | 2008-12-10 | 2009-06-24 | 清华大学 | 一种自动生成二元域ecc协处理器电路的设计方法 |
Non-Patent Citations (1)
Title |
---|
曹丹等: "可扩展的低成本双域模乘模除器算法及其VLSI实现", 《小型微型计算机***》 * |
Cited By (31)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9733938B2 (en) | 2013-01-23 | 2017-08-15 | International Business Machines Corporation | Vector checksum instruction |
US10877753B2 (en) | 2013-01-23 | 2020-12-29 | International Business Machines Corporation | Vector galois field multiply sum and accumulate instruction |
WO2014115047A1 (en) * | 2013-01-23 | 2014-07-31 | International Business Machines Corporation | Vector floating point test data class immediate instruction |
GB2525356A (en) * | 2013-01-23 | 2015-10-21 | Ibm | Vector floating point test data class immediate instruction |
US9740483B2 (en) | 2013-01-23 | 2017-08-22 | International Business Machines Corporation | Vector checksum instruction |
GB2525356B (en) * | 2013-01-23 | 2016-03-23 | Ibm | Vector floating point test data class immediate instruction |
US9436467B2 (en) | 2013-01-23 | 2016-09-06 | International Business Machines Corporation | Vector floating point test data class immediate instruction |
US9471308B2 (en) | 2013-01-23 | 2016-10-18 | International Business Machines Corporation | Vector floating point test data class immediate instruction |
US9471311B2 (en) | 2013-01-23 | 2016-10-18 | International Business Machines Corporation | Vector checksum instruction |
US9513906B2 (en) | 2013-01-23 | 2016-12-06 | International Business Machines Corporation | Vector checksum instruction |
US9703557B2 (en) | 2013-01-23 | 2017-07-11 | International Business Machines Corporation | Vector galois field multiply sum and accumulate instruction |
US10671389B2 (en) | 2013-01-23 | 2020-06-02 | International Business Machines Corporation | Vector floating point test data class immediate instruction |
US9715385B2 (en) | 2013-01-23 | 2017-07-25 | International Business Machines Corporation | Vector exception code |
US9727334B2 (en) | 2013-01-23 | 2017-08-08 | International Business Machines Corporation | Vector exception code |
CN104956319A (zh) * | 2013-01-23 | 2015-09-30 | 国际商业机器公司 | 向量浮点测试数据类立即指令 |
US9740482B2 (en) | 2013-01-23 | 2017-08-22 | International Business Machines Corporation | Vector generate mask instruction |
US10606589B2 (en) | 2013-01-23 | 2020-03-31 | International Business Machines Corporation | Vector checksum instruction |
US10338918B2 (en) | 2013-01-23 | 2019-07-02 | International Business Machines Corporation | Vector Galois Field Multiply Sum and Accumulate instruction |
US9778932B2 (en) | 2013-01-23 | 2017-10-03 | International Business Machines Corporation | Vector generate mask instruction |
US9804840B2 (en) | 2013-01-23 | 2017-10-31 | International Business Machines Corporation | Vector Galois Field Multiply Sum and Accumulate instruction |
US9823924B2 (en) | 2013-01-23 | 2017-11-21 | International Business Machines Corporation | Vector element rotate and insert under mask instruction |
US9823926B2 (en) | 2013-01-23 | 2017-11-21 | International Business Machines Corporation | Vector element rotate and insert under mask instruction |
CN104956319B (zh) * | 2013-01-23 | 2018-03-27 | 国际商业机器公司 | 向量浮点测试数据类立即指令 |
US10101998B2 (en) | 2013-01-23 | 2018-10-16 | International Business Machines Corporation | Vector checksum instruction |
US10146534B2 (en) | 2013-01-23 | 2018-12-04 | International Business Machines Corporation | Vector Galois field multiply sum and accumulate instruction |
US10203956B2 (en) | 2013-01-23 | 2019-02-12 | International Business Machines Corporation | Vector floating point test data class immediate instruction |
CN105094746A (zh) * | 2014-05-07 | 2015-11-25 | 北京万协通信息技术有限公司 | 一种椭圆曲线密码的点加/点倍的实现方法 |
CN104065478A (zh) * | 2014-06-18 | 2014-09-24 | 天津大学 | 基于格密码体系的多项式模乘协处理器 |
CN104065478B (zh) * | 2014-06-18 | 2017-07-14 | 天津大学 | 基于格密码体系的多项式模乘协处理器 |
CN107169380A (zh) * | 2017-05-19 | 2017-09-15 | 北京大学 | 一种rsa电路结构及rsa加密方法 |
CN107169380B (zh) * | 2017-05-19 | 2020-01-07 | 北京大学 | 一种rsa电路结构及rsa加密方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102122241A (zh) | 一种适用于素域和多项式域的模乘模除器 | |
CN112865954B (zh) | 用于Paillier解密的加速器、芯片及*** | |
CN100527072C (zh) | 用于执行蒙哥马利型模乘法的装置及方法 | |
CN103761068B (zh) | 优化的蒙哥马利模乘硬件 | |
US7835517B2 (en) | Encryption processing apparatus, encryption processing method, and computer program | |
JP2002297033A (ja) | 情報処理装置の演算方法および耐タンパー演算撹乱実装方式 | |
US8078661B2 (en) | Multiple-word multiplication-accumulation circuit and montgomery modular multiplication-accumulation circuit | |
CN106685663A (zh) | 一种环域上误差学习问题的加密方法及电路 | |
KR100442218B1 (ko) | 몽고메리의 알고리즘을 이용한 멱승 잉여 연산기 | |
US9449198B1 (en) | Prime field elliptic cryptography processor | |
CN105068784A (zh) | 基于蒙哥马利模乘的Tate对算法及其硬件结构 | |
CN101021777B (zh) | 基于除数(2n-1)的有效求模操作运算 | |
CN101371285A (zh) | 加密处理装置、加密处理方法及计算机程序 | |
CN107992283A (zh) | 一种基于降维实现有限域乘法的方法和装置 | |
CN109144472B (zh) | 一种二元扩域椭圆曲线的标量乘法及其实现电路 | |
Li et al. | Research in fast modular exponentiation algorithm based on FPGA | |
CN101971138A (zh) | 用于计算椭圆曲线上的点的倍数的设备和方法 | |
KR100457177B1 (ko) | 유한체 상의 두 원소의 곱을 구하는 직렬-병렬 곱셈기 | |
Baktır et al. | A state-of-the-art elliptic curve cryptographic processor operating in the frequency domain | |
CN107463354A (zh) | 一种面向ECC的双域并行度可变的Montgomery模乘电路 | |
CN101809638A (zh) | 运算方法和运算装置 | |
CN113467752B (zh) | 用于隐私计算的除法运算装置、数据处理***及方法 | |
CN103023659A (zh) | 一种参数位宽可扩展的ecc加密硬件装置 | |
JP3904421B2 (ja) | 剰余乗算演算装置 | |
Xie et al. | Low-complexity systolic multiplier for GF (2 m) using Toeplitz matrix-vector product method |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20110713 |