JP2010122246A - 逆元演算装置および逆元演算プログラム - Google Patents

逆元演算装置および逆元演算プログラム Download PDF

Info

Publication number
JP2010122246A
JP2010122246A JP2008292877A JP2008292877A JP2010122246A JP 2010122246 A JP2010122246 A JP 2010122246A JP 2008292877 A JP2008292877 A JP 2008292877A JP 2008292877 A JP2008292877 A JP 2008292877A JP 2010122246 A JP2010122246 A JP 2010122246A
Authority
JP
Japan
Prior art keywords
intermediate variable
value
inverse element
variable
unit
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
JP2008292877A
Other languages
English (en)
Inventor
Takeshi Shimoyama
武司 下山
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.)
Fujitsu Ltd
Original Assignee
Fujitsu 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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2008292877A priority Critical patent/JP2010122246A/ja
Publication of JP2010122246A publication Critical patent/JP2010122246A/ja
Pending legal-status Critical Current

Links

Images

Abstract

【課題】有限体の逆元を演算する逆元演算装置に関し,内部変数バッファオーバフローを発生させずに有限体の逆元演算を行うことが可能となる技術を提供する。
【解決手段】逆元演算装置10において,入力部11は,逆元を求める値Xと有限体の法Pとを入力し,中間変数A,B,α,βの設定を行う。条件付中間変数交換部13は,条件に応じて,A−B間,α−β間での値の交換,A−B間,α−β間での減算処理を行う。法符号調整部14は,αの正負に応じて中間法変数P’に−PまたはPを設定する。条件付法加算・シフト部15は,αが奇数である場合にαにP’を加算し,Aおよびαの値を1/2する。変換終了判定部16は,Aの値が1になれば中間変数変換部12による処理の終了を判定する。中間変数符号調整部17は,αが負である場合にαにPを加算する。出力部18は,最終的なαの値を求められた逆元として出力する。
【選択図】図1

Description

