JP4034585B2 - 楕円曲線演算装置及び楕円曲線演算方法 - Google Patents
楕円曲線演算装置及び楕円曲線演算方法 Download PDFInfo
- Publication number
- JP4034585B2 JP4034585B2 JP2002094081A JP2002094081A JP4034585B2 JP 4034585 B2 JP4034585 B2 JP 4034585B2 JP 2002094081 A JP2002094081 A JP 2002094081A JP 2002094081 A JP2002094081 A JP 2002094081A JP 4034585 B2 JP4034585 B2 JP 4034585B2
- Authority
- JP
- Japan
- Prior art keywords
- elliptic curve
- calculation
- addition
- calculation procedure
- expression
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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
Landscapes
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- General Engineering & Computer Science (AREA)
- Complex Calculations (AREA)
Description
【発明の属する技術分野】
本発明は、楕円曲線上の演算を行う装置に関し、特に、モンゴメリ型楕円曲線上の点に対するスカラ倍点を算出する装置に関する。
【0002】
【従来の技術】
1.公開鍵暗号
近年、コンピュータ技術と通信技術とに基づくデータ通信が広く普及してきており、このデータ通信においては、秘密通信方式又はデジタル署名方式が用いられている。ここで、秘密通信方式とは、特定の通信相手以外に通信内容を漏らすことなく通信を行う方式である。またデジタル署名方式とは、通信相手に通信内容の正当性を示したり、発信者の身元を証明する通信方式である。
【0003】
これらの秘密通信方式又はデジタル署名方式には公開鍵暗号とよばれる暗号方式が用いられる。公開鍵暗号は通信相手が多数の時、通信相手ごとに異なる暗号鍵を容易に管理するための方式であり、多数の通信相手と通信を行うのに不可欠な基盤技術である。公開鍵暗号を用いる秘密通信では、暗号化鍵と復号化鍵とが異なり、復号化鍵は秘密にするが、暗号化鍵は公開する。
【0004】
この公開鍵暗号の安全性の根拠として離散対数問題が用いられる。離散対数問題には、代表的なものとして、有限体上定義されるもの及び楕円曲線上定義されるものがある。なお、楕円曲線及び離散対数問題については、ニイルコブリッツ著 "ア コウス イン ナンバア セオリイ アンド クリプトグラヒイ"(Neal Koblitz, " A Course in Number theory and Cryptography", Springer-Verlag,1987)に詳しく述べられている。
【0005】
2.楕円曲線上の離散対数問題
楕円曲線上の離散対数問題について、以下に述べる。
pを素数として、有限体GF(p)上定義された楕円曲線をEとする。E上の点で、x座標、y座標が共にGF(p)に属する点全体に形式的な点Oを追加した集合を考えると、この集合は点Oを零元として群をなす。楕円曲線の位数とは上記集合の元の個数を示している。G=(gx、gy)とするとき、−Gを−G=(gx、−gy)として定義する。
【0006】
楕円曲線上の離散対数問題とは、楕円曲線Eの位数が大きな素数で割り切れる場合に、楕円曲線Eに含まれる元Gをベースポイントとする。このとき、楕円曲線Eに含まれる与えられた元Yに対して、
(式1) Y=x*G
となる自然数xが存在するならば、xを求めよ、という問題である。
ここで、pは素数、GF(p)はp個の元を持つ有限体である。また、この明細書において、記号*は、楕円曲線に含まれる元を複数回加算する演算を示し、x*Gは、次式に示すように、楕円曲線に含まれる元Gをx回加算することを意味する。
x*G=G+G+G+・・・+G
x*Gのような点をGのスカラ倍点という。
離散対数問題を公開鍵暗号の安全性の根拠とするのは、多くの元を有する有限体GF(p)に対して、上記問題は極めて難しいからである。
【0007】
3.楕円曲線上の離散対数問題を応用したエルガマル署名
以下に、上記楕円曲線上の離散対数問題を応用したエルガマル署名によるデジタル署名方式について、図25を用いて、説明する。
この図は、上記エルガマル署名によるデジタル署名方式の手順を示すシーケンス図である。ユーザA110、管理センタ120及びユーザB130は、ネットワークで接続されている。pを素数、有限体GF(p)上の楕円曲線をEとする。EのベースポイントをGとし、Eの位数をqとする。つまり、qは、
(式2) q*G=0
を満たす最小の正整数である。
【0008】
(1)管理センタ120による公開鍵の生成
管理センタ120は、予め通知されているユーザA110の秘密鍵xAを用いて、式3に従って、ユーザA110の公開鍵YAを生成する(ステップS141〜S142)。
(式3) YA=xA*G
【0009】
その後、管理センタ120は、素数p、楕円曲線E及びベースポイントGをシステムパラメータとして公開し、また、他のユーザB130にユーザA110の公開鍵YAを公開する(ステップS143〜S144)。
【0010】
(2)ユーザA110による署名生成
ユーザA110は、乱数kを生成する(ステップS145)。次に、ユーザA110は、
(式4) R1=(rx,ry)=k*G
を計算し(ステップS146)、
(式5) s×k=m+rx×xA (mod q)
から、sを計算する(ステップS147)。ここで、mは、ユーザA110がユーザB130へ送信するメッセージである。ただし、×は乗算を示している。さらに、ユーザA110は、得られた(R1、s)を署名としてメッセージmとともに、ユーザB130へ送信する(ステップS148)。
【0011】
(3)ユーザB130による署名検証
ユーザB130は、
(式6) s*R1=m*G+rx*YA
が成立するかどうか判定することにより、送信者であるユーザA110の身元を確認する(ステップS149)。これは、
となることから明らかであるである。
【0012】
4.楕円曲線上の点の加算、2倍算の演算による計算量
上記に示した楕円曲線上の離散対数問題を応用したエルガマル署名によるデジタル署名方式における公開鍵の生成、署名生成、署名検証のそれぞれにおいて、楕円曲線上の点の冪倍演算が行われる。例えば、式3に示す「xA*G」、式4に示す「k*G」、式6に示す「s*R1」、「m*G」、「rx*YA」は、楕円曲線上の点のスカラ倍演算である。
【0013】
楕円曲線の演算公式については、"Efficient elliptic curve exponentiation"(Miyaji, Ono, and Cohen著、Advances in cryptology-proceedings of ICICS'97, Lecture notes in computer science, 1997, Springer-verlag, 282-290.)に詳しく説明されている。
【0014】
楕円曲線の演算公式について、以下に説明する。楕円曲線の方程式をy^2 = x^3 +a×x+b とし、任意の点Pの座標を(x1,y1)とし、任意の点Qの座標を(x2,y2)とする。ここで、R=P+Qで定まる点Rの座標を(x3,y3)とする。
【0015】
なお、この明細書において、記号^は、べき乗の演算を示し、例えば、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
【0016】
なお、上記演算は、楕円曲線が定義される有限体上での演算である。上記に示すように、2項組座標であるアフィン座標、すなわち今まで述べてきた座標において、楕円曲線上の加算演算を行う場合に、楕円曲線上の加算1回につき、1回の有限体上の逆数計算が必要となる。一般に、有限体上の逆数計算は、有限体上での乗算計算と比較して、10倍程度の計算量を必要とする。
【0017】
そこで、計算量を削減することを目的として、射影座標と呼ばれる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のとき)
なる関係で、互いに対応している。ここで、記号→は、次に示す意味で用いている。元P1に、元P2の一つの元が対応するとき、P1→P2と表記する。零元Oは、射影座標で表せ、O=(0,1,0)となる。
【0018】
以下、楕円曲線の演算は、すべて、射影座標で行われるものとする。次に、射影座標上の楕円曲線の加算公式、2倍公式について説明する。これらの公式は、もちろん、前に述べたアフィン座標における加算公式、2倍公式と整合性のあるものである。冪倍の演算は、楕円曲線上の点の加算、2倍算の演算の繰り返しによって実現できる。この冪倍の演算のうち、加算の計算量は、楕円曲線のパラメータに依存しないが、2倍算の計算量は、楕円曲線のパラメータに依存する。
【0019】
ここでは、pを160ビットの素数とし、有限体GF(p)上の楕円曲線をE:y^2 = x^3 +ax+b とし、楕円曲線E上の元P、Qをそれぞれ、P=(X1,Y1,Z1)、 Q=(X2,Y2,Z2)で表すとき、
R=(X3,Y3,Z3)=P+Q
を以下のようにして、求める。
【0020】
(i)P≠Qの場合
この場合、加算の演算となる。
(step 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
【0021】
(step 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
【0022】
(ii)P=Qの場合(すなわち、R=2P)
この場合、2倍算の演算となる。
(step 2-1) 中間値の計算
以下を計算する。
(式17) S=4×X1×Y1^2
(式18) M=3×X1^2+a×Z1^4
(式19) T=−2×S+M^2
【0023】
(step 2-2) R=(X3,Y3,Z3)の計算
以下を計算する。
(式20) X3=T
(式21) Y3=−8×Y1^4+M×(S−T)
(式22) Z3=2×Y1×Z1
【0024】
次に、楕円曲線の加算、2倍算を行う場合の計算量について説明する。ここで、有限体GF(p)上の1回の乗算による計算量を1Mul、1回の2乗算による計算量を1×Sqで表す。なお、一般のマイクロプロセッサにおいては、1×Sq≒0.8×Mulである。
【0025】
上記の例によると、P≠Qの場合に示されている楕円曲線上の加算の計算量は、式8〜式16において、乗算の回数及び2乗算の回数をカウントすることにより得られ、12×Mul+4×Sqである。これは、式8、9、10、11、14、15、16における加算の計算量は、それぞれ、1×Mul+1×Sq、1×Mul+1×Sq、2×Mul、2×Mul、2×Mul+2×Sq、2×Mul、2×Mulであることから明らかである。
【0026】
また、上記の例によると、P=Qの場合に示されている楕円曲線上の2倍算の計算量は、式17〜式22において、乗算の回数及び2乗算の回数をカウントすることにより得られ、4×Mul+6×Sqである。これは、式17、18、19、21、22における2倍算の計算量は、それぞれ、1×Mul+1×Sq、1×Mul+3×Sq、1×Sq、1×Mul+1×Sq、1×Mulであることから明らかである。
【0027】
なお、上記回数のカウントにおいて、例えば、式14のH^3については、
H^3=H^2×H
と展開できるので、H^3の計算量は、1×Mul+1×Sqとし、式18のZ1^4については、
Z1^4=(Z1^2)^2
と展開できるので、Z1^4の計算量は、2Sqとする。
【0028】
また、式14のH^2については、前述のH^3の計算のプロセスにおいて、H^2が算出されているので、H^2の計算量は再度カウントしない。また、乗算の回数のカウントの際、ある値に小さい値を乗じて行われる乗算の回数は、カウントしない。その理由を以下に説明する。ここで言う小さい値とは、式8〜式22において、乗算の対象となる小さい固定値であり、具体的には、2、3、4、8などの値である。これらの値は、多くとも4ビットの2進数で表現できる。一方、その他の変数は、通常、160ビットの値を有している。
【0029】
一般に、マイクロプロセッサにおいて、乗数と被乗数との乗算は、被乗数のシフトと加算の繰り返しにより行われる。すなわち、2進数で表現される乗数の各ビット毎に、このビットが1であるならば、2進数で表現される被乗数の最下位ビットが、このビットの存在する位置に一致するように、被乗数をシフトして、1つのビット列を得る。乗数の全ビットについて、このようにして得られた少なくとも1つのビット列をすべて加算する。
【0030】
例えば、160ビットの乗数と160ビットの被乗数との乗算においては、160ビットの被乗数を160回シフトし、160個のビット列を得、得られた160個のビット列を加算する。一方、4ビットの乗数と160ビットの被乗数との乗算においては、160ビットの被乗数を4回シフトし、4個のビット列を得、得られた4個のビット列を加算する。
【0031】
乗算は、上記に示すようにして行われるので、乗算がある値に小さい値を乗じて行われる場合には、前記繰り返しの回数が少なくなる。従って、その計算量は少ないと見なせるので、乗算の回数にカウントしない。以上説明したように、楕円曲線の2倍算を行う場合において、式18には、楕円曲線のパラメータaが含まれている。このパラメータaの値として、例えば、小さい値を採用すると、楕円曲線上の2倍算の計算量は、1Mul分削減でき、3Mul+6Sqとなる。なお、加算に関しては、楕円曲線のパラメータを変化させても、計算量は変わらない。
【0032】
楕円曲線のスカラ倍演算は次のように行う。
(従来例1)pを160ビットの素数とし、有限体GF(p)上の楕円曲線をEとし、E(GF(p))の任意の元をGとする。これらのパラメータを基にk*Gの計算をする。ここで、kの2進表現を、
とする。
step1:c=159、S=Oとする。
step2:k[c]=1のとき、S←S+Gとする。
step3:c←c−1とする。
step4:c<0であれば、Sを出力して終了。それ以外は、S←S+Sとして、step2へ。
【0033】
上記の計算量は、k[c]=1になる確率を1/2と考え、1回の楕円曲線加算をEAdd、2倍算をEDobとすると、80×EAdd+160×EDobとなる。一般に、p、kをそれぞれnビットの素数、整数とするとき、計算量は、
1/2×n×EAdd+n×EDob
である。
【0034】
上記のスカラ倍演算において、(2^i)*G(i=1、2、……、159)を予め計算しておき、その結果をテーブルに保存している場合、以下のように計算可能である。
【0035】
(従来例2)
pを160ビットの素数とし、有限体GF(p)上の楕円曲線をEとし、E(GF(p))の任意の元をGとする。また、(2^i)*G(i=1、2、……、159)の座標を予め計算しているものとする。このとき、これらのパラメータを基にk*Gの計算をする。
step1:c=159,S=Oとする。
step2:k[c]=1のとき、S←S+2^c*Gとする。
step3:c←c−1とする。
step4:c<0であれば、Sを出力して終了。それ以外は、step2へ。
【0036】
上記方法では、楕円曲線加算を行わないので、計算量は、80×EAddである。一般に、p、kをそれぞれnビットの素数、整数とするとき、計算量は、1/2×n×EDobである。このように、(2^i)*Gを予め計算するため、計算量が削減できる。従来例2は、3のエルガマル署名における楕円曲線のベース点Gのスカラ倍演算で使用できる。これは、ベース点Gはシステムパラメータであるためである。
【0037】
5.モンゴメリ型楕円曲線
上記の楕円曲線は、その方程式がy^2=x^3+a×x+bの形をしているもののみである。この楕円曲線はワイヤーシュトラス型楕円曲線とよばれる。一方、方程式がEm:B×y^2=x^3+A×x^2+xの形をしている楕円曲線をモンゴメリ型楕円曲線とよぶ。この楕円曲線Em上の点Gを取り、そのn1倍点及びn2倍点をそれぞれ、n1*G=(X1,Y1,Z1)、 n2*G=(X2,Y2,Z2)、(n1−n2)*G=(X3',Y3',Z3')で表すとき、
(n1+n2)*G=(X3,Y3,Z3)=n1*G+n2*G
を以下のようにして、求める。
【0038】
(i)n1≠n2のとき(加算)
(step1−1)中間値の計算
U1=X1+Z1
U2=X2+Z2
V1=X1−Z1
V2=X2−Z2
(step1−2)(n1+n2)*G=(X3,Y3,Z3)の計算
X3=Z3'×(V1×U2+U1×V2)^2
Z3=X3'×(V1×U2−U1×V2)^2
【0039】
(ii)n1=n2のとき(2倍算)
(step2−1)中間値の計算
U1=X1+Z1
V1=X1−Z1
(step2−2)(n1+n2)*G=(X3,Y3,Z3)の計算
X3=V1^2×U1^2
Z3=(4×X1×Z1)×(V1^2+(A+2)/4×(4×X1×Z1)
【0040】
step2−2の「(A+2)/4」は予め計算可能であるため無視すると、それぞれの計算量は、加算が4×Mul+2×Sq(Z3'=1のときは3×Mul+2×Sq)、2倍算が3×Mul+2×Sqになる。上記4で述べたようにワイヤーシュトラス型楕円曲線の点の加算、2倍算の計算量は、それぞれ、12×Mul+4×Sq、4×Mul+6×Sqである。よって、モンゴメリ型楕円曲線の方が点の加算、2倍算が高速である。なお、モンゴメリ型楕円曲線においても、(X1,Y1,Z1)の(−1)倍は、(X1,−Y1,Z1)である。モンゴメリ型楕円曲線については、"Speeding the Pollar and Elliptic Curve Methods of Factorization"(P.L.Montgomery著, Math. of Comp. 48, 1987, pp.243-264)が詳しい。
【0041】
以上のように、モンゴメリ型楕円曲線は高速演算が可能である。しかし、n1*Gとn2*Gの加算において、(n1−n2)*Gの座標が必要になるため、スカラ倍演算において、ワイヤーシュトラス型楕円曲線のように2進展開ができない。例えば、5*Gを計算する場合、5=2×2+1であるため、2*Gを計算した後、2*(2*G)=4*Gを計算し、さらに(4*G)+Gを計算する。(2*2*G)とGの加算において、それらの点の差(2×2−1)*G=3*Gを求めなければならない。したがって、従来例1のようなスカラ倍演算方法が使用できない。
【0042】
そこで、以下のようにして計算する。
(従来例3)
pをnビットの素数として、EをGF(p)上のモンゴメリ型楕円曲線、GをE(GF(p))の元とする。k=2^(n−1)+k[1]×2^(n−2)+……+k[n−2]×2+k[n−1]として、k*Gの計算をする。
S[i],T[i]を以下のように定義する。
S[i]=(2^i+k[1]×2^(i−1)+……+k[i−1]×2+k[i])*G
T[i]=S[i]+G
step1:i=1、S[0]=Gとする。
step2:T[0]=2*Gを計算する。
step3:k[i+1]=0であるか判定し、k[i+1]=0のとき、以下のようにする。
【0043】
S[i+1]=2*S[i]
T[i+1]=S[i]+T[i]
それ以外は、以下のように計算する
S[i+1]=S[i]+T[i]
T[i+1]=2*T[i]
step4:i←i+1とする。
step5:i>n−1であるか判定し、i>nである場合、S[n]をk*Gとして出力する。それ以外は、step3へ。
【0044】
図26は、このような従来例3におけるスカラ倍演算の計算手順を模式的に示す計算フロー図である。ここでは、右から左に向かって、加算又は2倍算を繰り返す様子が示されている。なお、本図において、実線矢印は楕円曲線上の加算を示し、点線矢印は楕円曲線上の2倍算を示し、矢印上の円で囲まれた数値は加算の順番(それまでに行った加算の合計回数)を示し、矢印上の括弧で囲まれた数値は2倍算の順番(それまでに行った2倍算の合計回数)を示す。例えば、第1の加算(丸数値1の加算)は、Gと2*Gとの楕円曲線上の加算を行って3*Gを算出することを示し、また、第1の2倍算(括弧付き数値1の加算)は、Gに対して楕円曲線上の2倍算を行って2*Gを算出することを示している。
【0045】
この方法によれば、加算の対象となる2つの要素(加算要素)の差が常にG(既知)となっているので、その差の算出手間が不要となり、その計算量は、加算と2倍算に要する正味の時間、つまり、n×EAdd+n×EDobで済む。
【0046】
具体的には、Gが既知であることから、Z座標が1と考えることができるため、EAdd=3×Mul+2×Sq、EDob=3×Mul+2×Sqである。ただし、Mul、Sqはそれぞれ、GF(p)の乗算、2乗算の計算量であり、一般にSq=0.8×Mulである。これらの式を代入すると、従来例3の計算量は、
n×(3×Mul+2×Sq)+n×(3×Mul+2×Sq)=6×n×Mul+4×n×Sq=46/5×n×Mul
となる。
【0047】
【発明が解決しようとする課題】
しかしながら、上記従来例3の計算方法は、従来例2のように(2^i)*Gを予め計算しておく(テーブルを利用する)ことを考えると、(2^i)*Gの点を使用するアルゴリズムとはなっていないために、従来例2にようには計算量が削減されず、(2^i)*Gを予め計算することのメリットが少ない。また、モンゴメリ型楕円曲線のスカラ倍演算において、このような(2^i)*Gなどのスカラ倍点を予め計算することが有効になるような方法が存在しない。したがって、モンゴメリ型楕円曲線は、従来例3のようにスカラ倍点のテーブルをもたない方法においては高速であるが、テーブルをもつ場合に有効な方法が存在しないという問題を有している。
【0048】
つまり、従来のモンゴメリ型楕円曲線のスカラ倍演算方法は、ある点の2のべき乗倍(スカラ倍)点のテーブルをもつ場合に有効な方法になっていないという問題点がある。
そこで、本発明は、モンゴメリ型楕円曲線におけるスカラ倍演算方法において、ある点Gの2のべき乗倍等の一定のスカラ倍点の座標を格納したテーブルを有効活用することが可能な高速な楕円曲線演算装置を提供することを目的とする。
【0049】
【課題を解決するための手段】
上記目的を達成するために、本発明に係る楕円曲線演算装置は、nビットの任意の整数kを入力とし、予め与えられた有限体F上のモンゴメリ型楕円曲線E上の点Gに対して、スカラ倍点k*Gを出力する楕円曲線演算装置であって、G,2*G,(2^2)*G,…,(2^(n−1))*Gのいずれかを第1加算要素とする前記楕円曲線E上の加算を繰り返すことによって前記スカラ倍点k*Gを算出するスカラ倍演算手段を備えることを特徴とする。
【0050】
ここで、前記楕円曲線演算装置は、さらに、前記楕円曲線E上の加算の繰り返し手順を示す計算手順を生成する計算手順生成手段を備え、前記スカラ倍演算手段は、前記計算手順生成手段が生成した計算手順に従って前記スカラ倍点k*Gを算出してもよい。
【0051】
また、前記計算手順生成手段は、自然数m,uに対して、(2^(m−1)+u)*G、(2^(m−1))*G及びu*Gから(2^m+u)*Gを算出する第1計算、又は、(2^m)*G、(2^m−u)*G及びu*Gから(2^(m+1)−u)*Gを算出する第2計算、又は、(2^m)*G、−(2^m−u)*G及び(2^(m+1)−u)*Gからu*Gを算出する第3計算を前記楕円曲線E上の加算とする計算手順を生成してもよい。
【0052】
また、前記計算手順生成手段は、前記kの各ビットの値に応じて、前記楕円曲線E上の加算と前記第1〜第3計算の少なくとも1つとを対応づけることにより、前記計算手順を生成してもよい。
【0053】
また、前記計算手順生成手段は、前記kのビットの値が0である場合には、そのビットに対応する前記楕円曲線E上の加算として少なくとも前記第1計算を対応させ、前記ビットの値が1である場合には、そのビットに対応する前記楕円曲線E上の加算として少なくとも前記第2計算を対応させることにより、前記計算手順を生成してもよい。
【0054】
また、前記計算手順生成手段は、前記楕円曲線E上の加算の繰り返しにおける個々の加算において、前記第1加算要素と加算される第2加算要素の表現形式が前記第1計算におけるプラス表現(2^(m−1)+u)*Gであるか、前記第2計算におけるマイナス表現(2^m−u)*Gであるかを特定する表現形式情報を前記計算手順として生成し、前記スカラ倍演算手段は、前記楕円曲線E上の加算の繰り返しにおける個々の加算においては、前記表現形式情報に基づいて、前記第1〜第3計算のいずれかの計算を行ってもよい。
【0055】
また、前記表現形式情報は、前記楕円曲線E上の加算の繰り返しにおける加算ごとに、前記第2加算要素が前記プラス表現及び前記マイナス表現のいずれの表現からいずれの表現に切り替わるかを示す情報であってもよいし、前記楕円曲線E上の加算の繰り返しにおいて、前記第2加算要素が前記プラス表現及び前記マイナス表現のいずれかの表現形式で連続して出現する個数を示す情報であってもよい。
【0056】
また、前記スカラ倍演算手段は、G,2*G,(2^2)*G,…,(2^(n−1))*Gの少なくとも一部を記憶するテーブル記憶部を有し、前記テーブル記憶部に記憶された点を第1加算要素として前記楕円曲線E上の加算を行ってもよい。
【0057】
また、本発明に係る楕円曲線演算装置は、nビットの任意の整数kを入力とし、予め与えられた有限体F上のモンゴメリ型楕円曲線E上の点Gに対して、スカラ倍点k*Gを出力する楕円曲線演算装置であって、2*G,3*G,6*G,12*G,…,(2^(n−1)+2^(n−2))*Gのいずれかを第1加算要素とする前記楕円曲線E上の加算を繰り返すことによって前記スカラ倍点k*Gを算出するスカラ倍演算手段を備えるとしてもよい。
【0058】
ここで、前記楕円曲線演算装置は、さらに、前記楕円曲線E上の加算の繰り返し手順を示す計算手順を生成する計算手順生成手段を備え、前記スカラ倍演算手段は、前記計算手順生成手段が生成した計算手順に従って前記スカラ倍点k*Gを算出してもよい。
【0059】
また、前記計算手順生成手段は、自然数m,uに対して、第1加算要素(2^(m−1)+2^(m−2))*G、第2加算要素(2^(m−2)+u)*G及び前記第1加算要素と前記第2加算要素との差(2^(m−1)−u)から(2^m+u)*Gを算出する第1計算、又は、第1加算要素(2^m+2^(m−1))*G、第2加算要素(2^(m−1)−u)*G及び前記第1加算要素と前記第2加算要素との差(2^m+u)から(2^(m+1)−u)*Gを算出する第2計算を前記楕円曲線E上の加算とする計算手順を生成してもよい。
【0060】
また、前記計算手順生成手段は、前記第1又は前記第2計算による楕円曲線E上の加算によって得られた結果を、次の繰り返し加算における第2加算要素とするか第1加算要素と第2加算要素との差とするかを示す分割対象情報を前記計算手順として生成してもよい。
【0061】
また、前記スカラ倍演算手段は、2*G,3*G,6*G,12*G,…,(2^(n−1)+2^(n−2))*Gの少なくとも一部を記憶するテーブル記憶部を有し、前記テーブル記憶部に記憶された点を第1加算要素として前記楕円曲線E上の加算を行ってもよい。
【0062】
さらに、本発明は、上記楕円曲線演算装置を用いた暗号装置や復号装置として実現したり、上記手段をステップとする楕円曲線演算方法として実現したり、上記手段としてコンピュータに機能させるプログラムとして実現したり、そのようなプログラムが記録されたコンピュータ読み取り可能な記録媒体として実現したりすることもできる。
【0063】
【発明の実施の形態】
以下、本発明の実施の形態について、図面を参照しながら詳細に説明する。
[実施の形態1]
1.楕円曲線演算装置200の構成
図1は、実施の形態1における楕円曲線演算装置200の構成を示す機能ブロック図である。この楕円曲線演算装置200は、専用のプログラムを実行するコンピュータ装置又はLSI等の論理回路で実現され、有限体GF(p)上のモンゴメリ型楕円曲線E:B×y^2=x^3+A×x^2+xのパラメータp(素数)、GF(p)の元A、Bと、E(GF(p))に属する点Gと、その(2^i)*G(i=1,2,……,n−1)を予め与えられ、nビットの任意のkを入力として、点Gのスカラ倍k*Gを出力する演算装置であり、点Gの2のべき乗倍(2^i)*Gを有効活用しながら計算する点に特徴を有し、計算手順生成部210とスカラ倍演算部220とから構成される。なお、上記nはkのビット数を示している。
【0064】
(計算手順生成部210の処理)
計算手順生成部210は、点Gのスカラ倍k*Gを算出するための計算手順を生成する予備計算を実行する処理部であり、k*GをGの2のべき乗倍(2^i)*Gを用いた加算形に分割することを繰り返すことによって加算要素を特定する加算要素特定部210aと、加算要素特定部210aによって特定された加算要素を配列として出力する配列生成出力部210bとからなる。
【0065】
具体的には、計算手順生成部210は、図2に示されるフローチャートのように、整数kを入力として、計算手順を示す配列CS[i](i=1,2,……)を出力する。ここで、1つの配列CS[i]は、1つの加算を特定する4つの要素、即ち、(加算結果、第1加算要素、第2加算要素、第1加算要素と第2加算要素との差)からなる。なお、第1加算要素及び第2加算要素の少なくとも1つは、点Gの2のべき乗倍である。
【0066】
加算要素特定部210aは、以下の手順に従って、配列CS[i]を特定する。
ステップS201:w←kとする。ただし、w←kはwにkを代入することを示している。
ステップS202:カウンタc←1、oldflag←0、newflag←0とする。
ステップS203:w=2^(|w|−1)+uとなるようにuをおく。ここで、|w|はwのビット数を示している。
ステップS204:w=2^|w|−vとなるようにvをおく。
ステップS205:u>vであるか判定する。成り立つ場合は、ステップS206へ。成り立たない場合は、ステップS207へ。
ステップS206:newflagを1とし、計算手順CS[c]をタイプIの値、即ち、[(2^|w|−v)*G,(2^(|w|−1))*G,(2^(|w|−1)−v)*G,v*G]と定め、w←2^(|w|−1)−vとする。ステップS210へ。
【0067】
ここで、計算手順[x1*G,x2*G,x3*G,x4*G]は,x2*Gとx3*Gとの楕円曲線加算x1*Gをx2*G,x3*G,x4*G(=x2*G−x3*G)を用いて計算することを示している。
ステップS207:oldflag=1であるか判定する。成り立つ場合は、ステップS208へ。成り立たない場合は、ステップS209へ。
ステップS208:計算手順CS[c]をタイプIIの値、即ち、[v*G,(2^|v|)*G,−(2^|v|−v)*G,w*G]として、c←c+1とする。
ステップS209:newflagを0として、計算手順CS[c]をタイプIIIの値、即ち、[(2^(|w|−1)+u)*G,(2^(|w|−2)+u)*G,(2^(|w|−2))*G,u*G]と定め、w←2^(|w|−2)+uとする。
ステップS210:oldflag←newflag,c←c+1,w←とする。
ステップS211:w=3×2^e(e≧0)とおけるか判定する。成り立つ場合は、ステップS212へ。成り立たない場合は、ステップS203へ。
ステップS212:CS[c]をタイプIVの値、即ち、[(3×2^e)*G,(2^(e−1))*G,(2^e)*G,(2^e)*G]と定める。最後に、配列生成出力部210bは、加算要素特定部210aによって特定された全ての計算手順CS[i](i=1,2,……)とcとをスカラ倍演算部220に出力し、終了する。
【0068】
(スカラ倍演算部220の処理)
スカラ倍演算部220は、計算手順生成部210から出力された計算手順CS[i](i=1,2,……)とカウンタcとに基づいて、楕円曲線上の加算を繰り返すことで、最終的な計算結果k*Gを算出し出力する演算部であり、点Gの2のべき乗倍((2^i)*G;i=1,2,…)を予め記憶しているテーブル記憶部220b、ワーキング用のメモリである一時記憶部220c、楕円曲線上での加算を行う加算器である楕円加算部220d及び計算手順生成部210からの計算手順CS[i]に従って各構成要素220b〜220dを制御する演算制御部220aからなる。
【0069】
このスカラ倍演算部220は、図3に示されるフローチャートに従って、k*Gを算出する。具体的には、演算制御部220aは、以下のステップで、計算・制御を行う。
ステップS301:カウンタdにcを代入する。
ステップS302:CS[c]を読み出し(S302a)、その計算手順[x1*G,x2*G,x3*G,x4*G]に従って、楕円加算部220dに、楕円曲線加算を実行させ、点x1*G(=x2*G+x3*G)を算出させる(S302b)。このとき、(2^i)*G(2のべき乗倍)については、テーブル記憶部220bから読み出した値を用いることとし、得られた加算結果x1*Gについては、一時記憶部220cに格納し、次の計算で使用するように楕円加算部220dを制御する。
ステップS303:d←d−1とする。
ステップS304:d=0であるか判定する(S304a)。成り立つ場合、楕円加算部220dに、最後に計算した結果x1*Gを出力させ、終了する(S304b)。成り立たない場合は、ステップS302へ。
【0070】
ここで、上記のステップで使用される楕円曲線上の加算方法を以下に示す。
P=(X1,Y1,Z1)、 Q=(X2,Y2,Z2)、2点の差P−Q=(X3',Y3',Z3')から、P+Q=(X3、Y3、Z3)を以下のようにして求める。
(step1−1)中間値の計算
U1=X1+Z1
U2=X2+Z2
V1=X1−Z1
V2=X2−Z2
(step1−2)P+Q=(X3,Y3,Z3)の計算
X3=Z3'×(V1×U2+U1×V2)^2
Z3=X3'×(V1×U2−U1×V2)^2
なお、楕円曲線演算装置200で使用するモンゴメリ型楕円曲線については、"Speeding the Pollar and Elliptic Curve Methods of Factorization"(P.L.Montgomery著, Math. of Comp. 48, 1987, pp.243-264)が詳しい。
【0071】
(楕円曲線演算装置200の動作)
楕円曲線演算装置200は、入力の整数kを受け取り、計算手順生成部210へ入力する。計算手順生成部210は、入力された整数kより、計算手順CS[i](i=1,2,……)を求め、スカラ倍演算部320へ入力する。スカラ倍演算部320は、入力された計算手順CS[i](i=1,2,……)より、楕円曲線の点Gのスカラ倍点k*Gを算出し、出力する。
【0072】
2.楕円曲線演算装置200の数値例
以下では、k=102の場合の数値例を示す。
(計算手順生成部210における中間値)
カウンタcの値に対する処理を以下に示す。
(カウンタc=1のとき)
ステップS203:w=102=2^6+38であるので、u←38
ステップS204:w=102=2^7−26であるので、v←26
ステップS205:38>26であるので、ステップS206へ。
ステップS206:newflag←1、CS[1]←[(2^7−26)*G(=102*G),(2^6)*G,(2^6−26)*G(=38*G),26*G]、w←2^6−26=38、ステップS210へ。
ステップS210:oldflag←newflag=1、c←c+1
ステップS211:w=38であり3×2^eで表せないため、ステップS203へ。
【0073】
(カウンタc=2のとき)
ステップS203:w=38=2^5+6であるので、u←6
ステップS204:w=38=2^6−26であるので、v←26
ステップS205:6<26であるので、ステップS207へ。
ステップS207:oldflag=1であるので、ステップS208へ。
ステップS208:CS[2]←[26*G,(2^5)*G,−(2^5−26)*G(=−6*G),(2^6−26)*G(=38*G)]、c←c+1
ステップS209:newflag←0、CS[3]←[(2^5+6)*G(=38*G),(2^4+6)*G(=22*G),(2^4)*G,6*G]、w←2^4+6=22
ステップS210:oldflag←newflag=0,c←c+1
ステップS211:w=22であり3×2^eで表せないステップS203へ。
【0074】
(カウンタc=4のとき)
ステップS203:w=22=2^4+6であるので、u←6
ステップS204:w=22=2^5−10であるので、v←10
ステップS205:6<10であるので、ステップS207へ。
ステップS207:oldflag=0であるので、ステップS209へ。
ステップS209:newflag←0、CS[4]←[(2^4+6)*G(=22*G),(2^3+6)*G(=14*G),(2^3)*G,6*G]、w←2^3+6=14
ステップS210:oldflag←newflag=0,c←c+1
ステップS211:w=14であり3×2^eで表せないため、ステップS203へ。
【0075】
(カウンタc=5のとき)
ステップS203:w=14=2^3+6であるので、u←6
ステップS204:w=14=2^4−2であるので、u←2
ステップS205:6>2であるので、ステップS206へ。
ステップS206:newflag←1、CS[5]←[(2^4−2)*G(=14*G),(2^3)*G,(2^3−2)*G(=6*G),2*G]、w←2^3−2=6、ステップS210へ。
ステップS210:oldflag←newflag=1、c←c+1
ステップS211:w=6であり、w=3×2と表せるため、ステップS212へ。
ステップS212:CS[6]←[(3×2)*G(=6*G),(2^2)*G,2*G,2*G],終了。
【0076】
以上より、計算手順生成部210の出力は、
CS[1]=[102*G,(2^6)*G,38*G,26*G]
CS[2]=[26*G,(2^5)*G,−6*G,38*G]
CS[3]=[38*G,22*G,(2^4)*G,6*G]
CS[4]=[22*G,14*G,(2^3)*G,6*G]
CS[5]=[14*G,(2^3)*G,6*G,2*G]
CS[6]=[6*G,(2^2)*G,2*G,2*G]
とc=6である。
【0077】
(スカラ倍演算部220の中間値)
次に、スカラ倍演算部220の処理を示す。
まず、最初にステップS301でdにc=6を代入する。以降カウンタdに対する処理を以下に示す。
(カウンタd=6のとき)
ステップS302:CS[6]=[6*G,(2^2)*G,2*G,2*G]であるので、2^2*G、2*G及びその差2*Gより楕円曲線加算を行って6*Gを求める。
ステップS303:d←d−1=5
ステップS304:d=5であるので、ステップS302へ。
【0078】
(カウンタd=5のとき)
ステップS302:CS[5]=[14*G,(2^3)*G,6*G,2*G]であるので、(2^3)*G,6*G及びその差2*Gより楕円曲線加算を行って14*Gを求める。ここで、6*Gはカウンタd=6のときに計算済であるので、そこでの計算結果を用いる。
ステップS303:d←d−1=4
ステップS304:d=4であるので、ステップS302へ。
【0079】
(カウンタd=4のとき)
ステップS302:CS[4]=[22*G,14*G,(2^3)*G,6*G]であるので、14*G,(2^3)*G及びその差6*Gより楕円曲線加算を行って22*Gを求める。ここで、14*G及び6*Gはそれぞれカウンタd=5,6のときに計算済であるので、そこでの計算結果を用いる。
ステップS303:d←d−1=3
ステップS304:d=3であるので、ステップS302へ。
【0080】
(カウンタd=3のとき)
ステップS302:CS[3]=[38*G,22*G,(2^4)*G,6*G]であるので、22*G,(2^4)*G及びその差6*Gより楕円曲線加算を行って38*Gを求める。ここで、22*G及び6*Gはそれぞれカウンタd=4,6のときに計算済であるので、そこでの計算結果を用いる。
ステップS303:d←d−1=2
ステップS304:d=2であるので、ステップS302へ。
【0081】
(カウンタd=2のとき)
ステップS302:CS[2]=[26*G,(2^5)*G,−6*G,38*G]であるので、(2^5)*G,−6*G及びその差38*Gより楕円曲線加算を行って26*Gを求める。ここで、38*Gはカウンタd=3のときに計算済であり、−6*Gはd=6のときに計算して得た6*GのY座標に(−1)を掛けたものであるので、そこでの計算結果より得られる。
ステップS303:d←d−1=1
ステップS304:d=1であるので、ステップS302へ。
【0082】
(カウンタd=1のとき)
ステップS302:CS[1]=[102*G,(2^6)*G,38*G,26*G]であるので、(2^6)*G,38*G及びその差26*Gより楕円曲線加算を行って102*Gを求める。ここで、38*G及び26*Gはそれぞれカウンタd=3,4のときに計算済であるので、そこでの計算結果を用いる。
ステップS303:d←d−1=0
ステップS304:d=0であるので、102*Gを出力し、終了。
以上のように、上記数値例において楕円曲線演算装置200は正しくスカラ倍点102*Gを求められることがわかる。
【0083】
3.計算フロー図による説明
次に、本実施の形態1における楕円曲線演算装置200の動作について、計算フロー図に従って説明する。
図4は、実施の形態1における楕円曲線演算装置200によるスカラ倍演算の手法(基本的な考え;アプローチ1)を示す計算フロー図である。本実施の形態の楕円曲線演算装置200の計算手順生成部210は、本図の上欄[係数分割の指針]に記されているように、点Gのスカラ倍k*Gの演算に際し、予め、係数kに対する2分割を繰り返していくが、このとき、2のべき乗係数が毎回出現するように分割する(以下、このような係数の分割を「係数分割」という。)。
【0084】
具体的には、図4の下欄[具体例]に示される計算フロー図のように、楕円加算の一方が2のべき乗となるように、高い桁から低い桁に向けて、スカラ係数kの2分割を繰り返す。なお、本図では、点Gの係数だけが示されている(「*G」の表記が省略されている;以下の計算フロー図においても同様)。また、実線矢印は楕円曲線上の加算を示し、3つの加算要素は、加算の対象となる2つの加算要素(うち1つは2のべき乗)とそれら2つの加算要素の差である。
【0085】
例えば、本図では、87*G、つまり、((2^6)+23)*Gを、第1加算要素((2^5)+23)*Gと第2加算要素(2^5)*Gに分割するとともに、それらの差23*Gを算出する。このとき、一方の加算要素(2^5)*Gが点Gの2のべき乗倍となるように分割する。続いて、2のべき乗倍でない加算要素((2^5)+23)*Gについて、同様にして、第1加算要素((2^4)+23)*Gと第2加算要素(2^4)*Gに分割するとともに、それらの差23*Gを算出する。このときも、一方の加算要素(2^4)*Gが点Gの2のべき乗倍となるように分割する。このようにして、分割することができなくなるまで、2のべき乗倍でない加算要素に対する2分割を繰り返すことで計算手順が決定される。
【0086】
このようにして決定された計算手順に対して、楕円曲線演算装置200のスカラ倍演算部220は、低い桁から高い桁に向けて、楕円曲線加算を繰り返すことで、最終的な結果k*Gを求める。例えば、(2^1)*Gと1*Gと1*Gとも用いて、(2^1)*Gと1*Gとの楕円曲線加算を行い、その結果((2^1)+1)*Gを求める。続いて、いま得られた結果((2^1)+1)*Gと(2^1)*Gと1*Gとを用いて、((2^1)+1)*Gと(2^1)*Gとの楕円曲線加算を行う・・・ということを繰り返し(ここでは、合計9回の加算を繰り返し)、最終的な結果87*Gを算出する。
【0087】
なお、個々の楕円曲線加算において、点Gの2のべき乗倍については、予め算出されている値(テーブル記憶部220bに格納された値)を用いることで、その算出が不要となる。また、楕円曲線加算のときに必要とされる差分値(第1加算要素と第2加算要素との差)は、必ず、それまでの楕円曲線加算の過程で出現した値であるので、新たに算出する必要がない。つまり、過去に出現した値を保持しておき、再利用することで足りる。例えば、本図における最後の楕円曲線加算で必要とされる差分値23*Gは、その2つ前の楕円曲線加算で算出された値(2^4+7)*Gに等しいので、新たに算出する必要がない。
【0088】
図5は、実施の形態1における楕円曲線演算装置200によるスカラ倍演算の手法(実施の形態で採用している考え;アプローチ2;アプローチ1を発展させたもの)を示す計算フロー図である。ここでは、本図の上欄[係数分割の指針]に示されるように、上記アプローチ1による加算表現(合計9回の加算形による表現)を短くする(より少ない回数の加算で表現する)ために、加算要素の表現形式として、プラス表現だけでなく、マイナス表現を導入している。なお、プラス表現とは、(2^n)+cという加算形の表現形式であり、マイナス表現とは、(2^(n+1))−dという減算形の表現形式である。
【0089】
つまり、分割の対象となる値として、プラス表現((2^n)+c)*Gとマイナス表現((2^(n+1))−d)*Gとを候補とし、その係数における2のべき乗を除く項(c、−dなど)の絶対値が小さい方の表現形式を採用することにしている。
【0090】
具体的には、図5の下欄[具体例]に示される計算フロー図のように、例えば、分割の対象となる係数として、(2^5)+23が得られた場合には、その値と同じ値を示すマイナス表現(2^6)−9とを比較し、2のべき乗を除く項(5、−9)の絶対値が小さい方の表現形式(2^6)−9を採用することにする。その結果、係数分割後に得られる2つの加算要素の差がより小さくなり、合計分割数が減少することになる。本図に示されるように、上記アプローチ1で9回の加算が必要とされた計算手順が、このアプローチ2では、7回に減少している。
【0091】
4.実施形態1の効果
本実施の形態における楕円曲線演算装置200は、スカラ倍演算部220の処理からもわかるとおり、楕円加算の繰り返し計算において、(2^i)*Gがカウンタ値ごとに出現しており、(2^i)*G(i=1,2,……,n−1)の座標のテーブルを有効に使用することができている。そのため、計算量が削減され、計算速度は、従来の方法より高速になる。詳細な計算量は、kをnビットとするとき、kによって計算量は異なるが、それを平均すると、
(5/4×n−3)×EAdd
である。ここで、EAddは楕円加算の計算量である。
【0092】
従来例3と異なり、2点の差Uは予め計算できないので、Z座標が1とは限らない。そのため、EAdd=4×Mul+2×Sq、EDob=3×Mul+2×Sqである。ただし、Mul、Sqはそれぞれ、GF(p)の乗算、2乗算の計算量であり、一般にSq=0.8×Mulである。これらの式を代入すると、楕円曲線演算装置200の計算量は、
(5/4×n−3)×(4×Mul+2×Sq)=(5×n−12)×Mul+(5/2×n−6)×Sq=(7×n−84/5)×Mul
であり、従来例3の計算量は、
n×(3×Mul+2×Sq)+n×(3×Mul+2×Sq)=6×n×Mul+4×n×Sq=46/5×n×Mul
である。したがって、楕円曲線演算装置200の方が従来例3に比べて、約1.3倍高速である。
【0093】
図6は、図26に示された従来例3の計算手法と本実施の形態1での計算手法(図5の下欄)とを比較する図である。この図から分かるように、例えば、87*Gの演算については、従来例3によれば6回の加算と5回の2倍算が必要とされるのに対し、本実施の形態1によれば7回の加算だけで済む。つまり、計算量にして、従来例3と本実施の形態1とは、50.6:39.2となり、計算速度にして、本実施の形態1は、従来例3の1.3倍だけ高速化される。
以上より、実施形態1によって、高速な楕円曲線演算が可能になり、本発明の実用的価値は非常に大きい。
【0094】
[実施の形態2]
次に、本発明の実施の形態2における楕円曲線演算装置について説明する。
1.楕円曲線演算装置300の構成
図7は、実施の形態2における楕円曲線演算装置300の構成を示すブロック図である。この楕円曲線演算装置300は、実施の形態1と同様に、専用のプログラムを実行するコンピュータ装置又はLSI等の論理回路で実現され、有限体GF(p)上のモンゴメリ型楕円曲線E:B×y^2=x^3+A×x^2+xのパラメータp(素数)、GF(p)の元A、Bと、E(GF(p))に属する点Gと、その(2^i)*G(i=1,2,……,n−1)を予め与えられ、nビットの任意のkを入力として、点Gのスカラ倍k*Gを出力する演算装置であり、点Gの2のべき乗倍(2^i)*Gを有効活用しながら計算する点に特徴を有し、計算手順生成部310とスカラ倍演算部320とから構成される。
【0095】
この楕円曲線演算装置300は、点Gのスカラ倍演算について、2進表現を利用した予備計算(計算機処理に向いた計算)に基づいて計算手順を生成し、生成した計算手順に従って点Gのスカラ倍演算を実行している点で、計算機による処理効率を考慮していない実施の形態1と異なる。
(計算手順生成部310の処理)
【0096】
計算手順生成部310は、点Gのスカラ倍k*Gを算出するための計算手順を生成する予備計算を実行する処理部であり、k*GをGの2のべき乗倍(2^i)*Gを用いた加算形に分割することを繰り返すとともに、得られた加算要素の表現形式(プラス表現/マイナス表現)の切り替わりの種別(加算タイプ)を特定する加算タイプ特定部310aと、加算タイプ特定部310aによって特定された加算タイプを配列として出力する配列生成出力部310bとからなる。
【0097】
具体的には、計算手順生成部210は、図8に示されるフローチャートのように、整数kを入力として、配列{S[i]}(S[i]は配列のi番目の数、1≦i≦|k|)を出力する。ここで、配列S[i]は、k*Gを算出するための繰り返し加算における第i番目の加算のタイプ、即ち、点Gの2のべき乗倍でない加算要素(又は、加算の結果得られる値)の係数の表現形式に着目し、その加算によって係数がプラス表現からプラス表現になった場合に「0」、プラス表現からマイナス表現になった場合に「1」、マイナス表現からマイナス表現になった場合に「2」、マイナス表現からプラス表現になった場合に「3」にセットされる。
【0098】
図8において、加算タイプ特定部310aは、以下の手順に従って、配列{S[i]}を特定する。なお、以下では、
k=k[n−1]×2^(n−1)+k[n−2]×2^(n−2)+……+k[1]×2+k[0]
とおいたときのkのビット表現を[k[n−1]、k[n−2]、……、k[1]、k[0]]とする。
ステップS401:w←kとする。ただし、w←kはwにkを代入することを示している。
ステップS402:カウンタc←n−1とする。
ステップS403:u←w−2^cとする。
ステップS404:u[c−1]が1であるかを判定する。1であるときステップS406へ。それ以外は次のステップへ。
ステップS405:u[c−2]が0であるかを判定する(S405a)。0であるとき、S[c]←0,w←w−2^(c−1)とする(S405b)。1であるとき、S[c]←1、w←w−2^(c−1)、u←w−2^(c−1)とする(S405c)。ステップS407へ。
ステップS406:u[c−2]が1であるかを判定する(S406a)。1であるとき、S[c]←2、w←w−2^c、u←u−2^cとする(406b)。0であるとき、S[c]←3、w←w−2^c、u←w−2^(c−1)とする(S406c)。
ステップS407:w=2^(c−1)+2^(c−2)であるか判定する(S407a)。この式が成り立つ場合、加算タイプ特定部310aは、S[1]←c−1とし、配列生成出力部310bは、配列{S[i]}をスカラ倍演算部320に出力して終了する(S407b)。それ以外は、次のステップへ。
ステップS408:c←c−1とする。ステップS404へ。
【0099】
(スカラ倍演算部320の処理)
スカラ倍演算部320は、計算手順生成部310から出力された計算手順S[i](i=1,2,……)に基づいて、楕円曲線上の加算を繰り返すことで、最終的な計算結果k*Gを算出し出力する演算部であり、点Gの2のべき乗倍((2^i)*G;i=1,2,…)を予め記憶しているテーブル記憶部320b、ワーキング用のメモリである一時記憶部320c、楕円曲線上での加算を行う加算器である楕円加算部320d及び計算手順生成部310からの計算手順S[i]に従って各構成要素320b〜320dを制御する演算制御部320aからなる。
【0100】
このスカラ倍演算部320は、図9に示されるフローチャートに従って、k*Gを算出する。具体的には、演算制御部320aは、以下のステップで、計算・制御を行う。
ステップS501:d←S1とする。楕円加算部320dに楕円加算2^d*G+2^(d−1)*Gを実行させ、Tに代入し、U←2^(d−1)*Gとする。
ステップS502:d←d+1とする。
ステップS503:T'←Tとする。
ステップS504:S[d]の値を判定し(S504a)、以下のように処理する。
(1) S[d]=0または1のとき、楕円加算部320dに、Tと2^(d−1)*G(2点の差はU)の楕円加算を計算させ、その結果をTに代入する(S504b)。
(2) S[d]=2または3のとき、楕円加算部320dに、2^d*GとT(2点の差はU)の楕円加算を計算させ、その結果をTに代入する(S504c)。
【0101】
なお、(2^d)*G等の2のべき乗倍については、テーブル記憶部320bから読み出した値を用いることとし、得られた加算結果については、一時記憶部320cに格納することで変数Tに代入したりする。
ステップS505:d=|k|−1であるか判定し(S505a)、この式を満たす場合、Tを出力し(S505b)、終了する。それ以外は次のステップへ。ステップS506:S[d+1]の値を調べ(S506a)、S[d+1]=1であるとき、U←T'とする(S506b)。S[d+1]=3であるとき、楕円加算部320dに、2^d*Gと−U(2点の差はT)の楕円加算を実行させ、その結果をUに代入する(S506c)。ステップS502へ。
なお、上記のステップで使用される楕円加算の具体的な計算方法は、実施形態1で説明した通りである。
【0102】
(楕円曲線演算装置300の動作)
楕円曲線演算装置300は、入力の整数kを受け取り、計算手順生成部310へ入力する。計算手順生成部310は、入力された整数kより、配列{S[i]}を計算し、スカラ倍演算部320へ入力する。スカラ倍演算部320は、入力された配列{S[i]}より、楕円曲線の点Gのスカラ倍点k*Gを算出し、出力する。
【0103】
2.楕円曲線演算装置300の数値例
以下では、k=102の場合の数値例を示す。
(計算手順生成部310における中間値)
n=7であるため、カウンタcの初期値は、6である。カウンタcの値に対する処理を以下に示す。
(カウンタc=6のとき)
ステップS403:u←w−2^(n−1)=38
ステップS404:u[c−1]=u[5]の判定。u[5]=1(∵u=2^5+6)であるため、ステップS406へ。
ステップS406:u[c−2]=u[4]の判定。u[4]=0であるため、S[6]←3、w←w−2^c=102−2^6=38、u←w−2^(c−1)=38−2^5=6
ステップS407:w=2^(c−1)+2^(c−2)であるかの判定。満たさない
ステップS408:c←c−1=5として、ステップS404へ。
【0104】
(カウンタc=5のとき)
ステップS404:u[c−1]=u[4]の判定。u[4]=0であるため、ステップS405へ。
ステップS405:u[c−2]=u[3]の判定。u[3]=0であるため、S[5]←0、w←w−2^(c−1)=38−2^4=22。ステップS407へ。
ステップS407:w=2^(c−1)+2^(c−2)であるかの判定。満たさない
ステップS408:c←c−1=4として、ステップS404へ。
【0105】
(カウンタc=4のとき)
ステップS404:u[c−1]=u[3]の判定。u[3]=0であるため、ステップS405へ。
ステップS405:u[c−2]=u[2]の判定。u[2]=1であるため、S[4]←1、w←w−2^(c−1)=22−2^3=14、u←w−2^(c−1)=14−2^3=6。ステップS407へ。
ステップS407:w=2^(c−1)+2^(c−2)であるかの判定。満たさない
ステップS408:c←c−1=3として、ステップS404へ。
【0106】
(カウンタc=3のとき)
ステップS404:u[c−1]=u[2]の判定。u[2]=1であるため、ステップS406へ。
ステップS406:u[c−2]=u[1]の判定。u[1]=1であるため、S[3]←2、w←w−2^c=14−2^3=6、u←u−2^(c−1)=6−2^2=2。ステップS407へ。
ステップS407:w=2^(c−1)+2^(c−2)であるかの判定。w=6=2^2+2^1であるため、満たすため、S[1]=c−1=2として、配列{S[i]}を出力し終了。
以上より、計算手順生成部310の出力は、[2、0、2、1、0、3]である。
【0107】
(スカラ倍演算部320の中間値)
次に、スカラ倍演算部320の処理を示す。
S1=2であるため、d=2となる。まず、ステップS501にて、2^2*G+2^1*Gを計算し、Qに代入し、U←2^1*Gとする。次に、ステップS502にて、d←d+1=3とする。以下にそれ以降のdの値に対する処理を示す。
(d=3のとき)
ステップS503:Q'←Q
ステップS504:S[d]=S[3]の値を判定。S[3]=2であるため、2^3*GとQ(2点の差は、2^3*G−Q=(2^3−(2^2+2^1))*G=2*G=U)の楕円加算を行い、Qに代入(Q=14*G)。
ステップS505:d=|k|−1=6であるか判定。満たさない
ステップS506:S[d+1]=S[4]の判定。S[4]=1であるため、U←Q'(=6*G)。ステップS502へ。
【0108】
(d=4のとき)
ステップS503:Q'←Q
ステップS504:S[d]=S[4]の値を判定。S[4]=0であるため、Qと2^3*G(2点の差は、Q−2^3*G=(14−2^3)*G=6*G=U)の楕円加算を行い、Qに代入(Q=22*G)。
ステップS505:d=|k|−1=6であるか判定。満たさない
ステップS506:S[d+1]=S[5]の判定。S[5]=0であるため、ここでの処理はない。ステップS502へ。
【0109】
(d=5のとき)
ステップS503:Q'←Q
ステップS504:S[d]=S[5]の値を判定。S[5]=0であるため、Qと2^4*G(2点の差は、Q−2^4*G=(22−2^4)*G=6*G=U)の楕円加算を行い、Qに代入(Q=38*G)。
ステップS505:d=|k|−1=6であるか判定。満たさない
ステップS506:S[d+1]=S[6]の値を判定。S[6]=3であるため、2^5*Gと−U(2点の差は2^5*G−(−U)=(2^5+6)*G=38*G)の楕円加算を行い、Uに代入(U=26*G)。ステップS502へ。
【0110】
(d=6のとき)
ステップS503:Q'←Q
ステップS504:S[d]=S[6]の値を判定。S[6]=3であるため、2^6*GとQ(2点の差は、2^6*G−Q=(2^6−38)*G=26*G=U)の楕円加算を行い、Qに代入(Q=102*G)。
ステップS505:d=|k|−1=6であるか判定。満たすため、Q(=102*G)を出力し終了。
【0111】
以上のように、上記数値例において楕円曲線演算装置300は正しくスカラ倍点102*Gを求められることがわかる。
【0112】
3.計算フロー図による説明
次に、本実施の形態2における楕円曲線演算装置300の動作について、計算フロー図に従って説明する。
図10は、実施の形態2における楕円曲線演算装置300によるスカラ倍演算の手法を示す計算フロー図である。本実施の形態の楕円曲線演算装置300の計算手順生成部310は、本図の上欄[係数分割の指針]に記されているように、点Gのスカラ倍k*Gの演算に際し、予め、係数kに対する2分割を繰り返していくが、このとき、分割の対象となる係数については、その係数の2進表現における最上位2桁に着目し、「10」である場合には、プラス表現で表現し、一方、「11」である場合には、マイナス表現で表現した上で、係数分割を実行する。そして、係数分割ごとに、分割の対象(係数)の表現形式がどのように切り替わったかを示す加算タイプ(0/1/2/3)を特定する。
【0113】
具体的には、図10の中欄[具体例]に示される計算フロー図のように、分割の対象となる係数102について、その2進表現が1100110であり、最上位2桁が「11」であるので、102を2^7−26というマイナス表現で表現した上で、2^6と2^6−26(=38)とに分割する。続いて、分割の対象となる38について、その2進表現が100110であり、最上位2桁が「10」であるので、38を2^5+6というプラス表現で表現した上で、2^4と2^4+6とに分割する。このとき、第1の係数分割(102に対する分割)によって、分割の対象がマイナス表現からプラス表現になったので、図10の下欄に示される表現形式の切り替わり種別の中から該当するものの値「3」を配列S[i]の値としてセットする。
【0114】
このように、本図の例では、分割対象の係数は、分割に伴って、マイナス表現、プラス表現、プラス表現、マイナス表現、マイナス表現、…と変化しているので、出力される配列S[i]は、3,0,1,2,…となる。
なお、分割対象の表現形式がマイナス表現からプラス表現に切り替わった場合に、分割によって生成された2つの加算要素の差分値についても、分割しておく必要がある。本図の例では、分割対象がマイナス表現(2^7−26)からプラス表現(2^5+6)に切り替わったときに生成された差分値26についても図示される加算要素に分割している。
【0115】
以上のように、実施の形態2では、計算手順生成部310が生成する計算手順S[i]は、スカラ係数kに対する繰り返し分割における対象係数の表現形式の切り替わり情報であり、全ての分割要素(加算要素)を計算手順として出力する実施の形態1と比べ、簡素化された情報となっている。
【0116】
4.実施形態2の効果
本実施の形態における楕円曲線演算装置300は、実施の形態1と同様に、スカラ倍演算部320の処理からもわかるとおり、楕円加算の繰り返し計算において、(2^i)*Gが加算ごとに出現しており、(2^i)*G(i=1,2,……,n−1)の座標のテーブルを有効に使用することができている。そのため、計算量が削減され、従来例3に比べ、計算速度は、約1.3倍高速である。
【0117】
実施の形態1の楕円曲線演算装置200と異なる点は、装置の処理の記述がより計算機に適した形(2進表現と関連した処理)になっていることである。そのため、プログラミングが容易になる。
以上より、実施形態2によって、高速な楕円曲線演算が可能になり、さらにその処理は計算機に適した形になっており、本発明の実用的価値は非常に大きい。
【0118】
[実施の形態3]
次に、本発明の実施の形態3における楕円曲線演算装置について説明する。
1.楕円曲線演算装置400の構成
図11は、実施の形態3における楕円曲線演算装置400の構成を示すブロック図である。この楕円曲線演算装置400は、実施の形態1及び2と同様に、専用のプログラムを実行するコンピュータ装置又はLSI等の論理回路で実現され、有限体GF(p)上のモンゴメリ型楕円曲線E:B×y^2=x^3+A×x^2+xのパラメータp(素数)、GF(p)の元A、Bと、E(GF(p))に属する点Gと、その(2^i)*G(i=1,2,……,n−1)を予め与えられ、nビットの任意のkを入力として、点Gのスカラ倍k*Gを出力する演算装置であり、点Gの2のべき乗倍(2^i)*Gを有効活用しながら計算する点に特徴を有し、計算手順生成部410とスカラ倍演算部420とから構成される。
【0119】
この楕円曲線演算装置400は、点Gのスカラ倍演算について、2進表現を利用した予備計算(計算機処理に向いた計算)に基づいて加算要素の表現形式の切り替わりに関する計算手順を生成する点で実施の形態2と共通し、個々の切り替わり情報ではなく、同一表現形式の連続個数を計算手順として生成する点で実施の形態2と異なる。以下、実施の形態2と異なる点を中心に説明する。
【0120】
(計算手順生成部410の処理)
計算手順生成部410は、点Gのスカラ倍k*Gを算出するための計算手順を生成する予備計算を実行する処理部であり、k*GをGの2のべき乗倍(2^i)*Gを用いた加算形に分割することを繰り返すとともに、得られた加算要素の表現形式の切り替わり点(同一の表現形式が何個連続した後に切り替わるかの情報)を特定する加算要素表現切替点特定部410aと、加算要素表現切替点特定部410aによって特定された切り替わり点を配列として出力する配列生成出力部410bとからなる。
【0121】
具体的には、計算手順生成部410は、図12に示されるフローチャートのように、整数kを入力として、配列{S[i]}(i=1,2,…,S[1]+2)を出力する。ここで、配列{S[i]}は、以下の値から構成される。
【0122】
S[1]:係数分割の結果得られた表現形式の遷移列において出現した表現形式(同一の表現形式が連続する場合には、1個とする)の総数。例えば、分割対象の表現形式が、−(マイナス表現),+(プラス表現),+,−,−であった場合には、3(「−」、「+」、「−」の3個)となる。
【0123】
S[2]:係数分割の最後に得られる加算要素に含まれる「0」(2進表現)の数。なお、係数分割の最後に得られる加算要素は、2進表現で、必ず10…(1と0個以上の0が続く表現)となる。
【0124】
S[3]:係数分割によって得られた表現形式の遷移列において、上位桁から第1番目の表現形式が連続する個数。例えば、分割対象の表現形式が、−,+,+,−,−であった場合には、1(1番目の表現形式「−」は1個)となる。
【0125】
S[4]:係数分割によって得られた表現形式の遷移列において、上位桁から第2番目の表現形式が連続する個数。例えば、分割対象の表現形式が、−,+,+,−,−であった場合には、2(2番目の表現形式「+」は2個)となる。
以下、同様にして、S[S[1]+2]まで続く。
【0126】
図12において、加算要素表現切替点特定部410aは、以下の手順に従って、配列{S[i]}を特定する。
ステップS601:与えられたkを係数分割の対象とする。
ステップS602:分割対象について、実施の形態2と同様の判断(図5の「係数分割の指針」)によって表現形式を特定して記憶しておくとともに、分割対象をその表現形式で表現する。
ステップS603:分割対象を、実施の形態2と同様に、第1加算要素(2のべき乗の項)と第2加算要素とに分割するとともに、それらの差分値を特定する。ステップS604:全ての係数分割が終了したか否かを判断するために、次の分割対象となる第2加算要素が3×2^eで表せるか判断する。
ステップS605:上記ステップS604で肯定的に判断された場合には、次の分割対象の表現形式をマイナス表現とし、その分割対象に対する最後の分割を行う。
ステップS606:最後に、配列生成出力部410bは、それまでの係数分割で得られた分割対象についての表現形式の並びから、出現した表現形式の個数をS[1]にセットし、最後の係数分割で得られた第2加算要素に含まれる「0」(2進表現)の個数をS[2]にセットし、係数分割によって得られた表現形式の遷移列において、上位桁から第1番目の表現形式が連続する個数をS[3]にセットし、同様に、第2番目の表現形式が連続する個数をS[4]にセットし、・・・、最後の分割対象の表現形式が連続する個数をS[S[1]+2]にセットし、スカラ倍演算部420に出力する。
ステップS607:ステップS604において否定的に判断された場合には、さらなる係数分割を続けるために、第2加算要素を新たな分割対象とし、同様の手順(ステップS602〜S604)を繰り返す。
【0127】
(スカラ倍演算部420の処理)
スカラ倍演算部320は、計算手順生成部310から出力された計算手順{S[i]}に基づいて、楕円曲線上の加算を繰り返すことで、最終的な計算結果k*Gを算出し出力する演算部であり、点Gの2のべき乗倍((2^i)*G;i=1,2,…)を予め記憶しているテーブル記憶部420b、ワーキング用のメモリである一時記憶部420c、楕円曲線上での加算を行う加算器である楕円加算部420d及び計算手順生成部410からの計算手順{S[i]}に従って各構成要素420b〜420dを制御する演算制御部420aからなる。
【0128】
このスカラ倍演算部420は、図13に示されるフローチャートに従って、k*Gを算出する。具体的には、演算制御部420aは、以下のステップで、計算・制御を行う。
ステップS701:計算手順生成部410から与えられた配列要素S[2]に基づいて、最初の楕円加算に必要な第1加算要素、第2加算要素及び差分を特定する。
ステップS702〜S704:計算手順生成部410から与えられた配列要素S[1]が示す回数だけ、同一タイプの楕円曲線加算(ステップS703)を繰り返す。
ステップS703:上記S[1]回の楕円曲線加算における第i番目の楕円曲線加算においては、計算手順生成部410から与えられた配列要素S[i+2]が示す回数だけ、同一タイプの楕円曲線加算を繰り返す。
【0129】
2.楕円曲線演算装置400の数値例
次に、本実施の形態3における楕円曲線演算装置400の動作について、具体的な数値例及び計算フロー図を用いて説明する。
(計算手順生成部410の中間値)
図14は、計算手順生成部410による計算手順(配列{S[i]})の生成過程を示す計算フロー図である。本図の上欄[具体例]に示される計算フロー図と図10に示された計算フロー図とを比較して分かるように、本実施の形態における係数分割の基本処理は実施の形態2と同様である。つまり、係数kに対する2分割を繰り返し、このとき、分割の対象となる係数の2進表現における最上位2桁が「10」である場合には、プラス表現で表現し、一方、「11」である場合には、マイナス表現で表現した上で、係数分割を実行する。
【0130】
ただし、本実施の形態の計算手順生成部410は、係数分割において、分割対象の表現形式が何から何に切り替わっていくかを示す配列を生成するではなく、本図の下欄[配列生成(計算手順生成)]に示されるように、何回のステップ(分割)で表現形式が切り替わるかを示す情報を配列{S[i]}として生成する。
【0131】
具体的には、本図に示される係数「102」については、係数分割に伴って、表現形式がマイナス表現、プラス表現、プラス表現、マイナス表現、マイナス表現と遷移したので、(1,2,2)と特定し、それぞれ、配列要素S[3],S[4],S[5]にセットする。そして、いまセットした合計数「3」を配列要素S[1]にセットするとともに、係数分割の最後に得られた加算要素「2」(2進表現で「10」)に含まれる「0」の個数「1」を配列要素S[2]にセットし、計算手順を示す配列{S[i]}として出力する。
【0132】
(スカラ倍演算部420の中間値)
図15は、図14に示された具体例に対応するスカラ倍演算部420の動作を示す図である。つまり、図14に示された配列(3,1,1,2,2)を受け取ったスカラ倍演算部420が図13に示されたフローチャートに従って102*Gの値を算出するまでの計算過程及び中間値が示されている。
【0133】
スカラ倍演算部420は、計算手順生成部410から与えられた配列要素S[1]に基づいて、同一タイプの楕円加算の繰り返し回数dを初期化した後に、最初の楕円加算に必要な第1加算要素W、第2加算要素T及び差分U等を特定する(ステップS801)。
そして、S[3+2]=2より、マイナス表現の加算値を生成する2回の楕円曲線加算を行い、差分値Uを更新する(ステップS802)。
【0134】
続いて、S[2+2]=2より、プラス表現の加算値を生成する2回の楕円曲線加算を行い、差分値Uを更新する(ステップS803)。
最後に、S[1+2]=1より、マイナス表現の加算値を生成する1回の楕円曲線加算を行い、得られた加算結果Tを最終的な結果(102*G)として出力する(ステップS804)。
【0135】
3.実施形態3の効果
本実施の形態における楕円曲線演算装置400は、実施の形態1及び2と同様に、スカラ倍演算部420の処理からもわかるとおり、楕円加算の繰り返し計算において、(2^i)*Gが加算ごとに出現しており、(2^i)*G(i=1,2,……,n−1)の座標のテーブルを有効に使用することができている。そのため、計算量が削減され、従来例3に比べ、計算速度は、約1.3倍高速である。
【0136】
実施の形態1の楕円曲線演算装置200と異なる点は、装置の処理の記述がより計算機に適した形(2進表現と関連した処理)になっていることであり、また、実施の形態2の楕円曲線演算装置300と異なる点は、計算手順生成部410による計算手順の表現が圧縮された短い形式となっていることである。そのため、プログラミングが容易になるとともに、計算過程で必要とされる中間値の個数が抑制される。
【0137】
以上より、実施の形態3によって、高速な楕円曲線演算が可能になり、さらにその処理は計算機に適した形になっているとともに、より小さなワーキングメモリ領域での演算が可能となり、本発明の実用的価値は非常に大きい。
【0138】
[実施の形態4]
次に、本発明の実施の形態4における楕円曲線演算装置について説明する。
1.楕円曲線演算装置500の構成
図16は、実施の形態4における楕円曲線演算装置500の構成を示すブロック図である。この楕円曲線演算装置500は、実施の形態1〜3と同様に、専用のプログラムを実行するコンピュータ装置又はLSI等の論理回路で実現され、有限体GF(p)上のモンゴメリ型楕円曲線E:B×y^2=x^3+A×x^2+xのパラメータp(素数)、GF(p)の元A、Bと、E(GF(p))に属する点Gと、その(2^i)*G(i=1,2,……,n−1)を予め与えられ、nビットの任意のkを入力として、点Gのスカラ倍k*Gを出力する演算装置であり、点Gの2のべき乗倍(2^i)*Gを有効活用しながら計算する点に特徴を有し、演算制御部510とテーブル記憶部520と楕円加算部530とから構成される。
【0139】
この楕円曲線演算装置500は、実施の形態1〜3と異なり、点Gのスカラ倍演算に対して、予備計算によって一連の計算手順を事前に生成しておくのではなく、与えられたkを下位桁から上位桁に向けて解析しながら、楕円曲線加算を繰り返していくことで、最終的な結果k*Gを算出する。つまり、計算手順の生成と楕円曲線加算という2段階ではなく、楕円曲線加算だけで最終的な結果を求めている。
【0140】
演算制御部510は、与えられた係数kに対して、k*Gを算出するための一時的な処理や楕円加算部530に対する制御を行う処理部であり、係数kの2進表現のおける各ビットの値(1/0)を判定するビット判定部510aと、ビット判定部510aによる判定結果に基づいて、楕円曲線加算に必要な3つの値(2つの加算要素とそれらの差分値)を特定する加算要素特定部510bと、ワーキング用のメモリである一時記憶部510cとからなる。
【0141】
テーブル記憶部520は、点Gの2のべき乗倍((2^i)*G;i=1,2,…)を予め記憶しているテーブルであり、実施の形態1のテーブル記憶部220b等と同一である。
【0142】
楕円加算部530は、演算制御部510による制御に従って、演算制御部510から指示された値又はテーブル記憶部520から読み出した値を用いて楕円曲線上の加算を行う加算器等である。
【0143】
2.楕円曲線演算装置500の動作
図17は、本実施の形態における楕円曲線演算装置500の動作を示すフローチャートである。
ステップS901:演算制御部510は、係数kを取得する。
ステップS902:取得した係数kの2進表現における最下位の「1」を特定し、その桁をk[s]とする。そして、その桁k[s]に対応する値2^sを最初の加算対象(2のべき乗と加算される要素)と特定する。
ステップS903〜S907:続いて、その桁k[s]から最上位桁の手前k[n−2]に向けて、順次、桁k[i]の値(1/0)に応じた楕円曲線加算(ステップS904〜S906)を繰り返す。
ステップS904:具体的には、まず、ビット判定部510aは、当該桁k[i]が1か0かを判定する。
【0144】
ステップS905:その結果、k[s]=1であると判定された場合には、加算要素特定部510bは、加算対象をマイナス表現とする加算要素を特定する。まり、加算対象を2^(s+1)−dと表現した場合には、楕円曲線加算に必要な要素として、2^(s+1)−dと2^(s+1)とdとを生成する。そして、それらを用いた楕円曲線加算を実行するように、それらの値や制御指示を楕円加算部530に与える。なお、楕円加算部530は、点Gの2のべき乗倍については、加算要素特定部510bからの指示に従って、テーブル記憶部520から読み出した値を使用する。
ステップS906:一方、ステップS904で当該桁k[i]が0であると判定された場合には、加算要素特定部510bは、加算対象をプラス表現とする加算要素を特定する。つまり、加算対象を2^s+dと表現した場合には、楕円曲線加算に必要な要素として、2^s+dと2^sとdとを生成する。そして、それらを用いた楕円曲線加算を実行するように、それらの値や制御指示を楕円加算部530に与える。
なお、楕円曲線加算によって得られた中間値等は、一時記憶部510cに記憶され、次の楕円曲線加算に用いられる。
【0145】
3.楕円曲線演算装置500の数値例
図18は、具体的な数値に対する楕円曲線演算装置500の動作を示す計算フロー図である。この楕円曲線演算装置500は、k*Gを算出するにあたり、係数kの下位桁から順に参照していくことで、点Gの2のべき乗倍と得られた結果との楕円曲線加算を繰り返していくが、その際に、本図の上欄[楕円曲線加算の指針]に示されるように、着目している係数k[i]の値が「1」である場合には、加算対象(加算の初期値又は直前の楕円曲線加算で得られた値)をプラス表現にした上で、楕円曲線加算を実行し、一方、着目している係数k[i]の値が「0」である場合には、加算対象をマイナス表現にした上で、楕円曲線加算を実行する。
【0146】
具体的には、本図の下欄[具体例]に示されるように、演算制御部510は、まず、与えられたけ係数kの2進表現における最下位の「1」(ここでは、k[s];s=1)を特定する。その桁k[s]に対応する値2^1を最初の加算対象(2のべき乗と加算される要素)と特定する。
【0147】
続いて、その桁k[1]からk[5]に向けて、順次、桁k[i]の値(1/0)に応じた楕円曲線加算を繰り返す。
具体的には、まず、ビット判定部510aは、当該桁k[1]の値を判定する。その結果、k[1]=0より、加算要素特定部510bは、加算対象をマイナス表現とする加算要素を特定する。具体的には、楕円曲線加算に必要な要素として、(2^(1+1)−2)*Gと(2^(1+1))*Gと2*Gとを生成し、楕円加算部530に楕円曲線加算を実行させる。
【0148】
続いて、ビット判定部510aは、次の上位桁k[2]の値を判定する。その結果、k[1]=0より、加算要素特定部510bは、同様にして、加算対象をマイナス表現とする加算要素を特定する。具体的には、楕円曲線加算に必要な要素として、(2^(2+1)−2)*Gと(2^(2+1))*Gと2*Gとを生成し、楕円加算部530に楕円曲線加算を実行させる。
【0149】
続いて、ビット判定部510aは、次の上位桁k[3]の値を判定する。その結果、k[1]=1より、加算要素特定部510bは、加算対象をプラス表現とする加算要素を特定する。具体的には、楕円曲線加算に必要な要素として、(2^3+6)*Gと(2^3)*Gと6*Gとを生成し、楕円加算部530に楕円曲線加算を実行させる。
このようにして、k[1]からk[5]について、プラス表現又はマイナス表現を用いた楕円曲線加算を繰り返すことで、最終的な値k*Gが算出される。
【0150】
4.実施形態4の効果
本実施の形態における楕円曲線演算装置500は、実施の形態1〜3と同様に、楕円加算の繰り返し計算において、(2^i)*Gが加算ごとに出現しており、(2^i)*G(i=1,2,……,n−1)の座標のテーブルを有効に使用することができている。そのため、計算量が削減され、従来例3に比べ、計算速度は、約1.3倍高速である。
【0151】
実施の形態1〜3の楕円曲線演算装置と異なる点は、一連の計算手順を一括で生成するための予備計算を行っていない点である。本実施の形態では、計算手順を一括で生成しておくのではなく、スカラ倍演算における楕円曲線加算ごとに分散して計算手順を生成(表現形式を判断)している。これによって、予備計算とスカラ倍演算とが渾然と一体化されることとなり、個々の楕円曲線加算に必要なパラメータだけが生成されて使用されることとなり、プログラム規模や回路規模が縮小化され、処理速度が向上され得る。
【0152】
以上より、実施の形態4によって、高速な楕円曲線演算が可能になり、さらにその処理は計算機に適した形になっているとともに、より小さな規模のプログラムや回路での実現が可能であり、本発明の実用的価値は非常に大きい。
【0153】
[実施の形態5]
次に、本発明の実施の形態5における楕円曲線演算装置について説明する。
1.楕円曲線演算装置600の構成
図19は、実施の形態5における楕円曲線演算装置600の構成を示すブロック図である。この楕円曲線演算装置600は、実施の形態1と同様に、専用のプログラムを実行するコンピュータ装置又はLSI等の論理回路で実現され、有限体GF(p)上のモンゴメリ型楕円曲線E:B×y^2=x^3+A×x^2+xのパラメータp(素数)、GF(p)の元A、Bと、E(GF(p))に属する点Gと、その点Gの一定倍数の値(n個の値)が予め与えられ、nビットの任意のkを入力として、点Gのスカラ倍k*Gを出力する演算装置であり、点Gの一定倍数の値を有効活用しながら計算する点に特徴を有し、計算手順生成部610とスカラ倍演算部620とから構成される。
【0154】
この楕円曲線演算装置600は、予め保持する点Gの一定倍数の値を用いる点で実施の形態1と共通するが、それらの値が、2*G及び(2^(i+1)+2^i)*G(ただし、i=0,1,2,……,n−2)である点で、(2^i)*G(ただし、i=1,2,……,n−1)を予め保持する実施の形態1と異なる。
【0155】
(計算手順生成部610の処理)
計算手順生成部610は、点Gのスカラ倍k*Gを算出するための計算手順を生成する予備計算を実行する処理部であり、k*GをGの一定倍、つまり、2*G又は(2^(i+1)+2^i)*Gを用いた加算形に分割することを繰り返すとともに、そのときの分割の対象が分割によって得られた加算要素であるか2つの加算要素の差であるか(分割タイプ)を特定する分割対象特定部610aと、分割対象特定部610aによって特定された分割タイプを配列として出力する配列生成出力部610bとからなる。
【0156】
図20は、計算手順生成部610による係数分割の手法を示す計算フロー図である。本実施の形態においては、分割対象特定部610aは、次の2つのルールに従って、係数分割をする。
【0157】
第1のルールは、分割の方法に関するものである。ここでは、分割対象特定部610aは、本図の上欄[係数分割の指針]のルール1に示されるように、分割の対象((2^n)+c)*Gに対して、c≦2^(n−1)である場合には、プラス表現の加算要素に分割、つまり、(2^(n−2)+c)*Gと(2^(n−1)+2^(n−2))*Gとに分割し、c>2^(n−1)である場合には、マイナス表現の加算要素に分割、つまり、(2^(n−1)+d)*Gと(2^n+2^(n−1))*Gとに分割する(ただし、d=2^n−c)。
【0158】
このように、分割によって得られる加算要素の少なくとも1つが、2つの連続する2のべき乗和(2^(n−1)+2^(n−2))となるように分割する。つまり、係数が2のべき乗和(2^(n−1)+2^(n−2))となる加算要素(以下、「第1加算要素」と呼ぶ)と、そうでない加算要素(以下、「第2加算要素」と呼ぶ)とに分割する。なお、係数分割によって2つの連続する2のべき乗和(2^(n−1)+2^(n−2))を生成するのは、後述するように、このような係数倍の点Gの値が予め保持された記憶テーブルを有効に使用して楕円曲線加算を行うためである。
【0159】
第2のルールは、分割の対象に関するものである。ここでは、分割対象特定部610aは、本図の上欄[係数分割の指針]のルール2に示されるように、(i)第2加算要素と、(ii)第1加算要素と第2加算要素との差のうち、大きい方を分割する。つまり、第2加算要素と上記差とを比較し、大きい方に対して分割するという処理を繰り返す。これによって、係数分割の回数が減少される。
【0160】
具体的には、本図のルール2に示されるように、(2^6+7)を分割して得られる第1加算要素(2^5+2^4)、第2加算要素(2^4+7)及び差(2^5−7)において、第2加算要素(2^4+7)と差(2^5−7)とを比較し、大きい方(2^5−7)に対して、次の係数分割を繰り返す。
【0161】
なお、上記比較における残った方(小さい方)の値に対する係数分割が不要であるのは、続く係数分割において必ず出現することになる(係数分割の対象になる)からである。
【0162】
以上の2つのルールに従って係数分割した場合の具体例は、本図の[具体例]に示される通りである。87*Gについて、まず、その係数(87;2^6+23)を第1加算要素(2^5+2^4)と第2加算要素(2^4+23)とに分割し、さらに、それらの差(2^5−23)を算出することで、最初の係数分割を終える。
【0163】
次に、得られた第2加算要素(2^4+23=2^5+7)と差(2^5−23=2^3+1)とを比較し、大きい方(2^5+7)に対して係数分割を行う。その結果、第1加算要素(2^4+2^3)と第2加算要素(2^3+7)とそれらの差(2^4−7)を得る。
【0164】
このようにして、第2加算要素の係数と差の係数のいずれもが、2つの連続する2のべき乗和、又は、2となるまで、繰り返す。なお、このような係数分割を終えた後は、係数分割とは逆の方向(下位桁から上位桁に向けて)に、後述する記憶テーブルを参照しながら楕円曲線加算を繰り返すことで、最終的に、点Gのスカラ倍点(87*G)を得ることができる。
【0165】
図21は、計算手順生成部610の詳細な処理手順を示すフローチャートである。なお、この計算手順生成部610が生成する計算手順については、以下のルールで表現するものとしている。
【0166】
つまり、計算手順生成部610は、kビットの任意の整数kを入力として、配列{S[i]}(S[i]は配列のi番目の数、1≦i≦|k|)を出力する。配列S[i]において、S[1]は、kの2進表現における最下位桁から連続する「0」の個数に関する情報を示し、S[2]は、係数分割における最後の分割対象についての分割タイプを示し、S[i](i=3,4,…)は、第i番目の係数分割のおける分割タイプを示す。
【0167】
具体的には、S[1]は、k=k’×2^eと表現したときにおける値eを示し、S[2]は、以下に示されるように、最後の分割における分割タイプを示し、S[i](i=3,4,…)は、第i番の係数分割において、その分割後に分割されるものが第2加算要素であるか(そのときには、第1の分割タイプであることを示すように、S[i]=1とする)、又は、その分割後に分割されるものが両加算要素の差であるか(そのときには、第2の分割タイプであることを示すように、第S[i]=2とする)を示す。ここで、k[1]及びk[2]については、
(1)k’=1の場合には(特殊な場合であるが)、
S[1]=1、S[2]=3とし、
(2)k’=3の場合には(特殊な場合であるが)、
S[1]=e、S[2]=4とし、
(3)それ以外は(ほとんどの場合であるが)、
(a)最後の分割対象となる係数が2^2+1の場合には、
S[1]=e、S[2]=1とし、
(b)最後の分割対象となる係数が2^3+1の場合には、
S[1]=e、S[2]=2としている。
なお、上記(3)の場合は、最後の分割対象となる係数は、上記(a)及び(b)のいずれかになることがわかっている。
【0168】
図21において、分割対象特定部610aは、以下の手順に従って、配列{S[i]}を特定する。なお、以下では、
k=k[n−1]×2^(n−1)+k[n−2]×2^(n−2)+……+k[1]×2+k[0]
とおいたときのkのビット表現を[k[n−1]、k[n−2]、……、k[1]、k[0]]とする。
ステップS951:k=k’×2^eを満たす最大のe,k’を求める。
ステップS952:処理対象となるビット位置を示すカウンタc←n−e−1,配列S[i]の要素を指定するインデックスc1←2とする。
ステップS953:k’=1であるか判定。k’=1の場合、上記(1)のケースに相当し、ステップS954へ。それ以外はステップS955へ。
ステップS954:S[1]←1,S[2]←3,S[3]←2,S[4]←2,…,S[e]←2として(S954a)、配列{S[i]}を出力し(S954b)、終了。
ステップS955:k’=3であるか判定(S955a)。k’=3の場合、上記(2)のケースに相当し、S[1]←e,S[2]←4として(S955b)、配列{S[i]}を出力し(S955c)、終了。
【0169】
ステップS956:k’[c−1]=1であるか判定(S956a)。k’[c−1]=1の場合、マイナス表現による係数分割に相当し、c←c+1,c2←0として(S956b)、ステップS958へ。それ以外は、プラス表現による係数分割に相当し、次のステップへ。
ステップS957:k’[c−2]=0,k’[c−3]=0の両方が成り立つか判定(S957a)。両方成り立つ場合は、この係数分割の次に分割されるものが両加算要素の差となるケースであるので、c2←−1として(S957b)、次のステップへ。それ以外は、この係数分割の次に分割されるものが第2加算要素となるケースであるので、ステップS959へ。
ステップS958:k’←2^c+2^(c−1)−k’としてk’を更新し,S[c1]←2とセットすることで、第2の分割タイプによる係数分割を終える。ステップS961へ。
ステップS959:k’[c−2]=0が成り立つか判定(S959a)。成り立つ場合、c2←−1(S959b),成り立たない場合は、c2←0(S959c)とする。
【0170】
ステップS960:k’←k’−2^(c−1)−2^(c−2)としてk’を更新し,S[c1]←1とセットすることで、第1の分割タイプによる係数分割を終える。
ステップS961:次の桁に移行するために、c←c−1+c2,c1←c1+1とする。
ステップS962:k’=5またはk’=9であるか判定。k’=5の場合、上記(3)(a)のケースに相当し、次のステップへ。k’=9の場合、上記(3)(b)のケースに相当し、ステップS964へ。それ以外は、さらに係数分割の必要があるので、ステップS956へ戻り、分割対象が「5」又は「9」となるまで、同様の処理を繰り返す。
ステップS963:S[1]←e,S[2]←1として、配列{S[i]}を出力し、終了。
ステップS964:S[1]←e,S[2]←2として、配列{S[i]}を出力し、終了。
【0171】
(スカラ倍演算部620の処理)
スカラ倍演算部620は、計算手順生成部610から出力された計算手順S[i](i=1,2,……)に基づいて、楕円曲線上の加算を繰り返すことで、最終的な計算結果k*Gを算出し出力する演算部であり、点Gの一定倍を予め記憶しているテーブル記憶部620b、ワーキング用のメモリである一時記憶部620c、楕円曲線上での加算を行う加算器である楕円加算部620d及び計算手順生成部610からの計算手順S[i]に従って各構成要素620b〜620dを制御する演算制御部620aからなる。
【0172】
テーブル記憶部620bは、図22に示されるように、n個の点Gの一定倍、つまり、2*Gと(2^(i+1)+2^i)*G(ただし、i=0,1,2,……,n−2)を予め記憶しているROM等である。つまり、記憶している値の個数は、実施の形態1とほぼ同じであるが、その値が異なっている。
【0173】
この演算制御部620aは、計算手順生成部610による図20の計算フロー(係数分割)とは逆の手順、即ち、テーブル記憶部620bに格納された値を参照しながら、低い桁から高い桁に向けて、楕円加算を繰り返すように各構成要素620b〜620dを制御することによって、k*Gを算出させる。具体的には、演算制御部620aは、図23のフローチャートに示されるように、以下のステップに従って、計算・制御を行う。
ステップS971:まず、S[2]を判定(S971a)。S[2]=4の場合、上記(2)のケースに相当し、k*Gをテーブル記憶部620bから参照して(S971b)、出力し(S971c)、終了。
ステップS972:k[n−2]=1であるか判定(S972a)。成り立つ場合、必要な係数分割の回数(桁数)を示すカウンタc1←n−e(S972b),それ以外は、c1←n−e−1とする(S972c)。
【0174】
ステップS973:S[2]=3であるか判定(S973a)。成り立つ場合、上記(1)のケースに相当し、U←G,V←2*G,c2←1として(S973b)、ステップS975へ。それ以外は、ステップS974へ。なお、本フローでは、Uは第2加算要素、Vは第1加算要素と第2加算要素との差を格納するパラメータである。また、2*Gについては、テーブル記憶部620bから読み出された値である。
ステップS974:S[2]=1であるか判定(S974a)。成り立つ場合、U←2*G,V←G,c2←1とし(S974b)、それ以外は、U←3*G,V←3*G,c2←2,c1←c1−1とする(S974c)。なお、2*G及び3*Gについては、テーブル記憶部620bから読み出された値である。
ステップS975:以上のようにして、初期値U及びVを決定した後に、テーブル記憶部620bを参照することにより、W←(2^c2+2^(c2−1))*Gとする。Wは第1加算要素を格納するパラメータである。なお、(2^c2+2^(c2−1))*Gについては、テーブル記憶部620bから読み出された値である。
【0175】
ステップS976:S[c1]=1であるか判定。成り立つ場合、第1の分割タイプに対応する楕円曲線加算、即ち、第2加算要素Uを生成するために、次のステップへ。それ以外は、第2の分割タイプに対応する楕円曲線加算、即ち、両加算要素の差Vを生成するために、ステップS978へ。
ステップS977:楕円加算部620dに楕円加算を実行させることで、U←W+U(差はV)を算出させる。
ステップS978:楕円加算部620dにV←W+U(差はV)を算出させる。ステップS979:c1=2であるか判定。成り立つ場合は、最後の楕円曲線加算を実行するために、ステップS981へ。
ステップS980:c1←c1−1,c2←c2+1として、c1=2となるまで、同様の楕円曲線加算を繰り返すために、ステップS975へ戻る。
ステップS981:テーブル記憶部620bを参照することで、W←(2^c2+1+2^c2)*Gとし,楕円加算部620dにU←W+U (差はV)を計算させ(S981a)、その結果Uを最終結果として出力し(S981b)、終了する。
【0176】
なお、(2^c2+2^(c2−1))*Gについては、テーブル記憶部620bから読み出された値である。また、上記のステップで使用される楕円加算の具体的な計算方法は、実施形態1で説明した通りである。
(楕円曲線演算装置600の動作)
【0177】
楕円曲線演算装置600は、入力された整数kを受け取り、計算手順生成部610へ入力する。計算手順生成部610は、その整数kより、配列{S[i]}を計算し、スカラ倍演算部620へ入力する。スカラ倍演算部620は、入力された配列{S[i]}より、テーブル記憶部620bに格納された値を参照しながら楕円曲線加算を繰り返すことで、楕円曲線の点Gのスカラ倍点k*Gを算出し、出力する。
【0178】
2.楕円曲線演算装置600の数値例
以下では、図24に示されるk=102の場合の数値例を示す。
(計算手順生成部610での処理)
ここでは、計算手順生成部610による機械的な処理(ビット処理)ではなく、その意味内容の観点から説明する。
【0179】
図24の[計算手順生成]に示されるように、分割対象特定部610aは、102=51×2^1より、k’=51、e=1と特定する(ステップS952)。なお、k’=51より、k’[5]、k’[4]、k’[3]、k’[2]、k’[1]、k’[0]は、それぞれ、1,1,0,0,1,1である。
【0180】
次に、k’に対して係数分割を繰り返す(ステップS952〜S962)。まず、k’=51=2^5+19に対して、19>2^4より、マイナス表現による係数分割、即ち、2^5+19=2^6−13を、第1加算要素の係数(2^5+2^4)と第2加算要素の係数(2^4−13)とに分割し、さらに、それらの差(2^5+13)を算出する。そして、第2加算要素の係数(2^4−13)と差(2^5+13)と比較し、差のほうが大きいので、次には、その差(2^5+13)を分割する。同時に、そのこと(第2の分割タイプによる係数分割)を示す配列要素(S[3]=2)を決定する(ステップS958)。
【0181】
次に、分割の対象となる係数(2^5+13)に対しては、13≦2^4より、プラス表現による係数分割、即ち、第1加算要素の係数(2^4+2^3)と第2加算要素の係数(2^3+13)とに分割し、さらに、それらの差(2^4−1)を算出する。そして、第2加算要素の係数(2^3+13)と差(2^413)と比較し、第2加算要素のほうが大きいので、次には、その第2加算要素(2^3+13)を分割する。同時に、そのこと(第1の分割タイプによる係数分割)を示す配列要素(S[4]=1)を決定する(ステップS960)。
【0182】
以下、同様の係数分割を繰り返すことにより、配列要素S[5]=1を決定し(ステップS960)、最後の分割対象「9」を得る。この分割対象「9」は、上記(3)(b)のケースに相当することから、S[1]=e=1、S[2]=2と決定する(ステップS964)。
【0183】
最後に、配列生成出力部610bは、以上の係数分割で得られた配列S[1]、S[2]、S[3]、S[4]、S[5]の値、即ち、{1,2,2,1,1}をスカラ倍演算部620に出力する(ステップS965)。
【0184】
(スカラ倍演算部620での処理)
次に、計算手順生成部610から上記配列{S[i]}を取得したスカラ倍演算部620の処理について、機械的な処理(ビット処理)ではなく、その意味内容の観点から説明する。
【0185】
図24の[スカラ倍演算]に示されるように、スカラ倍演算部620は、まず、S[2]=2、S[1]=1より、初期値として、第2加算要素U(6*G)と両加算要素の差(6*G)を得る(ステップS974c;なお、S[1]=1より、各係数は2^1倍される)。
【0186】
そして、テーブル記憶部620bから第1加算要素W((2^3+2^2)*G)を読み出し(ステップS975)、S[5]=1より(ステップS976)、テーブル記憶部620bから参照した第1加算要素W((2^3+2^2)*G)と初期値の第2加算要素U((2^2+2^1)*G)との楕円加算を実行し、その結果を、第2加算要素U((2^4+2^1)*G)とする(ステップS977)。
【0187】
同様にして、S[4]=1より(ステップS976)、テーブル記憶部620bから参照した第1加算要素W((2^4+2^3)*G)と直前で算出した第2加算要素U((2^3+10)*G)との楕円加算を実行し、その結果を、第2加算要素U((2^5+10)*G)とする(ステップS977)。
【0188】
続いて、S[3]=2より(ステップS976)、テーブル記憶部620bから参照した第1加算要素W((2^5+2^4)*G)と直前で算出した第2加算要素U((2^4+26)*G)との楕円加算を実行し、その結果を、差分値V((2^6+26)*G)とする(ステップS978)。
【0189】
最後に、テーブル記憶部620bから参照した第1加算要素W((2^6+2^5)*G)と直前で算出した差分値V((2^6+26)*G)に基づいて、第1加算要素W((2^6+2^5)*G)と第2加算要素U((2^5−26)*G)との楕円加算を実行し(ステップS981a)、その結果を、最終的な結果(2^7−26)*G、つまり、102*Gの結果として出力する(ステップS981b)。
【0190】
以上のように、実施の形態5では、計算手順生成部610が生成する計算手順S[i]は、予め保持された点Gの2のべき乗倍の値を用いるのではなく、点Gに対して2つの連続する2のべき乗和だけスカラ倍された値を用いるように、係数分割している。これによって、実施の形態1と比べ、より少ない回数の楕円加算で、点Gのスカラ倍k*Gが算出される。
【0191】
4.実施形態5の効果
本実施の形態の楕円曲線演算装置600によれば、例えば、図10に示された実施の形態2における102*Gの計算フロー(6回の加算)と、図24に示された本実施の形態のもの(4回の加算)と比較してわかるように、102*Gについては、実施の形態1〜4に比べ、1.5倍高速である。つまり、従来例3と比べ、2.26倍高速となる。
【0192】
また、87*Gの計算であれば、本実施の形態の楕円曲線演算装置600によれば、4回の加算で済み、7回の加算を必要とする実施の形態1〜4に比べ、1.75倍高速となり、従来例3と比べ、2.26倍高速となる。
なお、本実施の形態におけるテーブル記憶部620bに格納されている値は、実施の形態1〜4と異なるが、その個数は、ほぼ同じであるので(実施の形態1〜4では(n−1)個の値が格納され、実施の形態5ではn個の値が格納されているので)、その記憶容量はほぼ同一である。
【0193】
以上より、実施形態5によって、記憶テーブルのサイズがほぼ同一であるにも拘わらず、実施の形態1〜4に比べ、よりも高速に、点Gのスカラ倍演算が実行され、リアルタイム通信における秘匿化等の応用することができ、本発明の実用的価値は非常に大きい。
【0194】
なお、実施の形態5では、テーブル記憶部620bに、n個の点Gの一定倍、つまり、2*Gと(2^(i+1)+2^i)*G(ただし、i=0,1,2,……,n−2)が予め記憶されていたが、これらの一部だけが記憶されていてもよい。例えば、2*Gについては、スカラ倍演算部620が2倍算を行うことによって算出し、テーブル記憶部620b内に格納しなくてもよい。これによって、テーブル記憶部620bに予め格納される値の個数は、(n−1)個となり、実施の形態1〜4と同じになる。
【0195】
以上の実施形態1〜5における楕円曲線演算装置は、楕円曲線を用いた公開鍵暗号におけるシステムパラメータであるベース点Gのスカラ倍伝算を高速を行うことができ、公開鍵暗号を用いた秘密通信やデジタル署名の計算エンジンとして有効である。このような楕円曲線演算装置は、汎用のコンピュータで実行されるプログラムとして実現したり、LSI等のICとして実現することができる。そして、インターネット等の通信ネットワークにおける電子決済、電子署名、電子メール、あるいは、携帯電話機等による通信データの秘匿化に好適である。
【0196】
【発明の効果】
以上の説明から明らかなように、本発明に係る楕円曲線演算装置は、以下の条件を満たすスカラ倍演算を実行する。
(1)ワイヤーシュトラス型楕円曲線よりも高速に楕円曲線演算(加算/2倍算)を行うことができるモンゴメリ型楕円曲線上の演算を行う。
(2)楕円曲線暗号におけるシステムパラメータであるベース点Gのスカラ倍演算において、点Gの一定係数倍の点、つまり、点Gの2のべき乗(2^i)*G倍の値、あるいは、点Gの連続する2つの2のべき乗和(2^(n−1)+2^(n−2))*G倍の値のいずれかを格納したテーブルを有効活用することができる。
【0197】
以上のことから、本発明に係る楕円曲線演算装置は、高速な楕円曲線演算が可能であり、秘密通信やデジタル署名における暗号及び復号処理を高速に実行することができる。特に、本発明は、インターネットを利用した電子決済や電子署名、コンピュータや携帯電話機等の通信機器による電子メールや通話の秘匿化に必要な暗号化及び復号化処理を大幅に高速化させることができ、デジタル通信が広く普及した今日における実用的価値は極めて高い。
【図面の簡単な説明】
【図1】本発明の実施の形態1における楕円曲線演算装置の構成を示す機能ブロック図である。
【図2】同楕円曲線演算装置の計算手順生成部の動作を示すフローチャートである。
【図3】同楕円曲線演算装置のスカラ倍演算部の動作を示すフローチャートである。
【図4】同楕円曲線演算装置によるスカラ倍演算の手法(基本的な考え;アプローチ1)を示す計算フロー図である。
【図5】同楕円曲線演算装置によるスカラ倍演算の手法(アプローチ1を発展させたアプローチ2)を示す計算フロー図である。
【図6】実施の形態1と従来例3での計算手法を比較説明するための図である。
【図7】本発明の実施の形態2における楕円曲線演算装置の構成を示す機能ブロック図である。
【図8】同楕円曲線演算装置の計算手順生成部の動作を示すフローチャートである。
【図9】同楕円曲線演算装置のスカラ倍演算部の動作を示すフローチャートである。
【図10】同楕円曲線演算装置によるスカラ倍演算の手法を示す計算フロー図である。
【図11】本発明の実施の形態3における楕円曲線演算装置の構成を示す機能ブロック図である。
【図12】同楕円曲線演算装置の計算手順生成部の動作を示すフローチャートである。
【図13】同楕円曲線演算装置のスカラ倍演算部の動作を示すフローチャートである。
【図14】同楕円曲線演算装置の計算手順生成部による計算手順(配列{S[i]})の生成過程を示す計算フロー図である。
【図15】図14に示された具体例に対応するスカラ倍演算部の動作を示す図である。
【図16】本発明の実施の形態4における楕円曲線演算装置の構成を示す機能ブロック図である。
【図17】同楕円曲線演算装置の動作を示すフローチャートである。
【図18】同楕円曲線演算装置の動作を示す計算フロー図である。
【図19】本発明の実施の形態5における楕円曲線演算装置の構成を示す機能ブロック図である。
【図20】同楕円曲線演算装置の計算手順生成部による係数分割の手法を示す計算フロー図である。
【図21】同楕円曲線演算装置の計算手順生成部の詳細な処理手順を示すフローチャートである。
【図22】同楕円曲線演算装置のテーブル記憶部の格納データを示す図である。
【図23】同楕円曲線演算装置の演算制御部による計算・制御の手順を示すフローチャートである。
【図24】同楕円曲線演算装置によるスカラ倍演算の具体例を示す図である。
【図25】エルガマル署名によるデジタル署名方式の手順を示すシーケンス図である。
【図26】従来例3におけるスカラ倍演算の計算手順を模式的に示す計算フロー図である。
【符号の説明】
200、300、400、500、600 楕円曲線演算装置
210、310、410、610 計算手順生成部
210a、510a 加算要素特定部
210b、310b、410b、610b 配列生成出力部
220、320、420、620 スカラ倍演算部
220a、320a、420a、510、620a 演算制御部
220b、320b、420b、520、620b テーブル記憶部
220c、320c、420c、510c、620c 一時記憶部
220d、320d、420d、530、620d 楕円加算部
310a 加算タイプ特定部
410a 加算要素表現切替点特定部
510a ビット判定部
610a 分割対象特定部
Claims (14)
- nビットの任意の整数kを入力とし、予め与えられた有限体F上のモンゴメリ型楕円曲線E上の点Gに対して、スカラ倍点k*Gを出力する楕円曲線演算装置であって、
予め決定されたn以下の種類のスカラを係数とする点Gのスカラ倍点をG,2*G,(2^2)*G,…,(2^(n−1))*Gのいずれかを第1加算要素とする前記楕円曲線E上の加算を繰り返すことによって前記スカラ倍点k*Gを算出するスカラ倍演算手段と、
前記楕円曲線E上の加算の繰り返し手順を示す計算手順を生成する計算手順生成手段とを備え、
前記スカラ倍演算手段は、前記第1加算要素の少なくとも一部を記憶するテーブル記憶部を有し、前記テーブル記憶部に記憶された点を参照して第1加算要素として、前記計算手順生成手段が生成した計算手順に従って前記スカラ倍点k*Gを算出し、
前記計算手順生成手段は、自然数m,uに対して、
(2^(m−1)+u)*G、(2^(m−1))*G及びu*Gから(2^m+u)*Gを算出する第1計算、又は、
(2^m)*G、(2^m−u)*G及びu*Gから(2^(m+1)−u)*Gを算出する第2計算、又は、
(2^m)*G、−(2^m−u)*G及び(2^(m+1)−u)*Gからu*Gを算出する第3計算を前記楕円曲線E上の加算とする計算手順を生成する
ことを特徴とする楕円曲線演算装置。 - 前記計算手順生成手段は、前記kの各ビットの値に応じて、前記楕円曲線E上の加算と前記第1〜第3計算の少なくとも1つとを対応づけることにより、前記計算手順を生成する
ことを特徴とする請求項1記載の楕円曲線演算装置。 - 前記計算手順生成手段は、前記kのビットの値が0である場合には、そのビットに対応する前記楕円曲線E上の加算として少なくとも前記第1計算を対応させ、前記ビットの値が1である場合には、そのビットに対応する前記楕円曲線E上の加算として少なくとも前記第2計算を対応させることにより、前記計算手順を生成する
ことを特徴とする請求項2記載の楕円曲線演算装置。 - 前記計算手順生成手段は、前記楕円曲線E上の加算の繰り返しにおける個々の加算において、前記第1加算要素と加算される第2加算要素の表現形式が前記第1計算におけるプラス表現(2^(m−1)+u)*Gであるか、前記第2計算におけるマイナス表現(2^m−u)*Gであるかを特定する表現形式情報を前記計算手順として生成し、
前記スカラ倍演算手段は、前記楕円曲線E上の加算の繰り返しにおける個々の加算においては、前記表現形式情報に基づいて、前記第1〜第3計算のいずれかの計算を行う
ことを特徴とする請求項1記載の楕円曲線演算装置。 - 前記表現形式情報は、前記楕円曲線E上の加算の繰り返しにおける加算ごとに、前記第2加算要素が前記プラス表現及び前記マイナス表現のいずれの表現からいずれの表現に切り替わるかを示す情報である
ことを特徴とする請求項4記載の楕円曲線演算装置。 - 前記表現形式情報は、前記楕円曲線E上の加算の繰り返しにおいて、前記第2加算要素が前記プラス表現及び前記マイナス表現のいずれかの表現形式で連続して出現する個数を示す情報である
ことを特徴とする請求項4記載の楕円曲線演算装置。 - nビットの任意の整数kを入力とし、予め与えられた有限体F上のモンゴメリ型楕円曲線E上の点Gに対して、スカラ倍点k*Gを出力する楕円曲線演算装置であって、
予め決定されたn以下の種類のスカラを係数とする点Gのスカラ倍点を2*G,3*G ,6*G,12*G,…,(2^(n−1)+2^(n−2))*Gのいずれかを第1加算要素とする前記楕円曲線E上の加算を繰り返すことによって前記スカラ倍点k*Gを算出するスカラ倍演算手段と、
前記楕円曲線E上の加算の繰り返し手順を示す計算手順を生成する計算手順生成手段を備え、
前記スカラ倍演算手段は、前記第1加算要素の少なくとも一部を記憶するテーブル記憶部を有し、前記テーブル記憶部に記憶された点を参照して第1加算要素として、前記計算手順生成手段が生成した計算手順に従って前記スカラ倍点k*Gを算出し、
前記計算手順生成手段は、自然数m,uに対して、
第1加算要素(2^(m−1)+2^(m−2))*G、第2加算要素(2^(m−2)+u)*G及び前記第1加算要素と前記第2加算要素との差(2^(m−1)−u)から(2^m+u)*Gを算出する第1計算、又は、
第1加算要素(2^m+2^(m−1))*G、第2加算要素(2^(m−1)−u)*G及び前記第1加算要素と前記第2加算要素との差(2^m+u)から(2^(m+1)−u)*Gを算出する第2計算を前記楕円曲線E上の加算とする計算手順を生成する
ことを特徴とする楕円曲線演算装置。 - 前記計算手順生成手段は、前記第1又は前記第2計算による楕円曲線E上の加算によって得られた結果を、次の繰り返し加算における第2加算要素とするか第1加算要素と第2加算要素との差とするかを示す分割対象情報を前記計算手順として生成する
ことを特徴とする請求項7記載の楕円曲線演算装置。 - 前記計算手順生成手段は、前記kをk’×2^eと表現した場合における値k’及び値eに関する情報を初期情報として前記計算手順に含ませて生成する
ことを特徴とする請求項8記載の楕円曲線演算装置。 - 前記計算手順生成手段は、前記k’が1、3及びそれ以外の値のいずれであるかを示す情報を前記初期情報に含ませて生成する
ことを特徴とする請求項9記載の楕円曲線演算装置。 - 請求項1〜10のいずれか1項に記載の楕円曲線演算装置を用いた暗号装置。
- 自然数nに対しnビットの任意の整数kを入力とし、予め与えられた有限体F上のモンゴメリ型楕円曲線E上の点Gに対して、スカラ倍点k*Gを出力する楕円曲線演算装置で用いられる楕円曲線演算方法であって、
前記楕円曲線演算装置は、G,2*G,(2^2)*G,…,(2^(n−1))*Gの少なくとも一部を記憶するテーブル記憶部、計算手順生成手段及びスカラ倍演算手段を有し、
前記楕円曲線演算方法は、
前記計算手順生成手段が、前記楕円曲線E上の加算の繰り返し手順を示す計算手順を生成する計算手順生成ステップと、
前記スカラ倍演算手段が、G,2*G,(2^2)*G,…,(2^(n−1))*Gのいずれかを第1加算要素とする前記楕円曲線E上の加算を繰り返すことによって前記スカラ倍点k*Gを算出するスカラ倍演算ステップと、を含み、
前記計算手順生成ステップでは、自然数m,uに対して、
(2^(m−1)+u)*G、(2^(m−1))*G及びu*Gから(2^m+u)*Gを算出する第1計算、又は、
(2^m)*G、(2^m−u)*G及びu*Gから(2^(m+1)−u)*Gを算出する第2計算、又は、
(2^m)*G、−(2^m−u)*G及び(2^(m+1)−u)*Gからu*Gを算出する第3計算を前記楕円曲線E上の加算とする計算手順を生成し、
前記スカラ倍演算ステップでは、前記テーブル記憶部に記憶された点を参照して第1加算要素として、前記計算手順生成ステップが生成した計算手順に従って前記スカラ倍点k*Gを算出する
ことを特徴とする楕円曲線演算方法。 - 自然数nに対しnビットの任意の整数kを入力とし、予め与えられた有限体F上のモンゴメリ型楕円曲線E上の点Gに対して、スカラ倍点k*Gを出力する楕円曲線演算装置で用いられる楕円曲線演算方法であって、
前記楕円曲線演算装置は、2*G,3*G,6*G,12*G,…,(2^(n−1)+2^(n−2))*Gの少なくとも一部を記憶するテーブル記憶部、計算手順生成手段及びスカラ倍演算手段を有し、
前記楕円曲線演算方法は、
前記計算手順生成手段が、前記楕円曲線E上の加算の繰り返し手順を示す計算手順を生成する計算手順生成ステップと、
前記スカラ倍演算手段が、2*G及び3*G,6*G,12*G,…,(2^(n−1)+2^(n−2))*Gのいずれかを第1加算要素とする前記楕円曲線E上の加算を繰り返すことによって前記スカラ倍点k*Gを算出するスカラ倍演算ステップとを含み、
前記計算手順生成ステップでは、自然数m,uに対して、
第1加算要素(2^(m−1)+2^(m−2))*G、第2加算要素(2^(m−2)+u)*G及び前記第1加算要素と前記第2加算要素との差(2^(m−1)−u)から(2^m+u)*Gを算出する第1計算、又は、
第1加算要素(2^m+2^(m−1))*G、第2加算要素(2^(m−1)−u)*G及び前記第1加算要素と前記第2加算要素との差(2^m+u)から(2^(m+1)−u)*Gを算出する第2計算を前記楕円曲線E上の加算とする計算手順を生成し、
前記スカラ倍演算ステップでは、前記テーブル記憶部に記憶された点を参照して第1加算要素として、前記計算手順生成ステップが生成した計算手順に従って前記スカラ倍点k*Gを算出する
ことを特徴とする楕円曲線演算方法。 - 自然数nに対しnビットの任意の整数kを入力とし、予め与えられた有限体F上のモンゴメリ型楕円曲線E上の点Gに対して、スカラ倍点k*Gを出力する楕円曲線演算装置のためのプログラムであって、
請求項12または13に記載の楕円曲線演算方法におけるステップ
をコンピュータに実行させる
ことを特徴とするプログラム。
Priority Applications (3)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2002094081A JP4034585B2 (ja) | 2002-01-28 | 2002-03-29 | 楕円曲線演算装置及び楕円曲線演算方法 |
| EP02026894A EP1331552A3 (en) | 2002-01-28 | 2002-12-03 | Device and method for calculations based on elliptical curves |
| US10/314,316 US7486789B2 (en) | 2002-01-28 | 2002-12-09 | Device and method for calculation on elliptic curve |
Applications Claiming Priority (3)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2002-19071 | 2002-01-28 | ||
| JP2002019071 | 2002-01-28 | ||
| JP2002094081A JP4034585B2 (ja) | 2002-01-28 | 2002-03-29 | 楕円曲線演算装置及び楕円曲線演算方法 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| JP2003288013A JP2003288013A (ja) | 2003-10-10 |
| JP4034585B2 true JP4034585B2 (ja) | 2008-01-16 |
Family
ID=26625646
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP2002094081A Expired - Fee Related JP4034585B2 (ja) | 2002-01-28 | 2002-03-29 | 楕円曲線演算装置及び楕円曲線演算方法 |
Country Status (3)
| Country | Link |
|---|---|
| US (1) | US7486789B2 (ja) |
| EP (1) | EP1331552A3 (ja) |
| JP (1) | JP4034585B2 (ja) |
Families Citing this family (21)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US7379546B2 (en) * | 2004-03-03 | 2008-05-27 | King Fahd University Of Petroleum And Minerals | Method for XZ-elliptic curve cryptography |
| ATE533103T1 (de) | 2005-01-18 | 2011-11-15 | Certicom Corp | Beschleunigte verifikation digitaler signaturen und öffentlicher schlüssel |
| US8467535B2 (en) * | 2005-01-18 | 2013-06-18 | Certicom Corp. | Accelerated verification of digital signatures and public keys |
| FR2881300B1 (fr) * | 2005-01-21 | 2007-03-16 | Gemplus Sa | Procede de generation d'une courbe elliptique, application a un procede cryptographique, et procede cryptographique une telle courbe |
| WO2006118086A1 (ja) | 2005-04-28 | 2006-11-09 | Matsushita Electric Industrial Co., Ltd. | プログラム変換装置、暗号処理装置、暗号処理方法 |
| WO2007045258A1 (en) | 2005-10-18 | 2007-04-26 | Telecom Italia S.P.A. | A method for scalar multiplication in elliptic curve groups over prime fields for side-channel attack resistant cryptosystems |
| EP1946204B1 (en) * | 2005-10-28 | 2010-04-28 | Telecom Italia S.p.A. | A method for scalar multiplication in elliptic curve groups over binary polynomial fields for side-channel attack-resistant cryptosystems |
| EP2293491B1 (en) | 2005-11-03 | 2012-08-22 | Certicom Corp. | Simultaneous scalar multiplication method |
| JP4682852B2 (ja) * | 2006-01-16 | 2011-05-11 | ソニー株式会社 | 暗号処理装置、および暗号処理方法、並びにコンピュータ・プログラム |
| CA2593723C (en) * | 2007-06-27 | 2016-04-19 | Certicom Corp. | Multi-dimensional montgomery ladders for elliptic curves |
| US8300808B2 (en) * | 2007-08-09 | 2012-10-30 | National University Corporation Okayama University | Arithmetic operation method and arithmetic operation device |
| US7991162B2 (en) * | 2007-09-14 | 2011-08-02 | University Of Ottawa | Accelerating scalar multiplication on elliptic curve cryptosystems over prime fields |
| US8184803B2 (en) * | 2008-12-29 | 2012-05-22 | King Fahd University Of Petroleum And Minerals | Hash functions using elliptic curve cryptography |
| US20100169658A1 (en) * | 2008-12-30 | 2010-07-01 | Lahouari Ghouti | Elliptic curve-based message authentication code |
| JP2010164904A (ja) * | 2009-01-19 | 2010-07-29 | Fujitsu Ltd | 楕円曲線演算処理装置、楕円曲線演算処理プログラム及び方法 |
| US8542820B2 (en) * | 2009-02-05 | 2013-09-24 | Infineon Technologies Ag | Apparatus for calculating a result of a scalar multiplication |
| US8745376B2 (en) * | 2011-10-14 | 2014-06-03 | Certicom Corp. | Verifying implicit certificates and digital signatures |
| US9590805B1 (en) * | 2014-12-23 | 2017-03-07 | EMC IP Holding Company LLC | Ladder-based cryptographic techniques using pre-computed points |
| JP2018146766A (ja) * | 2017-03-06 | 2018-09-20 | キヤノン株式会社 | スカラー倍演算装置、スカラー倍演算方法及びプログラム |
| US12101403B2 (en) * | 2022-10-26 | 2024-09-24 | Tencent America LLC | Interleaved scalar multiplication for elliptic curve cryptography |
| CN115580402B (zh) * | 2022-12-09 | 2023-03-17 | 蓝象智联(杭州)科技有限公司 | 一种用于安全多方计算的数据隐匿查询方法 |
Family Cites Families (13)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US6088453A (en) * | 1997-01-27 | 2000-07-11 | Kabushiki Kaisha Toshiba | Scheme for computing Montgomery division and Montgomery inverse realizing fast implementation |
| US6035041A (en) * | 1997-04-28 | 2000-03-07 | Certco, Inc. | Optimal-resilience, proactive, public-key cryptographic system and method |
| US6748410B1 (en) * | 1997-05-04 | 2004-06-08 | M-Systems Flash Disk Pioneers, Ltd. | Apparatus and method for modular multiplication and exponentiation based on montgomery multiplication |
| JP4105803B2 (ja) | 1997-07-17 | 2008-06-25 | 松下電器産業株式会社 | 楕円曲線演算装置 |
| EP0892520A3 (en) * | 1997-07-17 | 2001-10-17 | Matsushita Electric Industrial Co., Ltd. | Elliptic curve calculation apparatus capable of calculating multiples at high speed |
| EP0933695B1 (en) * | 1998-01-28 | 2006-03-15 | Hitachi, Ltd. | IC card equipped with elliptic curve encryption processing facility |
| JPH11242434A (ja) * | 1998-02-26 | 1999-09-07 | Hitachi Ltd | 楕円曲線暗号実行方法及び暗号処理システム |
| CA2252078C (en) * | 1998-10-28 | 2009-02-17 | Certicom Corp. | Power signature attack resistant cryptographic system |
| US6816594B1 (en) * | 1999-09-08 | 2004-11-09 | Hitachi, Ltd. | Elliptic curve generating method and device, elliptic encryption system and recording medium |
| JP3926532B2 (ja) * | 2000-03-16 | 2007-06-06 | 株式会社日立製作所 | 情報処理装置、情報処理方法、及びカード部材 |
| US6772184B2 (en) * | 2000-08-28 | 2004-08-03 | Sun Microsystems, Inc. | Method for efficient modular division over prime integer fields |
| US6721771B1 (en) * | 2000-08-28 | 2004-04-13 | Sun Microsystems, Inc. | Method for efficient modular polynomial division in finite fields f(2{circumflex over ( )}m) |
| JP3794266B2 (ja) | 2000-11-08 | 2006-07-05 | 株式会社日立製作所 | 楕円曲線スカラー倍計算方法及び装置並びに記憶媒体 |
-
2002
- 2002-03-29 JP JP2002094081A patent/JP4034585B2/ja not_active Expired - Fee Related
- 2002-12-03 EP EP02026894A patent/EP1331552A3/en not_active Withdrawn
- 2002-12-09 US US10/314,316 patent/US7486789B2/en not_active Expired - Fee Related
Also Published As
| Publication number | Publication date |
|---|---|
| JP2003288013A (ja) | 2003-10-10 |
| US7486789B2 (en) | 2009-02-03 |
| US20030142820A1 (en) | 2003-07-31 |
| EP1331552A3 (en) | 2006-01-11 |
| EP1331552A2 (en) | 2003-07-30 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| JP4034585B2 (ja) | 楕円曲線演算装置及び楕円曲線演算方法 | |
| US7209555B2 (en) | Elliptic curve converting device, elliptic curve converting method, elliptic curve utilization device and elliptic curve generating device | |
| US6212277B1 (en) | Elliptic curve transformation device, utilization device and utilization system | |
| JP4842276B2 (ja) | 楕円曲線上の新しいトラップドア1方向性関数と、その、より短い署名及び非対称暗号化への応用 | |
| CN102393813A (zh) | 数据处理系统以及数据处理方法 | |
| US8862651B2 (en) | Method and apparatus for modulus reduction | |
| US7024560B2 (en) | Power-residue calculating unit using Montgomery algorithm | |
| EP1876523A1 (en) | Computation of A MOD (2^n - 1) | |
| US6480606B1 (en) | Elliptic curve encryption method and system | |
| JP4203944B2 (ja) | 楕円曲線演算装置及び楕円曲線演算方法 | |
| Gorbenko et al. | Methods of building general parameters and keys for NTRU Prime Ukraine of 5 th–7 th levels of stability. Product form | |
| Gayoso Martínez et al. | Secure elliptic curves and their performance | |
| US8850213B2 (en) | Method for verifying an electronic signature and data processing device | |
| KR20100062565A (ko) | 모듈러스의 음의 역원을 구하는 방법 | |
| JP4105803B2 (ja) | 楕円曲線演算装置 | |
| CN100432922C (zh) | 在有限域中实现平方运算的方法和装置 | |
| JP3050313B2 (ja) | 楕円曲線変換装置、利用装置及び利用システム | |
| JP4225764B2 (ja) | 楕円曲線変換装置、楕円曲線変換方法、楕円曲線利用装置及び楕円曲線生成装置 | |
| KR100564765B1 (ko) | 유한체 다항식 나눗셈 장치 및 그 방법 | |
| JP2004151234A (ja) | べき乗演算装置 | |
| JP2001194996A (ja) | 多項式の除算装置 | |
| JP3842641B2 (ja) | モンゴメリ乗算を用いるコプロセッサを使用する演算装置及び方法 | |
| KR100368204B1 (ko) | 정규 기저를 이용한 역원 계산 알고리즘 | |
| Halbutogullari | Fast bit-level, word-level and parallel arithmetic in finite fields for elliptic curve cryptosytems | |
| KR20030003435A (ko) | 암호시스템에 사용하기 위한 최적의 역원을 구하기 위한방법 및 장치 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20041208 |
|
| A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20070619 |
|
| A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070709 |
|
| A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20070807 |
|
| A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070831 |
|
| 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: 20071002 |
|
| A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20071025 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101102 Year of fee payment: 3 |
|
| R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111102 Year of fee payment: 4 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121102 Year of fee payment: 5 |
|
| LAPS | Cancellation because of no payment of annual fees |