椭圆曲线变换装置、利用装置和利用系统 本申请以在日本申请的申请号为特愿平10-053204专利申请为基础,其内容在此作为参考。
本发明涉及作为信息保密技术的一种密码技术,特别涉及用椭圆曲线实现的加密·解密技术、数字署名·验证技术和键共有技术。
1.公开键密码
近年来,基于计算机技术和通信技术的数据通信正在广泛地普及起来,在这种数据通信技术中,使用秘密通信方式或数字署名方式。这里,所谓秘密通信方式是除特定的通信对方之外不透露通信内容的通信方式。所谓数字署名方式是对通信对方表示通信内容的正当性,同时证明发信者身份的通信方式。
这些秘密通信方式或数字署名方式中采用称之为公开键密码的密码方式,公开键密码是在通信对方多的时候容易管理每个通信对方不同的密码键的方式,是为与多个通信对方进行通信而必不可少的基本技术。在采用公开键密码的秘密通信中,虽然加密键和解密键不同,且解密键秘密,而加密键公开。
作为这种公开键密码的安全性的根据,是采用离散对数问题,在离散对数问题中,具代表性的有定义在有限体上的问题和定义在椭圆曲线上的问题。关于离散对数问题,在Neal Koblitz著的“数论和密码学教程”(“ACourse in Number theory and Cryptography”,Springer-Verlag,1987)一书中作了详细描述。
2.椭圆曲线上的离散对数问题
以下来描述关于椭圆曲线上的离散对数问题。
所谓椭圆曲线上地离散对数问题是在把E(GF(p))为在有限体GF(p)上定义的椭圆曲线,并在用大的素数除椭圆曲线E的位数的情况下,把包含在椭圆曲线E内的元G取为基点。这时,对于包含在椭圆曲线E内的分配的元Y,如果存在Y=x*G(式1)的整数x,问题就是把x求出来。
这里,p是素数,GF(p)是具有p个元的有限体。在本说明书中,符号*表示把包含在椭圆曲线内的元多次相加的运算,如下式所示,x*G表示对包含在椭圆曲线内的元G进行x次相加。
x*G=G+G+G+…+G
把离散对数问题作为公开键密码的安全性的根据的原因是对于具有多元的有限体GF(p)来说,上述的问题是极为困难的。
3.应用椭圆曲线上的离散对数问题的エルガマル署名
以下用图1来说明根据应用上述椭圆曲线上的离散对数问题的エルガマル署名的数字署名方式。
该图是表示根据上述エルガマル署名的数字署名方式步骤的顺序图。
用网络把用户A110、管理中心120、用户B130连接起来。
把p取为素数,设有限体GF(p)上的椭圆曲线为E,把E的基点取为G,E的位数设为q。即q是满足(式2)q*G=0的最小正整数。
把x坐标、y坐标都为∞的点(∞,∞,)称为无限远点,用0来表示。在把椭圆曲线看作群时,这个无限远点0的作用是加法运算中的「零元」。
(1)由管理中心120进行的公开键的生成
管理中心120根据式3用预先通知的用户A110的秘密键xA生成用户A110的公开键YA(步骤S141~S142)。
(式3)YA=xA*G
此后,管理中心120把素数p、椭圆曲线E和基点G公开为系统参数,并对其他用户B130公开用户A110的公开键YA(步骤S143~S144)。
(2)由用户A110进行的署名生成
用户A110生成随机数k(步骤S145)。
然后,用户A110计算(式4)R1=(rx,ry)=k*G(步骤S146),并由(式5)s×k=m+rx×xA(modq)计算s(步骤S147)。这里,m是用户A110向用户B130发送的信息。
另外,用户A110把所得到的(R1、s)作为署名,并与信息m一起发送给用户B130(步骤S148)。
(3)由用户B130进行的署名验证
用户B130通过判定(式6)s*R1=m*G+rx*YA是否成立来确认发送者即用户A110的身份(步骤S149)。这可以由(式7)弄清楚。
(式7)s*R1={((m+rx×xA)/k)×k}*G
=(m=rx×xA)*G
=m*G+(rx×xA)*G
=m*G+rx*YA
4.椭圆曲线上的点的加法运算、2倍运算的计算量
在应用上述所示的椭圆曲线上的离散对数问题的エルガマル署名的数字署名方式中的公开键的生成、署名生成、署名验证的各步骤中,进行椭圆曲线上的点的幂倍运算的计算。例如,式3所示的「xA*G 」、式4所示的「k*G」、式6所示的「s*R1」、「m*G」、「rx*YA」都是椭圆曲线上的点的幂倍运算。
关于椭圆曲线的运算公式在“Efficient elliptic curve exponentiation”(Miyaji,Ono,与Cohen著,Advances in cryptology_proceedings of ICICS′97,Lecturenotes in computer science,1997,Springer_verlag,282-290.)一文中作了详细说明。
以下来说明椭圆曲线的运算公式。
把椭圆曲线的方程式设为y^2=x^3+a×x+b,设任意点P的坐标为(x1,y1),设任意点Q的坐标为(x2,y2)。这里,把由R=P+Q决定的点R的坐标设为(x3,y3)。
在本说明书中,符号^表示幂运算,例如,2^3表示2×2×2。
在P≠Q的情况下,R=P+Q就成为加法运算,加法运算的公式表示如下。
x3={(y2-y1)/(x2-x1)}^2-x1-x2
y3={(y2-y1)/(x2-x1)}(x1-x3)-y1
在P=Q情况下,R=P+Q=P+P=2×P,R=P+Q就成为2倍运算,2倍运算的公式表示如下。
x3={(3x1^2+a)/2y1}^2-2x1
y3={(3x1^2+a)/2y1}(x1-x3)-y1
上述的运算是在定义椭圆曲线的有限体上的运算。
如上所述,在2维坐标即仿射坐标中,也就是在前述的坐标中,在进行椭圆曲线上的加法运算的情况下,椭圆曲线上的一次加法运算之后,就必须作一次有限体上的倒数计算,一般,与有限体上的乘法运算相比,有限体上的倒数计算的计算量要有其计算量的10倍左右。
因此,为了削减计算量,就采用了称之为射影坐标的3维坐标。
所谓射影坐标是由3维X、Y、Z构成的坐标。
对于坐标(X,Y,Z)和坐标(X′,Y′,Z′),如果存在某数n,并有X′=nX、Y′=nY,Z′=nZ的关系,那么
(X,Y,Z)=(X′,Y′,Z′)
仿射坐标(x,y)和射影坐标(X,Y,Z)按照
(x,y)→(x,y,1)
(X,Y,Z)→(X/Y,Y/Z)(Z≠0时)的关系相互对应。
这里,符号→使用如下所示的含义。即:在集合S2的一个元对应于集合S1的任意元时,表示为S1→S2。
以下,椭圆曲线的运算全都用射影坐标来进行。
下面来说明射影坐标上的椭圆曲线的加法计算公式、2倍公式。当然,这些公式是与前述的仿射坐标中的加法公式、2倍公式相匹配的。
幂倍的运算可以由椭圆曲线上的点的加法运算、2倍运算的重复来实现。虽然该幂倍运算中的加法运算的计算量不依赖于椭圆曲线的参数,但是,2倍运算的计算量取决于椭圆曲线的参数。
这里,把p取为160位的素数,把有限体GF(p)上的椭圆曲线设为
E:y^2=x^3+ax+b
当用P=(X1,Y1,Z1)、Q=(X2,Y2,Z2)分别表示椭圆曲线E上的点P、Q时,R=(X3,Y3,Z3)=P+Q求解如下。
(ⅰ)P≠Q的情况
这时,就成为加法运算。
(步骤1-1)中间值的计算计算如下。
(式8)U1=X1×Z2^2
(式9)U2=X2×Z1^2
(式10)S1=Y1×Z2^3
(式11)S2=Y2×Z1^3
(式12)H=U2-U1
(式13)r=S2-S1
(步骤1-2)R=(X3,Y3,Z3)的计算
计算如下
(式14)X3=H^3-2×U1×H^2+r^2
(式15)Y3=S1×H^3+r×(U1×H^2-X3)
(式16)Z3=Z1×Z2×H
(ⅱ)P=Q的情况(即:R=2P)
这时,就成为2倍运算。
(步骤2-1)中间值的计算
计算如下。
(式17)S=4×X1×Y1^2
(式18)M=3×X1^2+a×Z1^4
(式19)T=2×S+M^2
(步骤2-2)R=(Y3,Y3,Z3)的计算
计算如下。
(式20)X3=T
(式21)Y3=8Y1^4+M×(S-T)
(式22)Z3=2×Y1×Z1
然后,来说明进行椭圆曲线的加法运算、2倍运算情况下的计算量。这里,用1Mul表示有限体GF(p)上的一次乘法运算的计算量,用1Sq表示一次2次方运算的计算量。在一般的微机中,1Sq≈0.8Mul。
按照上述的例子,对于式8~式16中乘法运算的次数和2次方运算的次数进行计数,就得到表示于P≠Q的情况的椭圆曲线上的加法运算的计算量,结果是12Mul+4Sq。式8、9、10、11、14、15、16中的加法运算的计算量分别是1Mul+1Sq、1Mul+1Sq、2Mul、2Mul、2Mul+2Sq、2Mul、2Mul,所以得到上面的结果。
按照上述的例子,对于式17~式22中乘法运算的次数和2次方运算的次数进行计数,就得到表示于P=Q的情况的椭圆曲线上的2倍运算的计算量,结果是4Mul+6Sq。式17、18、19、21、22中的2倍运算的计算量分别是1Mul+1Sq、1Mul+3Sq、1Sq、1Mul+1Sq、1Mul,所以得到上面的结果。
在上述的次数的计数中,例如,由于能够对式14的H^3展开为H^3=H^2×H,所以,H^3的计算量就为1Mul+1Sq;由于能够对式18的Z1^4展开为Z1^4=(Z1^2)^2,所以,Z1^4的计算量就为2Sq。
对于式14的H^2,由于在前述的H^3计算过程中算出了H^2,所以就不再次对H^2的计算量进行计数。
在对乘法运算的次数进行计数时,对某值乘以一个小的值的乘法运算的次数不进行计数,其原因说明如下。
所谓小的值是在式8~式22中成为乘法运算对象的小的固定值,具体地说,是2、3、4、8之类的值。这些值最多可以用4位2进制数来表示。另一方面,通常其他变量具有160位的值。
一般,在微处理器中,乘数和被乘数的乘法运算是被乘数的移位和重复进行加法运算。也就是说,如果用2进制数表示的乘数的每位是1,就把被乘数移位,以便使用2进制表示的被乘数的最下位与该位存在的位置相一致,从而得到一个比特列。对于乘数的全部位来说,把这样得到的至少一个比特列全都加起来。
例如:在160位的乘数和160位的被乘数的乘法运算中,把160位的被乘数移位160次,得到160个比特列,并把得到的160个比特列加起来。另一方面,在4位的乘数和160位的被乘数的乘法运算中,把160位的被乘数移位4次,得到4个比特列,并把4个比特列加起来。
由于按照上述的方法进行乘法运算,所以,在某值乘以一个小的值的情况下,前述的重复次数就少,因此,认为其计算量少,而不对乘法运算进行计数。
如上所述,在进行椭圆曲线的2倍运算的情况下,在式18中包含有椭圆曲线的参数a,如果采用一个小的值作为该参数a的值,椭圆曲线上的2倍运算的计算量可以削减1Mul,而成为3Mul+6Sq。关于加法运算,即使改变椭圆曲线的参数,计算量也不变。
5.适宜于密码的椭圆曲线的选择
下面来说明适宜于密码的椭圆曲线的选择方法,其详细内容记载于「IEEE P1363 Working draft」(1997年2月6日,IEEE发行)中。
重复如下的步骤就能得到适宜于密码的椭圆曲线。
(步骤1)任意椭圆曲线的选择
选择有限体GF(p)上的任意参数a、b,其中a、b满足式23,p是素数。
(式23)4×a^3+27×b^2≠0(modp)
用所选出的a、b来设椭圆曲线为E:y^2=x^3+a×x+b
(步骤2)判定是否是适宜于密码的椭圆曲线
计算椭圆曲线E的元的个数#E(GF(p))。
(条件1)用大的素数除#E(GF(p))
(条件2)在#E(GF(p))-(p+1)≠0,-1的情况下,采用椭圆曲线E。在不满足条件1或条件2的情况下,废弃椭圆曲线E,返回步骤1,再次重复任意椭圆曲线的选择和判定。
6.现有技术存在的问题
如上述的说明,在把小的值固定地选择作为椭圆曲线的参数a时,在椭圆曲线的乘方运算中可以削减计算量,但是,预先固定地取参数则难以选择适宜于密码的安全的椭圆曲线。
反之,用上述说明的椭圆曲线的选择方法来选择适宜于密码的安全的椭圆曲线时,不限定于可以选择小的值作为椭圆曲线的参数a,但是不能削减计算量。
这样,为了选择适宜于密码的安全的椭圆曲线,而又要削减计算量,两者相互矛盾。
本发明的目的是为解决上述问题而提供把任意选择的椭圆曲线作为适宜于密码的安全的椭圆曲线变换为具有与该椭圆曲线等价的安全性且能够削减计算量的椭圆曲线的椭圆曲线变换装置、椭圆曲线变换方法和记录有椭圆曲线变换程序的记录媒体。
本发明的另外的目的是提供一种可以安全高速地进行运算的密码装置、解码装置、数字署名装置、数字署名验证装置、键共有装置等的利用装置以及由所述利用装置和所述椭圆曲线变换装置构成的利用系统。
如果把每个权利要求视为一个方案,那么,实现上述目的的椭圆曲线变换装置是方案1所限定的装置。
按照这样的构成,可以提供具有与随机构成的椭圆曲线相同的安全性、且在利用装置中能够高速进行运算的椭圆曲线,其实用价值非常大。
这里,也可以是方案2所限定的装置。
在利用装置中使用由这种椭圆曲线变换装置变换来的椭圆曲线时,与变换前的椭圆曲线的参数a取近于160位的值的情况相比较,在进行椭圆曲线上的2倍运算中,可以削减1Mul的计算量。
这里,也可以是方案3所限定的装置。
在利用装置中使用由这种椭圆曲线变换装置变换来的椭圆曲线时,与现有技术相比较,在进行椭圆曲线上的2倍运算中,可以削减2Sq的计算量。
实现上述目的的利用装置是方案5所限定的装置。
按照这样的构成,可以利用具有与随机构成的椭圆曲线相同的安全性、且在利用装置中能够高速进行运算的椭圆曲线,其实用价值非常大。
这里,也可以是方案6所限定的装置。
按照这样的构成,由于使用变换来的椭圆曲线,与把变换前的椭圆曲线的参数a取近于160位的情况相比较,在椭圆曲线上的2倍运算中,可以削减1Mul的计算量。
这里,也可以是方案7所限定的装置。
按照这样的构成,由于使用变换来的椭圆曲线,与现有技术相比较,在椭圆曲线上的2倍运算中,可以削减2Sq的计算量。
结合说明本发明的实施例的附图所作的如下的说明,将会更清楚本发明的这些和其他的目的、优点和特点。
附图简要说明
图1表示按照エルガマル署名的数字署名方式的步骤的顺序图。
图2是按照本发明的一个实施例的椭圆曲线变换装置的方框图。
图3是图2所示的椭圆曲线变换装置所使用的函数T(i)的说明表。
图4是图2所示的椭圆曲线变换装置的动作流程图。
图5是图2所示的椭圆曲线变换装置的变换系数取得部的动作流程图。
图6是图2所示的椭圆曲线变换装置的变换椭圆曲线算出部的动作流程图。
图7是表示适用图2所示的椭圆曲线变换装置的键共有系统的动作步骤的顺序图。
用附图来说明按照本发明的一个实施例的椭圆曲线变换装置200。
1.椭圆曲线变换装置200的构成
如图2所示,椭圆曲线变换装置200由参数接收部210、变换系数取得部220、变换椭圆曲线算出部230、参数发送部240构成。
(参数接收部210)
参数接收部210从外部装置接收椭圆曲线的参数a、b、所述椭圆曲线上的元G和素数p。其中p是160位的素数。
在所述外部装置中,包含使用公开键密码的密码装置、解码装置、数字署名装置、数字署名验证装置、键共有装置等。所述外部装置使用椭圆曲线上的离散对数问题作为公开键密码的安全性的根据,并具有所述椭圆曲线。
这里,用E:y^2=x^3+ax+b表示有限体GF(p)上的任意构成的所述椭圆曲线,所述元G用G=(x0,y0)表示。
(变换系数取得部220)
如图3所示,变换系数取得部220具有函数T(i),在i=0、1、2、3、4时,函数T(i)分别具有-3、1、-1、2、-2的值。在i=5、6、7、8、9、10、…时,函数T(i)分别具有4、-4、5、-5、6、-6、…的值。
变换系数取得部220从i=0开始把i值每次加1,满足
(式24)-2^31+1≤T(i)≤2^31-1
并计算出使(式25)T(i)^4×a(modp)成立的变换系数t,即有限体GF(p)上的元的变换系数t。
这里,式24表示取T(i)为32位以下。
在i=0时,函数T(i)具有-3的值,变换系数取得部220从i=0开始,把i的值每次加1,由于参照函数T(i)的值,所以最初参照-3的值。
除在i=0时函数T(i)具有-3的值之外,由于函数T(i)具有按绝对值顺序从小到大的值,所以可以按顺序从绝对值小的值进行参照。
(变换椭圆曲线算出部230)
变换椭圆曲线算出部230对有限体GF(p)上构成的变换椭圆曲线Et:y′^2=x′^3+a′×x+b′的参数a′、b′分别计算如下。
(式26)a′=a×t^4
(式27)b′=b×t^6
变换椭圆曲线算出部230把对应于元G的变换椭圆曲线Et上的元Gt=(xt0,yt0)计算如下。
(式28)xt0=t^2×x0
(式29)yt0=t^3×y0
椭圆曲线E上的任意点被变换成为用上述那样生成的参数a′、b′决定的变换椭圆曲线Et上的一点。
(参数发送部240)
参数发送部240把前述计算出的变换椭圆曲线Et的参数a′、b′和元Gt(xt0,yt0)发送到所述外部装置。
2.椭圆曲线变换装置200的动作
(椭圆曲线变换装置200的全体的动作)
下面用图4所示的流程来说明椭圆曲线变换装置200的全体的动作。
参数接收部210从外部装置接受素数p、椭圆曲线E的参数a和b(步骤301),并接收所述椭圆曲线上的元G(步骤302)。接下来,变换系数取得部220算出变换系数t(步骤303),变换椭圆曲线算出部230算出在有限体GF(p)上构成的变换椭圆曲线Et的参数a′、b′以及对应于元G的变换椭圆曲线Et上的元Gt=(xt0,yt0)(步骤S304),参数发送部240向所述外部装置发送所计算出的变换椭圆曲线Et的参数a′、b′以及元Gt(xt0,yt0)(步骤S305)。
(变换系数取得部220的动作)
下面用图5所示的流程图来说明变换系数取得部220的动作。
变换系数取得部220把0值设定于i(步骤S311),然后,变换系数取得部220判定函数T(i)是否满足-2^31+1≤T(i)≤2^31-1,如果不满足该条件(步骤S312),就结束处理。如果满足该条件(步骤S312),就计算出使T(i)=t^4×a(modp)成立的变换系数t(步骤S313),并判定所计算出的变换系数t是否是有限体GF(p)上的元,如果是有限体GF(p)上的元(步骤S314),就结束处理。如果不是有限体GF(p)上的元(步骤S314),就把i加1(步骤S315),再次返回步骤S312进行控制。
(变换椭圆曲线算出部230的动作)
下面用图6所示的流程图来说明变换椭圆曲线算出部230的动作。
变换椭圆曲线算出部230计算出有限体GF(p)上构成的变换椭圆曲线Et的参数a′=a×t^4(步骤S321)、参数b′=b×t^6(步骤S322)。
变换椭圆曲线算出部230作为对应于元G的变换椭圆曲线Et上的元Gt=(xt0,yt0)算出xt0=t^2×x0(步骤S323),算出yt0=t^3×y0(步骤S324)。
3.变换椭圆曲线Et与椭圆曲线E是同型的证明
这里,证明变换椭圆曲线Et:y′^2=x′^3+a×t^4×x′+b×t^6与椭圆曲线E:y^2=x^3+a×x+b是同型的。以下,椭圆曲线上的运算使用仿射坐标运算。
取椭圆曲线E上的任意点P(x0,y0),这时,因为点P是E上的点,所以,满足
(式30)y0^2=x0^3+a×x0+b。
通过这种变换,点P就被变换为点P′(x0′,y0′)=(t^2×x0,t^3×y0)。
把式30的两边乘以t^6,得到:
t^6×y0^2=t^6×x0^3+t^6×a×x0+t^6×b
变换后得到:
(t^3×y0)^2=(t^2×x0)^3+a×t^4×(t^2×x0)+b×t^6
再次变换,得到:
y0′^2=x0′^3+a×t^4×x0′+b×t^6
这表示点P′处在变换椭圆曲线Et上。
椭圆曲线E上的点向变换椭圆曲线Et上的点的变换用
(x,y)→(x′,y′)=(t^2×x,t^3×y)来表示。在这里,因为t≠0,所以,容易理解如下的从变换椭圆曲线Et上的点向椭圆曲线E上的点的变换就是上述变换的逆变换。
(x′,y′)→(x,y)=(x′/(t^2),y′/(t^3))
由上面的分析可知,椭圆曲线E上的点和变换椭圆曲线Et上的点是一一对应的。
下面,取椭圆曲线E上的任意不同的两点P=(x1,y1)、Q=(x2,y2),设R=P+Q,R的坐标为(x3,y3)。这时,如上所述,成为
x3={(y2-y1)/(x2-x1)}^2-x1-x2
y3={(y2-y1)/(x2-x1)}(x1-x3)-y1
然后通过本发明用的椭圆曲线变换,把椭圆曲线E上的点P、点Q、点R分别变换为变换椭圆曲线Et上的点P′、点Q′、点R′。点P′、点Q′、点R′的坐标分别为(x1′,y1′)、(x2′,y2′)、(x3′,y3′)。这时,下式成立
x1′=t^2×x1
y1′=t^3×y1
x2′=t^2×x2
y2′=t^3×y2
x3′=t^2×x3
y3′=t^3×y3
设R″=P′+Q′
其中,这里的加法运算表示变换椭圆曲线上的加法运算。
如果设R″的坐标为(x3″,y3″),那么
x3″={(y2′-y1′)/(x2′-x1′)}^2-x1′-x2′
y3″={(y2′-y1′)/(x2′-x1′)}(x1′-x3′)-y1′
这里,如果该式中的x1′、y1′、x2′、y2′分别如上所述用x1、y1、x2、y2来表示,那么
x3″={(t^3×y2-t^3×y1)/(t^2×x2-t^2×x1)}^2-t^2×x1-t^2×x2
={t(y2-y1)/(x2-x1)}^2-t^2×x1-t^2×x2
=t^2×{{(y2-y1)/(x2-x1)}^2-x1-x2}
=t^2×x3
=x3′
y3″={(t^3×y2-t^3×y1)/(t^2×x2-t^2×x1)}×(t^2×x1-t^2×x3)-t^3×y1
={t(y2-y1)/(x2-x1)}×t^2(x1-x3)-t^3×y1
=t^3×{{(y2-y1)/(x2-x1)}×(x1-x3)-y1}
=t^3×y3
=y3′
因此,可以理解R′和R″代表相等的点。
这样,即使在本变换中,也能保障椭圆曲线上的加法运算。
下面来描述Q=P的情况,即2倍公式。
与前面一样,对于椭圆曲线E上的任意点P,设R=P+P,按照用于本发明的椭圆曲线的变换,把椭圆曲线E上的点P、点R分别变换为变换椭圆曲线Et上的点P′、点R′。这里,点P、点R、点P′、点R′的坐标分别设为(x1,y1)、(x3,y3)、(x1′,y1′)、(x3′,y3′)。这时,下式成立:
x1′=t^2×x1
y1′=t^3×y1
x3′=t^2×x3
y3′=t^3×y3
而且,设R″=P′+P′。
其中,这里的2倍运算表示变换椭圆曲线Et上的2倍运算。
设点R″的坐标为(x3″,y3″),那么
x3″={(3x1′^2+a)/2y1′}^2-2x1′
y3″={(3x1′^2+a)/2y1′}(x1′-x3′)-y1′
这里,如上所述,x1′、y1′分别用x1、y1来表示,得到
x3″={{(t^2×3x1)^2+a}/(2×t^3×y1)}^2-2×t^2×x1
=t^2{(3x1^2+a)/2y1}^2-t^2×2x1
=t^2{{(3x1^2+a)/y1}^2-2x1}
=t^2×x3
={t(y2-y1)/(x2-x1)}^2-t^2×x1-t^2×x2
=t^2{{(y2-y1)/(x2-x1)}^2-x1-x2}
=t^2×x3
=x3′
y3″={{(t^2×3x1)^2+a}/(2×t^3×y1)}×(t^2×x1-t^2×x3)-t^3×y1
=t^3{(3x1^2+a)/2y1}(x1-x3)-t^3×y1
=t^3×{{(3x1^2+a)/2y1}(x1-x3)-y1}
=t^3×y3
=y3′
因此,可知R′和R″表示相等的点。
这样,即使在本变换中,椭圆曲线上的2倍运算也能得到保障。
按照上述的分析,可以证明椭圆曲线E和本发明中使用的变换所生成的变换椭圆曲线Et是同型的。
4.使用变换椭圆曲线Et的情况下的计算量的评价
按照上述的实施例,因为把变换椭圆曲线Et的参数a′取为32位以下,所以,式18的计算量为3Sq。因此,椭圆曲线上的加法运算的计算量就为12Mul+4Sq,2倍运算的计算量为3Mul+6Sq。这样,与椭圆曲线E的参数a是近于160位的值的情况相比较,在2倍运算中,可以削减1Mul的计算量。
如上所述,除在i=0时函数T(i)具有-3的值之外,函数T(i)具有按顺序从绝对值小的值到绝对值大的值。因为可以按顺序从绝对值小的值进行参照,所以,可以从计算量更少的变换椭圆曲线中按顺序选择合适的变换椭圆曲线。
按照上述的实施例,在变换椭圆曲线Et的参数a′为-3的情况下,式18可以变形为
M=3×X1^2+a′×Z1^4
=3×X1^2-3×Z1^4
=3×(X1+Z1^2)×(X1-Z1^2)。
在最后的式子中,计算量为1Mu+1Sq,因此,椭圆曲线上的加法运算的计算量为12Mul+4Sq,2倍运算的计算量为4Mul+4Sq。这样,与现有技术相比较,在2倍运算中,可以削减2Sq计算量。
如上所述,在i=0时函数T(i)具有-3的值,变换系数取得部220从i=0开始把i的值每次加1来参照函数T(i)值,所以,最初参照-3。因此,在2倍运算中,由于最初验证与原来比较可以削减2Sq的计算量的情况,所以,有可能能够一次就检测出最合适的变换椭圆曲线。
因此,使用本实施例的变换椭圆曲线时,能够使椭圆曲线上的计算高速化。
5.变形例
变换系数取得部220也可以像下面那样来决定变换系数t。变换系数取得部220设置有随机数发生器,所述随机数发生器随机地产生有限体GF(p)上的元u(u≠0)。然后,变换系数取得部220判断元u是否满足
(式31)-2^31+1≤u^4×a(modp)≤2^31-1。
在元u被判定为满足式31的情况下,就把元u用作变换系数t。在元u被判定为不满足式31的情况下,所述随机数发生器再次随机地产生元u,变换系数取得部220判断元u是否满足式31。
变换系数取得部220重复判定所述随机数发生器产生的元u是否满足式31,直到发现满足式31的元u为止。
变换系数取得部220也可以用(式32)来代替(式31)
(式32)u^4×a(modp)=3
6.椭圆曲线变换装置200的适用例
下面用图7所示的顺序图来说明适用于上述所说明的椭圆曲线变换装置200的键共有系统。
用网络把用户A450、管理中心460和用户B470连接起来。
(1)由管理中心460进行的椭圆曲线的选择
管理中心460选择素数p,选择有限体GF(p)上的椭圆曲线E,并把E的基点取为G,把E的位数取为q(步骤S411)。其中q是满足(式2)q*G=0的最小的正整数。
这里,E:y^2=x^3+a×x+b
G=(x0,y0)
接下来,管理中心460向椭圆曲线变换装置200发送p、E、G(步骤S412)。
(2)由椭圆曲线变换装置200进行的变换椭圆曲线的生成
椭圆曲线变换装置200计算出变换椭圆曲线Et,并计算出元Gt(步骤S421)。
这里,Et:y′^2=x′^3+a′×x′+b′
a′=a×t^4
b′=b×t^6
Gt=(xt0,yt0)
xt0=t^2×x0
yt0=t^3×y0
接下来,椭圆曲线变换装置200向管理中心460发送Et、Gt(步骤S422)。
管理中心460再向各用户发送p、Et、Gt(步骤S413)。
(3)由用户进行的秘密键的设定和公开键的生成
用户A450设定秘密键xA(步骤S401),用户B470设定秘密键xB(步骤S431)。
用户A450用下式计算出公开键YA(步骤S402),并向用户B470发送公开键YA(步骤S403)。
YA=xA*Gt
用户B470用下式计算出公开键YB(步骤S432),并向用户A450发送公开键YB(步骤S433)。
YB=xB*Gt
(4)由各用户进行的共有键的生成
用户A450用xA*YB算出共有键(步骤S404),用户B3470用xB*YA算出共有键(步骤S434)。
这里,由用户A450算出的共有键xA*YB可以变形为
xA*YB=(xA×xB)*Gt
由用户B470算出的共有键xB*YA可以变形为
xB*YA=(xB×xA)*Gt
=(xA×xB)*Gt
因此,可以知道用户A450算出的共有键xA*YB和用户B470算出的共有键xB*YA是相同的。
7.其他变形例
也可以把别的实施例之一作为上述所示的椭圆曲线变换方法。也可以把所述椭圆曲线变换方法作为包含计算机执行的椭圆曲线变换程序的计算机可读的记录媒体。还可以经通信线路传送所述椭圆曲线变换程序。
也可以把上述所说明的椭圆曲线变换装置适用于密码装置、解码装置、或由密码装置和解码装置构成的密码系统。
也可以把上述所说明的椭圆曲线变换装置适用于数字署名装置、数字署名验证装置、或由数字署名装置和数字署名验证装置构成的数字署名系统。
密码装置、解码装置、数字署名装置、数字署名验证装置或键共有装置也可以预先存储由椭圆曲线变换装置算出的椭圆曲线的参数a′、b′和元Gt,并用所存储的椭圆曲线的参数a′、b′和元Gt来进行加密、解密、数字署名、数字署名验证或键共有。
也可以把上述所示的实施例及其多个变形例组合起来。
虽然上面己经参照附图以实施例的方式充分说明了本发明,应注意到各种变化和改型对于所属领域的普通技术人员来说是显而易见的。因此,这些变化和改型都应包含于本发明之中,除非它们偏离本发明的宗旨。