本発明は,有限体の逆元を計算する技術に関するものであり,特に,中間変数のバッファオーバフローを起こさずに有限体の逆元を計算することが可能となる逆元演算装置および逆元演算プログラムに関するものである。
有限体の逆元演算は,公開鍵暗号RSAや楕円曲線暗号ECDSA等の,多くの暗号アルゴリズムにおいて利用されている。
例えば,二つの整数の組(a0,b0),(a1,b1),素数pと自然数r(r<p)の組(p,r)に対して,以下の式に基づいて,sを求める操作を考える。
s=−(a1+b1*r)*(a0+b0*r)-1 mod p
格子篩法に基づく一般数体篩法を利用した素因数分解アルゴリズムでは,上記の計算を大量の(p,r)に対して高速に演算する必要がある。上記の計算では,特にmod pの逆元演算が困難である。
このような逆元演算は,最大公約数GCDを求める演算を拡張することで得られる。従来知られているGCD演算アルゴリズムは次の通りである。
1.拡張ユークリッド互除法
2.拡張バイナリ法
3.拡張レーマー法
これらのGCD演算アルゴリズムの中で,拡張バイナリ法に基づくGCD演算は,処理の内部において割算を利用しない点でハードウェア実装に向いた演算方法であることが知られている(例えば,非特許文献1参照)。
図13は,拡張バイナリGCDアルゴリズムに基づく逆元演算処理のフローチャートである。
逆元を求めたい値Xと,有限体の法である奇素数Pとを入力し(ステップS50),初期設定を行う(ステップS51)。初期設定では,中間変数Aに入力された逆元を求めたい値Xを設定し,中間変数Bに入力された有限体の法Pを設定する。また,中間変数αに1を設定し,中間変数βに0を設定する。
中間変数Aが偶数であるか奇数であるかを確認する(ステップS52)。中間変数Aが奇数であれば(ステップS52のNO),中間変数Aと中間変数Bとの大小を比較する(ステップ53)。中間変数Aが中間変数Bよりも小さい場合には(ステップS53のNO),中間変数Aと中間変数Bとの間で値を交換し,また中間変数αと中間変数βとの間で値を交換する(ステップS54)。中間変数Aを中間変数Bで減算し,中間変数αを中間変数βで減算する(ステップS55)。
中間変数Aを1ビット右シフト,すなわち中間変数Aの値を1/2する(ステップS56)。中間変数αが偶数であるか奇数であるかを確認する(ステップS57)。中間変数αが偶数であれば(ステップS57のYES),中間変数αを1ビット右シフト,すなわち中間変数αの値を1/2する(ステップS58)。中間変数αが奇数であれば(ステップS57のNO),中間変数αに有限体の法Pを加算し,1ビット右シフト,すなわち中間変数αに有限体の法Pを加算して得られた値を1/2する(ステップS59)。
中間変数Aの値が1であるかを確認する(ステップS60)。中間変数Aの値が1でなければ(ステップS60のNO),ステップS52の処理に戻り,中間変数Aの値が1になるまで(ステップ60のYES),ステップS52〜ステップS60の処理を繰り返す。
中間変数αの値の正負を確認する(ステップS61)。中間変数αが負の値であれば(ステップS61のNO),中間変数αに有限体の法Pを加算し,中間変数αを正の値にする(ステップS62)。
中間変数αを求める逆元の値として出力する(ステップS63)。
図14は,拡張バイナリGCDアルゴリズムに基づいて有限体の逆元の計算を行う逆元演算装置の機能構成の例を示す図である。
逆元演算装置500は,入力部501,中間変数変換部502,中間変数符号調整部506,出力部507を備える。
入力部501は,図13におけるステップS50,ステップS51に相当する処理を行う。すなわち,逆元を求めたい値と有限体の法とを入力し,各中間変数の記憶部への設定を行う。
中間変数変換部502は,図13におけるステップS52〜ステップS60に相当する処理を行う。すなわち,中間変数を用いた逆元演算を行う。中間変数変換部502は,条件付中間変数交換部503,条件付法加算・シフト部504,変換終了判定部505を有する。
条件付中間変数交換部503は,図13におけるステップS52〜ステップS55に相当する処理を行う。すなわち,所定の条件(中間変数Aが奇数)を満たした場合に,中間変数間での値の交換や,中間変数間での減算処理を行う。
条件付法加算・シフト部504は,図13におけるステップS56〜ステップS59に相当する処理を行う。すなわち,中間変数(A,α)の1ビット右シフト(中間変数の値を1/2にする処理)を行う。所定の条件(中間変数αが奇数)を満たした場合には,中間変数への有限体の法の加算を行ってからシフトを行う。
変換終了判定部505は,図13におけるステップS60に相当する処理を行う。すなわち,中間変数変換部502による処理の終了判定を行う。
中間変数符号調整部506は,図13におけるステップS61,ステップS62に相当する処理を行う。すなわち,中間変数(α)の値が負の値である場合に,有限体の法を加算して正の値にする。
出力部507は,図13におけるステップS63に相当する処理を行う。すなわち,最終的な演算結果である中間変数(α)の値を求める逆元の値として出力する。
このような逆元演算装置500は,逆元演算回路や,CPU/メモリ等を備えたコンピュータとそのコンピュータが実行するソフトウェアプログラムとによって実現することができる。
図15は,拡張バイナリGCDアルゴリズムに基づく逆元演算プログラムの例を示す図である。このように,逆元演算装置500を,コンピュータが実行するプログラムで実現することもできる。
上述のような拡張バイナリGCD法を用いた逆元演算では,演算途中における中間変数の最大値に関する保証がない。すなわち,本アルゴリズムをベースにハードウェア上に実装を行った場合,確保されているビット長を超えて演算が行なわれ,内部変数がバッファオーバフローを起こす可能性がある。バッファオーバフローが起こった場合には,以降の演算に関して保証ができなくなるばかりでなく,場合によっては装置自身に致命的ダメージを与えてしまいかねない。
図16は,拡張バイナリGCDアルゴリズムに基づいて逆元演算を行った結果の例を示す図である。図16では,逆元を求めたい値X=1634567f,有限体の法P=3fffb23fとした場合の演算結果の例である。
この例は,入力を含めて,中間変数はすべて32ビット未満の値であることを期待したものである。しかし,図16に示すように,中間変数変換処理(図13におけるステップS52〜ステップS60の処理)の23ループ目から始まる*印のある8箇所の処理で,中間変数αの値が32ビットを超えており,バッファオーバフローが発生する。
このような問題の素朴な解決法としては,内部変数(上記の中間変数)のメモリ領域を多めに確保しておく方法が考えられる。しかし,変数値の上限に関する保障がないため,内部変数のためにどれだけ多くのメモリ領域を確保すればバッファオーバフローが起こらないようにできるかは不明であり,不必要に多くのメモリを確保せざるを得ず,資源の浪費につながってしまう。
拡張バイナリ法のLSIへの実装例として,PM法と冗長バイナリ表現とを組み合わせることにより,バッファオーバの発生を抑止する技術が知られている(例えば,非特許文献2参照)。冗長バイナリ表現とは,各ビットの表現を{0,1}の2種類から{−1,0,1}の3種類に拡張したものである。通常のバイナリ表現と比べて,倍のビット幅が必要となる。
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.
上述のPM法と冗長バイナリ表現とを組み合わせる技術では,バッファオーバフローの発生は防げる。しかし,この技術では,冗長バイナリ表現を用いていることから,各変数に対応するビット幅が,単純に倍以上必要となる。また,冗長バイナリ表現専用演算回路も別途必要となることに加え,アルゴリズムの制御が複雑であるため,実装の小型化を進める上での大きな障害となる。
本発明は,上記の問題点の解決を図り,内部変数のビット幅を増やすことなく,内部変数バッファオーバフローを起こさないように,有限体の逆元演算を行うことが可能となる技術を提供することを目的とする。
拡張バイナリGCDアルゴリズムの演算途中において,中間結果の正負に応じて,有限体の法の加算または減算を切り換えて,演算を行うようにする。
具体的には,拡張バイナリ法に基づくGCD演算を用いて有限体の逆元を計算する逆元演算装置は,逆元を求めたい値と有限体の法とを入力し,演算結果が逆元の値となる特定の中間変数を含む複数の中間変数の設定を行う入力部と,条件に応じて所定の中間変数間での値の交換または所定の中間変数間での減算を行う条件付中間変数交換部と,特定の中間変数の値が奇数である場合に特定の中間変数に対する有限体の法の加算または減算を特定の中間変数の符号に応じて切り換えて行い,特定の中間変数を含む所定の中間変数の値を1/2する条件付法加算・シフト部と,所定の中間変数の値によって,条件付中間変数交換部,条件付法加算・シフト部による処理の終了を判定する変換終了判定部と,特定の中間変数の符号が負である場合に特定の中間変数に有限体の法を加算する中間変数符号調整部と,特定の中間変数の値を求められた逆元の値として出力する出力部とを備える。
上記の逆元演算装置による処理を,コンピュータが備えるCPU,メモリ等のハードウェアとソフトウェアプログラムとにより実現することもできる。
拡張バイナリGCDアルゴリズムを用いて有限体の逆元を演算する場合において,内部変数の値の正負に応じて有限体の法の加算と減算とを入れ換えるように分岐条件を入れることにより,演算過程におけるすべての内部変数のビット長が入力データを二進表現した際のデータビット長を超えないことが保障されるため,装置の内部変数バッファオーバフローを起こさないような逆元演算が可能となる。
また,単純な条件分岐の付加のみで従来の問題点(バッファオーバフロー)を解決できるので,パフォーマンスを落とすことなく課題を解決することが可能となる。
以下,本実施の形態について,図を用いて説明する。
図1は,本実施の形態による逆元演算装置の機能構成例を示す図である。
有限体の逆元を計算する逆元演算装置10は,逆元を求めたい値と有限体の法とを入力し,中間変数の設定を行う入力部11,中間変数を用いた逆元演算を行う中間変数変換部12,中間変数の符号を調整する中間変数符号調整部17,求められた逆元の値を出力する出力部18を備える。また,中間変数変換部12は,条件付中間変数交換部13,法符号調整部14,条件付法加算・シフト部15,変換終了判定部16を備える。
逆元演算装置10は,例えば,逆元演算回路により実現することができる。また,CPU/メモリ等のハードウェアを備えたコンピュータと,そのコンピュータで実行されるソフトウェアプログラムとにより,実現することができる。
図2は,本実施の形態の逆元演算装置が備える入力部の構成例を示す図である。入力部11は,入力変数設定部110,中間変数初期設定部111を備える。
入力変数設定部110は,逆元を求めたい値Xと,有限体の法Pの入力設定を行う。
中間変数初期設定部111は,各中間変数の記憶部(メモリ,レジスタ等)への初期設定を行う。第一の中間変数である中間変数Aに,入力された逆元を求めたい値Xを設定する。第二の中間変数である中間変数Bに,入力された有限体の法Pを設定する。第三の中間変数である中間変数αに1を設定する。第四の中間変数である中間変数βに0を設定する。
図3は,本実施の形態の逆元演算装置が備える条件付中間変数交換部の構成例を示す図である。条件に応じて,中間変数間での値の交換や,中間変数間での減算処理を行う条件付中間変数交換部13は,第一中間変数偶奇判定部130,中間変数大小判定部131,中間変数値交換部132,中間変数減算処理部133を備える。
第一中間変数偶奇判定部130は,中間変数Aが偶数であるか,奇数であるかを判定する。
中間変数大小判定部131は,中間変数Aが奇数である場合に,中間変数Aと中間変数Bとの大小関係を判定する。
中間変数値交換部132は,中間変数Aの値の方が中間変数Bの値よりも小さい場合に,中間変数Aと中間変数Bとの間で値を交換し,中間変数αと中間変数βとの間で値を交換する。
中間変数減算処理部133は,中間変数Bによる中間変数Aの減算処理を行い,中間変数βによる中間変数αの減算処理を行う。中間変数大小判定部131により,中間変数Aの値が中間変数Bの値以上であると判定された場合には,そのまま減算処理を行い,中間変数Aの値の方が中間変数Bの値よりも小さいと判定された場合には,中間変数値交換部132による値交換を行ってから減算処理を行う。
図4は,本実施の形態の逆元演算装置が備える法符号調整部の構成例を示す図である。条件付法加算・シフト部15において加算する有限体の法の符号を調整する法符号調整部14は,第三中間変数符号判定部140,中間法変数設定部141を備える。
第三中間変数符号判定部140は,中間変数αの符号が正であるか負であるかを判定する。
中間法変数設定部141は,中間法変数P’に,条件付法加算・シフト部15において加算する有限体の法Pを設定する。このとき,中間変数αの符号が正である場合には,符号を負に調整した有限体の法−Pを中間法変数P’に設定し,中間変数αの符号が負である場合には,符号を正に調整した有限体の法Pを中間法変数P’に設定する。
図5は,本実施の形態の逆元演算装置が備える条件付法加算・シフト部の構成例を示す図である。条件に応じた中間変数に対する有限体の法の加算/減算や,中間変数の1ビットシフト処理(値を1/2にする処理)を行う条件付法加算・シフト部15は,第一中間変数シフト部150,第三中間変数偶奇判定部151,第三中間変数加算処理部152,第三中間変数シフト部153を備える。
第一中間変数シフト部150は,中間変数Aを1ビット右シフトする。すなわち,中間変数Aの値を1/2にする。
第三中間変数偶奇判定部151は,中間変数αが偶数であるか,奇数であるかを判定する。
第三中間変数加算処理部152は,中間変数αが奇数である場合に,中間法変数P’による中間変数αの加算処理を行う。中間変数αの符号が負である場合には,符号を正に調整した中間法変数P’(=P)が中間変数αに加算される。中間変数αの符号が正である場合には,符号を負に調整した中間法変数P’(=−P)が中間変数αに加算される。すなわち,中間変数αの符号が負である場合には,中間変数αに有限体の法Pが加算され,中間変数αの符号が正である場合には,中間変数αから有限体の法Pが減算される。
第三中間変数シフト部153は,中間変数αを1ビット右シフトする。すなわち,中間変数αの値を1/2にする。第三中間変数偶奇判定部151により,中間変数αが偶数であると判定された場合には,そのまま1ビット右シフト処理を行い,中間変数αが奇数であると判定された場合には,第三中間変数加算処理部152による加算処理を行ってから1ビット右シフト処理を行う。
図6は,本実施の形態の逆元演算装置が備える変換終了判定部の構成例を示す図である。中間変数変換部12による処理の終了判定を行う変換終了判定部16は,第一中間変数判定部160を備える。
第一中間変数判定部160は,中間変数Aが1であるか否かを判定する。中間変数Aが1であれば,中間変数変換部12による処理を終了し,中間変数Aが1でなければ,中間変数変換部12による処理を再実行する。
図7は,本実施の形態の逆元演算装置が備える中間変数符号調整部の構成例を示す図である。中間変数の符号を正に調整する中間変数符号調整部17は,第三中間変数符号判定部170,第三中間変数法加算処理部171を備える。
第三中間変数符号判定部170は,中間変数αの符号が正であるか負であるかを判定する。
第三中間変数法加算処理部171は,中間変数αの符号が負である場合に,有限体の法Pによる中間変数αの加算処理を行う。
図8は,本実施の形態の逆元演算装置が備える出力部の構成例を示す図である。求められた逆元の値を出力する出力部18は,逆元出力部180を備える。
逆元出力部180は,中間変数αの値を,求められた逆元の値として出力する。中間変数αの最終的な演算結果が,求められた逆元の値である。
図9は,本実施の形態による逆元演算処理のフローチャートである。図9に示す逆元演算処理フローチャートは,図13に示す拡張バイナリGCDアルゴリズムに基づく逆元演算処理に,本実施の形態による法符号調整処理(図中点線枠内に示す処理)を加えたものである。
逆元を求めたい値Xと,有限体の法Pとを入力し(ステップS10),初期設定を行う(ステップS11)。初期設定では,中間変数Aに入力された逆元を求めたい値Xを設定し,中間変数Bに入力された有限体の法Pを設定する。また,中間変数αに1を設定し,中間変数βに0を設定する。
中間変数Aが偶数であるか奇数であるかを確認する(ステップS12)。中間変数Aが奇数であれば(ステップS12のNO),中間変数Aと中間変数Bとの大小を比較する(ステップ13)。中間変数Aが中間変数Bよりも小さい場合には(ステップS13のNO),中間変数Aと中間変数Bとの間で値を交換し,また中間変数αと中間変数βとの間で値を交換する(ステップS14)。中間変数Aを中間変数Bで減算し,中間変数αを中間変数βで減算する(ステップS15)。
中間変数αの値の正負を確認する(ステップS16)。中間変数αが正の値であれば(ステップS16のYES),中間法変数P’に有限体の法Pを符号を逆にして設定する(ステップS17)。中間変数αが負の値であれば(ステップS16のNO),中間法変数P’に有限体の法Pを設定する(ステップS18)。
中間変数Aを1ビット右シフト,すなわち中間変数Aの値を1/2する(ステップS19)。中間変数αが偶数であるか奇数であるかを確認する(ステップS20)。中間変数αが偶数であれば(ステップS20のYES),中間変数αを1ビット右シフト,すなわち中間変数αの値を1/2する(ステップS21)。中間変数αが奇数であれば(ステップS20のNO),中間変数αに中間法変数P’を加算し,1ビット右シフト,すなわち中間変数αに中間法変数P’を加算して得られた値を1/2する(ステップS22)。
中間変数Aの値が1であるかを確認する(ステップS23)。中間変数Aの値が1でなければ(ステップS23のNO),ステップS12の処理に戻り,中間変数Aの値が1になるまで(ステップ23のYES),ステップS12〜ステップS23の処理を繰り返す。
中間変数αの値の正負を確認する(ステップS24)。中間変数αが負の値であれば(ステップS24のNO),中間変数αに有限体の法Pを加算し,中間変数αを正の値にする(ステップS25)。
中間変数αを求める逆元の値として出力する(ステップS26)。
図13に示す従来の逆元演算処理において,ステップS59の中間変数αに有限体の法Pを加算する処理が,中間変数αのバッファオーバフローの原因となっていた。
図9に示す逆元演算処理において,ステップS22の中間変数αに中間法変数P’を加算する処理では,ステップS16〜ステップS18に示す法符号調整処理により,中間変数αの値が正である場合には負の有限体の法−Pを加算し,中間変数αの値が負である場合には正の有限体の法Pを加算する。すなわち,ステップS22の処理において,中間変数αの値が正である場合には,中間変数αから有限体の法Pが減算され,中間変数αの値が負である場合には,中間変数αに有限体の法Pが加算される。
ステップS15後〜ステップS22前までの過程では中間変数αの値が変わらないので,その過程内であれば,どのタイミングでステップS16〜ステップS18に示す処理が行われてもよい。また,中間法変数P’を用いずに,ステップS22の処理において,中間変数αが正の場合には有限体の法Pの減算,中間変数αが負の場合には有限体の法Pの加算としてもよい。
このように,素数Pを法とした逆元の計算を拡張バイナリGCDアルゴリズムを用いて演算する場合において,中間変数αの値の正負に応じて演算の加算と減算とを入れ換えるよう分岐条件を入れることにより,逆元演算アルゴリズムの全過程における全中間変数が取り得る絶対値の最大値が有限体の法Pの大きさを超えないことが保証され,内部変数のバッファオーバフローの発生を抑制することができる。
なお,ステップS22の処理において,中間変数αに加算(減算)されるPは有限体の法であるので,ここで行われる処理がPの加算であってもPの減算であっても,最終的に求められる逆元の値(最終的な中間変数αの値)は変わらない。
図10は,本実施の形態による逆元演算プログラムの例を示す図である。図10に示す逆元演算プログラムは,図15に示す拡張バイナリGCDアルゴリズムに基づく逆元演算プログラムに,本実施の形態による法符号調整処理を加えたものである。
図15において,中間変数Alphaの値を1/2する処理600では,中間変数Alphaが奇数である場合に,中間変数Alphaに有限体の法Pを加算してから,中間変数Alphaの値を1/2している。
図10において,中間変数Alphaの値を1/2する処理300では,中間変数Alphaが奇数である場合に,中間変数Alphaの値が正であれば中間変数Alphaから有限体の法Pを減算してから,中間変数Alphaの値が負であれば中間変数Alphaに有限体の法Pを加算してから,中間変数Alphaの値を1/2している。
図11は,本実施の形態による逆元演算装置によって逆元演算を行った結果の例を示す図である。図11では,図16に示す例と同様に,逆元を求めたい値X=1634567f,有限体の法P=3fffb23fとした場合の演算結果の例である。
従来の逆元演算装置500を用いた図16に示す例では,中間変数変換処理の23ループ目から始まる*印のある8箇所の処理で中間変数αの値が32ビットを超えており,バッファオーバフローが発生する。
図11に示すように,本実施の形態による逆元演算装置10では,求める逆元の値が求まるまでの全過程において,中間変数の値が32ビットを超えることはなく,バッファオーバフローは発生しない。
さらに,図16と図11の演算結果を比較してみてもわかるように,本実施の形態の逆元演算装置10による逆元演算でも,従来の逆元演算装置500による逆元演算と同様の正しい演算結果が得られる。
以上説明した本実施の形態による逆元演算の技術により,演算過程における全変数の絶対値の最大値が有限体の法Pの大きさを超えないことが保証されるため,バッファオーバフローを生じさせず,また,正しい演算結果を得る上で内部変数に必要なメモリ量を,その入力である法Pの値の二進表現で必要なビット数以下に抑えることができる。
ここで,本実施の形態による逆元演算装置10を用いた演算回路の例を説明する。
格子篩法に基づく数体篩法をベースとした素因数分解装置では,因子基底と呼ばれる5000万個もの大量の素数とタグの組を,格子空間に座標変換しなければならない。この座標変換は以下の式で演算される。
入力:a1,b1,a0,b0,r,p
出力:s=−(a1+b1*r)*(a0+b0*r)-1 mod p
ただし,rは絶対値が32bit未満の整数であり,pは32ビット以下の素数であるものとする。
上記のsを算出する処理を高速に実施するには,ハードウェア装置のパイプライン処理による並列実装が欠かせない。
図12は,本実施の形態による逆元演算回路を組み込んだ処理装置の構成例を示す図である。図12に示す処理装置は,乗算回路200,加算回路201,剰余回路202,逆数(−X)演算回路203,乗算回路204,加算回路205,剰余回路206,逆元演算回路207,乗算回路208,剰余回路209を備える。逆元演算回路207は,本実施の形態による逆元演算装置10に相当する。
図12に示すような本実施の形態による逆元演算回路207が組み込まれた処理装置により,余分なデータビット幅を持たせることなく,正しい演算結果sを高速に得ることができる。
以上,本実施の形態について説明したが,本発明はその主旨の範囲において種々の変形が可能であることは当然である。
本実施の形態による逆元演算装置の機能構成例を示す図である。 本実施の形態の逆元演算装置が備える入力部の構成例を示す図である。 本実施の形態の逆元演算装置が備える条件付中間変数交換部の構成例を示す図である。 本実施の形態の逆元演算装置が備える法符号調整部の構成例を示す図である。 本実施の形態の逆元演算装置が備える条件付法加算・シフト部の構成例を示す図である。 本実施の形態の逆元演算装置が備える変換終了判定部の構成例を示す図である。 本実施の形態の逆元演算装置が備える中間変数符号調整部の構成例を示す図である。 本実施の形態の逆元演算装置が備える出力部の構成例を示す図である。 本実施の形態による逆元演算処理のフローチャートである。 本実施の形態による逆元演算プログラムの例を示す図である。 本実施の形態による逆元演算装置によって逆元演算を行った結果の例を示す図である。 本実施の形態による逆元演算回路を組み込んだ処理装置の構成例を示す図である。 拡張バイナリGCDアルゴリズムに基づく逆元演算処理のフローチャートである。 拡張バイナリGCDアルゴリズムに基づいて有限体の逆元の計算を行う逆元演算装置の機能構成の例を示す図である。 拡張バイナリGCDアルゴリズムに基づく逆元演算プログラムの例を示す図である。 拡張バイナリGCDアルゴリズムに基づいて逆元演算を行った結果の例を示す図である。
符号の説明
10 逆元演算装置
11 入力部
12 中間変数変換部
13 条件付中間変数交換部
14 法符号調整部
15 条件付法加算・シフト部
16 変換終了判定部
17 中間変数符号調整部
18 出力部

