(57)【特許請求の範囲】
【請求項１】
ウィンドウ法を用いて楕円曲線Ｅ上の点Ｐのべき乗倍値ｋＰ（ｋは桁数の多い正の整数）の演算を行うことにより、秘密の通信又は認証を行う情報セキュリティ装置であって、
整数ｋを変換ビット列に変換する変換手段と、
前記変換ビット列を、１個以上のｆビットのウィンドウと、値０のみを含む１個以上の零値列とに分割するウィンドウ分割手段と、
ウィンドウ毎に、そのウィンドウ値ｗを用いてべき乗倍値ｗＰを算出し、全てのウィンドウについて算出されたべき乗倍値を当該ウィンドウの位置に応じて加算し、これによりべき乗倍値ｋＰを得るべき倍手段と、
得られたべき乗倍値ｋＰを用いて、情報を暗号化し、情報を復号し、情報にデジタル署名を施し、又は情報にデジタル署名の検証を施すセキュリティ処理手段とを備え、
前記正の整数ｋは、複数のビットからなり、
前記変換手段により生成される前記変換ビット列は、整数ｋが有するビット数より多い複数のビットからなり、各ビット値は、符号（sign）を有し、
前記変換手段は、
整数ｋの１個のｆビットのウィンドウの上位側に隣接するビットから、連続する複数の値１からなる同一値列を検索し、
同一値列が存在する場合に、当該同一値列の最下位ビットにおいて、当該同一値列に値１を加算し、前記変換ビット列において当該同一値列に相応する位置に前記加算による桁上げ値を含む加算結果を書き込み、前記ウィンドウの値から、前記ウィンドウの上位側に隣接するビットにおいて、値１を減算し、その符号付きの減算結果を前記変換ビット列において前記ウィンドウに相応する位置に書き込み、
その結果、前記変換ビット列は、前記同一値列に相応する位置において前記同一値列のビット数と同数の連続する複数の値０を含み、その上位側に隣接して値１を含み、前記ウィンドウに相応する位置において、符号付きの前記減算結果を含む
ことを特徴とする情報セキュリティ装置。
【請求項２】
前記変換手段は、整数ｋの１個のｆビットのウィンドウの上位側に隣接するビットが値０である場合、前記ウィンドウの値を、前記変換ビット列において前記ウィンドウに相応する位置に書き込む
ことを特徴とする請求項１に記載の情報セキュリティ装置。
【請求項３】
前記変換手段は、
整数ｋの１個のｆビットのウィンドウの上位側に隣接するビットから、連続する複数の値１からなる同一値列を検索して、同一値列が存在する場合であって、前記桁上げ値を含む前記加算結果及び符号付きの前記減算結果を前記変換ビット列に書き込んだときに、
さらに、前記同一値列の最上位から２ビット先のビットから上位側へ各ビットを順にサーチし、値１であるビットが最初に発見されるまでに発見される値０を除外し、最初に値１であるビットが発見されたときに、当該ビットから上位側へｆビットを新たなウィンドウとして特定し、
特定した新たな前記ウィンドウの上位側に隣接するビットから、連続する複数の値１からなる同一値列を検索し、
同一値列が存在する場合に、当該同一値列の最下位ビットにおいて、当該同一値列に値１を加算し、前記変換ビット列において当該同一値列に相応する位置に前記加算による桁上げ値を含む加算結果を書き込み、前記ウィンドウの値から、特定した新たな前記ウィンドウの上位側に隣接するビットにおいて、値１を減算し、その符号付きの減算結果を前記変換ビット列において新たな前記ウィンドウに相応する位置に書き込み、
特定した新たな前記ウィンドウの上位側に隣接するビットが値０である場合、前記ウィンドウの値を、前記変換ビット列において前記ウィンドウに相応する位置に書き込む
ことを特徴とする請求項２に記載の情報セキュリティ装置。
【請求項４】
前記変換手段は、さらに、整数ｋの最下位ビットに至るまで、前記ウィンドウの特定と、同一値列の検索と、桁上げ値を含む加算結果及び符号付きの減算結果の書き込みと、ウィンドウ値の書き込みとを繰り返す
ことを特徴とする請求項３に記載の情報セキュリティ装置。
【請求項５】
前記変換手段は、
同一値が存在する場合の前記加算において、当該同一値と同数の値０からなるビット列を生成し、前記桁上げ値を値１とし、値１と生成したビット列とを前記加算結果とし、
同一値が存在する場合の前記減算において、前記ウィンドウの値について、２の補数を算出し、算出結果の各ビット値を負数にすることにより、前記符号付きの減算結果を得る
ことを特徴とする請求項１に記載の情報セキュリティ装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は情報セキュリテイ技術としての暗号技術に関するものであり、特に、楕円曲線を用いて実現する暗号及びデジタル署名技術において必要な演算を行うべき倍演算装置に関する。
【０００２】
【従来の技術】
秘密通信方式とは、特定の通信相手以外に通信内容を漏らすことなく通信を行なう方式である。またデジタル署名方式とは、通信相手に通信内容の正当性を示したり、本人であることを証明する通信方式である。この署名方式には公開鍵暗号とよばれる暗号方式を用いる。公開鍵暗号は通信相手が多数の時、通信相手ごとに異なる暗号鍵を容易に管理するための方式であり、多数の通信相手と通信を行なうのに不可欠な基盤技術である。簡単に説明すると、これは暗号化鍵と復号化鍵が異なり、復号化鍵は秘密にするが、暗号化鍵を公開する方式である。この公開鍵暗号の安全性の根拠に用いられるものに離散対数問題がある。離散対数問題には代表的に、有限体上定義されるもの及び楕円曲線上定義されるものがある。これはニイルコブリッツ著  ”ア  コウス  イン  ナンバア  セオリイ  アンド  クリプトグラヒイ”(Neal Koblitz , " A Course in Number theory and Cryptography", Spinger-Verlag,1987)に詳しく述べられている。楕円曲線上の離 散対数問題を以下に述べる。
【０００３】
楕円曲線上の離散対数問題とは、
E(GF(p)）を有限体GF(p)上定義された楕円曲線Eとし、Eの位数が大きな素数で割れる元Gをベースポイントとする。このとき、Eの与えられた元Ｙに対して、
Y=xG
となる整数xが存在するならばxを求めよという問題である。
公開鍵暗号の安全性の根拠に離散対数問題がおかれるのは、大きな有限体ＧＦ（ｐ）に対して上記計算は極めて難しく、いわば一方向関数の逆関数を計算することに相当するからである。
【０００４】
次に上記楕円曲線上の離散対数問題を応用したエルガマル署名をまず述べる。
図１３は従来例である楕円曲線上のエルガマル署名方式の構成を示すものである。以下同図を参照しながら手順を説明する。
(1)センタの設定
pを素数、GF（p）上の楕円曲線をEとし、その素数位数qの元をGとする。ユーザ Ａの公開鍵をYa=xaGとし、秘密鍵をxaとする。センターは素数p及び楕円曲線E及びベースポイントGをシステムパラメータとして公開するとともに、Ａの公開鍵Yaを公開する。
【０００５】
(2)署名生成
１ 乱数ｋを生成する、
２ R1=kG=(rx,ry)
ここで、ｍはメッセージである。
s = m + rx・ｘa/k （mod  q）を計算する、
３ （R1、ｓ）を署名としてｍとともに送信する。
【０００６】
(3)署名検証
sR1 = mG + rxYa
が成り立つかチェックする。
上記例でわかるように、楕円曲線を用いた署名方式では、固定点Ｇの冪倍の演算 kG 及び 任意点 P(従来例では公開鍵Yaに相当)の冪倍の演算rxYaの計算が必要である。この演算を実現する従来例として以下の２つが知られている。第一は固定点Ｇの冪倍の計算方法であるが、これは以下の文献が詳しい。
【０００７】
E. F. Brickell, D.M. Gordon, K. S. McCurley and D.B. Wilson, "Fast exponentiation with precomputation",  Advances in cryptology-proceedings of Eurocrypt'92,  Lecture notes in computer science, 1993, Springer-Verlag, 200-207。
（従来例１）
ここで簡単にこの従来例について説明する。以下従来例の手順を説明する。
【０００８】
p を 160ビットの素数とし、有限体GF(p)上の楕円曲線を E とし、E(GF(p))  の元を G , kGの計算をする。
step1. 予備計算テーブル作成
Gi=(16^i)G (i=1,・・・,40)
を予備計算テーブルとして計算する。
【０００９】
step2. k・Gの計算
任意の160ビットの正整数kを、
k = k0 + k1・16 + k2・16^2 + ・・・ + k40・16^40
( -7 ≦k0,・・・,k40 ≦8）
表し、k・Gの計算を、
step2-1. B=A=Σsign(ki) Gi (ki=8 となる i に対する和)
step2-2. d=7
step2-3. d ≧ 1 の間、以下の操作をする
A = A + Σsign(ki) Gi (ki=±d となる i に対する和)
B = B+A
d = d-1
step2-3 に戻る
このとき、B = k・G となり k・G が求められる。
【００１０】
この方法では、楕円の２倍点の演算は不要で、加算の演算のみですむが、反面その演算が44回も必要になる。楕円曲線によっては、加算の演算の方が２倍点の演算より時間がかかる場合があるため、上記方法はあまり効率的な演算ではないといえる。
次に、任意点Ｙaの冪倍を計算する方法であるが、これは以下の文献が詳しい。Koyama, Tsuruoka, "Speeding up elliptic cryptosystems by using a signed binary window method", Advances in cryptology-proceedings of Crypto'92, Lecture notes in computer science, 1993, Springer-Verlag, 345-357。
【００１１】
ここで簡単に、この従来例について説明する。
（従来例２）
p を 160ビットの素数とし、有限体GF(p)上の楕円曲線を E とし、E(GF(p))  の任意の元を P , k・P の計算をする。
ここで、kの２進表現を、
k = k0 + k1・２+ k2・2^2 + ・・・ + k159・2^159=[k159....k2k1k0]
(k0,・・・,k159 = 0,1）
step1. addition-subtraction 表現への変換
kiの下位ビットから検索し、kの部分ビット列B、
B=[1,..,bi,..,1]
が、
#B1 -#B0 ≧ 3
の時、T(B)、
T(B)=[1,0,..,ti,..,-1], ti=bi-1
に変換をする。ここで、#B1 及び #B0 はそれぞれ部分ビット列Bに含まれる 1  及び 0 の数を表す。kの変換後をTとする。
【００１２】
step2. ウインドウに分割する
T=[t160,....,t2,t1,t0] と表し、Tを上位ビットから探索する。
初めて1が出てくるビットから、順に下位に探索し、４ビット以下までで0となるビットの直前で区切り、これを一つのウインドウとする。
４ビットまでで０にならない場合は、４ビットを一つのウインドウとする。
【００１３】
step3. 予備計算テーブルの作成
sP(s=3,5,..,15)を計算し予備計算テーブルとする。
step4. kP の計算
Tを上位ビットより探索し、ウインドウがある毎に、予備計算テーブルの値を 加えて、その結果を2冪倍することを繰り返す。
【００１４】
ところで、この従来例では、ウィンドウの数が多いことから、step4の加算の回数が増える、上述した固定点のべき倍方法と同様に演算の効率面での課題がある。
【００１５】
【発明が解決しようとする課題】
従って、この発明は楕円曲線を用いた暗号方式や署名方式で必須の固定点のべき倍や任意点のべき倍を求める演算を効率的に行うことのできる演算装置を提供することを主たる目的としている。
【００１６】
【課題を解決するための手段】
上記目的はｐ,ｑを素数とし有限体ＧＦ（ｐ）上の楕円曲線をＥとし、Ｅ（ＧＦ(p)）の位数ｑの元をＧとし、ｐをｔワードとし、Ｅ（ＧＦ(p)）及びＧをベースポイントとし、ｋをｎワード以上の桁数をもった正の整数とした場合（但しｎ≧１）ベースポイントＧのべき倍ｋＧの計算を行う楕円曲線演算装置であって、ワード単位の桁数離れた数値の組とベースポイントＧとの積を求めて記憶している第１テーブルと、ワード単位の桁数離れた数値の組であって第１テーブルにおける数値の組とは各数値とも桁数が異なっている数値の組とベースポイントＧとの積を求めて記憶している第２テーブルと、両テーブルに格納されている数値の加算と２倍点の演算を繰り返してベースポイントＧのべき倍ｋＧの計算を行う演算手段とを備えていることによって達成できる。
【００１７】
ここで、第１テーブルの各数値と第２テーブルの各数値との桁数の差は１／２ワードに相当する桁数であることとしてもよい。
また、演算手段は、第１アドレス生成部と第２アドレス生成部を有し、第１、第２アドレス生成部は、演算手段に新たな正の整数ｋが入力されると、その整数の桁順の数列を参照して第１テーブル、第２テーブルを検索するアドレスを生成することとしてもよい。
【００１８】
また、第１、第２アドレス生成部は、正の整数ｋからワード単位の桁数とびの係数を検出し、その係数の組からなるアドレスを生成する構成であり、 第１のアドレス生成部と第２のアドレス生成部が整数ｋから検出する係数の桁位置は１／２ワードに相当する桁数分異なっていることとしてもよい。
また、第１アドレス生成部は、整数ｋを下位桁からワード単位で区切った場合の各区分における最上位桁の係数の組み合わせを最初検出し、以後１桁ずつ下位桁の係数の組み合わせを順に検出し、各区分における１／２ワード相当の桁位置より１桁上位の係数の組み合わせを検出するまで続行する構成であり、第２アドレス生成部は、前記各区分における下位から１／２ワード相当の桁位置の係数の組み合わせを最初検出し、以後１桁ずつ下位桁の係数の組み合わせを順に検出し各区分の最下位桁の係数の組み合わせを検出するまで続行する構成であり、第１テーブルの各数値は第２テーブルの各数値よりも１／２ワード相当桁数分、桁が高いこととしてもよい。
【００１９】
また、演算手段は、更に読み出し部と演算部を含み、読み出し部は第１、第２アドレス生成部が生成するアドレスを用いて第１テーブル、第２テーブルを検索し、該当するアドレスに格納している数値を読み出す構成であり、演算部は、読み出し部が読み出す第１テーブルの格納値と第２テーブルの格納値の和をとる第１演算と、第１演算によって求めた値を２のべき倍する第２演算と、続いて読み出し部が第１、第２テーブルから格納値を読み出した際にその読み出した２つの格納値の第１の演算の結果と第２の演算の結果との和を求める第３の演算とを繰り返す構成であり、各テーブルに格納されている数値及び正の整数ｋ及びベースポイントＧは全て２進数で表現されていることとしてもよい。
【００２０】
また、上記目的はネットワークを介してセンターと接続され、センターからシステムパラメータとして素数ｐ、有限体ＧＦ（ｐ）上の楕円曲線をＥ、Ｅ（ＧＦ(p)）の位数ｑの元Ｇ、公開鍵Ｙaを入手し、内部に乱数ｋを発生する乱数発生手段、前記元Ｇのべき倍ｋＧを求める楕円曲線演算装置を含み、他の通信端末との間で公開鍵暗号通信を行う通信端末であって、前記楕円曲線演算装置は、ワード単位の桁数離れた数値の組とベースポイントＧとの積を求めて記憶している第１テーブルと、ワード単位の桁数離れた数値の組であって第１テーブルにおける数値の組とは各数値とも桁数が異なっている数値の組とベースポイントＧとの積を求めて記憶している第２テーブルと、両テーブルに格納されている積和値の加算と２倍点の演算を繰り返してベースポイントＧのべき倍ｋＧの計算を行う演算手段とを備えることによっても達成できる。
【００２１】
また、上記目的はｐ,ｑを素数とし有限体ＧＦ（ｐ）上の楕円曲線をＥとし、Ｅ（ＧＦ(p)）の位数ｑの元をＧとし、ｐをｔワードとし、Ｅ（ＧＦ(p)）及びＧをベースポイントとし、ｋをｎワード以上の桁数をもった正の整数とした場合（但しｎ≧１）ベースポイントＧのべき倍ｋＧの計算を行う楕円曲線演算装置であって、ワード単位の桁数離れた数値の組とベースポイントＧとの積を求めて記憶しているテーブルと、正の整数ｋを参照して前記テーブルを索引するアドレスを生成する検索手段と、検索手段の生成するアドレスによってテーブルから読み出した第１の値を２のべき倍する、べき倍数は１／２ワードの桁数に相当する第１演算手段と、第１演算手段の演算によって得た第２の値と、検索手段の生成する新たなアドレスによってテーブル索引して得た第３の値との和を求める第２演算手段第２演算手段と、第２の演算手段の演算結果を２のべき乗倍する、このべき乗数は正の整数ｋを参照する桁位置に応じて異なっている第３演算手段と、正の整数ｋの全ての桁を参照し終えるまで、上記第１〜第３演算手段の演算を繰り返させる繰り返し手段とを備えていると共に、前記整数ｋ、元Ｇはいずれも２進数で表現されていることによっても達成できる。
【００２２】
また、上記目的はｐ,ｑを素数とし有限体ＧＦ（ｐ）上の楕円曲線をＥとし、Ｅ（ＧＦ(p)）の位数ｑの元をＧとし、ｐをｎビット、Ｅ（ＧＦ(p)）及びＧをベースポイントとし、ｋを桁数の多い正の整数とするとき、楕円曲線Ｅ上の任意の点ｐのべき乗倍ｋｐの演算を加算―減算変換法とウィンドウ法を組み合わせて行う楕円曲線演算装置であって、
正の整数ｋの２進表現を、
k=k0+k1・2+k2・2^2+・・・・・  kn-1・2^(n-1)
（但し、k0・・・・・  kn-1は各ビットの係数で０又は１である）
とするとき、ｋの下位ビットから係数を検索し、ki=1となるビットを検出する係数検出手段と、ki=1となるビットが検出された場合に、(i+m)ビットの係数k(i+m)が１なら、i+m+1ビットから上位の係数を検索し、ks=0になるビットｓを見つけ、係数k(i+m+1)〜ks を反転した変換値ts=1, ts-1=0,・・・・・  t(i+m+1)=0を生成する係数変換手段と、係数変換手段によってｓ〜i+m+1ビット間の係数が変換された場合、ki〜k(i+m)は(i+m+1)〜ｓビットの部分の変換時に付加した余剰値を調整した係数ti〜t(i+m)に変換する余剰調整手段と、係数検出手段がki=1となるビットを検出した場合において、k(i+m)が０なら、ki〜ki+m=Ti〜Ti+mとする無変換手段と、余剰調整手段が余剰調整を行った場合はｓ＋１ビットから上位ビットに対し、無変換手段がki〜ki+m=Ti〜Ti+mとした場合は、i+m+1ビットから上位ビットに対し、係数検出手段に検出動作を行わせ、前記各手段による処理を繰り返させる繰り返し指示手段とを備えることによっても達成できる。
【００２３】
ここで、ｍはウィンドウ法で分割する１ウィンドウ内のビット数と一致していることとしてもよい。
また、ｍ＝４であることとしてもよい。
また、上記目的はｐ,ｑを素数とし有限体ＧＦ（ｐ）上の楕円曲線をＥとし、Ｅ（ＧＦ(p)）の位数ｑの元をＧとし、ｐをｎビット、Ｅ（ＧＦ(p)）及びＧをベースポイントとし、ｋを桁数の多い正の整数とするとき、楕円曲線Ｅ上の任意の点ｐのべき倍ｋｐの演算を行う楕円曲線演算装置であって、
正の整数ｋの２進表現を、
k=k0+k1・2+k2・2^2+・・・・・ +kn-1・2^(n-1)
（但し、k0・・・・・  kn-1は係数で０又は１である）
とするとき、ｋを下位ビットから検索してki=1となるビットがあったとき、k(i+m)=1ならば（但しｍは整数）、i+m+1ビット目から上位ビットの係数を検索し、初めてks=0になるビットｓが見つかると、k(i+m+1)〜ksの係数を反転した変換値ts=1,ts-1〜ti+m+1=0を生成し、一方ki〜k(i+m)は、(i+m+1)〜ｓビットの範囲の変換時に付加した余剰分を調整した係数ti〜t(i+m)に変換する加減算変換手段と、前記変換手段によって全ビットの変換が行われた後、変換後の数列を対象としてウィンドウ法によってｍビットのウィンドウに分割するウィンドウ分割手段と、ｓ＝３，５，・・・・・ （２m−１）とするとき、任意点ｐと上記各ｓの値との積を予め求めて格納している予備計算テーブルと、ウィンドウ毎にその中の２進数の値を用いて予備計算テーブルを検索し、得られたｓｐ値をべき倍し、次のウィンドウに関して同様にして得たｓｐ値を加算するべき倍手段とを備えると共に、べき倍、加算を繰り返して任意点のべき乗倍ｋｐを得ることによっても達成できる。
【００２４】
ここで、ｍ＝４であることとしてもよい。
【００２５】
【発明の実施の形態】
図１は、本発明が適用される通信環境を示している。例えばリング型のネットワーク上に署名通信を行うＡ装置とＢ装置、それにセンターが接続されている。図２は、Ａ装置のエルガマル署名通信を行うための構成を示すブロック図であり、同図にみられるようにＡ装置は、乱数生成部１、署名生成検証部２，送信部３，受信部４，固定点べき倍演算装置５並びに秘密鍵保持部６から構成されている。エルガマル署名方式は、従来技術の項で既に述べたように概ね以下の手順で行われる。先ず、センターが素数ｐ、楕円曲線Ｅ、ベースポイントＧをシステムパラメータとして公開すると共に、Ａの公開鍵Ｙａを公開する。次いで、署名通信を行おうとする送信者Ａが自装置で発生した乱数とセンターから入手した上記システムパラメータを用いて署名を生成し、受信者Ｂに対してメッセージと共に送信する。受信者Ｂは受信した署名とメッセージを用いて所定の演算を行い、署名の正当性を検証する。署名が正当であれば、受け取ったメッセージは確かにＡが送信したものであることが認証できる。
【００２６】
Ａ装置の乱数生成部１は署名通信を行うに際して、一の乱数ｋを発生する。乱数の桁数は任意であるが、例えばシステムパラメータとしてセンターから入手するｐの桁数と同程度とされる。即ち、ｐが１６０桁であれば乱数も１６０桁程度とされる。乱数生成器の構成は各種知られているので省略する。
固定点べき倍演算装置５は前記乱数生成部１が生成した乱数ｋと、受信部４を通じてセンターから入手したシステムパラメータのうちベースポイントＧとを用いて
Ｒ＝ｋＧ ＝（ｒｘ，ｒｙ）
の演算を行う。この式において、Ｇは固定点であるので、演算式を固定点のべき倍を求める式と呼ぶ。この演算装置５の詳細は後述する。
【００２７】
署名生成検証部２は、Ａ装置が署名通信の送信側である場合には署名生成を行い、受信者である場合には署名検証を行う部分である。署名生成を行う場合は固定点べき倍演算装置５の生成した演算結果Ｒ１と秘密鍵保持部６の保持する秘密鍵Ｘa、メッセージｍ及び素数位数ｑを用いて、次式の演算を行う。
【００２８】
【数１】
0004105803.tif 000002
【００２９】
一方、署名検証を行う場合は、送信部３を通じて他装置から入手した署名（Ｒ１，ｓ）とメッセージｍ、センターから入手したシステムパラメータを用いて次式の演算が成り立つかチェックする。
【００３０】
【数２】
0004105803.tif 000003
【００３１】
署名生成検証部２の行う上記各演算は乗除算及び加算であり、ハードウェア又はソフトウェアで実現できる。但し、上記演算中（ｒxＹa）なる乗算は通信相手によって異なる公開鍵Ｙaを用いており、いわゆる任意点のべき倍に相当する演算であり、従来に比して一段と効率的に行うよう工夫されている。その詳細は図４に示されており、後述する。
[固定点のべき倍の演算]
図３は固定点べき倍演算装置５の詳細な構成を示すブロック図であり、該装置５はテーブル記憶部５１，テーブル索引生成部５２，読み出し部５３、第１演算部５４，出力部５５及び制御部５６から構成されている。
【００３２】
各部の構成を説明するに先だってこの装置５の演算原理について概説する。この装置５は既述したように固定点のべき倍ｋＧを求める方法である。例えば乱数ｋを１６０桁の２進数とすると、次のような一般式で表わされる。
【００３３】
【数３】
0004105803.tif 000004
【００３４】
固定点のべき倍は上式の各桁にＧを掛けたものの総和を求めればよいが、演算数が多く時間がかかるので、そのような方法は避け、代わりに３２ビットおきの係数ｋiの組み合わせと、３２ビットおきの２進数の値の和にＧを乗算した値との対応表を準備しておき、入力されてくる乱数の３２ビットおきの係数ｋiの組み合わせを検出し、その組み合わせを用いて前記対応表を検索してその組み合わせに対応する乗算値を求める。そして、この手法を１桁ずつシフトしながら係数ｋiの組み合わせで選択しないものがなくなるまで繰り返し、その総和を求めるのである。この場合、対応表が一種類だけであると、対応表の検索、乗算の繰り返し回数は３２回必要となるが、二種類準備しておくと、その半分の１６回で足り、より効率的になる。これが本実施例で行う固定点のべき倍方法の原理である。
【００３５】
次に、上記原理を踏まえ固定点べき倍演算装置の各部の構成を説明する。
[テーブル記憶部の構成]
図５にテーブル記憶部５１の記憶内容を示す、図中、ｓは３２ビットおきの係数ｋiの組み合わせを示す数列である。乱数が１６０ビットであるので、この乱数から３２ビットおきに取り出した係数の個数は５であり、従って、ｓが５ビットであることは理解できる。尚、ｓの上位の係数は乱数の上位の係数となるようｓの係数の並び順は乱数のそれと一致させてある。また、各係数ｋiは０か１であるので５個の係数列がとり得る値は”０００００”〜”１１１１１”の２＾５（＝３２）通り存在する。勿論乱数ｋが発生された後は各ｋiは一義的に定まるが、テーブルは乱数としてどんな値が発生されたとしてもその乱数の３２ビットおきの係数の組み合わせをもっている必要があるので、ｓとしては上記のように”０００００”〜”１１１１１”の２＾５通りの値を用意せねばならないのである。図５中にｓが”０００００”〜”１１１１１”まで３２通り記載されているのは上記理由による。尚、ｓは以上の説明から明かなように乱数ｋの係数ｋiの組み合わせとして、採る可能性のある全ての数列であり、乱数ｋの係数ｋiそのものではないので、次の式で示す。
【００３６】
【数４】
0004105803.tif 000005
【００３７】
ここで、[a4a3a2a1a0]は単に０．１の数字の並びを意味している。
次に、Ａ（ｓ）は乱数ｋの最下位ビットｋ0・２^０と、そこから３２ビットずつ上位のビットの値（ｋ32・２^３２，ｋ64・２^６４，ｋ96・２^９６，ｋ128・２^１２８）にベースポイントＧを掛けた値に相当している。この場合、Ａ（ｓ）はｓのとり得る３２通りの全ての値[a4a3a2a1a0]に対して準備されている。例えばｓが”００００１”の場合には、最下位ビットの係数ｋ0のみ１であるのでＡ（ｓ）はＧである。ｓが”０００１０”に場合には、最下位ビットから３２ビット上位の係数ｋ32のみが１であるのでＡ（ｓ）はｓ２^３２・Ｇとなる。ｓが”０００１１”の場合にはｋ0とｋ32が１なので、Ａ（ｓ）は２＾３２・Ｇ＋Ｇとなる。次の（５）式にＡ（ｓ）の一般式を示す。
【００３８】
【数５】
0004105803.tif 000006
【００３９】
一方、Ｂ（ｓ）は乱数ｋの最下位から１６ビット上位の値ｋ16・2^16と、そこから３２ビットずつ上位のビットの値｛k(16+32)・2^(16+32), k(16+64)・2^(16+654), k(16+96)・2^(16+96), k(16+128)・2^(16+128)｝にベースポイントＧを掛けた値に相当している。言うなれば同一のｓにおけるＡ（ｓ）の値を１６ビット上位へシフトした値である。シフト数を１６ビットとしたのは、ｓが３２ビットおきのｋiの組み合わせであることと関係している。すなわち、３２ビットの丁度半分が１６ビットであるので、固定点のべき倍ｋ・Ｇの演算のために繰り返す回数が１６回で済むこととなるためである。次の（６）式にＢ（ｓ）の一般式を示す。
【００４０】
【数６】
0004105803.tif 000007
【００４１】
[テーブル索引生成部]
テーブル索引生成部５２は、乱数ｋが発される度に乱数を一時的に記憶し、乱数ｋ中の３２ビットおきの係数を検出する。乱数が（３）式に示した１６０ビットの値であるので、３２ビットおきの係数の組み合わせは次の３２通りである。
0004105803.tif 000008
テーブル索引生成部５２は一回につき、Ａ（ｓ）とＢ（ｓ）の夫々の索引をするために２つの索引アドレス（上記した係数の組み合わせ）を生成する。生成の順序は制御部５６から指示される係数ｊ（０≦ｊ≦１５）によって決定される。１回目は上記３２通りの組み合わせのうち(１５)と(３１)のｋiの組み合わせを出力するよう指示され、以後(０)(１６)に至るまで降順に指示される。
【００４２】
ここで、テーブル索引生成部５２がＡ（ｓ）検索用に生成すつ索引アドレスをＵj, Ｂ（ｓ）検索用に生成する索引アドレスをＶjとすると、それらは次式（７）（８）によって求められる。
【００４３】
【数７】
0004105803.tif 000009
【００４４】
【数８】
0004105803.tif 000010
【００４５】
例えば上式においてｊ＝１５であると、
【００４６】
【数９】
0004105803.tif 000011
【００４７】
【数１０】
0004105803.tif 000012
【００４８】
となる。上式（９）（１０）の値は既述した係数の組み合わせのうち(１５)(３１)に相当することが理解される。同様にｊ＝０の場合、
Ｕ0＝k128・2^4+k96・2^3+k64・2^2+k32・2+k0
Ｖo＝k144・2^4+k112・2^3+k80・2^2+k48・2+k16
となり、夫々既述した係数の組み合わせの(０)(１６)に相当することが理解される。尚、テーブル索引生成部５２の構成は図示していないが、式（７）及び式（８）の演算を実現するハードウェア又はソフトウェアを用いる。そのようなハードウェア、ソフトウェアは当業者であれば極めて簡単に実現できる。
[読み出し部]
読み出し部５３は、前記テーブル索引生成部５２から得るＵj, Ｖjを用いてテーブル記憶部５１を検索し、対応するＡ（Ｕj）,Ｂ（Ｖj）を読み出し第１演算部５４に出力する。
[第１演算部]
第１演算部５４は新たな乱数が発生される度に、テーブル記録部５１から読み出されるＡ（Ｕj）,Ｂ（Ｖj）を用いて固定点のべき倍ｋＧの値を求めるもので、その手順は図６のフローチャートに示されている。フローチャートの説明に先だって演算方法を説明する。固定点のべき倍ｋＧの演算は、基本的には乱数ｋの各桁にベースポイントＧを掛け、各々の桁の乗算値の和を求めることにあり、式で示せば次式の通りである。
【００４９】
【数１１】
0004105803.tif 000013
【００５０】
一方、テーブル記憶部５１から順次読み出されるＡ（Ｕj）,Ｂ（Ｖj）は以下に列挙する式の通りである。
【００５１】
【数１２】
0004105803.tif 000014
【００５２】
【数１３】
0004105803.tif 000015
【００５３】
以上のＡ（Ｕj）,Ｂ（Ｖj）を用いて、ｋＧを求めるためには、桁の違いを考慮すると次の（１４）式で示す漸化式を用いて求めることができる。
【００５４】
【数１４】
0004105803.tif 000016
【００５５】
図１６のフローチャートにおいて、ステップＳ２ではＴを零元（＝∞）にする処理を行う。ステップＳ５のＡ（Ｕj）,Ｂ（Ｖj）の獲得は、テーブル索引生成部５２からＵj,Ｖjを得てテーブル記憶部５１を検索し、Ａ（Ｕj）,Ｂ（Ｖj）を読み出す処理である。ステップＳ３→Ｓ４→・・・→Ｓ８→Ｓ４→・・→Ｓ８の繰り返し処理が上記漸化式の実行である。ステップＳ４でｊ＜０と判断されたときの下の値がｋＧであり、出力部５５を通じて署名生成検証部２へ出力される（Ｓ９）。尚、ステップＳ３，Ｓ４，Ｓ８のｊのデクリメント処理は制御部５６によって実行される。
[任意点のべき倍演算]
次に署名生成検証部２の行う任意点のべき倍ｒxＹa処理について説明する。図４がその構成を示したブロック図であり、変換部２１，ウィンドウ分割部２２，テーブル生成部２３，第２演算部２４，出力部２５からなる。ここで、ｒxはエルガマル署名通信に際してメッセージｍと共に通信相手に送られるデータＲ１のｘ成分である。このｒxは乱数であり、また暗号通信においては乱数ｋと公開鍵Ｙaの乗算を行うので、ここでは便宜上ｒxを乱数ｋとみなして、乱数と公開鍵の乗算ｋＹaを署名生成検証部２が行うとして説明する。乱数ｋは例えば１６０桁の２進数で式（３）で表現されるものとする。
[変換部]
変換部２１は乱数ｋに対して、いわゆるaddition-subtraction変換を行う。
addition-subtraction変換は図７，８のフローチャートにその手順が詳細に示されているが、端的に云えば、乱数ｋの係数列[kn, kn-1, kn-2,・・・k2 k1k0]を係数列Ｔ＝[tn+1, tn, tn-1. ・・・t2t1t0]に変換することである。その変換方法は次の通りである。
（１）乱数ｋを下位ビットから検索し、係数ｋi＝１となるビットを検索する。（２）ｋi＝１となるビットが見つかると、そのビットより４ビット上位のｋ(i+4)を参照し、ｋ(i+4)＝０ならば、ｋi〜ｋ(i+4)の係数をそのままｔi〜ｔ(i+4)の係数とする、即ち、式で示せば、
【００５６】
【数１５】
0004105803.tif 000017
【００５７】
である。
そして、次の(i+5)ビットから上位に同様な操作を行う。
（３）一方、k(i+4)=1ならば、k(i+3)〜kiの処理は後回しにして更に(i+5)ビット目から上位を検索してゆき、初めて係数が０となるビットｓに対して、ｔｓ＝１とし、（ｓ−１）ビットから（i+4)ビットの係数を全て零とする。
t(s-1) ＝t(s-2)・・・＝t(i+4)＝０
そして、係数k(i+3)〜kiについては、２進数[k(i+3), k(i+2), k(i+1), ki]の２の補数をとり、
【００５８】
【数１６】
0004105803.tif 000018
【００５９】
各係数を負数にしたものをｔ係数とする。
【００６０】
【数１７】
0004105803.tif 000019
【００６１】
この後、（ｓ＋１）ビットから同じ操作に戻る。
以上の処理を最上位ビットまで行うと、変換後の係数列Ｔを得る。
次に、この変換処理を図９の具体例に基づき説明する。図９では乱数ｋとして２８桁の２進数が示されている。この乱数ｋに対して下位ビットから変換処理を行うのであるが、この例では最下位ビットの係数が１であるので、この係数をｋiとおき、このビットから上位４ビット目(i+4)の係数を検索する、すると、k(i+4)＝０であるので、ki〜k(i+4)をそのまま係数ti〜t(i+4）とする、図中、Ｔ１がこの部分の変換後の係数列を示している。
【００６２】
次に、(i+5)ビットに進み、再び係数が１か０かの検出を行う。(i+5)ビット目の係数は１なので、そのビットを新たにiとして、ビット位置iから４ビット上位の係数k(i+4)を参照する。ここではk(i+4)=1であるので、更に上位ビットを参照し、初めて係数が０になるビットｓを検出する。図示例では(i+4)ビットよりも３ビット上位のビットがks=0となっていることがわかる。そこで、Ｓビット目の係数を１，(s-1)〜(i+4)ビットまでを零に変換したものを変換後の係数ｔｓ〜t(i+4)とする。そして、更にk(i+3)〜kiにたいしては、式（１３）、式（１４）の処理を行い、”１１０１”を得る。かくして、ｓ〜iビット（乱数中１３〜６ビット）の間の変換を完了する、図中Ｔ２がこの部分（１３〜６ビット間）の係数列を示している。
【００６３】
以後、同様にして上位ビットの変換処理Ｔ３を行い、最上位のビットまで完了すると、各部分変換係数Ｔ１Ｔ２Ｔ３・・・を順に並べて最終的な変換係数列Ｔを得る。
図７のフローチャートは、１６０ビットの乱数ｋの係数列を変換する処理を示している。ステップＳ７２，Ｓ７６等に示されるiは乱数ｋのビット位置を示す変数である。ステップＳ７５，Ｓ７８等で出てくるＴメモリは変換後の係数ｔを格納するメモリである、Ｓ７３でi＞１５９と判定された時点におけるＴメモリの格納値が変換後の係数列Ｔ＝[t160,t159,・・・t1,t0]である。Ｓ７３→Ｓ７４→Ｓ７５→Ｓ７６→Ｓ７３で示すように乱数ｋの最下位ビットから０が続く限りそのままＴメモリの対応するビット位置に０が書き込まれる。一方、係数が１になると（Ｓ７４）、そのビット位置から４ビット上位の係数が１であるかどうかをＳ７７で判定し、Noであれば、Ｓ７８→Ｓ７９により、そのままＴメモリに格納されるし、Ｓ７７でYesであれば図８に示すサブルーチンに進み、式（１３）（１４）を含む演算処理を行う。図８のステップＳ８４が(i+4)ビットより上位ｓビットまでの変換処理、ステップＳ８５，Ｓ８６がi〜(i+3)までの変換処理を示している。図７、８の処理は既述した変換操作から理解されるので、これ以上の説明は省略する。
【００６４】
但し、このaddition-subtraction変換はステップＳ８４の処理から理解されるように、乱数に係数１が多く含まれていると０に変更され、その分係数１の数が減少することに留意すべきである。
[ウィンドウ分割部]
ウィンドウ分割部２２は、図１０に示すように、変換部２１にて得られた係数列Ｔ（Ｓ１０１）を上位ビットから検索し（Ｓ１０２→Ｓ１０３→Ｓ１０４→Ｓ１０５→Ｓ１０３）、初めて１が出てくるビットから順に下位に検索し４ビットで１つのウィンドウとする（Ｓ１０６）。この処理を最下位ビットまで繰り返す（Ｓ１０７）。この処理では係数０のビットが多いとウィンドウの数が極めて少なくなることが理解される。しかも、addition-subtraction変換によって係数１の数が減少しているので、addition-subtraction変換後にウィンドウ分割する処理を行う本方法では、ウィンドウの数がより一層少ないことが理解される。
【００６５】
図９の最下段に、addition-subtraction変換後の係数列Ｔをウィンドウに分割した例を示す。この例からもウィンドウの数が少なくなっていることが理解される。
[テーブル作成部]
テーブル作成部２３は公開鍵Ｙaを受け取ると、それを奇数倍する演算を行う。ウィンドウの大きさが４ビット（＝１５(10))であるので、奇数倍は１５倍を上限としている。作成されたテーブルを図１１に示す。
[第２演算部]
第２演算部２４は変換係数列Ｔを上位から検索し、ウィンドウがある毎に、テーブルの値を加えて、その結果を２べき倍することを繰り返す。詳しい手順は図１２に示されている。先ず、１番目のウィンドウから（Ｓ１２１）、ウィンドウ内の４ビットを参照し（Ｓ１２２）、その４ビットの上位から係数１が存在するビットまでを抽出する（Ｓ１２３）。例えば、４ビットが”１１００”であった場合には”１１”が抽出される。同様に”１０１０”であった場合には”１０１”が抽出される。抽出したビット列の値は必ず奇数であり、しかも１０進数で１５以下の数である。続いて抽出したビット列の値を用いてテーブルを検索し、ｓＹaを取り出し（Ｓ１２４）、Ｓ１２５に進む。１番目のウィンドウの処理ではＺ＝０に設定（Ｓ１２１）されているので、Ｓ１２５においては、ＺメモリにｓＹaが格納されることになる。この後、抽出したビット列の最下位ビットから２番目のウィンドウの最上位ビットまでの係数０の個数ｍを検出する（Ｓ１２７）。
【００６６】
次に、２番目のウィンドウに移って（Ｓ１２８）、同様にウィンドウ内の４ビットの上位から係数１が存在するビットまでを抽出し、テーブルを検索し該当するｓＹaを読み出す（Ｓ１２４）。そして、Ｓ１２５に進み演算を行う。この場合、Ｚメモリにはウィンドウ１においてした演算結果ｓＹaが格納されているし、ｍの値も直前のＳ１２７において検出されているので、Ｚメモリは
Ｚ＝（ｓＹa)w1・２^m＋（ｓＹa)w2
と書き換えられる。但し、（ｓＹa)w1はウィンドウ１の処理でテーブルから得た値、（ｓＹa)w2はウィンドウ２の処理でテーブルから得た値である。
【００６７】
以下、３番目、４番目のウィンドウについてＳ１２２〜Ｓ１２８の処理を進め、全てのウィンドウについて処理を終えると（Ｓ１２６）、Ｓ１３０に進み、最後のウインドウＷmax内の抽出したビット別の最下位ビットから下位に存在する０の数ｎを検出し、その時のＺメモリに格納された値に２nを掛け、これを最終的なＺメモリの値とする。かくして最終的にＺメモリに格納された値が任意点のべき倍kＹkである。
【００６８】
上記実施例は本発明の一例を示したもので、本発明はそのような例に限定されるものでないことは勿論である。上記実施例以外に変更実施できる点を以下に列挙する。
▲１▼固定点のべき倍の演算において、テーブル記憶部に記憶しているＡ（ｓ）、Ｂ（ｓ）は、３２ビットを１ワードとする１ワードおきのべき倍値の和であるし、テーブル索引生成部は乱数から１ワード（＝３２ビット）おきの係数を検出するようにしているが、１ワードが６４ビットであっても或いは１６ビットであってもよく、３２ビットに限られない。但し、対象とする乱数が１６０ビットの場合は、１ワードを３２ビットとするのが索引アドレスのビット数の点、べき倍の和の値の点からも適切である。
▲２▼実施例ではＡ（ｓ）とＢ（ｓ）という２種類のべき倍値の和を用いて固定点のべき倍演算を行うようにしているが、べき倍値の和としては３種類以上準備し、各々用いるようにすることもできる。その場合は１ワードのビット数をべき倍値の和の種類数で等分し、他のべき倍値の和は、基準となるべき倍値の和に対して等分されたビット数分ズレたビットに相当するものとすればよい。
▲３▼更にべき倍値の和はＡ（ｓ）のみの一種類でも足りる。その場合はＡ（ｓ）を１６ビットシフトした2^16・A(s)を演算し、これをＢ（ｓ）の代用として（１２）式の演算を行うようにすればよい。
▲４▼任意点のべき倍の演算でウィンドウに分割する際、ウィンドウは４ビットの大きさとしたが、ビット数にはこだわらない。５ビットでも６ビットでもよいことは勿論である。
▲５▼実施例ではエルガマル署名通信を行う装置に本発明を適用しているが、暗号通信や認証、特に楕円曲線を用いた暗号通信や認証を行う装置に適用できる。
▲６▼ベースポイントＧは実施例では楕円曲線Ｅ（ＧＦ（ｐ））の位数ｑの元に相当するが、楕円曲線の拡大体Ｅ（ＧＦ(p^r)）の元をＧとして用いることもできる。但し、ｒは正整数である。同様に任意点のべき倍の演算においても楕円曲線Ｅ（ＧＦ(p)）に代えてその拡大体Ｅ（ＧＦ(p^r)）を適用することもできる。
▲７▼任意点のべき倍の演算においては、実施例では２のべき乗倍と加算を組み合わせを用いて行っているが、加算、２倍算、４倍算を組み合わせて行うこともできる。その場合において４倍算の演算は射影座標を用いて多項式で求めることができる。
【００６９】
【発明の効果】
以上説明したように、本発明に係る楕円曲線演算装置によれば、２つのテーブルに格納されている数値の加算と２倍点の演算を繰り返してベースポイントＧのべき倍の計算を行うので、従来のように加算のみ行う方法に比べて演算回数が少なく、効率の良い計算が可能となって、暗号通信システムにとって大変利用価値が高いものである。
【００７０】
更に、本発明に係る任意点のべき倍を求める楕円曲線演算装置によれば、従来の手法に比べて分割するウインドウの数が本質的に少なくなり、演算の効率が高まるものである。
【図面の簡単な説明】
【図１】本発明装置が適用される通信環境の一例を示す図である。
【図２】エルガマル署名方式を実行する通信装置を示すブロック図である。
【図３】本発明の一例としての固定点のべき倍演算を行う固定点べき倍演算装置を示すブロック図である。
【図４】本発明の他の一例として任意点のべき倍演算を行う演算装置を示す図である。
【図５】図３中のテーブル記憶部の中の構成を詳細に示す図である。
【図６】図３中の第１演算部の行う動作を説明するフローチャートである。
【図７】図４中の第２演算部の動作を示すフローチャートである。
【図８】図４中の第２演算部の動作を示すフローチャートである。
【図９】加減算変換動作を説明する図である。
【図１０】図４中のウィンドウ分割部の処理を示すフローチャートである。
【図１１】図４中のテーブル作成部が作成するテーブルを示す図である。
【図１２】図４中の第２演算部の演算動作を説明するフローチャートである。
【図１３】エルガマル署名通信の手法を説明する図である。
【符号の説明】
１，    乱数生成部
２，    署名生成検証部
３，    送信部
４，    受信部
５，    固定点べき倍演算装置
６，    秘密鍵保持部
２１，  変換部
２２，  ウインドウ分割部
２３，  テーブル作成部
２４，  第２演算部
５１，  テーブル記憶部
５２，  テーブル索引生成部
５３，  読出部
５４，  第１演算部
５５，  制御部
【図１】
0004105803.tif 000020
【図２】
0004105803.tif 000021
【図３】
0004105803.tif 000022
【図４】
0004105803.tif 000023
【図５】
0004105803.tif 000024
【図６】
0004105803.tif 000025
【図７】
0004105803.tif 000026
【図８】
0004105803.tif 000027
【図９】
0004105803.tif 000028
【図１０】
0004105803.tif 000029
【図１１】
0004105803.tif 000030
【図１２】
0004105803.tif 000031
【図１３】
0004105803.tif 000032