CN109669670B - 用于蒙哥马利模乘中的不均等分块的数据处理方法及装置 - Google Patents
用于蒙哥马利模乘中的不均等分块的数据处理方法及装置 Download PDFInfo
- Publication number
- CN109669670B CN109669670B CN201811601122.0A CN201811601122A CN109669670B CN 109669670 B CN109669670 B CN 109669670B CN 201811601122 A CN201811601122 A CN 201811601122A CN 109669670 B CN109669670 B CN 109669670B
- Authority
- CN
- China
- Prior art keywords
- column
- bits
- calculated
- bit width
- bit
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/60—Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers
- G06F7/72—Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers using residue arithmetic
- G06F7/722—Modular multiplication
Landscapes
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- General Engineering & Computer Science (AREA)
- Complex Calculations (AREA)
Abstract
本公开提供用于蒙哥马利模乘中的不均等分块的数据处理方法及装置。方法包括:对aM和bM、以及N和k添加位,并将其分组为不均等的分块;将分块的乘积结果表示为网格;在网格上划分多个竖列,从第一竖列起,从低位到高位按竖列顺序地计算大块ai×bj和Ni×kj并进行对齐累加,需要累加到x+1竖列上的部分数值在计算x+2竖列时才计算出来。当计算到第x+1竖列及以后的竖列时,提前计算这部分数值,并在计算下一竖列时抛弃这些数值;在所有竖列计算完成后,得到低2n+2m+1位的数据,作为(aM×bM+k×N)的结果;进行移位处理得到pM=(aM×bM+k×N)×R‑1;将pM作为输入数据aM或bM,循环执行上述过程,直到计算完一系列蒙哥马利模乘运算;输出最后一个pM值。
Description
技术领域
本公开涉及加解密算法领域,更具体地,涉及一种用于蒙哥马利模乘中的不均等分块的数据处理方法及装置。
背景技术
RSA(由Ron Rivest、Adi Shamir和Leonard Adleman共同提出)算法和椭圆曲线密码学(Elliptic curve cryptography,ECC)算法是目前广泛使用的加解密算法,这两种加解密算法中运算量最大的一种运算就是大数模乘运算。可以说,大数模乘直接决定了这两种加解密算法的性能。大数模乘指的是p=a×b mod N这样的运算;其中a、b、N都是较大的整数,一般大于2^64,其中,×代表乘法,mod代表除法后取余。要计算p=a×b mod N,需要有乘法器来计算a×b。
如何提高大数模乘的运算效率以及降低运算负担是需要考虑的问题。
发明内容
技术问题
现有方法采用蒙哥马利模乘来进行大数模乘运算,但是,因为蒙哥马利模乘的特点,模乘的输出比输入要多一位,所以一般通过模净运算来将输出的位宽改变为与输入的位宽一样。但是在连续计算的过程中,每一次计算都要插入模净运算,这样会大大降低运算效率。如果采用超越蒙哥马利模乘来添加输入的位,可以不需要模净运算,但是采用均等分块会造成大量资源浪费的问题,而采用不均等分块也会存在“需要累加一个值的时候,这个值还没有计算出”的问题,从而导致计算效率较低和多占用存储资源。
技术方案
本公开提供了一种用于蒙哥马利模乘中的不均等分块的数据处理方法及装置。
根据本发明的一个方面,提供一种用于蒙哥马利模乘中的不均等分块的数据处理方法,包括:接收输入数据,包括aM=a×R mod N、bM=b×R mod N、以及模数N,其中a和b为蒙哥马利模乘的输入,并且aM和bM为转换到蒙哥马利域中的输入;如果aM和bM的位宽为n,则添加m个位以将其作为位宽为n+m的输入数据,使得aM=[an+m-1,an+m-2,…,a0]和bM=[bn+m-1,bn+m-2,…,b0]被分组为x个不均等的分块,即aM=[ax-1,ax-2,…,a0]和bM=[bx-1,bx-2,…,b0]中的每个ai和每个bj的位宽不全相同,其中,R=2n+2m且2n+2m>N,n为N的位宽,m为大于或等于1的正整数,x是小于n+m且大于或等于2的正整数,i和j均取[x-1,x-2,…,0],其中,每个ai和bj中有多个位,表示为ai[gi]和bj[hj],gi取0至(ai的位宽-1)之间的整数,并且hj取0至(bj的位宽-1)之间的整数;设pM=(aM×bM+k×N)×R-1,按照aM和bM的分块方式相应地将N和k分组为x个不均等的分块,即N=[Nx-1,Nx-2,…,N0]和k=[kx-1,kx-2,…,k0]中的每个Ni和每个kj的位宽不全相同,其中,k是使得(aM×bM+k×N)的低n+2m位都为0的最小整数,并且k为mc×aM×bM的结果的低n+2m位,以及mc是使得mc×N的低n+2m位全为1的整数,其中,每个Ni和kj中有多个位,表示为Ni[yi]和kj[zj],yi取0至(Ni的位宽-1)之间的整数,并且zj取0至(kj的位宽-1)之间的整数;将aM=[an+m-1,an+m-2,…,a0]与bM=[bn+m-1,bn+m-2,…,b0]乘积的结果表示为第一网格的形式,并且第一网格的每一大块表示ai×bj,每一大块中有多个小格,每一小格表示ai中的每一位与bj中的每一位的乘积结果,即ai[gi]×bj[hj],将N=[Nx-1,Nx-2,…,N0]和k=[kx-1,kx-2,…,k0]乘积的结果表示为第二网格的形式,并且第二网格的每一大块表示Ni×kj,每一大块中有多个小格,每一小格表示Ni中的每一位与kj中的每一位的乘积结果,即Ni[yi]×kj[zj],第一网格和第二网格中在竖直方向上的每一小竖列上的每一小格具有相同的位权,将第一网格与第二网格从低位到高位对齐,以便将ai×bj的乘积结果与Ni×kj的乘积结果进行对齐累加得到ai×bj与Ni×kj之和;将第一网格和第二网格从低位到高位进行划分,使最低点处为第一竖列,第二竖列与第一竖列之间的位宽,第三竖列与第二竖列之间的位宽,直到第x-1竖列与第x-2竖列之间的位宽依次与输入数据aM或bM从低位到高位的位宽相对应,即a0至ax-2的位宽,而第x竖列与第一竖列之间的位宽为n+2m,并且第x+1竖列以及之后的竖列之间的位宽依次与输入数据aM或bM从低位到高位的位宽相对应,即a0至ax-1的位宽,使得模乘结果的输出与输入保持相同的分块方式以便于数据管理,其中,小竖列与所有竖列相平行;从第一竖列起,从低位到高位按竖列顺序地计算大块ai×bj和Ni×kj并进行对齐累加,当计算到第x竖列时,将对齐累加的结果的低n+2m位作为数据的低n+2m位,并且该低n+2m位均为0;当计算到第x+1竖列时,由于需要累加到x+1竖列上的部分数值在计算x+2竖列时才计算出,所以通过在计算第x+1竖列的一个大块时,记录与第x+1竖列上的、不包含在第x+1竖列的所有大块中的小格的列数相对应的ai[g]和Ni[g],并且在计算第x+1竖列的另一大块时,记录与第x+1竖列上的、不包含在第x+1竖列的所有大块中的小格的行数相对应的bj[h]和kj[h],来提前计算该部分数值,即ai[g]×bj[h]以及Ni[g]×kj[h],其中,g是gi或yi中的与第x+1竖列上的、不包含在第x+1竖列的所有大块中的小格的列数相关的值,以及h是hi或zi中的与第x+1竖列上的、不包含在第x+1竖列的所有大块中的小格的行数相关的值;将所述ai[g]×bj[h]以及Ni[g]×kj[h]的结果与第x+1竖列的大块进行对齐累加,以得到低第n+2m+1至第(n+2m+a0的位宽)的数据;计算第x+1竖列以后的竖列,采用与计算第x+1竖列相同的方法,即提前计算需要累加到所计算的竖列上的、但要在该竖列之后的竖列才计算出的部分数值,在所有竖列计算完成后,得到低第n+2m+1至第2n+2m+1的数据,作为(aM×bM+k×N)的结果,并进行移位处理得到pM=(aM×bM+k×N)×R-1;确定pM是否是一系列蒙哥马利模乘运算后的最后得到的一个pM;如果不是,则将pM作为输入数据aM或bM,循环执行上述步骤,直到计算完一系列蒙哥马利模乘运算,得到最后一个pM;当得到的pM是一系列蒙哥马利模乘运算的最后一个pM时,输出最后一个pM值作为蒙哥马利域中的蒙哥马利模乘的结果。
根据本发明的另一方面,提供一种用于蒙哥马利模乘中的不均等分块的数据处理装置,包括:输入单元,接收输入数据,包括aM=a×R mod N、bM=b×R mod N、以及模数N,其中a和b为蒙哥马利模乘的输入,并且aM和bM为转换到蒙哥马利域中的输入;控制器,被配置为:如果aM和bM的位宽为n,则添加m个位以将其作为位宽为n+m的输入数据,使得aM=[an+m-1,an+m-2,…,a0]和bM=[bn+m-1,bn+m-2,…,b0]被分组为x个不均等的分块,即aM=[ax-1,ax-2,…,a0]和bM=[bx-1,bx-2,…,b0]中的每个ai和每个bj的位宽不全相同,其中,R=2n+2m且2n+2m>N,n为N的位宽,m为大于或等于1的正整数,x是小于n+m且大于或等于2的正整数,i和j均取[x-1,x-2,…,0],其中,每个ai和bj中有多个位,表示为ai[gi]和bj[hj],gi取0至(ai的位宽-1)之间的整数,并且hj取0至(bj的位宽-1)之间的整数;设pM=(aM×bM+k×N)×R-1,按照aM和bM的分块方式相应地将N和k分组为x个不均等的分块,即N=[Nx-1,Nx-2,…,N0]和k=[kx-1,kx-2,…,k0]中的每个Ni和每个kj的位宽不全相同,其中,k是使得(aM×bM+k×N)的低n+2m位都为0的最小整数,并且k为mc×aM×bM的结果的低n+2m位,以及mc是使得mc×N的低n+2m位全为1的整数,其中,每个Ni和kj中有多个位,表示为Ni[yi]和kj[zj],yi取0至(Ni的位宽-1)之间的整数,并且zj取0至(kj的位宽-1)之间的整数;将aM=[an+m-1,an+m-2,…,a0]与bM=[bn+m-1,bn+m-2,…,b0]乘积的结果表示为第一网格的形式,并且第一网格的每一大块表示ai×bj,每一大块中有多个小格,每一小格表示ai中的每一位与bj中的每一位的乘积结果,即ai[gi]×bj[hj],将N=[Nx-1,Nx-2,…,N0]和k=[kx-1,kx-2,…,k0]乘积的结果表示为第二网格的形式,并且第二网格的每一大块表示Ni×kj,每一大块中有多个小格,每一小格表示Ni中的每一位与kj中的每一位的乘积结果,即Ni[yi]×kj[zj],第一网格和第二网格中在竖直方向上的每一小竖列上的每一小格具有相同的位权,将第一网格与第二网格从低位到高位对齐,以便将ai×bj的乘积结果与Ni×kj的乘积结果进行对齐累加得到ai×bj与Ni×kj之和;将第一网格和第二网格从低位到高位进行划分,使最低点处为第一竖列,第二竖列与第一竖列之间的位宽,第三竖列与第二竖列之间的位宽,直到第x-1竖列与第x-2竖列之间的位宽依次与输入数据aM或bM从低位到高位的位宽相对应,即a0至ax-2的位宽,而第x竖列与第一竖列之间的位宽为n+2m,并且第x+1竖列以及之后的竖列之间的位宽依次与输入数据aM或bM从低位到高位的位宽相对应,即a0至ax-1的位宽,使得模乘结果的输出与输入保持相同的分块方式以便于数据管理,其中,小竖列与所有竖列相平行;从第一竖列起,从低位到高位按竖列顺序地计算大块ai×bj和Ni×kj并进行对齐累加,当计算到第x竖列时,将对齐累加的结果的低n+2m位作为数据的低n+2m位,并且该低n+2m位均为0;当计算到第x+1竖列时,由于需要累加到x+1竖列上的部分数值在计算x+2竖列时才计算出,所以通过在计算第x+1竖列的一个大块时,记录与第x+1竖列上的、不包含在第x+1竖列的所有大块中的小格的列数相对应的ai[g]和Ni[g],并且在计算第x+1竖列的另一大块时,记录与第x+1竖列上的、不包含在第x+1竖列的所有大块中的小格的行数相对应的bj[h]和kj[h],来提前计算该部分数值,即ai[g]×bj[h]以及Ni[g]×kj[h],其中,g是gi或yi中的与第x+1竖列上的、不包含在第x+1竖列的所有大块中的小格的列数相关的值,以及h是hi或zi中的与第x+1竖列上的、不包含在第x+1竖列的所有大块中的小格的行数相关的值;将所述ai[g]×bj[h]以及Ni[g]×kj[h]的结果与第x+1竖列的大块进行对齐累加,以得到低第n+2m+1至第(n+2m+a0的位宽)的数据;计算第x+1竖列以后的竖列,采用与计算第x+1竖列相同的方法,即提前计算需要累加到所计算的竖列上的、但要在该竖列之后的竖列才计算出的部分数值,在所有竖列计算完成后,得到低第n+2m+1至第2n+2m+1的数据,作为(aM×bM+k×N)的结果,并进行移位处理得到pM=(aM×bM+k×N)×R-1;确定pM是否是一系列蒙哥马利模乘运算后的最后得到的一个pM;如果不是,则将pM作为输入数据aM或bM,循环执行上述步骤,直到计算完一系列蒙哥马利模乘运算,得到最后一个pM;存储器,被配置为存储数据,包括aM和bM、模数N和pM;以及输出单元,被配置为当得到的pM是一系列蒙哥马利模乘运算的最后一个pM时,输出最后一个pM值作为蒙哥马利域中的蒙哥马利模乘的结果。
有益效果
根据本公开提供的方法和装置,可以不需要插入模净运算,并且通过添加位并将输入数据分组为多个不均等分块来解决由均等分块带来的资源浪费问题,并且通过提前计算一部分值改善了不均等分块造成的多占用寄存器资源、RAM口资源的问题,提高了计算效率,减轻了运算负担。为了更完整地理解本公开及其优点,现在参考下面结合附图做出的描述。
附图说明
图1是示出根据本公开的实施例的用于蒙哥马利模乘中的不均等分块的数据处理方法的流程图。
图2是示出根据本公开的实施例的用于计算用于蒙哥马利模乘中的不均等分块的网格的示例的示意图。
图3是示出根据本公开的实施例的用于蒙哥马利模乘中的不均等分块的数据处理装置的框图。
具体实施方式
以下将详细且清楚地描述本发明构思的实施例,以达到本领域普通技术人员可以容易地实施本发明构思的程度。
在进行大数模乘时,如果直接用数字电路做一个输入是两个1024位的数、输出是2048位的数的乘法器,面积会过于大、计算效率也过于低,所以一般要把大数乘法分块来计算。
大数乘法分块的原理如下:
1.欲计算a×b,其中a={a3,a2,a1,a0},b={b3,b2,b1,b0},则计算a3×b3,a3×b2,a3×b1,a3×b0,a2×b3,a2×b2,a2×b1,a2×b0,a1×b3,a1×b2,a1×b1,a1×b0,a0×b3,a0×b2,a0×b1,a0×b0,并把这16个积移位相加即可。
2.{,}表示拼接,a={a3,a2,a1,a0}表示a=a3×2^(len(a2)+len(a1)+len(a0))+a2×2^(len(a1)+len(a0))+a1×2^(len(a0))+a0。len(x)表示x的位宽,单位为位,2表示为二进制。
3.两数相乘则表达为移位相加:a×b=a3×b3×2^(len(a2)+len(a1)+len(a0)+len(b2)+len(b1)+len(b0))+a3×b2×2^(len(a2)+len(a1)+len(a0)+len(b1)+len(b0))+a3×b1×2^(len(a2)+len(a1)+len(a0)+len(b0))+a3×b0×2^(len(a2)+len(a1)+len(a0))+a2×b3×2^(len(a1)+len(a0)+len(b2)+len(b1)+len(b0))+a2×b2×2^(len(a1)+len(a0)+len(b1)+len(b0))+a2×b1×2^(len(a1)+len(a0)+len(b0))+a2×b0×2^(len(a1)+len(a0))+a1×b3×2^(len(a0)+len(b2)+len(b1)+len(b0))+a1×b2×2^(len(a0)+len(b1)+len(b0))+a1×b1×2^(len(a0)+len(b0))+a1×b0×2^len(a0)+a0×b3×2^(len(b2)+len(b1)+len(b0))+a0×b2×2^(len(b1)+len(b0))+a0×b1×2^len(b0)+a0×b0。
这是以a和b分为4块为例,a和b也可以分为任意多块来完成一个大乘法。
然而,模乘与乘法有所不同,蒙哥马利模乘是目前主流的一种大数模乘实现方法。
若采用蒙哥马利模乘来计算p=a×b mod N,那么计算以下步骤:
1.设aM=a×R mod N,bM=b×R mod N,以及pM=(aM×bM+k×N)×R^(-1)(即转换到蒙哥马利域中);
这里蒙哥马利域的R=2^n,n是使得2^n>N的最小整数。k是使得(aM×bM+k×N)的低n位都为0的最小整数。k可以由mc×aM×bM再取低n位得到,mc是使得mc×N的低n位全为1的整数。
2.计算pM’=pM mod N;
如果aM位宽是n,bM位宽是n,k和N位宽都是n,那么aM×bM位宽是2n,k×N位宽是2n,(aM×bM+k×N)的位宽是2n+1,pM的位宽就是n+1。
实际运算中pM需要输入到下一步模乘运算中去,成为下一步模乘的aM或bM,由于数字电路模乘器大小是固定的,不能接受pM多一个位,所以pM要进行模净运算,即pM’=pMmod N,以确保它的位宽在n以内。
3.如果pM’是一连串模乘运算中的最后一个,那么要进行下面运算的反运算来得到p:
pM’=p×R mod N的反运算为:p=(pM’×1+k×N)×R^(-1)mod N,即输入是pM’和1的蒙哥马利模乘。
数字电路实现的蒙哥马利模乘一般把步骤做流水线式操作,即第一个模乘进行到第3个时钟周期,第二个模乘进行到第2个时钟周期,第三个模乘进行到第1个时钟周期。如果多个模乘运算是连续的且其中不需要插入其它运算(例如,模净运算),则运算性能会有很大提高。所以为了省去上述蒙哥马利模乘中的步骤2,使用了超越蒙哥马利模乘。这里以超越2位为例。
若采用超越蒙哥马利模乘来计算p=a×b mod N,那么计算以下步骤:
1.设aM=a×R mod N,bM=b×R mod N,以及pM=(aM×bM+k×N)×R^(-1)(即转换到蒙哥马利域中);
这里蒙哥马利域的R=2^(n+2),n是使得2^n>N的最小整数。k是使得(aM×bM+k×N)的低n+2位都为0的最小整数。k可以由mc×aM×bM再取低n+2位得到,mc是使得mc×N的低n+2位全为1的整数。
2.无需任何计算;
如果aM位宽是n,bM位宽是n,把它们高位补0来当做n+1位来处理,k是n+2位,N位宽都是n,那么aM×bM位宽是2n+2,k×N位宽是2n+2,(aM×bM+k×N)的位宽是2n+3,pM的位宽就是n+1。
实际运算中pM需要输入到下一步模乘运算中去,成为下一步模乘的aM或bM,n+1的位宽是可以接受的,所以这一步不需要任何运算。
3.如果pM是一连串模乘运算中的最后一个,那么要进行下面这个运算的反运算来得到p:
pM=p×R mod N的反运算为:p=(pM×1+k×N)×R^(-1)mod N,即输入是pM和1的超越蒙哥马利模乘。
为了不在模乘之间插入模净运算来处理这一个位,可以采用超越蒙哥马利域。例如,模乘的输入是位宽为n的数,把它们当做位宽为(n+m)的数来处理,蒙哥马利域的R也设置为2^(n+2×m),只要2×m大于2,就使得模乘之间不必插入模净。
然而,如果采用均等分块,超越的m位会使得增加一个分块或者每个分块都增加一位数据,例如,一个2048位的数据可以分组为8个256位的分块来处理,使用超越蒙哥马利,2048位的数当做2050位来处理,可以分组为9个256位的分块,也可以分组为8个257位,这两种方式都比实际的2050位需要更多的存储空间,会造成存储空间的浪费。如果采用不均等分块,可能不能同时计算出需要累加的值,从而需要多占用存储资源来存储先计算出的部分值,导致计算效率较低和多占用存储资源。本发明采用不均等分块的方法,并且通过提前计算一部分值来克服不均等分块引入的问题。将在以下结合附图的描述中详细描述本发明的方法和装置。
图1是示出根据本公开的实施例的用于蒙哥马利模乘中的不均等分块的数据处理方法的流程图。如果要计算p=a×b mod N,需要通过本公开中的用于蒙哥马利模乘中的不均等分块的数据处理方法来计算pM,具体计算步骤如下。
在步骤S101中,接收输入aM、bM、以及模数N,其中aM=a×R mod N,bM=b×R modN。
如果aM和bM为n位,则在步骤S102中添加m个位,使得aM和bM可以被分组为x个不均等的分块,即aM=[ax-1,ax-2,…,a0]和bM=[bx-1,bx-2,…,b0]中的每个ai和bj的位宽不全相同,其中,R=2n+2m且2n+2m>N,n为N的位宽,m为大于或等于1的正整数,x是小于n+m且大于或等于2的正整数,i和j均取[x-1,x-2,…,0],其中,每个ai和bj中有多个位,表示为ai[gi]和bj[hj],gi取0至(ai的位宽-1)之间的整数,并且hj取0至(bj的位宽-1)之间的整数。
在步骤S103中,按照aM和bM的分块方式相应地将N和k分组为x个不均等的分块,即N=[Nx-1,Nx-2,…,N0]和k=[kx-1,kx-2,…,k0]中的每个Ni和每个kj的位宽不全相同,其中,k是使得(aM×bM+k×N)的低n+2m位都为0的最小整数,并且k为mc×aM×bM的结果的低n+2m位,以及mc是使得mc×N的低n+2m位全为1的整数,其中,每个Ni和kj中有多个位,表示为Ni[yi]和kj[zj],yi取0至(Ni的位宽-1)之间的整数,并且zj取0至(kj的位宽-1)之间的整数。
在步骤S104中,将aM和bM的乘积结果表示为第一网格的形式,将N和k的乘积结果表示为第二网格的形式。其中第一网格的每一大块表示ai×bj,每一大块中有多个小格,每一小格表示ai中的每一位与bj中的每一位的乘积结果,即ai[gi]×bj[hj]。第二网格的每一大块表示Ni×kj,每一大块中有多个小格,每一小格表示Ni中的每一位与kj中的每一位的乘积结果,即Ni[gi]×kj[hj]。第一网格和第二网格中在竖直方向上的每一小竖列上的每一小格具有相同的位权,并且每一小竖列上的小格的累加和为该位权下的所有乘积结果之和。将第一网格与第二网格从低位到高位对齐,以便将相同位权下的ai×bj的乘积结果与Ni×kj的乘积结果进行对齐累加得到ai×bj与Ni×kj之和。
在步骤S105中,将第一网格和第二网格从低位到高位进行划分,使最低点处为第一竖列,第二竖列与第一竖列之间的位宽,第三竖列与第二竖列之间的位宽,直到第x-1竖列与第x-2竖列之间的位宽依次与输入数据aM或bM从低位到高位的位宽相对应,即a0至ax-2的位宽,而第x竖列与第一竖列之间的位宽为n+2m,并且第x+1竖列以及之后的竖列之间的位宽依次与输入数据aM或bM从低位到高位的位宽相对应,即a0至ax-1的位宽,使得模乘结果的输出与输入保持相同的分块方式以便于数据管理,其中,小竖列与所有竖列相平行。并且,在每一条竖列上可以包括第一网格和第二网格的大块中的一些,每两条竖列之间的对齐累加结果为数据的第v位至第v+w位,其中v为这两条竖列中的更低竖列的位置,w为该更低竖列与另一竖列之间的距离。
接下来,计算两条竖列之间的对齐累加结果。具体地,在步骤S106中,从第一竖列起,从低位到高位按顺序“第一竖列、第二竖列、……、第x竖列、第x+1竖列……”来计算大块ai×bj和Ni×kj,并将计算结果进行对齐累加,直到第x竖列。在步骤S107中,当计算到第x竖列时,将对齐累加的结果的低n+2m位作为数据的低n+2m位,并且该低n+2m位均为0。
在计算了前n+2m位之后,在步骤S108中,当计算到第x+1竖列时,首先计算出第x+1竖列上的所有大块,但是由于不均等分块,在第x+1竖列上会存在一些需要计算并累加到第x+1竖列上但是不被包括在所计算的大块中的小格,这些小格是在计算下一竖列(即第x+2竖列)时才计算。因此,在计算第x+1竖列上的大块时不能同时得到这些小格的计算结果。如果在计算第x+2竖列时才得到这些小格的计算结果,那么第x+1竖列的计算结果需要等到第x+2竖列上的大块计算完成才能得到,这样,第x+1竖列的计算结果会多占用存储器资源来存储。然而,本公开的方法中提前计算这些小格来避免存储器资源浪费的问题。具体地,在步骤S109中,通过在计算第x+1竖列的一个大块时,记录与第x+1竖列上的、不包含在第x+1竖列的所有大块中的小格(也就是,应该累加在第x+1竖列上、但是由于分块的不均等而没有与第x+1竖列同时计算出的小格)的列数相对应的ai[g]和Ni[g],并且在计算第x+1竖列的另一大块时,记录与第x+1竖列上的、不包含在第x+1竖列的所有大块中的小格的行数相对应的bj[h]和kj[h],并将ai[g]、Ni[g]与bj[h]、kj[h]相乘,来提前计算这部分数值,即ai[g]×bj[h]以及Ni[g]×kj[h],其中,g是gi或yi中的与第x+1竖列上的、不包含在第x+1竖列的所有大块中的小格的列数相关的值,以及h是hi或zi中的与第x+1竖列上的、不包含在第x+1竖列的所有大块中的小格的行数相关的值。
在步骤S110中,将这些小格与第x+1竖列上的所有大块的计算结果进行对齐累加,得到的结果为数据的低第n+2m至(n+2m+a0的位宽)位。
在步骤S111中,在计算第x+1竖列以后的竖列时,采用与计算第x+1竖列相同的方法,即提前计算需要累加到所计算的竖列上的、但要在该竖列之后的竖列才计算出的小格,在所有竖列计算完成后,得到的结果为数据的低第n+2m至2n+2m位。
在步骤S112中,结合在步骤S107至S111中得到的结果,得到(aM×bM+k×N)的计算结果。
在步骤S113中,将在步骤S112中得到的结果进行移位处理得到pM=(aM×bM+k×N)×R-1。
在步骤S114中,确定是否完成了一系列蒙哥马利模乘运算,即确定pM是否是一系列蒙哥马利模乘运算后的最后得到的一个pM。
如果不是,则在步骤S115中,将在步骤S113中得到的pM作为输入数据aM或bM,循环执行上述步骤,直到计算完一系列蒙哥马利模乘运算,得到最后一个pM。
当得到的pM是一系列蒙哥马利模乘运算的最后一个pM时,在步骤S116中,输出最后一个pM值。
通过上述步骤,可以得到蒙哥马利域中的蒙哥马利模乘结果pM,并且,在计算过程中,两个相邻竖列之间的几个位的数据可以同时被计算出,如此以来,本公开的实施例不需要占用寄存器来预存先计算出的数据以等待后计算出的数据,再一起写入存储器,从而不会造成寄存器的浪费,或者本公开的实施例不需要将先计算出和后计算出的数据分两次写入存储器,从而不会造成存储器读写次数的增加,提高了运算效率并节省了存储器资源。
在一个实施例中,可以将pM值从蒙哥马利域转换到普通域中,具体地,可以将最后一个pM值和1作为输入数据aM和bM,执行上述步骤S101-S116,得到p’=(pM×1+k×N)×R-1,其中pM值和1已经是最后的输入,不需要进行步骤S114和S115,然后将p’进行模数为N的取模运算,得到p=p’mod N=(pM×1+k×N)×R-1mod N。将蒙哥马利域中的pM转换到普通域,可以输出结果p=a×b mod N,以便于将p值应用在普通域中的其他计算中。
在另一个实施例中,可以将该方法应用于加解密算法。在又一个实施例中,该加解密算法包括RSA加解密算法和ECC加解密算法中的至少一种。本公开的方法能够解决加解密算法中大数模乘运算的运算量大的问题,提高加解密运算效率,使得加解密过程更简单、更迅速。
在下文中,将以输入aM和bM为16位数据为例,即n=16,来具体描述图1中所述的第一网格和第二网格,以及通过图1的方法得到输出p’的具体过程,但本公开的实施例不限于此。
图2是示出根据本公开的实施例的用于计算用于蒙哥马利模乘中的不均等分块的网格的示例的示意图。例如,aM和bM是两个位宽为16的数据,按照步骤S102的方法,将aM和bM分别添加1位数据,使aM和bM都为17位的数据,但本公开的实施例不限于此,也可以添加多位数据。并且在图2中,aM和bM被分组为4个分块,即aM={a3,a2,a1,a0},bM={b3,b2,b1,b0},a3、a2、a1、a0的位宽不全相同,b3、b2、b1、b0的位宽不全相同,即分块是不匀等的,但本公开的实施例不限于此,也可以分组为更多分块或更少分块。为了存储数据方便,bM的分块方法可以与aM的分块方法一样。
参考图2,例如,aM中的a0是5位(即a0[0]、a0[1]、a0[2]、a0[3]、a0[4]),a1是4位(即a1[0]、a1[1]、a1[2]、a1[3]),a2是4位(即a2[0]、a2[1]、a2[2]、a2[3]),a3是4位(即a3[0]、a3[1]、a3[2]、a3[3]),同样地,bM中的b0是5位(即b0[0]、b0[1]、b0[2]、b0[3]、b0[4]),b1是4位(即b1[0]、b1[1]、b1[2]、b1[3]),b2是4位(即b2[0]、b2[1]、b2[2]、b2[3]),b3是4位(即b3[0]、b3[1]、b3[2]、b3[3]),但本公开的实施例不限于此。将aM×bM表示为网格的形式,如图2中所示的第一网格。每一大块中有多个小格。图2中的每个菱形大块表示两个分块的乘积的结果,例如,大块ABGF表示a3×b0。图2中的每个小格代表一个1位位乘以1位位的乘法的结果,例如,大块ABGF(即a3×b0)中的左上角第一个小格表示a3[3]×b0[0],如图2中所示。在网格中,从右到左为低位到高位,低位具有低位权,高位具有高位权。在竖直方向上的小竖列(图2中仅示出了一条小竖列作为示例,其他小竖列未示出)上的每个小格具有相同的位权,并且按照垂直的小竖列的方向累加(即将具有相同位权的小格累加)所得到的值为aM×bM的值。并且,当低位权的累加结果有进位时,将该进位加入到比该低位权的更高一级的位权的计算结果中。
设pM=(aM×bM+k×N)×R-1,其中,R=2n+2m且2n+2m>N,即R=216+2*1且216+2*1>N。按照aM和bM的分块方式相应地将N和k分组为4个不均等的分块。但是,由于N是位宽为n(即16)的模数,k是使得(aM×bM+k×N)的低n+2(即18)位都为0的最小整数且k可以由mc×aM×bM再取低n+2位得到,k的位宽为18,所以按aM和bM的分块方式分块时,N的高位是3位,即N3是3位,k的高位是5位,即k3是5位,其他块的位宽与aM和bM的位宽相对应,即N中的N0是5位(即N0[0]、N0[1]、N0[2]、N0[3]、N0[4]),N1是4位(即N1[0]、N1[1]、N1[2]、N1[3]),N2是4位(即N2[0]、N2[1]、N2[2]、N2[3]),N3是3位(即N3[0]、N3[1]、N3[2]),同样地,k中的k0是5位(即k0[0]、k0[1]、k0[2]、k0[3]、k0[4]),k1是4位(即k1[0]、k1[1]、k1[2]、k1[3]),k2是4位(即k2[0]、k2[1]、k2[2]、k2[3]),k3是5位(即k3[0]、k3[1]、k3[2]、k3[3]、k3[4])。并且,将N和k表示为网格的形式,如图2中所示的第二网格。第二网格中的每个菱形大块以及小格所表示的含义与第一网格一致。并且,第一网格与第二网格从低位到高位是对齐的,也就是说,在第一网格和第二网格中,在竖直方向上的小竖列上的所有小格具有相同的位权。
如图2中所示,将第一网格和第二网格从低位到高位进行划分,使最低点(即E点)处为竖列1,D点处为竖列2,C点处为竖列3,B点处为竖列4,竖列2与竖列1之间的位宽、竖列3与竖列2之间的位宽、以及竖列4与竖列3之间的位宽分别为a0的位宽5、a1的位宽4和a2的位宽4。这样的划分是为了使计算结果的分块与aM或bM一样,以便分组为同一分块的这几位数据被同时计算出来。然而,第五竖列并不在A点处,而是在距离E点n+2m(即16+2×1=18)位宽处。因为超越蒙哥马利模乘中,(aM×bM)的计算结果的低n+2m位通过加上(k×N)被消去,即(aM×bM+k×N)的计算结果的低18位全为0。并且,从第五竖列起往左一共有16位,再加上一位进位后,为17位,其中最高位为进位,如果没有进位,则该位的数据为0。这17位计算结果可以作为下一次模乘计算的输入,即可以作为扩展后的aM或bM(即添加了1位),因为他们都是17位数据。如此以来,不需要经过模净运算来将下一次输入的位宽控制在17位以内。竖列5之后的竖列6至竖列9的划分按照aM或bM的分块,即竖列6与竖列5之间的位宽、竖列7与竖列6之间的位宽、竖列8与竖列7之间的位宽、以及竖列9与竖列8之间的位宽分别为a0的位宽5、a1的位宽4、a2的位宽4和a3的位宽4。
按照竖列计算(aM×bM+k×N)的计算结果的过程如下:
1.计算大块DEJI,该大块DEJI表示a0×b0;
2.用a0×b0的结果乘以mc来计算k0,其中,mc是使得mc×N的低n+2(即低18)位全为1的整数;
3.计算大块D1E1J1I1,该大块D1E1J1I1表示N0×k0,并和a0×b0的结果按小竖列方向对齐累加,得到(aM×bM+k×N)的计算结果的低5位,并且该低5位为0;
4.计算大块CDIH,该大块CDIH表示a1×b0,并与之前的累加结果按小竖列方向对齐再累加;
5.计算大块IJON,该大块IJON表示a0×b1,并与之前的累加结果按小竖列方向对齐再累加;
6.计算大块C1D1I1H1,该大块C1D1I1H1表示N1×k0,并与之前的累加结果按小竖列方向对齐再累加;
7.用现在的累加和的低9位乘以mc来计算k1,保留积的低9位,该积的低5位必然是0,低9位至低6位这4个位的数据为k1;
8.计算大块I1J1O1N1,该大块I1J1O1N1表示N0×k1,并与之前的累加结果按小竖列方向对齐再累加,得到(aM×bM+k×N)的计算结果的低9位,并且该低9位为0;
9.计算大块BCHG,该大块BCHG表示a2×b0,并与之前的累加结果按小竖列方向对齐再累加;
10.计算大块HINM,该大块HINM表示a1×b1,并与之前的累加结果按小竖列方向对齐再累加;
11.计算大块NOTS,该大块NOTS表示a0×b2,并与之前的累加结果按小竖列方向对齐再累加;
12.计算大块B1C1H1G1,该大块B1C1H1G1表示N2×k0,并与之前的累加结果按小竖列方向对齐再累加;
13.计算大块H1I1N1M1,该大块H1I1N1M1表示N1×k1,并与之前的累加结果按小竖列方向对齐再累加;
14.用现在的累加和的低13位乘以mc来计算k2,保留积的低13位,该积的低9位必然是0,低13位至低10位这4个位的数据为k2;
15.计算大块N1O1T1S1,该大块N1O1T1S1表示N0×k2,并与之前的累加结果按小竖列方向对齐再累加,得到(aM×bM+k×N)的计算结果的低13位,并且该低13位为0;
16.计算大块ABGF,该大块ABGF表示a3×b0,并与之前的累加结果按小竖列方向对齐再累加;
17.计算大块GHML,该大块GHML表示a2×b1,并与之前的累加结果按小竖列方向对齐再累加;
18.计算大块MNSR,该大块MNSR表示a1×b2,并与之前的累加结果按小竖列方向对齐再累加;
19.计算大块STZY,大块STZY表示a0×b3,并与之前的累加结果按小竖列方向对齐再累加;
20.计算大块A1B1G1F1,该大块A1B1G1F1表示N3×k0,并与之前的累加结果按小竖列方向对齐再累加;
21.计算大块G1H1M11L,该大块G1H1M11L表示N2×K1,并与之前的累加结果按小竖列方向对齐再累加;
22.计算大块M1N1S1R1,该大块M1N1S1R1表示N1×k2,并与之前的累加结果按小竖列方向对齐再累加;
23.用现在的累加和的低18位乘以mc来计算k3,保留积的低18位,该积的低18位必然是0,低18位至低14位这5个位的数据为k3;
24.计算大块S1T1Z1Y1,该大块S1T1Z1Y1表示N0×k3,并与之前的累加结果按小竖列方向对齐再累加,得到(aM×bM+k×N)的计算结果的低18位,并且该低18位为0;
25.计算大块FGLK,该大块FGLK表示a3×b1,并与之前的累加结果按小竖列方向对齐再累加;
26.计算大块LMRQ,该大块LMRQ表示a2×b2,并与之前的累加结果按小竖列方向对齐再累加;
27.计算大块RSYW,该大块RSYW表示a1×b3,并与之前的累加结果按小竖列方向对齐再累加;
28.计算大块F1G1L1K1,该大块F1G1L1K1表示N3×k1,并与之前的累加结果按小竖列方向对齐再累加;
29.计算大块L1M1R1Q1,该大块L1M1R1Q1表示N2×k2,并与之前的累加结果按小竖列方向对齐再累加;
30.计算大块R1S1Y1W1,该大块R1S1Y1W1表示N1×k3,并与之前的累加结果按小竖列方向对齐再累加,以便计算pM=(aM×bM+k×N)×R-1的计算结果的低5位,其中,(aM×bM+k×N)×R-1是将(aM×bM+k×N)向右移18位后的计算结果;
31.计算大块KLQP,该大块KLQP表示a3×b2,并与之前的累加结果按小竖列方向对齐再累加;
32.计算大块QRWV,该大块QRWV表示a2×b3,并与之前的累加结果按小竖列方向对齐再累加;
33.计算大块K1L1Q1P1,该大块K1L1Q1P1表示N3×k2,并与之前的累加结果按小竖列方向对齐再累加;
34.计算大块Q1R1W1V1,该大块Q1R1W1V1表示N2×k3,并与之前的累加结果按小竖列方向对齐再累加,以便计算(aM×bM+k×N)×R-1的计算结果的低第6至第9位;
35.计算大块PQVU,该大块PQVU表示a3×b3,并与之前的累加结果按小竖列方向对齐再累加;
36.计算大块P1Q1V1U1,该大块P1Q1V1U1表示N3×k3,并与之前的累加结果按小竖列方向对齐再累加,以便计算(aM×bM+k×N)×R-1的计算结果的低第10至第13位,以及(aM×bM+k×N)×R-1的计算结果的低第14至第17位。
然而,上述过程中,由于分块的不均等,存在如图2中所示的暗色小格,即小格L、小格R和小格Q,以及小格L1、小格R1和小格Q1,这些小格的特点就是它们存在于竖列5和竖列6之间(小格L、小格R、小格L1和小格R1)和竖列6和竖列7之间(小格Q和小格Q1),也就是它们是在计算(aM×bM+k×N)×R-1的计算结果的低5位和低第6至第9位时需要计算的小格,但是小格L、小格R、小格L1和小格R1不包含在在计算竖列5和竖列6之间的5位数据时正在计算的大块FGLK、LMRQ、RSYW、F1G1L1K1、L1M1R1Q1和R1S1Y1W1中,并且小格Q和小格Q1不包含在在计算竖列6和竖列7之间的4位数据时正在计算的大块KLQP、QRWV、K1L1Q1P1和Q1R1W1V1,也就是说,在计算这些大块时,不能同时计算出这些小格的值。因此,例如,在上述过程25至30完成之后,还需要计算小格L、小格R、小格L1和小格R1这4个小格,才能得到(aM×bM+k×N)×R-1的计算结果的低5位,而这4个小格是在过程31、32、33、34时才计算。如果把这5位计算结果分为4位和1位两组来计算,则会多占用寄存器资源和增加存储器读写次数。本公开的实施例中,采用提前计算这4个小格的方法,每两个相邻竖列之间的计算结果都是累加到最后结果才写入存储器,可以避免浪费存储器资源或读写次数。具体地,在进行过程25时,可以记录a3[0]的值,在进行过程26时,可以记录b2[0]和a2[0]的值,然后可以计算a3[0]×b2[0](即小格L),在进行过程27时,可以记录b3[0]的值,然后可以计算a2[0]×b3[0](即小格R),并且可以将这两个计算结果(即小格L和小格R)累加到过程27的累加结果中。同样地,可以提前计算小格L1和小格R1,并且可以在计算出小格L1和小格R1后,将其结果累加到过程30的累加结果中。在本公开的实施例中,也可以在计算出小格L、小格R、小格L1和小格R1后,将这四个计算结果一起累加到过程30的累加结果中。在接下来的过程中,例如,在过程31中,可以抛弃乘积的最低一位,例如,抛弃小格L和小格R1。通过提前计算这些暗色小格,在完成过程30后,可以得到(aM×bM+k×N)×R-1的计算结果的低5位。采用同样地方法提前计算小格Q和小格Q1,并且在完成过程34后,可以得到(aM×bM+k×N)×R-1的计算结果的低第6至第9位,以及在完成过程36后,可以得到(aM×bM+k×N)×R-1的计算结果的低第10至第17位,最终得到蒙哥马利域中的蒙哥马利模乘的结果pM=(aM×bM+k×N)×R-1的完整的17位计算结果。
在下文中,将结合图3描述用于实现图1的方法的数据处理装置,但本公开的实施例不限于此。
图3是示出根据本公开的实施例的用于蒙哥马利模乘中的不均等分块的数据处理装置的框图。
参考图3,该数据处理装置300可以包括输入单元301、控制器302、存储器303和输出单元304。
输入单元301可以接收输入数据aM=a×R mod N和bM=b×R mod N、以及模数N,其中,a和b为蒙哥马利模乘的输入。并且输入单元301可以将输入数据提供给控制器302。控制器302可以处理从输入单元301接收的输入数据并且将经处理后得到的数据存储在存储器303中并提供给输出单元304。具体地,控制器302可以在接收到来自输入单元304的输入数据aM和bM以及N时执行图1中所述的步骤S102至S116,得到蒙哥马利域中的蒙哥马利模乘的结果pM,然后将该pM存储在存储器中,并提供给输出单元304。存储器303可以被用于存储数据,包括输入数据aM、bM和N、以及输出数据pM。例如,存储器303可以是非易失性存储器设备,诸如电可擦除可编程只读存储器(electrically erasable programmable read-onlymemory,EEPROM)、闪速存储器、相变随机存取存储器(phase change random accessmemory,PRAM)、电阻随机存取存储器(resistance random access memory,RRAM)、磁性随机存取存储器(magnetic random access memory,MRAM)或铁电随机存取存储器(ferroelectric random access memory,FRAM)等。例如,存储器设备1000也可以是易失性存储器设备,诸如动态随机存取存储器(dynamic random access memory,DRAM)和静态随机存取存储器(static random access memory,SRAM)等。输出单元304可以接收来自控制器303的计算结果pM,并且输出pM。
通过上述步骤,可以得到蒙哥马利域中的蒙哥马利模乘结果pM,并且,在计算过程中,两个相邻竖列之间的几个位的数据可以同时被计算出,如此以来,本公开的实施例不需要占用寄存器来预存先计算出的数据以等待后计算出的数据,再一起写入存储器,从而不会造成寄存器的浪费,或者本公开的实施例不需要将先计算出和后计算出的数据分两次写入存储器,从而不会造成存储器读写次数的增加,提高了运算效率并节省了存储器资源。
在一个实施例中,可以将pM值从蒙哥马利域转换到普通域中,具体地,可以将最后一个pM值和1作为输入数据aM和bM,执行上述步骤S101-S116,得到p’=(pM×1+k×N)×R-1,其中pM值和1已经是最后的输入,不需要进行步骤S114和S115,然后将p’进行模数为N的取模运算,得到p=p’mod N=(pM×1+k×N)×R-1mod N。将蒙哥马利域中的pM转换到普通域,可以输出结果p=a×b mod N,以便于将p值应用在普通域中的其他计算中。
在一个实施例中,可以将该装置应用于加解密算法中,作为其中的计算上述pM的过程的装置,通过该装置,加解密过程变得更简单、更迅速。在另一个实施例中,该加解密算法可以包括RSA加解密算法和ECC加解密算法中的至少一种。
本公开的方法能够解决加解密算法中大数模乘运算的运算量大的问题,并且能够提高加解密运算效率,同时不会造成存储器资源的浪费。
以上,在说明书中参考附图描述了示例实施例。在整个说明书中,使用某些术语来描述示例实施例。然而,应该仅在针对示例实施例的描述性意义上来考虑这些术语,而不是为了限制的目的。因此,本领域的普通技术人员应该理解的是在不脱离本公开的范围的情况下可以进行各种修改和变化。因此,本公开的范围不是由详细描述而是由所附权利要求来限定。
Claims (8)
1.一种用于实现蒙哥马利模乘的数字电路中的不均等分块的数据处理方法,所述数字电路包括输入输出单元、处理单元和存储单元,并执行包括以下步骤的操作:
步骤1:接收输入数据,包括aM=a×R mod N、bM=b×R mod N、以及模数N,其中a和b为蒙哥马利模乘的输入,并且aM和bM为转换到蒙哥马利域中的输入;
步骤2:如果aM和bM的位宽为n,则添加m个位以将其作为位宽为n+m的输入数据,使得aM=[an+m-1,an+m-2,…,a0]和bM=[bn+m-1,bn+m-2,…,b0]被分组为x个不均等的分块,即aM=[ax-1,ax-2,…,a0]和bM=[bx-1,bx-2,…,b0]中的每个ai和每个bj的位宽不全相同,其中,R=2n +2m且2n+2m>N,n为N的位宽,m为大于或等于1的正整数,x是小于n+m且大于或等于2的正整数,i和j均取[x-1,x-2,…,0],其中,每个ai和bj中有多个位,表示为ai[gi]和bj[hj],gi取0至(ai的位宽-1)之间的整数,并且hj取0至(bj的位宽-1)之间的整数;
步骤3:设pM=(aM×bM+k×N)×R-1,按照aM和bM的分块方式相应地将N和k分组为x个不均等的分块,即N=[Nx-1,Nx-2,…,N0]和k=[kx-1,kx-2,…,k0]中的每个Ni和每个kj的位宽不全相同,其中,k是使得(aM×bM+k×N)的低n+2m位都为0的最小整数,并且k为mc×aM×bM的结果的低n+2m位,以及mc是使得mc×N的低n+2m位全为1的整数,其中,每个Ni和kj中有多个位,表示为Ni[yi]和kj[zj],yi取0至(Ni的位宽-1)之间的整数,并且zj取0至(kj的位宽-1)之间的整数;
步骤4:将aM=[an+m-1,an+m-2,…,a0]与bM=[bn+m-1,bn+m-2,…,b0]乘积的结果表示为第一网格的形式,并且所述第一网格的每一大块表示ai×bj,每一大块中有多个小格,每一小格表示ai中的每一位与bj中的每一位的乘积结果,即ai[gi]×bj[hj],将N=[Nx-1,Nx-2,…,N0]和k=[kx-1,kx-2,…,k0]乘积的结果表示为第二网格的形式,并且所述第二网格的每一大块表示Ni×kj,每一大块中有多个小格,每一小格表示Ni中的每一位与kj中的每一位的乘积结果,即Ni[yi]×kj[zj],所述第一网格和所述第二网格中在竖直方向上的每一小竖列上的每一小格具有相同的位权,将所述第一网格与所述第二网格从低位到高位对齐,以便将ai×bj的乘积结果与Ni×kj的乘积结果进行对齐累加得到ai×bj与Ni×kj之和;
步骤5:将所述第一网格和所述第二网格从低位到高位进行划分,使最低点处为第一竖列,第二竖列与第一竖列之间的位宽,第三竖列与第二竖列之间的位宽,直到第x-1竖列与第x-2竖列之间的位宽依次与输入数据aM或bM从低位到高位的位宽相对应,即a0至ax-2的位宽,而第x竖列与第一竖列之间的位宽为n+2m,并且第x+1竖列以及之后的竖列之间的位宽与输入数据aM或bM从低位到高位的位宽相对应,即a0至ax-1的位宽,使得模乘结果的输出与输入保持相同的分块方式以便于数据管理,其中,小竖列与所有竖列相平行;
步骤6:从第一竖列起,从低位到高位按竖列顺序地计算块ai×bj和Ni×kj并进行对齐累加,当计算到第x竖列时,将对齐累加的结果的低n+2m位作为数据的低n+2m位,并且所述低n+2m位均为0;
步骤7:当计算到第x+1竖列时,由于需要累加到x+1竖列上的部分数值在计算x+2竖列时才计算出,所以通过在计算第x+1竖列的一个大块时,记录与第x+1竖列上的、不包含在第x+1竖列的所有大块中的小格的列数相对应的ai[g]和Ni[g],并且在计算第x+1竖列的另一大块时,记录与第x+1竖列上的、不包含在第x+1竖列的所有大块中的小格的行数相对应的bj[h]和kj[h],来提前计算所述部分数值,即ai[g]×bj[h]以及Ni[g]×kj[h],其中,g是gi或yi中的与第x+1竖列上的、不包含在第x+1竖列的所有大块中的小格的列数相关的值,以及h是hi或zi中的与第x+1竖列上的、不包含在第x+1竖列的所有大块中的小格的行数相关的值;
步骤8:将所述ai[g]×bj[h]以及Ni[g]×kj[h]的结果与第x+1竖列的大块进行对齐累加,以得到低第n+2m+1至第(n+2m+a0的位宽)的数据;
步骤9:计算第x+1竖列以后的竖列,采用与计算第x+1竖列相同的方法,即提前计算需要累加到所计算的竖列上的、但要在该竖列之后的竖列才计算出的部分数值,在所有竖列计算完成后,得到低第n+2m+1至第2n+2m+1的数据,作为(aM×bM+k×N)的结果,并进行移位处理得到pM=(aM×bM+k×N)×R-1;
步骤10:确定pM是否是一系列蒙哥马利模乘运算后的最后得到的一个pM;
步骤11:如果不是,则将pM作为输入数据aM或bM,循环执行步骤1-10,直到计算完一系列蒙哥马利模乘运算,得到最后一个pM;
其中,数据在步骤1-11期间被存储,所述数据包括aM和bM、模数N和pM的结果;
步骤12:当得到的pM是一系列蒙哥马利模乘运算的最后一个pM时,输出最后一个pM值作为蒙哥马利域中的蒙哥马利模乘的结果。
2.根据权利要求1所述的数据处理方法,其特征在于,通过将所述最后一个pM值和1作为最后的输入数据,执行步骤1-12,得到p’=(pM×1+k×N)×R-1,然后将p’进行模数为N的取模运算,得到p=p’mod N=(pM×1+k×N)×R-1mod N,将蒙哥马利域中的pM转换为普通域中的p。
3.根据权利要求1或2所述的数据处理方法,其特征在于,将所述方法应用于加解密算法。
4.根据权利要求3所述的数据处理方法,其特征在于,所述加解密算法包括RSA加解密算法和椭圆曲线密码学ECC加解密算法中的至少一种。
5.一种用于实现蒙哥马利模乘的数字电路中的不均等分块的数据处理装置,其特征在于,包括:
输入单元,作为步骤1,接收输入数据aM=a×R mod N和bM=b×R mod N、以及模数N,其中,a和b为蒙哥马利模乘的输入,并且aM和bM为转换到蒙哥马利域中的输入;
控制器,被配置为执行以下步骤:
步骤2:如果aM和bM的位宽为n,则添加m个位以将其作为位宽为n+m的输入数据,使得aM=[an+m-1,an+m-2,…,a0]和bM=[bn+m-1,bn+m-2,…,b0]被分组为x个不均等的分块,即aM=[ax-1,ax-2,…,a0]和bM=[bx-1,bx-2,…,b0]中的每个ai和每个bj的位宽不全相同,其中,R=2n +2m且2n+2m>N,n为N的位宽,m为大于或等于1的正整数,x是小于n+m且大于或等于2的正整数,i和j均取[x-1,x-2,…,0],其中,每个ai和bj中有多个位,表示为ai[gi]和bj[hj],gi取0至(ai的位宽-1)之间的整数,并且hj取0至(bj的位宽-1)之间的整数;
步骤3:设pM=(aM×bM+k×N)×R-1,按照aM和bM的分块方式相应地将N和k分组为x个不均等的分块,即N=[Nx-1,Nx-2,…,N0]和k=[kx-1,kx-2,…,k0]中的每个Ni和每个kj的位宽不全相同,其中,k是使得(aM×bM+k×N)的低n+2m位都为0的最小整数,并且k为mc×aM×bM的结果的低n+2m位,以及mc是使得mc×N的低n+2m位全为1的整数,其中,每个Ni和kj中有多个位,表示为Ni[yi]和kj[zj],yi取0至(Ni的位宽-1)之间的整数,并且zj取0至(kj的位宽-1)之间的整数;
步骤4:将aM=[an+m-1,an+m-2,…,a0]与bM=[bn+m-1,bn+m-2,…,b0]乘积的结果表示为第一网格的形式,并且所述第一网格的每一大块表示ai×bj,每一大块中有多个小格,每一小格表示ai中的每一位与bj中的每一位的乘积结果,即ai[gi]×bj[hj],将N=[Nx-1,Nx-2,…,N0]和k=[kx-1,kx-2,…,k0]乘积的结果表示为第二网格的形式,并且所述第二网格的每一大块表示Ni×kj,每一大块中有多个小格,每一小格表示Ni中的每一位与kj中的每一位的乘积结果,即Ni[yi]×kj[zj],所述第一网格和所述第二网格中在竖直方向上的每一小竖列上的每一小格具有相同的位权,将所述第一网格与所述第二网格从低位到高位对齐,以便将ai×bj的乘积结果与Ni×kj的乘积结果进行对齐累加得到ai×bj与Ni×kj之和;
步骤5:将所述第一网格和所述第二网格从低位到高位进行划分,使最低点处为第一竖列,第二竖列与第一竖列之间的位宽,第三竖列与第二竖列之间的位宽,直到第x-1竖列与第x-2竖列之间的位宽依次与输入数据aM或bM从低位到高位的位宽相对应,即a0至ax-2的位宽,而第x竖列与第一竖列之间的位宽为n+2m,并且第x+1竖列以及之后的竖列之间的位宽依次与输入数据aM或bM从低位到高位的位宽相对应,即a0至ax-1的位宽,使得模乘结果的输出与输入保持相同的分块方式以便于数据管理,其中,小竖列与所有竖列相平行;
步骤6:从第一竖列起,从低位到高位按竖列顺序地计算大块ai×bj和Ni×kj并进行对齐累加,当计算到第x竖列时,将对齐累加的结果的低n+2m位作为数据的低n+2m位,并且所述低n+2m位均为0;
步骤7:当计算到第x+1竖列时,由于需要累加到x+1竖列上的部分数值在计算x+2竖列时才计算出,所以通过在计算第x+1竖列的一个大块时,记录与第x+1竖列上的、不包含在第x+1竖列的所有大块中的小格的列数相对应的ai[g]和Ni[g],并且在计算第x+1竖列的另一大块时,记录与第x+1竖列上的、不包含在第x+1竖列的所有大块中的小格的行数相对应的bj[h]和kj[h],来提前计算所述部分数值,即ai[g]×bj[h]以及Ni[g]×kj[h],其中,g是gi或yi中的与第x+1竖列上的、不包含在第x+1竖列的所有大块中的小格的列数相关的值,以及h是hi或zi中的与第x+1竖列上的、不包含在第x+1竖列的所有大块中的小格的行数相关的值;
步骤8:将所述ai[g]×bj[h]以及Ni[g]×kj[h]的结果与第x+1竖列的大块进行对齐累加,以得到低第n+2m+1至第(n+2m+a0的位宽)的数据;
步骤9:计算第x+1竖列以后的竖列,采用与计算第x+1竖列相同的方法,即提前计算需要累加到所计算的竖列上的、但要在该竖列之后的竖列才计算出的部分数值,在所有竖列计算完成后,得到低第n+2m+1至第2n+2m+1的数据,作为(aM×bM+k×N)的结果,并进行移位处理得到pM=(aM×bM+k×N)×R-1;
步骤10:确定pM是否是一系列蒙哥马利模乘运算后的最后得到的一个pM;
步骤11:如果不是,则将pM作为输入数据aM或bM,循环执行步骤1-10,直到计算完一系列蒙哥马利模乘运算,得到最后一个pM;
存储器,被配置为在步骤1-11期间存储数据,包括aM和bM、模数N和pM的结果;以及
输出单元,被配置为作为步骤12,当得到的pM是一系列蒙哥马利模乘运算的最后一个pM时,输出最后一个pM值作为蒙哥马利域中的蒙哥马利模乘的结果。
6.根据权利要求5所述的数据处理装置,其特征在于,通过将所述最后一个pM值和1作为最后的输入数据,执行步骤1-12,得到p’=(pM×1+k×N)×R-1,然后将p’进行模数为N的取模运算,得到p=p’mod N=(pM×1+k×N)×R-1mod N,将蒙哥马利域中的pM转换为普通域中的p。
7.根据权利要求5或6所述的数据处理装置,其特征在于,将所述数据处理装置应用于加解密算法。
8.根据权利要求7所述的数据处理装置,其特征在于,所述加解密算法包括RSA加解密算法和椭圆曲线密码学ECC加解密算法中的至少一种。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811601122.0A CN109669670B (zh) | 2018-12-26 | 2018-12-26 | 用于蒙哥马利模乘中的不均等分块的数据处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811601122.0A CN109669670B (zh) | 2018-12-26 | 2018-12-26 | 用于蒙哥马利模乘中的不均等分块的数据处理方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109669670A CN109669670A (zh) | 2019-04-23 |
CN109669670B true CN109669670B (zh) | 2020-09-22 |
Family
ID=66146233
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811601122.0A Active CN109669670B (zh) | 2018-12-26 | 2018-12-26 | 用于蒙哥马利模乘中的不均等分块的数据处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109669670B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111145924B (zh) * | 2019-12-31 | 2021-08-10 | 西安交通大学 | 针对多孔六棱柱式核燃料元件的功率密度分布统计方法 |
CN115348002B (zh) * | 2021-05-12 | 2024-05-10 | 中国科学院声学研究所 | 一种基于多字长乘法指令的Montgomery模乘快速计算方法 |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2004326112A (ja) * | 2003-04-25 | 2004-11-18 | Samsung Electronics Co Ltd | マルチプルモジュラス選択器、累算器、モンゴメリー掛け算器、マルチプルモジュラス発生方法、部分掛け発生方法、累算方法、掛け算方法、モジュラス選択器、およびブースレコーダ |
JP4408712B2 (ja) * | 2004-01-26 | 2010-02-03 | 富士通マイクロエレクトロニクス株式会社 | 多倍長データ積和演算処理回路及びモンゴメリ積和剰余演算回路 |
KR20050088506A (ko) * | 2004-03-02 | 2005-09-07 | 삼성전자주식회사 | 다중 세정도를 지원하는 확장형 몽고메리 모듈러 곱셈기 |
JP5027422B2 (ja) * | 2006-02-09 | 2012-09-19 | ルネサスエレクトロニクス株式会社 | 剰余演算処理装置 |
WO2008028529A1 (de) * | 2006-09-07 | 2008-03-13 | Micronas Gmbh | Schaltungen für die modulare arithmetik basierend auf der ergänzung von kettenbrüchen |
CN100527073C (zh) * | 2006-11-09 | 2009-08-12 | 北京华大信安科技有限公司 | 高效模乘方法及装置 |
FR2974202B1 (fr) * | 2011-04-18 | 2013-04-12 | Inside Secure | Procede de multiplication de montgomery |
CN102207847B (zh) * | 2011-05-06 | 2013-12-04 | 广州杰赛科技股份有限公司 | 基于蒙哥马利模乘运算的数据加解密处理方法及装置 |
CN102231102B (zh) * | 2011-06-16 | 2013-08-07 | 天津大学 | 基于余数系统的rsa密码处理方法及协处理器 |
CN104793919B (zh) * | 2015-04-15 | 2017-11-07 | 深圳国微技术有限公司 | 一种蒙哥马利模乘装置及具有其的嵌入式安全芯片 |
CN105068784B (zh) * | 2015-07-16 | 2018-02-16 | 清华大学 | 实现基于蒙哥马利模乘的Tate对算法的电路 |
CN106681691B (zh) * | 2015-11-07 | 2019-01-29 | 上海复旦微电子集团股份有限公司 | 基于蒙哥马利模乘的数据处理方法、模乘运算方法和装置 |
CN106681690B (zh) * | 2015-11-07 | 2019-02-26 | 上海复旦微电子集团股份有限公司 | 基于蒙哥马利模乘的数据处理方法、模乘运算方法及装置 |
-
2018
- 2018-12-26 CN CN201811601122.0A patent/CN109669670B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN109669670A (zh) | 2019-04-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20230359695A1 (en) | Memory-Size- and Bandwidth-Efficient Method for Feeding Systolic Array Matrix Multipliers | |
CN106445471B (zh) | 处理器和用于在处理器上执行矩阵乘运算的方法 | |
CN104426554B (zh) | 用于低密度奇偶校验码的改善的解码器 | |
CN109669670B (zh) | 用于蒙哥马利模乘中的不均等分块的数据处理方法及装置 | |
US20210081173A1 (en) | Concurrent multi-bit adder | |
CN115858235B (zh) | 循环冗余检验处理方法及装置、电路、电子设备和介质 | |
CN114565501B (zh) | 用于卷积运算的数据加载方法及其装置 | |
JP2002215385A (ja) | 剰余系表現を利用した演算装置及び方法及びプログラム | |
JPH08101779A (ja) | 有限領域におけるモジュラ計算用の電子回路 | |
CN114063973A (zh) | 伽罗华域乘法器及纠删编解码系统 | |
CN112712457A (zh) | 数据处理方法以及人工智能处理器 | |
JP5383806B2 (ja) | 暗号化システム | |
US20200026998A1 (en) | Information processing apparatus for convolution operations in layers of convolutional neural network | |
JPH06175583A (ja) | べき乗剰余演算回路 | |
CN108962322A (zh) | 使用非易失性存储器来实施非易失性计数器的方法和系统 | |
EP0947913B1 (fr) | Procédé de réalisation amélioré d'une division entière | |
CN109992242B (zh) | 基于乘法器的运算方法及装置 | |
CN105930093A (zh) | 数据储存设备及其操作方法 | |
JP4157940B2 (ja) | 2進数カウンタ | |
US7278090B2 (en) | Correction parameter determination system | |
CN114510273B (zh) | 一种实现椭圆曲线密码的标量乘运算的处理器和方法 | |
JP2019168783A (ja) | 半導体装置 | |
CN114706557B (zh) | 一种asic芯片及蒙哥马利模乘的实现方法和装置 | |
JP7120885B2 (ja) | 半導体装置、および除算方法 | |
CN111213122A (zh) | 模逆运算器、模逆运算方法及安全系统 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP03 | Change of name, title or address | ||
CP03 | Change of name, title or address |
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) Patentee 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 Patentee before: GUIZHOU HUAXINTONG SEMICONDUCTOR TECHNOLOGY Co.,Ltd. |