Claims (2)

  1. 拡張バイナリ法に基づくGCD演算を用いて有限体の逆元を計算する逆元演算装置であって,
    逆元を求めたい値と有限体の法とを入力し,演算結果が逆元の値となる特定の中間変数を含む複数の中間変数の設定を行う入力部と,
    条件に応じて,所定の中間変数間での値の交換,または所定の中間変数間での減算を行う条件付中間変数交換部と,
    前記特定の中間変数の値が奇数である場合に前記特定の中間変数に対する前記有限体の法の加算または減算を前記特定の中間変数の符号に応じて切り換えて行い,前記特定の中間変数を含む所定の中間変数の値を1/2する条件付法加算・シフト部と,
    所定の中間変数の値によって,前記条件付中間変数交換部,前記条件付法加算・シフト部による処理の終了を判定する変換終了判定部と,
    前記特定の中間変数の符号が負である場合に,前記特定の中間変数に前記有限体の法を加算する中間変数符号調整部と,
    前記特定の中間変数の値を求められた逆元の値として出力する出力部とを備える
    ことを特徴とする逆元演算装置。
  2. 拡張バイナリ法に基づくGCD演算を用いて有限体の逆元を計算する逆元演算プログラムであって,
    コンピュータを,
    逆元を求めたい値と有限体の法とを入力し,演算結果が逆元の値となる特定の中間変数を含む複数の中間変数の設定を行う入力部と,
    条件に応じて,所定の中間変数間での値の交換,または所定の中間変数間での減算を行う条件付中間変数交換部と,
    前記特定の中間変数の値が奇数である場合に前記特定の中間変数に対する前記有限体の法の加算または減算を前記特定の中間変数の符号に応じて切り換えて行い,前記特定の中間変数を含む所定の中間変数の値を1/2する条件付法加算・シフト部と,
    所定の中間変数の値によって,前記条件付中間変数交換部,前記条件付法加算・シフト部による処理の終了を判定する変換終了判定部と,
    前記特定の中間変数の符号が負である場合に,前記特定の中間変数に前記有限体の法を加算する中間変数符号調整部と,
    前記特定の中間変数の値を求められた逆元の値として出力する出力部として
    機能させるための逆元演算プログラム。
