JP2006309201A - 楕円曲線暗号における多重スカラー倍計算装置、署名検証装置、及び、それらのプログラム。 - Google Patents

楕円曲線暗号における多重スカラー倍計算装置、署名検証装置、及び、それらのプログラム。 Download PDF

Info

Publication number
JP2006309201A
JP2006309201A JP2006090017A JP2006090017A JP2006309201A JP 2006309201 A JP2006309201 A JP 2006309201A JP 2006090017 A JP2006090017 A JP 2006090017A JP 2006090017 A JP2006090017 A JP 2006090017A JP 2006309201 A JP2006309201 A JP 2006309201A
Authority
JP
Japan
Prior art keywords
unit
scalar
digits
calculation
scalar 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.)
Pending
Application number
JP2006090017A
Other languages
English (en)
Inventor
Katsuyuki Okeya
勝幸 桶屋
Keisuke Hakuta
恵輔 伯田
Dahmen Erik
ダーメン エリック
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.)
Hitachi Ltd
Original Assignee
Hitachi 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 Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2006090017A priority Critical patent/JP2006309201A/ja
Publication of JP2006309201A publication Critical patent/JP2006309201A/ja
Pending legal-status Critical Current

Links

Images

Abstract

【課題】
楕円曲線多重スカラー倍計算方法において、与えられたメモリ量に応じて最適な処理を行う楕円曲線多重スカラー倍計算方法を提供する。
【解決手段】
楕円曲線において、複数のスカラー値、及び、スカラー値の個数と同数の楕円曲線上の点から多重スカラー倍点を計算する楕円曲線暗号における多重スカラー倍計算装置において、スカラー値を第一の数値列にエンコードし、前記第一の数値列に対し、0となる項数を増加させることによって、高速演算可能な多重スカラー倍計算を可能とする。
【選択図】図1

Description

