(57)【要約】【課題】有限体の逆元を演算する逆元演算装置に関し，内部変数バッファオーバフローを発生させずに有限体の逆元演算を行うことが可能となる技術を提供する。【解決手段】逆元演算装置１０において，入力部１１は，逆元を求める値Ｘと有限体の法Ｐとを入力し，中間変数Ａ，Ｂ，α，βの設定を行う。条件付中間変数交換部１３は，条件に応じて，Ａ−Ｂ間，α−β間での値の交換，Ａ−Ｂ間，α−β間での減算処理を行う。法符号調整部１４は，αの正負に応じて中間法変数Ｐ’に−ＰまたはＰを設定する。条件付法加算・シフト部１５は，αが奇数である場合にαにＰ’を加算し，Ａおよびαの値を１／２する。変換終了判定部１６は，Ａの値が１になれば中間変数変換部１２による処理の終了を判定する。中間変数符号調整部１７は，αが負である場合にαにＰを加算する。出力部１８は，最終的なαの値を求められた逆元として出力する。【選択図】図１
2010122246.tif 000002
【特許請求の範囲】
【請求項１】
拡張バイナリ法に基づくＧＣＤ演算を用いて有限体の逆元を計算する逆元演算装置であって，
逆元を求めたい値と有限体の法とを入力し，演算結果が逆元の値となる特定の中間変数を含む複数の中間変数の設定を行う入力部と，
条件に応じて，所定の中間変数間での値の交換，または所定の中間変数間での減算を行う条件付中間変数交換部と，
前記特定の中間変数の値が奇数である場合に前記特定の中間変数に対する前記有限体の法の加算または減算を前記特定の中間変数の符号に応じて切り換えて行い，前記特定の中間変数を含む所定の中間変数の値を１／２する条件付法加算・シフト部と，
所定の中間変数の値によって，前記条件付中間変数交換部，前記条件付法加算・シフト部による処理の終了を判定する変換終了判定部と，
前記特定の中間変数の符号が負である場合に，前記特定の中間変数に前記有限体の法を加算する中間変数符号調整部と，
前記特定の中間変数の値を求められた逆元の値として出力する出力部とを備える
ことを特徴とする逆元演算装置。
【請求項２】
拡張バイナリ法に基づくＧＣＤ演算を用いて有限体の逆元を計算する逆元演算プログラムであって，
コンピュータを，
逆元を求めたい値と有限体の法とを入力し，演算結果が逆元の値となる特定の中間変数を含む複数の中間変数の設定を行う入力部と，
条件に応じて，所定の中間変数間での値の交換，または所定の中間変数間での減算を行う条件付中間変数交換部と，
前記特定の中間変数の値が奇数である場合に前記特定の中間変数に対する前記有限体の法の加算または減算を前記特定の中間変数の符号に応じて切り換えて行い，前記特定の中間変数を含む所定の中間変数の値を１／２する条件付法加算・シフト部と，
所定の中間変数の値によって，前記条件付中間変数交換部，前記条件付法加算・シフト部による処理の終了を判定する変換終了判定部と，
前記特定の中間変数の符号が負である場合に，前記特定の中間変数に前記有限体の法を加算する中間変数符号調整部と，
前記特定の中間変数の値を求められた逆元の値として出力する出力部として
機能させるための逆元演算プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，有限体の逆元を計算する技術に関するものであり，特に，中間変数のバッファオーバフローを起こさずに有限体の逆元を計算することが可能となる逆元演算装置および逆元演算プログラムに関するものである。
【背景技術】
【０００２】
有限体の逆元演算は，公開鍵暗号ＲＳＡや楕円曲線暗号ＥＣＤＳＡ等の，多くの暗号アルゴリズムにおいて利用されている。
【０００３】
例えば，二つの整数の組（ａ０，ｂ０），（ａ１，ｂ１），素数ｐと自然数ｒ（ｒ＜ｐ）の組（ｐ，ｒ）に対して，以下の式に基づいて，ｓを求める操作を考える。
【０００４】
ｓ＝−（ａ１＋ｂ１＊ｒ）＊（ａ０＋ｂ０＊ｒ）-1  ｍｏｄ  ｐ
格子篩法に基づく一般数体篩法を利用した素因数分解アルゴリズムでは，上記の計算を大量の（ｐ，ｒ）に対して高速に演算する必要がある。上記の計算では，特にｍｏｄ  ｐの逆元演算が困難である。
【０００５】
このような逆元演算は，最大公約数ＧＣＤを求める演算を拡張することで得られる。従来知られているＧＣＤ演算アルゴリズムは次の通りである。
【０００６】
１．拡張ユークリッド互除法
２．拡張バイナリ法
３．拡張レーマー法
これらのＧＣＤ演算アルゴリズムの中で，拡張バイナリ法に基づくＧＣＤ演算は，処理の内部において割算を利用しない点でハードウェア実装に向いた演算方法であることが知られている（例えば，非特許文献１参照）。
【０００７】
図１３は，拡張バイナリＧＣＤアルゴリズムに基づく逆元演算処理のフローチャートである。
【０００８】
逆元を求めたい値Ｘと，有限体の法である奇素数Ｐとを入力し（ステップＳ５０），初期設定を行う（ステップＳ５１）。初期設定では，中間変数Ａに入力された逆元を求めたい値Ｘを設定し，中間変数Ｂに入力された有限体の法Ｐを設定する。また，中間変数αに１を設定し，中間変数βに０を設定する。
【０００９】
中間変数Ａが偶数であるか奇数であるかを確認する（ステップＳ５２）。中間変数Ａが奇数であれば（ステップＳ５２のＮＯ），中間変数Ａと中間変数Ｂとの大小を比較する（ステップ５３）。中間変数Ａが中間変数Ｂよりも小さい場合には（ステップＳ５３のＮＯ），中間変数Ａと中間変数Ｂとの間で値を交換し，また中間変数αと中間変数βとの間で値を交換する（ステップＳ５４）。中間変数Ａを中間変数Ｂで減算し，中間変数αを中間変数βで減算する（ステップＳ５５）。
【００１０】
中間変数Ａを１ビット右シフト，すなわち中間変数Ａの値を１／２する（ステップＳ５６）。中間変数αが偶数であるか奇数であるかを確認する（ステップＳ５７）。中間変数αが偶数であれば（ステップＳ５７のＹＥＳ），中間変数αを１ビット右シフト，すなわち中間変数αの値を１／２する（ステップＳ５８）。中間変数αが奇数であれば（ステップＳ５７のＮＯ），中間変数αに有限体の法Ｐを加算し，１ビット右シフト，すなわち中間変数αに有限体の法Ｐを加算して得られた値を１／２する（ステップＳ５９）。
【００１１】
中間変数Ａの値が１であるかを確認する（ステップＳ６０）。中間変数Ａの値が１でなければ（ステップＳ６０のＮＯ），ステップＳ５２の処理に戻り，中間変数Ａの値が１になるまで（ステップ６０のＹＥＳ），ステップＳ５２〜ステップＳ６０の処理を繰り返す。
【００１２】
中間変数αの値の正負を確認する（ステップＳ６１）。中間変数αが負の値であれば（ステップＳ６１のＮＯ），中間変数αに有限体の法Ｐを加算し，中間変数αを正の値にする（ステップＳ６２）。
【００１３】
中間変数αを求める逆元の値として出力する（ステップＳ６３）。
【００１４】
図１４は，拡張バイナリＧＣＤアルゴリズムに基づいて有限体の逆元の計算を行う逆元演算装置の機能構成の例を示す図である。
【００１５】
逆元演算装置５００は，入力部５０１，中間変数変換部５０２，中間変数符号調整部５０６，出力部５０７を備える。
【００１６】
入力部５０１は，図１３におけるステップＳ５０，ステップＳ５１に相当する処理を行う。すなわち，逆元を求めたい値と有限体の法とを入力し，各中間変数の記憶部への設定を行う。
【００１７】
中間変数変換部５０２は，図１３におけるステップＳ５２〜ステップＳ６０に相当する処理を行う。すなわち，中間変数を用いた逆元演算を行う。中間変数変換部５０２は，条件付中間変数交換部５０３，条件付法加算・シフト部５０４，変換終了判定部５０５を有する。
【００１８】
条件付中間変数交換部５０３は，図１３におけるステップＳ５２〜ステップＳ５５に相当する処理を行う。すなわち，所定の条件（中間変数Ａが奇数）を満たした場合に，中間変数間での値の交換や，中間変数間での減算処理を行う。
【００１９】
条件付法加算・シフト部５０４は，図１３におけるステップＳ５６〜ステップＳ５９に相当する処理を行う。すなわち，中間変数（Ａ，α）の１ビット右シフト（中間変数の値を１／２にする処理）を行う。所定の条件（中間変数αが奇数）を満たした場合には，中間変数への有限体の法の加算を行ってからシフトを行う。
【００２０】
変換終了判定部５０５は，図１３におけるステップＳ６０に相当する処理を行う。すなわち，中間変数変換部５０２による処理の終了判定を行う。
【００２１】
中間変数符号調整部５０６は，図１３におけるステップＳ６１，ステップＳ６２に相当する処理を行う。すなわち，中間変数（α）の値が負の値である場合に，有限体の法を加算して正の値にする。
【００２２】
出力部５０７は，図１３におけるステップＳ６３に相当する処理を行う。すなわち，最終的な演算結果である中間変数（α）の値を求める逆元の値として出力する。
【００２３】
このような逆元演算装置５００は，逆元演算回路や，ＣＰＵ／メモリ等を備えたコンピュータとそのコンピュータが実行するソフトウェアプログラムとによって実現することができる。
【００２４】
図１５は，拡張バイナリＧＣＤアルゴリズムに基づく逆元演算プログラムの例を示す図である。このように，逆元演算装置５００を，コンピュータが実行するプログラムで実現することもできる。
【００２５】
上述のような拡張バイナリＧＣＤ法を用いた逆元演算では，演算途中における中間変数の最大値に関する保証がない。すなわち，本アルゴリズムをベースにハードウェア上に実装を行った場合，確保されているビット長を超えて演算が行なわれ，内部変数がバッファオーバフローを起こす可能性がある。バッファオーバフローが起こった場合には，以降の演算に関して保証ができなくなるばかりでなく，場合によっては装置自身に致命的ダメージを与えてしまいかねない。
【００２６】
図１６は，拡張バイナリＧＣＤアルゴリズムに基づいて逆元演算を行った結果の例を示す図である。図１６では，逆元を求めたい値Ｘ＝１６３４５６７ｆ，有限体の法Ｐ＝３ｆｆｆｂ２３ｆとした場合の演算結果の例である。
【００２７】
この例は，入力を含めて，中間変数はすべて３２ビット未満の値であることを期待したものである。しかし，図１６に示すように，中間変数変換処理（図１３におけるステップＳ５２〜ステップＳ６０の処理）の２３ループ目から始まる＊印のある８箇所の処理で，中間変数αの値が３２ビットを超えており，バッファオーバフローが発生する。
【００２８】
このような問題の素朴な解決法としては，内部変数（上記の中間変数）のメモリ領域を多めに確保しておく方法が考えられる。しかし，変数値の上限に関する保障がないため，内部変数のためにどれだけ多くのメモリ領域を確保すればバッファオーバフローが起こらないようにできるかは不明であり，不必要に多くのメモリを確保せざるを得ず，資源の浪費につながってしまう。
【００２９】
拡張バイナリ法のＬＳＩへの実装例として，ＰＭ法と冗長バイナリ表現とを組み合わせることにより，バッファオーバの発生を抑止する技術が知られている（例えば，非特許文献２参照）。冗長バイナリ表現とは，各ビットの表現を｛０，１｝の２種類から｛−１，０，１｝の３種類に拡張したものである。通常のバイナリ表現と比べて，倍のビット幅が必要となる。
【非特許文献１】A. Menezes，P. Ooscot ，S. Vanstone ，“Handbook of Applied Cryptography”，14.4.3節 Algorithm14.61 ，CRC press ，1997.
【非特許文献２】Takagi，“A VLSI Algorithm for Modular Division Based on the Binary GCD Algorithm ”，IEICE Trans Fundamentals Vol. E81-A ，No5. 1998.
【発明の開示】
【発明が解決しようとする課題】
【００３０】
上述のＰＭ法と冗長バイナリ表現とを組み合わせる技術では，バッファオーバフローの発生は防げる。しかし，この技術では，冗長バイナリ表現を用いていることから，各変数に対応するビット幅が，単純に倍以上必要となる。また，冗長バイナリ表現専用演算回路も別途必要となることに加え，アルゴリズムの制御が複雑であるため，実装の小型化を進める上での大きな障害となる。
【００３１】
本発明は，上記の問題点の解決を図り，内部変数のビット幅を増やすことなく，内部変数バッファオーバフローを起こさないように，有限体の逆元演算を行うことが可能となる技術を提供することを目的とする。
【課題を解決するための手段】
【００３２】
拡張バイナリＧＣＤアルゴリズムの演算途中において，中間結果の正負に応じて，有限体の法の加算または減算を切り換えて，演算を行うようにする。
【００３３】
具体的には，拡張バイナリ法に基づくＧＣＤ演算を用いて有限体の逆元を計算する逆元演算装置は，逆元を求めたい値と有限体の法とを入力し，演算結果が逆元の値となる特定の中間変数を含む複数の中間変数の設定を行う入力部と，条件に応じて所定の中間変数間での値の交換または所定の中間変数間での減算を行う条件付中間変数交換部と，特定の中間変数の値が奇数である場合に特定の中間変数に対する有限体の法の加算または減算を特定の中間変数の符号に応じて切り換えて行い，特定の中間変数を含む所定の中間変数の値を１／２する条件付法加算・シフト部と，所定の中間変数の値によって，条件付中間変数交換部，条件付法加算・シフト部による処理の終了を判定する変換終了判定部と，特定の中間変数の符号が負である場合に特定の中間変数に有限体の法を加算する中間変数符号調整部と，特定の中間変数の値を求められた逆元の値として出力する出力部とを備える。
【００３４】
上記の逆元演算装置による処理を，コンピュータが備えるＣＰＵ，メモリ等のハードウェアとソフトウェアプログラムとにより実現することもできる。
【発明の効果】
【００３５】
拡張バイナリＧＣＤアルゴリズムを用いて有限体の逆元を演算する場合において，内部変数の値の正負に応じて有限体の法の加算と減算とを入れ換えるように分岐条件を入れることにより，演算過程におけるすべての内部変数のビット長が入力データを二進表現した際のデータビット長を超えないことが保障されるため，装置の内部変数バッファオーバフローを起こさないような逆元演算が可能となる。
【００３６】
また，単純な条件分岐の付加のみで従来の問題点（バッファオーバフロー）を解決できるので，パフォーマンスを落とすことなく課題を解決することが可能となる。
【発明を実施するための最良の形態】
【００３７】
以下，本実施の形態について，図を用いて説明する。
【００３８】
図１は，本実施の形態による逆元演算装置の機能構成例を示す図である。
【００３９】
有限体の逆元を計算する逆元演算装置１０は，逆元を求めたい値と有限体の法とを入力し，中間変数の設定を行う入力部１１，中間変数を用いた逆元演算を行う中間変数変換部１２，中間変数の符号を調整する中間変数符号調整部１７，求められた逆元の値を出力する出力部１８を備える。また，中間変数変換部１２は，条件付中間変数交換部１３，法符号調整部１４，条件付法加算・シフト部１５，変換終了判定部１６を備える。
【００４０】
逆元演算装置１０は，例えば，逆元演算回路により実現することができる。また，ＣＰＵ／メモリ等のハードウェアを備えたコンピュータと，そのコンピュータで実行されるソフトウェアプログラムとにより，実現することができる。
【００４１】
図２は，本実施の形態の逆元演算装置が備える入力部の構成例を示す図である。入力部１１は，入力変数設定部１１０，中間変数初期設定部１１１を備える。
【００４２】
入力変数設定部１１０は，逆元を求めたい値Ｘと，有限体の法Ｐの入力設定を行う。
【００４３】
中間変数初期設定部１１１は，各中間変数の記憶部（メモリ，レジスタ等）への初期設定を行う。第一の中間変数である中間変数Ａに，入力された逆元を求めたい値Ｘを設定する。第二の中間変数である中間変数Ｂに，入力された有限体の法Ｐを設定する。第三の中間変数である中間変数αに１を設定する。第四の中間変数である中間変数βに０を設定する。
【００４４】
図３は，本実施の形態の逆元演算装置が備える条件付中間変数交換部の構成例を示す図である。条件に応じて，中間変数間での値の交換や，中間変数間での減算処理を行う条件付中間変数交換部１３は，第一中間変数偶奇判定部１３０，中間変数大小判定部１３１，中間変数値交換部１３２，中間変数減算処理部１３３を備える。
【００４５】
第一中間変数偶奇判定部１３０は，中間変数Ａが偶数であるか，奇数であるかを判定する。
【００４６】
中間変数大小判定部１３１は，中間変数Ａが奇数である場合に，中間変数Ａと中間変数Ｂとの大小関係を判定する。
【００４７】
中間変数値交換部１３２は，中間変数Ａの値の方が中間変数Ｂの値よりも小さい場合に，中間変数Ａと中間変数Ｂとの間で値を交換し，中間変数αと中間変数βとの間で値を交換する。
【００４８】
中間変数減算処理部１３３は，中間変数Ｂによる中間変数Ａの減算処理を行い，中間変数βによる中間変数αの減算処理を行う。中間変数大小判定部１３１により，中間変数Ａの値が中間変数Ｂの値以上であると判定された場合には，そのまま減算処理を行い，中間変数Ａの値の方が中間変数Ｂの値よりも小さいと判定された場合には，中間変数値交換部１３２による値交換を行ってから減算処理を行う。
【００４９】
図４は，本実施の形態の逆元演算装置が備える法符号調整部の構成例を示す図である。条件付法加算・シフト部１５において加算する有限体の法の符号を調整する法符号調整部１４は，第三中間変数符号判定部１４０，中間法変数設定部１４１を備える。
【００５０】
第三中間変数符号判定部１４０は，中間変数αの符号が正であるか負であるかを判定する。
【００５１】
中間法変数設定部１４１は，中間法変数Ｐ’に，条件付法加算・シフト部１５において加算する有限体の法Ｐを設定する。このとき，中間変数αの符号が正である場合には，符号を負に調整した有限体の法−Ｐを中間法変数Ｐ’に設定し，中間変数αの符号が負である場合には，符号を正に調整した有限体の法Ｐを中間法変数Ｐ’に設定する。
【００５２】
図５は，本実施の形態の逆元演算装置が備える条件付法加算・シフト部の構成例を示す図である。条件に応じた中間変数に対する有限体の法の加算／減算や，中間変数の１ビットシフト処理（値を１／２にする処理）を行う条件付法加算・シフト部１５は，第一中間変数シフト部１５０，第三中間変数偶奇判定部１５１，第三中間変数加算処理部１５２，第三中間変数シフト部１５３を備える。
【００５３】
第一中間変数シフト部１５０は，中間変数Ａを１ビット右シフトする。すなわち，中間変数Ａの値を１／２にする。
【００５４】
第三中間変数偶奇判定部１５１は，中間変数αが偶数であるか，奇数であるかを判定する。
【００５５】
第三中間変数加算処理部１５２は，中間変数αが奇数である場合に，中間法変数Ｐ’による中間変数αの加算処理を行う。中間変数αの符号が負である場合には，符号を正に調整した中間法変数Ｐ’（＝Ｐ）が中間変数αに加算される。中間変数αの符号が正である場合には，符号を負に調整した中間法変数Ｐ’（＝−Ｐ）が中間変数αに加算される。すなわち，中間変数αの符号が負である場合には，中間変数αに有限体の法Ｐが加算され，中間変数αの符号が正である場合には，中間変数αから有限体の法Ｐが減算される。
【００５６】
第三中間変数シフト部１５３は，中間変数αを１ビット右シフトする。すなわち，中間変数αの値を１／２にする。第三中間変数偶奇判定部１５１により，中間変数αが偶数であると判定された場合には，そのまま１ビット右シフト処理を行い，中間変数αが奇数であると判定された場合には，第三中間変数加算処理部１５２による加算処理を行ってから１ビット右シフト処理を行う。
【００５７】
図６は，本実施の形態の逆元演算装置が備える変換終了判定部の構成例を示す図である。中間変数変換部１２による処理の終了判定を行う変換終了判定部１６は，第一中間変数判定部１６０を備える。
【００５８】
第一中間変数判定部１６０は，中間変数Ａが１であるか否かを判定する。中間変数Ａが１であれば，中間変数変換部１２による処理を終了し，中間変数Ａが１でなければ，中間変数変換部１２による処理を再実行する。
【００５９】
図７は，本実施の形態の逆元演算装置が備える中間変数符号調整部の構成例を示す図である。中間変数の符号を正に調整する中間変数符号調整部１７は，第三中間変数符号判定部１７０，第三中間変数法加算処理部１７１を備える。
【００６０】
第三中間変数符号判定部１７０は，中間変数αの符号が正であるか負であるかを判定する。
【００６１】
第三中間変数法加算処理部１７１は，中間変数αの符号が負である場合に，有限体の法Ｐによる中間変数αの加算処理を行う。
【００６２】
図８は，本実施の形態の逆元演算装置が備える出力部の構成例を示す図である。求められた逆元の値を出力する出力部１８は，逆元出力部１８０を備える。
【００６３】
逆元出力部１８０は，中間変数αの値を，求められた逆元の値として出力する。中間変数αの最終的な演算結果が，求められた逆元の値である。
【００６４】
図９は，本実施の形態による逆元演算処理のフローチャートである。図９に示す逆元演算処理フローチャートは，図１３に示す拡張バイナリＧＣＤアルゴリズムに基づく逆元演算処理に，本実施の形態による法符号調整処理（図中点線枠内に示す処理）を加えたものである。
【００６５】
逆元を求めたい値Ｘと，有限体の法Ｐとを入力し（ステップＳ１０），初期設定を行う（ステップＳ１１）。初期設定では，中間変数Ａに入力された逆元を求めたい値Ｘを設定し，中間変数Ｂに入力された有限体の法Ｐを設定する。また，中間変数αに１を設定し，中間変数βに０を設定する。
【００６６】
中間変数Ａが偶数であるか奇数であるかを確認する（ステップＳ１２）。中間変数Ａが奇数であれば（ステップＳ１２のＮＯ），中間変数Ａと中間変数Ｂとの大小を比較する（ステップ１３）。中間変数Ａが中間変数Ｂよりも小さい場合には（ステップＳ１３のＮＯ），中間変数Ａと中間変数Ｂとの間で値を交換し，また中間変数αと中間変数βとの間で値を交換する（ステップＳ１４）。中間変数Ａを中間変数Ｂで減算し，中間変数αを中間変数βで減算する（ステップＳ１５）。
【００６７】
中間変数αの値の正負を確認する（ステップＳ１６）。中間変数αが正の値であれば（ステップＳ１６のＹＥＳ），中間法変数Ｐ’に有限体の法Ｐを符号を逆にして設定する（ステップＳ１７）。中間変数αが負の値であれば（ステップＳ１６のＮＯ），中間法変数Ｐ’に有限体の法Ｐを設定する（ステップＳ１８）。
【００６８】
中間変数Ａを１ビット右シフト，すなわち中間変数Ａの値を１／２する（ステップＳ１９）。中間変数αが偶数であるか奇数であるかを確認する（ステップＳ２０）。中間変数αが偶数であれば（ステップＳ２０のＹＥＳ），中間変数αを１ビット右シフト，すなわち中間変数αの値を１／２する（ステップＳ２１）。中間変数αが奇数であれば（ステップＳ２０のＮＯ），中間変数αに中間法変数Ｐ’を加算し，１ビット右シフト，すなわち中間変数αに中間法変数Ｐ’を加算して得られた値を１／２する（ステップＳ２２）。
【００６９】
中間変数Ａの値が１であるかを確認する（ステップＳ２３）。中間変数Ａの値が１でなければ（ステップＳ２３のＮＯ），ステップＳ１２の処理に戻り，中間変数Ａの値が１になるまで（ステップ２３のＹＥＳ），ステップＳ１２〜ステップＳ２３の処理を繰り返す。
【００７０】
中間変数αの値の正負を確認する（ステップＳ２４）。中間変数αが負の値であれば（ステップＳ２４のＮＯ），中間変数αに有限体の法Ｐを加算し，中間変数αを正の値にする（ステップＳ２５）。
【００７１】
中間変数αを求める逆元の値として出力する（ステップＳ２６）。
【００７２】
図１３に示す従来の逆元演算処理において，ステップＳ５９の中間変数αに有限体の法Ｐを加算する処理が，中間変数αのバッファオーバフローの原因となっていた。
【００７３】
図９に示す逆元演算処理において，ステップＳ２２の中間変数αに中間法変数Ｐ’を加算する処理では，ステップＳ１６〜ステップＳ１８に示す法符号調整処理により，中間変数αの値が正である場合には負の有限体の法−Ｐを加算し，中間変数αの値が負である場合には正の有限体の法Ｐを加算する。すなわち，ステップＳ２２の処理において，中間変数αの値が正である場合には，中間変数αから有限体の法Ｐが減算され，中間変数αの値が負である場合には，中間変数αに有限体の法Ｐが加算される。
【００７４】
ステップＳ１５後〜ステップＳ２２前までの過程では中間変数αの値が変わらないので，その過程内であれば，どのタイミングでステップＳ１６〜ステップＳ１８に示す処理が行われてもよい。また，中間法変数Ｐ’を用いずに，ステップＳ２２の処理において，中間変数αが正の場合には有限体の法Ｐの減算，中間変数αが負の場合には有限体の法Ｐの加算としてもよい。
【００７５】
このように，素数Ｐを法とした逆元の計算を拡張バイナリＧＣＤアルゴリズムを用いて演算する場合において，中間変数αの値の正負に応じて演算の加算と減算とを入れ換えるよう分岐条件を入れることにより，逆元演算アルゴリズムの全過程における全中間変数が取り得る絶対値の最大値が有限体の法Ｐの大きさを超えないことが保証され，内部変数のバッファオーバフローの発生を抑制することができる。
【００７６】
なお，ステップＳ２２の処理において，中間変数αに加算（減算）されるＰは有限体の法であるので，ここで行われる処理がＰの加算であってもＰの減算であっても，最終的に求められる逆元の値（最終的な中間変数αの値）は変わらない。
【００７７】
図１０は，本実施の形態による逆元演算プログラムの例を示す図である。図１０に示す逆元演算プログラムは，図１５に示す拡張バイナリＧＣＤアルゴリズムに基づく逆元演算プログラムに，本実施の形態による法符号調整処理を加えたものである。
【００７８】
図１５において，中間変数Ａｌｐｈａの値を１／２する処理６００では，中間変数Ａｌｐｈａが奇数である場合に，中間変数Ａｌｐｈａに有限体の法Ｐを加算してから，中間変数Ａｌｐｈａの値を１／２している。
【００７９】
図１０において，中間変数Ａｌｐｈａの値を１／２する処理３００では，中間変数Ａｌｐｈａが奇数である場合に，中間変数Ａｌｐｈａの値が正であれば中間変数Ａｌｐｈａから有限体の法Ｐを減算してから，中間変数Ａｌｐｈａの値が負であれば中間変数Ａｌｐｈａに有限体の法Ｐを加算してから，中間変数Ａｌｐｈａの値を１／２している。
【００８０】
図１１は，本実施の形態による逆元演算装置によって逆元演算を行った結果の例を示す図である。図１１では，図１６に示す例と同様に，逆元を求めたい値Ｘ＝１６３４５６７ｆ，有限体の法Ｐ＝３ｆｆｆｂ２３ｆとした場合の演算結果の例である。
【００８１】
従来の逆元演算装置５００を用いた図１６に示す例では，中間変数変換処理の２３ループ目から始まる＊印のある８箇所の処理で中間変数αの値が３２ビットを超えており，バッファオーバフローが発生する。
【００８２】
図１１に示すように，本実施の形態による逆元演算装置１０では，求める逆元の値が求まるまでの全過程において，中間変数の値が３２ビットを超えることはなく，バッファオーバフローは発生しない。
【００８３】
さらに，図１６と図１１の演算結果を比較してみてもわかるように，本実施の形態の逆元演算装置１０による逆元演算でも，従来の逆元演算装置５００による逆元演算と同様の正しい演算結果が得られる。
【００８４】
以上説明した本実施の形態による逆元演算の技術により，演算過程における全変数の絶対値の最大値が有限体の法Ｐの大きさを超えないことが保証されるため，バッファオーバフローを生じさせず，また，正しい演算結果を得る上で内部変数に必要なメモリ量を，その入力である法Ｐの値の二進表現で必要なビット数以下に抑えることができる。
【００８５】
ここで，本実施の形態による逆元演算装置１０を用いた演算回路の例を説明する。
【００８６】
格子篩法に基づく数体篩法をベースとした素因数分解装置では，因子基底と呼ばれる５０００万個もの大量の素数とタグの組を，格子空間に座標変換しなければならない。この座標変換は以下の式で演算される。
【００８７】
入力：ａ１，ｂ１，ａ０，ｂ０，ｒ，ｐ
出力：ｓ＝−（ａ１＋ｂ１＊ｒ）＊（ａ０＋ｂ０＊ｒ）-1  ｍｏｄ  ｐ
ただし，ｒは絶対値が３２ｂｉｔ未満の整数であり，ｐは３２ビット以下の素数であるものとする。
【００８８】
上記のｓを算出する処理を高速に実施するには，ハードウェア装置のパイプライン処理による並列実装が欠かせない。
【００８９】
図１２は，本実施の形態による逆元演算回路を組み込んだ処理装置の構成例を示す図である。図１２に示す処理装置は，乗算回路２００，加算回路２０１，剰余回路２０２，逆数（−Ｘ）演算回路２０３，乗算回路２０４，加算回路２０５，剰余回路２０６，逆元演算回路２０７，乗算回路２０８，剰余回路２０９を備える。逆元演算回路２０７は，本実施の形態による逆元演算装置１０に相当する。
【００９０】
図１２に示すような本実施の形態による逆元演算回路２０７が組み込まれた処理装置により，余分なデータビット幅を持たせることなく，正しい演算結果ｓを高速に得ることができる。
【００９１】
以上，本実施の形態について説明したが，本発明はその主旨の範囲において種々の変形が可能であることは当然である。
【図面の簡単な説明】
【００９２】
【図１】本実施の形態による逆元演算装置の機能構成例を示す図である。
【図２】本実施の形態の逆元演算装置が備える入力部の構成例を示す図である。
【図３】本実施の形態の逆元演算装置が備える条件付中間変数交換部の構成例を示す図である。
【図４】本実施の形態の逆元演算装置が備える法符号調整部の構成例を示す図である。
【図５】本実施の形態の逆元演算装置が備える条件付法加算・シフト部の構成例を示す図である。
【図６】本実施の形態の逆元演算装置が備える変換終了判定部の構成例を示す図である。
【図７】本実施の形態の逆元演算装置が備える中間変数符号調整部の構成例を示す図である。
【図８】本実施の形態の逆元演算装置が備える出力部の構成例を示す図である。
【図９】本実施の形態による逆元演算処理のフローチャートである。
【図１０】本実施の形態による逆元演算プログラムの例を示す図である。
【図１１】本実施の形態による逆元演算装置によって逆元演算を行った結果の例を示す図である。
【図１２】本実施の形態による逆元演算回路を組み込んだ処理装置の構成例を示す図である。
【図１３】拡張バイナリＧＣＤアルゴリズムに基づく逆元演算処理のフローチャートである。
【図１４】拡張バイナリＧＣＤアルゴリズムに基づいて有限体の逆元の計算を行う逆元演算装置の機能構成の例を示す図である。
【図１５】拡張バイナリＧＣＤアルゴリズムに基づく逆元演算プログラムの例を示す図である。
【図１６】拡張バイナリＧＣＤアルゴリズムに基づいて逆元演算を行った結果の例を示す図である。
【符号の説明】
【００９３】
１０  逆元演算装置
１１  入力部
１２  中間変数変換部
１３  条件付中間変数交換部
１４  法符号調整部
１５  条件付法加算・シフト部
１６  変換終了判定部
１７  中間変数符号調整部
１８  出力部
【図１】
2010122246.tif 000003
【図２】
2010122246.tif 000004
【図３】
2010122246.tif 000005
【図４】
2010122246.tif 000006
【図５】
2010122246.tif 000007
【図６】
2010122246.tif 000008
【図７】
2010122246.tif 000009
【図８】
2010122246.tif 000010
【図９】
2010122246.tif 000011
【図１０】
2010122246.tif 000012
【図１１】
2010122246.tif 000013
【図１２】
2010122246.tif 000014
【図１３】
2010122246.tif 000015
【図１４】
2010122246.tif 000016
【図１５】
2010122246.tif 000017
【図１６】
2010122246.tif 000018