JP2008292877A 2008-11-17 2008-11-17 逆元演算装置および逆元演算プログラム Pending JP2010122246A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2008292877A JP2010122246A (ja) 2008-11-17 2008-11-17 逆元演算装置および逆元演算プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008292877A JP2010122246A (ja) 2008-11-17 2008-11-17 逆元演算装置および逆元演算プログラム

Publications (1)

Publication Number Publication Date
JP2010122246A true JP2010122246A (ja) 2010-06-03

Family

ID=42323682

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008292877A Pending JP2010122246A (ja) 2008-11-17 2008-11-17 逆元演算装置および逆元演算プログラム

Country Status (1)

Country Link
JP (1) JP2010122246A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2020013336A (ja) * 2018-07-18 2020-01-23 富士通株式会社 並列処理装置、リダクション演算システム及びリダクション演算方法
CN112805770A (zh) * 2018-10-10 2021-05-14 日本电信电话株式会社 秘密右移位运算系统、秘密除法运算系统、它们的方法、秘密计算装置以及程序

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002175180A (ja) * 2000-12-06 2002-06-21 Matsushita Electric Ind Co Ltd 逆数演算方法及び逆数演算装置並びに逆数演算プログラムを記録したコンピュータ読み取り可能な記録媒体
JP2003288015A (ja) * 2002-03-28 2003-10-10 Matsushita Electric Ind Co Ltd 逆元演算装置、逆元演算方法、rsa鍵対生成装置、rsa鍵対生成方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002175180A (ja) * 2000-12-06 2002-06-21 Matsushita Electric Ind Co Ltd 逆数演算方法及び逆数演算装置並びに逆数演算プログラムを記録したコンピュータ読み取り可能な記録媒体
JP2003288015A (ja) * 2002-03-28 2003-10-10 Matsushita Electric Ind Co Ltd 逆元演算装置、逆元演算方法、rsa鍵対生成装置、rsa鍵対生成方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
JPN6012059347; Lorencz, R.: 'New Algorithm for Classical Modular Inverse' Cryptographic Hardware and Embedded Systems - CHES 2002 LNCS 2523, 2003, pp. 57-70 *

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2020013336A (ja) * 2018-07-18 2020-01-23 富士通株式会社 並列処理装置、リダクション演算システム及びリダクション演算方法
JP7077839B2 (ja) 2018-07-18 2022-05-31 富士通株式会社 並列処理装置、リダクション演算システム及びリダクション演算方法
CN112805770A (zh) * 2018-10-10 2021-05-14 日本电信电话株式会社 秘密右移位运算系统、秘密除法运算系统、它们的方法、秘密计算装置以及程序
CN112805770B (zh) * 2018-10-10 2023-10-03 日本电信电话株式会社 秘密右移位运算系统及方法、秘密除法运算系统及方法、秘密计算装置以及记录介质

