CN109814838A - 获取加解密运算中的中间结果组的方法、硬件装置和系统 - Google Patents

获取加解密运算中的中间结果组的方法、硬件装置和系统 Download PDF

Info

Publication number
CN109814838A
CN109814838A CN201910245685.9A CN201910245685A CN109814838A CN 109814838 A CN109814838 A CN 109814838A CN 201910245685 A CN201910245685 A CN 201910245685A CN 109814838 A CN109814838 A CN 109814838A
Authority
CN
China
Prior art keywords
data
intermediate result
output
result
multiplier
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.)
Granted
Application number
CN201910245685.9A
Other languages
English (en)
Other versions
CN109814838B (zh
Inventor
杨帆
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Guizhou Huaxintong Semiconductor Technology Co Ltd
Original Assignee
Guizhou Huaxintong Semiconductor Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Guizhou Huaxintong Semiconductor Technology Co Ltd filed Critical Guizhou Huaxintong Semiconductor Technology Co Ltd
Priority to CN201910245685.9A priority Critical patent/CN109814838B/zh
Publication of CN109814838A publication Critical patent/CN109814838A/zh
Application granted granted Critical
Publication of CN109814838B publication Critical patent/CN109814838B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Complex Calculations (AREA)

Abstract

本公开公开了一种获取加解密运算中的中间结果组的方法、硬件装置和系统。该硬件装置包括:双口随机存取存储器、移位输入部件和乘加器。该硬件装置在乘加器和双口随机存取存储器之间设置移位输入部件,从而缩短了该硬件装置的关键路径的长度,提高了该硬件装置的综合频率。

Description

获取加解密运算中的中间结果组的方法、硬件装置和系统
技术领域
本公开涉及一种获取加解密运算中的中间结果组的方法、硬件装置和系统。
背景技术
在现在的电子通信和电子商务中,通常需要使用加解密技术对明文信息进行加密,将明文信息转变为难以读取的密文内容。而获知密钥的特定对象则可以经由解密过程将密文还原为明文内容。在加解密领域,RSA(Rivest-Shamir-Adleman)加密算法和ECC(Elliptic curve cryptography,椭圆曲线加密)算法已经被广泛应用。通常,RSA加密算法和ECC算法均需要使用蒙哥马利(Montgomery)幂模运算来优化加解密运算的时间。同时,由于蒙哥马利幂模运算的运算步骤通常可以使用硬件装置来实现,从而进一步优化加解密运算的时间。
发明内容
鉴于上述情况,本公开提供了一种获取加解密运算中的中间结果组的方法以及硬件装置。
根据本公开的至少一个实施例提供了一种用于获取加解密运算中的中间结果组的硬件装置,其包括:双口随机存取存储器,被配置为存储与该加解密运算相关联一个或多个数据;移位输入部件,与该双口随机存取存储器连接,该移位输入部件被配置为从双口随机存取存储器中所存储的一个或多个数据中选择第一数据和第二数据,对第一数据和第二数据分别进行移位运算以获取并存储第一输入数据和第二输入数据;以及乘加器,与该移位输入部件连接,该乘加器被配置为对第一输入数据和第二输入数据两者进行乘法运算和加法运算,以获取并存储第一中间结果和第二中间结果作为该中间结果组。
根据本公开的至少一个实施例提供了一种获取加解密运算中的中间结果组的方法,该方法由获取加解密运算中的中间结果组的硬件装置执行,该获取加解密运算中的中间结果组的硬件装置包括双口随机存取存储器、移位输入部件和乘加器,该方法包括:第一步骤:该双口随机存取存储器存储与该加密运算相关联的一个或多个数据;第二步骤:该移位输入部件从双口随机存取存储器中所存储的一个或多个数据中选择第一数据和第二数据,对第一数据和第二数据分别进行移位运算以获取并存储第一输入数据和第二输入数据;第三步骤:该乘加器对第一输入数据和第二输入数据进行乘法运算和加法运算,以获取并存储第一中间结果和第二中间结果作为中间结果组。
根据本公开的至少一个实施例提供了一种获取加解密运算中的中间结果组的系统,包括:双口随机存取存储器、移位输入部件、和乘加器,其被配置为执行上述方法。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本公开的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获取其他相关的附图。
图1A是示出一种获取加解密运算中的中间结果组的硬件装置的结构框图。
图1B和图1C是示出一种获取加解密运算中的中间结果组的方法的流程图。
图2A是示出根据本公开的一个或多个实施例的获取加解密运算中的中间结果组的硬件装置的示意图。
图2B是示出根据本公开的一个或多个实施例的获取加解密运算中的中间结果组的硬件装置的框图。
图3A是示出根据本公开的一个或多个实施例的获取加解密运算中的中间结果组的硬件装置的移位输入部件的示意图。
图3B是示出根据本公开的一个或多个实施例的获取加解密运算中的中间结果组的硬件装置的移位输入部件的框图。
图4A是示出根据本公开的一个或多个实施例的获取加解密运算中的中间结果组的硬件装置的乘加器的示意图。
图4B是示出根据本公开的一个或多个实施例的获取加解密运算中的中间结果组的硬件装置的乘加器的框图。
图5A是示出根据本公开的一个或多个实施例的获取加解密运算中的中间结果组的硬件装置的高位输出加法部件的示意图。
图5B是示出根据本公开的一个或多个实施例的获取加解密运算中的中间结果组的硬件装置的高位输出加法部件的框图。
图6A是示出根据本公开的一个或多个实施例的获取加解密运算中的中间结果组的硬件装置的低位输出加法部件的示意图。
图6B是示出根据本公开的一个或多个实施例的获取加解密运算中的中间结果组的硬件装置的高位输出加法部件的框图。
图7是示出根据本公开的一个或多个实施例的获取加解密运算中的中间结果组的硬件装置的又一示意图。
图8是示出根据本公开的一个或多个实施例的一种获取加解密运算中的中间结果组的方法的流程图。
图9是示出根据本公开的一个或多个实施例的一种获取加解密运算中的中间结果组的方法的第二步骤的流程图。
图10是示出根据本公开的一个或多个实施例的一种获取加解密运算中的中间结果组的方法的第三步骤的流程图。
图11是示出根据本公开的一个或多个实施例的执行获取加解密运算中的中间结果组的方法的流程图。
图12是示出根据本公开的一个或多个实施例的执行获取加解密运算中的中间结果组的方法的又一流程图。
图13A和图13B是示出根据本公开的一个或多个实施例的在第四时段内执行获取加解密运算中的中间结果组的方法的流程图。
图14A和图14B是示出根据本公开的一个或多个实施例的在第五时段内执行获取加解密运算中的中间结果组的方法的流程图。
图15A和图15B是示出根据本公开的一个或多个实施例的在第六时段内执行获取加解密运算中的中间结果组的方法的流程图。
图16A和图16B是示出根据本公开的一个或多个实施例的在第七时段内执行获取加解密运算中的中间结果组的方法的流程图。
图17是示出根据本公开的一个或多个实施例的一种获取加解密运算中的中间结果组的方法的又一流程图。
图18是示出根据本公开的一个或多个实施例的一种获取加解密运算中的中间结果组的方法的第四步骤的流程图。
图19是示出根据本公开的一个或多个实施例的一种获取加解密运算中的中间结果组的方法的第五步骤的流程图。
图20是示出根据本公开的一个或多个实施例的一种获取加解密运算中的中间结果组的方法的第四步骤的又一流程图。
图21是示出根据本公开的一个或多个实施例的一种获取加解密运算中的中间结果组的方法的第五步骤的又一流程图。
具体实施方式
为了使得本公开的目的、技术方案和优点更为明显,下面将参照图详细描述根据本公开的示例实施例。显然,所描述的实施例仅仅是本公开的一部分实施例,而不是本公开的全部实施例,应理解,本公开不受这里描述的示例实施例的限制。基于本公开中描述的本公开实施例,本领域技术人员在没有付出创造性劳动的情况下所得到的所有其它实施例都应落入本公开的保护范围之内。需要注意的是,在本说明书和图中,具有基本上相同步骤和元素用相同的图标记来表示,且对这些步骤和元素的重复描述将被省略。
I.加解密计算中所涉及的蒙哥马利幂模运算
根据示例性实施例,在典型的RSA加解密算法中,存在着对一个大整数X的e次方进行模净的运算步骤,也即是求解Xe%M的值,这个运算也被称为模幂运算。模幂运算通常比较复杂,因此,需要将模幂运算进行进一步的转化,以便于硬件进行计算。通常情况下,是将模幂运算转换为模乘运算,并采取蒙哥马利模乘的方法进一步减少模净的次数以对模乘运算进行优化。
类似地,根据示例性实施例,在典型的ECC加解密算法中,也存在着“点加”和“点乘”这样的对一个大整数进行复杂运算的步骤。具体地,点加运算包括对符合椭圆曲线方程y2=x3+ax+b的第一点(x1,y1)和第二点(x2,y2)进行点加运算以获取符合该椭圆曲线方程的第三点的坐标(x3,y3),其采用的点加运算公式为:x3=((y2-y1)/(x2-x1))2-x1-x2和y3=((y2-y1)/(x2-x1))(x1-x3)-y3。点倍运算则包括对第一点(x1,y1)和第二点(x2,y2)进行点倍运算以获取第三点的坐标(x3,y3),其采用的点倍运算公式为:x3=((3x1 2+a)/(2y1))2-2x1和y3=((3x1 2+a)/(x1-x3))-y1。上述公式中,加法运算是以N为模的模加运算,减法运算是以N为模的模减运算,乘法运算是以N为模的模乘运算,而除法运算是以N为模的模逆运算,a和b是小于N的常数。对已知数x进行模逆运算是指求另一数y可使得(x*y)%N=1,此时,可以称x是y以N为模的模逆,y是x以N为模的模逆。
由于进行模逆运算非常耗时,而根据ECC加解密的标准,通常会进行几千个点加或点倍运算,因此需要减少进行模逆运算的次数。为了简化ECC加解密运算中点加和点倍运算中的运算复杂度,通常会将上述各个点的坐标转换为修正雅各比(Modified Jacobian)坐标,并将点加运算和点倍运算转换为修正雅各比坐标系下的点加运算和点倍运算。转换后的点加运算和点倍运算中,只有在将所求出的最后结果从修正雅各比坐标转换为普通坐标的时才需要进行模逆运算,从而大大的减少了ECC加解密运算中的运算复杂度。
由此可知,不论是RSA加解密算法还是ECC加解密算法,均涉及对两个大整数进行模乘运算和/或模加运算。一个能够计算res=h*a*b+g*c的硬件装置则可以满足RSA加解密算法、ECC加解密算法以及其他加解密算法中可以能涉及的大部分的模乘运算和/或模加运算的需求,其中,a、b、c是小于N的整数,h的取值范围包括但不限于{1,-1,-2,3,2},g的取值范围包括但不限于{-8,-1,1,12,8}。
此外,由于模加、模减、模乘、模逆和模幂的运算均涉及模净的运算,而模净运算则会消耗大量的运算资源。因此提出了一种利用蒙哥马利算法以减少在一系列模加、模减、模乘、模逆和模幂运算中模净运算的次数,从而可以利用蒙哥马利算法可以进一步简化计算难度。
可选地,公式res=h*a*b+g*c主要涉及模乘和模加的计算,现以蒙哥马利算法中的模乘的计算为例,说明一个能够计算该公式的硬件装置可能涉及的运算步骤以及执行这些运算步骤的硬件构件。
为更方便的描述本公开的构思,将各种加解密算法中各个涉及模加、模减、模乘、模逆和模幂的运算中各个步骤中所获取的运算结果称为中间结果。由于加解密算法中的中间结果可能有多个,因此,将中间结果的集合称为中间结果组。
要计算res=h*a*b+g*c,至少需要先计算a与b相模乘的结果。假设需利用蒙哥马利模乘计算p=a*b%N,其中,类似的a和b是小于N的整数,N为模数。在加解密计算中,a、b和N均为较大的整数,以提高实际应用中加解密算法的安全性。计算p=a*b%N的具体步骤包括但不限于:
步骤一:计算aM=a*R%N和bM=b*R%N。其中,R=2n,n是使得2n>N的最小整数。
步骤二:计算pM=(aM*bM+k*N)*R-1。其中,k是使得(aM*bM+k*N)的低n位都为0的最小整数。通常情况下,k可以由MC*aM*bM后再取低n位得到,MC是使得MC*N的低n位全为1的整数。
步骤三:计算pM=pM%N。
步骤四:如果pM不是一系列模乘运算中的最后一个结果,则返回至步骤三。如果pM是一系列模乘运算中的最后一个结果,则计算p=(pM*1+k*N)*R-1%N。
可选地,步骤一中,aM和bM分别为a和b转入蒙哥马利域后对应的数。每一个小于N的整数均可以与一个蒙哥马利域中对应的数相互推算。加解密运算中,例如RSA和ECC运算中,大多数运算均可以使用蒙哥马利域中的数进行计算,然后再将运算结果逆变换为普通域中的数。
可选地,步骤三中,如果aM、bM、k和N均为n位宽的数,那么可以推算aM*bM的位宽为2n,k*N的位宽为2n,由此(aM*bM+k*N)的位宽为2n+1,而pM的位宽是n+1。在实际运算中,pM可能并不是一系列模乘运算中的最终结果,并且可能作为中间结果参与到下一次模乘运算中去,例如,替换aM或bM。在实际的硬件电路中,数字电路模乘器的大小是固定的,不能接受乘数多一个比特,因此需要对pM进行一个模净运算,也就是步骤三中的pM=pM%N,以确保pM的位宽在n以内。
可选地,步骤四中,如果pM是一系列模乘运算中的最后一个,那么需要将pM从蒙哥马利域中转换到普通域中,以获取最终的运算结果p。根据上述的公式,可知pM与p的对应关系为pM=p*R%N。因此,可以推导出,p=(pM*1+k*N)*R-1%N(也即是,输入是pM和1的蒙哥马利模乘的运算结果)。
此外,在一系列蒙哥马利模乘运算中,通常仅需要在第一个模乘运算或引入其他参数进行模乘运算时需要进行步骤一,并仅在最后一个模乘运算时需要进行步骤四。
类似地,还可以利用该方法计算res=h*a*b+g*c涉及的其他数据的运算,例如,g*c和h*(a*b)等。
II.通常的用于获取加解密运算中的中间结果组的硬件装置
现参考图1A-图1C,描述一种通常的获取加解密运算中的中间结果组的硬件装置,以及利用该硬件装置来执行上述加解密运算中的核心运算的方法,例如RSA和ECC运算中的蒙哥马利模乘运算。
图1A是示出一种获取加解密运算中的中间结果组的硬件装置100的结构框图。图1B和图1C是示出一种获取加解密运算中的中间结果组的方法的流程图。
参考图1A,图1A所示的获取加解密运算中的中间结果组的硬件装置100可以包括双口随机存取存储器101、寄存器A 102、寄存器B 103、多路器104、乘法器105、第一移位选择部件106、第二移位选择部件107、第三移位选择部件108、第三移位选择部件108、第一加法109、第二加法110、寄存器D 111和寄存器C 112。
其中,寄存器A 102、寄存器B 103、寄存器C 112、寄存器D 111的输入位宽都是w比特,乘法器105的两个输入端的位宽是w比特,而输出端的位宽为2w比特。
下面以硬件装置100为例,参考图1B和图1C说明如何利用该硬件装置100通过蒙哥马利算法计算加解密算法中的某一可能的中间结果pM。根据上述实施例,pM=(aM*bM+k*N)*R-1。硬件装置100可以执行以下步骤:
步骤S101:从双口随机存取存储器101的两个接口中同时读取aM和bM,并将aM和bM分别存储在寄存器A 102和寄存器B 103中。
步骤S102:多路器104选择寄存器B 103中的数据bM发送到乘法器105,寄存器A102也将其存储的数据aM发送到乘法器105,乘法器计算中间结果product1=aM*bM。
步骤S103:第二移位选择部件107接收乘法器计算的结果product1,并通过第二移位选择部件中的移位器组对结果product1进行移位计算以获取乘法结果集合{product1*2t|t∈Z},通过第二移位选择部件中的多路器从乘法结果集合中选取一个乘法结果product1*2t,使得乘法结果product1*2t的有效数据product1位于多路器的输出部分的中间部分。
步骤S104:将product1的高一部分数据product1_H输出到第一加法器109,将product1的低一部分数据product1_L输出到第二加法器110,同时从双口随机存取存储器101中读取MC存储在寄存器A 102中。
步骤S105:第一加法器109将product1_H与零相加,然后将product1_H输出到寄存器D 111,第二加法器110将product1_L与零相加,然后将product1_L输出到寄存器C 112。
步骤S106:多路器104选择寄存器C 113中的数据product1_L发送到乘法器105,寄存器A 102也将其存储的数据MC发送到乘法器105,乘法器计算中间结果product2=MC*product1_L。
步骤S107:第二移位选择部件107接收乘法器计算的结果product2,并通过第二移位选择部件中的移位器组对结果product2进行移位计算以获取乘法结果集合{product2*2t|t∈Z},通过第二移位选择部件中的多路器从乘法结果集合中选取一个乘法结果product2*2t,使得乘法结果product2*2t的有效数据product2位于多路器的输出部分的中间部分。
步骤S108:将product2的高一部分数据product2_H抛弃,将product2的低一部分数据product2_L输出到第二加法器110。此时product2_L为k。
步骤S109:第二加法器110将product2_L与零相加,然后将product2_L输出到寄存器C 112,同时从双口随机存取存储器101中读取N存储在寄存器A 102中。
步骤S110:多路器104选择寄存器C 113中的数据product2_L以将其发送到乘法器105,寄存器A 102也将其存储的数据N发送到乘法器105,乘法器计算中间结果product3=N*product2_L。
步骤S111:第二移位选择部件107接收乘法器计算的结果product3,并通过第二移位选择部件中的移位器组对结果product3进行移位计算以获取乘法结果集合{product3*2t|t∈Z},通过第二移位选择部件中的多路器从乘法结果集合中选取一个乘法结果product3*2t,使得乘法结果product3*2t的有效数据product3位于多路器的输出部分的中间部分。
步骤S112:将product3的低一部分数据product3_L抛弃,将product3的高一部分数据product3_H输出到第一加法器109。
步骤S113:第一移位选择部件选择寄存器D 111中原始存储的product1_H,并将其输出至第一加法器109,第一加法器计算sum=product3_H+product1_H。
步骤S114:第一加法器109将sum输出至寄存器D 111。
步骤S115中得到的结果即为所求的pM,具体地,pM=(aM*bM+k*N)*R-1
如果数据aM、bM、MC的位宽为小于w比特的w’,则aM*bM的位宽将为2w’。因此乘法器105的输出结果的前2w-2w’位数据将为0。乘法器105的输出结果并非居中,这样会导致后续的无法顺利完成,也不便于硬件处理。因此需要将乘法器105的输出结果通过第二移位部件107左移(w-w’)位,这样乘法器的输出结果的二进制表示的前后(w-w’)位数据都为零,而乘法器105的输出结果的有效数据(例如aM*bM)将位于乘法器输出结果的中间2w’位。这样才能将乘法器的输出结果的高一部分数据发送到第一加法器109,并将乘法器的输出结果的低一部分数据发送到第二加法器110。
上述硬件装置100还可以计算res=(a*b)*R-1%N+c1。此时需要将如上述方法所计算的中间结果(a*b)%N先存入双口随机存取存储器101,再由另外的硬件装置从双口随机存取存储器101中读出(a*b)%N和c1,再通过第一加法器109和/或第二加法器110做相加运算。
上述硬件装置通过在乘法器105和第一加法器109以及第二加法器110之间设置了第二移位选择部件107,实现了将乘法器105的输出结果居中的功能。
然而,这样的硬件装置100却使得蒙哥马利模乘的运算过程中的核心运算所需的乘法器-加法器关键路径太长,第一加法器109和第二加法器110需要等待第二移位选择部件107运算之后,才能对数据进行运算。
具体地,上述的关键路径指在数字电路中组合逻辑中延迟最长的路径。数字电路的一个功能模块中所有的寄存器共享同一个时钟信号,时钟信号是一个以一定频率周期变化的信号,每一个周期中有一个瞬间被称为上升沿。寄存器在每一个时钟上升沿,把寄存器内的数字更新为寄存器输入端的数字,其它所有时间内都保持不变化,直到下一个时钟上升沿来到。两个寄存器之间的电路又可称为组合逻辑,例如,上述的包括乘法器和加法器的路径。寄存器为组合逻辑提供输入,而另一个寄存器或相同的寄存器可以接收组合逻辑输出。在数字电路中,组合逻辑必须在寄存器保持不变的这段时间内把计算完成,这样下一个时钟上升沿来到时,为组合逻辑提供输入的寄存器才能更新为下一个要输入的数据,而接受组合逻辑输出的寄存器才能存储组合逻辑的计算的结果。如果在这样的一个时钟期间,一旦数据没有被寄存器锁存,该数据就会消失,从而导致运算失败。
在上述电路中,蒙哥马利模乘的运算过程中的核心运算所需的乘法器-加法器路径是整个电路中的组合逻辑中耗时最长的一条路径,也被称为关键路径。
然而参考图1A,在加法器和乘法器这样的计算路径之间需要设置第二移位选择部件107来完成将乘法器105的输出结果居中的功能。这使得在一个时钟的时段内要进行的操作变得复杂,使得乘法器-移位部件-加法器这一关键路径过长,从而需要设定较长的时钟周期来完成这一关键路径的运算。导致整个硬件电路的时钟频率不高。
因此需要提供一种能够进一步提高乘法器-加法器的综合频率的硬件装置。需要指出的是,上述的综合是数字电路设计的一个步骤,而上述的综合频率是指综合后让关键路径也能正常计算完成的最高时钟频率。
III.用于获取加解密运算中的中间结果组的硬件装置
下面参考图2A和图2B进一步描述可以替换上述用于获取加解密运算中的中间结果组的硬件装置100的一些实施例。这些实施例可以缩短蒙哥马利模乘的核心运算所需的乘法器-加法器关键路径,提高乘法器-加法器的综合频率。
图2A是示出根据本公开的一个或多个实施例的获取加解密运算中的中间结果组的硬件装置200的示意图。图2B是示出根据本公开的一个或多个实施例的获取加解密运算中的中间结果组的硬件装置200的框图。
参考图2A和图2B,图2B所示的获取加解密运算中的中间结果组的硬件装置200可以包括图2A和图2B中所示的双口随机存取存储器201、移位输入部件202和乘加器203。
具体地,根据根据本公开的一个或多个实施例的获取加解密运算中的中间结果组的硬件装置200中的各个部件的配置如下。
双口随机存取存储器201,可以被配置为存储与所述加解密运算相关联一个或多个数据。
移位输入部件202,与所述双口随机存取存储器201连接。移位输入部件202可以被配置为从双口随机存取存储器201中所存储的一个或多个数据中选择第一数据和第二数据,对第一数据和第二数据分别进行移位运算以获取并存储第一输入数据和第二输入数据。
乘加器203,与所述移位输入部件202连接。乘加器203可以被配置为对第一输入数据和第二输入数据两者进行乘法运算和加法运算,以获取并存储第一中间结果和第二中间结果作为所述中间结果组。
参考图2A,双口随机存取存储器201中可以存储上述的aM、bM、MC和N等数据,这些数据均可以为上述加解密运算相关联一个或多个数据。
移位输入部件202可以根据蒙哥马利模乘运算在某一运算周期的需要从上述数据中选择第一数据和第二数据,例如aM和bM、MC、N等。
例如,在进行pM=(aM*bM+k*N)*R-1中的aM*bM时,通过上述硬件装置200可以执行下列步骤。
步骤S201:从双口随机存取存储器201同时读出第一数据aM和第二数据bM。
步骤S202:移位输入部件202接收第一数据aM和第二数据bM,并分别对第一数据aM和第二数据bM进行移位运算,并从移位运算后的结果中选择第一输入数据aM*2t1和第二输入数据bM*2t2
步骤S203:乘加器203中的乘法器将第一输入数据和第二输入数据相乘,从而得到乘法结果product1*2t1+t2=aM*bM*2t1+t2
此时,乘法结果的有效数据product1可以位于乘法器的输出结果的中间数据位。例如,假设数据aM和bM的位宽为小于乘加器的输入位宽w比特的w’比特,则aM*bM的位宽将为2w’。通过使得t1+t2=w-w’,可以使得乘加器203的乘法器的输出结果的二进制表示的前后(w-w’)位数据都为零,而乘加器203的乘法器的输出结果的有效数据(例如aM*bM)将位于乘法器输出结果的中间2w’位。
步骤S204:乘加器203中的加法器可以从乘加器203中的乘法器中直接获取乘法结果的有效数据product1的高一部分数据product1_H和乘法结果的有效数据product1的低一部分数据product1_L。乘加器203中的加法器将product1_H与零相加则可以获取更新后的第一中间结果product1_H。乘加器203中的加法器将低一部分数据product1_L与零相加则可以获取更新后的第二中间结果product1_L。
例如,假设乘法器401的输出结果为256位的二进制数据,则可以将前128位的数据作为高位乘法结果product1_H,而将后128位的数据作为低位乘法结果product1_L。
图2A和2B中所示硬件装置200与图1A中所示的硬件装置100相比,去掉了在乘法器105和第一加法器109以及第二加法器110之间的第二移位选择部件107。同时使用移位输入部件202对第一数据(例如,aM)和第二数据(例如,bM)进行移位运算以得到第一输入数据和第二输入数据,从而保证第一输入数据和第二输入数据在经过乘法器的运算之后,可以直接位于乘法器输出结果的中间数据位,便于后续加法器的运算。同时,将乘法器105、第一加法器109和第二加法器110合并为一个乘加器203,从而使得蒙哥马利模乘的核心运算所需的乘法器-加法器关键路径缩短,提高了该硬件装置的综合频率。
根据图2A和2B所示的硬件装置200,可以将必须与乘法同一周期完成的加法(例如,图1C中的步骤S110至S114)提取出来,仅使用一个乘加器来进行计算。这样便可以在与硬件装置100相比,可以提升关键运算器件(例如,乘加器)的综合频率。
下面参考图3A和图3B进一步描述可以替换硬件装置200的移位输入部件202的一些实施例。
图3A是示出根据本公开的一个或多个实施例的获取加解密运算中的中间结果组的硬件装置200的移位输入部件202的示意图。图3B是示出根据本公开的一个或多个实施例的获取加解密运算中的中间结果组的硬件装置200的移位输入部件202的框图。
参考图3A和图3B,图3B所示的获取加解密运算中的中间结果组的硬件装置200的移位输入部件202可以包括图3A和图3B中所示第一移位器组301、第二移位器组302、第一输入多路器303、第二输入多路器304、寄存器A305和寄存器B306。
参考图3A和3B,上述的移位输入部件202中的各个部件可以被配置如下。
第一移位器组301可以与双口随机存取存储器201连接。第一移位器组301可以被配置为对双口随机存取存储器中所存储的一个或多个数据中的第一数据进行移位运算以获取第一移位数据集合。例如,第一移位数据集合可以包括将第一数据左移i1位而得到的数据集合,其中i1为大于0的整数。
第一输入多路器303可以与第一移位器组301连接。该第一输入多路器303可以被配置为从第一移位数据集合中选择第一输入数据。
寄存器A305可以与第一输入多路器303连接。寄存器A 305可以被配置为接收并存储第一输入数据。
第二移位器组302可以与双口随机存取存储器201连接。第二移位器组302可以被配置对双口随机存取存储器中所存储的一个或多个数据中的第二数据进行移位运算以获取第二移位数据集合。例如,第二移位数据集合可以包括将第二数据左移i2位而得到的数据集合,其中i2为大于0的整数。
第二输入多路器304可以与第二移位器组302和乘加器203连接。第二输入多路器304可以被配置为从第二移位数据集合和该中间结果组中选择并输出第二输入数据。
寄存器B 306可以与第二输入多路器304连接,该寄存器B 306可以被配置为接收并存储第二输入数据。
参考图3A,移位输入部件202可以根据蒙哥马利模乘运算在某一运算周期的需要从上述数据中选择第一数据和第二数据,例如aM和bM、MC、N等。
假设第一数据是aM,第二数据是bM。
第一移位器组301在接收到第一数据aM后可以对其进行移位运算,以获取第一移位数据集合(Z表示整数),并可以通过第一输入多路器303从中选择第一输入数据然后可以将第一输入数据 保存在寄存器A 305中。
类似地,通过第二移位器组302、第二输入多路器304和寄存器B306,可以将第二数据bM转换为第二输入数据
通过这样的方式,可以实现上述的步骤S202。利用如图3A和图3B所示移位输入部件202,可以实现对第一数据(例如,aM)和第二数据(例如,bM)进行移位运算从而得到第一输入数据(例如,)和第二输入数据(例如,)。进而可以实现第一输入数据和第二输入数据在经过乘法器的运算之后,可以直接位于乘法器输出结果的中间位置,便于后续加法器的运算。
下面参考图4A和图4B进一步描述可以替换硬件装置200的乘加器203的一些实施例。
图4A是示出根据本公开的一个或多个实施例的获取加解密运算中的中间结果组的硬件装置200的乘加器203的示意图。图4B是示出根据本公开的一个或多个实施例的获取加解密运算中的中间结果组的硬件装置200的乘加器203的框图。
参考图4A和图4B,图4B所示的获取加解密运算中的中间结果组的硬件装置200的乘加器203可以包括图4A和图4B中所示的乘法器401、高位加法器402、低位加法器403、第一中间结果多路器404、第二中间结果多路器405、寄存器D 406和寄存器C 407。
参考图4A和4B,乘加器203中的各个部件可以被配置如下。
乘法器401可以与寄存器A 305和寄存器B 306连接。乘法器401可以被配置为将第一输入数据与第二输入数据相乘以获取乘法结果。其中该乘法结果的高一部分数据为高位乘法结果。乘法结果的低一部分数据为低位乘法结果。
第二中间结果多路器405可以与寄存器D 406和寄存器C 407连接。第二中间结果多路器405可以被配置为选择存储在寄存器D 406中的第一中间结果、存储在寄存器C 407中的第二中间结果、和零中的至少一个,并将其输出至低位加法器403。
低位加法器403可以与乘法器401和第二输入多路器连接,低位加法器403可以被配置为接收低位乘法结果和经第二中间结果多路器405选择的数据,并对低位乘法结果和经第二中间结果多路器405选择的数据进行加法运算,以获取更新后的第二中间结果,并将更新后的第二中间结果输入至第二输入多路器304,并将该更新后的第二中间结果的进位输入至高位加法器402。
寄存器C 407可以与低位加法器403连接。寄存器C 407可以被配置为接收并存储更新后的第二中间结果来替换该中间结果组中的第二数据。
第一中间结果多路器404可以与寄存器D 406连接。第一中间结果多路器404可以被配置为将在存储在寄存器D 406中的第一中间结果和零中选择一个数据,并将该数据输入至高位加法器402。
高位加法器402可以与乘法器401和第一中间结果多路器404连接。高位加法器402可以被配置为接收高位乘法结果、第二中间结果中的进位、经第一中间结果多路器404选择的数据,并对高位乘法结果、第二中间结果中的进位、经第一中间结果多路器404选择的数据进行加法运算以获取更新后的第一中间结果。
寄存器D 406可以与高位加法器402连接。寄存器D 406可以被配置为接收更新后的第一中间结果来替换之前存储的第一中间结果。
参考图4A,乘法器401可以根据蒙哥马利模乘运算在某一运算周期的需要接收第一输入数据和第二输入数据,例如MC、N等。
假设第一输入数据是第二输入数据是
乘法器401将第一输入数据和第二输入数据相乘,从而得到乘法结果此时,乘法结果的有效数据product1将位于乘法器的输出结果的中间。假设数据aM和bM的位宽为小于乘加器的输入位宽w比特的w’比特,则aM*bM的位宽将为2w’。通过使得i1+i2=w-w’,可以使得乘法器401的输出结果的二进制表示的前后(w-w’)位数据都为零,而乘法器401的输出结果的有效数据(例如product1)将位于乘法器输出结果的中间2w’位。
通过这样的方式,可以实现上述的步骤S203。由于乘法器401的输出结果已经位于中间的2w’位,乘法器401与高位加法器402、低位加法器403之间的通路就不再需要移位器。高位加法器402、低位加法器403可以直接对乘法器401的运算结果进行运算,从而缩短了乘加器这一关键路径的长度,大大提高了关键运算部件乘加器203的运算效率。
高位加法器402可以从乘法器401中直接获取乘法结果的有效数据product1的高一部分数据product1_H(例如,图4A中的高位乘法结果),同时低位乘法器403可以从乘法器401中直接获取乘法结果的有效数据product1的低一部分数据product1_L(例如,图4A中的低位乘法结果)。例如,假设乘法结果是一个256位的数据,则product1_H可以为的二进制表示的前128位数据,product1_L可以为的二进制表示的后128位数据。
此时,由于此刻仅需要计算的是product1=aM*bM,因而暂时不需要对上述结果进行加法运算。第一中间结果多路器404将在寄存器D 406中存储的数据和零之间选择零与输入至高位加法器402,从而使得高位加法器402执行将高位乘法结果product1_H和零相加的运算,从而得出第一中间结果product1_H。寄存器D 406将接收并存储高位乘法结果product1_H作为第一中间结果。第二中间结果也可以通过类似的步骤,从低位乘法结果product1_L经过低位加法器403、第二中间结果多路器405的运算,被存储至寄存器C407。
通过这样的方式,可以实现上述的步骤S204。
通过上述结构,本公开的一个或多个实施例的硬件装置200将原本位于乘法器输出处的移位选择输入部件移到了寄存器A和寄存器B处。从而无论数据位宽如何变化,都可以通过在进入乘法器运算之前,通过在寄存器A和寄存器B的输入处利用移位器组向左移位,使得乘法器输出的有效数据所使用的数据位始终是最中央的部分的数据位(也即是居中对齐)。由此,在乘法器-加法器的路径上去掉了多路器。同时与硬件装置100相比,硬件装置200还将原本位于寄存器B与乘法器之间的多路器104移除,而直接利用寄存器B输入处的第二移位器组302来替代多路器104的功能。从而可以使得寄存器A和寄存器B的输出可以直接连接至乘加器,进一步提高了硬件装置200的综合频率。
由此,可以通过上述的硬件装置200来执行必须与乘法运算在同一周期执行的加法运算。同时,该硬件装置200还通过寄存器C 407和寄存器D 408已经存储了可用于仅执行加法运算(例如,不需与乘法运算在同一周期执行的加法运算)的中间结果组(例如,第一中间结果和第二中间结果),以便于对中间结果组进行下一步的运算。
如图5A和图5B所示,为了对中间结果结果组进行下一步的运算,硬件装置200还可以包括高位输出加法部件500。
下面通过图5A和图5B进一步描述硬件装置200的高位输出加法部件500的一些实施例。
图5A是示出根据本公开的一个或多个实施例的获取加解密运算中的中间结果组的硬件装置200的高位输出加法部件500的示意图。图5B是示出根据本公开的一个或多个实施例的获取加解密运算中的中间结果组的硬件装置200的高位输出加法部件500的框图。
参考图5A和图5B,图5B所示的获取加解密运算中的中间结果组的硬件装置200的高位输出加法部件500可以被配置为从寄存器D 406中接收第一中间结果,并对第一中间结果进行加法运算。
高位输出加法部件500可以包括图5A和图5B中所示的高位加法移位器组501、高位加法多路器组502、高位输出加法器503、高位输出加法结果多路器504和寄存器D1 505。
参考图5A和5B,高位输出加法部件500中的各个部件可以被配置如下。
高位输出加法器503可以与寄存器D 406连接,并可以被配置为接收寄存器D 406中存储的第一中间结果,并对第一中间结果进行加法运算以获取第一输出结果。
高位输出加法结果多路器504可以与高位输出加法器503连接,高位输出加法结果多路器504可以被配置为选择第一输出结果和双口随机存取存储器中的数据,并将其作为高位所选输出数据输出至寄存器D1 505。
寄存器D1 505可以与高位输出加法结果多路器504连接,并可以被配置为接收并存储高位所选输出数据,并将其输出至双口随机存取存储器和高位加法移位器组501。
高位加法移位器组501可以与寄存器D1 505连接,高位加法移位器组501可以被配置为从寄存器D1 505中接收高位所选输出数据,并对高位所选输出数据进行移位计算以得到高位移位输出数据。
高位加法多路器组502可以与高位加法移位器组501连接,高位加法多路器组502可以被配置为选择高位移位输出数据和零之中的一个数据,并将其输出至高位输出加法器503。
其中,高位输出加法器503对第一中间结果进行加法运算以获取第一输出结果是通过将第一中间结果与经过高位加法多路器组502组选择的数据相加以获取第一输出结果来实现的。
假设需要计算第一中间结果加上一个数,例如计算res1=(aM[n-1:0]*bM[n-1:0]+k[n-1:0]*N[n-1:0])*R-1+C1。
参考图5A,可以从双口随机存取存储器201中读取出C1。高位输出加法结果多路器504在第一输出结果和双口随机存取存储器201中存储的C1中选择C1,并将其作为高位所选数据输出到寄存器D1 505。
寄存器D1 505将该数据C1输出到高位加法移位器组501,再由高位加法移位器组501生成高位移位输出数据集合{C1*2t3|t3∈Z}。高位加法多路器组502从高位移位输出数据集合{C1*2t3|t3∈Z}中选取合适的数C1*2t3,并将其输出值高位输出加法器503。在计算res1=(aM[n-1:0]*bM[n-1:0]+k[n-1:0]*N[n-1:0])*R-1+C1的情况下,t3=0,C1*2t3即为C1。
由于第一中间结果可以为(aM[n-1:0]*bM[n-1:0]+k[n-1:0]*N[n-1:0])*R-1,因此,此时通过高位输出加法器503将(aM[n-1:0]*bM[n-1:0]+k[n-1:0]*N[n-1:0])*R-1与C1相加,即可得到res1=(aM[n-1:0]*bM[n-1:0]+k[n-1:0]*N[n-1:0])*R-1+C1的结果。
在RSA和ECC加解密运算中,还存在将两个数a和b进行模乘再加上另一个数C1的-1倍、3倍和12倍的情况。
这时,就可以通过高位加法移位器组501、高位加法多路器组502和高位输出加法器先获取-C1、3C1或12C1。
例如,硬件装置200可以计算res1=(aM[n-1:0]*bM[n-1:0]+k[n-1:0]*N[n-1:0])*R-1+3*C1。硬件装置200需要先计算C1<<1+C1(<<1表示向左移位1比特),也即是先将C1向左移位1比特,以得到C1*2,再将左移后的C1*2与C1相加,即可得到3倍的C1。
具体地,可以利用高位加法移位器组生成高位移位输出数据集合{C1*2t3|t3∈Z}。高位加法多路器组502从高位移位输出数据集合{C1*2t3|t3∈Z}中选取合适的数C1*2,并利用高位输出加法器503将C1*2与d1相加,即可得到3倍的d1。在获取3*C1之后,就可以将3*C1与res1=(aM[n-1:0]*bM[n-1:0]+k[n-1:0]*N[n-1:0])*R-1相加,以获取res1=(aM[n-1:0]*bM[n-1:0]+k[n-1:0]*N[n-1:0])*R-1+3*C1。
例如,硬件装置200还可以计算res1=(aM[n-1:0]*bM[n-1:0]+k[n-1:0]*N[n-1:0])*R-1+12*C1。此时,需要先利用高位加法多路器组502选取出C1*23(例如向左移位3比特),再利用高位加法多路器组502选取出C1*22(例如向左移位2比特),并利用高位输出加法器503将C1*23与C1*22相加,即可得到12倍的C1。
例如,硬件装置200还可以计算res1=(aM[n-1:0]*bM[n-1:0]+k[n-1:0]*N[n-1:0])*R-1-12*C1。这样计算出结果可能是负值,因此需要计算res1=(aM[n-1:0]*bM[n-1:0]+k[n-1:0]*N[n-1:0])*R-1-12*C1+N。这时,由于此时寄存器A305可以存储N的值,就可以计算将第一中间结果减去C1加上N的结果。通过这样的运算方式,硬件装置200的运算效率将比硬件装置100的运算效率更高。
如图6A和图6B所示,为了对中间结果结果组进行下一步的运算,硬件装置200还可以包括低位输出加法部件600。
下面通过图6A和图6B进一步描述硬件装置200的低位输出加法部件600的一些实施例。
图6A是示出根据本公开的一个或多个实施例的获取加解密运算中的中间结果组的硬件装置200的低位输出加法部件600的示意图。图6B是示出根据本公开的一个或多个实施例的获取加解密运算中的中间结果组的硬件装置200的高位输出加法部件600的框图。
参考图6A和图6B,图6B所示的获取加解密运算中的中间结果组的硬件装置200的高位输出加法部件600可以被配置为从寄存器C 407中接收第二中间结果,并对第二中间结果进行加法运算。
低位输出加法部件600可以包括图6A和图6B中所示的低位加法移位器组601、低位加法多路器组602、高位数据选择多路器603、低位输出加法器604、低位输出加法结果多路器605和寄存器C1 606。
参考图6A和6B,低位输出加法部件600中可以包括的各个部件可以被配置如下。
低位输出加法器604可以与寄存器C 407连接。低位输出加法器604可以被配置为接收寄存器C 407中存储的第二中间结果,并对第二中间结果进行加法运算以获取第二输出结果。
低位输出加法结果多路器605可以与低位输出加法器604连接。低位输出加法结果多路器605被配置为选择第二输出结果和双口随机存取存储器中的数据,并将其作为低位所选输出数据输出至寄存器C1 606。
寄存器C1 606可以与低位输出加法结果多路器605连接。寄存器C1 606可以被配置为接收并存储低位所选输出数据,并将其输出至双口随机存取存储器201和低位加法移位器组601。
低位加法移位器组601可以与寄存器C1 606连接。低位加法移位器组601被配置为从寄存器C1 606中接收低位所选输出数据,并对低位所选输出数据进行移位计算以得到低位移位输出数据。
低位加法多路器组602可以与低位加法移位器组601连接。低位加法多路器组602被配置为选择低位移位输出数据和零之中的一个数据。并将其输出至低位输出加法器604。
高位数据选择多路器603可以与寄存器D 406连接。高位数据选择多路器603被配置为选择寄存器D 406中存储的第二中间结果和零之中的一个,并将其输出至低位输出加法器604。
其中,低位输出加法器604对第二中间结果进行加法运算以获取第二输出结果是通过将第二中间结果、经过高位数据选择多路器603选择的数据、与经过低位加法多路器组602组选择的数据相加以获取第二输出结果来实现的。
假设需要计算第二中间结果加上一个数,例如计算res2=(aM[n-1:0]*bM[n-1:0]+k[n-1:0]*N[n-1:0])*R-1+m*C2。
参考图6A,与图5A所示的利用高位输出加法部件500计算res1=(aM[n-1:0]*bM[n-1:0]+k[n-1:0]*N[n-1:0])*R-1+l*C1相类似地,可以计算第二中间结果加上一个数或加上该数的-1倍、3倍和12倍的结果。
硬件装置200利用图5A-5B所示的高位输出加法部件500和图6A-6B所示的低位输出加法部件600,可以同时计算两个结果即res1=(aM[n-1:0]*bM[n-1:0]+k[n-1:0]*N[n-1:0])*R-1+l*C1和res2=(aM[n-1:0]*bM[n-1:0]+k[n-1:0]*N[n-1:0])*R-1+m*C2,这样加快了整个硬件装置200的运算效率。
下面参考图7进一步描述包括高位输出加法部件500和低位输出加法部件600的硬件装置200的一些实施例。
图7是示出根据本公开的一个或多个实施例的获取加解密运算中的中间结果组的硬件装置200的又一示意图。
参考图7,硬件装置200可以包括双口随机存取存储器201、移位输入部件202、乘加器203、高位输出加法部件500和低位输出加法部件600。
参考图7所示的硬件装置200的结构,可见乘法器401可以与高位加法器402、低位加法器403直接连接,而不需通过移位器和多路器进行选择,同时又保证了乘法器的输出结果居中,从而提高了实际参与数值运算的硬件部件的使用效率。从而可以使得蒙哥马利模乘的核心运算所需的乘法器-加法器关键计算路径缩短,提高了该硬件装置的综合频率。
同时,乘加器203中还包括寄存器D 406和寄存器C 407。通过这两个寄存器,可以使得乘加器203中参与运算的乘法器401、高位加法器402和低位加法器403与其他硬件电路间隔开,使得乘加器203的功能更单一,效率更高。
此外,硬件装置200还可以包括:进行移位运算的移位输入部件202、高位输出加法部件500、低位输出加法部件600、以及这些硬件电路中包括的多路器组等。
这样的硬件装置200可以完成蒙哥马利模乘运算中可能涉及到的大部分运算。
IV.获取加解密运算中的中间结果组的方法
下面参考图8,进一步描述可以利用硬件装置200执行来获取加解密运算中的中间结果组的方法的一些实施例。
图8是示出根据本公开的一个或多个实施例的一种获取加解密运算中的中间结果组的方法800的流程图。
参考图8根据本公开的一个或多个实施例的一种获取加解密运算中的中间结果组的方法800可以由获取加解密运算中的中间结果组的硬件装置(例如,硬件装置200)执行。获取加解密运算中的中间结果组的硬件装置可以包括双口随机存取存储器、移位输入部件和乘加器。
方法800包括:
第一步骤S801:双口随机存取存储器存储与该加密运算相关联的一个或多个数据。
第二步骤S802:移位输入部件从双口随机存取存储器中所存储的一个或多个数据中选择第一数据和第二数据,对第一数据和第二数据分别进行移位运算以获取并存储第一输入数据和第二输入数据。
第三步骤S803:乘加器对第一输入数据和第二输入数据进行乘法运算和加法运算,以获取并存储第一中间结果和第二中间结果作为中间结果组。
通常情况下,若要获取加解密运算中的中间结果组,需要在乘法器和加法器中间添加一个移位运算部件来解决以下技术问题:由于输入数据的位宽可能小于乘法器或加法器的输入位宽而导致乘法器的输出结果不能居中,从而不能直接被加法器进行处理。
而根据本公开的一个或多个实施例的一种获取加解密运算中的中间结果组的方法800则将移位输入的步骤提前,从而缩短了乘加器这一关键路径的长度,提高了进行蒙哥马利模乘的综合频率。
具体地,根据本公开的一个或多个实施例的获取加解密运算中的中间结果组的方法800可以用于获取蒙哥马利模乘运算的中间结果。例如,可能需要计算两个大数乘数A和被乘数B相乘的结果A*B。为计算这个结果,可以对A和B进行以下处理。
具体地,与加解密运算相关联一个或多个数据可以包括:乘数aM’[n+q-1:0]、被乘数bM’[n+q-1:0]、常数MC、模数N[n-1:0],具体地,n为大于4的整数,q表示调整位宽并且q为大于零的整数。
乘数aM’[n+q-1:0]可以满足aM[n-1:0]=aM’[n+q-1:0]%N[n-1:0]。aM[n-1:0]是乘数A经过公式aM[n-1:0]=A*R%N转为蒙哥马利域后的数。
被乘数bM’[n+q-1:0]可以满足bM[n-1:0]=bM’[n+q-1:0]%N[n-1:0]。bM[n-1:0]是被乘数B经过公式bM[n-1:0]=B*R%N转为蒙哥马利域后的数。R=2n+2q
中间结果组可以包括:aM[n-1:0]和bM[n-1:0]的蒙哥马利模乘结果PM的高位数据和低位数据。其中,PM=PM’%N[n-1:0],并且PM’=(aM’[n+q-1:0]*bM’[n+q-1:0]+k[n+2q-1:0]*N[n-1:0])*R-1
MC是使得MC*N[n-1:0]的结果的2进制表示的最低n+2q位全为1的常数。k为MC*aM’[n+q-1:0]*bM’[n+q-1:0]的低n+2q位的结果。
同时,响应于乘加器的输入位宽w大于n+2q,则MC的位宽为n+2q。响应于乘加器的输入位宽w小于n+2q,则MC的位宽为w。
通常情况下,如上所述,要通过硬件装置200或硬件装置100来计算两个大数A和B的乘积至少需要进行蒙哥马利模乘的核心计算:pM=(aM*bM+k*N)*R-1。假设aM和bM是n位的二进制数,其分别表示乘数A和乘数B转为蒙哥马利域后的数。同时,在上述公式中k和N也应该是n位的二进制数。因此,上述公式可以表示为:PM=(aM[n-1:0]*bM[n-1:0]+k[n-1:0]*N[n-1:0])*R-1%N[n-1:0]。
然而,通过经过PM’=aM[n-1:0]*bM[n-1:0]+k[n-1:0]*N[n-1:0])*R-1这样的运算之后所得到的中间结果PM’的二进制表示的位宽却是n+1。在实际运算中,执行运算的硬件装置的输入位宽和输出位宽都是固定的。如果硬件装置的输入位宽均为n位的话,那么当需要利用中间结果PM’来进行下一次运算时,则需要运行PM=PM’%N[n-1:0]这样的一个运算来得到一个n位宽的数。
正如之前描述的,模净运算PM=PM’%N[n-1:0]利用硬件来实现非常耗时,连续的读数据、乘加运算、写数据形成了流水线,模净运算打断了这个流水线,从而使得硬件装置200在执行与蒙哥马利模乘相关的运算时更加耗时,应当尽量减少在实际运算中执行模净运算的次数。
因此,根据本公开实施例的方法800还设计了调整位宽q来解决上述问题。具体地,可以用aM’[n+q-1:0]来代替aM[n-1:0](例如在aM[n-1:0]的左边补q个零)、用bM’[n+q-1:0]来代替bM[n-1:0](例如在bM[n-1:0]的左边补q个零)、用k[n+2q-1:0]来代替k[n-1:0]。由此,上述公式PM=(aM[n-1:0]*bM[n-1:0]+k[n-1:0]*N[n-1:0])*R-1%N[n-1:0]可以被替换地表示为:PM’=(aM’[n+q-1:0]*bM’[n+q-1:0]+k[n+2q-1:0]*N[n-1:0])*R-1
这样,当PM为中间结果时,本公开的实施例(例如方法800)可以使用PM’代替PM参与运算而不影响正确性,这样省去了PM=PM’%N[n-1:0]的计算步骤,提高了效率。
类似地,可以通过aM[n-1:0]=aM’[n+q-1:0]%N[n-1:0]来获取aM[n-1:0]。由此,本公开的实施例(例如方法800)可以使用aM’来代替aM参与运算并且不会影响运算的正确性,这样省去了aM[n-1:0]=aM’[n+q-1:0]%N[n-1:0]这一步计算,提高了效率。
类似地,可以通过bM[n-1:0]=bM’[n+q-1:0]%N[n-1:0]来获取bM[n-1:0]。由此,本公开的实施例(例如方法800)可以使用bM’来代替bM参与运算而不影响运算的正确性,这样省去了bM[n-1:0]=bM’[n+q-1:0]%N[n-1:0]这一步计算,提高了效率。
此外,k在上述更新后的公式中是一个位宽为n+2q的数。具体地,当aM’和bM’的位宽为n+q时,k位权最高的比特将比aM’和bM’的位权最高的比特多q位。
例如,假设乘数A和被乘数B转换到蒙哥马利域中的数aM和bM均为256位的数。硬件装置200中的乘法器可以执行product[511:0]=aM[255:0]*bM[255:0],然后将product[511:0]的前256位的高位数据product1[511:256]作为高位加法器的输入。高位加法器将product1[511:256]与某一个256位的加数(该加数可能是之前某次运算的中间结果)相加,则可能会得到257位的加法结果sum[256:0]。此时,如果乘法器的输入位宽仅为256位,则此刻需要执行sum[256:0]%N[255:0]才能将加法结果sum作为下一次运算的乘法器输入aM’。
因此,根据本公开实施例的硬件装置200的乘法器和加法器的输入位宽w可以设置为256+q位,其中q为调整位宽,q≥0。这样,257位的sum就可以直接作为乘法器的输入aM’进入下一次运算。这样就可以省去一次模净运算,并且在不影响运算的正确性的前提下提高了运算效率。
可选地,q可以等于5,以涵盖上述的大多数的可能发生进位的情况,并且不浪费乘法器的输入位宽。
根据参与运算的数据的位宽和乘法器的输入位宽的大小可以适应性地选取q值。调整位宽q值的选取原则可以是“既不浪费乘加器位宽又能省去大多数模净运算”。
下面参考图9进一步描述方法800的第二步骤S802。
图9是示出根据本公开的一个或多个实施例的一种获取加解密运算中的中间结果组的方法800的第二步骤S802的流程图。
参考图9、图3A-3B以及图7,第二步骤S802可以由图3A-3B以及图7中的移位输入部件202来执行。移位输入部件202还包括:第一移位器组、第一输入多路器、寄存器A、第二移位器组、第二输入多路器和寄存器B。
第二步骤S802还可以包括以下步骤S8021至S8026。
第一移位输入子步骤S8021:第一移位器组对双口随机存取存储器中所存储的一个或多个数据中的第一数据进行移位运算以获取第一移位数据集合。第二移位输入子步骤S8022:第一输入多路器从第一移位数据集合中选择第一输入数据。第三移位输入子步骤S8023:寄存器A接收并存储第一输入数据。第四移位输入子步骤S8024:第二移位器组对双口随机存取存储器中所存储的一个或多个数据中的第二数据进行移位运算以获取第二移位数据集合。第五移位输入子步骤S8025:第二输入多路器从第二移位数据集合和所述中间结果组中选择并输出第二输入数据。以及第六移位输入子步骤S8026:寄存器B接收并存储第二输入数据。
假设第一数据是aM’,第二数据是bM’。aM’和bM’的位宽为n+q,乘法器的输入位宽为w。
在第一移位输入子步骤S8021、第二移位输入子步骤S8022和第三移位输入子步骤S8023中,第一移位器组在接收到第一数据aM’后可以对其进行移位运算,以获取第一移位数据集合{aM’*2t1|t1∈Z}(Z表示整数),并可以通过第一输入多路器从中选择第一输入数据aM’*2t1。然后可以将第一输入数据aM’*2t1保存在寄存器A中。
类似地,通过第四移位输入子步骤S8024、第五移位输入子步骤S8025和第六移位输入子步骤S8026,可以将第二数据bM’转换为第二输入数据bM’*2t2
通过这样的方式,可以实现上述的步骤S802。步骤S802通过对第一数据(例如,aM’)和第二数据(例如,bM’)进行移位运算从而得到第一输入数据(例如,aM’*2t1)和第二输入数据(例如,bM’*2t2)。进而可以实现第一输入数据和第二输入数据在经过乘法器的运算之后,可以直接位于乘法器的输出结果的居中的位置,便于后续加法器的运算。
下面参考图10进一步描述方法800的第三步骤S803。
图10是示出根据本公开的一个或多个实施例的一种获取加解密运算中的中间结果组的方法800的第三步骤S803的流程图。
参考图10、图4A-4B以及图7,第三步骤S803可以由图4A-4B以及图7中的乘加器203来执行。乘加器203包括乘法器、第一中间结果多路器、高位加法器、寄存器D、低位加法器、第二中间结果多路器和寄存器C。
第三步骤S803可以包括以下步骤S8031至S8037。
第一乘加子步骤S8031:乘法器将第一输入数据与第二输入数据相乘以获取乘法结果,其中乘法结果的高一部分数据为高位乘法结果,乘法结果的低一部分数据为低位乘法结果。第二乘加子步骤S8032:第二中间结果多路器选择存储在寄存器D中的第一中间结果、存储在寄存器C中的第二中间结果、和零中的至少一个,并输出至低位加法器。第三乘加子步骤S8033:低位加法器接收低位乘法结果和经第二中间结果多路器选择的数据,并对低位乘法结果和经第二中间结果多路器选择的数据进行加法运算,以获取更新后的第二中间结果,并将更新后的第二中间结果输入至第二输入多路器,并将更新后的第二中间结果的进位输入至高位加法器。第四乘加子步骤S8034:寄存器C接收并存储更新后的第二中间结果来替换之前存储的第二中间结果。第五乘加子步骤S8035:第一中间结果多路器将在存储在寄存器D中的第一中间结果和零中选择一个数据,并将数据输入至高位加法器。第六乘加子步骤S8036:高位加法器接收高位乘法结果、第二中间结果中的进位、经第一中间结果多路器选择的数据,并对高位乘法结果、第二中间结果中的进位、经第一中间结果多路器选择的数据进行加法运算以获取更新后的第一中间结果。第七乘加子步骤S8037:寄存器D接收更新后的第一中间结果来替换之前存储的第一中间结果。
假设第一输入数据是aM’*2t1,第二输入数据是bM’*2t2
第一乘加子步骤S8031中,乘法器将第一输入数据aM’*2t1和第二输入数据bM’*2t2相乘,从而得到乘法结果product1*2t1+t2=aM’*bM’*2t1+t2。此时,乘法结果的有效数据product1将位于乘法器的输出结果的中间数据位。假设数据aM’和bM’的位宽为小于乘加器的输入位宽w比特的n+q比特,则aM’*bM’的位宽将为2n+2q。通过使得t1+t2=w-n-q,可以使得乘法器的输出结果的二进制表示的前后(w-n-q)位数据都为零,而乘法器的输出结果的有效数据(例如,product1)将位于乘法器输出结果的中间2n+2q位。
通过这样的方式,可以实现上述的步骤S803。由于乘法器的输出结果已经位于中间的2n+2q位,第三乘加子步骤S8033和第六乘加子步骤S8036之前就不再需要对高位乘法结果和低位乘法结果进行移位运算的步骤。第三乘加子步骤S8033和第六乘加子步骤S8036可以对乘法器的运算结果进行运算,大大地缩短了乘加器关键路径的长度。
此外,如果还需执行将模乘的结果再加上一个或多个数的运算,则上述获取加解密运算中的中间结果组的硬件装置还可以包括高位输出加法部件和低位输出加法部件。其中,该与加密运算相关联一个或多个数据还包括:加数C1和C2,其中,C1和C2为n位数据。所述加解密运算中的中间结果组还包括:中间结果res1’和res2’中的高位数据和低位数据。中间结果res1’和res2’分别为:res1’=(aM’[n+q-1:0]*bM’[n+q-1:0]+k[n+2q-1:0]*N[n-1:0])*R-1+l*C1,或res2’=(aM’[n+q-1:0]*bM’[n+q-1:0]+k[n+2q-1:0]*N[n-1:0])*R-1+m*C2。其中,l和m为不为0的整数。上述的l和m是-12、-3、-1、1、3、12中的一个或多个。
具体地,在不使用调整位宽q时,应当获取res1=(aM[n-1:0]*bM[n-1:0]+k[n-1:0]*N[n-1:0])*R-1+l*C1。而为了便于将res1作为中间结果进行下一步的运算,根据本公开的实施例的硬件装置200可以替换地获得res1’。其中,res1=res1’%N。
由于加法进位,res1的位宽可能大于n。因此,本公开的一个或多个实施例采用计算res1’来代替计算res1。只要res1’的位宽小于n+q,res1’都可以作为中间结果进行下一步地运算,而不需要再执行一次模净运算。
类似地,在不使用调整位宽q时,应当获取res2=(aM[n-1:0]*bM[n-1:0]+k[n-1:0]*N[n-1:0])*R-1+m*C2。而为了便于将res2作为中间结果进行下一步的运算,根据本公开的实施例的硬件装置200可以替换地获得res2’。其中,res2=res2’%N。
V.获取不分块的蒙哥马利模乘的中间结果组的方法
根据本公开的一个或多个实施例的获取加解密运算中的中间结果组的硬件装置和方法还可以用于处理参与蒙哥马利模乘运算中的数值(例如,aM’、bM’、MC和N)的位宽n+q和n+2q小于该硬件装置中的寄存器、加法器、乘法器等器件的输入位宽w的情况。
图11是示出根据本公开的一个或多个实施例的执行获取加解密运算中的中间结果组的方法800的流程图。
参考图11,当乘加器的输入位宽w大于n+2q时,可以将计算res1’=(aM’[n+q-1:0]*bM’[n+q-1:0]+k[n+2q-1:0]*N[n-1:0])*R-1的过程分为以下三个时段。
参考图11,方法800在第一时段中执行以下步骤S802a至S803a。
第二步骤S802可以包括S802a:移位输入部件从双口随机存取存储器中所存储的一个或多个数据中选择第一数据aM’[n+q-1:0]和第二数据bM’[n+q-1:0],对第一数据aM’[n+q-1:0]和第二数据bM’[n+q-1:0]分别进行移位运算以获取并存储第一输入数据aM’[n+q-1:0]*2t1和第二输入数据bM’[n+q-1:0]*2t2
第三步骤S803可以包括S803a:乘加器对第一输入数据aM’[n+q-1:0]*2t1和第二输入数据bM’[n+q-1:0]*2t2进行乘法运算product1[2n+2q-1:0]*2t1+t2=aM’[n+q-1:0]*bM’[n+q-1:0]*2t1+t2,以获取并存储第一中间结果product1[2n+2q-1:n+2q]和第二中间结果product1[n+2q-1:0]*2t1+t2作为中间结果组。
方法800在第二时段中执行以下步骤S802b至S803b。
第二步骤S802可以包括S802b:移位输入部件从双口随机存取存储器中所存储的一个或多个数据中选择第一数据MC[n+2q-1:0],并获取第二中间结果product1[n+2q-1:0]*2t1+t2作为第二数据,对第二数据product1[n+2q-1:0]*2t1+t2进行移位运算,并存储第一输入数据MC[n+2q-1:0]和第二输入数据product1[n+2q-1:0]*2t3
第三步骤S803可以包括S803b:乘加器对第一输入数据MC[n+2q-1:0]和第二输入数据product1[n+2q-1:0]*2t3进行乘法运算product2[2n+2q-1:0]*2t3=MC[n+2q-1:0]*product1[n+2q-1:0]*2t3,以获取并存储product2[n+2q-1:0]*2t3以作为更新后的第二中间结果product2[n+2q-1:0]*2t3
方法800在第三时段中执行以下步骤S802c至S803c。
第二步骤S802可以包括S802c:移位输入部件从双口随机存取存储器中所存储的一个或多个数据中选择第一数据N[n-1:0],并获取第二中间结果product2[n+2q-1:0]*2t3作为第二数据,对第一数据N[n-1:0]和第二数据product2[n+2q-1:0]*2t3进行移位运算以获取并存储第一输入数据N[n-1:0]*2t4和第二输入数据product2[n+2q-1:0]*2t5
第三步骤S803可以包括S803c:乘加器对第一输入数据N[n-1:0]*2t4和第二输入数据product2[n+2q-1:0]*2t5进行乘法运算product3[2n+2q-1:0]*2t4+t5=N[n-1:0]*product2[n+2q-1:0]*2t4+t5,并进行加法运算PM’[n+q-1:0]=(product3[2n+2q-1:0]+product1[2n+2q-1:0])*R-1
上述的t1至t5均为整数。
在上述的第三步骤S803a至S803c中,可以看到乘加器这关键路径中只需执行乘法运算和加法运算,而不需执行移位运算。这一关键路径的长度大大缩短,从而提高了综合频率。
同时,上述的方法800采用计算n+q位的结果PM’来替换计算n位的结果PM。这样可以避免在PM的位数超过n时所需的模净运算,从而提高了运算效率。
VI.获取分块的蒙哥马利模乘的中间结果组的方法
根据本公开的一个或多个实施例的获取加解密运算中的中间结果组的硬件装置和方法还可以用于处理参与蒙哥马利模乘运算中的数值(例如,aM、bM、MC和N)的位宽n大于该硬件装置中的寄存器、加法器、乘法器等器件的输入位宽w的情况。
例如,可能存在寄存器A、寄存器B等寄存器和乘法器、加法器的输入位宽为261位,aM、bM、pM和N为512位数的情况。由于硬件电路的输入位宽在实际使用中是固定的,因此提出一种可以利用上述硬件装置和方法处理数值的位宽大于硬件装置的输入位宽的方法。
在这种情况下,需要将参与蒙哥马利模乘运算中的数值进行分块处理。可以将aM和bM等参与运算的数据分别划分为若干个小于乘法器输入位宽的数据块来进行运算。例如,可以将aM[511:0]的高256位数据aM[511:256]划分为aM的高位数据,将aM[511:0]的低256位数据aM[255:0]划分为aM的低位数据。同样地,可以将bM[511:0]划分为bM[511:256]和bM[255:0]。
分块的方法可以不限于上述方式,还可以将aM[511:0]划分为均等的四等分aM[511:384]、aM[383:256]、aM[255:128]、aM[127:0]或者均等的若干个分块。
还可以将aM[511:0]划分为不均等的若干个分块。本公开不对参与运算的多个数据进行分块的方法进行限制,只要分块的位宽小于乘法器的输入位宽即可。
此外,还可以对bM和N进行类似地处理。
接下来介绍在分块的蒙哥马利模乘的情况下,根据本公开的一个或多个实施例的获取加解密运算中的中间结果组的方法800中可能涉及到的步骤。
例如,假设将n位的aM、bM、N、k分成多个位宽不同或相同的数来进行处理,并需要利用硬件装置200来计算中间结果res1=(aM[n-1:0]*bM[n-1:0]+k[n-1:0]*N[n-1:0])*R-1%N。
如上所述,为了便于将计算结果res1继续用于下一次的运算,可以用res1’=(aM’[n+q-1:0]*bM’[n+q-1:0]+k[n+2q-1:0]*N[n-1:0])*R-1来替换上述公式。
当乘法器的输入位宽w小于n+2q时,需要对aM’[n+q-1:0]、bM’[n+q-1:0]、k[n+2q-1:0]和N[n-1:0]进行分块处理。
具体地,aM’[n+q-1:0]可以被分为若干个大小均等或大小不等的数据块。aM’[n+q-1:0]的各个分块的位宽应小于硬件装置200的乘加器的输入位宽w。由此,可以将这些数据块中的任意一个表示为aM’[w1+w0-1:w0]。其中,w0≤w1+w0-1≤n-1,w0≥0,w≥w1。
同理,bM’[n+q-1:0]可以被分为若干个大小均等或大小不等的数据块。bM’[n+q-1:0]的各个分块的的位宽应小于硬件装置200的乘加器的输入位宽w。由此,可以将这些数据块中的任意一个表示为bM’[w3+w2-1:w2]。其中,w2≤w3+w2-1≤n-1,w2≥0,w≥w3。
此时,MC应当为w位的数,其可以使得MC[w-1:0]*N[n-1:0]的最后w位全为1。通过MC可以通过硬件装置200来计算k的值。具体的,k为MC*aM[n-1:0]*bM[n-1:0]的低n+2q位的结果。
在分块的蒙哥马利模乘的情况下,k值的计算是通过硬件装置200被分块地计算出的。可以用k[w7+w8-1:w8]来表示k的一个分块。具体地k[w7+w8-1:w8]是MC与某个中间结果sum1相乘的最低w7位。在分块的蒙哥马利模乘中,sum1是分块蒙哥马利模乘计算过程中的中间值,sum1可以是(aM’[n+q-1:0]*bM’[n+q-1:0]+N[n-1:0]*k[w8-1:0])*2-w8的最低w7位。根据上述公式,由于采用了k[w8-1:0],(aM’[n+q-1:0]*bM’[n+q-1:0]+N[n-1:0]*k[w8-1:0])的二进制表示的最低w8位一定为0。
上述的w0-w8均为整数。
接下来,参考图11进一步描述在分块的蒙哥马利模乘的运算过程中的各个时段中可能涉及到的各个步骤。
图11是示出根据本公开的一个或多个实施例的执行获取加解密运算中的中间结果组的方法800的流程图。
参考图11,可以将计算res1’=(aM’[n+q-1:0]*bM’[n+q-1:0]+k[n+2q-1:0]*N[n-1:0])*R-1的过程分为以下四个时段。
在第四时段中,硬件装置200循环执行步骤S802-1和步骤S803-1零到若干次。步骤S802-1被包括上述的步骤S802中,步骤S803-1被包括在上述的步骤S803中。硬件装置200的乘法器执行aM’[n+q-1:0]的一个或多个分块与bM’[n+q-1:0]的一个或多个分块之间的两两相乘,以分别获取高位乘法结果和低位乘法结果。乘法器每次只执行aM’[n+q-1:0]的某一个分块与bM’[n+q-1:0]的某一分块相乘的结果,在第四时段中可以执行若干次乘法运算。硬件装置200的高位加法器执行将高位乘法结果与第一中间结果或零进行加法运算以得到更新后的第一中间结果。硬件装置200的低位加法器执行将低位乘法结果与从第一中间结果、第二中间结果或零中选择的一个数据进行加法运算以得到更新后的第二中间结果。其中,第一中间结果可以是第四时段中高位加法器执行的某一次加法运算的加法结果,第二中间结果可以是第四时段中低位加法器执行的某一次加法运算的加法结果。这样每次更新后第一中间结果和第二中间结果可以是aM’[n+q-1:0]的各个分块与bM’[n+q-1:0]的各个分块之间的两两相乘得到的部分乘法结果之间累加的结果。
在第五时段中,硬件装置200循环执行步骤S802-2和步骤S803-2零到若干次。步骤S802-2被包括上述的步骤S802中,步骤S803-2被包括在上述的步骤S803中。硬件装置200的乘法器执行N[n-1:0]的各个分块与k[n+2q-1:0]的各个分块之间的两两相乘,以分别获取高位乘法结果和低位乘法结果。乘法器每次只执行N[n-1:0]的某一个分块与k[n+2q-1:0]的某一分块相乘的结果,在第五时段中可以执行若干次乘法运算。硬件装置200的高位加法器执行将高位乘法结果与第四时段中得到某个第一中间结果、或在第五时段中某次运算中得到的第一中间结果、或零中的一个数据进行加法运算以得到更新后的第一中间结果。硬件装置200的低位加法器执行将低位乘法结果与第一中间结果(例如,第四时段中某次运算得到的第一中间结果或第五时段中某次运算中得到第一中间结果)、第二中间结果(例如,第四时段中某次运算得到的第二中间结果或第五时段中某次运算中得到第二中间结果)或零进行加法运算以得到更新后的第二中间结果。这样每次更新后第一中间结果和第二中间结果可以是N[n-1:0]的各个分块与k[n+2q-1:0]的各个分块之间的两两相乘得到的部分乘法结果之间累加的结果。
在第六时段中,硬件装置200执行步骤S802-3和步骤S803-3。步骤S802-3被包括上述的步骤S802中,步骤S803-3被包括在上述的步骤S803中。硬件装置200的乘法器执行MC[w-1:0]与第五时段中某次运算中得到的第二中间结果的乘法运算以获取乘法结果,通过低位加法器保留更新后的第二中间结果。在第六时段中,可以得到k的某一个分块的值作为更新后的第二中间结果。
在第七时段中,硬件装置200执行步骤S802-4和步骤S803-4。步骤S802-4被包括上述的步骤S802中,步骤S803-4被包括在上述的步骤S803中。硬件装置200的乘法器执行N[n-1:0]的各个分块与第六时段中某次运算得到的第二中间结果(也即是k的某一个分块的值)乘法运算。
取决于分块的大小,在上述每个时段中的各个步骤的执行次数可以不同。
图12是示出根据本公开的一个或多个实施例的执行获取加解密运算中的中间结果组的方法800的又一流程图。
参考图12,要获取res1’=(aM’[n+q-1:0]*bM’[n+q-1:0]+k[n+2q-1:0]*N[n-1:0])*R-1的运算结果,可能需要在第四时段中循环地执行各个步骤S802-1至S803-1零到若干次。然后,在第五时段中循环地执行各个步骤S802-2至S803-2零到若干次。接着再依次执行一次第六时段的各个步骤S802-3至S803-3和第七步骤中的各个步骤S802-4至S803-4。上述过程可能会重复若干次,直到最后一次第七时段中的各个步骤执行完成。由此可以完成整个分块的蒙哥马利模乘运算。当然,在某些情况下,上述过程的某次循环是不需要执行第六时段和第七时段中的步骤,同样的第五时段中的各个步骤也可以第四时段中的各个步骤被执行之前而被执行。第四时段和第五时段中的各个步骤都可能在上述过程的某次循环中被重复多次地执行。
第四时段至第七时段这四个时段的执行顺序是根据蒙哥马利模乘的运算需要来确定的。这四个时段的一种或多种组合(在组合中,可以重复执行多次某个时段中的各个步骤)都可以完成分块的蒙哥马利模乘的运算结果。本公开的一个或多个实施例并不对第四时段至第七时段的执行顺序和执行次数做任何限定,只要能够完成蒙哥马利模乘的运算即可。
在以上描述中,每次循环中的“若干次”所指的值可能相同也可能不同,都视分块数目和大小而定。
在以上描述中,术语第一时段、第二时段…第M时段(M表示任意整数)表示通过可以对该硬件装置进行控制的状态机或任一逻辑电路、硬件电路对该硬件装置所执行的内容进行控制的一个或多个运行时段。在上述的一个或多个时段执行结束时,可以获取一个或多个中间结果组作为该硬件装置的输出结果,也可以不获取任何中间结果组作为该硬件装置的输出结果,而仅是作为下一时段的输入数据。此外各个时段的执行时间可以相同,也可以不同。第一、第二这类术语也仅是用于区分不同的时段,并不表示强制的运行顺序。同时各个时段的实际运行时段可能重叠也可能不重叠,这将根据可以对该硬件装置进行控制的状态机或任一逻辑电路、硬件电路针对所需计算的数值而确定。
接下来,参考图13A和图13B进一步描述在第四时段中的运行的各个步骤。
图13A和图13B是示出根据本公开的一个或多个实施例的在第四时段内执行获取加解密运算中的中间结果组的方法800的流程图。
参考图13A和图13B,在第四时段内,方法800执行以下步骤S802-1和步骤S803-1零到若干次。具体地,在这样的情况下,乘加器的输入位宽w小于n+2q。
具体地,图9中的步骤S802包括步骤S802-1。图10中的步骤S803包括步骤S803-1。
具体地,参考图13A,步骤S802-1包括如下步骤S8021-1至S8026-1。
第一移位输入子步骤S8021包括S8021-1:第一移位器组对双口随机存取存储器中的乘数aM’[n+q-1:0]的一个分块aM’[w1+w0-1:w0]进行移位计算以获取{aM’[w1+w0-1:w0]*2j1|j1∈Z}作为第一移位数据集合,Z是整数。其中,w0≤w1+w0-1≤n-1,w0≥0,w≥w1。
第二移位输入子步骤S8022包括S8022-1:第一输入多路器从第一移位数据集合中选择aM’[w1+w0-1:w0]*2j1作为第一输入数据。
第三移位输入子步骤S8023包括S8023-1:寄存器A接收并存储第一输入数据。
第四移位输入子步骤S8024包括S8024-1:第二移位器组对双口随机存取存储器中的被乘数bM’[n+q-1:0]的一个分块bM’[w3+w2-1:w2]进行移位计算以获取{bM’[w3+w2-1:w2]*2j2|j2∈Z}作为第二移位数据集合,其中,w2≤w3+w2-1≤n-1,w2≥0,w≥w3。
第五移位输入子步骤S8025包括S8025-1:第二输入多路器从第二移位数据集合中选择bM’[w3+w2-1:w2]*2j2作为第二输入数据。
第六移位输入子步骤S8026包括S8026-1:寄存器B接收并存储第二输入数据。
具体地,参考图13B,步骤S803-1包括如下步骤S8031-1至S8037-1。
第一乘加子步骤S8031包括S8031-1:乘法器将第一输入数据aM’[w1+w0-1:w0]*2j1与第二输入数据bM’[w3+w2-1:w2]*2j2相乘以获取乘法器输出结果pp1[w1+w3-1:0]*2j1+j2=aM’[w1+w0-1:w0]*bM’[w3+w2-1:w2]*2j1+j2,以将乘法器输出结果的有效数据的高一部分数据作为高位乘法结果pp1[w1+w3-1:w4]和乘法器输出结果的有效数据的低一部分数据作为低位乘法结果pp1[w4-1:0]*2j1+j2,其中,pp1[w1+w3-1:0]*2j1+j2的有效数据pp1[w1+w3-1:0]位于乘法器输出结果的中间位置。其中,0<w4≤w1+w3-1。
第二乘加子步骤S8032包括S8032-1:第二中间结果多路器选择第一中间结果mres1、第二中间结果mres2和零中的一个作为第一加数adder1输出至低位加法器。
第三乘加子步骤S8033包括S8033-1:低位加法器接收低位乘法结果pp1[w4-1:0]*2j1+j2和第一加数adder1,并对低位乘法结果和第一加数sum1进行加法运算,以获取更新后的第二中间结果sum1=pp1[w4-1:0]*2j1+j2+adder1,并将更新后的第二中间结果sum1输入至第二输入多路器,并将更新后的第二中间结果sum1的进位输入至高位加法器。
第四乘加子步骤S8034包括S8034-1:寄存器C接收并存储sum1作为更新后的第二中间结果mres2。
第五乘加子步骤S8035包括S8035-1:第一中间结果多路器选择零和第一中间结果mres1中的一个作为第二加数adder2输入至高位加法器。
第六乘加子步骤S8036包括S8036-1:高位加法器接收高位乘法结果pp1[w1+w3-1:w4]和adder2,并对高位乘法结果pp1[w1+w3-1:w4]和adder2进行加法运算以获取更新后的第一中间结果sum2=pp1[w1+w3-1:w4]+adder2。
第七乘加子步骤S8037包括S8037-1:寄存器D接收并存储sum2作为更新后的第一中间结果mres1。
可选地,可以将第二中间结果mres2存储至双口随机存取存储器中。此时,mres2可能是蒙哥马利模乘结果的一部分,这时需要把mres2写入双口随机存取存储器。在第四时段中,是否将第二中间结果mres2存储至双口随机存取存储器是根据第四时段中计算需要来确定的。
此外,如果将参与蒙哥马利模乘的数据分为两个分块以上,则在某些第四时段中,可以把更新后的sum1写入双口随机存取存储器,此时,sum1可能是PM’[n+q-1:0]中的某个分块。
由此,在第四时段内执行的步骤可以通过上述的硬件装置200来实现。在这个步骤中,与上述所类似地,步骤S8021-1至S8026-1实现了在乘法器前进行移位运算的技术效果,提高了后续运算的运算效率,缩短了乘加器这一关键路径。同样的,步骤S8031-1和步骤S8033-1、步骤S8036-1之间不需要移位运算步骤,使得乘加器的综合频率更高。
同时,在第四时段中,采用对乘数aM’[n+q-1:0]的进行分块从而获取aM’[w1+w0-1:w0],而非对aM进行分块。通过这样的方式,如上所述,可以省去大多数的模净运算,提高计算效率。在第四时段中,循环地依次执行上述步骤S8021-1至S8037-1,在不需要中间执行模净运算的情况下,获取了aM’[n+q-1:0]的各个分块与bM’[n+q-1:0]的各个分块之间的两两相乘得到的部分乘法结果之间累加的结果(例如,更新后的第一中间结果mres1和第二中间结果mres2)。
上述的w0、w1、w2、w3的值均为整数,并且在每次执行图12中的运算中可以相同也可以不同。
接下来,参考图14A和图14B进一步描述在第五时段中的运行的各个步骤。
图14A和图14B是示出根据本公开的一个或多个实施例的在第五时段内执行获取加解密运算中的中间结果组的方法800的流程图。
参考图14A和图14B,在第五时段内,方法800执行以下步骤S802-2和步骤S803-2零到若干次。具体地,在这样的情况下,乘加器的输入位宽w小于n+2q。
具体地,图9中的步骤S802包括步骤S802-2。图10中的步骤S803包括步骤S803-2。
具体地,参考图14A,步骤S802-2包括如下步骤S8021-2至S8026-2。
第一移位输入子步骤S8021包括S8021-1:第一移位器组对双口随机存取存储器中的模数N[n-1:0]的一个分块N[w5+w6-1:w6]进行移位计算以获取{N[w5+w6-1:w6]*2j3|j3∈Z}来替换第一移位数据集合,Z为整数。
第二移位输入子步骤S8022包括S8022-2:第一输入多路器从第一移位数据集合中选择模数N[w5+w6-1:w6]*2j3替换第一输入数据。
第三移位输入子步骤S8023包括S8023-2:寄存器A接收并存储替换后的第一输入数据。
第四移位输入子步骤S8024包括S8024-2:第二移位器组获取双口随机存取存储器中的k[w7+w8-1:w8]。
第五移位输入子步骤S8025包括S8025-2:第二输入多路器选择k[w7+w8-1:w8]作为第二输入数据。
第六移位输入子步骤S8026包括S8026-2:寄存器B接收并存储第二输入数据k[w7+w8-1:w8]。
具体地,参考图14B,步骤S803-2包括如下步骤S8031-2至S8037-2。
第一乘加子步骤S8031包括S8031-2:乘法器将第一输入数据N[w5+w6-1:w6]*2j3与第二输入数据k[w7+w8-1:w8]相乘以获取乘法器输出结果pp2*2j3=N[w5+w6-1:w6]*k[w7+w8-1:w8]*2j3,以将乘法器输出结果的有效数据pp2的高一部分数据作为高位乘法结果pp2[w5+w7-1:w9],并将乘法器输出结果的有效数据pp2的低一部分数据作为低位乘法结果pp2[w9-1:0]*2j3,其中,pp2*2j3的有效数据pp2位于乘法器输出结果的中间位置。
第二乘加子步骤S8032包括S8032-2:第二中间结果多路器选择第二中间结果mres2输出至低位加法器。
第三乘加子步骤S8033包括S8033-2:低位加法器接收低位乘法结果pp2[w9-1:0]*2j3和第二中间结果mres2,并对低位乘法结果和第二中间结果mres2进行加法运算,以获取更新后的第二中间结果sum3=mres2+pp2[w9-1:0],并将更新后的第二中间结果sum3的进位carry输入至高位加法器。
第四乘加子步骤S8034包括S8034-2:寄存器C接收并存储第二中间结果sum3作为更新后的mres2。
第五乘加子步骤S8035包括S8035-2:第一中间结果多路器将存储在寄存器D中的第一中间结果mres1输入至高位加法器。
第六乘加子步骤S8036包括S8036-2:高位加法器接收高位乘法结果pp2[w5+w7-1:w9]、第一中间结果mres1,并对高位乘法结果pp2[w5+w7-1:w9]、第一中间结果mres1和进位carry进行加法运算以获取sum4=mres1+pp2[w5+w7-1:w9]+carry来替换第一中间结果。
第七乘加子步骤S8037包括S8037-2:寄存器D接收并存储sum4作为更新后的第一中间结果mres1。
可选地,可以将第二中间结果mres2存储至双口随机存取存储器中。此时,mres2可能是蒙哥马利模乘结果的一部分,这时需要把mres2写入双口随机存取存储器。在第五时段中,是否将第二中间结果mres2存储至双口随机存取存储器是根据第五时段中的计算需要来确定的。具体地,当寄存器C中的累加结果恰好是PM’[n+q-1:0]的一个分块时需要将第二中间结果mres2存储至双口随机存取存储器。
此外,如果将参与蒙哥马利模乘的数据分为两个分块以上,则在某些第五时段中,可以把更新后的sum1写入双口随机存取存储器,此时,sum1可能是PM’[n+q-1:0]中的某个分块。
由此,在第五时段内执行的步骤可以通过上述的硬件装置200来实现。在这个步骤中,与上述所类似地,步骤S8021-2至S8026-2实现了在乘法器前进行移位运算的技术效果,提高了后续运算的运算效率。同样的,步骤S8031-2和步骤S8033-2、步骤S8036-2之间不需要移位运算步骤,能够使得乘加器的综合频率更高。
上述的k[w7+w8-1:w8]代表k[n+2q-1:0]的一个分块。分块k[w7+w8-1:w8]的值可以在第六时段中通过对MC和上一次运算所获取的第二中间结果mres2进行乘法运算和加法运算来获得。在第一次执行图12中的循环时,可以仅执行零次第五时段中的上述循环,也即是不执行上述第五时段内的各个步骤。当然,在有些情况下,执行下一次循环(第四时段-第七时段)可能并不需要执行第六时段和第七时段中的步骤,也可以在执行第四时段中的各个步骤之前执行第五时段中各个步骤,第四时段和第五时段中的步骤都可能在某次过程循环中被重复多次执行。
通常情况下,在一个蒙哥马利模乘运算开始的时候,k是可以不存在的,而是在蒙哥马利模乘的运算过程中通过对aM’、bM’、MC和N的一系列运算而被计算出来,并在蒙哥马利模乘过程中进行使用。在分块的蒙哥马利模乘的情况下,可以分块地计算k的各个分块,同样的,也可以分块地使用k的某个分块。这些k的分块也可能具有重叠的数据位,例如,分块k[256:0]和分块k[512:128]。分块都是视整个蒙哥马利模乘的运算需要而确定的。
例如,在第六时段中就可以通过乘法运算和加法获取分块k[w7+w8:w8]的值并将该值保存至双口随机存取存储器。这时在执行下一个时段(并不一定是第七时段)的各个步骤时,可以从双口随机存取存储器中直接获取k[w7+w8:w8]的值来进行运算。通常情况下,k[w7+w8-1:w8]在从双口随机存取存储器中读取之后不需要经过第二移位器组来执行位移运算。
在第五时段中,可以将k[n+2q-1:0]的某个分块k[w7+w8-1:w8]作为输入来进行运算,而非将k[n-1:0]的某个分块作为输入进行运算。通过这样的方式,如上所述,可以省去大多数的模净运算,提高计算效率。在第五时段中,循环地依次执行上述步骤S8021-2至S8037-2,在不需要中间执行模净运算的情况下,获取了N[n-1:0]的各个分块与k[n+2q-1:0]的各个分块之间的两两相乘得到的部分乘法结果之间累加的结果(例如,更新后的第一中间结果mres1和第二中间结果mres2)。
此外,在每个图12中的过程循环中,w5、w6、w7、w8和w9均为整数,其可以相同也可以不同。
接下来,参考图15A和图15B进一步描述在第六时段中的运行的各个步骤。
图15A和图15B是示出根据本公开的一个或多个实施例的在第六时段内执行获取加解密运算中的中间结果组的方法800的流程图。
参考图15A和图15B,在第六时段内,方法800执行以下步骤S802-3和步骤S803-3零到若干次。具体地,在这样的情况下,乘加器的输入位宽w小于n+2q。
具体地,图9中的步骤S802包括步骤S802-3。图10中的步骤S803包括步骤S803-3。
具体地,参考图15A,步骤S802-3包括如下步骤S8021-3至S8026-3。
第一移位输入子步骤S8021包括S8021-3:第一移位器组读取双口随机存取存储器中的MC[w-1:0]。
第二移位输入子步骤S8022包括S8022-3:第一输入多路器选择MC[w-1:0]替换第一输入数据。
第三移位输入子步骤S8023包括S8023-3:寄存器A接收并存储替换后的第一输入数据MC[w-1:0]。
第五移位输入子步骤S8025包括S8025-3:第二输入多路器选择第二中间结果mres2作为第二输入数据。
第六移位输入子步骤S8026包括S8026-3:寄存器B接收并存储第二中间结果mres2。
具体地,参考图15B,步骤S803-3包括如下步骤S8031-3至S8033-3。
第一乘加子步骤S8031包括S8031-3:乘法器将第一输入数据MC[w-1:0]与第二输入数据mres2相乘以获取乘法器输出结果k*2j4=MC[w-1:0]*mres2*2j4,以将乘法器输出结果的有效数据k的低一部分数据作为低位乘法结果k[w7+w8-1:w8],并将高位乘法结果抛弃,其中,k*2j4的有效数据k位于乘法器输出结果的中间位置。
第二乘加子步骤S8032-3包括S8032-3:第二中间结果多路器将零输出至低位加法器。
第三乘加子步骤S8033-3包括S8033-3:低位加法器接收低位乘法结果k[w7+w8-1:w8]和零,并对低位乘法结果k[w7+w8-1:w8]和零进行加法运算,以获取更新后的第二中间结果k[w7+w8-1:w8],并将更新后的第二中间结果k[w7+w8-1:w8]通过第二输入多路器输入至寄存器B,同时将k[w7+w8-1:w8]输入至双口随机存取存储器。
由此,在第六时段内执行的步骤可以通过上述的硬件装置200来实现。在这个步骤中,与上述所类似地,步骤S8021-1至S8026-1实现了在乘法器前进行移位运算的技术效果,提高了后续运算的运算效率。同样的,步骤S8031-1和步骤S8033-3之间不需要移位运算步骤,能够使得乘加器的综合频率更高。
在第六时段中,硬件装置200的乘法器执行MC[w-1:0]与第五时段中得到的第二中间结果相乘的运算以获取乘法结果(也即是k*2j4=MC[w-1:0]*mres2*2j4),通过低位加法器保留更新后的第二中间结果(也即是k的某一分块)。由于mres2是一系列最低位有若干位0的数据的累加,所以mres2最低若干位也可能是0。在上述公式中j4表示为0的位数。j4在每次执行第六时段时可能不相同,并且j4可以基于aM和bM的分块方式来确定。
具体地,k是一个位宽为n+2q的数。具体地,当aM’和bM’的位宽为n+q时并将aM’和bM’进行分块处理时,k也需与aM’和bM’做分块方式相同或类似的分块处理,此时k位权最高的一个分块比aM或bM位权最高的一个分块长q。
此外,在每个图12中的运算过程循环中,w7和w8为整数,并且可以相同也可以不同。
通过第六时段中的运算,可以利用之前运算的一个或多个累加值便利地获取k值,而不需要额外的运算。
接下来,参考图16A和图16B进一步描述在第七时段中的运行的各个步骤。
图16A和图16B是示出根据本公开的一个或多个实施例的在第七时段内执行获取加解密运算中的中间结果组的方法800的流程图。
参考图16A和图16B,在第七时段内,方法800执行以下步骤S802-4和步骤S803-4零到若干次。具体地,在这样的情况下,乘加器的输入位宽w小于n+2q。
具体地,图9中的步骤S802包括步骤S802-4。图10中的步骤S803包括步骤S803-4。
具体地,参考图16A,步骤S802-4包括如下步骤S8021-4至S8026-4。
第一移位输入子步骤S8021包括S8021-4:第一移位器组对双口随机存取存储器中的模数N[n-1:0]的一个分块N[w5+w6-1:w6]进行移位计算以获取{N[w5+w6-1:w6]*2j3|j3∈Z}来替换第一移位数据集合,Z是整数。
第二移位输入子步骤S8022包括S8022-4:第一输入多路器从第一移位数据集合中选择模数N[w5+w6-1:w6]*2j3替换第一输入数据。
第三移位输入子步骤S8023包括S8023-4:寄存器A接收并存储替换后的第一输入数据。
第五移位输入子步骤S8025包括S8025-4:第二输入多路器选择第二中间结果mres2作为第二输入数据,此时mres2=k[w7+w8-1:w8]。
第六移位输入子步骤S8026-4包括S8026-4:寄存器B接收并存储第二输入数据mres2。
具体地,参考图16B,步骤S803-4包括如下步骤S8031-4至S8036-4。
第一乘加子步骤S8031包括S8031-4:乘法器将第一输入数据N[w5+w6-1:w6]*2j3与第二输入数据k[w7+w8-1:w8]相乘以获取乘法器输出结果pp3*2j3=N[w5+w6-1:w6]*k[w7+w8-1:w8]*2j3,以将乘法器输出结果的有效数据pp3的高一部分数据作为高位乘法结果pp3[w5+w7-1:w9],并将乘法器输出结果的有效数据pp3剩下的低一部分数据抛弃,其中,pp3*2j3的有效数据pp3位于乘法器输出结果的中间位置。
第五乘加子步骤S8035包括S8035-4:第一中间结果多路器将存储在寄存器D中的第一中间结果mres1输入至高位加法器。
第六乘加子步骤S8036包括S8036-4:高位加法器接收高位乘法结果pp2[w5+w7-1:w9]、第一中间结果mres1,并对高位乘法结果pp2[w5+w7-1:w9]、第一中间结果mres1和1进行加法运算以获取sum4=mres1+pp2[w5+w7-1:w9]+1来替换第一中间结果。
第七乘加子步骤S8037包括S8037-4:寄存器D接收并存储sum4作为更新后的第一中间结果mres1。
上述的w0至w9均为整数。
由此,在第七时段内执行的步骤可以通过上述的硬件装置200来实现。在这个步骤中,与上述所类似地,步骤S8021-4至S8026-4实现了在乘法器前进行移位运算的技术效果,提高了后续运算的运算效率。同样的,步骤S8031-4和步骤S8036-4之间不需要移位运算步骤,能够使得乘加器的综合频率更高。
在第七时段中,硬件装置200的乘法器可以执行N[n-1:0]的各个分块与第六时段中得到的第二中间结果(也即是k的某一个分块的值)相乘。如果将参与蒙哥马利模乘的数据都分为两个分块,那么在最后一次执行图12的运算结束时,第七时段中获取的更新后的第一中间结果和第二中间结果即是公式res1’=(aM’[n+q-1:0]*bM’[n+q-1:0]+k[n+2q-1:0]*N[n-1:0])*R-1的运算结果的高位数据和低位数据。如果将参与蒙哥马利模乘的数据分为两个分块以上,则在某些第四时段和某些第五时段中,可以把更新后的sum1写入双口随机存取存储器,这些sum1都可以是PM’[n+q-1:0]中的某个分块。
由此,整个分块的蒙哥马利模乘的运算将完成。
通过上述方法,可以处理参与蒙哥马利模乘运算中的数值(例如,aM、bM、MC和N)的位宽大于该硬件装置中的寄存器、加法器、乘法器等器件的输入位宽的情况。而图1A至图1C中的硬件装置由于在双口随机存取存储器和乘法器之间没有移位器来对数据进行移位运算处理,因此无法完成不均匀分块的蒙哥马利模乘运算,从而使得可以参加加解密运算的数值的位数受到硬件限制。而根据本公开中的一个或多个实施例则不受上述限制,从而提高了该硬件装置的应用灵活性。
已经参考图12至图16B描述了均等分块和不均等分块的情况下获取蒙哥马利模乘的情况。
VII.获取均等分为两块的蒙哥马利模乘的中间结果组的方法
下面以对要进行蒙哥马利模乘的数进行均等分为两个数据块为例,介绍均等分块的情况下根据本公开实施例的硬件装置200可以执行方法800。
例如,可以把n位的aM、bM、N、k分成两个n/2位的数来进行处理。同时,假设硬件装置200中的乘法器和加法器的输入位宽为w。可以假设w=n/2+q,q是上述描述的调整位宽。
可以通过在以下的各个两分块时段中执行以下步骤来计算res1=(aM[n-1:0]*bM[n-1:0]+k[n-1:0]*N[n-1:0])*R-1%N。
在第一两分块时段中执行步骤a:寄存器A获取aM[n/2-1,0],寄存器B获取bM[n/2-1,0],然后计算pp1[n-1:0]=aM[n/2-1:0]*bM[n/2-1:0],并将pp1[n-1,n/2]存入寄存器D,将pp1[n/2-1,0]存入寄存器B。
在第二两分块时段中执行步骤b:寄存器A获取MC[n/2-1,0],寄存器B保持pp1[n/2-1,0],然后计算k0[n-1,0]=MC[n/2-1,0]*pp1[n/2-1,0],并将k0[n-1,n/2]抛弃,将k0[n/2-1,0]存入寄存器B。此时,k0[n/2-1,0]是上述公式中的k的低n/2位数据k[n/2-1,0]。
在第三两分块时段中执行步骤c:寄存器A获取N[n/2-1,0],寄存器B保持k0,然后计算pp2=N[n-1:n/2]*k0[n/2-1:0],并将pp2[n/2-1,0]抛弃,之后计算s1=pp1[n-1:n/2]+pp2[n-1:n/2]+1,将s1存入寄存器B。
在第四两分块时段中执行步骤d:寄存器A获取aM[n-1,n/2],寄存器B获取bM[n/2-1,0],然后计算pp3=aM[n-1:n/2]*bM[n-1:n/2]。之后继续计算{carry1,s2}=s1+pp3[n/2-1:0]和s3=pp3[n-1:n/2]+carry1。并将s2保存到寄存器C,将s3保存到寄存器D。
在第五两分块时段中执行步骤e:寄存器A获取aM[n/2-1,0],寄存器B获取bM[n-1,n/2]。然后计算pp4=aM[n/2-1:0]*bM[n-1:n/2]。然后计算{carry2,s4}=s2+pp4[n/2-1:0]和s5=s3+pp4[n-1:n/2]+carry2。寄存器C保存s4,寄存器D保存s5。
在第六两分块时段中执行步骤f:寄存器A获取N[n-1,n/2],寄存器B获取k0。然后计算pp5=N[n-1:n/2]*k0[n/2-1:0]。再继续计算{carry3,s6}=s4+pp5[n/2-1:0]和s7=s5+pp5[n-1:n/2]+carry3。寄存器B保存s6,寄存器D保存s7。此时,已经可以获取运算aM*bM+N*k0的一部分结果。具体地,aM*bM+N*k0的结果应当是一个4*n/2+1位宽的数,而寄存器B保存的s6即是aM*bM+N*k0中的[n-1:n/2]部分的值。
在第七两分块时段中执行步骤g:寄存器A获取MC[n/2-1,0],寄存器B保持s6。然后计算k1[n-1,0]=MC[n/2-1:0]*s6。抛弃k1的前n/2位,并让寄存器B保存k1[n/2-1,0]。此时,k1[n/2-1,0]是上述公式中的k的高n/2位数据。
在第八两分块时段中执行步骤h:寄存器A获取N[n/2-1,0],寄存器B保持k1[n/2-1:0]。然后计算pp7=k1[n/2-1:0]*N[n/2-1:0]。再计算s8=s7+pp7[n-1:n/2]+1,并将s8存入寄存器D。
在第九两分块时段中执行步骤i:寄存器A获取aM[n-1,n/2],寄存器B获取bM[n-1,n/2]。然后计算pp8=aM[n-1:n/2]*bM[n-1:n/2]。再计算{carry4,s9}=s8+pp8[n/2-1:0]和s10=pp8[n-1:n/2]+carry4。寄存器C保持pp9,寄存器D保存s10。
在第十两分块时段中执行步骤j:寄存器A获取N[n-1,n/2],寄存器B获取k1[n/2-1:0]。然后计算pp9=N[n-1:n/2]*k1[n/2-1:0]。再计算{carry5,s11}=s9+pp9[n/2-1:0]和s12=s10+pp9[n-1:n/2]+carry5。将s11存入寄存器C,将s12存入寄存器D。
此时,寄存器D中存储的s12是pM的高n/2位数据,而寄存器C中存储的s11是pM的低n/2位数据。
类似地,在以上描述中,术语第一两分块时段、第二两分块时段…第十两分块时段表示通过可以对该硬件装置进行控制的状态机或任一逻辑电路、硬件电路对该硬件装置所执行的内容进行控制的一个或多个运行时段。在上述的一个或多个时段执行结束时,可以获取一个或多个中间结果组作为该硬件装置的输出结果,也可以不获取任何中间结果组作为该硬件装置的输出结果,而仅是作为下一时段的输入数据。此外各个两分块时段的执行时间可以相同,也可以不同。第一、第二这类术语也仅是用于区分不同的两分块时段,并不表示强制的运行顺序。同时各个两分块时段的实际运行时段可能重叠也可能不重叠,这将根据可以对该硬件装置进行控制的状态机或任一逻辑电路、硬件电路针对所需计算的数值而确定。
通过上述方法,可以处理参与蒙哥马利模乘运算中的数值(例如,aM、bM、MC和N)的位宽大于该硬件装置中的寄存器、加法器、乘法器等器件的输入位宽的情况。而图1A至图1C中的硬件装置由于在双口随机存取存储器和乘法器之间没有移位器来对数据进行移位运算处理,因此无法完成不均匀分块的蒙哥马利模乘运算,从而使得可以参加加解密运算的数值的位数受到硬件限制。而根据本公开中的一个或多个实施例则不受上述限制,从而提高了该硬件装置的应用灵活性。
VIII.获取蒙哥马利模乘的另一些中间结果组的方法
下面参考图17进一步描述可以利用硬件装置200执行来获取加解密运算中的中间结果组的又一些实施例。
图17是示出根据本公开的一个或多个实施例的一种获取加解密运算中的中间结果组的方法800的又一流程图。
参考图17根据本公开的一个或多个实施例的一种获取加解密运算中的中间结果组的方法800可以由获取加解密运算中的中间结果组的硬件装置(例如,硬件装置200)执行。获取加解密运算中的中间结果组的硬件装置还可以包括高位输出加法部件和低位输出加法部件。
方法800还可以包括:
第四步骤S804:高位输出加法部件从寄存器D中接收第一中间结果,并对第一中间结果进行加法运算。
第五步骤S805:低位输出加法部件从寄存器C中接收第二中间结果,并对第二中间结果进行加法运算。
由此,通过参考图17所示的方法800,获取加解密运算中的中间结果组的硬件装置(例如,硬件装置200)还可以执行将模乘的结果再加上一个或多个数的运算。这些加法运算与上述的乘法运算可以不在同一周期完成。寄存器C和寄存器D可以将这些运算与乘加器中的乘法器和加法器隔开。由此,可以在不增加计算所需的时钟周期个数的条件下提高综合频率。
如前文所述的蒙哥马利模乘和分块的蒙哥马利模乘的过程可以看出,与乘法器放在一起组成乘加器的这个加法器的输出,是下一个乘法运算使用的输入。例如,要与MC相乘的数(也即是上一个乘加运算的低位部分)是通过上一个乘法运算得出的,并且这个数将在下一个乘法运算作为输入使用。再例如,k的每一个分块,也是由一个乘法运算得出后,在下一个乘法运算中就要使用。乘加器是一个延迟很长的逻辑路径,通常情况下是整个电路中最长的逻辑路径,也即是该电路中的关键路径。为了减小关键路径(两个寄存器之间的逻辑路径之中延迟最长者)的延迟,尽量把其他逻辑与乘法器用寄存器隔开。
同时还需要与乘法器在同一时钟周期工作的加法器组合成一个乘加器。如果把与乘法器组成乘加器的加法器也隔开,则在上述与MC与一个数相乘的情况下,乘法器就必须空闲一个时钟周期,才能等到它需要的输入。这样会增加了整个计算所需的时钟周期个数。
例如,与加密运算相关联一个或多个数据还可以包括:加数C1和C2,其中,C1和C2为n位数据。而加密后的一个或多个数据还包括:加密结果res1’和res2’中的高位数据和低位数据。其中,加密结果res1’和res2’分别为:res1’=(aM’[n+q-1:0]*bM’[n+q-1:0]+k[n+2q-1:0]*N[n-1:0])*R-1+l*C1,或res2’=(aM’[n+q-1:0]*bM’[n+q-1:0]+k[n+2q-1:0]*N[n-1:0])*R-1+m*C2,其中,l和m为不为0的整数。上述的l和m可以是-12、-3、-1、1、3、12中的一个或多个。
接下来进一步描述通过上述方法800来执行将模乘结果再加上一个或多个数的运算的一个或多个实施例。
下面参考图18进一步描述方法800的第四步骤S804。
图18是示出根据本公开的一个或多个实施例的一种获取加解密运算中的中间结果组的方法800的第四步骤S804的流程图。
具体的,上述高位输出加法部件还包括:高位输出加法器、高位输出加法结果多路器、寄存器D1、高位加法移位器组和高位加法多路器组。
第四步骤S804还包括:
第一高位输出子步骤S804-1:高位输出加法器接收寄存器D中存储的第一中间结果,并对第一中间结果进行加法运算以获取第一输出结果。
第二高位输出子步骤S804-2:高位输出加法结果多路器选择第一输出结果和双口随机存取存储器中的数据,并将其作为高位所选输出数据输出至寄存器D1。
第三高位输出子步骤S804-3:寄存器D1接收并存储高位所选输出数据,并将其输出至双口随机存取存储器和高位加法移位器组。
第四高位输出子步骤S804-4:高位加法移位器组从寄存器D1中接收高位所选输出数据,并对高位所选输出数据进行移位计算以得到高位移位输出数据。
第五高位输出子步骤S804-5:高位加法多路器组选择高位移位输出数据和零之中的一个数据,并将其输出至高位输出加法器。
其中,对第一中间结果进行加法运算以获取第一输出结果是通过将第一中间结果与经过高位加法多路器组组选择的数据相加以获取第一输出结果来实现的。
由此,通过参考图18所示的方法800,获取加解密运算中的中间结果组的硬件装置(例如,硬件装置200)还可以执行将模乘的高位乘法结果再加上一个或多个数的运算,例如上述的:res1’=(aM’[n+q-1:0]*bM’[n+q-1:0]+k[n+2q-1:0]*N[n-1:0])*R-1+l*C1,其中,l和m为不为0的整数。上述的l和m可以是-12、-3、-1、1、3、12中的一个或多个。
由此,通过参考图18所示的方法800,获取加解密运算中的中间结果组的硬件装置(例如,硬件装置200)还可以执行将模乘的高位乘法结果再加上一个或多个数的运算。对高位乘法结果的加法运算与上述的乘法运算可以不在同一周期完成。寄存器D可以将这些运算与乘加器中的乘法器和加法器隔开,增强了蒙哥马利运算中各个步骤的独立性,提高了该硬件装置的整体运算效率。
下面参考图19进一步描述方法800的第五步骤S805。
图19是示出根据本公开的一个或多个实施例的一种获取加解密运算中的中间结果组的方法800的第五步骤S805的流程图。
具体地,上述低位输出加法部件还包括:低位输出加法器、低位输出加法结果多路器、寄存器C1、低位加法移位器组、低位加法多路器组和高位数据选择多路器。
第五步骤还包括以下步骤S805-1至S805-6。
第一低位输出子步骤S805-1:低位输出加法器接收寄存器C中存储的第二中间结果,并对第二中间结果进行加法运算以获取第二输出结果。
第二低位输出子步骤S805-2:低位输出加法结果多路器选择第二输出结果和双口随机存取存储器中的数据,并将其作为低位所选输出数据输出至寄存器C1。
第三低位输出子步骤S805-3:寄存器C1接收并存储低位所选输出数据,并将其输出至双口随机存取存储器和低位加法移位器组。
第四低位输出子步骤S805-4:低位加法移位器组从寄存器C1中接收低位所选输出数据,并对低位所选输出数据进行移位计算以得到低位移位输出数据。
第五低位输出子步骤S805-5:低位加法多路器组选择低位移位输出数据和零之中的一个数据,并将其输出至低位输出加法器。
第六低位输出子步骤S805-6:高位数据选择多路器选择寄存器D中存储的第二中间结果和零之中的一个,并将其输出至低位输出加法器。
其中,对第二中间结果进行加法运算以获取第二输出结果是通过将第二中间结果、经过高位数据选择多路器选择的数据、与经过低位加法多路器组选择的数据相加以获取第二输出结果来实现的。
由此,通过参考图19所示的方法800,获取加解密运算中的中间结果组的硬件装置(例如,硬件装置200)还可以执行将模乘的结果再加上一个或多个数的运算。例如上述的res2’=(aM’[n+q-1:0]*bM’[n+q-1:0]+k[n+2q-1:0]*N[n-1:0])*R-1+m*C2,其中,l和m为不为0的整数。上述的l和m可以是-12、-3、-1、1、3、12中的一个或多个。
由此,通过参考图19所示的方法800,获取加解密运算中的中间结果组的硬件装置(例如,硬件装置200)还可以执行将模乘的低位乘法结果再加上一个或多个数的运算。对低位乘法结果的加法运算与上述的乘法运算可以不在同一周期完成。寄存器C可以将这些运算与乘加器中的乘法器和加法器隔开,增强了蒙哥马利运算中各个步骤的独立性,提高了该硬件装置的整体运算效率。
IX.获取蒙哥马利模乘的又一些中间结果组的方法
接下来,参考图20,进一步描述通过硬件装置200计算res1’=(aM’[n+q-1:0]*bM’[n+q-1:0]+k[n+2q-1:0]*N[n-1:0])*R-1+l*C1的一个或多个实施例。
图20是示出根据本公开的一个或多个实施例的一种获取加解密运算中的中间结果组的方法800的第四步骤的又一流程图。
假设已经利用上述的硬件装置200通过根据本申请的一个或多个实施例的方法计算了中间结果,也即是(aM’[n+q-1:0]*bM’[n+q-1:0]+k[n+2q-1:0]*N[n-1:0])*R-1的某一个分块PM’[w11+w10-1,w10]。
上述方法800的第四步骤S804中的各个子步骤可以包括以下步骤S804-1’至S804-5’。
第一高位输出子步骤S804-1包括S804-1’:高位输出加法器接收寄存器D中存储的第一中间结果mres1,并对第一中间结果进行加法运算以获取第一输出结果res1=mres1+l*C1,其中,mres1=PM’[w11+w10-1,w10]。其中,0<w11+w10≤n+1,w10≥0,w11≤w。
第二高位输出子步骤S804-2包括S804-2’:高位输出加法结果多路器选择双口随机存取存储器中的数据C1,并将其作为高位所选输出数据C1输出至寄存器D1。
第三高位输出子步骤S804-3包括S804-3’:寄存器D1接收并存储高位所选输出数据C1,并将其输出至高位加法移位器组。
第四高位输出子步骤S804-4包括S804-4’:高位加法移位器组从寄存器D1中接收高位所选输出数据,并对高位所选输出数据进行移位计算以得到高位移位输出数据l*C1。
第五高位输出子步骤S804-5包括S804-5’:高位加法多路器组在高位移位输出数据和零之中选择高位移位输出数据l*C1,并将其输出至高位输出加法器。
其中,所述对第一中间结果进行加法运算以获取第一输出结果是通过将第一中间结果mres1与经过高位加法多路器组组选择的数据相加l*C1以获取第一输出结果res1’=mres1+l*C1来实现的。
由此,res1=(aM[n-1:0]*bM[n-1:0]+k[n-1:0]*N[n-1:0])*R-1+l*C1可以通过计算res1’=(aM’[n+q-1:0]*bM’[n+q-1:0]+k[n+2q-1:0]*N[n-1:0])*R-1+l*C1来替代地实现。res1=res1’%N。
上述步骤可以实现将模乘的高位乘法结果(也即是模乘结果的某一分块PM’[w11+w10-1,w10])再加上一个或多个数的运算。进行高位乘法结果的加法运算与上述的乘法运算可以不在同一周期完成。寄存器D可以将这些运算与乘加器中的乘法器和加法器隔开,增强了蒙哥马利运算中各个步骤的独立性,提高了该硬件装置的整体运算效率。
接下来,参考图21,进一步描述通过硬件装置200计算res2=(aM[n-1:0]*bM[n-1:0]+k[n-1:0]*N[n-1:0])*R-1+m*C2的一个或多个实施例。
图21是示出根据本公开的一个或多个实施例的一种获取加解密运算中的中间结果组的方法800的第五步骤的又一流程图。
假设已经利用上述的硬件装置200通过根据本申请的一个或多个实施例的方法计算了中间结果PM[n/2-1,0],也即是PM’=(aM’[n+q-1:0]*bM’[n+q-1:0]+k[n+2q-1:0]*N[n-1:0])*R-1的某一分块的数据PM’[w13+w12-1,w12]。
上述方法800的第五步骤中的各个子步骤可以包括以下步骤。
第一低位输出子步骤S805-1包括S805-1’:低位输出加法器接收寄存器C中存储的第二中间结果mres2,并对第二中间结果进行加法运算以获取第二输出结果res2’=mres2+m*C2,其中,mres2’=PM’[w13+w12-1,w12]。其中,0<w13+w12≤n+1,w≥w13。
第二低位输出子步骤S805-2包括S805-2’:低位输出加法结果多路器选择双口随机存取存储器中的数据C2,并将其作为低位所选输出数据输出至寄存器C1。
第三低位输出子步骤包括S805-3’:寄存器C1接收并存储低位所选输出数据,并将其输出低位加法移位器组。
第四低位输出子步骤包括S805-4’:低位加法移位器组从寄存器C1中接收低位所选输出数据C2,并对低位所选输出数据进行移位计算以得到低位移位输出数据m*C2。
第五低位输出子步骤包括S805-5’:低位加法多路器组选择低位移位输出数据m*C2,并将其输出至低位输出加法器。
第六低位输出子步骤包括S805-6’:高位数据选择多路器选择将零输出至低位输出加法器。
其中,所述对第二中间结果进行加法运算以获取第二输出结果是通过将第二中间结果mres2、经过高位数据选择多路器选择的零、与经过低位加法多路器组选择的数据相加m*C2以获取第二输出结果res2=mres2+m*C2来实现的。
上述的w10至w13均为整数。
由此,res2=(aM[n-1:0]*bM[n-1:0]+k[n-1:0]*N[n-1:0])*R-1+m*C2可以通过上述方法实现。上述步骤可以实现将模乘的低位乘法结果(也即是模乘结果的某一分块PM’[w13+w12-1,w12])再加上一个或多个数的运算。进行低位乘法结果的加法运算与上述的乘法运算可以不在同一周期完成。寄存器C可以将这些运算与乘加器中的乘法器和加法器隔开,增强了蒙哥马利运算中各个步骤的独立性,提高了该硬件装置的整体运算效率。
此外,根据本公开的一些实施例还提供了一种获取加解密运算中的中间结果组的系统,其包括:双口随机存取存储器、移位输入部件、和乘加器。该系统被配置为实现根据本公开的一个或多个实施例的方法。
上述获取加解密运算中的中间结果组的系统还可以包括高位输出加法部件和低位输出加法部件。该系统也可以被配置为执行根据本公开的一个或多个实施例的方法。
本公开实施例的获取加解密运算中的中间结果组的方法、硬件装置和系统,能够缩短加解密运算中的核心运算中的乘法器-加法器路径,使得可以实现加解密运算中的核心运算的关键运算部件的应用率提高,从而提高了该硬件装置整体的应用效率。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
在本申请所提供的所有实施例中,应该理解到,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,该模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(双口随机存取存储器,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。需要说明的是,在本文中,诸如第一和第三等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上仅为本公开的优选实施例而已,并不用于限制本公开,对于本领域的技术人员来说,本公开可以有各种更改和变化。凡在本公开的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。应注意到:相似的标号和字母在下面的图中表示类似项,因此,一旦某一项在一个图中被定义,则在随后的图中不需要对其进行进一步定义和解释。
以上,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应以所附权利要求及其等同物的保护范围为准。

Claims (23)

1.一种用于获取加解密运算中的中间结果组的硬件装置,其包括:
双口随机存取存储器,被配置为存储与所述加解密运算相关联一个或多个数据;
移位输入部件,与所述双口随机存取存储器连接,所述移位输入部件被配置为从双口随机存取存储器中所存储的一个或多个数据中选择第一数据和第二数据,对第一数据和第二数据分别进行移位运算以获取并存储第一输入数据和第二输入数据;以及
乘加器,与所述移位输入部件连接,所述乘加器被配置为对第一输入数据和第二输入数据两者进行乘法运算和加法运算,以获取并存储第一中间结果和第二中间结果作为所述中间结果组。
2.如权利要求1所述的获取加解密运算中的中间结果组的硬件装置,其中,所述移位输入部件包括:
第一移位器组,与所述双口随机存取存储器连接,所述第一移位器组被配置为对双口随机存取存储器中所存储的一个或多个数据中的第一数据进行移位运算以获取第一移位数据集合;
第一输入多路器,与所述第一移位器组连接,所述第一输入多路器被配置为从第一移位数据集合中选择第一输入数据;
寄存器A,与所述第一输入多路器连接,所述寄存器A被配置为接收并存储第一输入数据;
第二移位器组,与所述双口随机存取存储器连接,所述第二移位器组被配置为对双口随机存取存储器中所存储的一个或多个数据中的第二数据进行移位运算以获取第二移位数据集合;
第二输入多路器,与所述第二移位器组和所述乘加器连接,所述第二输入多路器被配置为从第二移位数据集合和所述中间结果组中选择并输出第二输入数据;以及
寄存器B,与所述第二输入多路器连接,所述寄存器B被配置为接收并存储第二输入数据。
3.如权利要求2所述的获取加解密运算中的中间结果组的硬件装置,其中,所述乘加器包括:
乘法器,与寄存器A和寄存器B连接,所述乘法器被配置为将第一输入数据与第二输入数据相乘以获取乘法结果,其中所述乘法结果的高一部分数据为高位乘法结果,所述乘法结果的低一部分数据为低位乘法结果;
第二中间结果多路器,与寄存器D和寄存器C连接,所述第二中间结果多路器被配置为选择存储在寄存器D中的第一中间结果、存储在寄存器C中的第二中间结果、和零中的至少一个,并将其输出至低位加法器;
低位加法器,与乘法器和第二输入多路器连接,低位加法器被配置为接收低位乘法结果和经第二中间结果多路器选择的数据,并对低位乘法结果和经第二中间结果多路器选择的数据进行加法运算,以获取更新后的第二中间结果,并将更新后的第二中间结果输入至第二输入多路器,并将更新后的第二中间结果的进位输入至高位加法器;
寄存器C与低位加法器连接,所述寄存器C被配置为接收并存储更新后的第二中间结果来替换之前存储的第二中间结果;
第一中间结果多路器与寄存器D连接,所述第一中间结果多路器被配置为将在存储在寄存器D中的第一中间结果和零中选择一个数据,并将所述数据输入至高位加法器;
高位加法器与乘法器和第一中间结果多路器连接,所述高位加法器被配置为接收高位乘法结果、第二中间结果中的进位、经第一中间结果多路器选择的数据,并对高位乘法结果、第二中间结果中的进位、经第一中间结果多路器选择的数据进行加法运算以获取更新后的第一中间结果;
寄存器D与所述高位加法器连接,所述寄存器D被配置为接收更新后的第一中间结果来替换之前存储的第一中间结果。
4.如权利要求3所述的获取加密运算中的中间结果组的硬件装置,还包括:
高位输出加法部件,被配置为从寄存器D中接收第一中间结果,并对第一中间结果进行加法运算,所述高位输出加法部件包括:
高位输出加法器,与寄存器D连接,被配置为接收寄存器D中存储的第一中间结果,并对第一中间结果进行加法运算以获取第一输出结果;
高位输出加法结果多路器,与高位输出加法器连接,所述高位输出加法结果多路器被配置为选择第一输出结果和双口随机存取存储器中的数据,并将其作为高位所选输出数据输出至寄存器D1;
寄存器D1,与高位输出加法结果多路器连接,被配置为接收并存储高位所选输出数据,并将其输出至双口随机存取存储器和高位加法移位器组;
高位加法移位器组,与寄存器D1连接,所述高位加法移位器组被配置为从寄存器D1中接收高位所选输出数据,并对高位所选输出数据进行移位计算以得到高位移位输出数据;
高位加法多路器组,与高位加法移位器组连接,所述高位加法多路器组被配置为选择高位移位输出数据和零之中的一个数据,并将其输出至高位输出加法器;
其中,所述高位输出加法器对第一中间结果进行加法运算以获取第一输出结果是通过将第一中间结果与经过高位加法多路器组组选择的数据相加以获取第一输出结果来实现的。
5.如权利要求3所述的获取加解密运算中的中间结果组的硬件装置,还包括:
低位输出加法部件,被配置为从寄存器C中接收第二中间结果,并对第二中间结果进行加法运算,所述低位输出加法部件包括:
低位输出加法器,与寄存器C连接,被配置为接收寄存器C中存储的第二中间结果,并对第二中间结果进行加法运算以获取第二输出结果;
低位输出加法结果多路器,与低位输出加法器连接,所述低位输出加法结果多路器被配置为选择第二输出结果和双口随机存取存储器中的数据,并将其作为低位所选输出数据输出至寄存器C1;
寄存器C1,与低位输出加法结果多路器连接,被配置为接收并存储低位所选输出数据,并将其输出至双口随机存取存储器和低位加法移位器组;
低位加法移位器组,与寄存器C1连接,所述低位加法移位器组被配置为从寄存器C1中接收低位所选输出数据,并对低位所选输出数据进行移位计算以得到低位移位输出数据;
低位加法多路器组,与低位加法移位器组连接,所述低位加法多路器组被配置为选择低位移位输出数据和零之中的一个数据,并将其输出至低位输出加法器;
高位数据选择多路器,与寄存器D连接,所述高位数据选择多路器被配置为选择寄存器D中存储的第二中间结果和零之中的一个,并将其输出至低位输出加法器;
其中,所述低位输出加法器对第二中间结果进行加法运算以获取第二输出结果是通过将第二中间结果、经过高位数据选择多路器选择的数据、与经过低位加法多路器组选择的数据相加以获取第二输出结果来实现的。
6.一种获取加解密运算中的中间结果组的方法,所述方法由获取加解密运算中的中间结果组的硬件装置执行,所述获取加解密运算中的中间结果组的硬件装置包括双口随机存取存储器、移位输入部件和乘加器,所述方法包括:
第一步骤:所述双口随机存取存储器存储与所述加密运算相关联的一个或多个数据;
第二步骤:所述移位输入部件从双口随机存取存储器中所存储的一个或多个数据中选择第一数据和第二数据,对第一数据和第二数据分别进行移位运算以获取并存储第一输入数据和第二输入数据;
第三步骤:所述乘加器对第一输入数据和第二输入数据进行乘法运算和加法运算,以获取并存储第一中间结果和第二中间结果作为中间结果组。
7.如权利要求6所述的获取加解密运算中的中间结果组的方法,
其中,所述与加解密运算相关联一个或多个数据包括:乘数aM’[n+q-1:0]、被乘数bM’[n+q-1:0]、常数MC、模数N[n-1:0],其中,n为大于4的整数,q表示调整位宽并且q为大于零的整数;
其中,乘数aM’[n+q-1:0]满足aM[n-1:0]=aM’[n+q-1:0]%N[n-1:0],aM[n-1:0]是乘数A经过公式aM[n-1:0]=A*R%N转为蒙哥马利域后的数;
其中,被乘数bM’[n+q-1:0]满足bM[n-1:0]=bM’[n+q-1:0]%N[n-1:0],bM[n-1:0]是被乘数B经过公式bM[n-1:0]=B*R%N转为蒙哥马利域后的数;
其中,R=2n+2q
其中,所述中间结果组包括:aM[n-1:0]和bM[n-1:0]的蒙哥马利模乘结果PM的高位数据和低位数据,PM=PM’%N[n-1:0]并且PM’=(aM’[n+q-1:0]*bM’[n+q-1:0]+k[n+2q-1:0]*N[n-1:0])*R-1
其中,MC是使得MC*N[n-1:0]的结果的2进制表示的最低n+2q位全为1的常数;
其中,k为MC*aM’[n+q-1:0]*bM’[n+q-1:0]的低n+2q位的结果;
其中,响应于乘加器的输入位宽w大于n+2q,则MC的位宽为n+2q;
其中,响应于乘加器的输入位宽w小于n+2q,则MC的位宽为w。
8.如权利要求7所述的获取加解密运算中的中间结果组的方法,其中,所述移位输入部件还包括:第一移位器组、第一输入多路器、寄存器A、第二移位器组、第二输入多路器和寄存器B;
其中,所述第二步骤还包括:
第一移位输入子步骤:第一移位器组对双口随机存取存储器中所存储的一个或多个数据中的第一数据进行移位运算以获取第一移位数据集合;
第二移位输入子步骤:第一输入多路器从第一移位数据集合中选择第一输入数据;
第三移位输入子步骤:寄存器A接收并存储第一输入数据;
第四移位输入子步骤:第二移位器组对双口随机存取存储器中所存储的一个或多个数据中的第二数据进行移位运算以获取第二移位数据集合;
第五移位输入子步骤:第二输入多路器从第二移位数据集合和所述中间结果组中选择并输出第二输入数据;以及
第六移位输入子步骤:寄存器B接收并存储第二输入数据。
9.如权利要求8所述的获取加解密运算中的中间结果组的方法,其中,所述乘加器包括乘法器、第一中间结果多路器、高位加法器、寄存器D、低位加法器、第二中间结果多路器和寄存器C;
其中,所述第三步骤包括:
第一乘加子步骤:乘法器将第一输入数据与第二输入数据相乘以获取乘法结果,其中所述乘法结果的高一部分数据为高位乘法结果,所述乘法结果的低一部分数据为低位乘法结果;
第二乘加子步骤:第二中间结果多路器选择存储在寄存器D中的第一中间结果、存储在寄存器C中的第二中间结果、和零中的至少一个,并将其输出至低位加法器;
第三乘加子步骤:低位加法器接收低位乘法结果和经第二中间结果多路器选择的数据,并对低位乘法结果和经第二中间结果多路器选择的数据进行加法运算,以获取更新后的第二中间结果,并将更新后的第二中间结果输入至第二输入多路器,并将更新后的第二中间结果的进位输入至高位加法器;
第四乘加子步骤:寄存器C接收并存储更新后的第二中间结果来替换之前存储的第二中间结果;
第五乘加子步骤:第一中间结果多路器将在存储在寄存器D中的第一中间结果和零中选择一个数据,并将所述数据输入至高位加法器;
第六乘加子步骤:高位加法器接收高位乘法结果、第二中间结果中的进位、经第一中间结果多路器选择的数据,并对高位乘法结果、第二中间结果中的进位、经第一中间结果多路器选择的数据进行加法运算以获取更新后的第一中间结果;
第七乘加子步骤:寄存器D接收更新后的第一中间结果来替换之前存储的第一中间结果。
10.如权利要求7所述的获取加解密运算中的中间结果组的方法,其中,所述获取加解密运算中的中间结果组的硬件装置还包括高位输出加法部件和低位输出加法部件,
其中,所述与加密运算相关联一个或多个数据还包括:加数C1和C2,其中,C1和C2为n位数据,
所述加解密运算中的中间结果组还包括:中间结果res1’和res2’中的高位数据和低位数据;
其中,中间结果res1’和res2’分别为:
res1’=(aM’[n+q-1:0]*bM’[n+q-1:0]+k[n+2q-1:0]*N[n-1:0])*R-1+l*C1,或
res2’=(aM’[n+q-1:0]*bM’[n+q-1:0]+k[n+2q-1:0]*N[n-1:0])*R-1+m*C2,
其中,l和m为不为0的整数,
其中,所述获取加解密运算中的中间结果组的硬件装置的可输出结果包括res1和res2,并且res1=res1’%N,res2=res2’%N。
11.如权利要求10所述的获取加解密运算中的中间结果组的硬件装置,所述l和m是-12、-3、-1、1、3、12中的一个或多个。
12.如权利要求7所述的获取加解密运算中的中间结果组的方法,其中,响应于乘加器的输入位宽w大于n+2q,所述方法执行:
在第一时段中执行以下步骤:
所述第二步骤包括:所述移位输入部件从双口随机存取存储器中所存储的一个或多个数据中选择第一数据aM’[n+q-1:0]和第二数据bM’[n+q-1:0],对第一数据aM’[n+q-1:0]和第二数据bM’[n+q-1:0]分别进行移位运算以获取并存储第一输入数据aM’[n+q-1:0]*2t1和第二输入数据bM’[n+q-1:0]*2t2
所述第三步骤包括:所述乘加器对第一输入数据aM’[n+q-1:0]*2t1和第二输入数据bM’[n+q-1:0]*2t2进行乘法运算product1[2n+2q-1:0]*2t1+t2=aM’[n+q-1:0]*bM’[n+q-1:0]*2t1+t2,以获取并存储第一中间结果product1[2n+2q-1:n+2q]和第二中间结果product1[n+2q-1:0]*2t1+t2作为中间结果组;
在第二时段中执行以下步骤:
所述第二步骤包括:所述移位输入部件从双口随机存取存储器中所存储的一个或多个数据中选择第一数据MC[n+2q-1:0],并获取所述第二中间结果product1[n+2q-1:0]*2t1+t2作为第二数据,对第二数据product1[n+2q-1:0]*2t1+t2进行移位运算,并存储第一输入数据MC[n+2q-1:0]和第二输入数据product1[n+2q-1:0]*2t3
所述第三步骤包括:所述乘加器对第一输入数据MC[n+2q-1:0]和第二输入数据product1[n+2q-1:0]*2t3进行乘法运算product2[2n+2q-1:0]*2t3=MC[n+2q-1:0]*product1[n+2q-1:0]*2t3,以获取并存储product2[n+2q-1:0]*2t3以作为更新后的第二中间结果product2[n+2q-1:0]*2t3
在第三时段中执行以下步骤:
所述第二步骤包括:所述移位输入部件从双口随机存取存储器中所存储的一个或多个数据中选择第一数据N[n-1:0],并获取所述第二中间结果product2[n+2q-1:0]*2t3作为第二数据,对第一数据N[n-1:0]和第二数据product2[n+2q-1:0]*2t3进行移位运算以获取并存储第一输入数据N[n-1:0]*2t4和第二输入数据product2[n+2q-1:0]*2t5
所述第三步骤包括:所述乘加器对第一输入数据N[n-1:0]*2t4和第二输入数据product2[n+2q-1:0]*2t5进行乘法运算product3[2n+2q-1:0]*2t4+t5=N[n-1:0]*product2[n+2q-1:0]*2t4+t5,并进行加法运算PM’[n+q-1:0]=(product3[2n+2q-1:0]+product1[2n+2q-1:0])*R-1
13.如权利要求9所述的获取加解密运算中的中间结果组的方法,其中,响应于乘加器的输入位宽w小于n+2q,在第四时段内依次执行以下步骤零到若干次,
所述第一移位输入子步骤包括:第一移位器组对双口随机存取存储器中的乘数aM’[n+q-1:0]的一个分块aM’[w1+w0-1:w0]进行移位计算以获取{aM’[w1+w0-1:w0]*2j1|j1∈Z}作为第一移位数据集合,Z是整数;
所述第二移位输入子步骤包括:第一输入多路器从第一移位数据集合中选择aM’[w1+w0-1:w0]*2j1作为第一输入数据;
所述第三移位输入子步骤包括:寄存器A接收并存储第一输入数据;
所述第四移位输入子步骤包括:第二移位器组对双口随机存取存储器中的被乘数bM’[n+q-1:0]的一个分块bM’[w3+w2-1:w2]进行移位计算以获取{bM’[w3+w2-1:w2]*2j2|j2∈Z}作为第二移位数据集合;
所述第五移位输入子步骤包括:第二输入多路器从第二移位数据集合中选择bM’[w3+w2-1:w2]*2j2作为第二输入数据;
所述第六移位输入子步骤包括:寄存器B接收并存储第二输入数据;
所述第一乘加子步骤包括:乘法器将第一输入数据aM’[w1+w0-1:w0]*2j1与第二输入数据bM’[w3+w2-1:w2]*2j2相乘以获取乘法器输出结果pp1[w1+w3-1:0]*2j1+j2=aM’[w1+w0-1:w0]*bM’[w3+w2-1:w2]*2j1+j2,以将乘法器输出结果的有效数据的高一部分数据作为高位乘法结果pp1[w1+w3-1:w4]和乘法器输出结果的有效数据的低一部分数据作为低位乘法结果pp1[w4-1:0]*2j1+j2,其中,pp1[w1+w3-1:0]*2j1+j2的有效数据pp1[w1+w3-1:0]位于乘法器输出结果的中间位置;
所述第二乘加子步骤包括:第二中间结果多路器选择第一中间结果mres1、第二中间结果mres2和零中的一个作为第一加数adder1输出至低位加法器;
所述第三乘加子步骤包括:低位加法器接收低位乘法结果pp1[w4-1:0]*2j1+j2和第一加数adder1,并对低位乘法结果和第一加数adder1进行加法运算(carry,sum1)=pp1[w4-1:0]*2j1+j2+adder1,以获取更新后的第二中间结果sum1,其中carry表示计算sum1时的进位,并将更新后的第二中间结果sum1输入至第二输入多路器,并将更新后的第二中间结果sum1的进位carry输入至高位加法器;
所述第四乘加子步骤包括:寄存器C接收并存储sum1作为更新后的第二中间结果mres2;
所述第五乘加子步骤包括:第一中间结果多路器选择零和第一中间结果mres1中的一个作为第二加数adder2输入至高位加法器;
所述第六乘加子步骤包括:高位加法器接收高位乘法结果pp1[w1+w3-1:w4]和adder2,并对高位乘法结果pp1[w1+w3-1:w4]和adder2进行加法运算以获取更新后的第一中间结果sum2=pp1[w1+w3-1:w4]+adder2+carry;
所述第七乘加子步骤包括:寄存器D接收并存储sum2作为更新后的第一中间结果mres1。
14.如权利要求9所述的获取加解密运算中的中间结果组的方法,其中,响应于乘加器的输入位宽w小于n+2q,在第五时段内执行以下步骤零到若干次,
所述第一移位输入子步骤包括:第一移位器组对双口随机存取存储器中的模数N[n-1:0]的一个分块N[w5+w6-1:w6]进行移位计算以获取{N[w5+w6-1:w6]*2j3|j3∈Z}来替换第一移位数据集合,Z是整数;
所述第二移位输入子步骤包括:第一输入多路器从第一移位数据集合中选择模数N[w5+w6-1:w6]*2j3替换第一输入数据;
所述第三移位输入子步骤包括:寄存器A接收并存储替换后的第一输入数据;
所述第四移位输入子步骤包括:第二移位器组获取双口随机存取存储器中的k[w7+w8-1:w8];
所述第五移位输入子步骤包括:第二输入多路器选择k[w7+w8-1:w8]作为第二输入数据;
所述第六移位输入子步骤包括:寄存器B接收并存储第二输入数据k[w7+w8-1:w8];
所述第一乘加子步骤包括:乘法器将第一输入数据N[w5+w6-1:w6]*2j3与第二输入数据k[w7+w8-1:w8]相乘以获取乘法器输出结果pp2*2j3=N[w5+w6-1:w6]*k[w7+w8-1:w8]*2j3,以将乘法器输出结果的有效数据pp2的高一部分数据作为高位乘法结果pp2[w5+w7-1:w9],并将乘法器输出结果的有效数据pp2的低一部分数据作为低位乘法结果pp2[w9-1:0]*2j3,其中,pp2*2j3的有效数据pp2位于乘法器输出结果的中间位置;
所述第二乘加子步骤包括:第二中间结果多路器选择第二中间结果mres2输出至低位加法器;
所述第三乘加子步骤包括:低位加法器接收低位乘法结果pp2[w9-1:0]*2j3和第二中间结果mres2,并对低位乘法结果和第二中间结果mres2进行加法运算,以获取更新后的第二中间结果sum3=mres2+pp2[w9-1:0],并将更新后的第二中间结果sum3的进位carry输入至高位加法器;
所述第四乘加子步骤包括:寄存器C接收并存储第二中间结果sum3作为更新后的mres2;
所述第五乘加子步骤包括:第一中间结果多路器将存储在寄存器D中的第一中间结果mres1输入至高位加法器;
所述第六乘加子步骤包括:高位加法器接收高位乘法结果pp2[w5+w7-1:w9]、第一中间结果mres1,并对高位乘法结果pp2[w5+w7-1:w9]、第一中间结果mres1和进位carry进行加法运算以获取sum4=mres1+pp2[w5+w7-1:w9]+carry来替换第一中间结果;
所述第七乘加子步骤包括:寄存器D接收并存储sum4作为更新后的第一中间结果mres1。
15.如权利要求9所述的获取加解密运算中的中间结果组的方法,其中,响应于乘加器的输入位宽w小于n+2q,在第六时段内,执行以下步骤:
所述第一移位输入子步骤包括:第一移位器组读取双口随机存取存储器中的MC[w-1:0];
所述第二移位输入子步骤包括:第一输入多路器选择MC[w-1:0]替换第一输入数据;
所述第三移位输入子步骤包括:寄存器A接收并存储替换后的第一输入数据MC[w-1:0];
所述第五移位输入子步骤包括:第二输入多路器选择第二中间结果mres2作为第二输入数据;
所述第六移位输入子步骤包括:寄存器B接收并存储第二中间结果mres2;
所述第一乘加子步骤包括:乘法器将第一输入数据MC[w-1:0]与第二输入数据mres2相乘以获取乘法器输出结果k*2j4=MC[w-1:0]*mres2*2j4,以将乘法器输出结果的有效数据k的低一部分数据作为低位乘法结果k[w7+w8-1:w8],并将高位乘法结果抛弃,其中,k*2j4的有效数据k位于乘法器输出结果的中间位置;
所述第二乘加子步骤包括:第二中间结果多路器将零输出至低位加法器;
所述第三乘加子步骤包括:低位加法器接收低位乘法结果k[w7+w8-1:w8]和零,并对低位乘法结果k[w7+w8-1:w8]和零进行加法运算,以获取更新后的第二中间结果k[w7+w8-1:w8],并将更新后的第二中间结果k[w7+w8-1:w8]通过第二输入多路器输入至寄存器B,同时将k[w7+w8-1:w8]输入至双口随机存取存储器。
16.如权利要求9所述的获取加解密运算中的中间结果组的方法,其中,响应于乘加器的输入位宽w小于n+2q,在第七时段内,执行以下步骤:
所述第一移位输入子步骤包括:第一移位器组对双口随机存取存储器中的模数N[n-1:0]的一个分块N[w5+w6-1:w6]进行移位计算以获取{N[w5+w6-1:w6]*2j3|j3∈Z}来替换第一移位数据集合,Z是整数;
所述第二移位输入子步骤包括:第一输入多路器从第一移位数据集合中选择模数N[w5+w6-1:w6]*2j3替换第一输入数据;
所述第三移位输入子步骤包括:寄存器A接收并存储替换后的第一输入数据;
所述第五移位输入子步骤包括:第二输入多路器选择第二中间结果mres2作为第二输入数据,其中,mres2=k[w7+w8-1:w8];
所述第六移位输入子步骤包括:寄存器B接收并存储第二输入数据mres2;
所述第一乘加子步骤包括:乘法器将第一输入数据N[w5+w6-1:w6]*2j3与第二输入数据k[w7+w8-1:w8]相乘以获取乘法器输出结果pp3*2j3=N[w5+w6-1:w6]*k[w7+w8-1:w8]*2j3,以将乘法器输出结果的有效数据pp3的高一部分数据作为高位乘法结果pp3[w5+w7-1:w9],并将乘法器输出结果的有效数据pp3剩下的低一部分数据抛弃,其中,pp3*2j3的有效数据pp3位于乘法器输出结果的中间位置;
所述第五乘加子步骤包括:第一中间结果多路器将存储在寄存器D中的第一中间结果mres1输入至高位加法器;
所述第六乘加子步骤包括:高位加法器接收高位乘法结果pp2[w5+w7-1:w9]、第一中间结果mres1,并对高位乘法结果pp2[w5+w7-1:w9]、第一中间结果mres1和1进行加法运算以获取sum4=mres1+pp2[w5+w7-1:w9]+1来替换第一中间结果;
所述第七乘加子步骤包括:寄存器D接收并存储sum4作为更新后的第一中间结果mres1。
17.如权利要求10所述的获取加解密运算中的中间结果组的方法,其中,所述方法还包括:
第四步骤:高位输出加法部件从寄存器D中接收第一中间结果,并对第一中间结果进行加法运算;
第五步骤:低位输出加法部件从寄存器C中接收第二中间结果,并对第二中间结果进行加法运算。
18.如权利要求17所述的获取加解密运算中的中间结果组的方法,其中,所述高位输出加法部件还包括:高位输出加法器、高位输出加法结果多路器、寄存器D1、高位加法移位器组和高位加法多路器组,其中,所述第四步骤还包括:
第一高位输出子步骤:高位输出加法器接收寄存器D中存储的第一中间结果,并对第一中间结果进行加法运算以获取第一输出结果;
第二高位输出子步骤:高位输出加法结果多路器选择第一输出结果和双口随机存取存储器中的数据,并将其作为高位所选输出数据输出至寄存器D1;
第三高位输出子步骤:寄存器D1接收并存储高位所选输出数据,并将其输出至双口随机存取存储器和高位加法移位器组;
第四高位输出子步骤:高位加法移位器组从寄存器D1中接收高位所选输出数据,并对高位所选输出数据进行移位计算以得到高位移位输出数据;
第五高位输出子步骤:高位加法多路器组选择高位移位输出数据和零之中的一个数据,并将其输出至高位输出加法器;
其中,所述对第一中间结果进行加法运算以获取第一输出结果是通过将第一中间结果与经过高位加法多路器组组选择的数据相加以获取第一输出结果来实现的。
19.如权利要求17所述的获取加解密运算中的中间结果组的方法,其中,所述低位输出加法部件还包括:低位输出加法器、低位输出加法结果多路器、寄存器C1、低位加法移位器组、低位加法多路器组和高位数据选择多路器组,其中,所述第五步骤还包括:
第一低位输出子步骤:低位输出加法器接收寄存器C中存储的第二中间结果,并对第二中间结果进行加法运算以获取第二输出结果;
第二低位输出子步骤:低位输出加法结果多路器选择第二输出结果和双口随机存取存储器中的数据,并将其作为低位所选输出数据输出至寄存器C1;
第三低位输出子步骤:寄存器C1接收并存储低位所选输出数据,并将其输出至双口随机存取存储器和低位加法移位器组;
第四低位输出子步骤:低位加法移位器组从寄存器C1中接收低位所选输出数据,并对低位所选输出数据进行移位计算以得到低位移位输出数据;
第五低位输出子步骤:低位加法多路器组选择低位移位输出数据和零之中的一个数据,并将其输出至低位输出加法器;
第六低位输出子步骤:高位数据选择多路器组选择寄存器D中存储的第二中间结果和零之中的一个,并将其输出至低位输出加法器;
其中,所述对第二中间结果进行加法运算以获取第二输出结果是通过将第二中间结果、经过高位数据选择多路器组选择的数据、与经过低位加法多路器组选择的数据相加以获取第二输出结果来实现的。
20.如权利要求18所述的获取加解密运算中的中间结果组的方法,其中:
第一高位输出子步骤包括:高位输出加法器接收寄存器D中存储的第一中间结果mres1,并对第一中间结果mres1进行加法运算以获取第一输出结果res1=mres1+l*C1,其中,mres1=PM’[w11+w10-1,w10];
第二高位输出子步骤包括:高位输出加法结果多路器选择双口随机存取存储器中的数据C1,并将其作为高位所选输出数据C1输出至寄存器D1;
第三高位输出子步骤包括:寄存器D1接收并存储高位所选输出数据C1,并将其输出至高位加法移位器组;
第四高位输出子步骤包括:高位加法移位器组从寄存器D1中接收高位所选输出数据,并对高位所选输出数据进行移位计算以得到高位移位输出数据l*C1;
第五高位输出子步骤包括:高位加法多路器组在高位移位输出数据和零之中选择高位移位输出数据l*C1,并将其输出至高位输出加法器;
其中,所述对第一中间结果进行加法运算以获取第一输出结果是通过将第一中间结果mres1与经过高位加法多路器组组选择的数据相加l*C1以获取第一输出结果res1’=mres1+l*C1来实现的。
21.如权利要求19所述的获取加解密运算中的中间结果组的方法,其中:
第一低位输出子步骤包括:低位输出加法器接收寄存器C中存储的第二中间结果mres2,并对第二中间结果进行加法运算以获取第二输出结果res2’=mres2+m*C2;
第二低位输出子步骤包括:低位输出加法结果多路器选择双口随机存取存储器中的数据C2,并将其作为低位所选输出数据输出至寄存器C1;
第三低位输出子步骤包括:寄存器C1接收并存储低位所选输出数据,并将其输出低位加法移位器组;
第四低位输出子步骤包括:低位加法移位器组从寄存器C1中接收低位所选输出数据C2,并对低位所选输出数据进行移位计算以得到低位移位输出数据m*C2;
第五低位输出子步骤包括:低位加法多路器组选择低位移位输出数据m*C2,并将其输出至低位输出加法器;
第六低位输出子步骤包括:高位数据选择多路器选择将零输出至低位输出加法器;
其中,所述对第二中间结果进行加法运算以获取第二输出结果是通过将第二中间结果mres2、经过高位数据选择多路器选择的零、与经过低位加法多路器组选择的数据相加m*C2以获取第二输出结果res2=mres2+m*C2来实现的。
22.一种获取加解密运算中的中间结果组的系统,包括:双口随机存取存储器、移位输入部件、和乘加器,其被配置为执行权利要求6-9和12-16之一所述的方法。
23.如权利要求22所述的获取加解密运算中的中间结果组的系统,其还包括高位输出加法部件和低位输出加法部件,其被配置为执行权利要求6-21之一所述的方法。
CN201910245685.9A 2019-03-28 2019-03-28 获取加解密运算中的中间结果组的方法、硬件装置和系统 Active CN109814838B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910245685.9A CN109814838B (zh) 2019-03-28 2019-03-28 获取加解密运算中的中间结果组的方法、硬件装置和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910245685.9A CN109814838B (zh) 2019-03-28 2019-03-28 获取加解密运算中的中间结果组的方法、硬件装置和系统

Publications (2)

Publication Number Publication Date
CN109814838A true CN109814838A (zh) 2019-05-28
CN109814838B CN109814838B (zh) 2024-04-12

Family

ID=66610791

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910245685.9A Active CN109814838B (zh) 2019-03-28 2019-03-28 获取加解密运算中的中间结果组的方法、硬件装置和系统

Country Status (1)

Country Link
CN (1) CN109814838B (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111352609A (zh) * 2020-03-05 2020-06-30 青岛大学 一种基于边缘计算的分布式外包模幂运算方法
CN112711395A (zh) * 2019-10-25 2021-04-27 阿里巴巴集团控股有限公司 加解密方法和装置、电子设备以及计算机可读存储介质
CN113946846A (zh) * 2021-10-14 2022-01-18 深圳致星科技有限公司 用于联邦学习和隐私计算的密文计算装置及方法
CN114327370A (zh) * 2022-03-10 2022-04-12 湖北芯擎科技有限公司 计算蒙哥马利模乘算法中mr值的方法及电路
CN114785528A (zh) * 2022-06-20 2022-07-22 深圳市乐凡信息科技有限公司 数据传输的加密方法、系统、设备及存储介质
CN117014208A (zh) * 2023-08-09 2023-11-07 海光信息技术股份有限公司 数据加密方法、装置、系统、电子设备及存储介质

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6085210A (en) * 1998-01-22 2000-07-04 Philips Semiconductor, Inc. High-speed modular exponentiator and multiplier
US20020074391A1 (en) * 2000-12-19 2002-06-20 International Business Machines Corporation Arithmetic circuit to increase the speed for a modular multiplication for a public key system for encryption
CN1731345A (zh) * 2005-08-18 2006-02-08 上海微科集成电路有限公司 可扩展高基蒙哥马利模乘算法及其电路结构
CN1967469A (zh) * 2006-11-09 2007-05-23 北京华大信安科技有限公司 高效模乘方法及装置
KR20070062901A (ko) * 2005-12-13 2007-06-18 한국전자통신연구원 중국인 나머지 정리(crt)와 캐리 저장 가산 기반의모듈러 곱셈 장치 및 방법
CN103793199A (zh) * 2014-01-24 2014-05-14 天津大学 一种支持双域的快速rsa密码协处理器
CN104598199A (zh) * 2015-01-07 2015-05-06 大唐微电子技术有限公司 一种用于智能卡的Montgomery模乘器的数据处理方法及系统
CN209560522U (zh) * 2019-03-28 2019-10-29 贵州华芯通半导体技术有限公司 获取加解密运算中的中间结果组的硬件装置

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6085210A (en) * 1998-01-22 2000-07-04 Philips Semiconductor, Inc. High-speed modular exponentiator and multiplier
US20020074391A1 (en) * 2000-12-19 2002-06-20 International Business Machines Corporation Arithmetic circuit to increase the speed for a modular multiplication for a public key system for encryption
CN1731345A (zh) * 2005-08-18 2006-02-08 上海微科集成电路有限公司 可扩展高基蒙哥马利模乘算法及其电路结构
KR20070062901A (ko) * 2005-12-13 2007-06-18 한국전자통신연구원 중국인 나머지 정리(crt)와 캐리 저장 가산 기반의모듈러 곱셈 장치 및 방법
CN1967469A (zh) * 2006-11-09 2007-05-23 北京华大信安科技有限公司 高效模乘方法及装置
CN103793199A (zh) * 2014-01-24 2014-05-14 天津大学 一种支持双域的快速rsa密码协处理器
CN104598199A (zh) * 2015-01-07 2015-05-06 大唐微电子技术有限公司 一种用于智能卡的Montgomery模乘器的数据处理方法及系统
CN209560522U (zh) * 2019-03-28 2019-10-29 贵州华芯通半导体技术有限公司 获取加解密运算中的中间结果组的硬件装置

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112711395A (zh) * 2019-10-25 2021-04-27 阿里巴巴集团控股有限公司 加解密方法和装置、电子设备以及计算机可读存储介质
CN111352609A (zh) * 2020-03-05 2020-06-30 青岛大学 一种基于边缘计算的分布式外包模幂运算方法
CN113946846A (zh) * 2021-10-14 2022-01-18 深圳致星科技有限公司 用于联邦学习和隐私计算的密文计算装置及方法
CN113946846B (zh) * 2021-10-14 2022-07-12 深圳致星科技有限公司 用于联邦学习和隐私计算的密文计算装置及方法
CN114327370A (zh) * 2022-03-10 2022-04-12 湖北芯擎科技有限公司 计算蒙哥马利模乘算法中mr值的方法及电路
CN114327370B (zh) * 2022-03-10 2022-06-21 湖北芯擎科技有限公司 计算蒙哥马利模乘算法中mr值的方法及电路
CN114785528A (zh) * 2022-06-20 2022-07-22 深圳市乐凡信息科技有限公司 数据传输的加密方法、系统、设备及存储介质
CN114785528B (zh) * 2022-06-20 2022-10-14 深圳市乐凡信息科技有限公司 数据传输的加密方法、系统、设备及存储介质
CN117014208A (zh) * 2023-08-09 2023-11-07 海光信息技术股份有限公司 数据加密方法、装置、系统、电子设备及存储介质
CN117014208B (zh) * 2023-08-09 2024-04-09 海光信息技术股份有限公司 数据加密方法、装置、系统、电子设备及存储介质

Also Published As

Publication number Publication date
CN109814838B (zh) 2024-04-12

Similar Documents

Publication Publication Date Title
CN109814838A (zh) 获取加解密运算中的中间结果组的方法、硬件装置和系统
JP2722413B2 (ja) モンゴメリ法によるモジュラ乗算の実施方法
US6151393A (en) Device and method for modular multiplication
TW550498B (en) Method and apparatus for modular multiplying and calculating unit for modular multiplying
US5210710A (en) Modulo arithmetic processor chip
US20120197956A1 (en) Calculating unit for reducing an input number with respect to a modulus
US5261001A (en) Microcircuit for the implementation of RSA algorithm and ordinary and modular arithmetic, in particular exponentiation, with large operands
CN115344237B (zh) 结合Karatsuba和蒙哥马利模乘的数据处理方法
CN113032848B (zh) 一种数据处理方法和用于数据处理的芯片
Jafri et al. Towards an optimized architecture for unified binary huff curves
US6061706A (en) Systolic linear-array modular multiplier with pipeline processing elements
US5121429A (en) Digital signal processing
KR100459732B1 (ko) 4-2 컴프레서를 이용한 몽고메리 모듈러 승산기 및 그승산 방법
Tian et al. Ultra-fast modular multiplication implementation for isogeny-based post-quantum cryptography
GB2287331A (en) Electronic multiplying and adding apparatus.
Hossain et al. Efficient fpga implementation of modular arithmetic for elliptic curve cryptography
KR102496446B1 (ko) 모듈러 연산을 위한 워드 병렬 연산 방법
Tai et al. Accelerating matrix operations with improved deeply pipelined vector reduction
JP3302043B2 (ja) 暗号通信方法及びそのシステム
CN209560522U (zh) 获取加解密运算中的中间结果组的硬件装置
CN115270155A (zh) 一种获取大数拓展最大公约数的方法及硬件架构
CN113467752A (zh) 用于隐私计算的除法运算装置、数据处理系统及方法
US6230178B1 (en) Method for the production of an error correction parameter associated with the implementation of a modular operation according to the Montgomery method
EP0281303A2 (en) Modulo arithmetic processor chip
Paludo et al. Number theoretic transform architecture suitable to lattice-based fully-homomorphic encryption

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
CB02 Change of applicant information

Address after: 9th Floor, Building C, Gui'an Center, Plot ZD-64, Big Data Science and Technology Innovation City, Gui'an New Area, Guiyang City, Guizhou Province, 550003 (No. 2 on the south side)

Applicant after: Guizhou Huaxin Semiconductor Technology Co.,Ltd.

Address before: 550081 2nd floor, intersection of Qianzhong Avenue and Jinma Avenue, Gui'an New District, Guiyang City, Guizhou Province

Applicant before: GUIZHOU HUAXINTONG SEMICONDUCTOR TECHNOLOGY Co.,Ltd.

CB02 Change of applicant information
GR01 Patent grant
GR01 Patent grant