Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
JP4543143B2 - 楕円曲線暗号装置、楕円曲線暗号演算方法 - Google Patents
[go: Go Back, main page]

JP4543143B2 - 楕円曲線暗号装置、楕円曲線暗号演算方法 - Google Patents

楕円曲線暗号装置、楕円曲線暗号演算方法 Download PDF

Info

Publication number
JP4543143B2
JP4543143B2 JP2002342387A JP2002342387A JP4543143B2 JP 4543143 B2 JP4543143 B2 JP 4543143B2 JP 2002342387 A JP2002342387 A JP 2002342387A JP 2002342387 A JP2002342387 A JP 2002342387A JP 4543143 B2 JP4543143 B2 JP 4543143B2
Authority
JP
Japan
Prior art keywords
register
stored
elliptic
point
multiplication
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
Application number
JP2002342387A
Other languages
English (en)
Other versions
JP2004177582A (ja
Inventor
哲也 伊豆
剛 高木
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2002342387A priority Critical patent/JP4543143B2/ja
Publication of JP2004177582A publication Critical patent/JP2004177582A/ja
Application granted granted Critical
Publication of JP4543143B2 publication Critical patent/JP4543143B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Description

【0001】
【発明の属する技術分野】
本発明は、楕円曲線暗号装置、楕円曲線暗号演算方法及び楕円曲線暗号プログラムに関する。
【0002】
【従来の技術】
楕円曲線暗号は公開鍵暗号の1つであり、文書の暗号復号化、署名、認証などの用途に使用される。
【0003】
楕円曲線暗号はECES(Elliptic Curves Encryption Standard)暗号、ECAES(Elliptic CurvesAdvanced Encryption Standard)暗号、ECDSA(Elliptic Curves Digital SignatureAlgorithm)署名、ECDH(Elliptic Curves Diffie-Hellmmn)秘密共有といった、いくつかの暗号プリミティブから構成されているが、点のスカラー倍算と呼ばれる演算はすべての暗号プリミティブに共通して使用され、かつ暗号処理の中心となるものである。このことから、楕円曲線暗号におけるスカラー倍演算の高速化を実現する技術は必要不可欠となっている。
【0004】
楕円曲線暗号の例としてECES暗号プリミティブを説明する。送信者Aは秘密鍵s(sは整数)を持ち、受信者Bが秘密鍵t(tは整数)を持つ場合に、楕円曲線Eと、楕円曲線E上に設定されるベースポイントP(x,y)と、公開鍵s×P(送信者Aの秘密鍵sとベースポイントPとのスカラー倍算)と、公開鍵t×P(送信者Bの秘密鍵tとベースポイントPとのスカラー倍算)があらかじめ公開されている。このとき送信者Aは、自分の秘密鍵sと、受信者Bの公開鍵t×Pとのスカラー倍算s×(t×P)を計算し、そのx座標のビット表現を求め、このビット表現とメッセージのビット表現との間でビット対応のEOR演算を施すことで、メッセージmに対する暗号文Cを生成し、それを受信者Bに送信する。受信者Bは、自分の秘密鍵tと、送信者Aの公開鍵s×Pとのスカラー倍算t×(s×P)を計算し、そのx座標のビット表現を求める。そして、”s×(t×P)=t×(s×P)”という関係式が成立することを考慮して、そのビット表現と暗号文Cのビット表現との間でビット対応のEOR演算を施すことで、暗号文Cを復号し、メッセージmを得る。このようにして、ECES暗号と呼ばれる楕円曲線暗号のプリミティブでは、スカラー倍演算を用いて暗号・復号処理を行う。
【0005】
ここで、pが5以上の素数、mを1以上の整数とすると、要素数p^m(^:べき乗を表す)の有限体GF(p^m)上のWeierstrass型楕円曲線は、方程式
E:y^2=x^3+a×x+b
を満たす点(x,y)の集合に、無限遠点と呼ばれる点∞を加えた集合である。無限遠点∞を0と表すこともある。ここでa,b,x,yはGF(p^m)の要素で、4×a^3+27×b^2≠0を満たす。楕円曲線上の点は(x,y)のような座標形式で表現できるが、無限遠点∞は(x,y)のような座標形式で表現することができない唯一の点である。
【0006】
PをGF(p^m)上のWeierstrass型楕円曲線E上の点とする。
以下のようにしてPの逆元−P定義する。
(1)P=∞ならば−P=∞
(2)P≠∞ならばP=(x,y)としたときに、−P=(x,−y)
P1,P2をWeierstrass型楕円曲線E上の2点とする。以下のようにしてP1とP2の和P3=P1+P2を定義する。
(1)P1=∞ならばP3=P2
(2)P2=∞ならばP3=P1
(3)P1=−P2ならばP3=∞
(4)P1≠−P2ならばP1=(x1,y1),P2=(x2,y2),P3=(x3,y3)としたときに、
x3=λ^2−x1−x2, y3=λ×(x1−x3)−y1,
ただし
λ=(y2−y1)/(x2−x1) :P1≠P2のとき
λ=(3×x1^2+a)/(2×y1) :P1=P2のとき
P1≠P2のときに、P1+P2を計算することを楕円加算ECADD、P1=P2のときにP1+P2=2×P1を計算することを楕円2倍算ECDBLと呼ぶ。
【0007】
楕円加算と楕円2倍算は、有限体GF(p^m)での加減算・乗算・平方算・逆元計算の組合せによって計算される。
図8及び図9は、楕円加算と楕円2倍算の説明図である。楕円加算は、図8に示されるように、楕円曲線上の点P1=(x1,y1)とP2=(x2,y2)とを結ぶ直線と楕円曲線との交点を、x軸で折り返した点P3=P1+P2=(x3,y3)として定義される。
【0008】
楕円2倍算は、図9に示されるように、楕円曲線上の点P1=(x1,y1)の接線と楕円曲線との交点を、x軸で折り返した点P4=2×P1=(x4,y4)として定義される。
【0009】
有限体上の楕円曲線Eと、曲線上の点Pと、整数(スカラーとも呼ぶ)dに対して、点d×P=P+P+…P(d個の和)を計算することをスカラー倍算という。スカラー倍算は、楕円加算と楕円2倍算と楕円2^k倍算との組合せによって実現することができる。
【0010】
楕円加算、楕円2倍算、楕円2^k倍算からなるスカラー倍算の計算時間は、GF(p^m)での乗算、平方算、逆元計算の計算時間の和によって見積もられることが多い。これは実際の楕円加算、楕円2倍算、楕円2^k倍算からなるスカラー倍算の計算が、GF(p^m)での加減算・乗算・平方算・逆元計算の組合せで計算され、多くの場合、加減算の計算時間はその他の計算時間に比べて無視できるほど短いからである。
【0011】
一般にGF(p^m)での逆元計算の計算時間は、乗算・平方算の計算時間に比べて非常に大きくなる。このため実際のスカラー倍算では、楕円曲線の点を表現する上でヤコビアン座標が使用されることがある。ヤコビアン座標では、点は(X,Y,Z)のような素体の3つの要素の組合せで表される。ただし(X,Y,Z)とr≠0であるGF(p^m)の要素rに対し(r^2×X:r^3×Y:r×Z)は同じ点と考える。楕円曲線はヤコビアン座標では、x=X/Z^2,y=Y/Z^3を代入して、
E:Y^2×Z=X^3+a×X×Z^2+b×Z^3
となる。ヤコビアン座標を用いると、楕円曲線上の点は(X,Y,Z)のような座標形式で表現することができる。無限遠点は∞=(0,1,0)となる。
【0012】
楕円曲線におけるスカラー倍計算は楕円加算(ECADD)と楕円2倍算(ECDBL)と楕円2^k倍算と呼ばれる演算の組合せで実現されるため、全体の計算時間はこれら演算の計算回数として評価される。スカラー倍算d×Pの計算は、dの2進展開
d=d[n−1]×2^(n−1)+d[n−2]×2^(n−2)+・・・+d[1]×2+d[0]
を利用して行われる。
【0013】
図10は、従来のスカラー倍算のアルゴリズムに基づくの演算プログラムを示す図である。
図10において、ステップS1で変数Q[0]の初期値をPとし、ステップS3で点Q[0]の楕円2倍算を実行し、演算結果をQ[0]に格納する。そしてd[i]==1であれば、ステップS5で、Q[0]と点Pの楕円加算を実行し、演算結果をQ[0]に格納する。ステップS3〜S5の処理をi=n−2から0まで実行する。楕円2倍算が連続して計算される場合には、楕円2^k倍算が適用可能である。
【0014】
スカラー倍算の演算を高速化する方法は、種々の検討が行われており、ヤコビアン座標を用いた楕円曲線暗号の演算方法については、例えば、特開2000−137436号公報に記載されている。
【0015】
【特許文献1】
特開2000−137436号公報(段落0021)
【0016】
【発明が解決しようとする課題】
楕円曲線暗号が現実社会において広く用いられるためには、処理時間及び実装上必要となるリソース(メモリ・回路量等)の低減が求められる。楕円曲線暗号ではスカラー倍算と呼ばれる演算が共通して使用され、暗号処理全体における比重も高いため、この部分の性能向上が暗号全体の性能向上に直結する。楕円曲線暗号処理においてスカラー倍算アルゴリズムの比重は高いため、さらなる高速化が望まれている。
【0017】
本発明の課題は、楕円曲線暗号のスカラー倍算を高速に計算することである。
【0018】
【課題を解決するための手段】
本発明は、整数dと楕円曲線上の点Pとのスカラー倍算を計算する楕円曲線暗号装置において、整数dの2進展開の係数d〔i〕(d[i]=0,1)が連続して0となる回数kの計算結果を記憶するレジスタと、楕円曲線上の点Pのヤコビアン座標をP(XP、YP、ZP)とし、i=0のときのW[i]、M[i]、S[i]、T[i]を、W[0]=a・ZP、M[0]=3・XP+W[0]、S[0]=4・XP・YP、T[0]=8・YP、とし、k=1の点のX、Y、Z座標を、X[1]=M[0]−2・S[0]、Y[1]=M[0]・(S[0]−X[1])−T[0]、Z[1]=2・YP・ZP、から算出し、(1)W[i]=2・T[i−1]・W[i−1]、(2)M[i]=3・X[i]+W[i]、(3)S[i]=4・X[i]・Y[i]
(4)T[i]=8・Y[i]、(5)X[i+1]=M[i]−2・S[i]、(6)Y[i+1]=M[i]・(S[i]−X[i−1])−T[i]、(7)Z[i+1]=2・Y[i]・Z[i]、前記レジスタに格納されている値kに基づいて変数iを1からk−1まで変化させて、上記(1)〜(7)の演算を行って楕円2倍算の演算を実行する際に、同じ種類の演算を並列に実行する演算手段とを備える。
【0019】
この発明によれば、楕円加算の同じ種類の演算で異なるデータに対する演算を並列に実行し、さらに楕円2^k倍算の同じ種類の演算で異なるデータに対する演算を並列に実行することにより楕円加算と楕円2^k倍算の計算時間を短縮することができる。これにより、スカラー倍算の計算時間を短縮できる。
【0020】
他の発明は、整数dと楕円曲線上の点Pとのスカラー倍算を計算する楕円曲線暗号装置において、楕円曲線上の点Pと点Qのヤコビアン座標における座標を、それぞれ(XP,YP,ZP)、(XQ,YQ,ZQ)としたときに、同じ種類の演算で異なるデータに対する演算を並列に実行できるように記述した楕円加算P+Qの演算プログラムを記憶する記憶手段と、前記記憶手段に記憶されている楕円加算P+Qの演算プログラムの同じ種類の演算を並列に実行して楕円加算P+Q=Rの点Rのヤコビアン座標(XR,YR,ZR)を計算する演算手段とを備える。
【0021】
この発明によれば、楕円加算の演算の中で同じ種類の演算を並列に実行することで楕円加算の計算時間を短縮できる。
他の発明は、整数dと楕円曲線上の点Pとのスカラー倍算を計算する楕円曲線暗号装置において、楕円曲線上の点Pのヤコビアン座標における座標を(XP,YP,ZP)としたときに、同じ種類の演算で異なるデータに対する演算を並列に実行できるように記述した楕円2倍算2×Pの演算プログラムを記憶する記憶手段と、前記記憶手段に記憶されている楕円2倍算2×Pの演算プログラムの同じ種類の演算を並列に実行して楕円2倍算2×P=Rの点Rのヤコビアン座標(XR,YR,ZR)を計算する演算手段とを備える。
【0022】
この発明によれば、楕円2倍算の演算の中で同じ種類の演算を並列に実行することで楕円2倍算の計算時間を短縮できる。
他の発明は、整数dと楕円曲線上の点Pとのスカラー倍算を計算する楕円曲線暗号装置において、楕円曲線上の点Pのヤコビアン座標における座標(XP,YP,ZP)としたときに、同じ種類の演算で異なるデータに対する演算を並列に実行できるように記述した楕円2^k(^:べき乗を表す,k=2以上の整数)倍算の演算プログラムを記憶する記憶手段と、前記記憶手段に記憶されている楕円2^k倍算の演算プログラムの同じ種類の演算を並列に実行して楕円2^k倍算により得られる点Rのヤコビアン座標(XR,YR,ZR)を計算する演算手段とを備える。
【0023】
この発明によれば、楕円2^k倍算の演算の中で同じ種類の演算を並列に実行することで楕円2^k倍算の計算時間を短縮できる。
他の発明は、整数dと楕円曲線上の点Pとのスカラー倍算を計算する楕円曲線暗号演算方法において、整数dの2進展開の係数d[d](d[i]=0,1)とし、係数d[i]が連続して「0」となる回数kを計算し、計算結果をレジスタに格納し、レジスタに格納されている、係数d[i]が連続して「0」となる回数kに基づいて楕円2^k(^:べき乗を表す,k=2以上の整数)倍算の同じ種類の演算を並列に実行する。
【0024】
この発明によれば、整数dの2進展開の係数d[i]が連続して「0」となる回数が2以上のとき、楕円2^k(k=2以上)倍算の同じ種類の演算を並列に実行することで、楕円2倍算を繰り返し実行する場合に比べて計算時間を短縮できる。
【0025】
上記の発明において、前記演算手段は、素体上の楕円曲線y=x+a・x+b(mod p)上の点Pのヤコビアン座標における座標(XP,YP,ZP)と、点Qの座標(XQ,YQ,ZQ)とに基づいて楕円加算の演算プログラムの同じ種類の演算を並列に実行するようにしても良い。
【0026】
また、前記演算手段は、素体上の楕円曲線y=x+a・x+b(mod p)上の点Pのヤコビアン座標における座標(XP,YP,ZP)に基づいて楕円2^k倍算の演算プログラムの同じ種類の演算を並列に実行するようにしても良い。
【0027】
このように構成することで、素体上の楕円曲線y=x+a・x+b(mod p)上の点の楕円加算または楕円2^k倍算の演算時間を短縮できる。
ヤコビアン座標を用いて楕円2^k倍算の計算を行う楕円曲線暗号装置において、整数dの2進展開の係数d[i](d[i]=0,1)としたときに、前記演算手段は、係数d[i]が連続して「0」となる回数kを計算し、係数d[i]が連続して「0」となる回数kに基づいて楕円2^k倍算の同じ種類の演算を並列に実行する。
【0028】
楕円加算、楕円2倍算、あるいは楕円2^k倍算の演算を行う演算手段が、演算命令及び複数のデータを記憶するレジスタ群と、演算器とを備え、前記レジスタ群に記憶された同じ種類の演算で異なるデータに対する演算を、前記演算器が並列に実行するようにしても良い。
【0029】
このように構成することで、レジスタ群に記憶された楕円加算、楕円2倍算または楕円2^k倍算の同じ種類の演算を並列に実行して演算時間を短縮することができる。
【0030】
なお、楕円加算、楕円2倍算、あるいは楕円2^k倍算の演算プログラムを記憶する記憶手段は、図1の記憶部17に対応し、演算手段は、図1の演算部12または演算器13に対応する。
【0031】
【発明の実施の形態】
以下、本発明の実施の形態を図面を参照しながら説明する。実施の形態の楕円曲線暗号装置は、例えば、楕円曲線暗号の専用の情報処理装置、パーソナルコンピュータ、ICカード等に内蔵されたICチップ、携帯電話機、携帯情報端末装置(PDAなど)、DVDプレーヤ等からなり、SIMD(Single Instruction stream Multiple Data stream)機能、すなわち同じ種類の命令で異なるデータに対する処理を並列に実行する機能を有している。
【0032】
以下の説明では、本発明に係る楕円曲線暗号演算方法を、pを5以上の素数とし、要素数pの有限体GF(p)(pは5以上の素数)上の楕円曲線に適用した場合について説明する。
【0033】
GF(p)上の楕円曲線Eは、以下の式で表せる。
E:y^2=x^3+a×x+b
ここでa,b,x,yはGF(p)の要素で、4×a^3+27×b^2≠0を満たす。
【0034】
図1は、本発明に係る楕円曲線暗号装置11の要部の構成を示す図である。実施の形態の楕円曲線暗号装置11の演算部(プロセッサ)12は、演算器13と、複数のレジスタからなるレジスタ群14とからなる。
【0035】
記憶部15には、後述する楕円曲線暗号の楕円加算、楕円2倍算、楕円2^k倍算等の演算プログラムが記憶される。
演算部12は、演算を実行する際に、複数のレジスタに格納されている同じ演算種別で異なるデータに対する演算を演算器13を使用して並列に実行する。
【0036】
次に、図2は、ヤコビアン座標を用いて楕円加算P+Qの同じ種類の演算を並列に実行する本発明の第1の実施の形態の演算プログラムを示す図である。
図2に示す楕円加算の演算プログラムは、ヤコビアン座標における点Pの座標XP,YP,ZP)と、点Qの座標(XQ,YQ,ZQ)を入力して、楕円加算P+Q=Rの点Rの座標(ZR,YR,ZR)を並列計算により計算するものである。
【0037】
(1)演算部(プロセッサ)12が、点PのX座標XPをレジスタ(またはメモリ)R1に設定する(図2のステップ(1))。
(2)演算部12が、点PのY座標YPをレジスタR2に設定する(図2のステップ(2))。
【0038】
(3)点PのZ座標ZPをレジスタR3に設定する(図2,ステップ(3))。
(4)点QのX座標XQをレジスタR4に設定する(図2,ステップ(4))。
【0039】
(5)点QのY座標YQをレジスタR5に設定する(図2、ステップ(5))。
(6)点QのZ座標ZQをレジスタR6に設定する(図2、ステップ(6))。
【0040】
(7)次に、レジスタR3の平方算、すなわち点PのZ座標ZPの2乗を求め、演算結果をレジスタR7に格納する。その演算と並列に、レジスタR6の平方算、すなわち点QのZ座標ZQの2乗を求め、演算結果をレジスタR8に格納する(図2、ステップ(7))。この場合、同じ平方算の演算であるので、レジスタR3の値を2乗する演算と、レジスタR6の値を2乗する演算を演算部12が並列に実行する。
【0041】
(8)次に、レジスタR4とレジスタR7を乗算し、乗算結果をレジスタR4に格納する。同時に、レジスタR1とレジスタR8を乗算し、乗算結果をレジスタR1に格納する(図2,ステップ(8))。すなわち、点QのX座標XQとレジスタR7に格納されている”ZP^2”を乗算し、乗算結果をレジスタR4に格納する。同時に、レジスタR1の点PのX座標XPとレジスタR8に格納されている”ZQ^2”を乗算し、乗算結果をレジスタR1に格納する。この場合も、同じ乗算の演算であるので、演算部12は、レジスタR4とR7の乗算と、レジスタR1とR8の乗算を並列に実行する。
【0042】
(9)次に、レジスタR2とレジスタR6を乗算し、乗算結果をレジスタR2に格納する。同時に、レジスタR3とレジスタR5を乗算し、乗算結果をレジスタR5に格納する(図2,ステップ(9))。すなわち、レジスタR2に格納されている点PのY座標YPと、レジスタR6に格納されている点QのZ座標ZQを乗算し、乗算結果をレジスタR2に格納する。同時に、レジスタR3に格納されている点PのZ座標ZPと、レジスタR5に格納されている点QのY座標YQを乗算し、乗算結果をレジスタR5に格納する。この場合も、同じ乗算の演算であるので、レジスタR2とR6の乗算と、レジスタR3とR5の乗算を演算部12が並列に実行する。
【0043】
(10)上記ステップ(9)で計算したレジスタR2の値と、ステップ(7)で計算したレジスタR8の”ZQ^2”を乗算し、乗算結果をレジスタR8に格納する。同時に、上記ステップ(9)で計算したレジスタR5の値と、ステップ(7)で計算したレジスタR7の”ZP^2”を乗算し、乗算結果をレジスタR7に格納する(図2,ステップ(10))。
【0044】
(11)次に、レジスタR4からレジスタR1を減算し、減算結果をレジスタR2に格納する。同時に、レジスタR7からレジスタR8を減算し、減算結果をレジスタR8に格納する(図2,ステップ(11))。すなわち、ステップ(8)で計算したレジスタR4の値から、ステップ(8)で計算したレジスタR1の値を減算し、結果をレジスタR2に格納する。同時に、ステップ(10)で計算したレジスタR7の値から、ステップ(10)で計算したレジスタR8の値を減算し、結果をレジスタR5に格納する。
【0045】
(12)次に、レジスタR2の平方算、すなわち、ステップ(11)で計算したレジスタR2の値の2乗を計算し、計算結果をレジスタR7に格納する。同時に、レジスタR5の平方算、すなわち、ステップ(11)で計算したレジスタR5の値の2乗を計算し、計算結果をレジスタR4に格納する(図2,ステップ(12))。
【0046】
(13)次に、レジスタR1とR7を乗算し、乗算結果をレジスタR1に格納する。同時に、レジスタR2とR7を乗算し、乗算結果をレジスタR7に格納する(図2,ステップ(13))。すなわち、ステップ(8)で計算したレジスタR1と、ステップ(12)で計算したレジスタR7を乗算し、乗算結果をレジスタR1に格納する。同時に、ステップ(11)で計算したレジスタR2と、ステップ(12)で計算したレジスタR7を乗算し、乗算結果をレジスタR7に格納する。
【0047】
(14)次に、レジスタR8とR7を乗算し、乗算結果をレジスタR8に格納する。同時に、レジスタR3とR6を乗算し、乗算結果をレジスタR3に格納する(図2,ステップ(14))。すなわち、ステップ(10)で計算したレジスタR8と、ステップ(13)で計算したレジスタR7を乗算し、結果をレジスタR8に格納する。また、レジスタR3に格納されている点PのZ座標ZPと、レジスタR6に格納されている点QのZ座標ZQを乗算し、結果をレジスタR3に格納する。
【0048】
(15)次に、レジスタR4からレジスタR7を減算し、結果をレジスタR4に格納する。同時に、レジスタR1とR1を加算し、加算結果をレジスタR6に格納する(図2,ステップ(15))。
【0049】
(16)次に、レジスタR4からレジスタR6を減算し、結果をレジスタR4に格納する(図2,ステップ(16))。すなわち、ステップ(15)で計算したレジスタR4の値から、ステップ(15)で計算したレジスタR6の値を減算し、結果をレジスタ4に格納する。
【0050】
(17)次に、レジスタR1からレジスタR4を減算し、結果をレジスタR1に格納する(図2,ステップ(17))。すなわち、ステップ(13)で計算したレジスタR1の値から、ステップ(16)で計算したレジスタR4の値を減算し、結果をレジスタR1に格納する。
【0051】
(18)次に、レジスタR5とR1を乗算し、乗算結果をレジスタR5に格納する。同時に、レジスタR3とR2を乗算し、乗算結果をレジスタR3に格納する(図2,ステップ(18))。すなわち、ステップ(11)で計算したレジスタR5と、ステップ(17)で計算したレジスタR1とを乗算し、結果をレジスタR5に格納する。同時に、ステップ(14)で計算したレジスタR3と、ステップ(11)で計算したレジスタR2を乗算し、結果をレジスタR3に格納する。
【0052】
(19)次に、レジスタR5からレジスタR8を減算し、結果をレジスタR7に格納する(図2,ステップ(19))。すなわち、ステップ(18)で計算したレジスタR5から、ステップ(14)で計算したレジスタR8を減算し、結果をレジスタR7に格納する。
【0053】
以上の処理により、レジスタR4,R7,R3に楕円加算P+Q=Rの点Rのヤコビアン座標のX座標、Y座標、Z座標が格納される。
(20)次に、レジスタR4に格納されている値を、点RのX座標XRとして出力する(図2,ステップ(20))。
【0054】
(21)レジスタR7に格納されている値を、点RのY座標YRとして出力する(図2,ステップ(21))。
(22)レジスタR3に格納されている値を、点RのZ座標ZRとして出力する(図2,ステップ(22))。
【0055】
上述した処理により、ヤコビアン座標において、点Pと点Qの楕円加算P+Q=Rにより得られる点Rの座標(XR,YR,ZR)を求めることができる。
上述した第1の実施の形態は、楕円加算P+Qの同じ種類の演算を演算部12が並列に実行できるように演算プログラムを作成し、演算部12が同じ種類の演算を並列に実行することで、6回の乗算と、2回の平方算と、5回の加減算とにより楕円加算の計算を行うことができる。これにより楕円加算の計算時間、すなわち、スカラー倍算の計算時間を短縮できる。
【0056】
次に、図3は、ヤコビアン座標を用いて楕円2倍算2×Pの同じ種類の演算を並列に実行する本発明の第2の実施の形態の演算プログラムを示す図である。
この演算プログラムは、ヤコビアン座標における点Pの座標(XP,YP,ZP)を取得して、楕円2倍算2×Pにより得られる点Rの座標(XR,YR,ZR)を並列計算により求めるものである。
【0057】
(1)点PのX座標XPをレジスタ(またはメモリ)R1に設定する(図3,ステップ(1))。
(2)点PのY座標YPをレジスタR2に設定する(図3,ステップ(2))。
【0058】
(3)点PのZ座標ZPをレジスタR3に設定する(図3,ステップ(3))。
(4)次に、レジスタR1の平方算、すなわち、点PのX座標XPの2乗を計算し、計算結果をレジスタR4に格納する。同時に、レジスタR3の平方算、すなわち点PのZ座標ZPの2乗を計算し、計算結果をレジスタR5に格納する(図3,ステップ(4))。この場合、同じ平方算であるのでレジスタR1に対する平方算と、レジスタR3に対する平方算を、演算部12が並列に実行することができる。
【0059】
(5)次に、レジスタR2の平方算、すなわちレジスタR2に格納されている点PのY座標YPの2乗を計算し、計算結果をレジスタR6に格納する。同時に、レジスタR5の平方算、すなわちレジスタR5に格納されているZP^2の2乗を計算し、計算結果をレジスタR5に格納する(図3,ステップ(5))。
【0060】
(6)次に、レジスタR1とR6を乗算し、乗算結果をレジスタR1に格納する。同時に定数aとレジスタR5を乗算し、乗算結果をレジスタR5に格納する(図3,ステップ(6))。すなわち、レジスタR1に格納されているX座標XPと、レジスタR6に格納されているYP^2を乗算し、乗算結果をレジスタR1に格納する。また、定数aとレジスタR5に格納されているZP^4を乗算し、乗算結果の”a・ZP^4”をレジスタR5に格納する。この処理により、レジスタR5には”a・ZP^4”が格納される。ここで、”W[0]=a・ZP^4”とする。
【0061】
(7)次に、レジスタR4とR4を加算し、加算結果をレジスタR7に格納する。同時にレジスタR4とR5を加算し、加算結果をレジスタR5に格納する(図)3,ステップ(7))。すなわち、レジスタR4に格納されているXP^2を互いに加算し、加算結果の”2・XP^2”をレジスタR7に格納する。また、レジスタR4に格納されている”XP^2”と、レジスタR5に格納されているW[0]を加算し、加算結果の”XP^2+W[0]”をレジスタR5に格納する。
【0062】
(8)次に、レジスタR5とR7を加算し、加算結果をレジスタR5に格納する。同時にレジスタR1とR1を加算し、加算結果をレジスタR1に格納する(図3,ステップ(8))。すなわち、レジスタR5に格納されている”XP^2+W[0]”と、レジスタR7に格納されている”2・XP^2”を加算し、加算結果の”3・XP^2+W[0]”をレジスタR5に格納する。ここで、”M〔0〕=3・XP^2+W〔0〕”とする。同時に、レジスタR1に格納されている”XP・YP^2”を互いに加算し、加算結果をレジスタR1に格納する。
【0063】
(9)次に、レジスタR5の平方算を計算し、計算結果をレジスタR4に格納する。同時に、レジスタR6の平方算を計算し、計算結果をレジスタR6に格納する(図3,ステップ(9))。すなわち、上記ステップ(8)の処理によりレジスタR5に格納される”M〔0〕=3・XP^2+W〔0〕”の2乗を求め、演算結果をレジスタR4に格納する。同時に、レジスタR6に格納されているYP^2の2乗を計算し、計算結果のYP^4をレジスタR6に格納する。
【0064】
(10)次に、レジスタR1とR1を加算し、加算結果をレジスタR1に格納する。同時に、レジスタR6とR6を加算し、加算結果をレジスタR6に格納する(図3,ステップ(10))。すなわち、レジスタR1に格納されている”2・XP・YP^2”どうしを加算し、加算結果の”4・XP・YP^2”をレジスタR1に格納する。ここで、”S〔0〕=4・XP・YP^2”とする。同時に、レジスタR6に格納されているYP^4どうしを加算し、結果をレジスタR6に格納する。
【0065】
(11)次に、上記のステップ(10)で求めたレジスタR1とR1を加算し、加算結果をレジスタR7に格納する。同時に、上記のステップ(10)で求めたレジスタR6とR6を加算し、加算結果をレジスタR6に格納する(図3,ステップ(11))。すなわち、レジスタR1に格納されている”S〔0〕=4・XP・YP^2”どうしを加算し、加算結果の2・S〔0〕をレジスタR7に格納する。同時に、レジスタR6に格納されている”2・YP^4”どうしを加算し、結果をレジスタR6に格納する。
【0066】
(12)次に、レジスタR4からR7の値を減算し、減算結果をレジスタR4に格納する。同時に、レジスタR6とR6を加算し、加算結果をレジスタR6に格納する(図3,ステップ(12))。すなわち、レジスタR4に格納されている”M〔0〕^2”から、レジスタR7に格納されている2・S〔0〕を減算し、減算結果の”M〔0〕^2−2・S〔0〕”をレジスタR4に格納する。ここで、X〔1〕=M〔0〕^2−2・S〔0〕”とする。同時に、レジスタR6に格納されている4・YP^4どうしを加算し、加算結果の”8・YP^4”をレジスタR6に格納する。ここで、”T〔0〕=8・YP^4”とする。
【0067】
(13)次に、レジスタR1から、上記のステップ(12)で求めたレジスタR4を減算し、減算結果をレジスタR1に格納する(図3,ステップ(13))。すなわち、レジスタR1に格納されている”S〔0〕”から、レジスタR4に格納されている”X〔1〕=M〔0〕^2−2・S〔0〕”を減算し、減算結果をレジスタR1に格納する。
【0068】
(14)上記のステップ(13)で計算したレジスタR1の”S〔0〕−X〔1〕”と、レジスタR5に格納されているM〔0〕を乗算し、乗算結果の”M〔0〕・(S〔0〕−X〔1〕)”をレジスタR1に格納する。同時に、レジスタR2に格納されている点PのY座標YPと、レジスタR3に格納されている点PのZ座標ZPを乗算し、乗算結果の”YP・ZP”をレジスタR2に格納する(図3,ステップ(14))。
【0069】
(15)上記のステップ(14)で計算したレジスタR1の”M〔0〕・(S〔0〕−X〔1〕)から、レジスタR6に格納されているT〔0〕を減算し、減算結果の”M〔0〕・(S〔0〕−X〔1〕)−T〔0〕”をレジスタR1に格納する。同時に、上記のステップ(14)で求めたレジスタR2とR2を加算し、加算結果の”2・YP・ZP”をレジスタR2に格納する(図3,ステップ(15))。
【0070】
以上の処理により、楕円2倍算2×Pにより得られるヤコビアン座標における点Rの座標が計算できたので、ステップ(16)において、レジスタR4の値を点RのX座標XRとして出力する。また、ステップ(17)において、レジスタR1の値を点RのY座標YRとして出力する。さらに、ステップ(18)において、レジスタR2の値を点RのZ座標ZRとして出力する。
【0071】
上述した第2の実施の形態は、楕円2倍算2×Pの同じ種類の演算を並列に実行できるように演算プログラムを作成し、演算部12が楕円2倍算の同じ種類の演算を並列に実行することで、2回の乗算と、3回の平方算と、7回の加減算とにより楕円2倍算の計算を行うことができる。これにより、楕円2倍の計算時間を短縮し、スカラー倍算の計算時間を短縮することができる。
【0072】
次に、図4は、楕円2^k倍算(^:べき乗を表す、k=1以上の整数)を用いてスカラー倍算の計算を行う本発明の第3の実施の形態の演算プログラムを示す図である。
【0073】
先ず、楕円2^k倍算2^k×Pを用いたスカラー倍算の演算プログラムを、図4を参照して説明する。図4のプログラムはC++で記述してある。
整数dと、楕円曲線上の点Pの座標とを入力する。
【0074】
変数Q[0]に点Pの座標を設定する(図4,S11)。変数iの初期値としてi=n−2を設定する(図4,S12)。
while文と、ループ内の命令の実行条件である”i>0”を定義する(図4,S13)。変数wの初期値として「1」を設定する(図4,S14)。
【0075】
次に、while文とループ内の命令の実行条件であるd[i]==0を定義する(図4,S15)。
次に、変数iが「0」か否かを判断し、変数iが「0」、すなわち、すべての係数d[i]の判定が終了した場合にはループを抜ける(図4,S16)。
【0076】
次に、変数iをデクリメントする(図4,S17)。さらに、変数wをインクリメントする(図4,S18)。すなわち、係数d[i]が「0」で、かつ変数iが「0」でないとき、変数wがインクリメントされる。その後、ループの先頭のステップS15に戻る(図4,S19)。
【0077】
上記のステップS15からステップS19の処理を繰り返すことにより、2進展開の係数d[i]が連続して「0」となる回数が計算され、その計算結果がレジスタwに格納される。
【0078】
ステップS15において、係数d[i]が「0」でないと判断されたときには、ステップS20に進み楕円2^k倍算の演算を定義した関数iecdbl(Q[0],w)を呼び出して実行する。関数iecdbl(Q[0],w)は、変数Q[0]により定まる点の楕円2^k倍算(k=w)の計算を行う関数である。
【0079】
ステップS20の楕円2^k倍算の演算が終了したなら、係数d〔i〕が「1」か否かを判断する(図4,ステップ21)。
係数d〔i〕が「1」、すなわち、ステップS21の条件が真であれば、次のステップS22に進み、点Q[0](変数Q[0]により指定される点)と点Pとの楕円加算”Q[0]=ecadd(Q[0],P)”を計算し、計算結果を変数Q[0]に格納する。
【0080】
ステップ23は、ステップ21からのループの終了を示す。次のステップS24において、変数iをデクリメントし、その後、ループの先頭のステップS13に戻る。
【0081】
上述した処理により、係数d[i]が連続して「0」となる回数wが計算され、楕円2^k倍算(k=w)が実行される。これにより、例えば、楕円2倍算をk回計算する必要がある場合でも、楕円2^k倍算の関数iecdbl(Q[0],w)を一度呼び出すだけで2^k×Pの計算を行うことができるので、スカラー倍算における楕円2倍算の全体の計算時間を短縮できる。さらに、楕円2^k倍算を計算する関数iecdbl(Q[0],w)のプログラムを、同じ種類の演算を、1つのプロセッサからなる演算部12で並列に実行できるように記述することで、楕円2^k倍算の演算時間を短縮できる。楕円2^k倍算の演算の並列計算の方法については、次に詳しく説明する。
【0082】
次に、図5は、図4のスカラー倍算の演算プログラムの楕円2^k倍算2^k×Pを計算する関数Q〔0〕=iecdbl(Q〔0〕,w)の演算式を示す図である。
【0083】
楕円曲線上の点Pのヤコビアン座標における座標をP=(XP,YP,ZP)、楕円2^k倍算のべき乗の値をk、定数をaとし、楕円2^k倍算により得られる点Rの座標をR=(XR,YR,ZR)する。
【0084】
W[0]を”a・ZP^4”とする(図5,S31)
M[0]を”3・XP^2+W[0]”とする(図5,S32)。
S[0]を”4・XP・YP^2”とする(図5,S33)。
【0085】
T[0]を”8・YP^4”とする(図5,S34)。
k=1の点のX座標、Y座標、Z座標は、以下のように表せる。
X[1]=M[0]^2−2・S[0](図5,S35)
Y[1]=M[0]・(S[0]−X[1])−T[0](図5,S36)
Z[1]=2・YP・ZP(図5,S37)
楕円2^k倍算を計算するために、以下の演算をk−1回繰り返す(図5,S38)。
【0086】
W[i]=2・T[i−1]・W[i−1]、を計算する(図5,S39)。
M[i]=3・X[i]^2+W[i]、を計算する(図5,S40)。
S[i]=4・X[i]・Y[i]^2、を計算する(図5,S41)。
【0087】
T[i]=8・Y[i]^4、を計算する(図5,S42)。
X[i+1]=M[i]^2−2・S[i]、を計算する(図5,S43)。
Y[i+1]=M[i]・(S[i]−X[i−1])−T[i]、を計算する(図5,S44)。
【0088】
Z[i+1]=2・Y[i]・Z[i]、を計算する(図5,S45)。
上記の演算をk−1回実行して得られるX[k]を、点RのX座標XRとして出力する(図5,S46)。
【0089】
同様に、Y[k]を、点RのY座標YRとして出力する(図5,S47)。また、Z[k]を、点RのZ座標ZRとして出力する(図5,S48)。
上記の処理により、楕円2^k倍算により得られるヤコビアン座標の点Rの座標(XR,YR,ZR)が(X[k],Y[k],Z[k])として求めることができる。
【0090】
次に、図6は、図5の演算式に基づいて作成した楕円2^k倍算の演算プログラムを示す図である。この演算プログラムは、楕円2^k倍算の演算において、同じ種類の演算で異なるデータに対する演算を並列に実行できるように記述したものである。
【0091】
最初に、楕円曲線上の点Pの座標P(XP,YP,ZP)と、変数kの値と、定数aを設定する。なお、変数kの値として、図4の演算プログラムで計算したd[i]が連続して「0」となる回数wが設定される。
【0092】
(1)演算部12は、点PのX座標XPをレジスタR1に設定する(図6,ステップ(1))。
(2)演算部12は、点PのY座標YPをレジスタR2に設定する(図6,ステップ(2))。
【0093】
(3)演算部12は、点PのZ座標ZPをレジスタR3に設定する(図6,ステップ(3))。
(4)演算部12は、レジスタR1の平方算を計算し、計算結果のXP^2をレジスタR4に格納する。同時に、レジスタR3の平方算を計算し、計算結果のZP^2をレジスタR5に格納する(図6のステップ(4))。
【0094】
(5)次に、レジスタR2の平方算を計算し、計算結果のYP^2をレジスタR6に格納し、同時にレジスタR5の平方算を計算し、計算結果のZP^4レジスタR5に格納する(図6,ステップ(5))。
【0095】
(6)次に、レジスタR1とR6を乗算し、乗算結果をレジスタR1に格納する。同時に、定数aとレジスタR5を乗算し、乗算結果の”a・ZP^4”をレジスタR8に格納する(図6,ステップ(6))。このステップ(6)の処理は、定数aとレジスタR5の値を乗算することで、図5の演算式の”W[0]=a・ZP^4”を計算している。
【0096】
(7)次に、レジスタR4とR4を加算し、加算結果をレジスタR7に格納する。同時に、レジスタR4とR8を加算し、加算結果をレジスタR5に格納する(図6,ステップ(7))。
【0097】
(8)次に、レジスタR7とR5を加算し、加算結果の”3・XP^2+W[0]”をレジスタR5に格納する。同時に、レジスタR1とR1を加算し、加算結果をレジスタR1に格納する(図6,ステップ(8))。このステップ(8)の処理は、レジスタR7とR5を加算することで、図5の演算式の”M[0]=3・XP^2+W[0]”を計算している。
【0098】
(9)次に、レジスタR5の平方算を計算し、計算結果をレジスタR4に格納する。同時に、レジスタR6の平方算を計算し、計算結果をレジスタR6に格納する(図6,ステップ(9))。
【0099】
(10)次に、レジスタR1とR1を加算し、加算結果をレジスタR1に格納する。同時に、レジスタR6とR6を加算し、加算結果をレジスタR6に格納する(図6,ステップ(10))。このステップ(10)の処理は、レジスタR1とR1の値を加算することで、図5の演算式の”S〔0〕=4・XP・YP^2”を計算している。
【0100】
(11)次に、レジスタR1とR1を加算し、加算結果をレジスタR7に格納する。同時に、レジスタR6とR6を加算し、加算結果をレジスタR6に格納する(図6,ステップ(11))。
【0101】
(12)次に、レジスタR4からR7を減算し、結果をレジスタR4に格納する。同時に、レジスタR6とR6を加算し、加算結果をレジスタR6に格納する(図6,ステップ(12))。このステップ(12)の処理は、レジスタR4からR7を減算することで、図5の演算式の”X[1]=M[0]^2−2・S[0]を計算している。また、レジスタR6とR6を加算することで、図5の演算式の”T[0]=8・YP^4”を計算している。
【0102】
(13)次に、レジスタR1からR4を減算し、結果をレジスタR1に格納する(図6,ステップ(13))。
(14)次に、レジスタR5に格納されている”M〔0〕”と、レジスタR1に格納されている”S〔0〕−X〔1〕”を乗算し、乗算結果をレジスタR1に格納する。同時に、レジスタR2の点PのY座標YPとR3の点PのZ座標ZPを乗算し、乗算結果をレジスタR2に格納する(図6,ステップ(14))。
【0103】
(15)次に、レジスタR1の”M〔0〕・(S〔0〕−X〔1〕)”からレジスタR6のT〔0〕を減算し、減算結果をレジスタR1に格納する。同時に、レジスタR2の”YP・ZP”どうしを加算し、加算結果をレジスタR2に格納する(図6,ステップ(15))。このステップ(15)の処理は、レジスタR1からR6を減算することで、図5の演算式の”Y〔1〕=M[0]・(S[0]−X[0])−T[0]”を計算している。同時に、レジスタR2とR2を加算することで、図5の演算式の”Z〔1〕=2・YP・ZP”を計算している。
【0104】
以上の処理により、点Pの座標(XP,YP,ZP)と、定数aとから、W[0]、M[0]、S[0]、T[0]、X[1]、Y[1]、Z[1]を算出することができる。
(16)次に、iを、1からk−1まで変化させて、ステップb1〜b11の処理を実行する(図6,ステップ(16))。
【0105】
最初に、レジスタR4の平方算を計算し、計算結果をレジスタR3に格納する。同時に、レジスタR1の平方算を計算し、計算結果をレジスタR5に格納する(図6,ステップb1)。
【0106】
上述したステップ(1)〜(15)の処理により、レジスタR4にはX[1]が、レジスタR1にはY[1]が格納されている。従って、変数i=1のときには、上記のステップb1の処理により、レジスタR3に”X[1]^2”が格納され、レジスタR5に”Y[1]^2”が格納される。変数iを任意の値としたときには、ステップb1の処理により、レジスタR3に”X[i]^2”が格納され、レジスタR5に”Y[i]^2”が格納される。
【0107】
次に、レジスタR4とR5を乗算し、乗算結果をレジスタR4に格納する。同時にレジスタR8とR6を乗算し、乗算結果をレジスタR8に格納する(図6,ステップb2)。
【0108】
上記のステップb2の処理により、変数i=1のときには、レジスタR4に”X[1]・Y[1]^2”が格納され、レジスタR8に”T[0]・W[0]”が格納される。変数iを任意の値としたときには、演算結果として”X[i]・Y[i]^2”が得られ、その演算結果がレジスタ4に格納される。また、演算結果として”T[i−1]・W[i−1]”が得られ、その演算結果がレジスタR8に格納される。
【0109】
次に、レジスタR8とR8とを加算し、加算結果をレジスタR8に格納する。
同時にレジスタR3とR3とを加算し、加算結果をレジスタR7に格納する(図6,ステップb3)。
【0110】
上記のステップb3の処理により、変数i=1のとき、レジスタR8とR8の加算結果として2・T[0]・W[0]が得られ、その演算結果がレジスタR6に格納される。また、変数iを任意の値とした、レジスタR8とR8の加算結果として”2・T[i−1]・W[i−1]”が得られ、その演算結果がレジスタR8に格納される。
【0111】
従って、上記のステップb3の処理により、図5の演算式のS39の”W[i]=2・T[i−1]・W[i−1]”を計算することができる。
次に、レジスタR3とR7の値を加算し、加算結果をレジスタR6に格納する。同時に、レジスタR4とR4を加算し、加算結果をレジスタR4に格納する(図6,ステップb4)。
【0112】
次に、レジスタR8とR6を加算し、加算結果をレジスタR3に格納する。同時に、レジスタR4とR4を加算し、加算結果をレジスタR7に格納する(図6,ステップb5)。
【0113】
上記のステップb5の処理により、変数iを任意の値としたときに、レジスタR8とR6の加算結果として”3・X[i]^2+W[i]”が得られ、その結果がレジスタR3に格納される。また、レジスタR4とR4の加算結果として”4・X[i]・Y[i]^2”が得られ、その結果がレジスタR7に格納される。
【0114】
従って、上記のステップb5の処理により、図5の演算式のS40の”M[i]=3・X[i]^2+W[i]”を計算することができる。また、図5の演算式のS41の”S[i]=4・X[i]・Y[i]^2”を計算することができる。
【0115】
次に、レジスタR3の平方算を計算し、計算結果をレジスタR6に格納する。
同時にレジスタR5の平方算を計算し、計算結果をレジスタR5に格納する(図6,ステップb6)。
【0116】
次に、レジスタR5とR5を加算し、加算結果の”2・Y〔i〕^2”をレジスタR5に格納する。同時に、レジスタR7とR7を加算し、加算結果の2・S〔i〕をレジスタR4に格納する(図6,ステップb7)。
【0117】
次に、レジスタR5とR5を加算し、加算結果の”4・Y〔i〕^2”をレジスタR5に格納する。同時に、レジスタR6からR4を減算し、結果をレジスタR4に格納する(図6,ステップb8)。
【0118】
上記のステップb8の処理により、変数iを任意の値としたときに、レジスタR6からR4を減算した結果として”M[i]^2−2・S[i]が得られ、その結果がレジスタR4に格納される。
【0119】
従って、上記のステップb8の処理により、図5の演算式のS43の”X[i+1]=M[i]^2−2・S[i]”を計算することができる。
次に、レジスタR5とR5と加算し、加算結果をレジスタR6に格納する。同時にレジスタR7からレジスタR4を減算し、結果をレジスタR7に格納する(図6,ステップb9)。
【0120】
上記のステップb9の処理により、変数iを任意の値としたときに、レジスタR5とR5の加算結果として”8・Y[i]^4”が得られる。
従って、上記のステップb9の処理により、図5の演算式のS42の”T[i]=8・Y[i]^4”を計算することができる。
【0121】
次に、レジスタR3とR7を乗算し、乗算結果をレジスタR7に格納する。同時に、レジスタR1とR2とを乗算し、乗算結果をレジスタR2に格納する(図6,ステップb10)。
【0122】
次に、レジスタR7からレジスタR6を減算し、結果をレジスタR1に格納する。同時に、レジスタR2とR2を加算し、加算結果をレジスタR2に格納する(図6,ステップb11)。
【0123】
上記のステップb11の処理により、レジスタR7に格納されている”M[i](S[i]−X[i+1])”から、レジスタR6に格納されている”T[i]”が減算され、演算結果の”M[i]・(S[i]−X[i+1])−T[i]”がレジスタR1に格納される。また、レジスタR2に格納されている”Y[i]・Z[i]”どうしが加算され、演算結果の”2・Y[i]・Z[i]”がレジスタR2に格納される。
【0124】
従って、上記のステップb11の処理により、図5の演算式のS44の”Y[i+1]=M[i]・(S[i]−X[i+1])−T[i]”を計算することができる。また、図5の演算式のS45の”Z[i+1]=2・Y[i]・Z[i]”を計算することができる。
【0125】
上記のステップb1〜b11の処理をi=1からk−1まで繰り返すことで、レジスタR4,R1,R2に、楕円2^k倍算の点Rの座標が格納される。
(17)次に、レジスタR4に格納されているX[k]を点RのX座標XRとして出力する(図6,ステップ(17))。
(18)次に、レジスタR1に格納されているY[k]を点RのY座標YRとして出力する(図6,ステップ(18))。
(19)次に、レジスタR2に格納されているZ[k]を点RのZ座標ZRとして出力する(図6,ステップ(19))。
【0126】
上述した処理により楕円2^k倍算により得られる点Rの座標(XR,YR,ZR)を計算することができる。
上述した第3の実施の形態によれば、スカラー倍算の演算において、d[i]が連続して0」となる回数kを予め計算し、楕円2^k倍算の計算を行うことで楕円2倍算を繰り返し実行する場合に比べて計算時間を短縮することができる。
【0127】
また、第3の実施の形態の演算プログラムによれば、楕円2^k倍算の同じ種類の演算を並列に実行することで、2×k回の乗算と、(2×k+1)回の平方算と、7×k回の加減算とにより、点RのX座標とY座標とZ座標を計算することができるので、楕円2^k倍算の演算時間を短縮できる。
【0128】
ここで、上述した実施の形態のスカラー倍算の演算プログラムを実行する楕円曲線暗号装置のハードウェア構成の一例を図7を参照して説明する。楕円暗号装置は、例えば、パーソナルコンピュータ等の情報処理装置により実現できる。
【0129】
CPU21は、SIMD機能を有し、楕円曲線暗号の楕円加算、楕円2倍算等の演算の中で同じ種類の演算を並列に実行する。メモリ22は、演算に使用される各種のレジスタとして使用される。外部記憶装置23は、OSや、楕円曲線暗号の演算プログラム等が格納される。
【0130】
媒体駆動装置24は、CDROM、DVD、フレキシブルディスク、ICカード等の可搬記録媒体25の読み取り、あるいは書き込みを行う装置である。
入力装置26は、キーボード等のデータを入力する装置である。出力装置27は、ディスプレイ、プリンタ等の装置である。ネットワーク接続装置28は、インターネット等のネットワークに接続するための装置であり、この装置を介してネットワーク上のサーバからプログラムをダウンロードすることができる。なお、CPU21,メモリ22,外部記憶装置23,入装置26等はバス29により接続されている。
【0131】
本発明は、楕円曲線暗号の暗号化及び解読を行う専用の装置に限らず、ICカード、DVD装置、携帯電話機、パーソナルコンピュータ等の種々の製品に適用できる。
【0132】
また、本発明は、ヤコビアン座標に限らず他の座標系にも適用できる。さらに、スカラー倍算の演算アルゴリズムは、図4、あるいは図10のアルゴリズムに限らず他の演算アルゴリズムを用いても良い。
【0133】
(付記1)整数dと楕円曲線上の点Pとのスカラー倍算を計算する楕円曲線暗号装置において、
同じ種類の演算で異なるデータに対する演算を並列に実行できるように記述した楕円加算P+Qと楕円2^k(^:べき乗を表す、k=1以上の整数)倍算の演算プログラムを記憶する記憶手段と、
前記記憶手段に記憶された演算プログラムの楕円加算の同じ種類の演算を並列に実行するとともに、楕円2^k倍算の同じ種類の演算を並列に実行してスカラー倍算d×Pを計算する演算手段とを備える楕円曲線暗号装置。
【0134】
(付記2)整数dと楕円曲線上の点Pとのスカラー倍算を計算する楕円曲線暗号装置において、
楕円曲線上の点Pと点Qのヤコビアン座標における座標を、それぞれ(XP,YP,ZP)、(XQ,YQ,ZQ)としたときに、同じ種類の演算で異なるデータに対する演算を並列に実行できるように記述した楕円加算P+Qの演算プログラムを記憶する記憶手段と、
前記記憶手段に記憶された楕円加算の演算プログラムの同じ種類の演算を並列に実行して楕円加算P+Q=Rの点Rのヤコビアン座標(XR,YR,ZR)を計算する演算手段とを備える楕円曲線暗号装置。
【0135】
(付記3)整数dと楕円曲線上の点Pとのスカラー倍算を計算する楕円曲線暗号装置において、
楕円曲線上の点Pのヤコビアン座標における座標を(XP,YP,ZP)としたときに、同じ種類の演算で異なるデータに対する演算を並列に実行できるように記述した楕円2倍算2×Pの演算プログラムを記憶する記憶手段と、
前記記憶手段に記憶された楕円2倍算の演算プログラムの同じ種類の演算を並列に実行して楕円2倍算2×P=Rの点Rのヤコビアン座標(XR,YR,ZR)を計算する演算手段とを備える楕円曲線暗号装置。
【0136】
(付記4)整数dと楕円曲線上の点Pとのスカラー倍算を計算する楕円曲線暗号装置において、
楕円曲線上の点Pのヤコビアン座標における座標(XP,YP,ZP)としたときに、同じ種類の演算で異なるデータに対する演算を並列に実行できるように記述した楕円2^k(^:べき乗を表す,k=2以上の整数)倍算の演算プログラムを記憶する記憶手段と、
前記記憶手段に記憶された楕円2^k倍算の演算プログラムの同じ種類の演算を並列に実行して楕円2^k倍算により得られる点Rのヤコビアン座標(XR,YR,ZR)を計算する演算手段とを備える楕円曲線暗号装置。
【0137】
(付記5)整数dと楕円曲線上の点Pとのスカラー倍算を計算する楕円曲線暗号演算方法において、
整数dの2進展開の係数d[i](d[i]=0,1)とし、
係数d[i]が連続して「0」となる回数kを計算し、
係数d[i]が連続して「0」となる回数kに基づいて楕円2^k(^:べき乗を表す,k=2以上の整数)倍算の同じ種類の演算を並列に実行する楕円曲線暗号演算方法。
【0138】
(付記6)整数dと楕円曲線上の点Pとのスカラー倍算を計算する楕円曲線暗号演算プログラムにおいて、
同じ種類の演算で異なるデータに対する演算を並列に実行できるように記述した楕円加算P+Qと楕円2^k(^:べき乗を表す、k=1以上の整数)倍算の演算プログラムを記憶部に記憶させ、
前記記憶部に記憶された演算プログラムの楕円加算の同じ種類の演算を並列に実行するとともに、楕円2^k倍算の同じ種類の演算を並列に実行してスカラー倍算d×Pを計算する楕円曲線暗号演算プログラム。
【0139】
(付記7)整数dと楕円曲線上の点Pとのスカラー倍算を計算する楕円曲線暗号演算方法において、
同じ種類の演算で異なるデータに対する演算を並列に実行できるように記述した楕円加算P+Qと楕円2^k(^:べき乗を表す、k=1以上の整数)倍算の演算プログラムを記憶部に記憶し、
前記記憶部に記憶された演算プログラムの楕円加算の同じ種類の演算を並列に実行するとともに、楕円2倍算の同じ種類の演算を並列に実行してスカラー倍算d×Pを計算する楕円曲線暗号演算方法。
【0140】
(付記8)整数dと楕円曲線上の点Pとのスカラー倍算を計算する楕円曲線暗号装置において、
同じ種類の演算で異なるデータに対する演算を並列に実行できるように記述した楕円加算P+Qと楕円2倍算と楕円2^k倍算(^:べき乗を表す,k=2以上の整数)の演算プログラムを記憶する記憶手段と、
前記記憶手段に記憶された演算プログラムの楕円加算の同じ種類の演算、楕円2倍算の同じ種類の演算及び楕円2^k倍算の同じ種類の演算を、それぞれ並列に実行してスカラー倍算d×Pを計算する演算手段とを備える楕円曲線暗号装置。
【0141】
(付記9) 付記2記載の楕円曲線暗号装置において、
前記演算手段は、素体上の楕円曲線y=x+a・x+b(mod p)上の点Pのヤコビアン座標における座標(XP,YP,ZP)と、点Qの座標(XQ,YQ,ZQ)とに基づいて楕円加算の演算プログラムの同じ種類の演算を並列に実行する。
【0142】
(付記10)付記4記載の楕円曲線暗号装置において、
前記演算手段は、素体上の楕円曲線y=x+a・x+b(mod p)上の点Pのヤコビアン座標における座標(XP,YP,ZP)に基づいて楕円2^k倍算の演算プログラムの同じ種類の演算を並列に実行する。
【0143】
(付記11)付記1記載の楕円曲線暗号装置において、
整数dの2進展開の係数d[i](d[i]=0,1)としたときに、
前記演算手段は、係数d[i]が連続して「0」となる回数kを計算し、係数d[i]が連続して「0」となる回数kに基づいて楕円2^k倍算の同じ種類の演算を並列に実行する。
【0144】
(付記12)付記4記載の楕円曲線暗号装置において、
整数dの2進展開の係数d[i](d[i]=0,1)としたときに、
前記演算手段は、係数d[i]が連続して「0」となる回数kを計算し、係数d[i]が連続して「0」となる回数kに基づいて楕円2^k倍算の同じ種類の演算を並列に実行する。
【0145】
(付記13)整数dと楕円曲線上の点Pとのスカラー倍算を計算する楕円曲線暗号プログラムにおいて、
同じ種類の演算で異なるデータに対する演算を並列に実行できるように楕円加算P+Qと楕円2倍算の演算プログラムを作成し、
前記楕円加算の同じ種類の演算と、前記楕円2倍算の同じ種類の演算を、それぞれ並列に実行してスカラー倍算d×Pを計算する楕円曲線暗号演算プログラム。
【0146】
(付記14)楕円加算、楕円2倍算または楕円2^k倍算の演算を行う演算手段が、演算命令及び複数のデータを記憶するレジスタ群と、演算器とを備え、前記レジスタ群に記憶された楕円加算、楕円2倍算または楕円2^k倍算の同じ種類の演算で異なるデータに対する演算を前記演算器が並列に実行する。
【0147】
(付記15)整数dと楕円曲線上の点Pとのスカラー倍算を計算する楕円曲線暗号演算方法において、
整数dの2進展開の係数d[i](d[i]=0,1)とし、
係数d[i]が連続して「0」となる回数kを計算し、
係数d[i]が連続して「0」となる回数kに基づいて楕円2^k(^:べき乗を表す,k=2以上の整数)倍算の計算を行う楕円曲線暗号演算方法。
【0148】
【発明の効果】
本発明によれば、楕円加算の演算において同じ種類の演算で異なるデータに対する演算を並列に実行することでスカラー倍算の計算時間を短縮することができる。また、楕円2倍算の演算において同じ種類の演算を並列に実行することでスカラー倍算の計算時間を短縮できる。さらに、楕円2^k倍算の演算において同じ種類の演算を並列に実行することでスカラー倍算の計算時間を短縮できる。また、2進展開の係数d[i]が連続して「0」となる回数に基づいて楕円2^k倍算の同じ種類の演算を並列に実行することで楕円2^k倍算の計算時間を短縮できる。
【図面の簡単な説明】
【図1】実施の形態の楕円曲線暗号装置の要部の構成を示す図である。
【図2】第1の実施の形態の楕円加算の演算プログラムを示す図である。
【図3】第2の実施の形態の楕円2倍算の演算プログラムを示す図である。
【図4】楕円2^k倍算を用いたスカラー倍算の演算プログラムを示す図である。
【図5】楕円2^k倍算の演算式を示す図である。
【図6】第3の実施の形態の楕円2^k倍算の演算プログラムを示す図である。
【図7】実施の形態の情報処理装置のハードウェア構成図である。
【図8】楕円加算の説明図である。
【図9】楕円2倍算の説明図である。
【図10】スカラー倍算の演算プログラムを示す図である。
【符号の説明】
11 楕円曲線暗号装置
12 演算部
13 演算器
14 レジスタ群
15 記憶部
21 CPU
22 メモリ
23 外部記憶装置
24 媒体駆動装置
25 可搬記録媒体
26 入力装置
27 出力装置
28 ネットワーク接続装置
29 バス

