CN102866878B - 加速对特性2椭圆曲线密码系统的计算的方法 - Google Patents
加速对特性2椭圆曲线密码系统的计算的方法 Download PDFInfo
- Publication number
- CN102866878B CN102866878B CN201210297970.3A CN201210297970A CN102866878B CN 102866878 B CN102866878 B CN 102866878B CN 201210297970 A CN201210297970 A CN 201210297970A CN 102866878 B CN102866878 B CN 102866878B
- Authority
- CN
- China
- Prior art keywords
- product
- multiplication
- carry
- few
- multinomial
- 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.)
- Expired - Fee Related
Links
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/724—Finite field arithmetic
- G06F7/725—Finite field arithmetic over elliptic curves
-
- 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/724—Finite field arithmetic
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/30—Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy
- H04L9/3006—Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy underlying computational problems or public-key parameters
- H04L9/3026—Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy underlying computational problems or public-key parameters details relating to polynomials generation, e.g. generation of irreducible polynomials
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/30—Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy
- H04L9/3066—Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy involving algebraic varieties, e.g. elliptic or hyper-elliptic curves
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L2209/00—Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
- H04L2209/80—Wireless
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Computational Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Algebra (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Complex Calculations (AREA)
- Error Detection And Correction (AREA)
Abstract
在某些实施例中,描述了一种用于加速特性2椭圆曲线密码系统的计算的装置和方法。在一个实施例中,根据输入操作数长度,利用一次迭代基于图的乘法预先计算乘法例程。预先计算之后,乘法例程接着利用进位少的乘法指令计算表示两个输入操作数的进位少的乘积的多项式的系数的乘积。在一个实施例中,预先计算的乘法例程可用于根据两个输入操作数的输入操作数长度扩展可从层级获得的进位少的乘法指令。计算之后,在计算进位少的乘积模定义所述椭圆曲线密码系统的可编程多项式时,进位少的乘积多项式产生余数,以形成密码密钥。描述并要求保护其他实施例。
Description
本申请是2008年12月26日提交的、申请号为200810189706.1、题为“加速对特性2椭圆曲线密码系统的计算的方法”的发明专利申请的分案申请。
背景
领域
实施例涉及密码领域,且尤其涉及加速对特性2椭圆曲线密码系统的计算的装置、系统和方法。
背景技术
Karatsuba算法(A.Karatsuba和Y.Ofman,Multiplication of MultidigitNumbers on Automata(自动机上多位数的乘法),Soviet Physics–Doklady,7(1963),第595-596页)在1962年提出,作为一种减少计算两个大数的乘积所需的标量乘法的数目的尝试。经典的算法接受次数等于1的两个多项式作为输入,即a(x)=a1x+a0和b(x)=b1x+b0,并利用三个标量乘法计算它们的乘积a(x)b(x)=a1b1x2+(a1b0+a0b1)x+a0b0。这种技术与多项式a(x)和b(x)相乘的朴素(也称为“教科书”)方式不同,该方式执行4个标量乘法,即得出乘积a0b0、a0b1、a1b0和a1b1。
Karatsuba示出仅需要进行三个标量乘法,即仅需要得出乘积a1b1、(a1+a0)(b1+b0)和a0b0。一旦执行标量乘法,缺失的系数(a1b0+a0b1)可被计算为差值(a1+a0)(b1+b0)-a0b0-a1b1。对于较大的操作数,可递归地应用Karatsuba算法。
Karatsuba不仅适用于多项式,还适用于大数。大数可通过用变量x替换任意2的幂来转换成多项式。与使用Karatsuba相关联的最重要的未解决的问题之一是如何将算法应用到大数,而不会由于递归而浪费处理时间。递归不合需要有三个原因。第一,递归Karatsuba进程使相关的加法与乘法交织。结果,递归Karatsuba进程不能充分利用任何由处理器架构或芯片组支持的硬件级并行度。第二,由于递归,由递归Karatsuba产生的中间标量项需要更多的处理器字来表示。因此,单个标量乘法或加法需要一个以上的处理器运算来实现。这种额外开销是相当大的。第三,递归Karatsuba招致函数调用额外开销。
Oregon Sate University(俄勒冈州立大学)的Cetin Koc等人(S.S.Erdem和C.K.Koc.“A less recursive variant of Karatsuba-Ofman algorithm formultiplying operands of size a power of two”(用于对2的幂大小的操作数作乘法的Karatsuba-Ofman算法的较小递归变体),会议录,第16届IEEE计算机架构讨论会,主编J.-C.Bajard和M.Schulte,第28-35页,IEEE计算机协会出版社,Santiago de Compostela,西班牙,2003年6月15-18日)描述了Karatsuba的一种较小递归变体,其中输入操作数的大小需要是2的幂。然而,该变体仍需要递归调用且仅适用于特定大小的操作数。
最初由Koblitz(N.Koblitz,“Elliptic Curve Cryptosystems”(椭圆曲线密码系统),Mathematics of Computation(计算数学),48,第203-209页,1987)和Miller(V.Miller,“Uses of Elliptic Curvers in Cryptography”(密码学中椭圆曲线的使用),会议录,Advances in Cryptology(Crypto’85)(密码学的进步),第416-426页,1985)提出的椭圆曲线密码学近来获得了来自工业的很多关注,并且密钥建立和数字签名运算类似于带有相似密码强度的RSA,但其密钥大小小得多。
椭圆曲线密码学背后的主要思想是椭圆曲线中的点形成加法群。点可与其自身相加很多次,其中加法次数可以是很大的数。这种运算通常被称为“点乘标量乘法(pointtimes scalar multiplication)”或简称为“点乘法”。椭圆曲线密码学对公钥运算的适用性来自以下事实:如果原始和所得点是已知的,但加法的数目是未知的,则很难从原始和所得点得出该数目。所得的点的坐标可形成公钥,而产生公钥的加法的数目可形成私钥。
附图简述
在附图的各个图中,实施例作为示例而非限制示出,其中相同的附图标记指示类似的元素,且附图中:
图1示出4乘4示例的进程的实施例的流程图;
图2示出完全图的示例;
图3示出图同构的示例;
图4示出18乘18示例的实施例的图示;
图5示出利用局部索引序列符号的实施例的生成平面(spanning plane)的表示;
图6示出利用半局部索引序列和全局索引符号的实施例的生成平面的表示;
图7示出生成平面的可选表示;
图8示出9乘9生成平面的另一个示例;
图9示出边到生成边和生成平面的映射的实施例表示;
图10示出实施例的减法生成的图示;
图11A-11B示出实施例的框图;
图12示出现有进程与实施例的比较;以及
图13是示出根据一个实施例的计算两个输入操作数的进位少的乘积的余数的方法。
图14是示出根据一个实施例计算图13的余数的方法的流程图。
图15示出系统中的装置的实施例。
详细描述
本文讨论的实施例一般涉及加速对特性2椭圆曲线密码系统的计算的装置、系统和方法。在一个实施例中,诸如Lopez-Dahab空间(J.Lopez和R.Dahab,“FastMultiplication on Elliptic Curves over GF(2m)without Precomputation”(无需预计算的在GF(2m)上椭圆曲线的快速乘法),会议录,Workshop on Cryptographic Hardwareand Embedded Systems(CHES 1999)(加密硬件与嵌入式系统研讨会),第316-327页,1999)的射影空间被用于表示点坐标,点加法和点倍增通过引入一种在GF(2m)形式的有限域中使元素相乘的新颖的方式来加速。在一个实施例中,元素利用用于进位少(carry-less)的乘法(GFMUL)和单次迭代类似Karatsuba公式(M.Kounavis,“A New Method for FastInteger Multiplication and its Application to Cryptography”(一种用于快速整数乘法的新方法及其对密码学的应用),会议录,International Symposium on thePerformance Evaluation of Computer and Telecommunication Systems(关于计算机和电信系统的性能评估的国际研讨会SPECTS2007)圣地亚哥,美国加州,2007年7月)的CPU指令做乘法,用于计算GF(2)中高次数多项式的进位少的乘积。
在一个实施例中,通过认识到很多曲线用稀疏的不可约多项式指定域,来进行这些多项式的进位少的乘积的约简。例如,美国国家标准及技术研究所(NIST)曲线用三项(三项式)或五项(五项式)指定多项式。一个实施例用软件在3.6GHz奔腾4处理器上基于NISTB-233曲线使椭圆曲线Diffie Hellman加速55%。如果将3时钟等待时间GFMUL指令引入CPU,则加速因子变为5.2X。进一步的软件优化有可能使加速增加超过10X。参照附图,现在将描述示例性实施例。提供示例性实施例,以说明实施例且不应该理解为限制本实施例的范围。
在一个实施例中,针对其中点坐标是GF(2m)形式的有限域的元素且诸如Lopez-Dahab射影空间(Lopez和Dahab 1999)之类的射影空间用于表示点坐标的椭圆曲线,加速点乘法,以确保点乘法中的所有基本运算(即点加法和点倍增)包括Galois(伽罗瓦)域加法和乘法但没有除法。通过实现Galois域乘法,我们的实现方式不同于现有技术水平(“TheOpenSSL Source Code Distribution”(OpenSSL源代码分布)可在www.openssl.org得到)。
在现有技术水平的实现中,使用针对32或64比特进位少的乘法的4比特表查找、用于将进位少的乘法扩展到较大操作数的递归Karatsuba和最终乘积模(modulo)所使用域的不可约多项式的逐字约简,来实现Galois域(GF)乘法。在一个实施例中,使用实现两个64比特输入的进位少的乘法的指令(GFMUL)来代替表查找。利用GFMUL指令作为构造块,将新颖的单次迭代扩展(Kounavis 2007)应用于已知的Karatsuba算法,以便获得所需的较大输入(例如,233 bitds)的进位少的乘法。在一个实施例中,一种约简结果模稀疏的不可约多项式的方法有助于提高总体性能。
在一个实施例中,NIST B-233曲线的约简需要不超过3个256比特宽偏移和3个256比特宽XOR操作,从而使得单个英特尔奔腾4执行椭圆曲线Diffie Hellman能够比现有技术水平(OpenSSL,未注明日期)快55%。此外,如果使用3时钟GFMUL指令,则加速器因子变为5.2X。在一个实施例中,约简方法不需要将域特定约简逻辑置于处理器指令的实现中。我们首先描述进位少的乘法。
如本文所描述的,“进位少的乘法”也称为Galois域(GF(2))乘法,是使两个数相乘而不生成或传播进位的运算。在标准的整数乘法中,第一操作数被移位的次数与第二操作数中等于“1”的比特的位置一样多。通过使第一操作数的经移位的版本彼此相加导出两个操作数的乘积。在进位少的乘法中,进行相同的过程,但加法不生成或传播进位。由此,比特加法等价于异或(XOR)逻辑运算。
进位少的乘法形式上定义如下:令两个操作数各自是大小为n比特的A、B。令数A是以下的比特阵列
A=[an-1 an-2…a0] (1)
还令数B是:
B=[bn-1 bn-2…b0] (2)
令进位少的乘法结果是以下的比特阵列:
C=[c2n-1 c2n-2…c0] (3)
输出C的比特被定义为以下输入A和B的比特的逻辑函数:
其中0≤i≤n-1,以及:
其中n-1≤i≤2n-1。
从硬件实现的观点可以看出,方程式(4)和(5)的逻辑函数中的每一个可利用XOR树来实现。最深的XOR树是实现其中接纳n个输入的函数cn-1的一个。例如,Galois域乘法(GFMUL)的64比特指令需要3969 XOR和4096 AND门。
在一个实施例中,XOR树可用于构造适中输入操作数大小(例如,64比特)的进位少的乘法器指令逻辑。一个实施例通过利用快速多项式乘法技术进行扩展来提供较大操作数的进位少的乘法,该快速多项式乘法技术是公知的Karatsuba算法(Karatsuba和Ofman,1963)的一般化,由近正方形复杂度(sub-quadratic complexity)表征为输入操作数大小的函数,同时避免递归成本。该进位少的乘法指令在表1中示出。
表1
进位少的乘法指令
描述:
该指令进行进位少的乘法。
输入:A,B(n比特)
输出:C(2n比特)
C[i]=XOR(j=0..i,A[j]&B[i-j]) 其中i=0…n-1
C[i]=XOR(j=i+1-n..n-1,A[j]&B[i-j]) 其中i=n…2n-1
C[2n]=0
示例:对于n=2,A=[A[1],A[0]],B=[B[1],B[0]],
C[0]=A[0]&B[0],C[1]=A[0]&B[1]XOR A[1]&B[0],C[2]=A[1]&B[1],C[3]=0
运算:
[EDX:EAX]←EAX*r/m32
[RDX:RAX]←RAX*r/m64
我们现在描述单次迭代基于图的乘法例程。图1利用实施例示出利用图生成4乘4乘积项的示例。如图1所示,输入操作数是大小为4的字。在其它实施例中,操作数大小是诸如计算设备(例如,计算机)之类的机器的本机操作数大小。操作数是多项式a(x)=a3x3+a2x2+a1x+a0和b(x)=b3x3+b2x2+b1x+b0。由于输入操作数大小是4的事实,实施例构造完整的正方形。正方形的顶点被索引为0、1、2和3,如图1所示。在实施例的进程的第一部分构造完整的正方形(参见图11A)。在实施例的进程的第二部分中,选择完整的子图的集合,且各个子图被映射到标量积(参见图11B)。
连接顶点i0,i2,...,im-1的完整子图被映射到标量积在图1所示的示例中选择的完整子图是顶点0、1、2和3,边0-1、2-3、0-2和1-3,以及整个正方形0-1-2-3。在进程的第二部分中定义的标量积是a0b0、a1b1、a2b2、a3b3、(a0+a1)(b0+b1)、(a2+a3)(b2+b3)、(a0+a2)(b0+b2)、(a1+a3)(b1+b3)和(a0+a1+a2+a3)(b0+b1+b2+b3)。在进程的最后部分中,进行若干次减法(参见图11B,1165)。
作为示例,从完整的正方形0-1-2-3中减去边0-1和2-3(带有其相邻顶点)以及0-2和1-3(不带有其相邻顶点)。剩余的是对角线0-3和1-2。这些对角线对应于项a1b2+a2b1+a3b0+a0b3,这个项是结果的x3的系数。在一个实施例中,由公式的集合的减法产生的差表示完全图的对角线,其中这些图中的顶点数是2的幂(即,正方形、立方体、超立方体等)。由减法得到的项在彼此相加时产生最终乘积的系数。
为了更详细地解释,首先注意以下的定义。N表示输入的大小(即,每个输入多项式的项数)。N是L个整数n0,n1,…,nL-1的乘积。数L表示乘法的级数。
N=n0·n1·...·nL-1 (6)
对于L级,其中“级”定义完全图的集合,级l的图集合被表示为G(l)。集合G(l)的基数被表示为|G(l)|。集合G(l)的第i元素被表示为每一个图集合G(l)具有有限数目的元素。集合G(l)的基数被定义为:
集合G(l)的每一个元素对于完全图是同构的。图集合G(l)的正式定义在方程式(8)中示出:
完全图Ka是由索引为0,1,2,...,a-1的a个顶点组成的图,其中每一个顶点用边与该图的各个其它顶点相连。图2示出完全图的示例。如果存在顶点映射函数fv和边映射函数fe,使得对于图A的每个边e函数fv将e的端点映射到fe(e)的端点,则将两个图A和B称为同构。边fe(e)及其端点都属于图B。
图3示出两个同构图的示例。
在一个实施例中,能够以两种方式索引集合G(l)的元素。一种方式是使用唯一的索引i,该索引i可采用0和|G(l)|-1之间的所有可能值,其中基数|G(l)|由方程式7给出。这一元素被表示为这种表示图的方式被表示为“全局索引”。即,在特定级上用于表示图的索引被称为全局索引。对元素索引的另一种方式是使用l个索引i0,i1,...,il-1的集合,且l>0。这种索引序列被称为“局部索引”序列。在l=0的简单情况下,局部索引序列仅由一个索引组成,该索引等于0。局部索引i0,i1,...,il-1与特定元素的全局索引i以方程式(9)所示的方式相关。
i=(((i0·n1)+i1)·n2+i2)·n3+...+il-1 (9)
方程式(9)还可按闭合形式写为:
局部索引i0,i1,...,il-1满足以下的不等式:
0≤i0≤n0-1
0≤i1≤n1- 1 (11)
...0≤il-1≤nl-1-1
在一个实施例中,如果不等式(6)有效且基数|G(l)|由(2)给出,则与局部索引序列i0,i1,...,il-1有关的全局索引i的值在0和|G(l)|-1之间。这由以下证明:从方程式(9)可以看出i是i0,i1,...,il-1的非减函数。因此,i的最小值通过将每一个局部索引设置为等于0来产生。因此最小的i是0。i的最大值通过将每一个局部索引i0,i1,...,il-1设置为等于其最大值来获得。对于0≤j≤l-1用nj-1代替每一个局部索引ij,得到:
imax=(n0-1)·n1·n2·...·nl-1+(n1-1)·n2·...·nl-1+...+nl-1-1=n0·n1·n2·...·nl-1-n1·n2·n3·...·nl-1+n1·n2·n3·...·nl-1-n2·n3·n4·...·nl-1 +n2·n3·n4·...·nl-1-n3·n4·n5·...·nl-1+...-nl-1+nl-1-1=n0·n1·n2·...·nl-1-1=|G(l)|-1(12)
在每个全局索引i在0和|G(l)|-1之间的一个实施例中,存在满足方程式(10)和方程式(11)中的不等式的唯一的局部索引序列i0,i1,...,il-1。这由以下证明:为了证明对于全局索引i,0≤i≤|G(l)|-1,存在至少一个满足方程式(10)和方程式(11)的局部索引序列i0,i1,...,il-1,在一个实施例中,以下的伪码表示这种局部索引序列的构造:
LOCAL_INDEXES(i)
1.forj←0tol-1
2. do ifj+1≤l-1
3. then
4.
5.
6. else
7. ij←i mod nl-1
8.return{i0,i1,…,il-1}
可以看出由LOCAL INDEXES产生的局部索引序列i0,i1,…,il-1满足方程式(10)和方程式(11)中的不等式两者。因此,证明了与全局索引相关联的局部索引序列的存在。
为了证明局部索引序列的唯一性,注意,如果两个序列i0,i1,…,il-1和i′0,i′1,...,i′l-1都满足方程式(10)和方程式(11),则某些索引q,0≤q≤l-1,不可能使i′q≠iq。假设相反的情况,即有m个索引q0,q1,…,qm-1使得 同样假设对于所有其它索引,序列i0,i1,…,il-1和i′0,i′1,..,i′l-1相等。因为两个序列都满足方程式(10)所以以下的恒等式为真:
不失一般性,假设q0<q1<…<qm-1。数明显是的倍数。项与这个数相加不可能使和 等于0,因为同样的情况适用于所有其它的项——一直到——的和。结果方程式(13)不可能有效。因此,证明了局部索引序列的唯一性。
以下符号用于表示与全局索引i和局部索引序列i0,i1,...,il-1相关联的图
考虑级l的图(或)。该图根据定义同构为这表示该图包括nl个顶点和nl·(nl-1)/2个边,其中每个顶点以边连接到所有其它的顶点。集合(或)被定义为图(或)的所有顶点的集合。在一个实施例中,可使用三种替换方式来表示图的顶点。一种方式是使用局部索引序列符号。图的第il顶点被表示为其中0≤il≤nl-1。使用局部索引序列符号,图的所有顶点的集合被定义为:
表示图的顶点的第二种方式是使用“半局部”索引序列符号。在一个实施例中,半局部索引序列包括图的全局索引和与顶点相关联的局部索引。使用半局部索引序列符号,图的第il索引被表示为其中0≤il≤nl-1。由此,图的所有顶点的集合被定义为:
在一个实施例中,对每个顶点分配唯一的全局索引ig←i·nl+il。示出0≤ig≤|G(l+1)|-1且对于每个半全局索引序列i,il,存在唯一的全局索引ig使得ig=i·nl+il;同样对于每个全局索引ig,存在唯一的半全局索引序列i,il使得ig=i·nl+il。
根据方程式(10)用取代i,顶点的全局索引ig与局部索引序列i0,i1,...,il-1,il相关联。索引i0,i1,...,il-1表征包含顶点的图,而索引il表征顶点本身。ig与i0,i1,...,il-1,il之间的关系在方程式(17)中给出:
在一个实施例中,与级l的图的某些顶点相关联的全局索引ig具有与满足恒等式(12)、不等式(6)和0≤il≤nl-1的唯一的局部索引序列i0,i1,...,il-1,il的一对一对应。
使用全局索引符号,图(或)的所有顶点的集合被定义为
或
连接级l的图的两个顶点和的边被表示为如果两个顶点和利用半局部索引序列符号表示,则连接这两个顶点的边被表示为最后如果两个顶点和利用局部索引序列符号表示,则连接这两个顶点的边被表示为图(或)的所有边的集合被表示为(或)。该集合被正式定义为:
或
或
在一个实施例中,用于同一级的不同图的顶点之间的边的符号与用于同一图的顶点之间的边的符号相同。例如,连接利用局部索引序列符号表示的两个顶点和的边被表示为
在一个实施例中,用于图G的顶点和边的集合的替换符号分别是V(G)和E(G)。此外,来自图论的术语“简单”用于指与末级L-1相关联的图、顶点和边。所有其它级l,l<L-1的图、顶点和边被称为“广义”。与特定图G、顶点v或边e相关联的级分别被表示为l(G)、l(v)或l(e)。
顶点至图映射函数fv→G被定义为一种接受特定级l,l<L-1的图的顶点作为输入、并返回与输入顶点相同的全局索引或局部索引序列相关联的下一级l+1的图的函数。
函数fv→G的替换定义是:
和
类似地,图至顶点映射函数fg→v被定义为一种接受特定级l,l>0的图作为输入、并返回与输入图相同的全局索引或局部索引序列相关联的前一级l-1的顶点的函数。
函数fg→v的替换定义是:
和
顶点至图和图至顶点映射函数的重要性在于它们使我们能够绘画般地表示针对特定操作数输入大小定义的所有级的所有图。第一,图的每一个顶点被表示为圆。第二,每个圆的内部,绘制下一级的图,它映射到由圆表示的顶点。作为示例,图4示出如何绘制针对18乘18乘法定义的图。
在图4示出的例子中,N=18。可将N写为三个因子——即2、3和3的乘积,将级数L设置成等于3,且n0=2、n1=n2=3,针对与如图4所示的乘法相关联的所有级绘制图。可以看出,在末级图的顶点不包括任何图。这就是它们被称为“简单”的原因。还可看出,特定级的每一个顶点包含的图的集合数与下面的级数相等。这就是图的集合被称为“级”的原因。
在一个实施例中,术语“生成”是从图论加载的。术语生成用于指在特定级连接不同图的顶点的边或边的集合。
生成平面被定义为由同一级的两个不同图的两个子图之间的结合“+”运算得到的图。两个子图中的每一个都包括连接两个顶点的单边。以下描述这两个子图:
以及
此外,表征被结合以产生生成平面的两个边的局部索引序列需要满足以下条件:
方程式(30)还可按闭合形式写成如下:
方程式(30)或方程式(31)指示生成平面中结合边的所有相应局部索引相等,但位置q处的索引除外,其中0≤q≤l-1。因为iq≠i′q,这意味着被结合以形成生成平面的两个边与不同的图相关联。在q=l-1的特殊情况下,包含生成平面的结合边的两个图映射到级l-1的同一图的顶点上,因为i0=i′0,i1=i′1,...,il-2=i′l-2。
两个图之间的结合运算“+”被定义为一新图,该新图包括“+”的两个操作数加上将第一操作数的每一个顶点连接至第二操作数的每一个顶点的新边。在图5中示出通过结合方程式(29)的两个子图同时方程式(31)有效且q=l-1而产生的生成平面。如图5所示,利用局部索引序列符号表示顶点和边。
利用局部索引序列符号,可将生成平面正式地定义为:
因为局部索引序列符号冗长,所以将较短的“半局部”索引序列符号用于表示生成平面:
在以上方程式(33)的定义中,索引i的值由恒等式(10)以及下式给出:i′=i0·n1·n2·...·nl-1+i1·n2·...·nl-1+...+i′q·nq+1·...·nl-1+...+il-2·nl-1+il-1 (34)
在一个实施例中,全局索引符号用于表示生成平面。使用全局索引符号,可将生成平面定义为:
在以上的方程式(35)符号中:
恒等式(31)中的索引i由恒等式(5)给出,而(31)中的索引i′由恒等式(29)给出。在图6中给出利用半局部索引序列和全局索引符号的生成平面的绘画表示。
在另一个实施例中,在图7示出所使用的生成平面的可选绘画表示。图7中示出的顶点利用全局索引符号表示。为了简化,省略了顶点的级。
在图8中示出生成平面的示例。该示例示出针对9乘9乘法构造的图及所有简单顶点的全局索引。该示例还示出由边和定义的生成平面。
生成边是连接同一级的不同图的两个顶点和的边。描述两个顶点的局部索引序列i0,i1,...,il和i′0,i′1,..,i′l需要满足以下条件:
i0=i′0,i1=i′1,...,iq≠i′q,...,il=i′l (37)
或者(以闭合形式):
根据方程式(38)中的条件,显而易见的是生成边连接具有相同最后局部索引(il=i′l)的顶点。第二,作为生成边的端点的顶点与不同的图G(l)相关联,因为iq≠i′q。第三,在q=l-1的特殊情况下,包含生成边的端点的两个图映射到级l-1的同一图的顶点,因为i0=i′0,i1=i′1,...,il-2=i′l-2。
生成边可利用局部索引序列符号正式地表示如下:
生成边还可利用半局部索引序列符号正式地表示:
在方程式(40)的定义中,索引i的值由方程式(10)以及下式中示出的恒等式给出:
i′=i0·n1·n2·...·nl-1+i1·n2·...·nl-1+...+i′q·nq+1·...·nl-1+...+il-2·nl-1+il-1 (41)
在另一个实施例中,表示生成边的第三种方式是通过使用全局索引符号:
为了进一步帮助理解,引入在边、生成边和生成平面之间定义的映射集合。在以下的内容中,术语“对应的”用于指与相同的最后局部索引相关联的同一级的不同图的顶点。同一级的不同图的两个边如果连接相应的端点则被称为“对应的”。
广义边(即图的边,0≤l≤L-1)或生成边可通过映射函数fe→s映射到生成边和生成平面的集合。函数fe→s接受边(如果是生成边、则不包括端点)作为输入,并返回认为在通过函数fv→g映射到输入边的端点的图的相应顶点和边之间的所有可能的生成边和生成平面的集合。
在正式描述fe→s映射之前,介绍一个示例。在图9所示的示例中,广义边e(为了简化省略了它的级和索引)连接映射到三角形0-1-2和3-4-5的两个顶点。这种映射是通过函数fv→g完成的。边e通过函数fe→s映射到如图9所示的三个生成边和三个生成面。生成边是连接分别带有全局索引0和3、1和4以及2和5的顶点的那些边。生成平面是分别通过边0-1和3-4、0-2和3-5以及1-2和4-5之间的结合运算产生的那些平面。
使用局部索引序列位置,函数fe→s可被正式地定义为:
在方程式(43)的定义中,索引位置q获得来自集合[0,l]的所有可能值。
映射仅被定义在边和生成边之间,而映射仅被定义在边和生成平面之间。
以及
在方程式(44)和方程式(45)的定义中,索引位置q获得来自集合[0,l]的所有可能值。
在一个实施例中,定义了顶点的集合和乘积之间的映射。实施例的乘法进程的输入是次数为N-1的多项式a(x)b(x):
a(x)=aN-1·xN-1+aN-2·xN-2+...+a1·x+a0,
(46)
b(x)=bN-1·xN-1+bN-2·xN-2+...+b1·x+b0
在一个实施例中,多项式a(x)和b(x)的系数是实数或复数。在其它实施例中,多项式a(x)和b(x)的系数是有限域的元素。
将m个顶点的集合V定义为:
V的元素利用全局索引符号描述,且为了简化省略其级。在集合V和乘积之间定义三个映射P(V),P1(V)和P2(V)如下:
P2(V)={(ai+aj)·(bi+bj):i,j∈{i0,i1,...,im-1},i≠j} (50)
乘积生成进程接受如方程式(46)所示的次数为N-1的两个多项式作为输入。多项式的次数N可如方程式(6)所示地因式分解。实施例的乘积生成进程是两步进程的第一阶段,其生成计算c(x)=a(x)b(x)的类似Karatsuba的乘法例程。因为多项式a(x)和b(x)的次数是N-1,所以多项式c(x)的次数是2N-2。将多项式c)表示为:
c(x)=c2N-2·x2N-2+c2N-3·x2N-3+...+c1·x+c0 (51)
其中
方程式(52)中的表达式还可写为:
c0=a0·b0
c1=a0·b1+a1·b0
cN-1=aN-1·b0+aN-2·b1+...+a0·bN-1 (53)
cN=aN-1·b1+aN-2·b2+...+a1·bN-1
c2N-2=aN-1·bN-1
我们的构架产生了计算所有系数c0,c1,...,c2N-2的乘法进程。在预处理阶段,乘积生成进程生成每一级l,0≤l≤L-1的所有图乘积的生成通过执行实施例的乘积形成进程来实现,这以伪码形式示为CREATE_PRODUCTS:
CREATE_PRODUCTS()
1.
2.for i←0 to|G(L-1)|-1
3.
4.
5.GENERALIZED_EDGE_PROCESS()
6.return Pa
实施例的进程GENERALIZED_EDGE_PROCESS在下面以伪码形式描述。
GENERALIZED_EDGE_PROCESS()
1.for l←0 to L-2
2. do for i←0 to|G(l)|-1
3. do for j←0 to nl-1
4. do for k←0 to nl-1
5. do if j=k
6. then
7. continue
8. else
9.
10.
11. ifl+1=L-1
12. then
13. for every s∈S1∪S2
14. do Pa←Pa∪P(V(s))
15. else
16. for everys∈S1
17. do SPANNING_EDGE_PROCESS(s)
18. for every s∈S2
19. do SPANNING_PLANE_PROCESS(s)
20. return
如上所示,进程GENERALIZED_EDGE_PROCESS()逐一处理来自集合G(l)的每一个广义边。如果广义边的级小于L-2,则过程GENERALIZED_EDGE_PROCESS()调用两个其它进程用于处理与广义边相关联的生成边和生成平面。两个进程的第一个SPANNING_EDGE_PROCESS()在下面以伪码形式示出:
SPANNING_EDGE_PROCESS(s)
1.l←l(s)
2.
3.
4.if l+1=L-1
5.then
6. for every s′∈S1∪S2
7. do Pa←Pa∪P(V(s′))
8.else
9. for every s′∈S1
10. do SPANNING_EDGE_PROCESS(s′)
11. for every s′∈S2
12. do SPANNING_PLANE_PROCESS(s′)
13.return
第二进程SPANNING_PLANE_PROCESS()在下面以伪码形式示出:SPANNING_PLANE_PROCESS(s)
1.l←l(s)
2. if l=L-1
3. then
4. Pa←Pa∪P(V(s))
5. else
6.
7. while l<L-1
8.
9. l←l+1
10.
11. do Pa←Pa∪P(v′)
12.return
在一个实施例中,进程EXPAND_VERTEX_SETS()在下面以伪码形式示出。符号g(v)用于指顶点v的全局索引。
1.
2.
3. do Vr←Vr∪ EXPAND_SINGLE_VERTEX_SET(V′)
4.return Vr
EXPAND_SINGLE_VERTEX_SET(V)
1.
2.let v∈V
3.l←l(v)
4. for p←0 to nl+1-1
5. do for q←0 to nl+1-1
6. do if p=q
7. then
8. continue
9. else
10.
11. for i←0 to|V|-1
12. do let vi←V的第i元素
13. gi←g(vi)
14.
15. Vr←Vr∪Upq
16.for q←0 to nl+1-1
17.
18.for i←0 to|V|-1
19. do let vi←V的第i元素
20. gi←g(vi)
21.
22. Vr←Vr∪Uq
23.returnVr
在关于所有简单图的一个实施例中,与简单顶点和简单边相关联的乘积被确定,并将这些乘积添加到集合Pa。这发生在进程CREATE_PRODUCTS()的行3和4中。第二,对于每一个级的所有广义边,一个实施例完成以下步骤:首先,每个广义边分解成其相关联的生成边和生成平面。这发生在进程GENERALIZED_EDGE_PROCESS()的行9和10。
为了得到与每个生成边相关联的乘积,确定生成边是否连接简单顶点。如果是,则进程从边的端点的全局索引计算与扩展边相关联的乘积。这发生在进程GENERALIZED_EDGE_PROCESS()的行14。如果生成边不连接简单顶点,则该生成边被进一步分解成其相关联的生成边和生成平面。这发生在进程SPANNING_EDGE_PROCESS()的行2和3中。位于不在末级上的每一个所得的生成边,递归地进行进程SPANING_EDGE_PROCESS()。这发生在进程SPANING_EDGE_PROCESS()的行10中。
为了得到与每一个生成平面相关联的乘积,确定生成平面的顶点是否是简单的。如果它们是简单的,则形成与该平面的顶点的全局索引相关联的乘积,并将其添加到集合Pa(进程GENERALIZED_EDGE_PROCESS()的行14)。如果平面的顶点不是简单的,则进程将这些广义顶点扩展成图并形成相应的顶点和边端点的集合。这发生在进程EXPAND_SINGLE_VERTEX_SET()的行14和21。对于每一个这样的集合,向下执行扩展直到末级。这发生在进程SPANING_EDGE_PROCESS()的行7-9中。
这里生成四种类型的乘积。第一种类型包括由简单顶点形成的所有乘积。这种乘积的集合是:
第二种类型的乘积包括由简单边的端点形成的乘积。这种乘积的集合是:
第三种类型的乘积包括由生成边的端点形成的所有乘积。这些生成边由向下至末级L-1的递归生成边分解得到。这些乘积的集合具有以下的形式:
第四种类型的乘积包括在发生连续的顶点集合扩展之后由扩展平面形成的乘积。通过归纳可示出这种乘积的集合具有以下形式:
集合包括由除一些索引位置q0,q1,...,qm-1上的索引外的相同的局部索引表征的顶点的集合形成的所有乘积。对于这些索引位置,顶点获得来自局部索引对:中的所有可能的不同值。由此形成的所有可能的2m局部索引序列被包括在集合的乘积的一览表中。顶点不同的索引位置m的数目需要大于或等于2。集合的结构十分类似于通过我们的进程生成的所有乘积的集合的结构。
通过执行进程CREATE_PRODUCTS生成的所有乘积的集合Pa由以下的方程式(58)中的表达式给出。
方程式(58)中的表达式与方程式(57)等同,但有一个例外:顶点不同的索引位置m的数目还可采用值0和1。集合Pa由和的并集得到。能够看出通过将的元素加到覆盖了m=0的情况。通过进一步将和的元素加到覆盖了m=1的情况。
方程式(58)中的表达式处于闭合形式,可用于无需执行生成平面和生成边分解而生成乘积。在一个实施例中,方程式(58)中定义的所有的局部索引序列被生成,并形成与这些局部索引序列相关联的乘积。生成边和生成平面提供乘积生成过程的图释,且可帮助形象化小操作数大小(例如,N=9或N=18)的乘积生成。
通过执行进程CREATE_PRODUCTS生成的集合Pa中的元素数与通过对于相同的操作数大小N和因子n0,n1,...,nL-1使得N=n0·n1·...·nL-1的一般化递归Karatsuba进行的标量乘法的数目相等。
这为真,因为如由Paar和Weimerskirch定义的通过一般化递归Karatsuba进行的标量乘法的数目是:
在方程式(54)-(57)中,集合和不包含任何共有元素。因此,集合Pa的基数|Pa|由下式给出:
集合包含所有由仅包括单个顶点的集合形成的乘积。每一个单个顶点由某个任意的局部索引序列表征。因此,集合的基数由下式给出:
集合包含由包括两个顶点的集合形成的乘积。这些顶点由对于除末级L-1外所有的索引位置相同的局部索引表征。因为从0到nL-1-1考虑的不同值的所有可能对的数目是nL-1·(nL-1-1)/2,所以集合的基数等于:
集合包含由也包括两个顶点的集合形成的乘积。然而集合的乘积的形成与不同。形成的乘积的顶点由对于除0和L-2之间的一个位置外的所有索引位置相同的局部索引表征。因为对于位置j可考虑的局部索引值的所有可能对的数目是nj·(nj-1)/2,所以集合的基数等于:
最后集合由方程式(57)中的表达式表征。集合的基数等于:
将集合和的基数加起来:
为了证明|Pr|=|Pa|,使用以下的恒等式:
(a0+k)·(a1+k)·...·(am-1+k)=km+km-1·(a0+a1+...+am-1)+
(66)
km-2·(a0·a1+a0·a2+...+am-2·am-1)+...+a0·a1·...·am-1
通过在方程式(65)中用(ni-1)代替ai,用L代替m,用2代替k,并通过组合方程式(65)和方程式(66),得到方程式(67):
因此,证明了由实施例进程生成的乘积数等于利用一般化递归Karatsuba进程进行的乘法的数目。应注意到,由实施例进程生成的乘积数显著小于Paar和Weimerskirch的一次迭代Karatsuba解决方案(A.Weimerskirch和C.Paar,“Generalizations of theKaratsuba Algorithm for Efficient Implementations”(高效率实现的Karatsuba算法的一般化),Technical Report(技术报告),University of Ruhr(鲁尔大学),Bochum,德国,2003)所进行的标量乘法的数目,后者是N·(N+1)/2。
来自集合Pa的典型乘积p是:
0≤q0≤q1≤...≤qm-1,m∈[0,L]
对于乘积p,在与“空闲”索引位置相关联的m-k维(0≤k≤m)中的“表面”“占据”索引位置且通过在被占据的索引位置将p的所有顶点的局部索引设置成等于并通过允许空闲位置的索引获得和和和之间的任意值,将被占据的位置的索引定义为由p导出的乘积。
空闲和占据的索引位置的集合满足以下条件:
此外,占据的位置的索引满足:
将这种表面表示为表面的正式定义在以下的方程式(71)中给出。
从方程式(71),显而易见的是与乘积p相关联的表面也是集合Pa的元素,且通过进程CREATE_PRODUCTS生成。根据方程式(71)中的定义,同样显然易见的是尽管p由2m个顶点的集合形成,表面由2m-k个顶点的集合形成。最后,根据方程式(48)和方程式(71)的映射的定义,显而易见的是
且条件(65)和(66)有效}
与乘积p、空闲索引位置和占据的索引位置相关联的m-k维中的所有表面的集合被定义为并集:
接下来,与乘积p相关联的m-k维中的所有表面的集合被定义为并集:
特定表面的“父”表面被定义为与乘积p、占据的索引位置空闲索引位置和占据的位置处的索引相关联的表面:
表面u∈Up;m-k的“子”表面的集合被定义为集合:
在一个实施例中,生成减法公式的进程使用矩阵M,矩阵M的大小等于Pa的基数,即通过进程CREATE_PRODUCTS()生成的所有乘积的数目。Pa的基数还等于关于Pa的所有乘积的所有维度中定义的唯一表面的数目。这是因为乘积的每一个表面本身也是乘积。对于每一个可能的乘积p或表面u,矩阵M被初始化为M[p]←p,或等效地M[u]←u。初始化在每次关于Pa的乘积p生成减法的集合时进行。
减法是通过生成减法进程GENERATE_SUBTRACTIONS()生成的,其伪码在下文中列出。通过生成减法进程GENERATE_SUBTRACTIONS()而生成的减法公式在集合Sa中返回。
1.GENERATE_SUBTRACTIONS()
2.
3.for every p∈Pa
4. do INIT_M()
5. GENERATE_SUBTRACTIONS_FOR_PRODUCT(P)
6. return Sa
进程INIT_M()在以下列出:
INIT_M()
1.for every p∈Pa
2. do M[p]←p
3. return
同样被GENERATE_SUBTRACTIONS()调用的进程GENERATE_SUBTRACTIONS_FOR_PRODUCT()在以下以伪码列出:
GENERATE_SUBTRACTIONS_FOR_PRODUCT(P)
1.m←p中自由索引位置数
2.for l←0 to m-1
3. for every ui∈Up;l
4.
5.
6.
7. then
8. Sa←Sa∪s
9.return
对于Pa的每一个乘积p,由进程GENERATE_SUBTRCTIONS()生成的减法约简它的值。令μ(p)是在对于乘积p执行进程GENERATE_SUBTRACTIONS_FOR_PRODUCT()之后表条目M[p]的最终值。能够看出μ(p)事实上是乘积p减去m-1维中定义的p的所有表面,加上m-2维中定义的p的所有表面,…,减去(加上)0维中定义的p的所有表面(即单顶点的乘积)。对于m,它表示p的空闲索引位置的数目。
接下来,确定如何图解由进程GENERATE_SUBTRACTIONS()生成的减法。考虑18乘18乘法的示例。通过进程CREATE_PRODUCTS()生成的乘积之一由带有全局索引0、1、6、7、9、10、15、16的顶点的集合形成。这是乘积(a0+a1+a6+a7+a9+a10+a15+a16)·(b0+b1+b6+b7+b9+b10+b15+b16)。
考虑由这些乘积的顶点形成的完全图。该图具有立方体形状,但也包含连接所有其它顶点的对角线,如图10所示。乘积具有2维定义的6个相关联的表面,1维定义的12个表面和0维定义的8个表面。2维定义的表面是乘积(a0+a1+a6+a7)·(b0+b1+b6+b7)、(a0+a1+a9+a10)·(b0+b1+b9+b10)、(a6+a7+a15+a16)·(b6+b7+b15+b16)、(a9+a10+a15+a16)·(b9+b10+b15+b16)、(a1+a7+a10+a16)·(b1+b7+b10+b16)和(a0+a6+a9+a15)·(b0+b6+b9+b15)。这些乘积由4个顶点的集合形成。这些集合的完全图形成正方形,它们与其对角线一起覆盖与乘积(a0+a1+a6+a7+a9+a10+a15+a16)·(b0+b1+b6+b7+b9+b10+b15+b16)相关联的立方体。这是术语“表面”用于指代这些乘积的原因。
一维定义的表面是乘积(a0+a1)·(b0+b1)、(a0+a6)·(b0+b6)、(a1+a7)·(b1+b7)、(a6+a7)·(b6+b7)、(a9+a10)·(b9+b10)、(a9+a15)·(b9+b15)、(a10+a16)·(b10+b16)、(a15+a16)·(b15+b16)、(a1+a10)·(b1+b10)、(a0+a9)·(b0+b9)、(a7+a16)·(b7+b16)和(a6+a15)·(b6+b15)。这些乘积由2个顶点的集合形成。这些集合的完全图形成与乘积(a0+a1+a6+a7+a9+a10+a15+a16)·(b0+b1+b6+b7+b9+b10+b15+b16)相关联的立方体的边。最后,0维定义的表面是由单个顶点形成的乘积。它们是乘积a0·b0、a1·b1、a6·b6、a7·b7、a9·b9、a10·b10、a15·b15和a16·b16。
接下来,确定在从乘积(a0+a1+a6+a7+a9+a10+a15+a16)·(b0+b1+b6+b7+b9+b10+b15+b16)减去2维定义的所有表面加上1维定义的所有表面减去0维定义的所有表面时剩余什么。能够看出,剩余的是项a0·b16+a16·b0+a1·b15+a15·b1+a6·b10+a10·b6+a9·b7+a7·b9。该项是输出的系数c16的一部分。该项的推导可图解为从立方体减去所有覆盖的正方形、加上其边并减去其顶点。从这些减法剩余的是立方体的对角线,不包括其端点。
为了证明实施例的正确性,示出由进程GENERATE_SUBTRACTIONS()的减法生成的每一个项μ(p)是Karatsuba输出c(x)的一个系数的一部分。还示出对于两个不同的乘积p,项μ(p)和不包括形式为的共有项。还示出Karatsuba输出c(x)的每一个系数的形式为的每一个项是从乘积p∈Pa得到的某些项μ(p)的一部分。
考虑由方程式(68)定义的乘积p∈Pa。如果m>0,则μ(p)是满足以下条件的形式为的所有可能的项:
这表示μ(p)是形式为的所有项的和,使得每一个项中的全局索引I1是通过从中选择某些局部索引值来形成的,而同一项中的全局索引I2是通过选择未被Il使用的那些局部索引值来形成。
从方程式(68),显然易见的是乘积p是形式为或任一个的项的和。项μ(p)是从p顺序地减去和加上m-1、m-2、…、0维表面导出的。这些表面也是形式为或的项的和(从方程式(71))。此外,p的每一个面的形式为或的每一个项包括在p中。
接下来,示出μ(p)不包含形式为的项,并且示出形式为的项满足方程式(76)。暂且假设μ(p)中存在不满足方程式(76)的项对于这个项,存在局部索引位置的子集,对于该子集全局索引I1和I2与相同的局部索引值相关联。由于这个原因,该项是m维 表面、m-1维 表面、m-2维 表面、…、以及m-l维 表面的一部分。根据定义映射P(V)的方式,显而易见的是,在这些表面的每一个中项仅出现一次。因此μ(p)中出现该项的次数NL的总数由下式给出:
利用牛顿二项式展开式:
用1取代x、-1取代a、l取代n,我们得到NL=0。因此,μ(p)不包含任何不满足方程式(77)的形式为的项。其余的将示出μ(p)不包含形式为的项。形式为的每一个项是m维 表面、m-1维 表面、m-2维 表面、…、0维 表面的一部分。因此,μ(p)中出现项的次数的总数是0(从牛顿二项式展开式)。
项μ(p)包含满足方程式(76)的形式为的所有可能项。这是因为这些项是p的一部分且它们未被包括在p的任何面中。因此,当导出μ(p)时不减去这些项。
考虑由方程式(68)定义的乘积p∈Pa。项μ(p)的和是Karatsuba输出的系数的一部分,其中索引ic由方程式(79)给出。
首先考虑m>0的情况。在这种情况下,μ(p)是满足方程式(76)的形式为的项的和。在这种情况下,对于每一个项I1+I2=ic。在m=0的第二情况下,乘积p由单个顶点形成。因此,对于某些全局索引I1,在这种情况下,2·I1=ic。
接下来,我们示出从两个不同的乘积p,导出的项μ(p)和不包括任何共有项。
考虑乘积p,从这些乘积导出的项μ(p)和不具有共有的形式为或的项。
在其中p和两者的空闲索引位置数是0的简单情况下,p=μ(p)、 且在两个乘积之一由0空闲索引位置表征而另一个不是的情况下,μ(p)、不可能包含共有项,因为对于某些全局索引I1,两者之一等于而另一个是满足方程式(77)的项的和。
现在,假设p和两者都由至少一个空闲索引位置表征且存在分别来自μ(p)和的相等的两个项和全局索引相等表示其相关联的局部索引序列相等。I1和I2(或和))不同的局部索引位置对于p和两者都是空闲索引位置。另一方面,必需占据所有其它的局部索引位置。事实上,如果这些索引位置中的任一个是空闲的,则与I1和I2相关联的局部索引序列在该位置将不同,但它们不是。因此,乘积p和是利用同一树定义的且占据局部索引位置。现在,从局部索引序列I1和I2相等,显而易见的是,p和指定在其空闲索引位置的相同的局部索引值对以及在其占据的位置的相同单个值。因此,p和是相等的,这与假设矛盾。
Karatsuba输出的系数的形式为的每一个项对于某些乘积p∈Pa是项μ(p)的一部分。可将全局索引I1和I2转换成2个局部索引序列。对于某些局部索引位置这些序列是相等的,而对于其它的则是不同的。在这种情况下,通过将I1和I2不同的局部索引位置指定为空闲且所有其它的为占据,可从I1和I2完全定义乘积p。I1和I2不同的局部索引值对在乘积p的所有顶点的空闲索引位置处指定,而在I1和I2之间共有的局部索引值在占据的位置处指定。从指定乘积p的方式,显而易见的是μ(p)包含项
在以下的内容中,我们参照图11B的示例。我们描述在次数为8的两个多项式之间进行单次迭代乘法的步骤。加法连接“a”项和“b”项6、7和8,以便形成三角形6-7-8的节点。加法连接“a”项和“b”项3、4和5,以便形成三角形3-4-5。加法连接“a”项和“b”项0、1和2,以便形成三角形0-1-2。加法逐一连接“a”和“b”项6-7-8和3-4-5。加法逐一连接“a”和“b”项6-7-8和0-1-2。加法逐一连接“a”和“b”项3-4-5和0-1-2。加法形成与三角形6-7-8和3-4-5的边相关联的生成平面。加法形成与三角形6-7-8和0-1-2的边相关联的生成平面。加法形成与三角形3-4-5和0-1-2的边相关联的生成平面。
乘法形成三角形0-1-2、3-4-5和6-7-8的节点。乘法形成三角形6-7-8的边。乘法形成三角形3-4-5的边。乘法形成三角形0-1-2的边。乘法形成连接三角形6-7-8和3-4-5的节点的边。乘法形成连接三角形6-7-8和0-1-2的节点的边。乘法形成连接三角形3-4-5和0-1-2的节点的边。乘法形成连接三角形6-7-8和3-4-5的边的生成平面。乘法形成连接三角形6-7-8和0-1-2的边的生成平面。乘法形成连接三角形3-4-5和0-1-2的边的生成平面。
执行与三角形6-7-8的边相关联的减法。执行与三角形3-4-5的边相关联的减法。执行与三角形0-1-2的边相关联的减法。执行与连接三角形6-7-8和3-4-5的节点的边相关联的减法。执行与连接三角形6-7-8和0-1-2的节点的边相关联的减法。执行与连接三角形3-4-5和0-1-2的节点的边相关联的减法。执行与连接三角形6-7-8和3-4-5的边的生成平面相关联的减法。执行与连接三角形6-7-8和0-1-2的边的生成平面相关联的减法。最后,执行与连接三角形3-4-5和0-1-2的边的生成平面相关联的减法。
加法形成所得到的多项式的系数。接下来,将多项式转换成大数。
图11A-B示出实施例的进程的框图和图解。进程1100从框1105开始,其中操作数的系数的数目被表达为因子的乘积。应注意到图解针对的是9x9运算的例子。在框1110中,因子的每一个与互连的图的层级中的一个级相关联。在层级的每一个级中,完全连接的图(即具有广义顶点和广义边的广义图)的顶点数和与级相关联的因子相等。在层级的末级,存在具有简单互连的顶点和简单边的简单图。
在框1115,每一个简单顶点与全局索引和末级局部索引相关联。在框1120,定义广义边包括若干生成边和生成平面。在框1125,生成边是两个相应的广义(或简单)顶点之间的边。相应的顶点与相同的末级局部索引但不同的全局索引相关联。生成平面是互连四个广义(或简单)顶点的完全连接图。
在框1130,对于互连简单顶点的所有的图,确定与简单顶点和简单边相关联的乘积。框1135在框1140、1145、1150和1160之间开始一个环路,其中对于每一级处的所有广义边,执行每一个框。
在框1140,广义边被分解成其组成的生成边和生成平面。在框1145,确定与生成边相关联的乘积。如果生成边连接简单顶点,则由边的相邻顶点的全局索引,形成与边相关联的乘积。否则,通过将每一个生成边视为广义边并递归地应用广义边进程(框1140和1145)来确定与生成边相关联的乘积。
在框1150,为了确定与生成平面相关联的乘积,进程1110检查平面的顶点是否是简单的。如果它们是简单的,则形成并返回与平面顶点的全局索引相关联的乘积。如果顶点不是简单的,则将广义顶点扩展为图,并形成相应的顶点和边的集合。相应的边是互连具有相同的末级局部索引但不同的全局索引的顶点的边。对于每一个集合,顶点作为集合的元素,被用于递归地运行生成平面进程(框1150)。
在框1160,确定最后的广义边是否被框1140、1145和1150处理。如果最后的边未被处理,则进程110返回到框1140。如果最后的边已经被处理,则进程110继续框1165。在框1165,对于与形成的乘积相关联的所有图(即,边、正方形、立方体、超级立方体等)周边被减去,且对角线用于形成最终乘积的系数。进程1100然后继续进行到在1170返回最终乘积。
接下来,四个一次迭代乘法基数的比较:对Karatsuba的Montgomery(P.Montgomery。“Five,Six and Seven-Term Karatsuba-like Formulae”(五、六和七项类似Karatsuba的公式),IEEE Transactions on Computers,2005年5月)、Paar和Weimerskirch方法、实施例和教科书方法。在对于代表性的操作数大小每一种技术所需要的标量乘法的数目方面,对这些技术进行比较。根据图12所示的数目,显而易见的是,实施例进程优于所有的选择,它们适用于很多不同的操作数大小。对于某些技术输入大小,实施例生成关于输入大小减1(是偶数)的公式,然后使用Paar和Weimerskirch技术来生成乘积和附加输入项的减法。
进位少的大数乘法由类似Rivest、Shamir和Adleman(RSA)的流行密码算法所使用。该实施例进程避免了递归的花费。实施例使图特性(例如,顶点、边和子图)与大数乘法例程的类似Karatsuba的项之间相关,这些实施例对于任何给定操作数大小,生成并使用一次迭代类似Karatsuba乘法进程,它需要与递归Karatsuba相同的标量运算,但无需递归。实施例与“标量”乘法的最不可能数相关联。对于标量乘法,它表示大数的“片”或多项式的系数之间的乘法。实施例可利用图生成最优的“一次迭代”类似Karatsuba公式。现在描述定义EC密码系统的大数进位乘法模不可约多项式的约简。
图13是根据一个实施例示出定义密码系统的两个高次数多项式的进位少的乘积模不可约多项式的余数的计算方法的流程图。代表性地,在进程框1210,根据输入操作数长度,利用基于一次迭代的乘法预先计算乘法例程。在一个实施例中,可根据参照图1-11示出的实施例中的任一个执行基于图的乘法例程。在进程框1220,根据预先计算的乘法例程利用从层级获得的进位少的乘法指令计算表示两个输入操作数的乘积多项式的系数的乘积。在一个实施例中,例如,如表1所示,进位少的乘法是无方向的,例如,64比特/32比特进位少的乘法指令。在进程框1230,计算进位少的乘积多项式模可编程多项式的余数,其中可编程多项式定义椭圆曲线密码系统且余数形成密码密钥。参照图14的流程图示出进位少的乘积的余数的计算方法。
在一个实施例中,为了约简高次数(例如,233)的两个多项式的进位少的乘积,我们将其分成相同长度的两个部分。在一个实施例中,最低有效一半刚好与最后的余数进行XOR。对于最高有效部分,一个实施例经由两个乘法实现除法。该算法可被看作Barrett(P.Barrett,“Implementing the Revest,Shamir and Adleman Public Key EncryptionAlgorithm on a Standard Digital Signal Processor”(在标准数字信号处理器上实现Revest,Shamir和Adleman公钥密码算法),硕士论文,牛津大学,英国,1986)约简算法对针对任意大小的被除数和除数的模2算术或Feldmeier CRC生成算法(D.Feldmeier,“FastSoftware Implementation of Error Correcting Codes”(纠错码的快速软件实现)IEEETransactions on Networking,1995年12月)的扩展。在一个实施例中,我们需要考虑输入的最低有效部分,我们研究定义如下的余数p(x)的高效率生成:
p(x)=c(x)·xt mod g(x) (80)
这里,
·c(x)是GF(2)中带有系数的次数为s-1的多项式,表示进位少的乘积的最高有效位。
·t是多项式g的次数。
·g(x)是所使用的有限域的不可约多项式。
对于多项式p(x)、c(x)和g(x),我们写出:
c(x)=cs-1xs-1+cs-2xs-2+...+c1x+c0,
p(x)=pt-1xt-1+pt-2xt-2+...+p1x+p0,以及
(81)
g(x)=gtxt+gt-1xt-1+...+g1x+g0
在下文中,我们使用符号Lu(v)表示多项式v的u个最低有效项的系数,且Mu(v)表示u个最高有效项的系数。可将多项式p(x)表达为:
p(x)=c(x)·xt mod g(x)=g(x)·q(x)mod xt (82)
其中q(x)是次数s-1的多项式,次数s-1等于从c(x)·xt与g的除法得出的商。方程式(82)直观的是被除数c(x)·xt的t个最低有效项等于0。
此外,可将被除数c(x)·xt表达为多项式g·q和p的和:
c(x)·xt=g(x)·q(x)+p(x) (83)
其中算子“+”表示XOR从方程式(83)可预期多项式g·q的t个最低有效项等于多项式p的项。只有这些项彼此相等,对于其t个最低有效项,XOR运算的结果才是0。因此:
p(x)=g(x)·q(x)mod xt=Lt(g(x)·q(x)) (84)
现在我们定义:
多项式g*表示多项式g的t个最低有效项。显然,
p(x)=Lt(g(x)·q(x))=Lt(q(x)·g*(x)+q(x)·gtxt)
(86)
然而,多项式q·gt·xt的t个最低有效项是0。因此,
p(x)=Lt(q(x)·g*(x))(87)
从方程式(87),其后是计算余数p,我们需要知道商q的值。能够以与Barrett约简算法类似的方式计算商:
令
xt+s=g(x)·q+(x)+p+(x) (89)
其中q+是等于由xt+s与g的除法得到的商的s次多项式,且p+是从该除法得到的余数。多项式p+的次数是t-1。
从方程式(88)和(89),我们得到:
以及
能够看出多项式c·g·q+和g·q·xs的次数是t+2·s-1,多项式c·p+的次数是t+s-2,而多项式p·xs的次数是t+s-1。结果方程式(91)的左侧和右侧中多项式的s个最高有效项不受多项式c·p+和p·xs的影响。因此,
接下来,我们认可多项式c·g·q+的s个最高有效项等于多项式g·Ms(c·q+)·xs的s个最高有效项。多项式g·Ms(c·q+)·xs是通过用0替换多项式c·p+的s个最低有效项而由c·p+生成。该观察背后直观的是如下:多项式c·g·q+的s个最高有效项是通过使多项式c·p+的s个最高有效项按照与由多项式g的项定义的一样多的偏移位置彼此相加计算的。因此多项式c·g·q+的s个最高有效项不依赖于c·p+的s个最低有效项,因此,
方程式(93)满足下式给出的q:
q=Ms(c(x)·q+(x)) (94)
因为有满足方程式(83)的唯一商q,能够示出有满足方程式(93)的唯一商q。结果该商q必须等于Ms(c(x)·q+(x))。
因此得出多项式p由下式建立
p(x)=Lt(g*(x)·Ms(c(x)·q+(x))) (95)
方程式(95)指示用于计算多项式p的算法可如参照图14所述地执行。图14是根据一个实施例示出图13的进程框1230的进位少的乘积多项式模可编程多项式的余数的计算和约简方法。代表性地,进程框1240和1260可在进位少的乘积模和密码系统的可约多项式的余数的计算和约简期间预先计算并使用。
对于给定的可约多项式g,首先计算多项式g*和q+。代表性地,在进程框1240,多项式g*的次数是t-1并被计算为g的t个最低有效项。在进程框1250,多项式q+的次数是s,且等于xt+s和g的除法的商。
在进程框1260,输入c与q+相乘。结果是次数为2s-1的多项式。在进程框1270,从步骤1得到的多项式的s个最高有效项与g*相乘。结果是次数为t+s-2的多项式。在进程框1280,算法返回从步骤2得到的多项式的t个最低有效项。这是所需的余数。
int mod_multiplication(WORDT_YPE*a,
WORD_TYPE*b
WORD_TYPE*result)
{
WORD_TYPE S_0,S_1,S_2,S_3,S_4,S_5,S_6,S_7,S_8,S_9;
WORD_TYPE P_0_0,P_0_1,P_1_0,P_1_1;
WORD_TYPE P_2_0 P_2_1,P_3_0,P_3_1,P_4_0,P_4_1;
WORD_TYPE P_5_0,P_5_1,P_6_0,P_6_1,P_7_0,P_7_1,P_8_0,P_8_1;
WORD_TYPE D_0_0,D_0_1,D_1_0,D_1_1;
WORD_TYPE L_0,L_1,L_2,L_3;
WORD_TYPE U_0,U_1,U_2,U_3;
WORD_TYPE V_0,V_1,V_2,V_3;
cmul64_instr_3_clocks(P_0_0,P_0_1,a[0],b[0]);
cmul64_instr_3_clocks(P_1_0,P_1_1,a[1],b[1]);
cmul64_instr_3_clocks(P_2_0,P_2_1,a[2],b[2]);
cmul64_instr_3_clocks(P_3_0,P_3_1,a[3],b[3]);
S_0=a[0]^a[1];
S_1=a[2]^a[3];
S_2=a[0]^a[2];
S_3=a[1]^a[3];
S_4=b[0]^b[1];
S_5=b[2]^b[3];
S_6=b[0]^b[2];
S_7=b[1]^b[3];
cmul64_instr_3_clocks(P_4_0,P_4_1,S_0,S_4);
cmul64_instr_3_clocks(P_5_0,P_5_1,S_1,S_5);
cmul64_instr_3_clocks(P_6_0,P_6_1,S_2,S_6);
cmul64_instr_3_clocks(P_7_0,P_7_1,S_3,S_7);
S_8=S_0^S_1;
S_9=S_4^S_5;
cmul64_instr_3_clocks(P_8_0,P_8_1,S_8,S_9);
D_0_0=P_6_0^P_0_0^P_2_0;
D_0_1=P_6_1^P_0_1^P_2_1;
D_1_0=P_7_0^P_1_0^P_3_0;
D_1_1=P_7_1^P_1_1^P_3_1;
L_0=P_0_0;
L_1=P_0_1^P_4_0^P_0_0^P_1_0;
L_2=P_4_1^P_0_1^P_1_1^D_0_0^P_1_0;
L_3=D_0_1^P_1_1^P_8_0^P_4_0^P_5_0^D_0_0^D_1_0;
U_0=P_8_1^P_4_1^P_5_1^D_0_1^D_1_1^D_1_0^P_2_0;
U_1=D_1_1^P_2_1^P_5_0^P_2_0^P_3_0;
U_2=P_5_1^P_2_1^P_3_1^P_3_0;
U_3=P_3_1;
//现在我们更新U;本质上我们执行第一阶段
//barrett的进位少的扩展
V_0=(L_3>>41)|(U_0<<23);
V_1=(U_0>>41)|(U_1<<23);
V_2=(U_1>>41)|(U_2<<23);
V_3=(U_2>>41)|(U_3<<23);
U_0=V_0^((V_2>>31)|(V_3<<33));
U_1=V_1^(V_3>>31);
U_2=V_2;
U_3=V_3;
//接下来我们更新V;进位少的Barrett的第二阶段
V_0=U_0;
V_1=U_1^(U_0<<10);
V_2=U_2^((U_1<<10)|(U_0>>54));
V_3=U_3^((U_2<<10)|(U_1>>54));
//最后我们将结果放在一起
result[0]=V_0^L_0;
result[1]=V_1^L_1;
result[2]=V_2^L_2;
result[3]=V_3^L_3;
result[3]&=MASK_L41;
return 1;
}
表2:NIST B-233曲线的Galois域乘法
对于NIST推荐的很多椭圆曲线密码系统,多项式g是三项式。因此,多项式g*和q+仅包含两个等于“1”的数字。因此整个约简算法能够以三个233比特宽移位和XOR运算为代价而实现。在表2中列出了用于实现NIST B-233曲线的Galois域乘法的代码。
表1:我们的技术和OpenSSL实现之间的比较
在表2中我们介绍了构成利用OpenSSL的Sun实现的基于椭圆曲线的DiffieHellman密钥交换的主要部分点乘标量乘法运算的性能、我们的软件改进和我们建议的硬件辅助。所使用的处理器是3.6GHz的奔腾4处理器。如能够看到的,我们的方法提供了从55%到5.2X范围的显著加速,这取决于是否将GFMUL指令引入CPU。进一步的优化可去除很多应用级额外开销(例如,OpenSSL BN结构管理和函数调用额外开销),理想地使原型加速66X。实际上,我们相信利用进一步精致的代码10X的加速是可能的。然而,这种实施留给未来的工作。
所述的实施例具有优于现有方法的某些优点,因为它高度灵活且实现高性能椭圆曲线处理。这可帮助为公司打开新的市场(例如,按照分组的公钥密码学)。此外,改进的方法甚至可影响公司在密码学和联网中获得领导性进阶。例如,建议的指令加速椭圆曲线和AES的GCM模式。由此,利用相同的硬件辅助可加速高性能公钥运算和消息真实性。当前使用的散列家庭SHA*缩放很差,因为其态随摘要长度(digest length)增加。这为公司以转移到基于AES的真实性方案以及基于AES的方案渗透到安全产品市场提供很强的推动。
所述实施例介绍了一种用于实现特性2椭圆曲线的Galois域乘法的新方法。新的组成部分是与利用目前不是处理器的指令集的一部分的GFMUL指令和对Karatsuba乘法算法的单次迭代扩展组合的有效的约简方法。目前,在实现直接方式时,由于这种算法的成本软件实现不使用Karatsuba和Barrett。在密码处理器中建立的硬件方法使用专用于有限域的多项式的XOR门的树来执行约简步骤。这种方法是特殊领域,且不适于通用处理器实现。另一方面,我们的方法是新颖的且加速了特性2椭圆曲线密码,而不将特殊领域的功能引入CPU。我们相信我们的工作很重要,由于其相关联的测量到的加速增益且可为未来因特网中高速安全性的进一步革新做好准备。
本发明的实施例可利用硬件、软件或其组合来实现,并可实现在一个或多个计算机系统或其它处理系统中。在一个实施例中,本发明涉及能够实现本文所述功能性的一个或多个计算机系统。在另一个实施例中,本发明涉及计算设备。在图13中示出生成平面的例子。按照设备1300的这个例子描述各个实施例,然而还可使用其它的计算机系统或计算机架构。一个实施例结合了密码程序中的进程1100。在另一个实施例中,进程110结合在硬件密码设备中。
图13是利用优化密码系统的设备的一个实施例的图示。该系统可包括尝试相互安全地通信的两个设备。能够通信的任何类型的设备可使用该系统。例如,系统可包括尝试与设备安全通信的第一计算机1301。在一个实施例中,设备是智能卡1303。在其它实施例中,使用优化密码系统的设备可包括计算机、手持设备、蜂窝电话、游戏控制台、无线设备、智能卡和其它类似的设备。这些设备的任意组合可利用该系统通信。
每个设备可包括或不包括密码程序1305。密码程序1305可以是软件应用程序、固件、嵌入式程序、硬件或类似实现的程序。该程序可存储在非易失性存储器或存储设备,或可以是硬连线的。例如,软件密码程序1305可在使用期间存储在系统存储器1319中,并存储在硬驱动器或类似的非易失性存储器中。
系统存储器可以是本地随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM(DRAM)、快速页模式DRAM(FPM DRAM)、扩展数据输出FRAM(EDO DRAM)、猝发EDO DRAM(BEDO DRAM)、也被称为闪存的可擦除可编程ROM(EPROM)、(动态随机存取存储器)、SDRAM(同步动态随机存取存储器)、DDR(双数据率)SDRAM、DDRn(即n=2、3、4等)等,且还可包括辅助存储器(未示出)。
辅助存储器可包括例如硬盘驱动器和/或可移动存储设备,表示软盘驱动器、磁带驱动器、光盘驱动器等。可移动驱动器从可移动存储单元读取和/或向其写入。可移动存储单元表示可被可移动存储驱动器读取和写入的软盘、磁带、光盘等。正如将意识到的,可移动存储单元可包括具有计算机软件和/或数据存储于其中的机器可读存储介质。
密码程序1305可使用任何加密协议,包括SSL(加密套接字协议层)、IPsec、站对站和类似的协议。在一个示例实施例中,加密程序可包括Diffie-Hellman密钥交换协议或RSA加密/解密算法。
加密程序1305可包括针对密钥交换协议生成密钥的密钥生成器1309组件。密码程序1309还可包括认可密钥生成器1307组件。认可密钥生成器1307可使用来自与运行密码程序1305的计算机1301通信的设备1303的加密组件1313的密钥。密钥生成器1309和认可密钥生成器1307还可使用公共的质数和公共的基数或生成器。公共的质数和基数或生成器在两个通信设备(即计算机1301和智能卡1303)之间共享。
加密程序可用于在网络1311上与设备进行通信。网络1311可以是局域网(LAN)、广域网(WAN)或类似的网络。网络1311可使用任何通信介质或协议。在一个示例实施例中,网络1311可以是因特网。在另一个实施例中,设备可在包括无线直接通信的直接链路上通信。
设备1301还可包括通信接口(未示出)。通信接口允许软件和数据在计算机1301和外部设备(诸如智能卡1303)之间传输。通信接口的例子可包括调制解调器、网络接口(诸如以太网卡)、通信端口、PCMCIA(个人计算机存储卡国际组织)槽和卡、无线LAN接口等。经由通信接口传输的软件和数据以信号的形式,该信号可以是电子、电磁、光或其它能够由通信接口接收的信号。这些信号经由通信路径(即信道)提供给通信接口。信道承载信号,且可利用导线或电缆、光纤、电话线、蜂窝电话链路、无线链路和其它通信信道来实现。
在一个示例实施例中,加密组件1313可以是智能卡1303或类似的设备的一部分。加密组件1313可以是存储或嵌入在SRAM1315、在硬件中实现或类似实现的软件。加密组件可包括密钥生成器1309和认可密钥生成器1307。
在可选实施例中,辅助存储器可包括允许计算机程序或其它指令加载到设备1301的其它方式,例如可移动存储单元和接口。例子可包括程序盒和盒式接口(诸如在视频游戏机中建立的)、可移动存储芯片或卡(诸如EPROM(可擦除可编程只读存储器)、PROM(可编程只读存储器)或闪存)以及相关联的插槽、以及允许软件和数据从可移动存储单元传递到设备1301的其它可移动的存储单元和接口。
在本文献中,术语“计算机程序产品”可指代可移动存储单元和信号。这些计算机程序产品允许将软件提供给设备1301。本发明的实施例可涉及这种计算机成品产品。计算机程序(也称为计算机控制逻辑)存储在存储器1319和/或辅助存储器和/或计算机程序产品中。计算机程序还可经由通信接口来接收。这种计算机程序在被执行时使设备1301能够执行本文所述的本发明的实施例的特征。具体地,计算机程序在被执行时使计算机1301能够执行本发明的实施例的特征。这种特征可表示图11A和11B的部分或整个框1105、1110、1115、1120、1125、1130、1135、1140、1145、1150、1160、1165和1170。或者这种计算机程序可表示计算机1301的控制器。
在利用软件实现本发明的实施例中,软件可存储在计算机程序产品中并利用可移动存储驱动器、硬驱动器或通信接口加载到设备1301。控制逻辑(软件)在由计算机1301执行时导致计算机1301执行本文描述的功能。
计算机1301和智能卡1301可包括用于显示各种图形用户界面(GUI)和的显示器(未示出)和用户显示器。显示器可以是模拟电子显示器、数字电子显示器、真空荧光(VF)显示器、发光二极管(LED)显示器、等离子体显示器(PDP)、液晶显示器(LCD)、高性能寻址(HPA)显示器、薄膜晶体管(FTF)显示器、有机LED(OLED)显示器、头戴式显示器(HUD)等。
在另一个实施例中,本发明主要实现在硬件中,利用诸如专用集成电路(ASIC)的硬件组件,利用硬件状态机来执行本文所述功能。在又一个实施例中,本发明利用硬件和软件两者的组合来实现。
在以上描述中,陈述了众多特定细节。然而,应该理解本发明的实施例可在没有这些特定细节的情况下事实。例如,公知的等效组件和元件可被本文所述的所取代,且类似地,公知的等效技术可被所公开的特定技术所取代。在其它情况下,公知的电路、结构和技术没有详细示出以免使本说明书的理解困难。
本文描述的本公开的实施例可实现在电路中,其包括硬连线电路、数字电路、模拟电路、可编程电路等。这些实施例还可实现在计算机程序中。这种计算机程序可按高级程序或面向对象的编程语言来编码。然而,程序可根据需要实现为汇编或机器语言。语言可以是编译的或解释的。另外,这些技术可在各种连网环境中使用。这种计算机程序可存储在可由通用或专用可编程处理系统读取的存储介质或设备(例如硬盘驱动器、软盘驱动器、只读存储器(ROM)、CD-ROM设备、闪存设备、数字通用盘(DVD)或其它存储设备),用于在存储介质或设备由处理系统读取时配置或操作处理系统,以执行本文描述的程序。还可认为本公开的实施例被实现为机器可读或机器可记录存储介质,其被配置成与处理系统一起使用,其中如此配置的存储介质致使处理系统以特定和预定方式操作以执行本文所述的功能。
尽管在附图中描述和示出了某些示例性实施例,但将理解这些实施例仅仅是示例性的且对宽泛的发明没有限制,且本发明不限于所示和所描述的具体构造和配置,因为本领域的普通技术人员可想到各种其它修改。
说明书中对“实施例”、“一个实施例”、“某些实施例”或“其它实施例”的参照表示结合实施例描述的特定特征、结构或特性包括在至少一些实施例中,而不一定在所有的实施例中。各处出现的“实施例”、“一个实施例”或“某些实施例”不一定都指相同的实施例。如果说明书陈述“可”、“可能”或“能够”包括组件、特征、结构或特性,则不必需包括该特定组件、特征、结构或特性。如果说明书或权利要求书提到“一”或“一个”元件,这并不意味着仅有一个元件。如果说明书或权利要求书提到“附加”元件,这不排出有一个以上的附加元件。
Claims (17)
1.一种椭圆曲线密码系统中的方法,所述方法包括:
根据输入操作数长度利用一次迭代基于图的乘法预先计算乘法例程;
藉由计算装置根据预先计算的乘法例程计算两个输入操作数的第一进位少的乘积;
藉由所述计算装置通过执行若干移位运算和异或运算来计算所述第一进位少乘积和稀疏多项式之间的第二进位少乘积;
计算包括可编程多项式g(x)的t个最低有效项的第一多项式g*;
计算商多项式q+,其中所述商多项式q+的次数是s,且等于xt+s与所述可编程多项式的除法的商;
计算所述商多项式的进位少的乘积和所述进位少的乘积的最高有效位,以提供次数为2s-1的结果多项式,作为两个乘法的第一乘法;
将结果多项式的s个最高有效项与所述第一多项式进行进位少的相乘,作为所述两个乘法的第二乘法,以实现计算次数为t+s-2的结果多项式所需的除法;以及
返回结果多项式的t个最低有效项作为余数,
其中进位少的乘法是使两个数相乘而不生成或传播进位的运算。
2.如权利要求1所述的方法,其特征在于,还包括:
通过执行若干移位运算和异或运算来计算所述第二进位少乘积和第二稀疏多项式之间的第三进位少乘积。
3.如前述权利要求中任一项所述的方法,其特征在于,预先计算还包括:
根据输入操作数长度生成属于第一操作数和第二操作数的多个图,所述多个图包括多个顶点和多个边;
提供所述多个顶点和所述多个边,以便在不使用递归的情况下执行所述第一操作数和所述第二操作数的乘法,其中所述第一操作数和所述第二操作数的大小至少是所述系统的本机操作数大小;
确定所述多个顶点的第一多个乘积;
确定多个生成边和多个生成平面的第二多个乘积;以及
由所述第一多个乘积和所述第二多个乘积创建多个系数,用于执行所述第一操作数和所述第二操作数的乘法。
4.如权利要求2所述的方法,其特征在于,包括:
利用以下的方程式根据余数p(x)计算密码密钥:
p(x)=c(x)·xt mod g(x)
其中:
c(x)是GF(2)中带有系数的次数为s-1的多项式,表示将被约简的进位少的乘积的s个最高有效位;
t是多项式g的次数;以及
g(x)是定义椭圆曲线EC密码系统的不可约多项式。
5.如权利要求1所述的方法,其特征在于,如果g(x)是三项式和五项式之一,则所述进位少的乘积的计算是利用多个大数移位运算和异或运算进行的。
6.如权利要求1所述的方法,其特征在于,如果g(x)是三项式,则所述进位少的乘法是利用两个大数移位运算和异或运算进行的。
7.如权利要求2所述的方法,其特征在于,包括:
通过根据以下方程式的两个乘法执行除法来计算所述第一进位少的乘积模可编程多项式的余数p(x):
p(x)=Lt(g*(x)·Ms(c(x)·q+(x))),
其中:
Lt(v)表示多项式v的t个最低有效项的系数,且Ms(v)表示s个最高有效项的系数;
c(x)是GF(2)中带有系数的次数为s-1的多项式,表示将被约简的进位少的乘积的s个最高有效位;
t是多项式g的次数;
g(x)是定义椭圆曲线EC密码系统的不可约多项式;
g*包括g(x)的t个最低有效项;以及
q+是商多项式,其中所述商多项式q+的次数是s,且等于xt+s与所述可编程多项式g(x)的除法的商。
8.如权利要求7所述的方法,其特征在于,预先计算所述乘法包括:
生成针对输入操作数长度的一个或多个图;
从所述一个或多个图中选出完整子图的集合;
从多个互连图确定多个广义边和多个顶点,所述多个广义边包括多个生成边和多个生成平面;
确定所述多个顶点的第一多个乘积;
确定所述多个生成边和所述多个生成平面的第二多个乘积;
由所述第一多个乘积和所述第二多个乘积形成表示输入操作数的乘积的多项式的多个系数;以及
向加密进程的乘法部分提供所述多个系数;或者
其中针对具有互连顶点的图确定所述第一多个乘积;以及
其中所述第二多个乘积是利用以下方程式确定的:
其中Pa表示所述第二多个乘积,v表示顶点,L表示级,q表示位置,且i表示局部索引。
9.如权利要求8所述的方法,其特征在于,如果233比特椭圆曲线包括可编程多项式,则计算所述第一进位少的乘积模可编程多项式的余数是利用三个233比特宽移位运算和异或(XOR)运算进行的。
10.如权利要求9所述的方法,其特征在于,所述输入操作数长度是233比特且所述系统的本机操作数大小是32比特和64比特之一;并且其中可从所述系统得到的进位少的乘法指令是32比特和64比特进位少的乘法指令之一。
11.一种椭圆曲线密码系统,包括:
耦合到第一存储器的第一计算机设备,所述第一计算机设备执行所述第一存储器中的密码程序,所述第一计算机设备具有用于执行所述密码程序的装置,所述第一计算机设备的所述装置包括:
用于根据输入操作数长度利用一次迭代基于图的乘法预先计算乘法例程的装置;
用于根据预先计算的乘法例程计算两个输入操作数的第一进位少的乘积的装置;
用于通过执行若干移位运算和异或运算来计算所述第一进位少乘积和稀疏多项式之间的第二进位少乘积的装置;
用于计算包括可编程多项式g(x)的t个最低有效项的第一多项式g*的装置;
用于计算商多项式q+的装置,其中所述商多项式q+的次数是s,且等于xt+s与所述可编程多项式的除法的商;
用于计算所述商多项式的进位少的乘积和所述进位少的乘积的最高有效位以提供次数为2s-1的结果多项式作为两个乘法的第一乘法的装置;
用于将结果多项式的s个最高有效项与所述第一多项式进行进位少的相乘作为所述两个乘法的第二乘法以实现计算次数为t+s-2的结果多项式所需的除法的装置;以及
用于返回结果多项式的t个最低有效项作为余数的装置;以及
耦合到第二存储器的第二计算机设备,所述第二计算机设备执行所述第二存储器中的所述密码程序,所述第二计算机设备具有用于执行所述密码程序的装置,
其中所述第一计算机设备和所述第二计算机设备在网络上相互传送加密数据,
其中进位少的乘法是使两个数相乘而不生成或传播进位的运算。
12.如权利要求11所述的系统,其特征在于,所述第一计算机设备的所述装置还包括:
用于通过执行若干移位运算和异或运算来计算所述第二进位少乘积和第二稀疏多项式之间的第三进位少乘积的装置。
13.如权利要求12所述的系统,其特征在于,包括:
用于通过根据以下方程式的两个乘法执行除法来计算所述第一进位少的乘积模可编程多项式的余数p(x)的装置:
p(x)=Lt(g*(x)·Ms(c(x)·q+(x))),
其中:
Lt(v)表示多项式v的t个最低有效项的系数,且Ms(v)表示s个最高有效项的系数;
c(x)是GF(2)中带有系数的次数为s-1的多项式,表示将被约简的进位少的乘积的s个最高有效位;
t是多项式g的次数;
g*包括不可约多项式的t个最低有效项,所述不可约多项式定义椭圆曲线EC密码系统;以及
商多项式q+,其中所述商多项式q+的次数是s,且等于xt+s与所述可编程多项式的除法的商。
14.如权利要求11所述的系统,其特征在于,用于预先计算的装置还包括:
用于根据输入操作数长度生成属于第一操作数和第二操作数的多个图的装置,所述多个图包括多个顶点和多个边;
用于提供所述多个顶点和所述多个边以在不使用递归的情况下执行所述第一操作数和所述第二操作数的乘法的装置,其中所述第一操作数和所述第二操作数的大小至少是所述系统的本机操作数大小;
用于确定所述多个顶点的第一多个乘积的装置;
用于确定多个生成边和多个生成平面的第二多个乘积的装置;以及
用于由所述第一多个乘积和所述第二多个乘积创建多个系数以便执行所述第一操作数和所述第二操作数的乘法的装置。
15.如权利要求11所述的系统,其特征在于,所述第一存储器是双数据率DDRn同步动态随机存取存储器(SDRAM),其中n是等于或大于2的整数。
16.如权利要求11所述的系统,其特征在于,所述网络是有线网络和无线网络之一。
17.如权利要求11所述的系统,其特征在于,所述第二计算机设备是智能卡、个人数字助理(PDA)、蜂窝电话和游戏控制台之一。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/966,572 US8144864B2 (en) | 2007-12-28 | 2007-12-28 | Method for speeding up the computations for characteristic 2 elliptic curve cryptographic systems |
US11/966,572 | 2007-12-28 | ||
CN2008101897061A CN101483517B (zh) | 2007-12-28 | 2008-12-26 | 加速对特性2椭圆曲线密码系统的计算的方法 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2008101897061A Division CN101483517B (zh) | 2007-12-28 | 2008-12-26 | 加速对特性2椭圆曲线密码系统的计算的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102866878A CN102866878A (zh) | 2013-01-09 |
CN102866878B true CN102866878B (zh) | 2016-09-28 |
Family
ID=40411729
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210297970.3A Expired - Fee Related CN102866878B (zh) | 2007-12-28 | 2008-12-26 | 加速对特性2椭圆曲线密码系统的计算的方法 |
CN2008101897061A Expired - Fee Related CN101483517B (zh) | 2007-12-28 | 2008-12-26 | 加速对特性2椭圆曲线密码系统的计算的方法 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2008101897061A Expired - Fee Related CN101483517B (zh) | 2007-12-28 | 2008-12-26 | 加速对特性2椭圆曲线密码系统的计算的方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US8144864B2 (zh) |
EP (1) | EP2075689B1 (zh) |
CN (2) | CN102866878B (zh) |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8024391B2 (en) * | 2006-11-06 | 2011-09-20 | Atmel Rousset S.A.S. | Modular multiplication method with precomputation using one known operand |
US8707042B2 (en) * | 2008-08-28 | 2014-04-22 | Red Hat, Inc. | Sharing keys between cooperating parties |
WO2010112739A1 (fr) * | 2009-03-31 | 2010-10-07 | France Telecom | Procede pour effectuer une tache cryptographique dans un composant electronique |
CN102521785B (zh) * | 2011-10-26 | 2014-04-16 | 哈尔滨工业大学 | 用于图像共享的基于EC-ElGamal算法的同态图像加密和解密方法 |
WO2014132155A1 (en) * | 2013-02-28 | 2014-09-04 | Koninklijke Philips N.V. | Network device configured to derive a shared key |
US10812252B2 (en) | 2017-01-09 | 2020-10-20 | Microsoft Technology Licensing, Llc | String matching in encrypted data |
US11196539B2 (en) | 2017-06-22 | 2021-12-07 | Microsoft Technology Licensing, Llc | Multiplication operations on homomorphic encrypted data |
US10541805B2 (en) | 2017-06-26 | 2020-01-21 | Microsoft Technology Licensing, Llc | Variable relinearization in homomorphic encryption |
US10749665B2 (en) | 2017-06-29 | 2020-08-18 | Microsoft Technology Licensing, Llc | High-precision rational number arithmetic in homomorphic encryption |
US10637656B2 (en) * | 2017-11-28 | 2020-04-28 | Blackberry Limited | Method and system for key agreement utilizing semigroups |
CN112468290B (zh) * | 2020-10-30 | 2021-12-10 | 华控清交信息科技(北京)有限公司 | 一种数据处理方法、装置和用于数据处理的装置 |
CN113504895B (zh) * | 2021-07-13 | 2024-02-20 | 深圳市智芯华玺信息技术有限公司 | 椭圆曲线多标量点乘计算优化方法及优化装置 |
CN115103357B (zh) * | 2022-08-26 | 2022-11-25 | 汉仪科技(深圳)有限公司 | 一种基于fpga的5g通讯加密系统 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1831754A (zh) * | 2005-11-04 | 2006-09-13 | 北京浦奥得数码技术有限公司 | 一种椭圆曲线密码系统及实现方法 |
Family Cites Families (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5847981A (en) * | 1997-09-04 | 1998-12-08 | Motorola, Inc. | Multiply and accumulate circuit |
US6356636B1 (en) * | 1998-07-22 | 2002-03-12 | Motorola, Inc. | Circuit and method for fast modular multiplication |
US6397241B1 (en) * | 1998-12-18 | 2002-05-28 | Motorola, Inc. | Multiplier cell and method of computing |
DE60139401D1 (de) * | 2000-05-15 | 2009-09-10 | Sandisk Il Ltd | Erweiterung des bereichs rechnerischer körper von ganzen zahlen |
US6898284B2 (en) * | 2000-08-18 | 2005-05-24 | The United States Of America As Represented By The National Security Agency | Cryptographic identification and digital signature method using efficient elliptic curve |
US7181484B2 (en) * | 2001-02-21 | 2007-02-20 | Mips Technologies, Inc. | Extended-precision accumulation of multiplier output |
US7218734B2 (en) * | 2001-05-02 | 2007-05-15 | Nciper Corporation Limited | Ring arithmetic method, system, and apparatus |
JP2003131568A (ja) * | 2001-10-26 | 2003-05-09 | Hitachi Ltd | 楕円曲線署名検証方法及び装置並びに記憶媒体 |
DE10164416A1 (de) * | 2001-12-29 | 2003-07-10 | Philips Intellectual Property | Verfahren zum Multiplizieren zweier Faktoren aus dem Galois-Feld sowie Multiplizierer zum Durchführen des Verfahrens |
JP4386732B2 (ja) * | 2002-01-08 | 2009-12-16 | セブン ネットワークス, インコーポレイテッド | モバイルネットワークの接続アーキテクチャ |
US7508936B2 (en) * | 2002-05-01 | 2009-03-24 | Sun Microsystems, Inc. | Hardware accelerator for elliptic curve cryptography |
US7447310B2 (en) * | 2002-08-06 | 2008-11-04 | The State Of Oregon Acting By And Through The State Board Of Higher Education On Behalf Of Oregon State University | Lean multiplication of multi-precision numbers over GF(2m) |
US20040096057A1 (en) * | 2002-11-20 | 2004-05-20 | Moore Stephen F. | Modular multiplication of multi-precision numbers |
US7124351B2 (en) * | 2002-12-04 | 2006-10-17 | Stmicroelectronics Asia Pacific Pte. Ltd. | Software instructions utilizing a hardwired circuit |
US7772999B2 (en) * | 2007-12-10 | 2010-08-10 | Peter Lablans | N-state ripple adder scheme coding with corresponding n-state ripple adder scheme decoding |
US7742596B2 (en) * | 2004-08-24 | 2010-06-22 | General Dynamics C4 Systems, Inc. | Reliable elliptic curve cryptography computation |
FR2885711B1 (fr) * | 2005-05-12 | 2007-07-06 | Atmel Corp | Procede et materiel modulaire et aleatoire pour la reduction polynomiale |
US7590930B2 (en) * | 2005-05-24 | 2009-09-15 | Intel Corporation | Instructions for performing modulo-2 multiplication and bit reflection |
CA2542556C (en) * | 2005-06-03 | 2014-09-16 | Tata Consultancy Services Limited | An authentication system executing an elliptic curve digital signature cryptographic process |
WO2007080633A1 (ja) * | 2006-01-11 | 2007-07-19 | Mitsubishi Denki Kabushiki Kaisha | 楕円曲線暗号パラメータ生成装置及び楕円曲線暗号演算装置及び楕円曲線暗号パラメータ生成プログラム及び楕円曲線暗号演算プログラム |
US8229109B2 (en) * | 2006-06-27 | 2012-07-24 | Intel Corporation | Modular reduction using folding |
US8024391B2 (en) * | 2006-11-06 | 2011-09-20 | Atmel Rousset S.A.S. | Modular multiplication method with precomputation using one known operand |
KR100867989B1 (ko) * | 2006-12-06 | 2008-11-10 | 한국전자통신연구원 | 단순전력분석에 안전한 Left-to-Right방향으로 리코딩과 스칼라 곱셈을 동시에 수행하는 스칼라곱셈 방법 |
US7986779B2 (en) * | 2007-06-30 | 2011-07-26 | Intel Corporation | Efficient elliptic-curve cryptography based on primality of the order of the ECC-group |
US8271570B2 (en) * | 2007-06-30 | 2012-09-18 | Intel Corporation | Unified integer/galois field (2m) multiplier architecture for elliptic-curve crytpography |
-
2007
- 2007-12-28 US US11/966,572 patent/US8144864B2/en not_active Expired - Fee Related
-
2008
- 2008-12-11 EP EP08171398A patent/EP2075689B1/en not_active Not-in-force
- 2008-12-26 CN CN201210297970.3A patent/CN102866878B/zh not_active Expired - Fee Related
- 2008-12-26 CN CN2008101897061A patent/CN101483517B/zh not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1831754A (zh) * | 2005-11-04 | 2006-09-13 | 北京浦奥得数码技术有限公司 | 一种椭圆曲线密码系统及实现方法 |
Non-Patent Citations (2)
Title |
---|
A New Method for Fast Interger Multiplication and its Application to Cryptography;Michael E.Kounavis;《2007 INTERNATIONAL SYMPOSIUM ON PERFORMANCE EVALUATION OF COMPUTER AND TELECOMMUNICATION SYSTEMS SPECTS》;20070716;全文 * |
Fast Multiplication on Elliptic Curves over GF(2m) without Precomputation;J.LOPEZ et al;《PROCEEDINGS, WORKSHOP ON CRYPTOGRAPHIC HARDWARE AND EMBEDDED SYSTEMS 1999》;19991231;全文 * |
Also Published As
Publication number | Publication date |
---|---|
EP2075689A3 (en) | 2010-12-22 |
US8144864B2 (en) | 2012-03-27 |
EP2075689A2 (en) | 2009-07-01 |
CN101483517A (zh) | 2009-07-15 |
US20100020965A1 (en) | 2010-01-28 |
EP2075689B1 (en) | 2013-03-27 |
CN101483517B (zh) | 2012-10-10 |
CN102866878A (zh) | 2013-01-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102866878B (zh) | 加速对特性2椭圆曲线密码系统的计算的方法 | |
Koziel et al. | Post-quantum cryptography on FPGA based on isogenies on elliptic curves | |
Pornin et al. | More efficient algorithms for the NTRU key generation using the field norm | |
JP4682852B2 (ja) | 暗号処理装置、および暗号処理方法、並びにコンピュータ・プログラム | |
US20100067690A1 (en) | Spa-resistant left-to-right recoding and unified scalar multiplication methods | |
Jalali et al. | ARMv8 SIKE: Optimized supersingular isogeny key encapsulation on ARMv8 processors | |
Farzam et al. | Implementation of supersingular isogeny-based Diffie-Hellman and key encapsulation using an efficient scheduling | |
US9722773B2 (en) | Method of determining a representation of a product of a first element and a second element of a finite set, method of evaluating a function applied to an element of a finite set and associated devices | |
Mishra | Pipelined computation of scalar multiplication in elliptic curve cryptosystems (extended version) | |
Botrel et al. | Faster Montgomery multiplication and multi-scalar-multiplication for SNARKs | |
EP3352411B1 (en) | Method of generating cryptographic key pairs | |
Wollinger | Computer architectures for cryptosystems based on hyperelliptic curves | |
Guerrini et al. | Randomized mixed-radix scalar multiplication | |
El Housni et al. | EdMSM: multi-scalar-multiplication for SNARKs and faster montgomery multiplication | |
KR100723863B1 (ko) | 랜덤화한 프로베니우스 분해방법을 이용한 차분 공격 방지방법 및 그 장치 | |
Aranha et al. | Faster constant-time evaluation of the Kronecker symbol with application to elliptic curve hashing | |
Ustimenko et al. | Dynamical systems as the main instrument for the constructions of new quadratic families and their usage in cryptography | |
Leinweber et al. | An efficient elliptic curve cryptography processor using addition chains with high information entropy | |
Jalali et al. | Optimized supersingular isogeny key encapsulation on armv8 processors | |
Razali et al. | Improved point 5P formula for twisted edwards curve in projective coordinate over prime field | |
Verma | Efficient implementations of pairing-based cryptography on embedded systems | |
US20080005209A1 (en) | System, method and apparatus for public key encryption | |
Herbaut et al. | Random Euclidean addition chain generation and its application to point multiplication | |
Weimerskirch | The application of the Mordell-Weil group to cryptographic systems. | |
Inoue et al. | Acceleration of homomorphic unrolled trace-type function using AVX512 instructions |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20160928 Termination date: 20211226 |