(57)【特許請求の範囲】
【請求項１】
ｋをｎビットのべき乗数、Ａを被べき乗数とする、Ａk のべき乗演算を行う前にべき数値処理部で前記ｋを前処理し、処理後のべき乗数をＡと共に演算部に加えてＡk演算を行うべき乗演算装置における前記べき数値処理部であって、
正負を表す符号ビットと前記整数ｋとを含むビット列を格納するビット列格納手段と、
ビット列格納手段に格納されているビット列から符号ビットを含むｎ未満の所定ビット数の演算用ビット列データを読み出し、読み出した演算用ビット列データを基にして被べき乗数Ａの演算方法を指定し、読み出した演算用ビット列データが特定のものである場合に、読み出した演算用ビット列データを基にして変換用ビット列データを生成し、指定した演算方法で演算するよう演算部へ指示する判定手段と、
変換用ビット列データが生成された場合に、当該変換用ビット列データにより前記ビット列格納手段内の対応するビット列を更新する更新手段と、
ビット列格納手段から次に読み出すビット位置を、符号ビットを除き上位から下位ビット側にシフトする読み出し位置シフト手段と、
上記各手段を（ｎ＋１）回繰り返し動作させる繰り返し制御手段と、
を備え、
前記読み出し位置シフト手段は、符号ビットを除き、ビット列格納手段中でビット列を桁上げする桁上げ手段であり、
前記判定手段は、前記演算用ビット列データとして、符号ビットと前記符号ビットを除いた上位３ビットのデータを前記ビット列格納手段から読み出す
ことを特徴とするべき乗演算装置のべき数値処理部。
【請求項２】
前記べき乗演算装置は、Ａk のべき乗演算を用いて、暗号通信、署名通信又はメッセージ認証を行う
ことを特徴とする請求項１に記載のべき乗演算装置のべき数値処理部。
【請求項３】
前記判定手段は、読み出した演算用ビット列データの前記符号ビットが正を示し前記上位３ビットが「０１１」である場合、又は読み出した演算用ビット列データの前記符号ビットが負を示し前記上位３ビットのうち上位２ビットが「１０」である場合に、それぞれ、変換用ビット列データとして、負を示す符号ビットと「００１」又は正を示す符号ビットと「１０」を生成し、
前記更新手段は、「１００１」又は「０１０」により、前記ビット列格納手段内の対応するビット列を更新する
ことを特徴とする請求項２に記載のべき乗演算装置のべき数値処理部。
【請求項４】
前記判定手段は、読み出した演算用ビット列データの前記符号ビットが正を示し前記上位３ビットが「０１１」である場合、又は読み出した演算用ビット列データの前記符号ビットが正を示し前記上位３ビットのうち上位１ビットが「１」である場合に、それぞれ、演算方法として、被べき乗数Ａの乗算を指定し、読み出した演算用ビット列データの前記符号ビットが負を示し前記上位３ビットのうち上位２ビットが「１０」である場合、演算方法として、被べき乗算Ａの逆数の乗算を指定し、読み出した演算用ビット列データがその他の場合、乗算しない指示を行なう
ことを特徴とする請求項３に記載のべき乗演算装置のべき数値処理部。
【請求項５】
前記判定手段は、
第１欄に第１群のビットパターンが、第２欄に第２群のビットパターンが対応記述されたテーブルを含み、
読み出し手段が読み出した演算用ビット列データのビットパターンの少なくとも一部を共通にするビットパターンを第１群のビットパターンから検索し、検索したビットパターンに対応して記述されたビットパターンを第２群のビットパターンから読み出し、これを変換用ビット列データとして生成すること、
を特徴とする請求項４に記載のべき乗演算装置のべき数値処理部。
【請求項６】
前記テーブルは更に第３欄を備え、第３欄に演算方法が記述されており、
前記判定手段は、テーブルの第３欄に記述された演算方法を指定する
ことを特徴とする請求項５に記載のべき乗演算装置のべき数値処理部。
【請求項７】
前記ビット列格納手段が、最上位ビットを符号ビットとするｎ＋２ビットのレジスタであり、読み出し位置シフト手段が、レジスタに格納されたビット列を、最上位ビットを除き１ビットづつ左シフトするシフタであること、
を特徴とする請求項４に記載のべき乗演算装置のべき数値処理部。
【請求項８】
前記符号ビットは１ビットの値「０」により正を、１ビットの値「１」により負を示し、
前記判定手段は、所定の論理式を格納した演算手段であり、ビット列格納手段から読み出した演算用ビット列データの各ビットの値を前記論理式に代入して変換用ビット列データを生成し、
前記判定手段の格納する論理式は、ビット列格納手段から読み出した演算用ビット列データの前記符号ビットをＢ0とし、前記上位３ビットを上位ビットから、Ｂ1Ｂ2Ｂ3とし、生成すべき変換用ビット列データの符号ビットをＤ0とし、前記上位３ビットを上位ビットから、Ｄ1Ｄ2Ｄ3とした場合、以下の式で与えられること、
を特徴とする請求項２に記載のべき乗演算装置のべき数値処理部。
【数１】
0004541485.tif 000006
【請求項９】
前記判定手段は、所定の論理式を格納しており、ビット列格納手段から読み出した演算用ビット列データの各ビットの値を当該論理式に代入して演算方法を求めること、
を特徴とする請求項８に記載のべき乗演算装置のべき数値処理部。
【請求項１０】
前記判定手段は、ビット列格納手段から読み出した演算用ビット列データの前記符号ビットをＢ0とし、前記上位３ビットを上位ビットから、Ｂ1Ｂ2Ｂ3とし、Ａの乗算を行なうか否かの指定信号をＳA、Ａ-1の乗算を行なうか否かの指定信号をＳA-1とした場合、指定信号は以下の式で与えられること、
を特徴とする請求項８に記載のべき乗演算装置のべき数値処理部。
【数２】
0004541485.tif 000007
【請求項１１】
ｎビットの定数ｐによる剰余体上の楕円曲線をＥ（Ｆｐ）、ｐ以下の正の整数をｋ、楕円曲線Ｅ（Ｆｐ）上の点をＡとした場合、べき倍点ｋＡの演算を行なう前に前処理部で前記ｋを前処理し、処理後のべき値をＡとともに演算部に加えてｋＡ演算を行なう楕円べき倍演算装置における前記前処理部であって、
正負を表す符号ビットと前記整数ｋとを含むビット列を格納するビット列格納手段と、
ビット列格納手段に格納されているビット列から符号ビットを含むｎ未満の所定ビット数の演算用ビット列データを読み出す読み出し、読み出した演算用ビット列データを基にして楕円曲線上の点Ａの演算方法を指定し、読み出した演算用ビット列データを基にして変換用ビット列データを生成し、指定した演算方法で演算するよう演算部へ指示する判定手段と、
変換用ビット列データが生成された場合に、当該変換用ビット列データにより前記ビット列格納手段内の対応するビット列を更新する更新手段と、
ビット列格納手段から次に読み出すビット位置を、符号ビットを除いて下位ビット側にシフトする読み出し位置シフト手段と、
上記各手段を（ｎ＋１）回繰り返し動作させる繰り返し制御手段とを備え、
前記読み出し位置シフト手段は、符号ビットを除き、ビット列格納手段中でビット列を桁上げする桁上げ手段であり、
前記判定手段は、前記演算用ビット列データとして、符号ビットと前記符号ビットを除いた上位３ビットのデータを前記ビット列格納手段から読み出す
ことを特徴とする楕円べき倍点演算装置の前処理部。
【請求項１２】
前記べき乗演算装置は、べき倍点ｋＡの演算を用いて、暗号通信、署名通信又はメッセージ認証を行う
ことを特徴とする請求項１１に記載の楕円べき倍点演算装置の前処理部。
【請求項１３】
前記判定手段は、読み出した演算用ビット列データの前記符号ビットが正を示し前記上位３ビットが「０１１」である場合、又は読み出した演算用ビット列データの前記符号ビットが負を示し前記上位３ビットのうち上位２ビットが「１０」である場合に、それぞれ、変換用ビット列データとして、負を示す符号ビットと「００１」又は正を示す符号ビットと「１０」を生成し、
前記更新手段は、「１００１」又は「０１０」により、前記ビット列格納手段内の対応するビット列を更新する
を特徴とする請求項１２に記載の楕円べき倍点演算装置の前処理部。
【請求項１４】
前記判定手段は、読み出した演算用ビット列データの前記符号ビットが正を示し前記上位３ビットが「０１１」である場合、又は読み出した演算用ビット列データの前記符号ビットが正を示し前記上位３ビットのうち上位１ビットが「１」である場合に、それぞれ、演算方法として、楕円加算を指定し、読み出した演算用ビット列データの前記符号ビットが負を示し前記上位３ビットのうち上位２ビットが「１０」である場合、演算方法として、楕円減算を指定し、読み出した演算用ビット列データがその他の場合、加算も減算もしない指示を行なう
を特徴とする請求項１３に記載の楕円べき倍点演算装置の前処理部。
【請求項１５】
前記符号ビットは１ビットの値「０」により正を、１ビットの値「１」により負を示し、
前記判定手段は、所定の論理式を格納した演算手段であり、ビット列格納手段から読み出した演算用ビット列データの各ビットの値を前記論理式に代入して変換用ビット列を生成し、
前記判定手段の格納する論理式は、ビット列格納手段から読み出した演算用ビット列データの前記符号ビットをＢ0とし、前記上位３ビットを上位ビットから、Ｂ1Ｂ2Ｂ3とし、生成すべき変換用ビット列データの符号ビットをＤ0とし、上位３ビットをＤ1Ｄ2Ｄ33とした場合、以下の式で与えられること、
を特徴とする請求項１４に記載の楕円べき倍点演算装置の前処理部。
【数３】
0004541485.tif 000008
【請求項１６】
前記判定手段は、ビット列格納手段から読み出した演算用ビット列データの前記符号ビットをＢ0とし、前記上位３ビットを上位ビットから、Ｂ1Ｂ2Ｂ3とし、楕円加算を行なうか否かの指定信号をＳA、楕円減算を行なうか否かの指定信号をＳA-1とした場合、指定信号は以下の式で与えられること、
を特徴とする請求項１５に記載の楕円べき倍点演算装置の前処理部。
【数４】
0004541485.tif 000009
【請求項１７】
ｋをｎビットのべき乗数、Ａを被べき乗数とする、Ａk のべき乗演算を行う前にべき数値処理部で前記ｋを前処理し、処理後のべき乗数をＡと共に演算部に加えてＡk演算を行うべき乗演算装置における前記べき数値処理部において用いられるべき数値処理方法であって、
正負を表す符号ビットと前記整数ｋとを含むビット列を格納するビット列格納手段に格納されているビット列から符号ビットを含むｎ未満の所定ビット数の演算用ビット列データを読み出し、読み出した演算用ビット列データを基にして被べき乗数Ａの演算方法を指定し、読み出した演算用ビット列データが特定のものである場合に、読み出した演算用ビット列データを基にして変換用ビット列データを生成し、指定した演算方法で演算するよう演算部へ指示する判定ステップと、
変換用ビット列データが生成された場合に、当該変換用ビット列データにより前記ビット列格納手段内の対応するビット列を更新する更新ステップと、
ビット列格納手段から次に読み出すビット位置を、符号ビットを除き上位から下位ビット側にシフトする読み出し位置シフトステップと、
上記各ステップを（ｎ＋１）回繰り返し動作させる繰り返し制御ステップと、
を含み、
前記読み出し位置シフトステップは、符号ビットを除き、ビット列格納手段中でビット列を桁上げし、
前記判定ステップは、前記演算用ビット列データとして、符号ビットと前記符号ビットを除いた上位３ビットのデータを前記ビット列格納手段から読み出す
ことを特徴とするべき乗演算装置のべき数値処理方法。
【請求項１８】
ｋをｎビットのべき乗数、Ａを被べき乗数とする、Ａk のべき乗演算を行う前にべき数値処理部で前記ｋを前処理し、処理後のべき乗数をＡと共に演算部に加えてＡk演算を行うべき乗演算装置における前記べき数値処理部において用いられるべき数値処理プログラムを記録しているコンピュータ読み取り可能な記録媒体であって、
前記べき数値処理プログラムは、コンピュータに、
正負を表す符号ビットと前記整数ｋとを含むビット列を格納するビット列格納手段に格納されているビット列から符号ビットを含むｎ未満の所定ビット数の演算用ビット列データを読み出し、読み出した演算用ビット列データを基にして被べき乗数Ａの演算方法を指定し、読み出した演算用ビット列データが特定のものである場合に、読み出した演算用ビット列データを基にして変換用ビット列データを生成し、指定した演算方法で演算するよう演算部へ指示する判定ステップと、
変換用ビット列データが生成された場合に、当該変換用ビット列データにより前記ビット列格納手段内の対応するビット列を更新する更新ステップと、
ビット列格納手段から次に読み出すビット位置を、符号ビットを除き上位から下位ビット側にシフトする読み出し位置シフトステップと、
上記各ステップを（ｎ＋１）回繰り返し動作させる繰り返し制御ステップと、
を実行させ、
前記読み出し位置シフトステップは、符号ビットを除き、ビット列格納手段中でビット列を桁上げし、
前記判定ステップは、前記演算用ビット列データとして、符号ビットと前記符号ビットを除いた上位３ビットのデータを前記ビット列格納手段から読み出す
ことを特徴とする記録媒体。
【請求項１９】
ｎビットの定数ｐによる剰余体上の楕円曲線をＥ（Ｆｐ）、ｐ以下の正の整数をｋ、楕円曲線Ｅ（Ｆｐ）上の点をＡとした場合、べき倍点ｋＡの演算を行なう前に前処理部で前記ｋを前処理し、処理後のべき値をＡとともに演算部に加えてｋＡ演算を行なう楕円べき倍演算装置における前記前処理部で用いられる前処理方法であって、
正負を表す符号ビットと前記整数ｋとを含むビット列を格納するビット列格納手段に格納されているビット列から符号ビットを含むｎ未満の所定ビット数の演算用ビット列データを読み出す読み出し、読み出した演算用ビット列データを基にして楕円曲線上の点Ａの演算方法を指定し、読み出した演算用ビット列データを基にして変換用ビット列データを生成し、指定した演算方法で演算するよう演算部へ指示する判定ステップと、
変換用ビット列データが生成された場合に、当該変換用ビット列データにより前記ビット列格納手段内の対応するビット列を更新する更新ステップと、
ビット列格納手段から次に読み出すビット位置を、符号ビットを除いて下位ビット側にシフトする読み出し位置シフトステップと、
上記各ステップを（ｎ＋１）回繰り返し動作させる繰り返し制御ステップとを含み、
前記読み出し位置シフトステップは、符号ビットを除き、ビット列格納手段中でビット列を桁上げし、
前記判定ステップは、前記演算用ビット列データとして、符号ビットと前記符号ビットを除いた上位３ビットのデータを前記ビット列格納手段から読み出す
ことを特徴とする楕円べき倍点演算装置の前処理方法。
【請求項２０】
ｎビットの定数ｐによる剰余体上の楕円曲線をＥ（Ｆｐ）、ｐ以下の正の整数をｋ、楕円曲線Ｅ（Ｆｐ）上の点をＡとした場合、べき倍点ｋＡの演算を行なう前に前処理部で前記ｋを前処理し、処理後のべき値をＡとともに演算部に加えてｋＡ演算を行なう楕円べき倍演算装置における前記前処理部で用いられる前処理プログラムを記録しているコンピュータ読み取り可能な記録媒体であって、
前記前処理プログラムは、コンピュータに、
正負を表す符号ビットと前記整数ｋとを含むビット列を格納するビット列格納手段に格納されているビット列から符号ビットを含むｎ未満の所定ビット数の演算用ビット列データを読み出す読み出し、読み出した演算用ビット列データを基にして楕円曲線上の点Ａの演算方法を指定し、読み出した演算用ビット列データを基にして変換用ビット列データを生成し、指定した演算方法で演算するよう演算部へ指示する判定ステップと、
変換用ビット列データが生成された場合に、当該変換用ビット列データにより前記ビット列格納手段内の対応するビット列を更新する更新ステップと、
ビット列格納手段から次に読み出すビット位置を、符号ビットを除いて下位ビット側にシフトする読み出し位置シフトステップと、
上記各ステップを（ｎ＋１）回繰り返し動作させる繰り返し制御ステップとを実行させ、
前記読み出し位置シフトステップは、符号ビットを除き、ビット列格納手段中でビット列を桁上げし、
前記判定ステップは、前記演算用ビット列データとして、符号ビットと前記符号ビットを除いた上位３ビットのデータを前記ビット列格納手段から読み出す
ことを特徴とする記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、暗号演算などに使用されるべき乗演算、楕円べき倍演算技術に関する。
【０００２】
【従来の技術】
多数の通信端末が接続されたネットワークを通じて、特定の通信端末と安全に通信する手法として暗号通信が用いられる。暗号通信の一つに公開鍵暗号法と称されるものがある。例えばＲＳＡ暗号、エルガマル暗号等がこれに含まれる。これらの暗号法は、メッセージの暗号化、復号化に、メッセージを暗号化鍵でべき乗したり、暗号文を復号化鍵でべき乗したりするというように、べき乗演算を行う。
【０００３】
また、公開鍵暗号法に含まれる他の例として、楕円曲線を用いた暗号法がある。他の暗号法が有限体を定義域としているのに対し、楕円曲線を定義域とするものであり、その定義域内でのべき倍演算によって暗号化、復号化が実現される。
【０００４】
但し、べき乗演算やべき倍演算は、上記した公開鍵暗号法だけではなく、署名通信やメッセージ認証等においても用いられている。
【０００５】
このようなべき乗演算、楕円べき倍演算の方法として、Ｄ．Ｅ．Ｋｕｎｕｔｈが、Ｔｈｅ  Ａｒｔ  ｏｆ  Ｃｏｍｐｕｔｅｒ  Ｐｒｏｇｒａｍｍｉｎｇ，Ｖｏｌ．２，Ｓｅｍｉｎｕｍｅｒｉｃａｌ  ａｌｇｏｒｉｔｈｍｓに記載したバイナリ法が知られている。また、バイナリ法の改良として、Ｆ．ＭｏｒａｉｎとＪ．Ｏｌｉｖｏｓが、Ｔｅｏｒｅｔｉｃａｌ  Ｉｎｆｏｒｍａｔｉｃｓ  ａｎｄ  Ａｐｐｌｉｃａｔｉｏｎｓ  Ｖｏｌ．２４，Ｎｏ．６に記載した符号つきバイナリ法、前記Ｄ．Ｅ．Ｋｕｎｕｔｈの著書の中のスモールウィンドウ法などが知られている。
【０００６】
また、符号つきバイナリ法を改良した方法として、特開平７−４９７６９号公報に記載された技術が知られている。
【０００７】
これらの従来技術の概要を、べき乗剰余演算を行なう方法を例にとり説明する。
＜バイナリ法＞
バイナリ法は、べき値ｋを２進表現ｋｉ（ｎ＞ｉ≧０）（ｋｉは０または１）とした時に、ｎ−１回の２乗剰余演算と、ｋｉ＝１となる回数の乗算剰余演算とによって、べき乗剰余演算結果を得る方法である。
【０００８】
例えば２進表現ｋｉ（４＞ｉ≧０）＝１０１１として、べき乗値Ａ1011を計算する場合であると、バイナリ法は、図８に示す演算式により求める。
【０００９】
ここで、初期値として、ｘに１を代入し、後は最上位桁を第１桁とし、その桁の値が１であれば、ｘの値を２乗してｘとおく演算と、その新たなｘをＡ倍する演算とを行う。他方、その桁の値が０であれば、ｘの値を２乗して新たなｘとおく演算のみを行う。この演算を順次下位桁に対して行い、最下位桁まで終了すると、そのとき得られたｘの値がべき乗値（Ａ1011）となる。
【００１０】
この演算のフローチャートは、図９に示す通りであり、ｉ＝ｎ−１から降順にｋｉの値を調べ（Ｓ７１、Ｓ７６）、その結果、１である時だけ乗算剰余演算を行なう（Ｓ７４、Ｓ７５）。２乗剰余演算は、ｋｉの値が１であるか０であるかに関係なく行なう（Ｓ７３）。この方法は、べき値ｋがランダムに選ばれる場合、平均ｎ／２回の乗算剰余演算を必要とする。べき値を通常の２進表現で表せば良いため、その保持領域としてはｎビットのみあれば良い。
【００１１】
上記べき乗演算を行う、べき乗剰余演算装置の全体構成をブロック図で示したものが図４である。
【００１２】
図中１０１は、べき数値を処理するべき数値処理部である。この処理部は、べき数値を処理しながら実際の演算の制御を行なう。１０２は、本装置に入力されるｎビットのべき数値ｋを表す。べき数値処理部１０１では、初期値としてｋを取り、その後べき数値の更新処理を行なってゆく。１０３は、べき数値処理部から演算部へ出力される制御信号である。この信号によって、実際の演算の制御が行なわれる。１０４は、本装置に入力される被べき乗数Ａである。１０５は、装置からの出力であり、Ａのｋ乗剰余値が出力される。１０６は、実際の演算を行なう演算部である。ここでは１０３の制御信号に従って、１０４で与えられた数値Ａを用い、２乗算剰余、乗算剰余を行なう。なお剰余を取る素数ｐは、あらかじめ装置内に保持してあるものとする。図１０はべき値処理部１０１のブロック内構成を詳細に示した図である。
【００１３】
図１０において、６０１がべき値保持レジスタで、べき数値を保持するためのｎビット領域を有する。６０２は、べき数値保持レジスタへ初期値を入力する入力線で、本装置への入力ｋがそのまま入力される。６０５はべき数値シフタ部で、べき数値レジスタのビットを、１ビット左シフトする。なお、最上位ビットは、シフトアウトした結果破棄される。６０６は、べき値保持レジスタの最上位ビットを出力する出力線で、演算部１０３に伝える制御信号となる。この制御信号に従って、演算部１０６の処理が定まる。
【００１４】
図１１は、演算部１０６の構成を詳細に示す図である。７０１は、演算中の中間値を保持する中間値レジスタである。７０２は、中間値レジスタへ入力される初期値で、定数１が入力される。７０３は、２乗演算部で、中間値レジスタの値の２乗剰余演算値を求め出力する。７０４は、乗算演算部で、２乗演算部の出力と、被べき乗数Ａの乗算剰余演算値を出力する。７０７は、中間値として保持する値を選択するセレクタで、べき数値処理部１０１で出力された信号に従って、０の時２乗演算部からの出力、１の時乗算演算部からの出力を選択する。７０８は、最終演算結果の出力で、べき数値として入力された値ｋの全ビットを処理した後、値が出力される。この値はＡのｋ乗剰余値となっている。
【００１５】
＜符号つきバイナリ法＞
次に、従来の第２方法として、符号つきバイナリ法の概要を説明する。符号つきバイナリ法は、べき値ｋを２進表現ｋｉ（ｎ＞ｉ≧０）（ｋｉは０または１）とした時に、符号つき２進表現ｋ’ｉ（ｎ≧ｉ≧０）（ｋ’ｉは０または１または−１）に変換し、ｎ回の２乗剰余演算と、ｋ’ｉ＝１または−１となる回数の乗算剰余演算によって、べき乗剰余演算結果を得る方法である。例えば、２進表現ｋｉ（４＞ｉ≧０）＝１１１１であると、符号付き２進表現は、ｋ’ｉ（４≧ｉ≧０）＝１０００（−１）というように変換される。この表現方法は、ｋｉに連続する１が多い場合、ｋ’ｉに０が多くなり、その分Ａ倍する計算量が少なくなる。
【００１６】
この符号付きバイナリ法の演算のフローチャートを図１２に示す。図１２中、Ｓ１０１〜Ｓ１０６までのステップが、２進表現ｋｉを符号付き２進表現に変換する処理であり、Ｓ１０７〜Ｓ１１４までのステップが、符号付き２進表現ｋ’ｉにバイナリ法を適用する処理である。バイナリ法自体の処理は、基本的に先述したバイナリ法と同じである。
【００１７】
図１２のフローチャートの概略を述べると、次の通りである。まず、べき値の符号つき２進表現への変換のために、ｉ＝０から昇順にｋｉの値を調べ（Ｓ１０１、Ｓ１０３、Ｓ１０５）、ｋｉ＝１かつｋ（ｉ＋１）＝１の時、ｋ’ｉ＝−１にし、桁上がりを考慮しながら、ｋｉ＋１に１を加える（Ｓ１０４）。それ以外の時は、ｋ’ｉ＝ｋｉとする（Ｓ１０６）。桁上がりの加算を考慮するため、ｋｉがｎ桁なのに対し、ｋ’ｉはｎ＋１桁となる。次に、ｉ＝ｎから降順にｋ’ｉの値を調べ（Ｓ１０７、Ｓ１１０、Ｓ１１３）、その結果、１である時に通常の乗算剰余演算を（Ｓ１１１）、−１である時に逆数の乗算剰余演算を行なう（Ｓ１１２）。２乗剰余演算は、バイナリ法と同様ｋ’ｉの値に関係なく行なう。この方法は、べき値ｋがランダムに選ばれる場合、平均ｎ／３回の乗算剰余演算を必要とする。べき値は、符号つき２進表現で表すため、１桁に対して２ビット（０、１、−１の３値を表現する必要があるため）必要とし、全体として２（ｎ＋１）ビットの保持領域を必要とする。
【００１８】
図１３は、符号つきバイナリ法を用いたべき乗剰余演算装置のべき数値処理部である。９０１は、べき値保持レジスタで、べき数値を符号つき２進表現で保持するための２（ｎ＋１）ビット領域を有する。９０２は、べき数値保持レジスタへの初期値を入力する入力線で、ｎビットのべき乗数ｋを符号つき２進表現変換部で変換した結果が入力される。９０７は、符号つき２進表現変換部で、図１２で示された処理フローに従い、ｎ桁の２進表現をｎ＋１桁の符号つき２進表現に変換する。９０５は、べき数値シフタ部で、べき数値レジスタのビットを、２ビット左シフトする。符号つき２進表現は、１桁を２ビットで表現するので、２ビットの左シフトとなる。なお、上位２ビットは、シフトアウトした結果破棄される。９０６は、べき値保持レジスタの上位２ビットで、演算部に伝える制御信号となる。この制御信号に従って演算部の処理が定まる。
【００１９】
図１４は、符号つきバイナリ法を用いたべき乗剰余演算装置の演算部である。１００１は、演算中の中間値を保持する中間値レジスタである。１００２は、中間値レジスタへ入力される初期値で定数１が入力される。１００３は、２乗演算部で、中間値レジスタの値の２乗剰余演算値を求め出力する。１００４は、乗算演算部で、２乗演算部の出力と、被べき乗数Ａ、もしくはその逆数の乗算剰余演算値を出力する。１００５は、逆数取得部で、被べき乗数Ａの逆数を出力する。１００６は、乗算演算部への入力値を選択するセレクタで、べき数値処理部からの制御信号によって、被べき乗数Ａ、もしくはその逆数を選択する。１００７は、中間値として保持する値を選択するセレクタで、べき数値処理部で出力された信号に従って、「００」のとき２乗演算部からの出力、それ以外のとき乗算演算部からの出力を選択する。１００８は、最終演算結果の出力で、べき数値として入力された値ｋの全ビットを処理した後、値が出力される。この値はＡのｋ乗剰余値となっている。
【００２０】
＜改良型符号付きバイナリ法＞
次に特開平７−４９７６９号公報で用いられている改良型符号つきバイナリ法の概要を説明する。改良型符号つきバイナリ法は、べき値ｋを２進表現ｋｉ（ｎ＞ｉ≧０）（ｋｉは０または１）とした時に、符号つき２進表現への変換を行ないながら、乗算剰余演算等を行なって、べき乗剰余演算結果を得る方法である。この改良型符号付きバイナリ法は、先述した符号付きバイナリ法が全桁の符号変換を完了してからでないと、べき乗演算を行うことができないというバッチ式処理であったのを、符号変換の途中でべき乗演算も行えるように改良したものである。演算フローは、図１５に示す通りである。ｉ＝ｎ−１から降順に、ｋｉの値を３ビットずつ調べ（Ｓ１３３）、その結果、２ビット分を符号つき２進表現へ変換し、乗算剰余演算を行なう。この方法は、べき値ｋがランダムに選ばれる場合、平均３ｎ／８回の乗算剰余演算を必要とする。べき値は、符号つき２進表現への変換と乗算剰余演算等が同時に行なわれるため、その保持領域としてはｎビットのみあれば良い。
【００２１】
図１６は、改良型符号つきバイナリ法を用いたべき乗剰余演算装置のべき数値処理部である。１２０１は、べき値保持レジスタで、べき数値を２進表現で保持する。１２０２は、べき数値保持レジスタへの初期値入力で、ｎビットのべき乗数ｋがそのまま入力される。１２０３は、べき数値判定部で、べき数値保持レジスタの上位３ビットのビットパターンを５種類のタイプに分類する。１２０５は、べき数値シフタ部で、べき数値レジスタのビットを、２ビット左シフトする。この方法では、１回の判定により演算部の動作２回分の制御信号を生成するため、２ビットの左シフトとなる。なお、上位２ビットはシフトアウトした結果破棄される。１２０６は、べき数値判定部で分類されたタイプを、演算部に伝える制御信号である。この制御信号に従って演算部の処理が定まる。
【００２２】
改良型符号つきバイナリ法を用いたべき乗剰余演算装置の演算部は、図２に示されている。図中、３０１は、演算中の中間値を保持する中間値レジスタである。３０２は、中間値レジスタへの初期値入力線で初期値としては定数１が入力される。３０３は、２乗演算部で、中間値レジスタの値の２乗剰余演算値を求め、出力する。３０４は、乗算演算部で、２乗演算部の出力と、被べき乗数Ａ、もしくはその逆数の乗算剰余演算値を求め、出力する。３０５は、逆数取得部で、被べき乗数Ａの逆数を出力する。３０６は、乗算演算部への入力値を選択するセレクタで、べき数値処理部で判定された分類に従って、本装置への入力Ａ、もしくはその逆数を選択する。３０７は、中間値として保持する値を選択するセレクタで、べき数値処理部で判定された分類に従って、２乗演算部からの出力、もしくは乗算演算部からの出力を選択する。３０８は、最終演算結果の出力で、べき数値として入力された値ｋの全ビットを処理した後、値が出力される。この値はＡのｋ乗剰余値となっている。
【００２３】
図１７は、べき数値処理部のべき数値判定部で判定された分類と、その分類に従った演算部の数値選択処理の対応を表にしたものである。１３０１は、べき数値判定部で分類される、べき数値の上位３ビットのビットパターンである。１３０３は、前記分類に従って演算部で処理される選択処理を示したものである。「Ａの乗算」となっている欄は、乗算演算部への入力として本装置への入力値Ａが選択され、中間値として保持する値として乗算演算部の出力を選択するものである。「Ａ＾−１の乗算」となっている欄は、乗算演算部への入力として、本装置への入力値Ａの逆数が選択され、中間値として保持する値として、乗算演算部の出力を選択するものである。「乗算なし」となっている欄は、中間値として保持する値として、２乗算演算部の出力を選択するものである。１３０４は、前記分類に従って演算部で処理される選択処理を示したものである。ただし、この選択処理は、１３０３で行なわれた選択処理の次のループでの演算部の処理で用いられるものである。すなわち、べき数値判定部で判定された１回の分類に対して、演算部での２回の処理の分の選択処理が決定される。
【００２４】
【発明が解決しようとする課題】
ところで、上述した従来技術のうち、バイナリ法によれば、各桁で２乗計算を行うと共に、その桁の数値が１であれば、Ａ倍する計算も行わなければならず、平均して１桁で１．５回の計算が必要になり、計算回数が多くなるという課題がある。
【００２５】
これに対して、符号つきバイナリ法は、通常のバイナリ法に比べて演算回数が削減できる反面、べき数の保持領域として少なくともバイナリ法の２倍の領域を必要とするという課題がある。
【００２６】
スモールウィンドウ法の説明は省略したが、符号つきバイナリ法よりさらに演算回数が削減できるが、保持領域がさらに必要となる。
【００２７】
また特開平７−４９７６９号公報の改良型符号つきバイナリ法ではべき数の保持領域を増やすことなく、演算回数の平均値を符号つきバイナリ法で使われる回数に近い回数に抑えることができるものの、反面、この方法では、べき数の「００１０」という特定のビットパターンに弱いという課題がある。通常のバイナリ法では、１の現われる桁の回数分の乗算剰余演算回数で済むため、上記特定のパターン「００１０」であれば、１回の乗算剰余演算が行なわれるのみである。しかし、改良型符号つきバイナリ法では、図１７の表にこのビットパターンをあてはめてみると、２回の乗算剰余演算が必要になってくる。すなわち、最悪の場合、通常のバイナリ法の２倍の乗算回数が必要になってしまうという欠点を持つ。
【００２８】
なお、以上はべき乗演算における課題であるが、楕円べき倍演算においても同様の課題があり、その解決が必要とされるのはべき乗演算と同じである。
【００２９】
従って、この発明は、べき数の保持領域をバイナリ法で用いる領域に近い大きさに削減し、かつ演算回数の平均値を符号つきバイナリ法で使われる回数に近い回数に抑え、最悪の場合でも通常のバイナリ法と同じ乗算回数で演算が可能な、べき乗演算装置を提供することを第１の目的とする。
【００３０】
本発明の第２の目的は、べき乗数をべき数値処理部で前処理してからべき乗演算を行なうべき乗演算装置において、演算量を低減するために改良されたべき数値処理部を提供することにある。
【００３１】
本発明の第３の目的は、べき乗演算装置の主要部をなし、べき数の保持領域の削減と乗算回数の削減とを実現するために用いられている新規なべき乗演算方法を提供することにある。
【００３２】
本発明の第４の目的は、上記べき乗演算方法を実行するためのプログラムを格納した記録媒体を提供することにある。
【００３３】
本発明の第５の目的は、上記べき乗演算装置、方法、記録媒体と同様な利益、効果をもたらせてくれるべき乗剰余演算装置、べき乗剰余演算方法、記録媒体を提供することにある。
【００３４】
本発明の第６の目的は、上記べき乗演算装置、方法、記録媒体と同様な利益、効果をもたらせてくれる楕円べき倍演算装置、楕円べき倍演算方法、記録媒体を提供することにある。
【００３５】
【課題を解決するための手段】
上記第１および第２の目的を達成するために、本発明は、ｋをｎビットのべき乗数、Ａを被べき乗数とする、Ａk のべき乗演算を行う前にべき数値処理部で前記ｋを前処理し、処理後のべき乗数をＡと共に演算部に加えてＡk演算を行うべき乗演算装置における前記べき数値処理部であって、
符号ビットと前記整数ｋを格納するビット列格納手段と、
ビット列格納手段に格納されているビット列から符号ビットを含むｎ未満の所定ビット数のビット列データを読み出す読出し手段と、
読出し手段が読み出すビット列データを基にして新たなビット列データを生成するビット列データ生成手段と、
読み出し手段が読み出すビット列データを基にして被べき乗数Ａの演算方法を指定する演算方法指定手段と、
演算方法指定手段にて指定された演算方法で演算するよう演算部へ指示する一方、ビット列データ生成手段が生成したビット列データで前記ビット列格納手段内の対応するビット列を更新する指示・更新手段と、
ビット列格納手段から次に読み出すビット位置を、符号ビットを除き上位から下位ビット側にシフトする読み出し位置シフト手段と、
上記各手段を（ｎ＋１）回繰り返し動作させる繰り返し制御手段と、
を備えることを特徴としている。
【００３６】
ここで、前記読み出し位置シフト手段は、符号ビットを除き、ビット列格納手段中でビット列を桁上げする桁上げ手段であり、
前記読み出し手段は、桁上げ後に１ビットの符号ビットを含む上位４ビットのデータを前記ビット列格納手段から読み出すこと、
を特徴としている。
【００３７】
また、前記ビット列データ生成手段は、第１欄に第１群のビットパターンが、第２欄に第２群のビットパターンが対応記述されたテーブルを含み、
読み出し手段が読み出したビット列データのビットパターンの少なくとも一部を共通にするビットパターンを第１群のビットパターンから検索し、検索したビットパターンに対応して記述されたビットパターンを第２群のビットパターンから読み出し、これを新たなビット列データとして生成すること、
を特徴としている。
【００３８】
更に、前記テーブルの第１群のビットパターンが「００１１」のビット列、上位２ビットが「０１」のビット列、上位３ビットが「１１０」のビット列の３種類であり、
第１群のビットパターンが「００１１」のビット列の場合、第２群のビットパターンが「１００１」であり、第１群のビットパターンが上位３ビット「１１０」のビット列である場合、第２群のビットパターンが「０１０」であり、
読み出し手段から読み出したビット列データが第１群のビットパターンにない場合、並びに第１群のビットパターンが「０１」の場合、ビット列データ生成手段は、読み出したビット列データと同じビット列データを生成すること
を特徴としている。
【００３９】
また、前記テーブルは更に第３欄を備えており、
前記演算方法指定手段は、テーブルの第３欄に記述された演算方法であること、
を特徴としている。
【００４０】
また、第１群のビットパターンが「００１１」と「０１」のビット列の場合、第３欄に記述された演算方法が被べき乗数Ａの乗算であり、第１群のビットパターンが「１１０」のビット列の場合、第３欄に記述された演算方法が被べき乗算Ａの逆数の乗算であり、
読み出したビット列データが、第１群のビットパターンのいずれにも該当しないビットパターンの場合、演算方法指定手段は乗算しない指示を行なうこと、
を特徴としている。
【００４１】
更に、前記ビット列格納手段が、最上位ビットを符号ビットとするｎ+２ビットのレジスタであり、読み出し位置シフト手段が、レジスタに格納されたビット列を、最上位ビットを除き１ビットづつ左シフトするシフタであること、
を特徴としている。
【００４２】
また、前記ビット列データ生成手段は、所定の論理式を格納した演算手段であり、ビット列格納手段から読み出したビット列の各ビットの値を前記論理式に代入して新たなビット列を生成すること、
を特徴としている。
【００４３】
更に、前記ビット列データ生成手段の格納する論理式は、ビット列格納手段から読み出したビット列データを上位ビットから、Ｂ0Ｂ1Ｂ2Ｂ3  とし、生成すべき各ビットのデータを  Ｄ0Ｄ1Ｄ2Ｄ3  とした場合、以下の式で与えられること、
を特徴としている。
【００４４】
【数５】
0004541485.tif 000002
【００４５】
ここで、前記演算方法指定手段は、所定の論理式を格納しており、ビット列格納手段から読み出した各ビットの値を当該論理式に代入して演算方法を求めること、
を特徴としている。
【００４６】
前記演算方法指定手段は、ビット列格納手段から読み出したビット列を上位ビットから、Ｂ0Ｂ1Ｂ2Ｂ3とし、Ａの乗算を行なうか否かの指定信号をＳA、Ａ-1の乗算を行なうか否かの指定信号をＳA-1とした場合、指定信号は以下の式で与えられることを特徴としている。
【００４７】
【数６】
0004541485.tif 000003
【００４８】
上記第１の目的は、ｎビットの正の整数ｋ、及び整数Ａが与えられた時に、Ａのｋ乗を計算するべき乗演算装置であって、以下の構成を含むものによっても達成される。
【００４９】
即ち、ｎ＋１ビットのべき値保持領域、符号を保持する符号保持領域、演算過程において得る中間値を保持する中間値保持領域を有する記憶手段と、
前記べき値保持領域の下位ｎビットに前記整数ｋを、最上位ビットに０を、前記符号保持領域に、正の符号を表す「＋」を、前記中間値保持領域に定数１をそれぞれ初期設定する初期設定手段と、
中間値保持領域に格納されている値を２乗して中間値を書き直す中間値２乗演算手段と、
符号保持領域の符号データと、べき値保持領域の上位３ビット数のビット列データを判定対象データとして選択する判定対象データ選択手段と、
選択したデータを参照して、符号保持領域の値が「＋」で、かつべき値保持領域の上位３ビットの値が「０１１」であるという第１のパターン、符号保持領域の値が「＋」で、かつべき値保持領域の上位１ビットが「１」であるという第２のパターン、符号保持領域の値が負の符号を表す「−」で、かつべき値保持領域の値の上位２ビットが「１０」であるという第３のパターンのいずれかに該当するか、いずれにも該当しないかを判定する判定手段と、
前記判定手段で第１のパターン、もしくは第２のパターンに該当すると判定された時、中間値保持領域に格納された値と整数Ａの積を求め新たな中間値として中間値保持領域の値を更新し、第３のパターンに該当すると判定された時、中間値保持領域に格納された値と整数Ａの商を求め新たな中間値として中間値保持領域の値を更新し、いずれのパターンにも該当しないと判断された時、何らの演算も行なわず中間値保持領域の値を元のままの値に保持する中間値乗算手段と、
前記判定手段で第１のパターンと判定された時、符号保持領域の値を「−」に、べき値保持領域の上位３ビットの値を「００１」に変換する第１のべき値変換手段と、
前記判定手段で第３のパターンと判定された時、符号保持領域の値を「＋」に変換する第２のべき値変換手段と、
判定手段の判定結果に従ってなされるべき処理を行なった後、べき値保持領域の値を１ビット左にシフトし、オーバフローを破棄するべき値シフト手段と、
中間値保持領域の値を演算結果として出力する出力手段と、
前記初期設定手段により記憶手段の各領域に初期設定を行なわせた後、中間値２乗演算手段、べき値判断手段、中間値乗算手段、第１のべき値変換手段、第２のべき値変換手段による各動作を、べき値シフト手段によるビットシフトに同期させながら（ｎ＋１）回繰り返えさせ、最後に出力手段から演算結果を出力させる制御手段との構成である。
【００５０】
上記第４の目的、第５の目的は、基本的には上記べき乗演算装置の主要構成若しくは等価な構成を含む、べき乗剰余演算装置、楕円べき倍演算装置によって達成される。従って、べき乗演算装置と同様に、べき数保持領域の大幅な増加を抑制できるし、演算回数の低減を図ることが出来る。
【００５１】
【発明の実施の形態】
以下、本発明の実施の形態について添付図面を用いて説明する。
本実施の形態に係るべき乗剰余演算装置の基本ブロックは、既述した図４に示す通りであり、べき数値処理部１０１と演算部１０６から成る。即ち、べき数値処理部１０１は、べき数値ｋ（２進表現）を処理し、その出力１０３を演算部１０６に送出する。演算部１０６は、被べき数Ａと前記出力１０３とを素数Ｐを法とする剰余体上で演算し、Ａkｍｏｄｐを得る。
図１は、べき数値処理部の詳細構成図で、本発明が従来装置と異なる構成となる部分である。２０１は、べき数値保持レジスタで、べき数値のビット数（ｎ）に２を加えた幅を持つ。
【００５２】
べき数値のビット数より２多いのは、符号ビットが１ビット分と、符号付きバイナリ法を基本とするので、べき数値より１ビット多く必要なことによる。２０２は、べき数値保持レジスタへの初期値入力で、入力ｋがそのまま入力される。２０３は、べき数値判定部で、べき数値保持レジスタの上位４ビットのビットパターンを、４種類のタイプに分類する。２０４は、べき数値変換部で、前記べき数値判定部で分類されたタイプに従い、べき数値保持レジスタの上位４ビットのビットパターンを変換する。２０５は、べき数値シフタで、べき数値レジスタの最上位ビットを除いたビットを、１ビット左シフトする。なお最上位ビットはそのまま保持される。べき数値判定部２０３からべき数値変換部２０４に至るループと、べき数値シフタ２０５のループは、交互に実行される。２０６は、べき数値判定部で分類されたタイプを、演算部に伝える制御信号である。この制御信号に従って演算部の処理が定まる。
図３は、べき数値処理部のべき数値判定部２０３で判定された分類と、その分類に従ったべき数値変換部２０４の変換処理、及び演算部の数値選択処理の対応を表にしたものである。４０１は、べき数値判定部で分類される、べき数値の上位４ビットのビットパターンである。４０２は、前記分類に従ってべき数値変換部で処理される変換値を示したものである。ここで変換なしとなっている場合は、べき数値の上位４ビットの値変換は行なわない。４０３は、判定部２０３の判定結果であり、演算部で処理されるべき選択処理を示している。選択処理としては図から理解されるように「Ａの乗算」と「Ａ＾−１の乗算」と「乗算なし」の３種類存在する。
前記べき数値判定部２０３による判定結果は、演算部１０６へ出力され、セレクタの制御がなされる。演算部１０６の構成は、既に説明した図２のものが用いられる。図２において、セレクタは、３０６と３０７の２個存在するので、前記べき数値判定部２０３の判定結果によって、この２つのセレクタ３０６、３０７が制御される。例えば判定結果が「Ａの乗算」であると、セレクタ３０６が乗数Ａをそのまま出力し、セレクタ３０７が乗算演算部３０４の乗算結果を出力するよう制御される。同様に、判定結果が「Ａ-1の乗算」であれば、セレクタ３０６が逆数取得部３０５の出力を選択し、セレクタ３０７が乗算演算部３０４の乗算結果を選択するよう制御され、判定結果が、「乗算なし」であれば、セレクタ３０６はいずれも選択せず、セレクタ３０７が２乗算演算部３０３の演算結果を選択するよう制御される。
上記図１、図２で示したべき乗剰余演算装置の演算のフローチャートを図５に示す。次に、具体的なべき乗数を例にとり、べき乗演算の動作を上記フローチャートに従って説明する。例えば、べき乗数ｋとして、ｋ＝4204957639＝（11111010101000101000111111000111）2 の３２ビット（ｎ＝３２）の値が与えられ、Ａkのべき算演算を行うとする。先ず、３２ビットのｋ値が、ｎ＋２ｂｉｔレジスタ２０１に格納される。この場合、上位２ビットはいずれも“０”が格納される。その結果、レジスタ２０１には、図７に示す演算の回数と演算値の推移とを表わした表の中の回数１の欄に記述したｎ＋２ｂｉｔのビットパターンが格納される。この状態で、初期値としてｘ＝１、ｉ＝ｎ＋２がセットされる（Ｓ５０１）。ｘ、ｉはそれぞれ変数であり、図示しない変数レジスタに格納される。続いて、ｉの値が負になっていないことを条件に（Ｓ５０２）、ｋの上位４ビット（ｋｉ〜ｋ［ｉ−３］）のビットパターンが、判定部２０３に読み取られる（Ｓ５０３）。図７の回数１欄から理解されるように、上位４ビットは「００１１」なので、このビットパターンを用いて、図３のテーブルを参照し、「Ａの乗算」という判定結果を得る。同時に変換値として「１００１」を得る（Ｓ５０４）。上記判定結果により、既述したようにセレクタ３０６、３０７が選択制御され、ｘ＝ｘ2 の演算（Ｓ５０５）とｘ＝ｘ×Ａの演算とが行われる（Ｓ５０６、５０７）。今の場合、ｘ＝１（初期値）なので、上記演算結果としてＡを得、これを中間値レジスタ３０１に格納する。
次に、変換値としてテーブルから得た「１００１」を、判定部２０３から変換部２０４に送出する。変換部２０４は、ｎ＋２ｂｉｔレジスタ２０１の上位４ｂｉｔを判定部２０３から得た値で更新する（Ｓ５０９、Ｓ５１０）。この後、１ｂｉｔ左シフタ２０５が作動し、ｎ＋２ｂｉｔレジスタ２０１の最上位ビット（ＭＳＢ）を除く全ビットを１ビット左シフトさせる（Ｓ５１２）。そして、ｉ−１を新たにｉとして（Ｓ５１３）、再びＳ５０３の処理を行う。この時点でｎ＋２ｂｉｔレジスタ２０１の格納値は、図７中の回数２欄に示すビットパターンとなっている。上位４ビットのパターンは「１０１１」となっているので、判定部２０３はテーブルを参照し、「乗算なし」の判定結果と、「変換なし」の変換値を得る。「乗算なし」であるので、演算としてはｘ＝ｘ2 の処理だけ行う（Ｓ５０５）。回数１の処理が終わった時点で、ｘ＝Ａになっているので、回数２ではｘ＝Ａ2となり、その値を中間値レジスタに格納する。また、変換値は「変換なし」なので、変換部２０４はｎ＋２ｂｉｔレジスタ２０１の上位４ビットの更新を行わない。この後、１ｂｉｔ左シフタ２０５が、ｎ＋２ｂｉｔレジスタのＭＳＢを除く各ビットを１ビット左シフトする（Ｓ５１２）。このときのｎ＋２ｂｉｔレジスタ２０１の格納値は、図７中の回数３の欄に示すビット列となっている。続いて、ｉ−１を新たにｉに設定し、再び上述したＳ５０３〜Ｓ５１２の処理を繰り返す。繰り返しの度に、ｎ＋２ｂｉｔレジスタ２０１に格納されるビット列、及び演算結果であるｘの値は、図７に示す通り変化する。そして、ｉが繰り返し回数（ｎ＋２）分デクリメントされ、負の値になると（Ｓ５０２）、処理は終了し、そのときのｘの値が演算結果として出力される（Ｓ５１４）。図７の回数３３の右端のｘ値が、その演算結果である。
なお、上記実施例では、べき数値判定部２０３は、図３に示すようなテーブルを持っており、べき乗数の上位４ビットのビットパターンを用いてテーブルを検索し、変換すべきビットパターンの指定、演算部への演算式の指定を行なっているが、テーブル以外に例えば、所定の論理式を格納した演算回路で構成することも出来る。そのような演算回路が格納すべき論理式の一例を以下に示す。
【００５３】
べき数値保持レジスタ２０１から読み出したビット列データを上位ビットから、Ｂ0Ｂ1Ｂ2Ｂ3  とし、変換後のビットのデータを  Ｄ0Ｄ1Ｄ2Ｄ3  とした場合、
【００５４】
【数７】
0004541485.tif 000004
【００５５】
で与えられる。
【００５６】
また、Ａの乗算を行なうか否かの指定信号をＳA、Ａ-1の乗算を行なうか否かの指定信号をＳA-1とした場合、演算式指定は、
【００５７】
【数８】
0004541485.tif 000005
【００５８】
で与えられる。
【００５９】
次に、各値の保持領域としてレジスタを用いて構成する装置について説明したが、一般に値を保持する領域として用いられるメモリ等を用いる構成でも同様に実施可能である。
【００６０】
更に、図５のフローチャートの説明及び表２を参照してのべき乗剰余演算の動作からも理解されるように、本発明は演算方法としても特徴を有する。従って、また、その演算方法を実行するプログラムを記録媒体に格納し、それを汎用コンピュータにインストールすることにより、任意のコンピュータで上記べき乗剰余演算を実行することが出来る。
【００６１】
更に上記実施例は、べき乗剰余演算装置、演算方法について説明しているが、同様な技術がべき乗演算装置に対しても適用できる。
【００６２】
図６は、楕円べき倍演算装置に本発明を適用した場合の演算処理を示すフローチャートである。べき倍係数はレジスタｋにあらかじめ格納されており、１６０ｂｉｔの値とする。ｉビットの数値は、ｋ[ｉ−１]と記す。べき倍する座標は、あらかじめレジスタＢｘ、Ｂｙに格納されており、ａｆｆｉｎｅ座標とする。図中、Ｓ５５０は初期化処理で、ｎ＋２ｂｉｔレジスタの上位２ビットを０とし（ｋ[１６１]、ｋ[１６０]＝０）、ｉをｎ＋２にセットし、レジスタＡｚを０にリセットする。Ｓ５５１は楕円２倍算処理で、レジスタＡｘ、Ａｙ、Ａｚの値（ｊａｃｏｂｉａｎ座標値）を更新する。この処理は前記実施の形態の２乗処理と対応する処理である。
Ｓ５５２はｎ＋２ｂｉｔレジスタから上位４ビットのビット列を読み取り、図３で示したのと同様なテーブルを検索して演算方法の判定を行う処理である。Ｓ５５３〜Ｓ５５８は、上位４ビットのビット列が「００１１」「０１ｘｘ」「１１０ｘ」であった場合において行う演算並びにべき乗係数の更新処理を示す。Ｓ５５３、Ｓ５５５、Ｓ５５７の楕円加算は、レジスタＡｘ、Ａｙ、Ａｚのｊａｃｏｂｉａｎ座標値にレジスタＢｘ、Ｂｙのａｆｆｉｎｅ座標値を加算し、結果をレジスタＡｘ、Ａｙ、Ａｚに格納するものとする。ただしＡｚが０の時には、レジスタＢｘ、Ｂｙの値及び値１をそれぞれレジスタＡｘ、Ａｙ、Ａｚに代入するものとする。Ｓ５５３、Ｓ５５５、Ｓ５５７のJacobian座標点Ａx、Ａy、Ａzとaffine座標点Ｂx、Ｂyの楕円加算の演算方法を以下に示しておく。
ｓ＝Ｂｘ＊Ａｚ2−Ａｘ    …（１）
ｕ＝Ｂｙ＊Ａｚ3−Ａｙ    …（２）
上式で得られるおよびＡｘを用いて、
ａ＝Ａｘ＊ｓ2            …（３）
を求め、続いて、上記（１）（２）式を用いて、
ｂ＝ｓ3＋２＊ａ          …（４）
を得る。最後に上記（１）〜（３）式で得た結果を用いて、新たにＡｘ、Ａｙ、Ａｚを得る。
Ａｘ＝ｕ2−ｂ            …（５）
Ａｙ＝ｕ＊（ａ−Ａｘ）−Ａｙ＊ｓ3    …（６）
Ａｚ＝Ａｚ＊ｓ            …（７）
同様に、Ｓ５５１の楕円２倍算の演算式を以下に示す。
ａ＝２＊Ａｙ2            …（８）
ｂ＝２＊Ａｘ＊ａ          …（９）
ｃ＝Ａｚ4＊ｃ1＋３＊Ａｘ2    …（１０）
上記（８）〜（１０）式で求めたを用いて以下に示す楕円２倍算のjacobian座標値Ａｘ'、Ａｙ、'Ａｚ'を得る。
Ａｘ'＝ｃ2−２＊ｂ                  …（１１）
Ａｙ'＝ｃ＊（ｂ−Ａｘ' ）−２＊ａ2  …（１２）
Ａｚ'＝２＊Ａｙ＊Ａｚ              …（１３）
（１０）式のｃ1は楕円曲線方程式（Ｙ2＝Ｘ3＋ｃ1Ｘ＋ｃ0）の１次項の係数である。
【００６３】
なお、（３）（４）式のａ、ｂと（８）（９）式のａ、ｂとはたまたま標記が同一であるに過ぎず、両者の間には何らの依存関係もない。
上記Ｓ５５２〜Ｓ５５８までの処理は先に述べた実施の形態のデーブル参照処理及びｘ×Ａ倍処理に相当する。
【００６４】
Ｓ５５９のレジスタｋの算術右シフト算とは、１６２ｂｉｔレジスタｋの最上位ビット（ｋ[161]）を符号ビットとみなし、符号は保持したまま下位１６１ｂｉｔ（ｋ[16０]〜ｋ[０]）を右にシフトすることである。この処理でオーバーフローしたビット値は無視する。Ｓ５６０はｉをデクリメントする処理で、ｉが０になるまでＳ５５１〜Ｓ５６０の処理を繰り返し、０になると処理を終了する。
【００６５】
この楕円べき倍演算装置は、第１の実施例のべき乗剰余演算装置と同様、演算方法としても特徴を有する。従って、その演算方法を実行するプログラム（図６に示すフローチャートに相当）を随時インストールすることにより、任意の汎用コンピュータにて本発明を実施することが出来る。
【００６６】
【発明の効果】
本発明は、以上説明したように構成されるものであるから、べき数の値を保持するための領域を、そのビット幅＋２ビット分に抑えることができる上、符号つき２進表現への変換結果によって演算を制御するため、べき乗演算時の乗算回数、または楕円べき倍算演算時の楕円加算回数が、本来の符号つきバイナリ法での演算回数平均値（べき数値のビット幅の１／３）に近い回数まで削減できるといった効果がある。
【００６７】
加えて、本発明によれば、符号つき２進表現への変換結果をべき値保持領域に上書きし、次の判定のために用いているため、その演算回数がバイナリ法を適用した時の演算回数を超えることはない。従って、演算回数を従来の手法の符号つきバイナリ法で行なう演算回数に近い値への削減を、本発明では、保持領域の大幅な増加なしに行なったことでその効果は大きい。
【図面の簡単な説明】
【図１】本発明の一実施例としてのべき数値処理部の詳細構成図である。
【図２】本発明における演算部の詳細構成図である。
【図３】本発明におけるべき数値判定部で判定される分類と、べき数値変換部の変換処理、演算部の数値選択処理の対応表である。
【図４】べき乗剰余演算装置全体構成図である。
【図５】本発明のべき乗剰余演算の処理を示すフローチャートである。
【図６】本発明の他の実施形態として楕円べき倍演算処理を示すフローチャートである。
【図７】本発明の演算方法を、具体的な数値を用いて示したもので、演算回数によって演算値がどのように推移して行くかを表にして表わしている。
【図８】バイナリ法の演算式を示す表である。
【図９】従来の一手法であるバイナリ法によるべき乗剰余演算処理フローチャートである。
【図１０】従来の一手法であるバイナリ法におけるべき数値処理部の詳細構成図である。
【図１１】従来の一手法であるバイナリ法における演算部の詳細構成図である。
【図１２】従来の一手法である符号つきバイナリ法によるべき乗剰余演算処理を示すフローチャートである。
【図１３】従来の一手法である符号つきバイナリ法におけるべき数値処理部の詳細構成図である。
【図１４】従来の一手法である符号つきバイナリ法における演算部の詳細構成図である。
【図１５】従来の一手法である特開平７−４９７６９号公報に示された方法によるべき乗剰余演算処理を示すフローチャートである。
【図１６】従来の一手法である特開平７−４９７６９号公報に示された方法におけるべき数値処理部の詳細構成図である。
【図１７】従来の一手法である特開平７−４９７６９号公報に示された方法におけるべき数値判定部の分類と、演算部の数値選択処理の対応表である。
【符号の説明】
１０１  べき数値処理部
１０２  入力されるべき数値ｋ
１０３  べき数値処理部から演算部へ出力される制御信号
１０４  入力される被べき乗値Ａ
１０５  出力されるＡのｋ乗剰余値
１０６  演算部
２０１  べき数値保持レジスタ
２０２  べき数値保持レジスタへの初期値入力
２０３  べき数値判定部
２０４  べき数値変換部
２０５  べき数値シフト部
２０６  分類タイプを演算部に伝える制御信号
３０１  中間値レジスタ
３０２  中間値レジスタへの初期値入力
３０３  ２乗演算部
３０４  乗算演算部
３０５  逆数取得部
３０６  乗算演算部入力値選択セレクタ
３０７  中間値保持値選択セレクタ
３０８  最終演算結果の出力
４０１  べき数値上位４ビットのビットパターン
４０２  べき数値変換部で処理される変換値
４０３  演算部処理
６０１  べき数値保持レジスタ
６０２  べき数値保持レジスタへの初期値入力
６０５  べき数値シフト部
６０６  演算部に伝える制御信号
７０１  中間値レジスタ
７０２  中間値レジスタへの初期値入力
７０３  ２乗演算部
７０４  乗算演算部
７０７  中間値保持値選択セレクタ
７０８  最終演算結果の出力
９０１  べき数値保持レジスタ
９０２  べき数値保持レジスタへの初期値入力
９０５  べき数値シフト部
９０６  演算部に伝える制御信号
９０７  ２進表現を符号つき２進表現に変換する変換部
１００１  中間値レジスタ
１００２  中間値レジスタへの初期値入力
１００３  ２乗演算部
１００４  乗算演算部
１００５  逆数取得部
１００６  乗算演算部入力値選択セレクタ
１００７  中間値保持値選択セレクタ
１００８  最終演算結果の出力
１２０１  べき数値保持レジスタ
１２０２  べき数値保持レジスタへの初期値入力
１２０３  べき数値判定部
１２０５  べき数値シフト部
１２０６  分類タイプを演算部に伝える制御信号
１３０１  べき数値上位３ビットのビットパターン
１３０３  最初に行なわれる演算部処理
１３０４  ２回目に行なわれる演算部処理
【図１】
0004541485.tif 000010
【図２】
0004541485.tif 000011
【図３】
0004541485.tif 000012
【図４】
0004541485.tif 000013
【図５】
0004541485.tif 000014
【図６】
0004541485.tif 000015
【図７】
0004541485.tif 000016
【図８】
0004541485.tif 000017
【図９】
0004541485.tif 000018
【図１０】
0004541485.tif 000019
【図１１】
0004541485.tif 000020
【図１２】
0004541485.tif 000021
【図１３】
0004541485.tif 000022
【図１４】
0004541485.tif 000023
【図１５】
0004541485.tif 000024
【図１６】
0004541485.tif 000025
【図１７】
0004541485.tif 000026