(57)【特許請求の範囲】
【請求項１】
楕円曲線Ｅ上のｎ個の点Qi(i=1,2,...,n) とｎ個の整数Ui(i=1,2,...,n) を入力とし、前記整数Ui(i=1,2,...,n) をそれぞれのべき数とする前記楕円曲線Ｅ上の点Qiに対するべき乗演算結果
W=(U1・Q1＋U2・Q2…Un・Qn)
を出力するべき乗演算装置であって、
前記ｎ個の楕円曲線上の点Qiを記憶する被べき乗数格納部と、
前記整数Uiに対して冗長２進数変換すなわち
Ui=(Bi(k),Bi(k-1)...,Bi(2),Bi(1),Bi(0))
ここでBi(j) ∈｛0,1,-1｝とする
を満たすBi(j) を出力するべき数変換部と、
前記被べき乗数格納部に記憶された前記ｎ個の楕円曲線上の点Qiと、前記べき数変換部の出力Bi(j) を用いて、S(0)=Ｏとし、p=0,1,2,...,k-1 に対して(ただし、Ｏは楕円曲線Ｅの無限遠点)
S(p+1)=2・S(p)＋g(k-1-p)
ここで、g(q)=(B0(q))・Q0＋(B1(q))・Q1＋(B2(q))・Q2＋…＋(Bn(q))・Qnとする、
を演算し、楕円曲線Ｅ上のべき乗演算結果S(k)を生成する、べき乗処理部
を備えることを特徴とするべき乗演算装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、情報を安全に伝達する暗号技術の分野において必要となるべき乗演算装置に関するものである。
【０００２】
【従来の技術】
重要な情報を通信ネットワークを介して安全にやり取りするためには暗号の技術が必要である。特に、ディジタル署名機能（文書の正当性を保証するための電子的な捺印機能）を提供する公開鍵暗号技術は、通信ネットワークを利用した電子商取り引きシステムを実現する上で必須の技術として注目を集めている。
【０００３】
公開鍵暗号では、従来の共通鍵暗号に比較して処理が低速であるため、処理の高速化が重要な課題となっている。公開鍵暗号の処理の高速化のために、公開鍵暗号において利用される基本演算を高速化する方法が考えられる。
【０００４】
公開鍵暗号において、[1]式に示す整数上のｎ項のべき乗演算
Z=(X1^Y1×X2＾Y2×…×Xn^Yn)                            [1]
ここで、(Xi,Yi)(i=1,2,…,n)は整数である。
を必要とする場合が多い。例えば代表的なディジタル署名方式としてよく知られているElGamal 署名法では、署名検証時に３項のべき乗演算が必要である。
【０００５】
また、近年注目されている楕円曲線暗号においては、[2]式に示す楕円曲線上のｎ項のべき乗演算
W=(U1・Q1＋U2・Q2＋…＋Un・Qn) (楕円曲線Ｅ上の演算)          [2]
ここで、Qi(i=1,2,…,n)は楕円曲線上Ｅ上の点、Ui(i=1,2,…,n)は整数、
Q・Uは、楕円曲線上の点QのU倍点、Q1＋Q2は楕円曲線上の２点Q1とQ2
の加算を示す
を必要とする場合が多い。例えば、楕円曲線上のElGamal署名法など。ここで、楕円曲線及び楕円曲線上の２点の加算や、Ｘ倍点の求め方については、例えば、A.Miyaji:"Efficient elliptic curve exponentiation(I)",IEICE Japan(電子情報通信学会) Tech. Rep.,ISEC97-16(1997-07),pp17-28を参照されたい。
【０００６】
ｎ項のべき乗演算を行なうための従来法としては、バイナリ法(binary method)を拡張して利用する方法が知られている。
【０００７】
以下では、[2]式で示す楕円曲線の場合を例に、従来法を説明する。なお、[1]式で示す整数上の場合については、例えばD.E.Knuth（ディー・イー・クヌース）の"THE ART OF COMPUTER PROGRAMMING SECONDEDITION"（”ザ  アート  オブコンピュータ  プログラミング  セコンド  エディション”）,Vol 2 Seminumerical Algorithms（セミヌメリカル  アルゴリズム）,p465 exercises 27,1981,ADDISON-WESLEY PUBLISHING COMPANY,INC.に述べられている。
【０００８】
上記方法を適応して[1]式の計算を行なうと、整数Xiをmビット、整数Yiをkビットとすると、
テーブルに必要なメモリ容量は、(2^n−1)m ビット  [3]
演算(乗算)回数は、
最大で (k−1)×2＋2^n−n−1           [4]
平均で (k−1)×(2−(1／2)^n)＋2^n−n−1
となる。
【０００９】
ここで、べき数Yiにおける各ビットの1の出現確率を最大1、平均(1／2)とした。また、テーブル作成に必要な演算回数を(2^n−n−1)回となる。
【００１０】
具体的に、k=1024ビット、m=1024ビット、n=3の場合は、
必要なメモリ容量 7168ビット
演算回数  平均1922回(最大2050回)
となる。
【００１１】
(従来例)
簡単のため２項の楕円曲線上のべき乗演算の場合を例に説明する。図１は、従来の楕円曲線上のべき乗演算装置を示すものであって、10はテーブル作成部、11はテーブル格納部、12はべき数変換部、13はべき乗処理部である。
【００１２】
以下、図１に示すべき乗演算装置を基に、従来用いられているべき乗演算手順を示す。
【００１３】
ｎ項のべき乗演算は、楕円曲線上、整数上を問わず、次のステップで行なう。
（ステップ１）予備処理（テーブルの作成）
（ステップ２）主処理  （べき乗演算）
以下では、13・Q1＋15・Q2を求める場合の例について示す。
【００１４】
（ステップ１）予備処理（テーブルの作成部、テーブル格納部）
(b1・Q1＋b2・Q2),((b1,b2)∈{0,1,-1}^3)を求め、テーブルに記憶する。
【００１５】
但し、(0,0)に対応する値、及び、Q1に対する−Q1など符号が反対の値は記憶する必要がないので、全部で次の4個の値(Q1、Q2、Q1＋Q2、Q1−Q2)を計算し、テーブルに格納する。
【００１６】
各値は、ステップ２において、(b1,b2)をインデックスとして引き出される。該当のものがなければ、(b1,b2)の各符号を反転させて該当するものが引き出される。
【００１７】
（ステップ２）主処理
(1)べき数変換処理
べき数13、15を、例えば以下のアルゴリズムで冗長２進数（符号つき2進数）に変換する。
【００１８】
13＝(1 0 -1 0 1)、15＝(1 0 0 0 -1)
冗長２進数変換アルゴリズム：
(1.1)べき数を通常の２進数に変換する
(1.2)1が連続する場合、連続する1の最下位ビットを-1とし、連続する1のその他のビットを0とし、連続する1の一つ上位のビットを1とする
0003884853.tif 000002
なお、ここで示した冗長２進数変換アルゴリズムは1例であり、冗長２進数変換アルゴリズムは無数に存在する。
【００１９】
(2)べき乗演算処理
(2.1) 各べき数13,15の冗長２進数値の最上位ビットを、13、15の順にみると(1,1)であるから、テーブルより(1・Q1＋1・Q2)=(Q1＋Q2)を得て、
T(1)←(Ａ＋Ｂ)
とする(←は代入を示す)。
【００２０】
(2.2) 各べき数の上位2番目のビットを13、15の順にみると(0,0)であるから
T(2)←2・T(1)
とする。
【００２１】
(2.3) 各べき数の上位3番目のビットを13、15の順にみると(-1,0)であるから、テーブルより、(-1・Q1＋0・Q2)=(−Q1)の符号を反転させたQ1をテーブルより得て、
T(3)←2・T(2)−Q1
とする。
【００２２】
(2.4) 各べき数の上位4番目のビットを13、15の順にみると(0,0)であるから
T(4)←2・T(3)
とする。
【００２３】
(2.5) 各べき数の上位5番目のビットを13、15の順にみると(1,-1)であるからテーブルより(1・Q1−1・Q2)=(Q1−Q2)を得て
T(5)←2・T(4)＋(Q1−Q2)
とする。
【００２４】
(3) 結果出力
このとき結果はｚ←T(5)で与えられる。
【００２５】
0003884853.tif 000003
となり、計算結果が正しいことがわかる。
【００２６】
この例において、ステップ１の予備処理に必要な計算量（楕円点の加減算の回数）は、２回であり、4個の楕円点を記憶するためのメモリ容量が必要となる。
【００２７】
また、ステップ２の主処理に必要な計算量（楕円点の２倍算および加減算の回数）は、６回（２倍算が４回、加減算が２回）となる。
【００２８】
(従来例における計算量とテーブルのメモリ容量)
一般の[2]式で示される楕円曲線上のｎ項のべき乗剰余演算に、上述した冗長２進数変換アルゴリズムを利用する場合、計算量とメモリ容量は以下の通りとなる。
【００２９】
まずステップ１の予備処理の計算量（楕円点の加減算の回数）は、
楕円点の加減算：  (３^ｎ-１)/２-ｎ
となる。
【００３０】
また、テーブルを蓄積するためのメモリ容量は、楕円点のビットサイズをmで表すと、
メモリ容量：     ((３^ｎ-１)/２)ｍ   (bit)  [5]
となる。
【００３１】
ステップ２の主処理の計算量は、
楕円点の２倍算：ｋ−１
0003884853.tif 000004
となる。なおここで、ｋは、べき数Yiのビット数であり、上述した冗長２進数変換法を利用した場合に、変換後の０の出現確率が、最大１／２、平均２／３程度になると仮定している。
【００３２】
よって、予備処理および主処理の合計の計算量（２倍算および加減算の合計）は、
最大で、（ｋ−１）×（２−（１／２）＾ｎ）＋(３^ｎ-１)/２-ｎ  [6]
平均で、（ｋ−１）×（２−（２／３）＾ｎ）＋(３^ｎ-１)/２-ｎ
となる。
【００３３】
具体的に、暗号で良く利用される、３項の楕円曲線上のべき乗剰余演算（ｎ＝３）において、Yiを160ビット、楕円点を320ビットとするときの計算量とメモリ容量は以下の通りである。
【００３４】
計算量    ：平均281回（最大308回）
メモリ容量：4160(bit)
【００３５】
【発明が解決しようとする課題】
しかし、楕円曲線上のｎ項のべき乗剰余演算を実行する従来法では、テーブルのメモリ容量が、ｎの増加にともなって指数関数的に増大する。
【００３６】
このため、メモリ容量が制限された環境（例えば、ICカードや、情報端末）などにおいては、従来例を利用するのは困難である。
【００３７】
本発明は、上述の問題点に鑑みてなされたもので、メモリ容量を削減しつつ、計算量が同程度のべき乗剰余演算装置を提供することを目的とする。
【００３８】
【課題を解決するための手段】
【００３９】
本発明は、入力値として与えられたｎ個の楕円曲線Ｅ上の点Qi(i=1,2,...,n) を記憶する被べき乗数格納部と、入力値として与えられたｎ個の整数値Ui(i=1,2,...,n) に対して冗長２進数変換を行なうべき数変換部および、前記被べき乗数格納部に記憶された前記ｎ個の楕円曲線Ｅ上の点Qiと、前記ｎ個の整数値Uiに対する前記べき数変換部における冗長２進数変換値を基に、楕円曲線Ｅ上のべき乗演算結果
W=(U1・Q1＋U2・Q2＋…＋Un・Qn)
を出力するべき乗処理部から構成されるべき乗演算装置である。
【００４０】
【発明の実施の形態】
(実施の形態１)
[全体構成]
図２は本発明の一実施の形態によるｎ個の整数の組(Xi,Yi)(i=1,2,...,n)に対するべき乗演算装置の基本構成を示すものであり、20は被べき乗数格納部、21はべき数変換部、22はべき乗処理部である。
【００４１】
20の被べき乗数格納部は、処理対象となるｎ個の被べき乗数Xiの演算前の値を記憶する。本実施の形態では、21のべき数変換部は入力されたｎ個のべき数Yiに対して２進数変換を行なう。22のべき乗処理部は、20の被べき乗数格納部に記憶された、演算前のｎ個の被べき乗数Xiと、入力したｎ個のべき数Yiに対して21のべき数変換部において２進数変換を行なった結果を基に、べき乗演算を行なう。
【００４２】
[詳細な動作]
本実施の形態では、[1]式で示したｎ個の整数の組(Xi,Yi)(i=1,2,...,n)に対するべき乗演算のうち、ｎ=2の場合の動作手順について説明する。具体的には[7]式に示す演算を行なう。
【００４３】
Z=(X1^Y1×X1^Y2)   [7]
ここで、X1,X2,Y1およびY2は整数値である。
【００４４】
本実施の形態で実現する処理の流れを図３に示す。
図３に示す通り、本実施の形態で実現する処理は、S10の予備処理とS11の主処理から構成される。S10の予備処理はS11の主処理より前に処理され、被べき乗数X1およびX2を被べき乗数格納部に記憶する。S11の主処理はS10の予備処理の後に行なわれ、S110のべき数変換処理とS111のべき乗演算処理から構成される。S11の主処理において、S110のべき数変換処理はS111のべき乗演算処理より前に実行される。本実施の形態ではS110のべき数変換処理は、べき数Y1およびY2に対して２進数変換を行なう。S111のべき乗演算処理は、S10の予備処理で20の被べき乗数格納部に記憶された被べき乗数X1およびX2と、べき数Y1およびY2に対してS110のべき数変換処理で２進数変換を行なった値を基に整数上のべき乗演算をおこない、２項のべき乗演算結果([7]式におけるZを)得る。
【００４５】
本実施の形態で示す演算は次のステップで処理を実行する。
（ステップ１）予備処理（被べき乗数の格納）
（ステップ２）主処理  （べき乗演算）
（ステップ１）予備処理（被べき乗数の格納）
ステップ２の主処理の前に、演算前の被べき乗数X1およびX2の値を20の被べき乗数格納部に記憶する。
【００４６】
（ステップ２）主処理
(1)べき数変換処理
べき数Y1およびY2を２進数に変換する。
【００４７】
(2)べき乗演算処理
予備処理で20の被べき乗数格納部に格納した被べき乗数X1およびX2と、べき数Y1およびY2の２進数変換の結果をもとに、22のべき乗演算部においてべき乗演算を行なう。
【００４８】
なお、べき数Y1およびY2の２進数変換値を、
0003884853.tif 000005
と表記する。ここで、kはべき数Y1およびY2のビット数である。
【００４９】
(2.1) T←0, i←(k-1)とする。
(2.2) T←T^2とする。
【００５０】
(2.3) Y1およびY2の２進数変換値のiビット目の値の組(H1(i),H2(i))について、
(a)(H1(i), H2(i)) = (1,1)の場合、被べき乗数格納部より被べき乗数X1およびX2を読み出し、
T←T×X1×X2
とする。
【００５１】
(b)(H1(i), H2(i)) = (1,0)の場合、被べき乗数格納部より被べき乗数X1を読み出し、
T←T×X1
とする。
【００５２】
(c)(H1(i), H2(i)) = (0,1)の場合、被べき乗数格納部より被べき乗数X2を読み出し、
T←T×X2
とする。
【００５３】
(d)(H1(i), H2(i)) = (0,0)の場合、
T←T
とする。
【００５４】
(2.4) i←(i−1)とする。
(2.5) iの値によって処理を分岐する。
【００５５】
(a) i ≧ 0 の場合、(2.2)に戻り処理を続行する。
(b) i ＜ 0 の場合、Tの値をべき乗演算結果Ｚとする。
【００５６】
Z←T
(3)結果出力
このとき結果はZ←Tで与えられる。
【００５７】
[具体例]
べき数Y1=13,Y2=15、被べき数をX1, X2とした場合の、べき乗演算処理の具体例を示す。
【００５８】
Y1=13および、Y2=15の冗長２進数変換結果はそれぞれ、
Y1=13=(1  1  0  1)
Y2=15=(1  1  1  1)
である。
【００５９】
(初期処理) T←0, i←3とする。
(処理１)
(1a)T←T^2とする。
【００６０】
(1b)
続いて、各べき数13,15の２進数値の最上位ビット(i=3ビット)を、13、15の順にみると(1,1)であるから、被べき乗数X1とX2の値を非べき乗数格納部より読み出し、
T←(T×X1×X2)
とする。
【００６１】
(1c)i←(i−1)=2とする。
(1d)i≧0であるから、処理を継続する。
【００６２】
(処理２)
(2a)T←T^2とする。
【００６３】
(2b)
続いて、各べき数13,15の２進数値の上位2番目のビット(i=2ビット)を、13、15の順にみると(1,1)であるから、被べき乗数X1とX2の値を被べき乗数格納部より読み出し、
T←T×X1×X2
とする。
【００６４】
(2c)i←(i−1)=1とする。
(2d)i≧0であるから、処理を継続する。
【００６５】
(処理３)
(3a)T←T^2とする。
【００６６】
(3b)
続いて、各べき数13,15の２進数値の上位3番目のビット(i=1ビット)を、13、15の順にみると(0,1)であるから、被べき乗数X1値を被べき乗数格納部より読み出し、
T←T×X1
とする。
【００６７】
(3c)i←(i−1)=0とする。
(3d)i≧0であるから、処理を継続する。
【００６８】
(処理４)
(4a)T←T^2とする。
【００６９】
(4b)
続いて、各べき数13,15の冗長２進数値の上位４番目のビット(i=0ビット)を、13、15の順にみると(1,1)であるから、
T←T×X1×X2
とする。
【００７０】
(4c)i←(i−1)=-1とする。
(4d)i＜0であるから、処理を終了する。
【００７１】
(処理結果)
べき数Y1=13,Y2=15, 被べき乗数Q1,Q2を用いた例では、
0003884853.tif 000006
となり、計算結果が正しいことがわかる。
【００７２】
ステップ１の予備処理では、初期データを記憶するのみで計算は必要ではなく、2個の整数を記憶するためのメモリ容量のみが必要である。
【００７３】
また、ステップ２の主処理に必要な計算量は9回となる。
[計算量とテーブルのメモリ容量]
一般の[1]式で示される整数上のｎ項のべき乗剰余演算に、上述したアルゴリズムを適用する場合、必要なメモリ容量と演算回数は次の様になる。
【００７４】
まずステップ１の予備処理は計算を必要としない。テーブルを蓄積するためのメモリ容量は、被べき乗数Xiのビットサイズをｍで表すと、
メモリ容量：     ｎｍ   (bit)   [8]
となる。
【００７５】
ステップ２の主処理の計算量は、べき数Yiのビットサイズをkとすると、
最大 (ｋ−１)×（ｎ＋１）    [9]
平均 (ｋ−１)× (1＋σ(0)＋σ(1)＋…＋σ(n))
ここでσ(j)＝nＣj×(1／2)^n×j
nＣjは、n個のものからj個のものを取る組み合わせとなる。ここで、Yiの２進数変換後の1の出現確率を最大１、平均１／２とする。
【００７６】
具体的に、ｋ＝1024ビット、ｍ＝1024ビット、ｎ＝3とすると、
計算量   ：平均2558回（最大4092回）
メモリ容量：3072(bit)
これにより、従来方法ではｎの増加にともなって指数関数的に増大していたメモリ容量の増加を、線形増加に抑えることができる。
【００７７】
また、本実施の形態では、式[7]に示す２項のべき乗演算(Z=(X1^Y1×X2^Y2))を行なう場合について説明したが、２項のべき乗演算に限らず任意のｎ項のべき乗演算が可能である。
【００７８】
(実施の形態２)
[全体構成]
つづいて、本発明の楕円曲線Ｅ上の点Qi(i=1,2,...,n)に対するべき乗演算の一実施の形態を示す。楕円曲線Ｅ上の点Qiに対する本実施の形態も、整数の組(Xi,Yi)に対するべき数演算処理の上記実施の形態と同じ図２に示す構成をとる。
【００７９】
図２において、20は被べき乗数格納部、21はべき数変換部、22はべき乗処理部である。20の被べき乗数格納部は、処理対象となるｎ個の被べき乗数Qiの演算前の値を記憶する。本実施の形態では、21のべき数変換部は入力されたｎ個のべき数Uiに対して冗長２進数変換を行なう。22のべき乗処理部は、20の被べき乗数格納部に記憶された演算前のｎ個の被べき乗数Qiと、21のべき数変換部において入力したｎ個のべき数Uiに対して冗長２進数変換した結果を基にべき乗演算を行なう。
【００８０】
[詳細な動作]
本実施の形態では、[2]式で示した楕円曲線上のｎ項のべき乗演算のうち、ｎ=2の場合の動作手順について説明する。具体的には[10]式に示す演算を行なう。
【００８１】
W=(U1・Q1＋U2・Q2)   [10]
ここで、Q1およびQ2は楕円曲線Ｅ上の点、U1およびU2は整数値である。
【００８２】
本実施の形態で実現する処理の流れも図３に示す流れとなる。
図３に示す通り、本実施の形態で実現する処理は、S10の予備処理とS11の主処理から構成される。S10の予備処理はS11の主処理より前に処理され、被べき乗数Q1およびQ2の値を被べき乗数格納部に記憶する。S11の主処理はS10の予備処理の後に行なわれ、S110のべき数変換処理とS111のべき乗演算処理から構成される。S11の主処理において、S110のべき数変換処理はS111のべき乗演算処理より前に実行される。S110のべき数変換処理は、べき数U1およびU2に対して冗長２進数変換を行なう。S111のべき乗演算処理は、S10の予備処理で20の被べき乗数格納部に記憶された被べき乗数Q1およびQ2と、べき数U1およびU2に対してS110のべき数変換処理で冗長２進数変換を行なった値を基に楕円曲線Ｅ上のべき乗演算をおこない、２項のべき乗演算結果([10]式におけるWを)得る。
【００８３】
本実施の形態で示す演算は次のステップで処理を実行する。
（ステップ１）予備処理（被べき乗数の格納）
（ステップ２）主処理  （べき乗演算）
（ステップ１）予備処理（被べき乗数の格納）
ステップ２の主処理の前に、演算前のQ1およびQ2の値を20の被べき乗数格納部に記憶する。
【００８４】
（ステップ２）主処理
(1)べき数変換処理
べき数U1およびU2に対して以下のアルゴリズムで冗長２進数（符号つき２進数）に変換する。なお、以下のアルゴリズムは冗長２進数変換の一例であって、本アルゴリズムに限定されるものではない。
【００８５】
ここでは、べき数U1に対する冗長２進数変換処理について説明する。
なお、べき数U2に対する冗長２進数変換処理もU1に対する冗長２進数変換と同じ処理を行なう。
【００８６】
(1.1)べき数U1を２進数に変換する。ここでは、U1は、kビットの２進数に変換されるとし最下位ビットを0として、
U1=(A(k+1),A(k),A(k),...,A(2), A(1), A(0))
(A(i)∈{0,1}(i=0,1,2,...,k-1), A(k+1)=A(k)=0)
と表す。
【００８７】
(1.2)  C(0)←0とする。
ただし、←は代入を示す。ここでは、C(0)に0を代入する。
【００８８】
(1.3) 0≦i≦kのiに対して、(1.3.1)の処理を行なう。
(1.3.1) C(i)←floor((A(i)+A(i+1)+C(i))/2))
D(i)← A(i)+C(i)-2C(i)
ここでfloor(x)は、xよりも大きくない、最大の整数を表す。
【００８９】
(1.4)(1.3)の結果得られる、(D(k),D(k-1),D(k-2),...,D(2),D(1),D(0))がべき数U1の冗長２進数変換結果である。
【００９０】
(例)
べき数13に対し上記(1.1)〜(1.4)に示す冗長２進数変換を行なうと(1 0 -1 0 1)となる。
【００９１】
(2)べき乗演算処理
予備処理で20の被べき乗数格納部に格納した被べき乗数Q1およびQ2と、べき数U1およびU2の冗長２進数変換の結果をもとに、22のべき乗演算部においてべき乗演算を行なう。
【００９２】
なお、べき数U1およびU2の冗長２進数変換値を、
U1 = (D1(k),D1(k-1),D1(k-2),...,D1(2),D1(1),D1(0))
U2 = (D2(k),D2(k-1),D2(k-2),...,D2(2),D2(1),D2(0))
と表記する。
【００９３】
(2.1) S←Ｏ, i←kとする。ただし、Ｏは楕円曲線Ｅの無限遠点
(2.2) S←2・Sとする。
【００９４】
(2.3) U1およびU2の冗長２進数変換値のiビット目の値の組(D1(i),D2(i))について、
(a)(D1(i), D2(i)) = (1,1)の場合、被べき乗数格納部より被べき乗数Q1およびQ2を読み出し、
S←S＋Q1＋Q2
とする。
【００９５】
(b)(D1(i), D2(i)) = (1,0)の場合、被べき乗数格納部より被べき乗数Q1を読み出し、
S←S＋Q1
とする。
【００９６】
(c)(D1(i), D2(i)) = (0,1)の場合、被べき乗数格納部より被べき乗数Q1を読み出し、
S←S＋Q2
とする。
【００９７】
(d)(D1(i), D2(i)) = (-1,-1)の場合、被べき乗数格納部より被べき乗数Q1およびQ2を読み出し、
S←S−Q1−Q2
とする。
【００９８】
(e)(D1(i), D2(i)) = (-1,0)の場合、被べき乗数格納部より被べき乗数Q1を読み出し、
S←S−Q1
とする。
【００９９】
(f)(D1(i), D2(i)) = (0,-1)の場合、被べき乗数格納部より被べき乗数Q1を読み出し、
S←S−Q2
とする。
【０１００】
(g)(D1(i), D2(i)) = (0,0)の場合、
S←S
とする。
【０１０１】
(2.4) i←(i−1)とする。
(2.5) iの値によって処理を分岐する。
【０１０２】
(a) i ≧ 0 の場合、(2.2)に戻り処理を続行する。
(b) i ＜ 0 の場合、Sの値をべき乗演算結果Wとする。
【０１０３】
W←S
(3)結果出力
このとき結果はW←Sで与えられる。
【０１０４】
[具体例]
べき数Y1=13,Y2=15、被べき数をQ1, Q2とした場合の、べき乗演算処理の具体例を示す。
【０１０５】
U1=13および、U2=15の冗長２進数変換結果はそれぞれ、
U1=13=(1  0 -1  0  1)
U2=15=(1  0  0  0 -1)
である。
【０１０６】
(初期処理) S←Ｏ, i←4とする。ただしＯは楕円曲線Ｅ上の無限遠点
(処理１)
(1a)S←2・Sとする。
【０１０７】
(1b)
続いて、各べき数13,15の冗長２進数値の最上位ビット(i=4ビット)を、13、15の順にみると(1,1)であるから、被べき乗数Q1とQ2の値を非べき乗数格納部より読み出し、
S←(S＋Q1＋Q2)
とする。
【０１０８】
(1c)i←(i−1)=3とする。
(1d)i≧0であるから、処理を継続する。
【０１０９】
(処理２)
(2a)S←2・Sとする。
【０１１０】
(2b)
続いて、各べき数13,15の冗長２進数値の上位2番目のビット(i=3ビット)を、13、15の順にみると(0,0)であるから、
S←S
とする。
【０１１１】
(2c)i←(i−1)=2とする。
(2d)i≧0であるから、処理を継続する。
【０１１２】
(処理３)
(3a)S←2・Sとする。
【０１１３】
(3b)
続いて、各べき数13,15の冗長２進数値の上位３番目のビット(i=2ビット)を、13、15の順にみると(-1,0)であるから、被べき乗数Q1の値を被べき乗数格納部より読み出し、
S←S-Q1
とする。
【０１１４】
(3c)i←(i−1)=1とする。
(3d)i≧0であるから、処理を継続する。
【０１１５】
(処理４)
(4a)S←2・Sとする。
【０１１６】
(4b)
続いて、各べき数13,15の冗長２進数値の上位４番目のビット(i=1ビット)を、13、15の順にみると(0,0)であるから、
S←S
とする。
【０１１７】
(4c)i←(i−1)=0とする。
(4d)i≧0であるから、処理を継続する。
【０１１８】
(処理５)
(5a)S←2・Sとする。
【０１１９】
(5b)
続いて、各べき数13,15の冗長２進数値の上位５番目のビット(i=0ビット)を、13、15の順にみると(1, -1)であるから、被べき乗数Q1およびQ2の値を被べき乗数格納部より
S←S＋Q1−Q2
とする。
【０１２０】
(5c)i←(i−1)=-1とする。
(5d)i＜0であるから、処理を終了する。
【０１２１】
(処理結果)
べき数U1=13,U2=15, 被べき乗数Q1,Q2を用いた例では、
0003884853.tif 000007
となり、計算結果が正しいことがわかる。
【０１２２】
ステップ１の予備処理では、初期データを記憶するのみで計算は必要ではなく、2個の楕円点を記憶するためのメモリ容量のみが必要である。
【０１２３】
また、ステップ２の主処理に必要な計算量（楕円点の２倍算および加減算の回数）は、７回（２倍算が４回、加減算が３回）となる。
【０１２４】
[計算量とテーブルのメモリ容量]
一般の[2]式で示される楕円曲線上のｎ項のべき乗剰余演算に、上述した冗長２進数変換アルゴリズムを利用する場合、計算量とメモリ容量は以下の通りとなる。
【０１２５】
まずステップ１の予備処理は計算を必要としない。テーブルを蓄積するためのメモリ容量は、楕円点のビットサイズをｍで表すと、
メモリ容量：     ｎｍ   (bit)  [11]
となる。
【０１２６】
ステップ２の主処理の計算量は、
楕円点の２倍算：ｋ
楕円点の加減算：
最大ｋ×(θ(0)＋θ(1)＋…θ(n))
ここでθ(j)＝nＣj×(1／2)^n×j,
nＣjは、n個のものからj個のものを取る組み合わせ
平均ｋ×(μ(0)＋μ(1)＋…μ(n))
ここでμ(j)＝nＣj×(1／3)^j×(2／3)^(n-j)×j
nＣjは、n個のものからj個ものを取る組み合わせ
となる。なおここで、ｋは、べき数Uiのビット数であり、上述した冗長２進数変換法を利用した場合に、変換後の０の出現確率が、最大１／２、平均２／３程度になると仮定している。
【０１２７】
よって、本実施の形態による計算量（２倍算および加減算の合計）は、
最大で、ｋ×（１＋(θ(0)＋θ(1)＋…θ(n))) [12]
平均で、ｋ×（１＋(μ(0)＋μ(1)＋…μ(n)))
となる。
【０１２８】
具体的に、暗号で良く利用される、３項の楕円曲線上のべき乗剰余演算
（ｎ＝３）において、Uiを160ビット、楕円点を320ビットとするときの計算量とメモリ容量は以下の通りである。
【０１２９】
計算量   ：平均320回（最大360回）
メモリ容量：960(bit)
これにより、従来方法ではｎの増加にともなって指数関数的に増大していたメモリ容量の増加を、線形増加に抑えることができる。
【０１３０】
また、従来方法に比べて増大する計算量も上記計算例の場合、平均で13.9%増、最大で16.9%増であり、計算量の増加を抑えつつ、メモリ容量の削減が可能となる。
【０１３１】
なお、本実施の形態では、冗長２進数変換アルゴリズムの一例を示したが、冗長２進数変換のアルゴリズムはこの方法に限らない。
【０１３２】
また、本実施の形態では、式[10]に示す楕円曲線Ｅ上の２項のべき乗演算(W=(U1・Q1＋U2・Q2))を行なう場合について説明したが、２項のべき乗演算に限らず任意のｎ項のべき乗演算が可能である。
【０１３３】
【発明の効果】
以上説明したように、本発明によれば、ｎ項の整数の組(Xi,Yi)(i=1,2,...,n)に対するべき乗演算
Z=(X1＾Y1×X2＾Y2×…Xn＾Yn)
を、効率的にもとめることができかつ、従来方法ではｎの増加にともなって指数関数的に増大していた演算に必要なメモリ容量を、線形増加に抑えることができる。
【０１３４】
また、本発明によれば、ｎ個の楕円曲線Ｅ上の点Qi(i=1,2,...,n) およびｎの整数値Ui(i=1,2,...,n) に対する楕円曲線Ｅ上のべき乗演算
W=(U1・Q1＋U2・Q2＋…Un・Qn)
を、効率的に求めることができかつ、従来の方法ではｎの増加にともなって指数関数的に増大していた演算に必要なメモリ容量を、線形増加に抑えることができる。
【図面の簡単な説明】
【図１】従来技術における楕円曲線上のべき乗演算装置を示す図
【図２】本発明の一実施の形態におけるべき乗演算装置を示す図
【図３】本発明の一実施の形態におけるべき乗算処理のながれを示す図
【符号の説明】
１０  テーブル作成部
１１  テーブル格納部
１２  べき数変換部
１３  べき乗処理部
２０  被べき乗数格納部
２１  べき数変換部
２２  べき乗処理部
【図１】
0003884853.tif 000008
【図２】
0003884853.tif 000009
【図３】
0003884853.tif 000010