Claims (3)

  1. 整数dと楕円曲線上の点Pとのスカラー倍算を計算する楕円曲線暗号装置において、
    整数dの2進展開の係数d〔i〕(d[i]=0,1)が連続して0となる回数kの計算結果を記憶するレジスタと、
    楕円曲線上の点Pのヤコビアン座標をP(XP、YP、ZP)とし、i=0のときのW[i]、M[i]、S[i]、T[i]を、
    W[0]=a・ZP
    M[0]=3・XP +W[0]、
    S[0]=4・XP・YP
    T[0]=8・YP 、とし、
    k=1の点のX、Y、Z座標を、
    X[1]=M[0] −2・S[0]、
    Y[1]=M[0]・(S[0]−X[1])−T[0]、
    Z[1]=2・YP・ZP、から算出し、
    (1) W[i]=2・T[i−1]・W[i−1]、
    (2) M[i]=3・X[i] +W[i]、
    (3) S[i]=4・X[i]・Y[i]
    (4) T[i]=8・Y[i]
    (5) X[i+1]=M[i] −2・S[i]、
    (6) Y[i+1]=M[i]・(S[i]−X[i−1])−T[i]、
    (7) Z[i+1]=2・Y[i]・Z[i]、
    前記レジスタに格納されている値kに基づいて変数iを1からk−1まで変化させ、上記(1)〜(7)の演算を行って楕円2 倍算の演算を実行する際に、同じ種類の演算を並列に実行する演算手段とを備える楕円曲線暗号装置。
  2. 前記演算手段は、点PのX座標XPをレジスタR1、Y座標YPをレジスタR2、Z座標ZPをレジスタR3に設定し、レジスタR1のXPの平方算と、レジスタR3のZPの平方算を並列に実行して演算結果をレジスタに格納し、レジスタR2のYPの平方算と、レジスタに格納されているZP の平方算を並列に実行して演算結果のZP をレジスタに格納し、定数aとレジスタに格納されているYP の乗算を行ってW[0]=a・ZP を算出することを特徴とする請求項1記載の楕円曲線暗号装置。
  3. 整数dと楕円曲線上の点Pとのスカラー倍算を計算する楕円曲線暗号演算方法において、
    整数dの2進展開の係数d[i](d[i]=0,1)が連続して0となる回数kを計算してレジスタに格納し、
    楕円曲線上の点Pのヤコビアン座標をP(XP、YP、ZP)とし、i=0のときのW[i]、M[i]、S[i]、T[i]の値を、
    W[0]=a・ZP
    M[0]=3・XP +W[0]、
    S[0]=4・XP・YP
    T[0]=8・YP 、とし、
    k=1の点のX、Y、Z座標を、
    X[1]=M[0] −2・S[0]、
    Y[1]=M[0]・(S[0]−X[1])−T[0]、
    Z[1]=2・YP・ZP、から算出し、
    (1) W[i]=2・T[i−1]・W[i−1]、
    (2) M[i]=3・X[i] +W[i]、
    (3) S[i]=4・X[i]・Y[i]
    (4) T[i]=8・Y[i]
    (5) X[i+1]=M[i] −2・S[i]、
    (6) Y[i+1]=M[i]・(S[i]−X[i−1])−T[i]、
    (7) Z[i+1]=2・Y[i]・Z[i]、
    前記レジスタに格納されている値kに基づいて変数iを1からk−1まで変化させ、上記(1)〜(7)の演算を行って楕円2 倍算の演算を実行する際に、同じ種類の演算を並列に実行する楕円曲線暗号演算方法。