Similar Documents

Publication Publication Date Title
US7904498B2 (en) Modular multiplication processing apparatus
EP1708081B1 (en) Method and device for calculating a Montgomery conversion parameter
CN109814838B (zh) 获取加解密运算中的中间结果组的方法、硬件装置和系统
JP4180024B2 (ja) 乗算剰余演算器及び情報処理装置
CN111385092B (zh) 使用信息盲化的密码装置及其密码处理方法
Pornin Optimized binary gcd for modular inversion
JP2004227344A (ja) 乗算器及び暗号回路
JP4170267B2 (ja) 乗算剰余演算器及び情報処理装置
JP2010122246A (ja) 逆元演算装置および逆元演算プログラム
KR101977873B1 (ko) 하드웨어 구현된 모듈러 역원 모듈
JP5175983B2 (ja) 演算装置
Will et al. Computing mod without mod
WO2016181978A1 (ja) 行列作用装置、行列作用方法、およびプログラム
US8407270B2 (en) Methods of calculating negative inverse of modulus
JP2000207387A (ja) 演算装置及び暗号処理装置
Arazi et al. On calculating multiplicative inverses modulo $2^{m} $
WO2020037565A1 (zh) 模逆运算器、模逆运算方法及安全系统
KR100946256B1 (ko) 다정도 캐리 세이브 가산기를 이용한 듀얼필드상의확장성있는 몽고매리 곱셈기
JP6973677B1 (ja) 逆数算出方法、装置、およびプログラム
JP7286239B2 (ja) 演算処理方法、演算処理装置、及び半導体装置
JP2004177582A (ja) 楕円曲線暗号装置、楕円曲線暗号演算方法
US7480380B2 (en) Method for efficient generation of modulo inverse for public key cryptosystems
Chen et al. A CRS-based convolution algorithm for NTRUEncrypt
JP3137599B2 (ja) BのC乗のnを法とした剰余を計算する回路
JP2015203859A (ja) 逆数演算器

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20110808

A977 Report on retrieval

Effective date: 20121026

Free format text: JAPANESE INTERMEDIATE CODE: A971007

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20121120

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130118

A02 Decision of refusal

Effective date: 20130219

Free format text: JAPANESE INTERMEDIATE CODE: A02