用于元素的指数或标量乘法的方法

文档序号:6336174阅读:264来源:国知局
专利名称:用于元素的指数或标量乘法的方法
技术领域
本发明涉及一种藉助在每种情况下的至少一个指数或标量ei对元素gi进行多次取幂∏i=1dgiei或多次标量乘法∑i=1deigi的方法,该至少一个指数或标量ei尤其是一个在每种情况下具有最大比特率n或比特长度的整数指数或标量,该方法尤其是藉助于至少一个指数或标量e对元素g进行取幂ge或标量乘法e’g,该至少一个指数或标量ei尤其是一个在每种情况下具有最大比特率n或比特长度的整数指数或标量,该元素gi’,g从至少一个组G例如Abelian组G得出,它-在(多次)取幂的情形下,尤其是用相乘表示的,以及-在(多次)标量乘法的情形下,尤其是用相加表示的。
在基于Abelian组中的离散对数问题的不可解性的非对称加密方法或公共密钥密码系统中,对一组元素g的取幂gil,或对多个组元素g,h的多次取幂glnjhknk是在签名和密钥交换方法中的基本运算之一。所以使这种基本运算加速是特别重要的。
预先计算组元素g的幂的可能性存在下列问题在这种情形下,所使用的组元素g必须是事先已知的。这种情况不是例如在D[igital]S[ignature]A[lgorithm](数字签名算法)中或在E[lliptic]C[urve]D[igital]S[ignature]A[lgorithm](椭圆曲线数字签名算法)中或在Diffie-Hellman密钥交换方法中的签名验证的情形。对于这一点的一个附加的事实是,在智能卡上,没有足够的存储空间来存储足够大的数目的预先计算的元素。
另一个可能性在于重新编码所使用的指数;这个可能性与组元素g的选择无关,所以对于加速上述的签名和密钥交换方法是特别有吸引力的。
用于重新编码在(多次)取幂的算法中使用的指数的技术是基于这样的基本概念整数以与通常的二进制表示法不同的形式被重写,即用较低的密度和用一个至少包含元素0和1的有限的整数组C中的系数。
如果在一个其中执行计算的特定的组中,对元素求逆是“不费事的”,也就是说,如果求逆的计算复杂性比起其它的组运算是非常低的,以及如果使用带符号的系数,则常常可以假设cεC也意味着-cεC。如果求逆在计算方面被复杂的,则组C的所有的元素是非负整数。
用于计算ge的所谓的“平方与乘法”取幂算法,其中g是组元素和e是整数,则以已知的方式如下地运算-e被写为∑i=0nei2i,其中每个系数ei处在C中;-元素gen是给定的或事先计算的;-临时变量x被设置为gen;-对于所有的i=n-1,n-2,...,0,x首先被平方,然后如果系数ei不是趋零的,则被乘以元素gei;-在对i=0实行最后的平方运算之后,以及在适当的情形(即,如果系数e0不是趋零的)下乘以元素ge0之后,临时变量x的数值是所需的结果ge。
这样,组运算的数目近似等于在指数e的表示式∑i=0nei2i,中非趋零系数ei的数目(这些组运算是乘以预先计算的或给定的组元素,或如果组元素的求逆是快速的,则乘以它们的倒数)加上-表示式的长度n(在这种情形下,相应的例如n次运算是平方运算)以及-元素gc的表的基数,其中cεC和c不等于零,或-如果在给定的组中求逆是快速的,则取这个基数的一半,以及系数ei被加上符号。
在C的大小与表示法的密度之间的良好匹配是使得指数的表示法的性能最佳化的路径。
指数重新编码的例子包括N[on]A[djacent]F[orm](相邻形式的N)(参阅G.W.Reitwiesner,“Binaryarithmetic(二进制算法)”,Advances in Computers 1,pages 231 to 308,1960;S.Arno和F.S.Wheeler,“Signed digit representations of minimal Hammingweight(最小汉明权重的带符号的数字表示法)”,IEEE Transactions on Computers42,1993,pages 1007 to 1010);-类似于N[on]A[djacent]F[orm]的相同权重方法(参阅M.Joye和S.-M.Yen,“Optimal left-to-right binary signed-digit recoding(最佳左-右二进制带符号的数字重新编码)”,IEEE Transactions on Computers 49(7),2000,pages 740 to 748);
-重新编码以便用固定窗口取幂(参阅J.Bos和M.Coster,“Additionchain heuristics(加法链试探法)”,in Advances in Cryptology-CRYPTO‘89,LNCS 435,1990,pages 400 to 407;A.Menezes,P.van Oorschot和S.Vanstone,“Handbook of Applied Cryptography(应用密码学手册)”,CRC Press,1996);-G[eneralized]N[on]A[djacent]F[orm](归一化的相邻形式的N)(参阅W.E.Clark and J.J.Liang,“On arithmetic weight for a general radixrepresentation of integers′(关于整数的一般下标表示法的算术权重)”,IEEETransactions on Information Theory IT-19,1973,pages 823 to 826);-“滑窗”(参阅E.G.Thurber,“On addition chains l(mn)≤l(n)b and lowerbounds for c(r)(关于加法链l(mn)≤l(n)b和c(r)的下边界)”,Duke MathematicalJournal 40,1973,pages 907 to 913;A.Menezes,P.van Oorschot和S.Vanstone,“Handbook of Applied Cryptography(应用密码学手册)”,CRC Press,1996),任选地,在N[on]A[djacent]F[orm]上或在其它冗余的基于2的表示式(参阅R.Avanzi,“On the complexity of certain multi-exponentiation techniquesin cryptography(关于密码学的某些多次取幂技术的复杂性)”,出版于Journal ofCryptology;K.Koyama和Y.Tsuruoka,“Speeding up elliptic cryptosystems byusing a signed binary window method(通过使用加符号的二进制窗口方法加速椭圆加密系统)”,出版于E.Brickell·(Ed.),“Advances in Cryptology,Proceedings of Crypto‘92”,Lecture Notes in Computer Science Volume 740,pages 345 to 357,Springer-Verlag,1992;还参阅K.Koyama,Y.Tsuruoka,“ASigned Binary Window Method for Fast Computing over Elliptic Curves(快速计算椭圆曲线的带符号的二进制窗口方法”,IEICE Trans.Fundamentals,Volume E76-A,No.1,pages 55to 62,January 1993);以及-w[indow]N[on]A[djacent]F[orm](窗口相邻形式的N)(参阅J.A.Solinas,“An improved algorithm for arithmetic on a family of elliptic curves(对椭圆曲线族上的算术的改进算法)”,in Advances in Cryptology-CRYPTO‘97,B.S.Kaliski jr.(Ed.),Lecture Notes in Computer Science Volume 1294,pages 357 to371;H.Cohen,“Analysis of the flexible window powering algorithm(对灵活的窗口乘方算法的分析)”,最新拷贝可得自http//www.math.u-bordeaux.fr/~cohen/)。
然而,对于指数的重新编码,应当看到,这个重新编码在许多情形下不能“在线”地进行,也就是说不能在进行取幂期间进行;为此,重新编码的指数必须首先被存储。然而,这个存储要求在极其受限制的环境下是特别不利的,例如缘在智能卡的情形下,因为在这样的极其受限制的环境下存储器的每个字节都是“宝贵的”。
根据上述的不利情形和缺点以及参照所列出的现有技术,本发明的目的是进一步开发一种上述类型的方法,以使得即使在和特别是在极其受限制的环境下(例如像在智能卡的情形下),在用于重新编码指数或标量的存储空间方面的要求也尽可能地被减小。
这个目的是通过具有在权利要求1中规定的特性的方法达到的。本发明的有利的实施例和合适的开发的特征在从属权利要求中阐述。
本发明由此是基于在受限制的环境下用于单次取幂或单次标量乘法或用于多次取幂或多次标量乘法的近于在线重新编码的原理;在这方面,“近于在线”重新编码是指,指数或标量被分割成各个分段,它们被单独地重新编码以及它们的重新编码是在(多次)取幂或(多次)标量乘法的各部分之间的层中进行的。
“近于在线”重新编码可用来减小用于对重新编码的指数或用于对重新编码的标量的存储要求。近于在线重新编码对于(多次)取幂或(多次)标量乘法的总的运行时间的影响通常是最小的。
根据上述的示例性重新编码操作,在按照本发明的方法中,假设在多次取幂和多次标量乘法的情形下重新编码具有形式ei=∑j=0nbi,j2j;在作为多次取幂或多个标量乘法的特殊情形的(单次)取幂或(单次)标量乘法的情形下,所假设的基础相应地取为ei=∑j=0nbi2j,其中|n=log2e|是e的比特长度,也就是说,比特长度n至多比该二进制表示式长1比特。换句话说,这意味着,n+1要被看作为任何指数或标量ei=∑j=0nbi,j2j的最大长度。
另外还假设,重新编码的算法取决于参数w—可能不是明显地—这个参数通常相应于一个在其上读出指数或标量ei的比特的窗口的宽度,或相应于这样的宽度的上限w。
在这个基础上,按照本发明的教导,在相乘符号表示的组(特别是地Abelian组G)的情形下,由符号表示法∏i=1dgiei中的符号表示的多次取幂按以下步骤进行
首先选择一个块或部分的宽度L,它可以明显大于参数w和明显短于任何指数ei的最大长度;然后[a.1]计算和存储或[a.2]从存储器检索所有的幂gic其中gi是组G的元素以及c是许可的正的系数;[b]把每个指数ei,特别是整数指数,划分成多个块或多个具有以上选择的块或部分的宽度L的部分ei,k,[b.1]其中指数ei可以写成被划分的形式ei=∑k=0rei,k2kL,其中0≤ei,k<2L,以及[b.2]其中块或部分ei,k的数目r可以具体地被定义为最大比特率n对块或部分的宽度的比特率L的整数商;[c]分别重新编码块或部分ei,k,其中对每个指数ei的每个单独的块或对每个单独的部分ei,k的这种重新编码可划分成以下的子步骤[c.1]把临时变量x设置为标准化的数值,特别地为数值1,其中1表示相对于被分配给组G的组运算的组G的中性元素;[c.2]把变量k设置为数值r-1,r-2,…,0(一个接一个),其中对于变量k的每个这样的数值k=r-1,r-2,…,0实行以下的子步骤[c.2.i]对于下标i的每个下标值i=1,2,…,d(其中d被定义为元素gi的数目和被分配给元素gi的指数ei的数目)[c.2.i.a]把块或部分ei重新编码为由在每种情况下从有限整数集C导出的系数bi,j加权的2的幂2j的和值∑j=0Lbij2j;[c.2.i.b]如果被分配给2的最高幂2L的系数bi,L并不趋零,则把临时变量x设置为x与被分配给2的最高幂2L的系数bi,L的元素gi的幂gibi,L的乘积;[c.2.ii]对于下标j的每个数值j=L-1,L-2,…,0[c.2.ii.a]将临时变量x进行平方;[c.2.ii.b]对于下标i的每个数值i=1,2,…,d如果被分配给2的幂2j的bi,j并不趋零,则把暂时变量x设置为x与被分配给2的幂2j的系数bi,j的元素gi的幂gibij的乘积;最后返回x。
(单次)取幂这种特定情形是在以上在d=1时得到的,也就是说,当有单个元素g和被分配给该元素g的单个指数e时,这时实际上等于省略下标i;在这种情形下,元素g因此用指数e进行指数化,尤其是用一个整数指数,它具有最大比特率n或比特长度),以形成幂ge,其中元素g再次从一个相乘表示法的Abelian组G得出。
类似地,按照本发明的教导,在相加地表示的组(特别是Abelian组G)的情形下可以由符号表示法∑i=1dei·gi,中的符号表示的多个标量乘法按以下步骤进行首先选择块或部分的宽度L,它可以明显大于参数w和明显短于任何变量ei的最大长度;然后[a.1]计算和存储或[a.2]从存储器检索所有的乘数c·gi其中c是许可的正系数以及gi是组G的元素;[b]把每个变量ei,尤其是整数变量,划分成多个块或多个具有以上选择的块或部分的宽度L的多个部分ei,k,[b.1]其中标量ei可以写成被划分的形式ei=∑k=0rei,k2kL,其中0≤ei,k<2L,以及[b.2]其中块或部分ei,k的数目r可以具体地被定义为最大比特率n对块或部分的宽度的比特率L的整数商;[c]分别对块或部分ei,k重新编码,其中对每个标量ei的对每个单独的块或对每个单独的部分ei,k的重新编码可以划分成以下的子步骤[c.1]把临时变量x设置为标准化数值,尤其是为数值0,其中0表示相对于分配给组G的组运算的组G的中性元素;[c.2]设置变量k为数值r-1,r-2,…,0(一个接一个),其中对于变量k的每个这样的数值k=r-1,r-2,…,0实行以下的子步骤[c.2.i]对于下标i的每个下标值i=1,2,…,d(其中d被定义为元素gi的数目和被分配给元素gi的标量ei的数目)[c.2.i.a]把块或部分ei重新编码为由每种情况下从有限的整数组C得出的系数bi,j所加权的2的幂2j的和值∑j=0Lbi,j2j;[c.2.i.b]如果被分配给2的最高幂2j的的系数bi,j并不趋零,则把临时变量x设置为x与分配给2的最高幂2L的的系数bi,L的元素gi的乘数bi,Lgi的和值;[c.2.ii]对于下标j的每个数值j=L-1,L-2,…,0[c.2.ii.a]将临时变量x加倍;[c.2.ii.b]对于下标i的每个数值i=1,2,…,d如果被分配给2的幂2j的系数bi,j并不趋零,则把临时变量x设置为x与被分配给2的幂2j的系数bi,j的元素gi的乘数bijgi的和值;最后返回x。
(单次)标量乘法的特定的情形是在以上对d=1得到的,也就是说,当有单个元素g并有分配给元素g的单个标量e时(事实上可以省略下标i);在这种情形下,元素g因此被乘以标量e,尤其是整数标量(它具有最大比特率n或比特长度),以给出乘积eg,其中元素g再次是从相加地表示的Abelian组G得出的。
按照本发明的一个优选的其它的实施例,-重新编码的块或重新编码的部分ei,k被使用一次,以及-存储重新编码的块或重新编码的部分ei,k的存储器单元被使用来重新编码以下的块或以下的部分ei,k-l,以使得基于从右到左的整数的重新编码的(多次)取幂算法或(多次)标量乘法算法的存储要求可以明显减小。
本发明还涉及按照上述类型的方法工作的微处理器。
本发明还涉及具有上述类型的至少一个微处理器的设备,尤其是芯片卡和/或尤其是智能卡。
本发明最后涉及在至少一个密码系统中,尤其是在至少一个公共密钥密码系统、至少一个密钥交换系统或至少一个签名系统中-上述类型的方法的使用和/或-上述类型的至少一个微处理器的使用和/或-上述类型的至少一个设备,尤其是至少一个芯片卡和/或尤其是至少一个智能卡的使用。
如上所述,具有用于有利地实施和研发本发明的教导的各种可能性。在这方面,一方面,参考从属于权利要求1的权利要求,和另一方面,在下面根据实施例的五个例子的示例性实施方案更详细地描述本发明的特性和优点,其中-实施例的第一例涉及单次取幂的方法,-实施例的第二例涉及多次取幂的方法,-实施例的第三例同样涉及多次取幂的方法,也就是说,基于用于Abelian组G的乘法表示法,以及其中-实施例的第四例涉及单次标量乘法的方法,以及-实施例的第五例涉及多次标量乘法的方法,也就是说,基于用于Abelian组G的加法表示法,与在上一节“现有技术”中用于Abelian组G的乘法表示法相比较,当然会作出改变和替代,这些是从权利要求4[<-->(多个)指数中性元素“1”,“平方”,“乘积”]与权利要求5[<-->(多个)标量乘法中性元素“1”,“加倍”,“和值”]之间的不同的用语可明显看到的。
下面在本发明显示的实施例方面的五个例子中以所谓的近于在线的重新编码形式用于通用技术,它可用来明显减小以下算法的存储要求单次取幂算法(参阅实施例的第一例),多次取幂算法(参阅实施例的第二例和实施例的第三例),单次标量乘法算法(参阅实施例的第四例)或多次标量乘法算法(参阅实施例的第五例),它们是基于基于从右到左的整数的重新编码。
近于在线的重新编码技术在极其受限制的环境下,例如像在芯片卡或在智能卡中,可能是非常有用的,其中在存储空间方面的节省可很大程度上取决于具体的情形(也许会出现吞吐量损失,尽管这是非常低的,特别是当指数或标量被划分成太多的小的部分(=太多的小“块”)时;对于性能的影响可能是显著的)。
实施例的第一例单次取幂如果G是具有2n阶的Abelian组,并且假设给定元素gεG和整数e,则按照本发明的目标是尽可能快速地计算x=ge。按照本发明的重新编码使得指数运算非常快速,但这个重新编码不能在线使用,也就是说,不能在取幂本身期间进行;这是例如在w[indow]N[on]A[djacent]F[orm]中的情形。
在近于在线重新编码中使用的技术包含把指数e划分成多个“指数块”,也就是说,划分成多个指数分段或多个指数部分,它们大大地长于w比特,但比起e短得多。块或部分然后被单独重新编码,被使用一次,然后其中存储块或部分的存储器被重复使用来重新编码下一个块或部分,这样,对于指数n所需要的总的存储空间可以明显减小。
下面显示的近于在线重新编码是在块或部分具有L比特的长度的假设下进行的。L明显地大于w的理由是,对于重新编码的指数中不趋零系数的数目的估值通常是渐近地给出的,但在重新编码的指数中非趋零的系数的实际的数目由于一个小的相加常数而有时会是更大的,这将在下面根据具体的例子示出。
下面,在近于在线重新编码的实施例的第一例的上下文内,给出一个算法,在该算法中引入以下内容-Abelian组G的基本元素g,-具有n比特的整数e,-窗口宽度w,以及-块或部分的宽度L>>w;单次取幂ge被输出步骤1.x←1步骤2. 则e=Σk=0r-1ek2kLfor0≤ek<2L]]>步骤3.对于k=r-1直到0,进行{(a)重新编码(ek)→ek=Σj=0Lbj2j]]>(b)如果bL≠0则x←x·gbL]]>(c)对于j=L-1直到0,进行{(i)x←x2(ii)x←x·gbj}}]]>步骤4.返回x这里应当指出,在L比特后可能发生以上的算法在一行实行两组乘法,而不是仅仅一组乘法。这可能是在一个块ei(=指数部分ei之一)代表非偶数时和在下一个块ei+1(=下一个指数部分ei+1之一)的重新编码要长于一个系数(bL不等于零)时发生的。
使用一个其中所选择的重新编码是w[indow]N[on]A[djacent]F[orm]的具体的例子,现在可以表明,速度方面的损失是最小的,而存储空间方面的节省可以是相当大的对于n=160,w的最佳值等于5(参阅H.Cohen,“Analysis ofthe flexible window powering algorithm(对灵活的窗口乘幂算法的分析)”,最新的拷贝可在http//www.math.u-bordeaux.fr/~cohen/)得到);因此必须预先计算基本元素g的七个幂g3,g5,g7,g9,g11,g13,g15,以及还暂时需要g2。每个生编码的系数需要至少5个比特,但实施程序大概要使用全部带符号的字节。
两个重新编码的指数需要320个字节的R[andom]A[ccess]M[emory],但两个重新编码的32比特块(=32比特分段或32比特部分)只需要R[andom]A[ccess]M[emory]的66字节的R[andom]A[ccess]M[emory]。被节省的254字节的R[andom]A[ccess]M[emory]可用来存储仿射坐标中椭圆曲线的六个点。
Cohen现在证明(参阅H.Cohen,“Analysis of the flexible windowpowering algorithm(对灵活的窗口乘幂算法的分析”),最新的拷贝可在http//www.math.u-bordeaux.ff/~cohen/得到)具有n比特(它是在相应的指数中乘法的平均次数加1)的整数的该w[indow]N[on]A[djacent]F[orm]的平均汉明权重等于n/(w+1)+1-0.5(w-1)(w+2)/(w+1)2+O(ρ-n),其中ρ=ρ(w)是大于1的实数,它仅仅取决于w而不取决于n。在数值方面,ρ=21/2=1.414...对于w=3,ρ=1.2157...对于w=4,以及ρ=1.1296...对于w=5。
关于w[indow]N[on]A[djacent]F[orm]的平均汉明权重的以上的组意味着,当一个整数被划分成r个块或r个部分时,r个块或r个部分的总的汉明权重比起原先的整数的汉明权重大(r-1)(1-0.5(w-1)(w+2)/(w+1)2)倍。
在其中n=160的情形下,可以选择L=32,因此r=5。灵活的窗口的方法,比起按照本发明的近于在线方法,需要平均少22/9=2.44次的组运算。这个差值约为取幂算法(超过193次组运算,包括用于预先计算的时间)的总的运行时间的1.26%;然而,对于重新编码的指数的存储要求减小约80%。
实施例的第二例多次取幂来自实施例的第一例(单次取幂)的以上的算法可以变换成多次取幂方法。
如果给定组元素gi,…,gdεG和指数ei,…,ed,其中d>1,以及要计算∏i=1dgiei,则首先决定使用指数ei,…,ed的稀疏重新编码,然后使用“平方与乘法”循环首先,计算和存储所有的幂gic,其中c是许可的正系数。然后把临时变量x设置为1εG。对于j=n,n-1,…,0,x首先进行平方,以及对于i=1,…,d,把平方过的x乘以gieij,其中ei,j是在ei的重新编码中2j的系数。
结束时,临时变量x中包含想所需结果。
这个方法也被称为快速取幂运算;正如在按照实施例的第一例的情形下,再次希望保持良好的从右到左的重新编码的优点,而不必需用使用太多的存储器。
以下的变例实行近于在线的重新编码,也就是说,几乎就在快速多次取幂运算期间或在快速多次取幂运算后不久,其中在算法中给定以下参数-Abelian组G的基本元素gi,…,gd,-每个具有至多n比特的整数ei,…,ed(d>1),-窗口宽度w,-块或部分宽度L>>w,以及-对于在系数组中所有的c的预先计算的幂gic;多次取幂∏i=0dgiei被输出步骤1.x←1步骤2. 对于i=1...d则ei=Σk=0r-1ei,k2kL,]]>步骤3.对于k=r-1直到0,进行{(a)对于i=1到d,进行{重新编码(ei,k)→ei,k=Σj=0Lbi,j2L]]>
如果bi,L≠0则x←x·gibi,L}]]>(b)对于j=L-1直到0,进行{(i)x←x2(ii)对于i=1到d,进行{如果bi,L≠0则x←x·gibi,j]]>}}步骤4.返回x在按照实施例的第一例的算法方面进行的注解在这里也是贴切的,也就是说,在其中n=160和L=32的有限的区域的椭圆曲线的情形下,要使用2.44d组运算,其中d是幂要互相相乘的次数。虽然这比单次快速取幂的情形要多,但仍可以节省254d字节的R[andom]A[ccess]M[emory],也就是说,在仿射坐标下用于6d个预先计算的点的存储。
实施例的第三例用并行窗口的多次取幂在实施例的第三例中,近于在线重新编码的使用在Yen,Laih和Lenstra的算法(参阅R.Avanzi,“On the complexity of certain multi-exponentiationtechniques in cryptography(关于密码学中的某些多次取幂技术的复杂性)”,出版于Journal of Cryptology)的综述(参阅S.-M.Yen,C.-S.Laih和A.K.Lenstra,“Multi-exponentiation(多次取幂)”,IEE Proc.Comput.Digit.Tech.,Volume 141,No.6,November 1994)中被描述。
在这方面,下面描述的这个实施例的第三例主要用来说明所描述的算法的基本原理;可以得到的效率提高应该认为是相当小的。算法实际上是Shamir的使用滑动窗口的诀窍的变例,它被显示为如下在算法中给定以下参数-窗口宽度w,-整数ei=∑j=0neij2j,以及-来自形式∏i=1dgiki的组G的、包括gi,…,gd的预先计算的元素组E(组E高度地取决于窗口宽度w和整数ei’的表示法;参阅下面在算法后面作出的注解);输出多次取幂∏i=1dgiei步骤1.t←n和x←1∈G步骤2.如果ei,t-1=0,对于i=1,2,…,d,则{
(a)t←t-1和x←x2}否则{(b)如果t>w,则t←t-w,否则{w←t和t←0}(c)对于i=1,2,…,d进行fi←Σj=0w-1ei,i+j2j]]>(d)如果s是最大自然数,s≥0,以使得2s|fi对于所有的i(e)对于i=1,2,…,d,进行fi←fi/2J(f)(i)x←x2w-x;]]>(ii)x←x·Πi=1dgifi;]]>和(iii)x←x2J}]]>步骤3.如果t=0则返回x否则转到步骤2。
在这方面,应当指出,在步骤2.(c)的开始处fi是由指数e的一串w个接连的比特所表示的整数。在标准化步骤2.(e)以后,至少一个fi是非偶数。
如果在组G中,元素的求逆是快速发生的,则选择N[on]A[djacent]F[orm]进行重新编码。可以容易地看到,在N[on]A[djacent]F[orm]中具有w比特的带符号的整数的数目是Iw=(2w+2-(-1)w)/3。组E包含形式∏i=1dgiki的所有的元素,以使得-|ki|≤Tw对于i=1,2,...,d,-至少一个ki是非偶数,以及-来自序列k1,k2,...,kp的第一非趋零值是正的。
按照这样,步骤2.(f)(ii)可通过乘法或除法来执行。E的基数是(Iwd-Iw-1d)/2。
参数w=2=d然后被固定,以及选择N[on]A[djacent]F[orm]用于对指数重新编码。这样做的理由是利用椭圆曲线产生数字签名(参阅American National Standards Institute,“ANSIX9.62Public Key Cryptography for theFinancial Services IndustryThe Elliptjc Curve Digital Signature Algorithm(ECDSA),1999(金融服务业的公共密钥密码学椭圆曲线数字签名算法(ECDSA),1999))在这种情形下,d=2,以及对于相关大小的指数,即从n=160到n=240,参数w=2是最佳的(参阅R.Avanzi,“On the complexity of certain multi-exponentiationtechniques in cryptography”,published in Journal of Cryptology(关于密码学中的某些多次取幂技术的复杂性))。来自实施例的第三例的以上的算法因此用于对于d=2=w和N[on]A[djacent]F[orm]的近于在线的多次取幂,其中在算法中给定以下参数-Abelian组G的两个(基本)元素g1,g2,-两个自然数e1,e2,每个具有至多n比特,以及
-块或部分的宽度L,其中n>>L>>2;输出两次取幂g1e1·g2e2步骤1.预先计算8个元素g1ag2b,在这里任一项0<a≤2和-2≤b≤21,其中a,b的至少一个是非偶数,或a=0和b=1[见注A.2]步骤2.x←1 则ei=Σk=0r-1ei,k2kL,]]>对于i=1,2,具有0≤ei,k<2L步骤3.对于k=r-1直到0,进行{(a)对于i=1,2进行重新编码ei,k为NAF:vi:=ei,k=Σj=0Lvi,j2j]]>a1←0,a2←0(b)如果(v1,L,v2,L)≠(0,0)(v1,L,v2,L)≠(0,0),则{(i)如果(v1,L-1,v2,L-1)=(0,0),则x←x·(g1v1,L·g2v2,L)]]>(ii)否则{a1←v1,L,a2←v2,L}}(c)对于j=L-1直到0,进行{(i)x←x2(ii)如果(v1,j,v2,j)≠(0,0),则如果(a1,a2)≠(0,0),则{(iii)a1←2a1+v1,j,a2←2a2+v2,j(iv)x←x·(g1a1·g2a2)]]>(或x←x/(g1-a1·g2-a2)]]>)}否则{如果(j>0和(v1,j-1,v2,j-1)≠(0,0)),则{(v)a1←v1,j,a2←v2,j}否则{(vi)x←x·(g1vi,j·g2v2,j)]]>(或x←x/(g1-vi,j·g2-v2,j)]]>)}}}}(循环的内部(inner for loop)结束)}(循环的外部(outer for loop)结束)步骤4.返回x这里应当指出,在步骤3,可以看到来自实施例的第一例的以上的算法的两个交叉的循环和来自实施例的第三例的以上的第一算法的同时的顺序询问。
在步骤3.(c)(ii),3.(c)(iii),3.(c)(iv),3.(c)(v),3.(c)(vi),宽度2的窗口由具有L比特的两个块或两个部分经由耦合的N[on]A[djacent]F[orm]被形成。
如果下一个列也是非趋零的,则两个“进位(carry-overs)”a1和a2存储非趋零列的数值,这样,使得在下一个迭代期间数值可被加倍,并被加到下一个列中的数值中;参阅步骤3.(c)(iii)。步骤3.(c)(iv)和3.(c)(vi)通过乘法或通过除法而实行。
如果两个整数b1和b2然后被写为bi=∑i=1mbi,j2j,则一列包含来自以上的表示的一对系数(b1,t,b2,t)。这样的列的经排序的序列是b1和b2的共同的表示。在共同的表示中非趋零的列的数目被称为该表示的汉明权重,并且它的密度是汉明权重与长度m的商。
两个N[on]A[djacent]F[orm]s的联合代表的平均汉明权重是5/9。可以证明,在来自实施例的第三例的以上第二算法的主环路中预期的乘法的次数是11n/27(参阅R.Avanzi,“On the complexity of certain multi-exponentiation techniques in cryptography(关于密码学中的某些多次取幂技术的复杂性)”,出版于Journal of Cryptology),其中可能由近于在线技术造成的附加的组运算被消除。
L是智能卡的C[entral]P[rocessing]U[nit]的本身的字长度或它的小倍数,例如L=32的假设也允许较简单的实施方案。
使用具有160比特的指数和考虑这样的事实N[on]A[djacent]F[orm]s可以每个系数仅用两个比特被有效地存储,需要R[andom]A[ccess]M[emory]的约16字节来存储两个重新编码的32比特的块(=两个重新编码的32比特的分段或两个重新编码的32比特的部分),以替代全部指数的80个字节。在存储空间方面的节省对应于在具有160比特的有限的区域上椭圆曲线的投影坐标上一个点的存储要求,因此不像在实施例的两个以前的例子中那样大。
根据对于给定长度的成对数目对根据实施例的第三例的以上的第二算法形成的窗口的数目进行计数的计算机程序,可以计算该程序10万次完全运行结果的平均值在成对的具有160比特的数目上窗口的平均数是65.81153(应当指出,(11/27)160=65.185),在成对的具有32比特的数目上窗口的平均数是13.64216(应当指出,(11/27)32=13.037)。因此,可以预期,如果n=160和L=32,则近于在线算法仅仅需要513.64216-65.81153=2.39927,也就是说,比起根据实施例的第三例的以上的第一算法约多2.4次组运算。
由于235是在n=160的情形下预期的、根据实施例的第三例的以上的第一算法的组运算的总数,可以估计由按照本发明所使用的近于在线技术造成的性能方面的损失约为1%。
对于具有可以由从左到右运算的简单算法计算的相同的汉明权重的N[on]A[djacent]F[orm]有替换的表示法(参阅M.Joye and S.-M.Yen,“Optimalleft-to-right binary signed-digit recoding(最佳左-右二进制带符号的数字重新编码)”,IEEE Transactions on Computers 49(7),2000,pages 740 to 748)。可能引起关于这个表示法是否可以代替近于在线重新编码的问题。负面响应的原因在于,这个替换方法没有N[on]A[djacent]F[orm]特性,也就是说,两个接连的系数不应当都趋零。
对于存储要求的关联的影响是非常差的。在w=2=d的本例中,对于0<a≤3和-3≤b≤3的组E包含元素g1a·g2b,其中a和/或b是非偶数,或a=0和b=1或b=3;因此组E具有基数20;这使得实施例的第三例的以上的第一算法的存储要求太大。
在Solinas的“J[oint]S[parse]F[orm](联合稀疏表示法)”方面(参阅J.A.Solinas,“Low-Weight Binary Representations for Pairs of Integers(整数对的低权重二进制表示法)”,Centre for Applied Cryptographic Research,University of Waterloo,Combinatorics and Optimization Research Report CORR 2001-41,2001,可得自http://www.cacr.math.uwaterloo.ca/techreports/2001/corr2001-41,ps),提出类似的考虑。
联合稀疏表示法同时地和以互相依赖的方式把两个指数重新编码。J[oint]S[parse]F[orm]的平均密度是I/2,对于w=2=d的实施例的第三例的以上第一算法的主循环中组运算的次数是3n/8(如以前那样,不包括预先计算和近于在线重新编码的花费)。
预先计算的点数是12,比起以上提出的变例中的数目8这要大得多,对于从160比特到256比特的输入,算法的吞吐量没有很大的提高。对于更详细的讨论和对于相应的见证,可以参考H.Cohe,“Analysisof the flexible window powering algorithm(对灵活窗口乘幂算法的分析)”,的第3.3和4.4节,它的最新拷贝在http://www.math.u-bordeaux.fr/~cohen/可得到。
实施例的第四例单次标量乘法在相加地写入的Abelian组G中单个标量乘法,与以上的实施例的第一例(单个指数)相比较,是通过明显的替代[以<-->标量乘法中的中性元素“0”,“加倍”,“求和”,来代替取幂中的中性元素“1”,“平方”,“乘积”]而得到的,并被显示在下面的近于在线重新编码的实施例的第四例的意义中,作为一个算法,其中给定以下参数-Abelian组G的基本元素g,-具有n比特的整数e,-窗口宽度w,以及-块或部分的宽度L>>w;输出(单次)标量乘法e·g步骤1.x←0步骤2. 则e=Σk=0r-1ek2kLfor0≤ek<2L]]>步骤3.对于k=r-1直到0,进行{(a)重新编码(ek)→ek=Σj=0Lbj2j]]>(b)如果bL≠0则x←x+bLg(c)对于j=L-1直到0,进行{(i)x←2x(ii)x←x+bjg}}步骤4.返回x类似于实施例的第一例,应当指出,在L比特后可能发生的是,以上的算法在一行中实行两组乘法,而不是仅仅一组乘法。这是如果在一个块ei(=一个指数部分ei)代表非偶数时和如果在下一个块ei+1(=下一个指数部分ei+1)的重新编码长于一个系数(bL不等于零)时发生的。
实施例的第五例多次标量乘法以上根据实施例的第四例的算法(单次标量乘法)可变换成多次(标量)乘法方法。这里,在相加地写入的Abelian组G中多次标量乘法,与以上的实施例的第二例(多次取幂)相比较,是通过明显的替代[用<-->多次标量乘法中的中性元素“0”,“加倍”,“求和”,来取代多次取幂中的中性元素“1”,“平方”,“乘积”]得到的,并被显示在下面的近于在线重新编码的实施例的第五例的含义中如果给定组元素g1,…,gdεG和指数e1…,ed,其中d>1,以及要计算∑i=1dei·gi,则首先决定使用指数e1,…,ed·,的稀疏重新编码,然后使用“平方与乘法”循环首先,计算和存储所有的乘法c·gi,其中c是许可的正系数。然后把临时变量x设置为0εG。对于j=n,n-1,…,0,,首先把x加倍,以及对于i=1,…,d,把算子ei,j·gi加到加倍过的x,其中ei,j是在ei的重新编码中2j的系数。结束时,临时变量x包含所需结果。
这个方法也被称为快速乘法运算;正如在按照实施例的第四例的情形下,希望再次要保持良好的从右到左的重新编码的优点而不必使用太多的存储器。
以下的变例实行近乎在线的重新编码,也就是说,几乎是在快速的多次标量乘法运算期间或在快速多次标量乘法运算之后的不久,其中在算法中给定以下参数-Abelian组G的基本元素g1,…,gd,-每个至多具有n比特的整数e1,…,ed(d>1),-窗口宽度w,-块或部分宽度L>>w,以及-为系数组中所有的c的预先计算的乘数c·gi;输出多个标量乘积∑i=1dei’gi步骤1.x←0步骤2. 则ei=Σk=0r-1ei,k2kL,]]>对于0≤ei,k<2L和i=1,…,d步骤3.对于k=r-1直到0,进行{(a)对于i=1到d,进行{重新编码(ei,k)→ei,k=Σj=0Lbi,j2j]]>如果bi,L≠0则x←x+bi,Lgi}(b)对于j=L-1直到0,进行{(i)x←2x(ii)对于i=1到d,进行{如果bi,L≠0则x←x+bi,j·gi}步骤4.返回x作为本说明的最后部分,下面给出在本文中提到的数目、元素、指数、组、下标、系数、集、参数、标量、变量和数字的列表。
bi,j系数,bi,L分配给2的最高幂2L的系数,c许可的正的系数,C有限的整数集,
d来自组G的(基本或组)元素gi的数目,=被分配给(基本或组)元素gi的指数或标量ei的数目,e指数,尤其是在单次取幂的整数指数,或标量,尤其是在单次标量乘法中的整数标量,ei指数,尤其是在多次取幂的整数指数,或标量,尤其是在多次标量乘法中的整数标量,ei,k-1跟随在(指数或标量)块或(指数或标量)部分ei,k后面的(指数或标量)块或(指数或标量)部分,ei,k被划分的指数或标量ei的(指数或标量)块或(指数或标量)部分,g在单次取幂的情形下或在单次标量乘法的情形下的(基本或组)元素,gi在多次取幂的情形下或在多次标量乘法的情形下的(基本或组)元素,G组,尤其是Abelian组,i下标,j下标,尤其是求和下标,k变量,尤其是加下标的变量,L(指数或标量)块的宽度或(指数或标量)部分的宽度,尤其是(指数或标量)块的宽度或(指数或标量)部分的宽度的比特率,n最大比特率或最大比特长度,r指数或标量)块或(指数或标量)部分ei,k的数目,w参数,x临时变量。
权利要求
1.一种藉助在每种情况下的至少一个指数或标量(ei)对元素(gi)进行多次取幂(∏i=1dgiei)或多次标量乘法(∑i=1dei·gi)的方法,该至少一个指数或标量(ei)尤其是一个在每种情况下具有最大比特率(n)或比特长度的整数指数或标量,该方法尤其是藉助于至少一个指数或标量(e)对元素(g)进行取幂(ge)或标量乘法(e’g),该至少一个指数或标量(ei)尤其是一个在每种情况下具有最大比特率(n)或比特长度的整数指数或标量,该元素(gi’,g)从至少一个组(G)例如Abelian组得出,它-在(多次)取幂的情形下,尤其是以相乘来表示,以及-在(多次)标量乘法的情形下,尤其是以相加来表示,其特征在于以下的方法步骤[a.1]计算和存储或[a.2]从至少一个存储器检索所有的幂(gic)或所有的乘法(c·gi),其中c是许可的正系数;[b]把每个指数或标量(ei)划分成多个块或多个具有由特定的比特率(L)所规定的块或部分的宽度的部分(ei,k),;以及[c]分别对这些块或部分(ei,k)进行重新编码。
2.如权利要求1中要求的方法,其特征在于,指数或标量(ei)以划分的形式ei=∑k=0rei,k2kL,来表示,其中-r被规定为块或部分(ei,k)的数目,尤其是块或部分的宽度与最大比特率(n)和比特率(L)的整数商,以及-0≤ei,k<2L。
3.如权利要求1或2中要求的方法,其特征在于,块或部分的宽度(L)被选择为-明显地大于参数(w),该参数相应于在其中读出各个指数或标量(ei)的比特的窗口宽度,尤其是该宽度的上限,以及-明显地短于每个指数或标量(ei)的最大长度,尤其是在方法步骤[a.1]和/或[a.2]以前所选择的。
4.如权利要求1到3的至少一项中要求的方法,其特征在于,在(多次)取幂的情形下,对于每个指数(ei)的各块或各部分(ei,k)的每一个,对块或部分(ei,k)重新编码的方法步骤[c]被划分成以下各子步骤[c.1]把临时变量(x)设置为标准化数值,尤其是组(G)中的元素的数值1,它相对于被分配给该组(G)的组运算是中性的;[c.2]把变量(k)连续地设置为数值r-1,r-2,...,0,其中对于变量(k)的每个数值k=r-1,r-2,...,0执行以下的子步骤[c.2.i]对于下标(i)的每个值i=1,2,...,d,其中d被规定为元素(gi)的数目,特别地取决于被分配给元素(gi)的指数(ei)的数目[c.2.i.a]把块或部分(ei)重新编码以作为由在每种情况下根据至少一个有限的整数集(C)导出的至少一个系数(bi,j)加权的2的幂(2j)的和值(∑j=0Lbi,j2j);[c.2.i.b]如果被分配给2的最高乘幂(2L)的系数bi,L不趋零,则把临时变量(x)设置为临时变量(x)与元件(gi)的乘幂(gibi,L)的乘积,该元素是被分配给2的最高乘幂(2L)的系数(bi,L);[c.2.ii]对于下标(j)的每个数值j=L-1,L-2,...,0[c.2.ii.a]将临时变量(x)进行平方;[c.2.ii.b]对于下标(i)的每个数值i=1,2,...,d如果被分配给2的乘幂(2j)的(bi,j)不趋零,则把临时变量(x)设置为临时变量(x)与被分配给2的幂(2j)的各个系数(bi,j)的元素gi的幂(gibi,j)的乘积;以及在分别对块或部分(ei,k)重新编码的方法步骤[c]后,返回临时变量(x)。
5.如权利要求1到3的至少一项中要求的方法,其特征在于,在(多次)标量乘法的情形下,对块或部分(ei,k)重新编码的方法步骤[c]能被划分成用于每个指数(ei)的各个单独的块或各个单独的部分(ei,k)的以下的子步骤[c.1]把暂时变量(x)设置为标准化数值,尤其是组(G)的元素的数值0,它相对于被分配给组(G)的组运算是中性的;[c.2]相继地把变量(k)设置为数值r-1,r-2,...,0,其中对于变量(k)的每个数值k=r-1,r-2,...,0执行以下的子步骤[c.2.i]对于下标(i)的每个值i=1,2,...,d,其中d被定义为元素(gi)的数目,特别地取决于被分配给元素(gi)的指数(ei)的数目[c.2.i.a]把块或部分(ei)重新编码为由在每种情况下中由至少一个有限的整数集(C)导出的至少一个系数(bi,j)加权的2的乘幂(2j)的和值(∑j=0Lbi,j2j);[c.2.i.b]如果被分配给2的最高幂(2L)的系数(bi,L)不趋零,则把临时变量(x)设置为临时变量(x)与被分配给2的最高幂(2L)的系数(bi,L)的元素(gi)的乘积(bi,L·gi)的和值;[c.2.ii]对于下标(j)的每个数值j=L-1,L-2,...,0[c.2.ii.a]将临时变量(x)进行平方;[c.2.ii.b]对于下标(i)的每个数值i=1,2,...,d如果被分配给2的幂(2j)的(bi,j)不趋零,则把临时变量(x)设置为临时变量(x)与被分配给2的幂(2j)的各个系数(bi,j)的元素(gi)的乘积(bi,L·gi)的和值;以及在分别对块或部分(ei,k)的重新编码的方法步骤[c]后,返回临时变量(x)。
6.如权利要求1到5的至少一项中要求的方法,其特征在于,-块的重新编码,或部分(ei,k)的重新编码被使用一次,以及-其中存储重新编码的块或重新编码的部分(ei,k)的存储器单元被使用来对下一个块或下一个部分(ei,k-1)重新编码。
7.如权利要求1到6的至少一项中要求的方法,其特征在于,该方法在被分配给特别是至少一个芯片卡和/或特别是至少一个智能卡的至少一个微处理器上实施。
8.按照如权利要求1到7的至少一项中所要求的方法而工作的微处理器。
9.具有如权利要求8中要求的至少一个微处理器的设备,特别是芯片卡和/或特别是智能卡。
10.如权利要求1到7的至少一项中要求的方法,和/或如权利要求8中要求的至少一个微处理器,和/或如权利要求9中要求的至少一个设备,特别是至少一个芯片卡和/或特别是至少一个智能卡,在至少一个加密系统中,特别是在至少一个公共密钥加密系统中,在至少一个密钥交换系统中,或在至少一个签名系统中的使用。
全文摘要
为了进一步开发一种方法,该方法是一种藉助在每种情况下的至少一个指数或标量(e
文档编号G06F7/72GK1930547SQ200580006980
公开日2007年3月14日 申请日期2005年2月18日 优先权日2004年3月4日
发明者R·阿文茨 申请人:皇家飞利浦电子股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1