JP2002342387A 2002-11-26 2002-11-26 楕円曲線暗号装置、楕円曲線暗号演算方法 Expired - Fee Related JP4543143B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2002342387A JP4543143B2 (ja) 2002-11-26 2002-11-26 楕円曲線暗号装置、楕円曲線暗号演算方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2002342387A JP4543143B2 (ja) 2002-11-26 2002-11-26 楕円曲線暗号装置、楕円曲線暗号演算方法

Publications (2)

Publication Number Publication Date
JP2004177582A JP2004177582A (ja) 2004-06-24
JP4543143B2 true JP4543143B2 (ja) 2010-09-15

Family

ID=32704476

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2002342387A Expired - Fee Related JP4543143B2 (ja) 2002-11-26 2002-11-26 楕円曲線暗号装置、楕円曲線暗号演算方法

Country Status (1)

Country Link
JP (1) JP4543143B2 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7680268B2 (en) * 2005-03-15 2010-03-16 Microsoft Corporation Elliptic curve point octupling using single instruction multiple data processing
US8180047B2 (en) 2006-01-13 2012-05-15 Microsoft Corporation Trapdoor pairings
US8804952B2 (en) 2012-12-26 2014-08-12 Umm Al-Qura University System and method for securing scalar multiplication against differential power attacks
KR101925614B1 (ko) * 2017-11-08 2018-12-05 부산대학교 산학협력단 타원곡선 암호화 시스템에서의 스칼라 곱셈 처리 방법 및 타원곡선 암호화 시스템
CN113504895B (zh) * 2021-07-13 2024-02-20 深圳市智芯华玺信息技术有限公司 椭圆曲线多标量点乘计算优化方法及优化装置

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3615405B2 (ja) * 1998-12-18 2005-02-02 富士通株式会社 素体上楕円曲線上の点の演算方法およびその装置
JP2001202019A (ja) * 2000-01-21 2001-07-27 Nippon Telegr & Teleph Corp <Ntt> 並列楕円演算装置及びそのプログラム記録媒体