本発明はセキュリティ技術に関し、特に、楕円曲線演算を用いたメッセージ認証の技術に関する。
情報通信ネットワークの進展と共に電子情報に対する秘匿や認証の為に暗号技術は不可欠な要素となってきている。暗号技術に課せられる要件としては、安全性以外にも、処理速度や少ないメモリ使用量などがあるが、一般的に安全性、処理速度、メモリ使用量の間にはトレードオフの関係があり、全ての要件をみたすことは難しい。
暗号技術には,共通鍵暗号と公開鍵暗号があるが、公開鍵暗号の一種にN. Koblitz, V. S. Millerにより提案された楕円曲線暗号がある。
楕円曲線暗号は、楕円曲線上の離散対数問題が非常に困難である為に、素因数分解の困難性を安全性の根拠にしている暗号と比べて、楕円曲線暗号は鍵長を比較的短くすることができる。
公開鍵暗号には、公開鍵(Public Key)と呼ばれる一般に公開してよい情報と、秘密鍵(Private Key)と呼ばれる秘匿しなければならない秘密情報がある。平文メッセージの暗号化や署名の検証には公開鍵を用い、暗号文メッセージの復号化や署名の生成には秘密鍵を用いる。
楕円曲線暗号における秘密鍵は、後述するスカラー値が担っている。また、楕円曲線暗号の安全性は楕円曲線上の離散対数問題の求解が困難であることに由来している。楕円曲線上の離散対数問題とは、楕円曲線上のある点Pとそのスカラー倍の点dPが与えられた時、スカラー値dを求める問題である。楕円曲線上の点とは、楕円曲線の定義方程式をみたす数の組をいい、楕円曲線上の点全体には、無限遠点という仮想的な点を単位元とした演算、すなわち楕円曲線上の加法(または加算)が定義される。
ある点に対し、特定の回数だけ加法を行うことをスカラー倍といい、その結果をスカラー倍点、その回数のことをスカラー値という。また、楕円曲線上の点P,P,・・・,Pと整数a,a,・・・,aに対し、
点a+a+・・・+aの計算を行うことを多重スカラー倍算といい、その結果を多重スカラー倍点という。
そして、同じ点同士による楕円曲線上の加法のことを、特に楕円曲線上の2倍算という。楕円曲線上の2点の加法は次のようにして計算される。2点を通る直線を引くとその直線は楕円曲線と他の点において交わる。その交わった点とx軸に関して対称な点を、加法を行った結果の点とする。例えば、ワイエルシュトラス型楕円曲線の場合には、点(x,y)と点(x,y)の加算(x,y)=(x,y)+(x,y)は
=((y−y)/(x−x))−x−x (式1)
=((y−y)/(x−x))(x−x)−y (式2)
を計算することにより得られる。
ここで、ワイエルシュトラス型楕円曲線の定義方程式は
=x+Ax+B (式3)
で与えられる。すなわち、式3のx,yに各々x,y(i=1,2,3)を代入した場合に、式3の等式が成り立つ。
楕円曲線上の点の2倍算は次のようにして計算される。楕円曲線上の点における接線をひくと、その接線は楕円曲線上の他の一点において交わる。その交わった点とx座標に関して対称な点を、2倍算を行った結果の点とする。例えば、ワイエルシュトラス型楕円曲線の場合には、点(x,y)の2倍算を行った結果
(x,y)=2(x,y)=(x,y)+(x,y)は、
=((3x +A)/(2y))2x (式4)
=((3x +A)/(2y))(x−x)−y (式5)
を計算することにより得られる。
楕円曲線暗号においては、鍵交換、与えられたメッセージの暗号化、復号化、署名の生成、検証は、楕円曲線演算を用いて行う必要がある。特に、楕円曲線暗号において最も処理に時間がかかる署名検証において、楕円曲線上の多重スカラー倍の計算が用いられる。
楕円曲線多重スカラー倍計算方法が非特許文献1、及び、非特許文献2に、楕円曲線スカラー倍計算方法が非特許文献3に、それぞれ記載されている。
J.A.Solinas,"Low−weight binary representations for pairs of integers,"Technical Report of CACR, CORR 2001−41, University of Waterloo, 2001.[平成18年2月24日検索]インターネット<URL;http://www.cacr.math.uwaterloo.ca/techreports/2001/corr2001−41.ps> R.M.Avanzi,"On multi−exponentiation in cryptofraphy,"Cryptology ePrint Archive:Report 2002/154, 2002.[平成18年2月24日検索]インターネット<URL;http://eprint.iacr.org/2002/154.> K.Okeya,K.Schmidt−Samoa,C.Spahn,T.Takagi,"Signed Binary Representations Revisited," Advances in Cryptology−CRYPTO 2004, LNCS 3152,(2004).
上述のように楕円曲線暗号を用いれば、計算能力、メモリ容量などのリソースが比較的少なくても暗号処理を行うことが可能である。しかしながら、スマートカード(ICカードともいう)のように、一般の計算機に比べ、さらにリソースの少ないデバイスは、少ないメモリ量に応じて最適な処理を行うことによって、処理速度に優れる暗号処理が必要となる。
非特許文献1、2の技術は、一旦、2つのスカラー値の表現を変換し、その後、変換した表現を用いて多重スカラー倍算を実行するために、変換したスカラー値の表現を格納するためのメモリが必要となる。また、変換と暗号処理を並列に行うとすると、楕円加算の計算方法として高速な手法を用いることができない。これは、スカラー値の変換処理が最下位ビットから最上位ビットに向けて(right−to−left)処理が行われるのに対し、楕円加算の高速計算手法は最上位ビットから最下位ビットに向けて(left−to−right)処理が行われたときに適用可能だからである。したがって、上記技術は、処理速度の改善、といった点について十分に考慮されていない。
多重スカラー倍計算では、まず複数のスカラー値を各数値列にエンコードする。ここで、エンコードとはスカラー値として用いられる大きな整数(2の160乗程度の値)を小さな数の列に変換する操作であり、この小さな数の列を数値列という。そして上記複数のスカラー値を上記数値列にエンコード後、上記各数値列を用いて、上記各数値列の各桁において、いずれかの数値列に0でない数値がある場合、楕円加算演算を用い、桁をずらす際に楕円2倍演算を用いる必要がある。ここで、各数値列の同じ桁位置に1つでも0でない数値がある桁、すなわち、各数値列の同じ桁位置が同時に0となるを非零桁と呼ぶ。上記各数値列における(非零桁の個数)/(桁数)の漸近的な値を非零濃度という。
非零濃度が小さくなると、上記各数値列における「0の桁」が増えることを意味するので、多重スカラー倍計算において、楕円加算演算の回数が減少し、その結果、多重スカラー倍計算の高速化を図ることができる。
また、非特許文献1の技術は、2つのスカラー値を0,1,−1の3値を用いてエンコードしているため前計算テーブルのサイズは小さいが、スマートカード等のリソースに余裕があり、前計算テーブルを大きくして高速化を図ることが可能な場合であっても対応できない。
非特許文献3の技術は、スカラー値のエンコードをleft−to−rightで高速に行なうことができるが、多重スカラー倍算に対する考察がなされていない。
本発明は、与えられたメモリ量に応じて最適な処理を行うことによって、高速計算可能な楕円曲線演算方法を提供する。
本発明は、楕円曲線演算において、複数のスカラー値、及び、スカラー値の個数と同数の楕円曲線上の点から多重スカラー倍点を計算する楕円曲線暗号における多重スカラー倍計算装置であって、上記各スカラー値を独立に各数値列にエンコードし、上記楕円曲線上の点から事前計算テーブルを作成し、上記エンコードした各数値列、及び、上記事前計算テーブルから多重スカラー倍点を計算することによって、与えられたメモリ使用量に応じて最適な処理を行う、高速演算可能な楕円曲線演算方法を提供する。
また、本発明は、上記エンコード結果の非零濃度を小さくできる、つまり、エンコード結果における「0でない桁数」(つまり、エンコード結果における非零濃度)を減らすこと、及び、エンコード結果における「0である桁数」を増やすことができる楕円曲線多重スカラー倍計算を提供する。
非零濃度とは、スカラー値のエンコード結果(これは数値列である)における「0でない桁」の割合を表わす。楕円曲線スカラー倍計算、及び、多重スカラー倍計算においては、非零濃度が小さいと計算が高速になることが知られている。この理由は、次の通りである。
多重スカラー倍算においては、スカラー値のエンコード結果の各ビットの値が零でないとき、各々、楕円曲線上の加算を1回行う。したがって、ある決まったビット長のスカラー値に対し、非零ビットの個数が少なければ、楕円曲線上の加算の回数を減少させることができる。すなわち、非零濃度が小さくなると、エンコード結果における「0の桁」が増えることを意味するので、多重スカラー倍計算において、楕円加算演算の回数が減少し、この結果、多重スカラー倍計算の高速化を図ることができる。
<発明概念を用いた説明>
従来技術を用いた多重スカラー倍計算方法と本発明による多重スカラー倍計算方法との違いを図26、図27に示す例を用いて説明する。
2つのスカラー値d=325434、d=38258と楕円曲線上の2つの点P、Pに対して、多重スカラー倍点d+dを計算する。図26に記す従来技術を用いた多重スカラー倍計算方法では、
(1)前記スカラー値d,dをエンコードする。ただし、従来技術を用いた多重スカラー倍計算において、エンコードとは、各スカラー値d,dのバイナリ表現を、数値列に変換する操作であり、前記数値列における各桁は0、±1の何れか一つである。
ここでは、d、dはそれぞれ
=(01010000−1000−1−100−1010)
=(00001010−10−10−100−10010)
にエンコードされる。
(2)前記楕円曲線上の点P、Pから点P+P、点P−Pを計算する。前計算テーブルは、点P、P、P+P、P−Pの4点からなる。例えば、点P、Pのビット長が50バイト程度の場合、前計算テーブルは200バイト程度の大きさとなる。
(3)前記各エンコード結果の各桁を見る。ここで、d、dのi桁目(iは自然数)の数値をそれぞれd[i]、d[i]で表す。(d[i]d[i])が(00)の場合は楕円加算を行わない。(10)、(−10)の場合には、点P、点−Pをそれぞれ加算する。(01)、(0−1)の場合には、点P、点−Pをそれぞれ加算する。(11)、(−1−1)の場合には、点P+P、点−(P+P)をそれぞれ加算する。(1−1)、(−11)の場合には、点P−P、点−(P−P)をそれぞれ加算する。
例えば、図26の多重スカラー倍点d+d計算では、
まず、点R(これはワークメモリである)を上記楕円曲線の無限遠点で初期化する。
次に、多重スカラー倍計算を最上位ビット(最も左)から最下位ビット(最も右)に向けて(left−to−right)実行する。
具体的には、上記(d、d)の最上位桁は(00)だから楕円加算を行わない。2桁目(10)より点Rに点Pを加算し、桁ずらしのために楕円2倍算を行う。3桁目(00)より楕円加算を行わず、桁ずらしのために楕円2倍算を行う。4桁目(10)より点Rに点Pを加算し、桁ずらしのために楕円2倍算を行う。5桁目(01)より点Rに点Pを加算し、桁ずらしのために楕円2倍算を行う。上記処理を上記各数値列の最下位桁まで繰り返す。
これに対し、図27に記す本発明による多重スカラー倍計算方法では、
(1)上記各スカラー値のバイナリ表現に対し、連続する2ビットに対する減算を行い、第一の数値列を得る。この第一の数値列をMOF表現という。
ここでは、d、dはそれぞれ、
=(1−101000−1100−10100−11−10)
=(0001−101−11−11−1100−101−10)
にエンコードされる。
上記連続する2ビットに対する減算とは以下の通りである。
=325434に対するバイナリ表現は
=(1001111011100111010)
であり、2dのバイナリ表現は、dを左に1ビットシフトしたものであり、
2d=(10011110111001110100)
である。対応するビット位置のビット毎に減算を行うと、第一の数値列d
=(1−101000−1100−10100−11−10)
を得る。言い換えると、元のビット位置のビットの1ビット右のビットからの減算を、ビット毎に行っていることになる。この計算が、連続する2ビットに対する減算である。
に対する第一の数値列計算方法も同様である。
(2)上記第一の数値列から前記第一の各数値列とは異なる第二の各数値列
=(e[n]e[n−1]…e[0])
=(e[n]e[n−1]…e[0])
にエンコードする。ただし、各i、jに対し、e[j]は
−(2w−1−1)≦e[j]≦(2w−1−1)
を満たす奇数もしくは0である。また、数値列eのビット長はn+1であり、e[n]は、数値列eの右からn+1桁目の数値を示す。i、jは、それぞれ自然数である。ここで、wはあらかじめ定めた正の整数で、ウィンドウ幅と呼ばれる。計算時間を優先する場合はwを大きな値とする。メモリ使用量を小さくする場合はwを小さな値にする。図27では、w=2、3の場合について上記第二の各数値列を計算しているが、w=3の場合のみ説明する(つまり、−3≦e[j]≦3を満たす奇数もしくは0)。上記第二の各数値列にエンコードする方法は以下の通りである。
まず、前記第一の各数値列を見て、0に変更可能であるかどうかを判定し、0に変更可能な項は1、0に変更することができない項は0を用いて表わす(図27の変換可否判定(w=3))。
上記判定を用いて、上記第二の各数値列にエンコードする。ただし、図27の変換可否判定において、最上位にある[101]は、最上位の三桁を見て、0に変換可能な項の総数が2つであるから、最上位の三桁を変換する。次の[11010]は最上位三桁と隣り合う五桁を見ることを意味する。ここでは、最初から五桁を見るのではなく、三桁を見て、0に変換可能な項の総数が予め定められた数より小さいので、五桁を見て変換を行う。次に[11010]と隣り合う四桁を見る。ここでも、最初から四桁を見るのではなく、三桁を見て、0に変換可能な項の総数が予め定められた数より小さく、五桁を見て、0に変換可能な項の総数が予め定められた数より小さいので、四桁を見て変換を行う。
次に[1100]と隣り合う三桁を見る。ただし、[1100]が示す桁の最下位桁が含まれている。[1100]が示す桁の最下位桁を含む理由は、0に変換可能な項の総数を増加させるためである。上記処理を上記各数値列の最下位ビット列までを対象に繰り返す。
図26における2つのスカラー値のエンコード結果は0の項の総数が9個であるのに対し、図27における2つのスカラー値のエンコード結果は0の項の総数が12個であり、0の項の総数が増加していることがわかる。
(2)前記楕円曲線上の点P、−Pから点aP+bP(ただし、−3≦a,b≦3なる奇数および0で、a,b双方が0の場合を除く)を計算する。前計算テーブルは、点aP+bP(ただし、1≦a≦3なる奇数および0、−3≦b≦3なる奇数および0で、a,b双方が0の場合を除く)の12個の点からなる。例えば、点P、Pのビット長が50バイト程度の場合、前計算テーブルは600バイト程度の大きさとなる。
(3)多重スカラー倍点d+d計算方法は上記図26(3)における多重スカラー倍計算方法と同様である。
図26における従来技術を用いたスカラー倍計算方法では(点P、Pのビット長が50バイト程度の場合)、前計算テーブルのサイズは200バイト程度、楕円加算回10回、楕円2倍算18回であるのに対し、図27における本発明を用いたスカラー倍計算方法では、前計算テーブルのサイズは600バイト程度、楕円加算7回、楕円2倍算18回であり、図26と比較して多重スカラー倍計算を高速に実行できることがわかる。また、上記の例では、w=3の場合に説明しているが、一般のwに対するエンコード方法も同様である。
本発明は更に、上記楕円曲線演算方法を用いた、署名検証方法、暗号化処理方法、復号化処理方法、データ共有方法、及び、鍵生成方法を提供する。
本発明は更に、上記楕円曲線演算方法を用いた、署名検証装置、署名生成装置、暗号化処理装置、復号化処理装置、データ生成装置を提供する。
より具体的な本発明の一態様においては、楕円曲線演算において、複数のスカラー値、及び、スカラー値の個数と同数の楕円曲線上の点から多重スカラー倍点を計算する楕円曲線暗号における多重スカラー倍計算装置は、上記第一の各数値列にエンコードするステップと、上記各スカラー値のバイナリ表現に対し、連続する2ビットに対する減算を行い、上記第二の数値列にエンコードするステップは、上記第一の各数値列に対し、連続する第一のビット数に対して0に変換可能な項を判定するステップと、連続する第一のビット数を含み、第一のビット数と異なる第二のビット数に対して0に変換可能な項を判定するステップと、0に変換可能な項の総数とを比較するステップと、0に変換可能な項の総数が予め定められた値以上の場合は、第一の数値列を変換するステップと、0に変換可能な項の総数が予め定められた値より小さい場合は、第一のステップを用いて第一の数値列を変換するステップと、上記ステップを繰り返し行う第五のステップと、を実行することを特徴とする。
本発明によれば、メモリ使用量が少なく,高速計算可能なスカラー倍演算装置を実現することができる。
以下、本発明の実施の形態を図面に基づいて詳細に説明する。
図1はネットワーク142によって接続された本発明による楕円曲線演算方法を適用したコンピュータ101、スマートカード121がネットワーク142により接続されたシステム構成を示すものである。本発明を署名検証システムに適用する実施形態を、図1と図2を用いて説明する。
図1の署名検証システムは、コンピュータ101と署名検証処理を行うスマートカード121とから成る。
コンピュータ101は、CPU113やコプロセッサ114などの演算装置、RAM103、ROM106や外部記憶装置107などの記憶装置、コンピュータ外部とのデータ入出力を行なう入出力インタフェース110を装備しており、外部にはコンピュータ101をユーザが操作するためのディスプレイ108、キーボード109、着脱可能な可搬型記憶媒体の読み書き装置などが接続されている。
更にコンピュータ101は、RAM103、ROM106や外部記憶装置107などの記憶装置によって、記憶部102を実現し、CPU113やコプロセッサ114などの演算装置が、記憶部102に格納されたプログラムを実行することにより、署名生成処理部112とスカラー倍計算部115とそれらに含まれる各処理部とを実現する。
署名生成処理部112は、入力されたメッセージの署名生成を行なう。
スカラー倍計算部115は、署名生成処理部112で署名生成を行なうのに必要なパラメタを計算する。記憶部102は、定数104(例えば、楕円曲線の定義式や楕円曲線上の定点である)、秘密情報105(例えば、秘密鍵である)などを記憶している。
スマートカード121は、コンピュータ101と同様に、演算装置、外部記憶装置、入出力インタフェースを備えており、CPU113がプログラムを実行することにより、署名検証処理部132と多重スカラー倍計算部135とそれらに含まれる各処理部とを実現する。
なお、各実施例の構成において、コンピュータ121内の各プログラムは、あらかじめ、上記コンピュータ内の記憶部に格納されていても良いし、必要なときに、スマートカード121が利用可能な媒体を介して他の装置から上記記憶部に導入されてもよい。
さらに、コンピュータ101内の各プログラムは、あらかじめ、上記コンピュータ101内の記憶部に格納されていても良いし、必要なときに、入出力インタフェースを介して接続するコンピュータ、または当該コンピュータが利用可能な媒体を介して上記記憶部に導入されてもよい。媒体とは、たとえば当該コンピュータに着脱可能な記憶媒体、または通信媒体(すなわちネットワークまたはネットワークを伝搬する搬送波やディジタル信号)を指す。
次に、図1の署名検証システムにおいて、署名生成処理部112が行う署名生成処理を、図2を参照して説明する。
離散対数問題に基づくディジタル署名方法を楕円曲線上の離散対数問題に基づく方法に対応させて構成する楕円曲線ディジタル署名アルゴリズム(ECDSA)という署名方法がある。ECDSA署名については、たとえば文献
D.Johnson,A.Menezes,“The Elliptic Curve Digital Signature Algorithm (ECDSA)”, Technial Report CORR 99−34, Dept. of C&O, University of Waterloo, Canada. <URL> http://www.cacr.math.uwaterloo.ca/techreports/1999/corr99−34.pdf(以下、文献ECDSAという)に記載されている。
スマートカード121は、ランダムに選んだ数値をチャレンジコード142として、インタフェースを介してコンピュータ101に転送する(図2の201)。
署名生成処理部112(図2の112)は、チャレンジコード142を受け付け、チャレンジコード142のハッシュ値をとり、所定のビット長の数値fに変換する。
署名生成処理部112は、乱数uを生成し、記憶部102(図2の102)に格納されている定数104から読み出した(図2の202)楕円曲線上の定点Qとともにスカラー倍計算部115(図2の115)へ送る(図2の203)。
スカラー倍計算部115は、定点Q、乱数uによるスカラー倍点uQ=(x,y)を計算し、計算されたスカラー倍点を署名生成処理部112へ送る(図2の205)。
署名生成処理部112は、送られたスカラー倍点を用いて署名の生成を行う。例えば、上記文献ECDSAに記載のECDSA署名であれば、
s=x mod q (式6)
t=u−1(f+ds) mod q (式7)
を計算することによりチャレンジコード142に対応する署名(s,t)を得る(図2の206)。
ここで、qは定点Qの位数、すなわち定点Qのq倍点qQが無限遠点になり、qより小さな数値mに対する定点Qのm倍点mQは無限遠点にはならない、というような数値のことである。
署名検証処理部132が行う署名検証処理を、図3を参照して説明する。
コンピュータ101は、署名生成処理部112で生成した署名141を入出力インタフェース110より出力し、インタフェースを介してスマートカード121へ転送する(図3の301)。
スマートカード121の署名検証処理部132(図3の132)は、署名141が入力される(図3の301)と、署名141の数値s,tが適切な範囲内すなわち1≦s,t<qであるかを調べる。
数値s,tが上記範囲内になければチャレンジコード142に対する署名の検証結果として「無効」を出力し、コンピュータ101を拒絶する(図3の302)。数値s,tが上記範囲内にあれば、署名検証処理部132は、
h=t−1 mod q (式8)
=fh mod q (式9)
=sh mod q (式10)
を計算する。
そして、記憶部122(図3の122)に格納されている定数124から読み出した(図3の303)公開鍵dQ及び定点Qと計算したh,hを多重スカラー倍計算部135(図2の135)へ送る(図3の304)。
署名検証処理部132は、送られたスカラー倍点を用いて、署名検証処理を行う。例えば、ECDSAの署名検証であれば、多重スカラー倍点R
R=hQ+h(dQ) (式11)
を計算し、計算された多重スカラー倍点を署名検証処理部132へ送る(図3の305)。
署名検証処理部132は、Rのx座標をxとしたとき、
s´=x mod q (式12)
を計算し、s´=sであればチャレンジコード142に対する署名の検証結果として「有効」を出力し、スマートカード101を認証し、受け入れる(図3の306)。
s´=sでなければ「無効」を出力し、スマートカードを拒絶する(図3の302)。
次に、スマートカード121が、署名検証処理を行う場合の、多重スカラー倍計算部135の処理を詳細に説明する。なお、多重スカラー倍算においては、スカラー値のエンコード結果の各ビットの値が零でないとき、各々、楕円曲線上の加算を1回行うため、エンコード結果における「0の桁」を増加させ、非零濃度を小さくすることにより、多重スカラー倍計算の高速化を図ることができる。
<多重スカラー倍計算部の実施例1>
本実施例では、図4で示される多重スカラー倍計算部135の機能ブロックを用いる。多重スカラー倍計算部135は、エンコード部402、前計算部403、実計算部404からなる。エンコード部402は、数値計算部421、数値変換部422、拡張可否判定部423、拡張部424、繰り返し判定部425、格納部426からなる。前計算部403は、加算部431、2倍算部432、繰り返し判定部433からなる。実計算部404は、ビット値判定部441、加算部442、2倍算部443、繰り返し判定部444からなる。
多重スカラー倍計算部135がスカラー値d、d、及び、楕円曲線上の点P、Pから、楕円曲線における多重スカラー倍点d+dを計算する第一の計算方法を説明する。多重スカラー倍計算部135が署名検証処理部132からスカラー値d、dと楕円曲線上の点P、Pを受け取ると、エンコード部402は、入力されたスカラー値d、d
=(e[n]e[n−1]…e[0]) (式13)
=(e[n]e[n−1]…e[0]) (式14)
にエンコードする。
ただし、各i,jに対して、e[j]は
−(2w−1−1)≦e[j]≦(2w−1−1) (式15)
を満たす奇数もしくは0である。
ここで、エンコードとは、スカラー値として用いられるような大きな整数(2160程度)から小さな数の列に変換する操作である。ただし、エンコード前のスカラー値dとエンコード後の数値列eは、それらが表す数値として等しい。すなわち次の式をみたす。
d=e[n]2+e[n−1]2n−1+…+e[0] (式16)
wはあらかじめ定めた正の整数で、ウィンドウ幅と呼ばれる。計算時間を優先する場合はwを大きな値とする。メモリ使用量を小さくする場合はwを小さな値にする。
前計算部403は、入力された楕円曲線上の点P、Pから、前計算テーブルを作成する。前計算テーブルは点aP+bPにより構成される。ここで、a,bは、−(2w−1−1)≦a,b≦(2w−1−1)を満たす奇数または0(ただしa,b双方が0の場合を除く。a’P+b’P=−(aP+bP)となるa’P+b’Pは格納しなくとも良い。)である。本実施例では、w=3とする。
実計算部404は、2つのスカラー値をエンコードした数値列e,e、楕円曲線上の点P、Pおよび前計算テーブルから多重スカラー倍点d+dを計算する。
なお、本実施例では、エンコード処理のフローチャートでサブルーチンを呼び出す処理があり、上記処理については、図6〜9で説明する。呼び出されるサブルーチンは全部で4つあり、0の項が生成可能なビット位置を返すサブルーチンcal(d,d,u,L,c)、より多くの0の項を生成するために読み込むビット列を増加させた方がよいかどうかを判定するサブルーチンexpand判定、読み込むビット列を増加させた方が良い場合に読み込みビット列を拡張させるサブルーチンexpand(d)、0の項が生成可能なビット位置に関する情報に基づき実際に変換を行うサブルーチンconvert(d)である。なお、サブルーチンの呼び出し、制御、及び、データの流れに関するシーケンス図が図25に記載されている。
次にエンコード部402、前計算部403、実計算部404の行う各処理について詳細に説明する。まず、図5〜図9を用いて、エンコード部402がスカラー値d、dをe,eにエンコードする方法を説明する。図5は、本実施例のエンコード処理(encoding)全体を説明するための図である。ここでは、上述のようにwは3、数値列数(k)は2、処理は最下位ビットから最上位ビットに向けて(right−to−left)行う。
エンコード部402は、受け取った入力d,dに対して連続する2ビットに対する減算を行い各々のMOF表現を計算し、それぞれe,eに格納し、e[n]に0、e[n]に0、uに0をそれぞれ代入する(501)。本処理において、uは、変換対象の数値のビット位置を示す変数である。
繰り返し判定部425は、u<n−1かどうかを判定する。条件が成立する場合、ステップ503へ行く。条件が成立しない場合、ステップ519へ行く(502)。
繰り返し判定部425は、e[u]=0かつe[u]=0かどうかを判定する。条件が成立する場合、ステップ504へ行く。条件が成立しない場合、ステップ505へ行く(503)[一桁チェック]。
uにu+1を代入し、ステップ502へ行く(504)。
Lにu+2を代入し、数値計算部421は、zu,L=cal(e,e,u,L,1)を計算する(505)[三桁チェック]。ここでzu,Lは、どのビット位置で0の項を生成することができるかを示す数値であり、数値zu,Lをバイナリ表現した際、ビット値1はそのビット位置において0の項が生成可能、ビット値0はそのビット位置において0の項が生成不可能であることを示している。
繰り返し判定部425は、n≦Lまたはzu,Lが(101),(110),(011)のどれか一つと等しいかどうかを判定する。条件が成立する場合、ステップ507へ行く。条件が成立しない場合、ステップ510へ行く(506)。
拡張可否判定部423は、expand(e)、expand(e)が計算できるかどうか判定する。条件が成立する場合、ステップ509へ行く。条件が成立しない場合、ステップ508へ行く(507)。
数値変換部422は、convert(e)、convert(e)を計算し、uにu+3を代入し、ステップ502へ行く(508)。
u,Lに(010)を代入し、拡張部424は、expand(e)、expand(e)を計算し、数値変換部422は、convert(e)、convert(e)を計算し、uにu+2を代入し、ステップ502へ行く(509)。
Lにu+4を代入し、数値計算部421は、zu,L=cal(e,e,u,L,1)を計算する(510)[五桁チェック]。
繰り返し判定部425は、zu,L=(11010)であるかどうかを判定する。条件が成立する場合、ステップ512へ行く。条件が成立しない場合、ステップ515へ行く(511)。
拡張可否判定部423は、expand(e)、expand(e)が計算できるかどうか判定する。条件が成立する場合、ステップ514へ行く。条件が成立しない場合、ステップ513へ行く(512)。
数値変換部422は、convert(e)、convert(e)を計算し、uにu+5を代入し、ステップ502へ行く(513)。
u,Lに(01010)を代入し、拡張部424は、expand(e)、expand(e)を計算し、数値変換部422は、convert(e)、convert(e)を計算し、uにu+4を代入し、ステップ502へ行く(514)。
Lにu+3を代入し、数値計算部421は、zu,L=cal(e,e,u,L,1)を計算する(515)[四桁チェック]。
拡張可否判定部423は、expand(e)、expand(e)が計算できるかどうか判定する。条件が成立する場合、ステップ518へ行く。条件が成立しない場合、ステップ517へ行く(516)。
数値変換部422は、convert(e)、convert(e)を計算し、uにu+4を代入し、ステップ502へ行く(517)。
u,Lに(0100)を代入し、拡張部424は、expand(e)、expand(e)を計算し、数値変換部422は、convert(e)、convert(e)を計算し、uにu+3を代入し、ステップ502に行く(518)。
エンコード部402は、e[0]、…、e[n]、e[0]、…、e[n]を出力する(519)。
図6を用いて、ステップ505、ステップ510、ステップ515で数値計算部421がzu,L=cal(d,d,u,L,c)を計算する方法(calculate z)を説明する。
数値計算部421は、与えられた二つのスカラー値d,dにおいてビット位置uからビット位置Lまでのビット列に対して、キャリービットcに応じてどのビット位置で0の項を生成することができるかを示す数値zを出力する。数値zをバイナリ表現した際、ビット値1はそのビット位置において0の項が生成可能、ビット値0はそのビット位置において0の項が生成不可能であることを示している。
数値計算部421はd、d、L、u、cを入力として受け取り、iに0を代入する(601)。
数値計算部421は、i≦1であるかどうかを判定する。条件が成立する場合、ステップ603へ行く。条件が成立しない場合、ステップ610へ行く(602)。
に−1を代入する(603)。fは、dがどの相対ビット位置で0とすることができないかを示す相対ビット位置を示す変数である。
jにu−Lを代入する(604)。
数値計算部421は、j≧0であるかどうかを判定する。条件が成立する場合、ステップ607へ行く。条件が成立しない場合、ステップ606へ行く(605)。
iにi+1を代入する(606)。
数値計算部421は、d[j+L]=0であるかどうかを判定する。条件が成立する場合、ステップ609へ行く。条件が成立しない場合、ステップ608へ行く(607)。
にjを代入する(608)。
jにj−1を代入する(609)。
rに0、jにu−Lを代入する(610)。
数値計算部421は、j≧0であるかどうかを判定する。条件が成立する場合、ステップ612へ行く。条件が成立しない場合、ステップ618へ行く(611)。
数値計算部421は、j=fまたはj=fまたはr=2であるかどうかを判定する。条件が成立する場合、ステップ614へ行く。条件が成立しない場合、ステップ613へ行く(612)。
に1、rにr+1を代入し、ステップ615へ行く(613)。
に0、rに0を代入する(614)。
数値計算部421は、c=0かつj=uLかつzu−L=1であるかどうかを判定する。条件が成立する場合、ステップ616へ行く。条件が成立しない場合、ステップ617へ行く(615)。
rに2を代入する(616)。
jにj−1を代入し、ステップ611へ行く(617)。
数値計算部421は、zを出力する(618)。
図7を用いて、ステップ508、ステップ509、ステップ513、ステップ514、ステップ517、ステップ518で数値変換部422が、convert(d)、convert(d)を計算する方法(conversion)について説明する。数値変換部422は、与えられたビット列d,dを、cal(d,d,u,L,c)の出力した数値zに基づき、zのバイナリ表現においてビット値が1となるビット位置において0の項となる数値列d,dに変換する。以下の処理では、0の項に変換すべきビット位置(次の部分ビット列の左端のビット)において、100・・・0(−1)を011・・・11、(−1)00・・・01を0(−1)(−1)・・・(−1)(−1)、100・・・01を03(−1)・・・(−1)(−1)、(−1)00・・・0(−1)を0(−3)1・・・11と変換する基本処理を繰り返すことにより達成している。
数値変換部422は、d、d、L、u、zを入力として受け取り、iに0を代入する(701)。
数値変換部422は、i≦1であるかどうかを判定する。条件が成立する場合、ステップ703へ行く。条件が成立しない場合、ステップ720へ行く(702)。
jにuを代入する(703)。
数値変換部422は、j≧Lであるかどうかを判定する。条件が成立する場合、ステップ706へ行く。条件が成立しない場合、ステップ705へ行く(704)。
iにi+1を代入し、ステップ702へ行く(705)。
数値変換部422は、zjL=1かつd[j]≠0であるかどうかを判定する。条件が成立する場合、ステップ707へ行く。条件が成立しない場合、ステップ719へ行く(706)。
sにj−1を代入する(707)。
数値変換部422は、d[s]=0であるかどうかを判定する。条件が成立する場合、ステップ709へ行く。条件が成立しない場合、ステップ710へ行く(708)。
sにs−1を代入し、ステップ708へ行く(709)。
数値変換部422は、d[j]=d[s]であるかどうかを判定する。条件が成立する場合、ステップ715へ行く。条件が成立しない場合、ステップ711へ行く(710)。
tにj−1を代入する(711)。
数値変換部422は、s≦tであるかどうかを判定する。条件が成立する場合、ステップ713へ行く。条件が成立しない場合、ステップ714へ行く(712)。
[t]にd[j]、tにt−1をそれぞれ代入し、ステップ712へ行く(713)。
[j]に0を代入し、ステップ719へ行く(714)。
[j−1]に3d[j]、tにj−2をそれぞれ代入する(715)。
数値変換部422は、s≦tであるかどうかを判定する。条件が成立する場合、ステップ717へ行く。条件が成立しない場合、ステップ718へ行く(716)。
[t]に−d[j]、tにt−1をそれぞれ代入し、ステップ716へ行く(717)。
[j]に0を代入する(718)。
jにj−1を代入し、ステップ704へ行く(719)。
数値変換部422は、dとdを出力する(720)。
図8を用いて、ステップ507、ステップ512、ステップ516で拡張可否判定部423が、expand(d)、expand(d)が計算できるかどうか判定する方法(decision for expansion)について説明する。
拡張可否判定部423は、数値変換部422が複数の数値列を変換する処理において、変換後に数値列が含む0の総数を最適化することができるかどうかを判定する。具体的には、数値列d,d,ビット位置u,Lの入力に対し、数値列d,dにおいてビット位置uからビット位置Lまでで構成される数値列に対して、変換後の数値列の最上位ビットを次の変換のために再利用した方がよいかどうかを判定し、その判定結果を出力する。
拡張可否判定部423は、d,d,L,uを入力として受け取る(801)。
拡張可否判定部423は、L≦n−3であるかどうかを判定する。条件が成立する場合、ステップ803へ行く。条件が成立しない場合、ステップ807へ行く(802)。
拡張可否判定部423は、d[L+2]≠0かつd[L+1]=0かつd[L+1]≠0であるか、または、d[L+2]≠0かつd[L+1]=0かつd[L+1]≠0であるかどうかを判定する。どちらか一方の条件が成立する場合、ステップ804へ行く。どちらの条件も成立しない場合、ステップ807へ行く(803)。
拡張可否判定部423は、d[L+2]=0かつd[L+1]=0かつd[L+2]=0かつd[L+1]=0であるかどうかを判定する。条件が成立する場合、ステップ807へ行く。条件が成立しない場合、ステップ805へ行く(804)。
拡張可否判定部423は、Σj=u [j]≠0かつΣj=u [j]≠0であるかどうかを判定する。条件が成立する場合、ステップ806へ行く。条件が成立しない場合、ステップ807へ行く(805)。
拡張可否判定部423は、expand(d)、expand(d)が計算可能と判定する(806)。
拡張可否判定部423は、expand(d)、expand(d)が計算不可能と判定する(807)。
図9を用いて、ステップ509、ステップ514、ステップ518で、拡張部424が、expand(d)を計算する方法(expansion)を説明する。具体的には、数値列d,ビット位置u,Lの入力に対し、数値列dにおいてビット位置uからビット位置Lまでで構成される数値列に対して、それに対応する0無し表現を生成し出力する。0無し表現とは、0を用いない数値列表現である。例えば、符号付2進表現(1,0,0,−1)に対して、その0無し表現は(1,−1,−1,1)である。
拡張部424は、拡張可否判定部423が拡張可能と判定した場合に行う処理である。
拡張部424は、d,L,uを入力として受け取り、jにuを代入する(901)。
拡張部424は、j=Lであるかどうかを判定する。条件が成立する場合、ステップ917へ行く。条件が成立しない場合、ステップ903へ行く(902)。
kにj+1を代入する(903)。
拡張部424は、d[j]≠0かつd[k]=0であるかどうかを判定する。条件が成立する場合、ステップ905へ行く。条件が成立しない場合、ステップ916へ行く(904)。
拡張部424は、d[k]=0かつk<Lであるかどうかを判定する。条件が成立する場合、ステップ906へ行く。条件が成立しない場合、ステップ907へ行く(905)。
kにk+1を代入し、ステップ905へ行く(906)。
拡張部424は、d[k]=0であるかどうかを判定する。条件が成立する場合、ステップ908へ行く。条件が成立しない場合、ステップ912へ行く(907)。
iにjを代入する(908)。
拡張部424は、i=kであるかどうか判定する。条件が成立する場合、ステップ911へ行く。条件が成立しない場合、ステップ910へ行く(909)。
d[i]に−d[j]、iにi+1をそれぞれ代入し、ステップ909へ行く(910)。
d[i]にd[i−1]を代入し、ステップ916へ行く(911)。
iにjを代入する(912)。
拡張部424は、i=k−1であるかどうかを判定する。条件が成立する場合、ステップ915へ行く。条件が成立しない場合、ステップ914へ行く(913)。
d[i]に−d[j]、iにi+1をそれぞれ代入し、ステップ913へ行く(914)。
d[i]にd[i−1]を代入し、ステップ916へ行く(915)。
jにkを代入し、ステップ902へ行く(916)。
拡張部424は、expand(d)を出力する(917)。
次に、図10を用いて、前計算部403が楕円曲線上の点から、前計算テーブルを作成する方法(precomputation)を説明する。前計算テーブルは、点aP+bP(ただし、1≦a≦3なる奇数および0、−3≦b≦3なる奇数および0で、a,b双方が0の場合等を除く)の12個の点からなる。P,P以外の残りの10個の点Q,Q,…,Qにはそれぞれ、Q=3P,Q=3P,Q=P+P,Q=P−P,Q=3P+P,Q=3P−P,Q=P+3P,Q=P−3P,Q=3P+3P,Q=3P−3Pが格納される。
前計算部403は点P、Pを入力として受け取る(1001)。
2倍算部432は、点P、Pの2倍点(ECDBL(P)、ECDBL(P))を計算し、その結果をQ、Qにそれぞれ代入する(1002)。
加算部431は、点Pと点Qの加算(ECADD(P,Q))を計算し、その結果をQに、点Pと点Qの加算(ECADD(P,Q))を計算し、その結果をQにそれぞれ代入する(1003)。
加算部431は、点Pと点Pの加算(ECADD(P,P))を計算し、その結果をQに、点Pと点−Pの加算(ECADD(P,−P))を計算し、その結果をQにそれぞれ代入する(1004)。
加算部431は、点Qと点Qの加算(ECADD(Q,Q))を計算し、その結果をQに、点Qと点Qの加算(ECADD(Q,Q))を計算し、その結果をQに、点Qと点Qの加算(ECADD(Q,Q))を計算し、その結果をQに、点Qと点−Qの加算(ECADD(Q,−Q))を計算し、その結果をQにそれぞれ代入する(1005)。
加算部431は、点Qと点Qの加算(ECADD(Q,Q))を計算し、その結果をQに、点Qと点Qの加算(ECADD(Q,Q))を計算し、その結果をQにそれぞれ代入する(1006)。
前計算部403は、前計算テーブルを出力する(1007)。
加算は式1、2を用いて、2倍算は式4、5を用いてそれぞれ計算される。
なお、加算、2倍算の計算には式1、2、及び、式4、5を用いる以外にも、射影座標やヤコビアン座標における計算公式がある。
また、楕円曲線上の点P=(x,y)に対して、楕円曲線加算に関する逆元の点−Pはワイエルシュトラス型楕円曲線の場合、−P=(x,−y)と表されるため、点Pの座標が与えられていれば容易に計算できる。そのため、点Q,Q,…,Qのみを前計算テーブルとして格納する。その後の実計算部304が行う計算で必要となる点−Q,−Q,…,−Qは、それらから導出すればよく、前計算テーブルには格納する必要はない。
なお、点−Q,−Q,…,−Qの導出を省くために、それらの点のy座標の値のみを前計算テーブルに格納しておいてもよい。
なお、前計算部403の行う前計算テーブルの作成処理は、点Q,Q,…,Qが計算されればよい。そのため、Cohen,H.,A course in computational algebraic number theory,GTM138,Springer−Verlag,(1993)の481ページにあるモンゴメリトリックによる逆元演算共通化方法を用いて、楕円曲線演算で必要となる逆元演算の計算の共通化を行うことにより、高速化をはかってもよい。
最後に、図11を用いて、実計算部404がエンコードされたスカラー値、楕円曲線上の点及び前計算テーブルから、楕円曲線における多重スカラー倍点を計算する方法(multi−scalar)を説明する。
実計算部404は、P,P,Q,Q,…,Q,e,eを入力として受け取る(1101)。
sにn、Rに無限遠点Oをそれぞれ代入する(1102)。
繰り返し判定部444は、s≧0であるかどうかを判定する。条件が成立する場合、ステップ1104へ行く。条件が成立しない場合、ステップ1108へ行く(1103)。
2倍算部443は、点Rの2倍点を計算し、その結果をRに代入する(1104)。
繰り返し判定部444は、e[s]=0かつe[s]=0であるかどうかを判定する。条件が成立する場合、ステップ1107へ行く。条件が成立しない場合、ステップ1106へ行く(1105)。
加算部442は、点Rと点e[s]P+e[s]Pを加算し、その結果をRに代入する(1106)。なお、e[s],e[s]は、式15をみたす奇数ないしは0であるので、e[s]P+e[s]Pもしくは−(e[s]P+e[s]P)のいずれかが、前計算テーブルに格納されている。
sにs−1を代入し、ステップ1103へ戻る(1107)。
実計算部404はRを出力する(1108)。
本実施例によれば、スカラー値のエンコード結果における非零濃度が約0.3606となる。非零濃度とは、上述の通り、(非零ビットの個数)/(ビット長)の漸近的な値を指す。なお、比零濃度の計算には、例えば、本実施例のアルゴリズムにおけるステップ503,506,511などの変換判定フローを状態遷移として表し、各状態においてconvert(d)により出力されるビット列のビット長及び非零ビットの個数を用いて、有限マルコフ過程の理論を適用することにより求めることができる。
非特許文献1の多重スカラー倍計算方法を用いた際の非零濃度は1/2であり、本実施例における非零濃度の方が小さいことがわかる。
以上の通り、上記計算方法は、楕円曲線多重スカラー倍計算の高速性に優れるという特徴がある。
<多重スカラー倍計算部の実施例2>
本実施例2では、図4で示される多重スカラー倍計算部135の機能ブロックを用いる。
多重スカラー倍計算部135(図1の135)の構成は、実施例1と同様である。
多重スカラー倍計算部135がスカラー値d、d、及び、楕円曲線上の点P、Pから、楕円曲線における多重スカラー倍点d+dを計算する第二の計算方法を説明する。実施例2では、多重スカラー倍計算を最上位ビットから最下位ビットに向けて(left−to−right)処理することが可能である。left−to−rightの計算を用いることにより、特殊な加算公式(ヤコビアン座標系においてZ座標を1とするなど)を用いることによる高速化や、エンコード処理結果を一旦メモリに格納することなく直接楕円曲線演算を行うことによるメモリ使用量の削減などを行うことができる。
多重スカラー倍計算部135が署名検証処理部132からスカラー値d、dと楕円曲線上の点P、Pを受け取ると、エンコード部402は、入力されたスカラー値d、d
=(e[n]e[n−1]…e[0]) (式17)
=(e[n]e[n−1]…e[0]) (式18)
にエンコードする。ただし、各i,jに対して、e[j]は式15を満たす奇数もしくは0である。
前計算部403は、入力された楕円曲線上の点P、Pからから、前計算テーブルを作成する。前計算テーブル作成方法は実施例1と同様である。
実計算部404は、エンコードされた2つのスカラー値と楕円曲線上の点P、Qから、前計算テーブルを用いて多重スカラー倍点d+dを計算する。多重スカラー倍計算方法は実施例1と同様である。
本実施例でも、エンコード処理のフローチャートでサブルーチン(cal(d,d,u,L,c)、convert(d))を呼び出す処理があり、これらの処理は実施例1と同様である。
次にエンコード部402、前計算部403、実計算部404の行う各処理について詳細に説明する。まず、図12を用いて、エンコード部402がスカラー値d、dをe,eにエンコードする方法(encoding)を説明する。ここでは、wは3、数値列数(k)は2、処理は最上位ビットから最下位ビットに向けて(left−to−right)行う。
エンコード部402は、受け取った入力d,dに対して連続する2ビットに対する減算を行い各々のMOF表現を計算し、それぞれe,eに格納し、e[−1]に0、e[−1]に0、uにn−1、cに1をそれぞれ代入する(1201)。
繰り返し判定部425は、u>0であるかどうかを判定する。条件が成立する場合は、ステップ1203へ行く。条件が成立しない場合は、ステップ1218へ行く(1202)。
繰り返し判定部425は、e[u]=0かつe[u]であるかどうかを判定する。条件が成立する場合は、ステップ1204へ行く。条件が成立しない場合は、ステップ1205へ行く(1203)[一桁チェック]。
uにu−1、cに1をそれぞれ代入し、ステップ1202へ行く(1204)。
Lにu−(c+1)を代入し、数値計算部421は、zu,L=cal(e,e,u,L,c)を計算する(1205)[二桁(c=0)ないしは三桁(c=1)チェック]。
繰り返し判定部425は、L≦0、または、c=0かつzu,L∈{(10),(01)}、または、c=1かつzu,L∈{(101),(110),(011)}であるかどうかを判定する。条件が成立する場合は、ステップ1207へ行く。条件が成立しない場合は、ステップ1208へ行く(1206)。
数値変換部422は、convert(e)、convert(e)を計算し、uにu−(c+2)、cに1をそれぞれ代入し、ステップ1202へ行く(1207)。
Lにu−(c+3)を代入し、数値計算部421は、zu,L=cal(e,e,u,L,c)を計算する(1208)[四桁(c=0)ないしは五桁(c=1)チェック]。
繰り返し判定部425は、c=0かつzu,L=(1010)、または、c=1かつzu,L=(11010)であるかどうかを判定する。条件が成立する場合は、ステップ1210へ行く。条件が成立しない場合は、ステップ1211へ行く(1209)。
数値変換部422は、convert(e)、convert(e)を計算し、uにu−(c+4)、cに1をそれぞれ代入し、ステップ1202へ行く(1210)。
Lにu−(c+2)を代入し、数値計算部421は、zu,L=cal(e,e,u,L,c)を計算する(1211)[三桁(c=0)ないしは四桁(c=1)チェック]。
τ[1]にe[L+1]、τ[0]にe[L]、τ[1]にe[L+1]、τ[0]にe[L]をそれぞれ代入し、数値変換部422は、convert(e)、convert(e)を計算する(1212)。
繰り返し判定部425は、e[L+1]=τ[1]かつe[L]=τ[0]かつe[L+1]=τ[1]かつe[L]=τ[0]であるかどうかを判定する。条件が成立する場合は、ステップ1214へ行く。条件が成立しない場合、ステップ1215へ行く(1213)。
uにu−(c+1)、cに1をそれぞれ代入し、ステップ1202へ行く(1214)。
繰り返し判定部425は、e[L]≠±3かつe[L]≠±3であるかどうかを判定する。条件が成立する場合、ステップ1216へ行く。条件が成立しない場合、ステップ1217へ行く(1215)。
uにu−(c+2)、cに0をそれぞれ代入し、ステップ1202へ行く(1216)。
uにu−(c+3)、cに1をそれぞれ代入し、ステップ1202へ行く(1217)。
エンコード部402は、eとeを出力する(1218)。
前計算部403が楕円曲線上の点から、前計算テーブルを作成する方法は、実施例1と同様である。
加算は式1、式2を用いて、2倍算は式4、式5を用いてそれぞれ計算される。
なお、加算、2倍算の計算には式1、式2、及び、式4、式5を用いる以外にも、射影座標やヤコビアン座標における計算公式がある。
また、点−Q,−Q,…,−Qを前計算テーブルには格納する必要がない理由、点Q,Q,…,Qの導出を省くために、それらの点のy座標の値のみを前計算テーブルに格納しておいてもよい理由、及び、モンゴメリトリックによる逆元演算共通化方法を用いて、楕円曲線演算で必要となる逆元演算の計算の共通化を行うことにより、高速化をはかってもよい理由も実施例1と同様である。
実計算部404がエンコードされたスカラー値、楕円曲線上の点及び前計算テーブルから、楕円曲線における多重スカラー倍点を計算する方法は実施例1と同様である。
本実施例によれば、スカラー値のエンコード結果における非零濃度は239/661≒0.3615となり、非特許文献1の多重スカラー倍計算方法を用いた際の非零濃度1/2より小さいことがわかる。
以上の通り、上記計算方法は、楕円曲線多重スカラー倍計算の高速性に優れるという特徴がある。
<多重スカラー倍計算部の実施例3>
実施例3では、図4で示される多重スカラー倍計算部135の機能ブロックを用いる。多重スカラー倍計算部135(図1の135)は、実施例1、及び、実施例2と同様である。
多重スカラー倍計算部135がスカラー値d、d、…、dk−1及び、楕円曲線上の点P、P、…、Pk−1から、楕円曲線における多重スカラー倍点d+d+…+dk−1k−1を計算する計算方法を説明する。
実施例3では、ウィンドウ幅w=2の場合にスカラー値及び楕円曲線上の点の個数がk個の場合に多重スカラー倍計算を行なうことが可能である。したがって、スカラー値及び楕円曲線上の点の個数が一般の場合でも多重スカラー倍計算を行なうことが可能である。また、多重スカラー倍計算を最上位ビットから最下位ビットに向けて(left−to−right)処理することが可能であり、処理速度およびメモリ使用量の観点で優れる。
多重スカラー倍計算部135が署名検証処理部132からスカラー値d、d、…、dk1と楕円曲線上の点P、P、…、Pk−1を受け取ると、エンコード部402は、入力されたスカラー値d、d、…、dk1
=(e[n]e[n−1]…e[0])
=(e[n]e[n−1]…e[0])
・・・
k−1=(ek−1[n]ek−1[n−1]…ek−1[0])
にエンコードする。ただし、各i,jに対して、e[j]は、e[j]=−1,0,1のいずれかの値である(すなわち、式15でw=2の場合である)。
前計算部403は、入力されたk個の楕円曲線上の点P、P、…、Pk−1から、前計算テーブルを作成する。前計算テーブルは点a+a+…+ak−1k−1により構成される。ここで、a,a,…,ak−1は、−1,0,1のいずれか(ただしa,a,…,ak−1全てが0の場合を除く。a’P+a’P+…+ak−1’Pk−1=−(a+a+…+ak−1k−1)となるa’P+a’P+…+ak−1’Pk−1は格納しなくとも良い)である。
実計算部404は、エンコードされたk個のスカラー値d、d、…、dk−1をエンコードした数値列e、e、…、ek−1及び楕円曲線上の点P、P、…、Pk−1から、前計算テーブルを用いて多重スカラー倍点d+d+…+dk−1k−1を計算する。
なお、本実施例では、エンコード処理のフローチャートでサブルーチンを呼び出す処理があり、上記処理については、図14,15で説明する。呼び出されるサブルーチンは全部で2つあり、0の項が生成可能なビット位置を返すサブルーチンcal(d,d,…,dk−1,u,L)、0の項が生成可能なビット位置に関する情報に基づき実際に変換を行うサブルーチンconvert(d)である。
次にエンコード部402、前計算部403、実計算部404の行う各処理について詳細に説明する。まず、図13〜図15を用いて、エンコード部402がk個のスカラー値d、d、…、dk−1をエンコードする方法を説明する。図13は、本実施例のエンコード処理(encoding)を説明するための図である。ここでは、wは2、数値列数(k)は特に限定されず、処理は最上位ビットから最下位ビットに向けて(left−to−right)行う。
エンコード部402は、受け取った入力d,d,…,dk−1に対して連続する2ビットに対する減算を行い各々のMOF表現を計算し、それぞれe,e,…,ek−1に格納し、uにn−1を代入する(1301)。
繰り返し判定部425は、0≦uであるかどうかを判定する。条件が成立する場合、ステップ1303へ行く。条件が成立しない場合、ステップ1314へ行く(1302)。
繰り返し判定部425は、e[u]=0かつe[u]=0かつ…かつek−1[u]=0であるかどうかを判定する。条件が成立する場合、ステップ1306へ行く。条件が成立しない場合、1304へ行く(1303)[一桁チェック]。
iに2を代入する(1304)。
繰り返し判定部425は、i≦k+1であるかどうかを判定する。条件が成立する場合、ステップ1307へ行く。条件が成立しない場合、ステップ1306へ行く(1305)。
uにu−1を代入し、ステップ1302へ行く(1306)。
Lに0を代入する(1307)。
繰り返し判定部425は、0≦u−i+1であるかどうかを判定する。条件が成立する場合、ステップ1309へ行く。条件が成立しない場合、ステップ1310へ行く(1308)[複数桁(i桁)チェック]。
Lにu−i+1を代入する(1309)。
数値計算部421は、z=cal(e,e,…,ek−1,u,L)を計算する(1310)。
繰り返し判定部425は、z≠−1であるかどうかを判定する。条件が成立する場合、ステップ1312へ行く。条件が成立しない場合、ステップ1313へ行く(1311)。
数値変換部422は、convert(e)、convert(e)、…、convert(ek−1)を計算し、uにu−iを代入し、ステップ1302へ行く(1312)。
iにi+1を代入し、ステップ1305へ行く(1313)。
エンコード部402は、e[0]、…、e[n−1]、e[0]、…、e[n−1]、ek−1[0]、…、ek−1[n−1]を出力する(1314)。
図14を用いて、ステップ1310において数値計算部421がz=cal(d,d,…,dk−1,u,L)を計算する方法(calculate z)について説明する。
数値計算部421は、与えられたk個のスカラー値d,d,…,dk−1においてビット位置uからビット位置Lまでのビット列に対して、どのビット位置で0の項を生成できるかを示す数値zを出力する。数値zは、ビット位置Lを基点とした相対ビット位置で0の項を生成できることを示し、z=−1の場合は0の項が生成できないことを示す。
数値計算部421は、d,d,…,dk−1を入力として受け取り、iに0を代入する(1401)。
数値計算部421は、i<kであるかどうかを判定する。条件が成立する場合、ステップ1403へ行く。条件が成立しない場合、ステップ1410へ行く(1402)。
に−1を代入する(1403)。fは、dがどの相対ビット位置で0とすることができないかを示す相対ビット位置を示す変数である。
jにu−Lを代入する(1404)。
数値計算部421は、0≦jであるかどうかを判定する。条件が成立する場合、ステップ1407へ行く。条件が成立しない場合、ステップ1406へ行く(1405)。
iにi+1を代入し、ステップ1402へ行く(1406)。
数値計算部421は、d[j+L]≠0であるかどうかを判定する。条件が成立する場合、ステップ1408へ行く。条件が成立しない場合、ステップ1409へ行く(1407)。
にjを代入する(1408)。
jにj−1を代入し、ステップ1405へ行く(1409)。
zにu−Lを代入する(1410)。
数値計算部421は、0≦zであるかどうかを判定する。条件が成立する場合、ステップ1412へ行く。条件が成立しない場合、ステップ1419へ行く(1411)。
bに1、iに0をそれぞれ代入する(1412)。bは、変数zが示す相対位置で0の項が生成できるかどうかを示すフラグである。b=1は生成可能、b=0は生成不可能を示す。
数値計算部421は、i<kであるかどうかを判定する。条件が成立する場合、ステップ1414へ行く。条件が成立しない場合、ステップ1417へ行く(1413)。
数値計算部421は、z=fであるかどうかを判定する。条件が成立する場合、ステップ1415へ行く。条件が成立しない場合、ステップ1416へ行く(1414)。
bに0を代入する(1415)。
iにi+1を代入し、ステップ1413へ行く(1416)。
数値計算部421は、b=1であるかどうかを判定する。条件が成立する場合、ステップ1420へ行く。条件が成立しない場合、ステップ1418へ行く(1417)。
zにz−1を代入し、ステップ1411へ行く(1418)。
数値計算部421は、−1を出力する(1419)。
数値計算部421は、zを出力する(1420)。
図15を用いて、ステップ1312において、数値変換部422がconvert(d)、convert(d)、…、convert(dk−1)を計算する方法(conversion)について説明する。数値変換部422は、与えられたビット列d,d,…,dk−1を、cal(d,d,…,dk−1,u,L)の出力した相対ビット位置zにおいて、0の項となる数値列d,d,…,dk−1に変換する。以下の処理においては、0の項に変換すべきビット位置(次の部分ビット列の左端のビット)において、100…0(−1)を011…11、(−1)00…01を0(−1)(−1)…(−1)(−1)と変換する基本処理を繰り返すことにより達成している。
数値変換部422は、d,d,…,dk−1,u,L,zを入力として受け取り、jにz+L、iに0を代入する(1501)。
数値変換部422は、i<kであるかどうかを判定する。条件が成立する場合、ステップ1503へ行く。条件が成立しない場合、1512へ行く(1502)。
数値変換部422は、d[j]≠0であるかどうかを判定する。条件が成立する場合、ステップ1504へ行く。条件が成立しない場合、1511へ行く(1503)。
sにj+1を代入する(1504)。
数値変換部422は、d[s]=0であるかどうかを判定する。条件が成立する場合、ステップ1506へ行く。条件が成立しない場合、1507へ行く(1505)。
sにs+1を代入する(1506)。
tにj+1を代入する(1507)。
数値変換部422は、s≦tであるかどうかを判定する。条件が成立する場合、ステップ1509へ行く。条件が成立しない場合、1510へ行く(1508)。
[t]にd[j]、tにt+1をそれぞれ代入する(1509)。
[j]に0を代入する(1510)。
iにi+1を代入する(1511)。
数値変換部422は、d,d,…,dk−1を出力する(1512)。
次に、図16を用いて、前計算部403が楕円曲線上の点から、前計算テーブルを作成する方法(precomputation)を説明する。前計算テーブルは、点a+a+…+ak−1k−1(ただし、a,a,…,ak−1は、−1,0,1のいずれか)で構成される。前計算テーブルには、s=(a,a,…,ak−1)に対して、点Q=a+a+…+ak−1k−1が格納される。
前計算部403は、点P、P、…、Pk−1を入力として受け取る(1601)。
Sに{0,±1}を代入する(1602)。
繰り返し判定部433は、Sが空集合であるかどうかを判定する。条件が成立する場合、ステップ1610へ行く。条件が成立しない場合、ステップ1604へ行く(1603)。
Sの元s=(s[0],…,s[k−1])を一つ選ぶ(1604)。
繰り返し判定部433は、Q−s=nullであるかどうかを判定する。すなわち、Qがまだ計算されていないかどうかを判定する。条件が成立する場合、ステップ1606へ行く。条件が成立しない場合、ステップ1609へ行く(1605)。
iに0、QにOをそれぞれ代入する(1606)。
繰り返し判定部433は、i≦k−1であるかどうかを判定する。条件が成立する場合、ステップ1608へ行く。条件が成立しない場合、ステップ1609へ行く(1607)。
加算部431は、点Qと点s[j]Pを加算(ECADD(Q,s[j]P)し、その結果をQに代入し、i+1をiに代入する(1608)。
Sから{s}を除き、その集合をSとする(1609)。
前計算部403は、前計算テーブルを出力する(1610)。
加算は式1、2を用いて、2倍算は式4、5を用いてそれぞれ計算される。
なお、加算、2倍算の計算には式1、2、及び、式4、5を用いる以外にも、射影座標やヤコビアン座標における計算公式がある。
なお、前計算テーブルは、点a+a+…+ak−1k−1(ただし、a,a,…,ak−1は、−1,0,1のいずれか)で構成されるが、a’P+a’P+…+ak−1’Pk−1=−(a+a+…+ak−1k−1)となるa’P+a’P+…+ak−1’Pk−1は格納しなくとも良いため、a,a,…,ai−1がすべて0の場合はa=−1となるものは格納しなくともよい。また、a,a,…,ak−1全てが0の場合についても格納しなくともよい。また、点−Qの導出を省くために、その点のy座標のみを前計算テーブルに格納しておいてもよい理由、モンゴメリトリックによる逆元演算共通化方法を用いて、楕円曲線演算で必要となる逆元演算の計算の共通化を行うことにより、高速化をはかってもよい理由、及び、点Pが固定点である場合、点Qを再計算する必要がない理由は、実施例1、及び、実施例2と同様である。
最後に、図17を用いて、実計算部404がエンコードされたスカラー値、楕円曲線上の点及び前計算テーブルから、楕円曲線における多重スカラー倍点を計算する方法(multi−scalar)を説明する。
実計算部404は、楕円曲線上の点P、P、…、Pk−1、事前計算テーブルQ、エンコードされたスカラー値e、e、…、ek−1を入力として受け取る(1701)。
sにn、Rに0をそれぞれ代入する(1702)。
繰り返し判定部444は、0≦sであるかどうかを判定する。条件が成立する場合、ステップ1704へ行く。条件が成立しない場合、ステップ1709へ行く(1703)。
2倍算部443は、点Rの2倍点(ECDBL(R))を計算し、その結果をRに代入する(1704)。
繰り返し判定部444は、Q(e[s],…,ek−1[s])=nullであるかどうかを判定する。すなわち事計算テーブルに点Qが格納されているかどうかを判定する。条件が成立する場合、ステップ1706へ行く。条件が成立しない場合、ステップ1707へ行く(1705)。
加算部442は、点Rと点−Q(e[s],…,ek−1[s])を加算(ECADD(R,−Q(e[s],…,ek−1[s]))し、その結果をRに代入する(1706)。
加算部442は、点Rと点Q(e[s],…,ek−1[s])を加算(ECADD(R,Q(e[s],…,ek−1[s]))し、その結果をRに代入する(1707)。
sにs−1を代入する(1708)。
実計算部404は、点Rを出力する(1709)。
この場合、非零濃度が1−(1/ck−1)となることが、J.Proos,”Joint Sparse Forms and Generationg Zero Columns when Combing”,Technical Report of CACR,CORR2003−23,University of Waterloo,2003.<URL>http://www.cacr.math.uwaterloo.ca/techreports/2003/corr2003−23.psに記載されている。
ここで、ck−1=(1/2k−1)*(3+Σi=1 k−1 (c+1))であり、は、k個の異なるものからi個を選ぶときの組み合わせの総数を表わす。
以上の通り、上記計算方法は、楕円曲線多重スカラー倍計算の高速性に優れるという特徴がある。
なお、上記において、実施例3は、多重スカラー倍計算を最上位ビットから最下位ビットに向けて(left−to−right)処理するものとして説明したが、最下位ビットから最上位ビットに向けて(right−to−left)処理することも可能である。
<多重スカラー倍計算部の実施例4>
実施例4では、実施例2で説明したエンコード処理を最上位ビットから最下位ビットに向けて(left−to−right)行う多重スカラー倍計算を用い、エンコード結果をメモリに格納することなく、直接多重スカラー倍計算を行う場合を説明する。
実施例4では、図18で示される多重スカラー倍計算部135の機能ブロックを用いる。多重スカラー倍計算部135は、前計算部1801、実計算部1802からなる。前計算部1801は、加算部1811、2倍算部1812、繰り返し判定部1813からなる。実計算部1802は、数値計算部1821、数値変換部1822、拡張可否判定部1823、拡張部1824、ビット値判定部1825、加算部1826、2倍算部1827、繰り返し判定部1828からなる。
多重スカラー倍計算部135がスカラー値d、d及び、楕円曲線上の点P、Pから、楕円曲線における多重スカラー倍点d+dを計算する第四の計算方法を説明する。実施例4では、スカラー値をエンコードした値を格納することなく、直接、多重スカラー倍計算を計算できるという特徴がある。したがって、多重スカラー倍計算を行なう際に、エンコード結果を格納するメモリを節約することが可能である。
前計算部1801は、入力された楕円曲線上の点P、Pから、前計算テーブルを作成する。前計算テーブル作成方法は実施例1、及び、実施例2と同様である。
実計算部1802は、2つのスカラー値と楕円曲線上の点P、Pから、前計算テーブルを用いて多重スカラー倍点d+dを計算する。
次に、図19、図20を用いて、実計算部1802がスカラー値d、d、楕円曲線上の点P、P及び前計算テーブルQから多重スカラー倍点d+dを計算する方法(on−the−fly multi−scalar)を詳細に説明する。ここでは、wは3、数値列数(k)は2、処理は最上位ビットから最下位ビットに向けて(left−to−right)行う。
実計算部1802は、P,P,d,d及び前計算テーブルQを入力として受け取る(1901)。
[n]に0、d[−1]に0、d[n]に0、d[−1]に0、uにn、cに1、Rに無限遠点Oをそれぞれ代入する(1902)。
繰り返し判定部1828は、u>0であるかどうかを判定する。条件が成立する場合、ステップ1904へ行く。条件が成立しない場合、ステップ1910へ行く(1903)。
数値計算部1821、及び数値変換部1822は、(d,d,u)を部分的にエンコードした表現(e,e,s)を求める(1904)((e,e,s)=encode(d,d,u);詳細は後述する。)。
繰り返し判定部1828は、0≦sであるかどうかを判定する。条件が成立する場合、ステップ1906へ行く。条件が成立しない場合、ステップ1903へ行く(1905)。
2倍算部1827は、点Rの2倍点(ECDBL(R))を計算し、その結果をRに代入する(1906)。
繰り返し判定部1828は、e[s]=0かつe[s]=0であるかどうかを判定する。条件が成立する場合、ステップ1909へ行く。条件が成立しない場合、ステップ1908へ行く(1907)。
加算部1826は、点Rと点e[s]P+e[s]Pを加算(ECADD(R,e[s]P+e[s]P))し、その結果をRに代入する(1908)。なお、e[s],e[s]は、式15をみたす奇数ないしは0であるので、e[s]P+e[s]Pもしくは−(e[s]P+e[s]P)のいずれかが、前計算テーブルに格納されている。
sにs−1を代入する(1909)。
実計算部1802はRを出力する(1910)。
図20を用いて、ステップ1904で、(d,d,u)を部分的にエンコードした表現(e,e,s)を求める方法(encode(d,d,u);encoding)を説明する。ここでe,e,はエンコード結果であり、sは何ビットエンコードしたかを示す数値である。また、この部分エンコード処理においては、この処理内でのみ用いる変数c,τ,τがあり、処理終了後も値を保持し、次の処理においてそれらの値が用いられる。なお、明示的にそれらの値を入出力することにより、データの受け渡しを行ってもよい。また、本実施例でも、部分エンコード処理においてサブルーチン(cal(d,d,u,L,c)、convert(d))を呼び出す処理があり、これらの処理は実施例1、実施例2と同様である。
(d,d,u)を入力として受け取る(2001)。
繰り返し判定部1828は、d[u]=d[u−1]かつd[u]=d[u−1]であるかどうかを判定する。条件が成立する場合、ステップ2003へ行く。条件が成立しない場合、ステップ2004へ行く(2002)[一桁チェック]。
に0を、eに0を、uにu−1を、cに1を、sに0をそれぞれ代入し、ステップ2020へ行く(2003)。
Lにu−(c+1)を代入し、数値計算部1821は、z=cal(e,e,u,L,c)を計算する(2004)[二桁(c=0)ないしは三桁(c=1)チェック]。
繰り返し判定部1828は、L≦0、または、c=0かつz∈{(10),(01)}、またはc=1かつz∈{(101),(110),(011)}であるかどうかを判定する。条件が成立する場合、ステップ2006へ行く。条件が成立しない場合、ステップ2008へ行く(2005)。
[u−L]にd[u−1]−d[u]を、…、e[0]にe[L−1]−d[L]を、e[u−L]にd[u−1]d[u]を、…、e[0]にd[L−1]d[L]をそれぞれ代入する(2006)[MOF表現への変換]。
[u−L+c]にτを、e[u−L+c]にτを代入し、数値変換部1822は、convert(e,e,u,L,z)を計算し、その結果を(e,e)に格納する。さらに、uにu−(c+2)を、cに1を、sにu−Lをそれぞれ代入し、ステップ2020へ行く(2007)。
Lにu−(c+3)を代入し、数値計算部1821は、z=cal(e,e,u,L,c)を計算する(2008)[四桁(c=0)ないしは五桁(c=1)チェック]。
繰り返し判定部1828は、c=0かつz=(1010)、または、c=1かつz=(11010)であるかどうかを判定する。条件が成立する場合、ステップ2010へ行く。条件が成立しない場合、ステップ2012へ行く(2009)。
[u−L]にd[u−1]−d[u]を、…、e[0]にd[L−1]−d[L]を、e[u−L]にd[u−1]−d[u]を、…、e[0]にd[L−1]−d[L]をそれぞれ代入する(2010)[MOF表現への変換]。
[u−L+c]にτを、e[u−L+c]にτを代入し、数値変換部1822は、convert(e,e,u,L,z)を計算し、その結果を(e,e)に格納する。さらに、uにu−(c+4)を、cに1を、sにu−Lをそれぞれ代入し、ステップ2020へ行く(2011)。
Lにu−(c+2)を代入し、数値計算部1821は、z=cal(e,e,u,L,c)を計算する(2012)[三桁(c=0)ないしは四桁(c=1)チェック]。
[u−L]にd[u−1]−d[u]を、…、e[0]にd[L−1]−d[L]を、e[u−L]にd[u−1]−d[u]を、…、e[0]にd[L−1]−d[L]をそれぞれ代入する(2013)[MOF表現への変換]。
[u−L+c]にτを、e[u−L+c]にτをそれぞれ代入し、数値変換部1822は、convert(e,e,u,L,z)を計算し、その結果を(e,e)に格納する(2014)。
繰り返し判定部1828は、e[1]=d[L+1]かつe[0]=d[L]かつe[1]=d[L+1]かつe[0]=d[L]であるかどうかを判定する。条件が成立する場合、ステップ2016へ行く。条件が成立しない場合、ステップ2017へ行く(2015)。
uにu−(c+1)を、cに1を、sにu−Lをそれぞれ代入し、ステップ2020へ行く(2016)。
繰り返し判定部1828は、e[0]≠±3かつe[0]≠±3かつ(e[0],e[0])≠(0,0)であるかどうかを判定する。条件が成立する場合、ステップ2018へ行く。条件が成立しない場合、ステップ2019へ行く(2017)。
uにu−(c+2)を、cに0を、sにu−Lを、τにe[0]を、τにe[0]をそれぞれ代入し、ステップ2020へ行く(2018)。
uにu−(c+3)を、cに1を、sにu−Lをそれぞれ代入し、ステップ2020へ行く(2019)。
部分エンコード結果として、e,e,sを出力する(2020)。
なお、ステップ2004、ステップ2008、及び、ステップ2012において、数値計算部1821が、cal(e,e,u,L,c)を計算する方法とステップ2007、ステップ2011、及び、ステップ2014で数値変換部が、convert(e,e,u,L,z)を計算する方法は、実施例1及び実施例2と同様である。
この場合、非零濃度は実施例2と同様、239/661≒0.3615となる。
上記計算方法が、楕円曲線多重スカラー倍計算の高速性に優れる理由は、実施例2と同様である。
また、本実施例は、部分エンコード処理に、実施例2のエンコード処理を用いた場合を例に挙げて記載した。しかし、実施例3のエンコード処理を用いることも可能である。
<多重スカラー倍計算部の実施例5>
多重スカラー倍計算部135がスカラー値d、d、及び、楕円曲線上の点P、Pから、楕円曲線における多重スカラー倍点d+dを計算する第五の計算方法を実施例5として説明する。
本実施例5では、図28で示される多重スカラー倍計算部135の機能ブロックを用いる。多重スカラー倍計算部135(図1の135)の構成は、基本的に実施例1、実施例2、実施例3と同様である。ただし、エンコード部2802が変換判定部2821、数値変換部2822、繰り返し判定部2825、格納部2826で構成される点が異なっている。
実施例5のエンコード部2802は、実施例1、実施例2、実施例3のエンコード部402同様、入力されたスカラー値d、dをMOF表現の第一の数値列e、eにエンコードする(第一のエンコード処理)。そして、第一の数値列e、eそれぞれを、第一の数値列e、eとは異なる第二の数値列にエンコードする(第二のエンコード処理)。
実施例1、実施例2では、数値計算部421がどのビット位置で0の項を生成することができるかを、両数値列e、eについて求め、拡張可否判定部423が、前記数値計算部421の計算結果を用いて、両数値列e、eについて同じ桁位置の数値が0になる桁数が所定数以上であるかどうか、1桁、3桁、5桁、4桁の順に所定数以上との結果が得られるまで判別する。そして、所定数以上との結論が得られた桁数分、数値変換部422が第二の数値列にエンコードする。
なお、拡張可否判定部423は、取り出した1桁について、数値計算部421の計算結果に基づいて両数値列e、eがともに0であるか否かを判別する。両数値列e、eがともに0であれば、当該桁をそのまま第二の数値列にエンコードする。
一方、両数値列e、eの少なくとも一方が0でないとき、拡張可否判定部423は、数値計算部421の計算結果に基づいて、取り出した1桁に連続する2桁加え3桁分とさらに連続する2桁を加えた5桁分とを比較して、いずれがより同じ桁位置の数値が0となる桁数が多いか判別し、取り出した1桁から多い方の桁数分、第二の数値列にエンコードする。
なお、実施例3では、入力されるスカラー値の数は2つに限られない。
このように、実施例1、実施例2等では、エンコード処理を行う際に読み込むビット長を、1桁、3桁、5桁、4桁に限定していた。しかし、実施例5では、エンコード処理を行う際に読み込むビット長の最大値を設けない。これにより、エンコード処理結果の非零濃度を小さくすることができ、更なる高速化を達成することができる。
また、多重スカラー倍計算を最上位ビットから最下位ビットに向けて(left−to−right)処理することが可能であり、最上位ビットから最下位ビットに向けて処理を行う他の実施例同様、高速性やメモリ使用量の観点で優れる。
多重スカラー倍計算部135が署名検証処理部132からスカラー値d、dと楕円曲線上の点P、Pを受け取ると、エンコード部2802は、入力されたスカラー値d、dを、式17、式18をみたすようにエンコードする。
前計算部403は、入力された楕円曲線上の点P、Pから、前計算テーブルを作成する。前計算テーブル作成方法は実施例1、実施例2、実施例4と同様である。
実計算部404は、エンコードされた2つのスカラー値と楕円曲線上の点P、Qから、前計算テーブルを用いて多重スカラー倍点d+dを計算する。多重スカラー倍計算方法は実施例1、実施例2と同様である。
次にエンコード部2802の行う各処理について詳細に説明する。まず、エンコード部2802における変換判定部2821、数値変換部2822の行う処理について説明する。
変換判定部2821は、与えられた二つのビット列τ,τと整数rに対して、真偽を示す値を以下の条件に応じて出力する。出力値O(τ,τ,r)が真となるのは、τ,τの列においてr個の0の項を生成できるときであり、偽となるのは、それ以外のときである。
数値変換部2822は、与えられた二つのビット列τ,τと整数rに対して、r個の0の項を含む表現O(τ,τ,r)に変換する。
次に、図29を用いて、エンコード部2802がスカラー値d、dをエンコードする方法を説明する。以下において、u、Lは、上記各実施例と同様の変数である。また、本実施例においてrは、0の項の所望の個数を示す。
、dを入力し、d[−1]に0、d[n]に0、d[−1]に0、d[n]に0、uにn、Lにn、rに1、τ[0]にd[n−1]−d[n]、τ[0]にd[n−1]−d[n]をそれぞれ代入する(2901)。
変換判定部2821は、O(τ[u−L..0],τ[u−L..0],r)が真であるかどうかを判定する。ここで、A[a..b]は、数値列Aの右からb桁目からa桁目までの(a−b)桁の数値からなる数値列を示す。真の場合は、ステップ2906へ行く。偽の場合は、ステップ2903へ行く(2902)。
ステップ2902で偽の場合、エンコード部2802は、rにr+1、LにL−2を代入する(2903)。
繰り返し判定部2825は、L>=0かどうかを判定する。L>=0の場合、ステップ2905へ行く。L<0の場合は、最大ビット長に至ったため、ステップ2909へ行く(2904)。
ステップ2904でL>=0の場合、エンコード部2802は、τ、τそれぞれを2ビット左シフト(すなわち、τ[u−L]にτ[u−L−2]、τ[u−L−1]にτ[u−L−3]、…τ[2]にτ[0]、ならびにτ[u−L]にτ[u−L−2]、τ[u−L−1]にτ[u−L−3]、…τ[2]にτ[0]をそれぞれ代入する)し、τ[1]にd[L]−d[L+1]、τ[0]にd[L−1]−d[L]、τ[1]にd[L]−d[L+1]、τ[0]にd[L−1]−d[L]をそれぞれ代入し、ステップ2902へ戻る(2905)。
ステップ2904でL<0の場合、エンコード部2802は、τ、τをそれぞれ2+Lビット左シフトし、τ[1+L]にd[−1]−d[0]、τ[1+L]にd[−1]−d[0]を代入し、さらにrに(u+2+L)/2を代入し、数値変換部2822による変換表現O(τ[u..0],τ[u..0],r)のτ[u..0],τ[u..0]をそれぞれμ[u..0],μ[u..0]に代入し、ステップ2910へ行く(2909)。
ステップ2902で真の場合、エンコード部2802は、数値変換部2822による変換表現O(τ[u−L..0],τ[u−L..0],r)のτ[u−L..0],τ[u−L..0]をそれぞれμ[u..L],μ[u..L]に代入し、さらに、uにL−1、LにL−1、rに1を代入しする(2906)。
繰り返し判定部2825は、L>=0かどうかを判定する。L>=0の場合、ステップ2908へ行く。L<0の場合、最大ビット長に至ったため、ステップ2910へ行く(2907)。
ステップ2907でL>=0の場合、エンコード部2802は、τ[0]にd[u−1]−d[u]、τ[0]にd[u−1]−d[u]を代入し、ステップ2902へ戻る(2908)。
ステップ2907でL<0の場合、エンコード部2802は、d、dをエンコードした値としてμ,μを出力し、エンコード処理を終了する(2910)。
本実施例によれば、スカラー値のエンコード結果における非零濃度は71/198≒0.3586となり、より少ない非零濃度を達成できる。従って、楕円曲線多重スカラー倍計算を高速化できる。特に、他の実施例同様、各スカラー値d、dの同じ桁がともに0となるビット数が増加するため、より高速化できる。
なお、上記において、実施例5は、多重スカラー倍計算を最上位ビットから最下位ビットに向けて(left−to−right)処理するものとして説明したが、最下位ビットから最上位ビットに向けて(right−to−left)処理することも可能である。
<多重スカラー倍計算部の実施例6>
本実施例6では、図28で示される多重スカラー倍計算部135の機能ブロックを用いる。多重スカラー倍計算部135(図1の135)の構成は、実施例5と同様である。
多重スカラー倍計算部135がスカラー値d、d、及び、楕円曲線上の点P、Pから、楕円曲線における多重スカラー倍点d+dを計算する第六の計算方法を説明する。実施例6では、エンコード処理を行う際に読み込むビット長の最大値を設けないことに加え、読み込むビット長が同じ場合にさらに良い出力結果(非零濃度の小さい結果)を生じるケースを積極的に探索する。これにより、エンコード処理結果の非零濃度を小さくすることができ、更なる高速化を達成することができる。
また、多重スカラー倍計算を最上位ビットから最下位ビットに向けて(left−to−right)処理することが可能であり、最上位ビットから最下位ビットに向けて処理を行う他の実施例同様、高速性やメモリ使用量の観点で優れる。
なお、本実施例では、偶数桁単位で非零濃度の度合いを判定する。本実施例では、抽出した偶数桁を2つの奇数桁の組に分け、それぞれの非零濃度を判定する。予め定めた非零濃度が得られるまで、奇数桁への分け方を変更する、さらに桁数を増やすの2段階で非零濃度判定の対象を変更する。以下、具体的に処理を説明する。
多重スカラー倍計算部135が署名検証処理部132からスカラー値d、dと楕円曲線上の点P、Pを受け取ると、エンコード部2802は、入力されたスカラー値d、dを、式17、式18をみたすようにエンコードする。
前計算部403は、入力された楕円曲線上の点P、Pからから、前計算テーブルを作成する。前計算テーブル作成方法は実施例1、実施例2、実施例4、実施例5と同様である。
実計算部404は、エンコードされた2つのスカラー値と楕円曲線上の点P、Qから、前計算テーブルを用いて多重スカラー倍点d+dを計算する。多重スカラー倍計算方法は実施例1、実施例2、実施例5と同様である。
次にエンコード部2802の行う各処理について詳細に説明する。エンコード部2802における変換判定部2821、数値変換部2822の行う処理は、実施例5と同様である。
次に、図30を用いて、エンコード部2802がスカラー値d、dをエンコードする方法を説明する。
、dを入力し、uにn−1、Wに2、iに1をそれぞれ代入する(3001)。Wは、読み込むビット長を示す。
変換判定部2821は、O(τ[u..u−i+1],τ[u..u−i+1],(i+1)/2)、及びO(τ[u−i..u−W+1],τ[u−i..u−W+1],(W−i+1)/2)が共に真であるかどうかを判定する。共に真の場合は、ステップ3007へ行く。いずれかが偽の場合は、ステップ3003へ行く(3002)。
ステップ3002でいずれかが偽の場合、繰り返し判定部2825は、i=W−1であるかどうかを判定する。i=W−1の場合はステップ3005へ行く。i≠W−1の場合はステップ3004へ行く(3003)。
ステップ3003でi≠W−1の場合、エンコード部2802は、iにi+2を代入し、ステップ3002へ戻る(3004)。
ステップ3003でi=W−1の場合、エンコード部2802は、WにW+2、iに1をそれぞれ代入しする(3005)。
繰り返し判定部2825は、u−W+1>=0であるかどうかを判定する。u−W+1>=0の場合はステップ3002へ戻る。u−W+1<0の場合はステップ3009へ行く(3006)。
ステップ3006でu−W+1<0の場合、繰り返し判定部2825は、u−W+1=−1であるかどうかを判定する。u−W+1=−1の場合はステップ3010へ行く。u−W+1≠−1の場合はステップ3012へ行く(3009)。
ステップ3009でu−W+1=−1の場合、変換判定部2821は、O(τ[u..0],τ[u..0],(u+2)/2)が真であるかどうかを判定する。真の場合はステップ3011へ行く。偽の場合はステップ3012へ行く(3010)。
ステップ3010で真の場合、エンコード部2802は、rに(u+2)/2を代入し、ステップ3014へ行く(3011)。
ステップ3009でu−W+1≠−1の場合ならびにステップ30103で偽の場合、エンコード部2802は、rに(u+1)/2を代入し、ステップ3014へ行く(3012)。
ステップ3002で共に真の場合、エンコード部2802は、rに(i+1)/2を代入し、数値変換部2822による変換表現O(τ[u..u−i+1],τ[u..u−i+1],r)を、μ[u..u−i+1],μ[u..u−i+1]に代入し、さらにuにu−i、WにW−i+1、iにW−1をそれぞれ代入する(3007)。
繰り返し判定部2825は、u−W+1>=0かどうかを判定する。u−W+1>=0の場合はステップ3002へ戻る。u−W+1<0の場合はステップ3013へ行く(3008)。
ステップ3008でu−W+1<0の場合、エンコード部2802は、rに(u+2)/2を代入し、ステップ3014へ行く(3013)。
エンコード部2802は、数値変換部2822による変換表現O(τ[u..0],τ[u..0],r)のτ[u..0],τ[u..0]をそれぞれμ[u..0],μ[u..0]に代入する(3014)。
エンコード部2802は、d、dをエンコードした値としてμ,μを出力し、エンコード処理を終了する(3015)。
本実施例によれば、スカラー値のエンコード結果における非零濃度をさらに向上させることができ、楕円曲線多重スカラー倍計算を高速化できる。
<多重スカラー倍計算部の実施例7>
実施例7では、図21で示される多重スカラー倍計算部135の機能ブロックを用いる。多重スカラー倍計算部135は、メモリ使用量計算部2101、多重スカラー倍計算法選択部2102、多重スカラー倍計算法A処理部135A、多重スカラー倍計算法A処理部135A、…、多重スカラー倍計算法A処理部135Aからなる。
ここで、多重スカラー倍計算法A処理部135A、多重スカラー倍計算法A処理部135A、…、多重スカラー倍計算法A処理部135Aは、それぞれ実施例1から実施例6の何れか一つに記載の異なる多重スカラー倍計算部の機能を実現する。また、各多重スカラー倍計算法A処理部135Aには、多重スカラー倍計算の速度を表わす相対的な数値(例えば非零濃度)が格納されているものとする。
図22を用いて、多重スカラー倍計算部135がスカラー値d、d、…、dk−1及び、楕円曲線上の点P、P、…、Pk−1から、楕円曲線における多重スカラー倍点d+d+…+dk−1k−1を計算する第七の計算方法を説明する。
多重スカラー倍計算部135は、スカラー値d、d、…、dk−1及び、楕円曲線上の点P、P、…、Pk−1をメモリ使用量計算部2101へ送る(2201)。
メモリ使用量計算部2101は、記憶部122において利用可能なメモリ使用量Mを計算する(2202)。なお、メモリ使用量Mは、記憶部122内の、本計算に割り当て可能な容量であり、メモリ使用量計算部2101記憶部122にアクセスし、空き容量を取得する。
多重スカラー倍計算法選択部2102は、M<Mを満たす各多重スカラー倍計算法A処理部135Aに格納されている多重スカラー倍計算の速度を表わす相対的な数値を比較し、最も高速なものを選択する(2203)。例えば、上記相対的な数値として非零濃度を用いた場合、M<Mを満たす各多重スカラー倍計算法A処理部135Aに格納されている非零濃度のうち、最小な非零濃度を持つ多重スカラー倍計算法処理部135Aを選択すればよい。
ここで、Mは、多重スカラー倍計算法A処理部135Aを用いる際に必要なメモリ使用量である。メモリ使用量計算部2101が、与えられたスカラー値d、d、…、dk−1及び、楕円曲線上の点P、P、…、Pk−1を用いて、各多重スカラー倍計算法A処理部135Aが実現する多重スカラー倍計算方法において必要な事前計算テーブルに格納する点の数に基づいて求めるものである。
ステップ2203で選択された多重スカラー倍計算法A処理部135Aは、多重スカラー倍点d+d+…+dk−1k−1を計算する(2204)。
多重スカラー倍計算部135は、多重スカラー倍点d+d+…+dk−1k−1を出力する(2205)。
上記計算方法が、楕円曲線多重スカラー倍計算の高速性に優れる理由は、与えられたメモリ使用量に合わせて、実施例1から実施例6に記載されている多重スカラー倍計算方法から最適な多重スカラー倍計算方法を選択し、多重スカラー倍計算を行っているからである。
すなわち、本実施例によれば、使用可能なメモリの容量、要求される処理速度に応じて、最適な計算方法を選択し、多重スカラー倍計算を行うことができる。
<実施例8>
本発明を暗号化処理システム、及び、復号化処理システムに適用する応用実施例である実施例8を、図23と図24を用いて説明する。
図23はネットワーク2342によって接続された本発明による楕円曲線演算方法を適用したコンピュータA2301、コンピュータB2321がネットワークにより接続されたシステム構成を示すものである。
図23の暗号通信システムにおけるコンピュータA2301でメッセ―ジの暗号化を行うには、P+k(dQ)及びkQを計算して出力し、コンピュータB2321で暗号文の復号化を行うには、秘密鍵d及びkQより−d(kQ)を計算し、
(P+k(dQ))−d(kQ) (式19)
を計算して出力すればよい。
ここでPはメッセージ、kは乱数、dは秘密鍵を示す定数、Qは定点、dQは公開鍵を示す点である。ネットワーク2342には、P+k(dQ),kQのみ送信され、メッセージPを復元するためには、kdQ、すなわちkQのd倍を計算する必要がある。ところが、秘密鍵dはネットワーク2342には送信されないため、秘密鍵dを保持しているものだけが、Pを復元できることになる。
図23において、コンピュータA2301は、CPU2313やコプロセッサ2314などの演算装置、RAM2303、ROM2306や外部記憶装置2307などの記憶装置、コンピュータ外部とのデータ入出力を行う入出力インタフェース2310を装備しており、外部にはコンピュータA2301をユーザが操作するためのディスプレイ2308、キーボード2309、着脱可能な可搬型記憶媒体の読み書き装置などが接続されている。
更にコンピュータA2301は、RAM2303、ROM2306や外部記憶装置2307などの記憶装置によって、記憶部2302を実現し、CPU2313やコプロセッサ2314などの演算装置が、記憶部2302に格納されたプログラムを実行することにより、データ処理部2312、多重スカラー倍計算部2315、スカラー値変換部2316とそれらに含まれる各処理部を実現する。
データ処理部2312は、本実施形態においては、暗号化処理部2312として機能し、入力されたメッセージの暗号化を行う。
多重スカラー倍計算部2315は、暗号処理部2312で暗号化を行うのに必要なパラメタを計算する。
記憶部2302は、定数2304(例えば、楕円曲線の定義式や楕円曲線上の定点である)、秘密情報2305(例えば、秘密鍵である)などを記憶している。
コンピュータB2321は、コンピュータA2301と同様のハードウェア構成を備える。
更にコンピュータB2321は、RAM2323、ROM2326や外部記憶装置2327などの記憶装置によって、記憶部2322を実現し、CPU2333やコプロセッサ2334などの演算装置が、記憶部2322に格納されたプログラムを実行することにより、データ処理部2332、スカラー倍計算部2335、スカラー値変換部2336とそれらに含まれる各処理部を実現する。
データ処理部2332は、本実施形態においては、復号化処理部2332として機能し、暗号化されたメッセージである暗号文2341の復号化を行う。
多重スカラー倍計算部2335は、復号化処理部2332で復号化を行うのに必要なパラメタを計算する。
記憶部2322は、定数2324(例えば、楕円曲線の定義式や楕円曲線上の定点である)、秘密情報2325(例えば、秘密鍵である。)などを記憶している。
なお、上記各プログラムは、あらかじめ、上記コンピュータ内の記憶部に格納されていても良いし、必要なときに、入出力インタフェース2310もしくは2330と上記コンピュータ2301もしくは2321が利用可能な媒体を介して、他の装置から上記記憶部に導入されてもよい。媒体とは、たとえば、入出力インタフェース2310もしくは2330に着脱可能な記憶媒体、または通信媒体(すなわちネットワークまたはネットワークを伝搬する搬送波)を指す。
図24は、コンピュータA2301、コンピュータB2321の各処理部が行う情報の受け渡しの様子を示したものである。
次に、図23のコンピュータA2301が、入力されたメッセージを暗号化する場合の動作について説明する。メッセージはディジタル化されたデータであれば良く、テキスト、画像、映像、音などの種類は問わない。
暗号化処理部2312(図24のデータ処理部2312)は、入出力インタフェース110を介して、平文メッセージ(図24の入力メッセージ2401)を受け取ると、入力された平文メッセージのビット長が予め定めたビット長か否かを判断する。予め定めたビット長より長い場合には、予め定めたビット長となるように平文メッセージを区切る。
以下、所定のビット長に区切られている部分メッセージ(単にメッセージともいう)について説明する。暗号化処理部2312は、メッセージのビット列によって表される数値をx座標(x)にもつ楕円曲線上の点Pのy座標の値(y)を計算する。例えば、ワイエルシュトラス型楕円曲線は、式3で表わされるので、これよりy座標の値を求めることができる。
次に、暗号化処理部2312は、乱数kを生成する。そして、記憶部2302に格納されている定数2304から読み出した(図24の2402)公開鍵dQとQのx座標と、求めたy座標の値と乱数kとをスカラー値変換部2316へ送る(図24の2403)。
文献R.P.Gallant,J.L.Lambert,andS.A.Vanstone“Faster Point Multiplication on Elliptic Curves with Efficient Endomorphisms”,In J.Kilian,editor,Advances in Cryptology Proceedings of CRYPTO2001,volume 2139 of Lecture Notes in Computer Science,190−200.Springer,2001.
に記載のワイエルシュトラス型楕円曲線に対し、点P、スカラー値dに対するスカラー倍点dPを、多重スカラー倍点
dP=kP+k(ΨP) (式20)
に変換する方法が記載されており、スカラー倍計算を多重スカラー倍計算に置き換えることができる。ここで、k、kは、0から√nまでの範囲にある正の整数、ΨはEの自己準同型写像、nは点Pの位数である。
したがって、P=P、P=ΨPとすると、点P、スカラー値dに対するスカラー倍点dPのスカラー倍計算は、実施例1から実施例7の何れか一つに記載の多重スカラー倍計算方法を用いて多重スカラー倍点k+kを計算することにより、高速性に優れた多重スカラー倍計算が可能である。
スカラー値変換部2316は、乱数kを
kQ=kQ+k(ΨQ) (式21)
を満たす整数k,kに変換し、
点Q、ΨQ、及び、整数k,kを多重スカラー倍計算部2315へ送る(図24の2404)。
多重スカラー倍計算部2315は、実施例1から実施例7の何れか一つに記載の多重スカラー倍計算方法を用いて、Qのx座標、y座標の値、乱数kによるスカラー倍点(xd1,yd1)=kQと、公開鍵dQのx座標、y座標の値、乱数によるスカラー倍点(xd2,yd2)=k(dQ)とを計算する。計算されたスカラー倍点を暗号化処理部2312へ送る(図24の2405)。
暗号化処理部2312は、送られたスカラー倍点を用いて、暗号化処理を行う。例えば、ワイエルシュトラス型楕円曲線では、kQとP+k(dQ)を計算する。すなわち、
e1=((yd1−y)/(xd1−x))−x−xd1 (式22)
e2=xd2 (式23)
を計算し、暗号化されたメッセージxe1,xe2を得る。
コンピュータA2301は暗号化処理部2312で暗号化された1つ以上の部分メッセージから暗号化された出力メッセージを組み立てる(図2の2406)。
コンピュータA2301は、暗号化された出力メッセージをデータ2341として入出力インタフェース2310より出力し、ネットワーク2342を介してコンピュータB2321へ転送する。
なお、図23の記憶部2302からの情報読み出しは、多重スカラー計算部2315へ当該情報を送る前で有れば、入力メッセージを受け付ける前であっても良い。
次に、コンピュータB2321が、暗号化されたメッセージ2341を復号化する場合の動作について、図24を参照しつつ説明する。
復号化処理部2332(図24のデータ処理部2312)は、入出力インタフェース2330を介して、暗号化されたデータ2341(図24の入力メッセージ2401)が入力されると、入力された暗号化されたデータ2341のビット長が予め定めたビット長か否かを判断する。予め定めたビット長より長い場合には、予め定めたビット長となるように暗号化されたデータを区切る。
以下、所定のビット長に区切られている部分データ(単にデータともいう)について説明する。データ2341のビット列によって表される数値をx座標にもつ楕円曲線上のy座標の値を計算する。暗号化されたメッセージがxe1,xe2のビット列であり、ワイエルシュトラス型楕円曲線ではy座標の値ye1,ye2は、式3から得ることができる。
復号化処理部2332は、記憶部2322(図24の2402)に格納されている秘密情報2325から読み出した(図24の2302)秘密鍵dと、x座標、y座標の値(xe1,ye1)とを、多重スカラー倍計算部2335(図24の2335)へ送る(図24の2302)。
暗号化処理と同様に、上記文献に記載されているスカラー倍計算から多重スカラー倍計算への変換方法を用いると、秘密鍵dを、式20を満たすk,kに変換することができ、スカラー倍計算を多重スカラー倍計算に変換することが可能である。スカラー値変換部2336は、秘密鍵dを、式21を満たす整数k,kに変換し、点(xe1,ye1)、及び、整数k,kを多重スカラー倍計算部2335へ送る(図24の2404)。
多重スカラー倍計算部2335は、実施例1から実施例7の何れか一つに記載の多重スカラー倍計算方法を用いて、(xd3,yd3)=d(xe1,ye1)=k(xe1,ye1)+kΨ(xe1,ye1)を計算する。多重スカラー倍計算部2335は、計算されたスカラー倍点を復号化処理部2332へ送る(図24の2405)。
復号化処理部2332は、送られたスカラー倍点を用いて、復号化処理を行う。例えば、暗号化されたメッセージが、xe1,xe2のビット列であり、ワイエルシュトラス型楕円曲線では、(P+k(dQ))−d(kQ)=(xe2,ye2)−(xd3,yd3)を計算することにより達成する。すなわち、
f1=((ye1+yd3)/(xe1−xd3))−xe1−xd3 (式24)
を計算し、暗号化される前の部分メッセージx1に相当するxf1を得る。
コンピュータB2321は、復号化処理部2332で復号化された部分メッセージから平文メッセージを組み立て(図24の2406)、入出力インタフェース2330を介して、ディスプレイ2328などから出力する。
<実施例9>
次に本発明を鍵生成、及び、鍵交換システムに適用する実施形態を実施例9として説明する。本実施形態においては、図23のシステム構成が応用できる。
図23のデータ処理部2312、2332は、本実施形態においては、それぞれ鍵交換処理部2312、2332として機能する。鍵交換システムのコンピュータA2301が、入力されたデータ2343から共有情報の導出を行う場合の動作について図23、図24を参照して説明する。
コンピュータB2321のデータ処理部2332(図24の2312)は、記憶部2322(図24の2302)の定数2325から秘密鍵bを読み出しコンピュータB2321の公開鍵bQを計算する。スカラー倍計算bQは、上記暗号化処理、及び、復号化処理と同様に、多重スカラー倍計算に置き換え、多重スカラー倍計算を行う。
そして、ネットワーク2342を介して、公開鍵bQをデータ2343としてコンピュータA2301に転送する。コンピュータA2301の鍵交換処理部2312(図24の2312)はコンピュータB2321の公開鍵bQの入力を受け付ける(図24の2401)と、鍵交換処理部2312は、記憶部2302から読み出した(図24の2402)秘密情報2305であるコンピュータA2301の秘密鍵aと、コンピュータB2321の公開鍵bQとを多重スカラー倍計算部2315へ送る(図24の2403及び2404)。
多重スカラー倍計算部2315は、秘密鍵dと、公開鍵bQによるスカラー倍点dbQを計算し、計算されたスカラー倍点を鍵交換処理部2312へ送る(図24の2405)。
鍵交換処理部2312は、送られたスカラー倍点を用いて共有情報の導出を行い、記憶部2302に秘密情報2305として格納する。例えば、スカラー倍点dbQのx座標を、共有情報とする。
次に、コンピュータB2321が、入力されたデータ2341から共有情報の導出を行う場合の動作について説明する。
コンピュータA2301のデータ処理部2312は、記憶部2302の定数2305から秘密鍵dを読み出しコンピュータA2301の公開鍵dQを計算する。そして、ネットワーク2342を介して、公開鍵dQをデータ2341としてコンピュータB2321に転送する。
コンピュータB2321の鍵交換処理部2332(図24の2312)はコンピュータA2301の公開鍵dQの入力を受け付ける(図24の2401)と、鍵交換処理部2332は、記憶部2322(図24の2302)の定数2325から読み出した(図24の2402)秘密情報2325であるコンピュータB2321の秘密鍵bと、コンピュータA2301の公開鍵dQとをスカラー倍計算部2335(図24の2315)へ送る(図24の2403及び2404)。
多重スカラー倍計算部2335は、秘密鍵bと、公開鍵dQによるスカラー倍点bdQを計算し、計算されたスカラー倍点を鍵交換処理部2332へ送る(図24の2405)。
鍵交換処理部2332は、送られたスカラー倍点を用いて共有情報の導出を行い、記憶部2322に秘密情報2325として格納する。例えば、スカラー倍点bdQのx座標を、共有情報とする。ここで、数dbと数bdは数値として同じなので、点dbQと点bdQは同じ点となり、同じ情報が導出されたことになる。
なお、本実施形態においても、暗号化処理、及び、復号化処理と同様に、上記文献に記載されているスカラー倍計算から多重スカラー倍計算への変換方法を用いると、秘密鍵dを、式20を満たすk,kに変換することができ、スカラー倍計算を多重スカラー倍計算に変換することが可能である。
また、コンピュータA2301のデータ処理部2312が鍵生成処理において、記憶部2302の定数2305から秘密鍵dを読み出しコンピュータA2301の公開鍵dQを計算する際、定点Qは記憶部2302の定数2305に格納されている。
そのため、例えば秘密鍵dのサイズが192bit程度のとき、定点Qのスカラー倍点P=232Q、P=264Q、P=296Q、P=2128Qをあらかじめ計算し、記憶部102に格納しておくことにより、秘密鍵値d、定点Qによる公開鍵dQのスカラー倍計算では、
dQ=d+d+d+d+d (式25)
より、スカラー倍計算を多重スカラー倍計算に置き換えることができることが非特許文献2に記載されている。
ここで、d、…、dは、
d=d+232+264+296+2128 (式26)
を満たす整数のバイナリ表現である。
ネットワーク2342には、点dQと点bQが送信されるが、点dbQ(もしくは点bdQ)を計算するには秘密鍵dもしくは秘密鍵bを用いなければならない。すなわち、秘密鍵dもしくは秘密鍵bを知らなければ、共有情報を得ることができない。このようにして得られた共有情報は、共通鍵暗号の秘密鍵として利用できる。
また、上記非特許文献2に記載の方法を用いて、署名検証処理システムにおける多重スカラー倍計算を行ってもよい。
また、上記各実施形態における署名生成部、署名検証部、暗号化処理部、復号化処理部、鍵生成部、鍵交換処理部は、専用のハードウェアを用いて行ってもよい。また、スカラー倍計算部をコプロセッサまたはそれ以外の専用ハードウェアで実現しても良い。また、データ処理部は、上記署名生成処理、署名検証処理、暗号化処理、復号化処理、鍵生成処理、鍵交換処理のうち、任意の一つ以上の処理を行えるように構成してもよい。
実施形態におけるシステム構成図である。 署名生成処理における情報の受け渡しを例示するシーケンス図である。 署名検証処理における情報の受け渡しを例示するシーケンス図である。 実施例1〜実施例3における多重スカラー倍計算部の構成図である。 実施例1におけるエンコード部の行うエンコード方法を例示するフローチャート図である。 実施例1、及び、実施例2におけるエンコード部の行うエンコード方法を例示するフローチャート図である。 実施例1、及び、実施例2におけるエンコード部の行うエンコード方法を例示するフローチャート図である。 実施例1におけるエンコード部の行うエンコード方法を例示するフローチャート図である。 実施例1におけるエンコード部の行うエンコード方法を例示するフローチャート図である。 実施例1、実施例2、及び、実施例4における前計算部の前計算テーブル作成方法を示す図である。 実施例1、及び、実施例2における実計算部の多重スカラー倍の計算方法を例示するフローチャート図である。 実施例2におけるエンコード部の行うエンコード方法を例示するフローチャート図である。 実施例3におけるエンコード部の行うエンコード方法を例示するフローチャート図である。 実施例3におけるエンコード部の行うエンコード方法を例示するフローチャート図である。 実施例3におけるエンコード部の行うエンコード方法を例示するフローチャート図である。 実施例3における前計算部の前計算テーブル作成を例示する図である。 実施例3における実計算部の多重スカラー倍の計算方法を例示するフローチャート図である。 実施例4の実施形態における多重スカラー倍計算部の構成図である。 実施例4における実計算部の多重スカラー倍の計算方法を例示するフローチャート図である。 実施例4における実計算部の多重スカラー倍の計算方法を例示するフローチャート図である。 実施例7の実施形態における多重スカラー倍計算部の構成図である。 実施例7における実計算部の多重スカラー倍の計算方法を例示するフローチャート図である。 暗号化処理、復号化処理、及び、鍵交換処理におけるシステム構成図である。 暗号化処理、復号化処理、及び、鍵交換処理における情報の受け渡しを例示するシーケンス図である。 実施例1におけるサブルーチンの呼び出し、制御、及び、データの流れに関するシーケンス図である。 従来技術を用いた多重スカラー倍計算方法の説明図である。 本発明を用いた多重スカラー倍計算方法の説明図である。 実施例5、6の実施形態における多重スカラー倍計算部の構成図である。 実施例5におけるエンコード部の行うエンコード方法を例示するフローチャート図である。 実施例6におけるエンコード部の行うエンコード方法を例示するフローチャート図である。
符号の説明
101、2301、2321:コンピュータ、121:スマートカード、102、122、2302、2322:記憶部、111、131、2311、2331:処理部、115:スカラー倍計算部、135、2315、2335:多重スカラー倍計算部、112:署名生成処理部、132:署名検証処理部、2321、2331:データ処理部、104、124、2304、2324:定数、105、125、2305、2325:秘密情報、110、130、2310、2330:入出力インタフェース、107、2307、2327:外部記憶装置、108、2308、2328:ディスプレイ、109、2309、2329:キーボード、2342:ネットワーク、142:チャレンジコード、2341、2343:データ、402:エンコード部、403:前計算部、404:実計算部、421:数値計算部、422:数値変換部、423:拡張可否判定部、424:拡張部、425:繰り返し判定部、426:格納部、431:加算部、432:2倍算部、433:繰り返し判定部、441:ビット値判定部、442:加算部、443:2倍算部、444:繰り返し判定部、1801:前計算部、1802:実計算部、1811:加算部、1812:2倍算部、1813:繰り返し判定部、1821:数値計算部、1822:数値変換部、1823:拡張可否判定部、1824:拡張部、1825:ビット値判定部、1826:加算部、1827:2倍算部、1828:繰り返し判定部、2802:エンコード部、2821:変換判定部、2822:数値変換部、2825:繰り返し判定部、2826:格納部

Claims (12)

  1. 楕円曲線において、複数のスカラー値、及び、前記複数のスカラー値の個数と同数の前記楕円曲線上の点から多重スカラー倍点を計算する多重スカラー倍計算装置であって、
    前記複数のスカラー値を各々、数値列にエンコードするエンコード部と、
    前記楕円曲線上の点から事前計算テーブルを作成する前計算部と、
    前記エンコードした各数値列、及び、前記事前計算テーブルから多重スカラー倍点を計算する実計算部と、
    を具備し、
    前記エンコード部は、
    一つの前記スカラー値を第一の数値列にエンコードする第一のエンコード処理と、
    前記第一の数値列から前記第一の各数値列とは異なる第二の各数値列にエンコードする第二のエンコード処理と、を実行し、
    前記第一のエンコード処理は、数値計算部が前記各スカラー値のバイナリ表現に対し、連続する2ビットに対する減算を行うステップを含み、
    前記第二のエンコード処理は、
    数値変換部が複数の予め定められた桁数から、予め定められた順序で、前記桁数を一つ選択するステップと、
    拡張可否判定部が前記第一の各数値列に対し、連続する前記選択した桁数だけ桁を見て、0に変換可能な桁の総数を判定するステップと、
    前記0に変換可能な桁の総数が予め定められた値以上の場合は、数値計算部が前記連続する桁を変換するステップと、
    前記0に変換可能な桁の総数が予め定められた値以下の場合は、前記桁数を一つ選択するステップへ行くステップと、
    前記桁数を一つ選択するステップ、前記0に変換可能な桁の総数を判定するステップ、前記連続する桁を変換するステップ、前記桁数を一つ選択するステップへ行くステップを繰り返すステップと、を実行する
    ことを特徴とする多重スカラー倍計算装置。
  2. 請求項1に記載の多重スカラー倍計算装置であって、
    前記第二のエンコード処理は、
    数値変換部、及び、拡張可否判定部が前記第一の数値列に対し、連続する第一の桁数に対して0に変換可能な項を判定する第一のステップと、
    数値変換部、及び、拡張可否判定部が前記連続する第一の桁数と異なる連続する第二のビット数に対して0に変換可能な項を判定する第二のステップと、
    拡張可否判定部が前記第一のステップにおける0に変換可能な項の総数と前記第二のステップにおける0に変換可能な項の総数とを比較する第三のステップと、
    前記第三のステップにおいて、前記第二のステップにおける0に変換可能な項の総数が予め定められた値以上の場合は、数値計算部が前記第二のステップを用いて前記第一の数値列を変換する第四のステップと、
    前記第三のステップにおいて、前記第二のステップにおける0に変換可能な項の総数が予め定められた値より小さい場合は、数値計算部が前記第一のステップを用いて前記第一の数値列を変換する第四のステップと、
    繰り返し判定部が前記第一のステップ、前記第二のステップ、前記第三のステップ、前記第四のステップを繰り返す第五のステップと、からなる
    ことを特徴とする多重スカラー倍計算装置。
  3. 請求項1に記載の多重スカラー倍計算装置であって、
    前記多重スカラー倍計算装置は、
    多重スカラー倍計算に必要なメモリ使用量を判定するメモリ使用量判定部と、
    あらかじめ決められた複数の異なる多重スカラー倍計算方法について前記メモリ使用量判定部が判定するメモリ使用量から、最適な多重スカラー倍計算方法を選択する多重スカラー倍計算方法選択部と、
    前記選択された多重スカラー倍計算方法を用いて多重スカラー倍計算を実行する多重スカラー倍計算実行部と、を具備する
    ことを特徴とする多重スカラー倍計算装置。
  4. データと署名データとから署名検証検証結果を出力する署名検証部と、前記署名検証結果を作成するために必要な多重スカラー倍点を計算する多重スカラー倍計算部と、を有する署名検証装置であって、
    前記多重スカラー倍計算部は、請求項1に記載のスカラー倍計算装置を用いて、前記多重スカラー倍点を計算するステップを実行する
    ことを特徴とする署名検証装置。
  5. データからディジタル署名データを生成する署名生成装置であって、
    請求項1に記載の多重スカラー倍計算装置を用いてスカラー倍点を計算するステップを有する署名生成処理を行う
    ことを特徴とする署名生成装置。
  6. データから暗号化データを生成する暗号化装置であって、
    請求項1に記載の多重スカラー倍計算装置を用いてスカラー倍点を計算するステップを有する暗号化処理を行う
    ことを特徴とする暗号化装置。
  7. 暗号化データから復号化データを生成する復号化装置であって、
    請求項1に記載の多重スカラー倍計算装置を用いてスカラー倍点を計算するステップを有する復号化処理を行う
    ことを特徴とする復号化装置。
  8. 第一のデータから第一のデータとは異なる第二のデータを生成するデータ生成装置であって、
    請求項1に記載の多重スカラー倍計算装置を用いてスカラー倍点を計算するステップを有するデータ生成処理を行う
    ことを特徴とするデータ生成装置。
  9. 楕円曲線において、入力された複数のスカラー値及び入力された前記複数のスカラー値の個数と同数の前記楕円曲線上の複数の点を用いて多重スカラー倍点を計算して出力する多重スカラー倍計算装置であって、
    前記入力された複数のスカラー値を受け付ける受付部と、
    前記入力された前記楕円曲線上の複数の点を記憶する記憶部と、
    前記受け付けた複数のスカラー値を各々、数値列にエンコードするエンコード部と、
    前記記憶されている楕円曲線上の各点を用いて事前計算テーブルを作成する前計算部と、
    前記エンコードした各数値列、及び、前記事前計算テーブルを用いて多重スカラー倍点を計算して出力する実計算部と、
    を具備し、
    前記エンコード部は、
    前記複数のスカラー値をそれぞれ複数の第一の数値列にエンコードする第一エンコード処理部と、
    前記複数の第一の数値列をそれぞれ前記複数の第一の数値列とは異なる複数の第二の数値列にエンコードして前記第二の数値列を前記数値列とする第二エンコード処理部と、を備え、
    前記第一エンコード処理部は、前記複数のスカラー値それぞれのバイナリ表現を2倍したものから前記バイナリ表現を減算することにより前記複数の第一の数値列を得、
    前記第二エンコード処理部は、
    前記複数の第一の数値列のいずれかの端から順に、予め定められた条件を満足する、変換する桁数(変換桁数)と変換を開始する桁(変換開始桁)とを決定する変換判定部と、
    前記変換判定部が決定した変換開始桁から前記変換桁数分、前記複数の第一の数値列を前記複数の第二の数値列にエンコードし、先にエンコードされている前記複数の第二の数値列に追加して前記複数の第二の数値列とする数値変換部と、を備えること
    を特徴とする多重スカラー倍計算装置。
  10. 請求項9記載の多重スカラー倍計算装置であって、
    前記変換判定部は、変換桁数とすべき桁数を1桁から2桁ずつ増加させ、前記複数の第一の数値列を前記変換開始桁から当該変換桁数とすべき桁数分それぞれ前記複数の第二の数値列にエンコードした際、それぞれの同じ桁位置の数値が0にエンコードされる桁の数が前記変換桁数とすべき桁数の半分以上となったとき、当該桁数を変換桁数と決定するとともに、前記変換開始桁から決定した桁数目の次の桁を変換開始桁と決定すること
    を特徴とする多重スカラー倍計算装置。
  11. 請求項9記載の多重スカラー倍計算装置であって、
    前記変換判定部は、変換桁数とすべき桁数を2桁から2桁ずつ増加させ、前記変換桁数とすべき桁数を2つの奇数桁の組に分割し、前記複数の第一の数値列それぞれを前記変換開始桁から当該2つの奇数桁分別々に前記複数の第二の数値列にエンコードした際、前記複数の第二の数値列それぞれの同じ桁位置の数値が0にエンコードされる桁の数が前記2つの奇数桁両方についてそれぞれの奇数桁の半分以上となったとき、当該変換すべき桁数を変換桁数と決定するとともに、前記変換開始桁から決定した桁数目の次の桁を変換開始桁と決定すること
    を特徴とする多重スカラー倍計算装置。
  12. 請求項9記載の多重スカラー倍計算装置であって、
    前記変換判定部は、
    前記複数の第二の数値列それぞれの同じ桁位置の数値が0となる桁(以後、0の項と呼ぶ。)を生成可能な桁位置を計算する数値計算部と、
    前記数値計算部での計算結果に基づいて前記変換桁数を増加させるべきか否かを判別し、前記変換桁数を決定する拡張可否判定部と、を備え、
    前記数値変換部は、前記エンコード後、前記変換開始桁から前記決定した変換桁数目の次の桁を変換開始桁とすること
    を特徴とする多重スカラー倍計算装置。
JP2006090017A 2005-03-29 2006-03-29 楕円曲線暗号における多重スカラー倍計算装置、署名検証装置、及び、それらのプログラム。 Pending JP2006309201A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2006090017A JP2006309201A (ja) 2005-03-29 2006-03-29 楕円曲線暗号における多重スカラー倍計算装置、署名検証装置、及び、それらのプログラム。

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2005093433 2005-03-29
JP2006090017A JP2006309201A (ja) 2005-03-29 2006-03-29 楕円曲線暗号における多重スカラー倍計算装置、署名検証装置、及び、それらのプログラム。

Publications (1)

Publication Number Publication Date
JP2006309201A true JP2006309201A (ja) 2006-11-09

Family

ID=37476093

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006090017A Pending JP2006309201A (ja) 2005-03-29 2006-03-29 楕円曲線暗号における多重スカラー倍計算装置、署名検証装置、及び、それらのプログラム。

Country Status (1)

Country Link
JP (1) JP2006309201A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016133601A (ja) * 2015-01-19 2016-07-25 日本電信電話株式会社 マルチスカラー倍算演算装置、マルチスカラー倍算演算方法、プログラム

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016133601A (ja) * 2015-01-19 2016-07-25 日本電信電話株式会社 マルチスカラー倍算演算装置、マルチスカラー倍算演算方法、プログラム

Similar Documents

Publication Publication Date Title
US7961874B2 (en) XZ-elliptic curve cryptography with secret key embedding
US7904498B2 (en) Modular multiplication processing apparatus
CN109039640B (zh) 一种基于rsa密码算法的加解密硬件系统及方法
EP1014617A2 (en) Method and apparatus for elliptic curve cryptography and recording medium therefor
US7162032B2 (en) Encryption of programs represented as polynomial mappings and their computations
JP4197710B2 (ja) 暗号装置、復号装置、プログラム及び方法
JP2007139895A (ja) 暗号装置、復号装置、プログラム及び方法
CN101005350B (zh) 加密处理设备和加密处理方法
US20090136025A1 (en) Method for scalarly multiplying points on an elliptic curve
JP4690819B2 (ja) 楕円曲線暗号におけるスカラー倍計算方法およびスカラー倍計算装置
JP2003098962A (ja) 楕円曲線スカラー倍計算方法及び装置並びに記録媒体
KR100457177B1 (ko) 유한체 상의 두 원소의 곱을 구하는 직렬-병렬 곱셈기
JP4423900B2 (ja) 楕円曲線暗号におけるスカラー倍計算方法と、その装置およびそのプログラム
WO2016034912A1 (en) Method and apparatus for scalar multiplication secure against differential power attacks
Sadkhan A proposed genetic algorithm attack for public key cryptosystem
KR20010067016A (ko) 알에스에이 공개키 암호 고속화 장치 및 방법
JP2006309201A (ja) 楕円曲線暗号における多重スカラー倍計算装置、署名検証装置、及び、それらのプログラム。
JP4502817B2 (ja) 楕円曲線スカラー倍計算方法および装置
JP4692022B2 (ja) 楕円曲線暗号におけるスカラー倍計算装置、及び、そのプログラム
JP4598269B2 (ja) 楕円曲線上の高速有限体演算
JP4783061B2 (ja) 楕円曲線暗号におけるスカラー倍計算装置
CN1258051A (zh) 一种公开密钥加密体制和装置
JP2005316038A (ja) 楕円曲線暗号におけるスカラー倍計算方法と、その装置およびプログラム
JP7406108B2 (ja) 暗号復号システム、暗号復号方法、及び暗号復号用プログラム
JP3435473B2 (ja) 暗号化・復号化方法及び装置