Also Published As

Publication number Publication date
JP2004177582A (ja) 2004-06-24

Similar Documents

Publication Publication Date Title
JP4067818B2 (ja) 楕円曲線暗号装置、楕円曲線暗号プログラム及び楕円曲線暗号の演算方法
US6876745B1 (en) Method and apparatus for elliptic curve cryptography and recording medium therefore
US7372960B2 (en) Method and apparatus for performing finite field calculations
US20110161390A1 (en) Modular multiplication processing apparatus
EP1306750A2 (en) Multi-scalar multiplication computation in elliptic curve signature verification
Kumar Elliptic curve cryptography for constrained devices
JP4668931B2 (ja) 電力解析攻撃に対する耐タンパ性を持った暗号化処理装置
KR100442218B1 (ko) 몽고메리의 알고리즘을 이용한 멱승 잉여 연산기
EP0952697B1 (en) Elliptic curve encryption method and system
CN118860336A (zh) 一种执行椭圆曲线计算的计算设备
JP4543143B2 (ja) 楕円曲線暗号装置、楕円曲線暗号演算方法
US7680268B2 (en) Elliptic curve point octupling using single instruction multiple data processing
JP2005055488A (ja) 楕円曲線暗号におけるスカラー倍計算方法と、その装置およびそのプログラム
US20050201553A1 (en) Cryptography-processing method, cryptography-processing apparatus and computer program
JP2004053814A (ja) 楕円曲線暗号装置及び楕円曲線暗号演算方法
CN101243388A (zh) 用于在加密计算中执行求逆运算的电路结构和方法
JPH1152854A (ja) 有限体上の四則演算装置及び楕円曲線上の群演算装置
KR20020086005A (ko) 타원곡선 암호 시스템을 위한 역원 연산기
JP4479135B2 (ja) 演算装置及び演算方法及び演算プログラム
Wolkerstorfer et al. A PCI-card for accelerating elliptic curve cryptography
CN114417378B (zh) 基于梅森数的密钥交换或公钥密码加密优化方法及系统
JPH076025A (ja) 冪剰余演算方法および装置
JPH1152851A (ja) 楕円曲線上の群演算装置
JP3966714B2 (ja) 暗号処理方法、そのプログラム及びその記録媒体
JP2007212768A (ja) 楕円曲線暗号における事前計算テーブル作成装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20050713

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080930

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20081229

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100126

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100426

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20100518

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20100527

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130709

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees