(57)【要約】【課題】  モンゴメリ逆元を計算する場合に、多倍長精度整数演算に時間が掛かることや、演算結果により、処理の時間差によるリーク情報が問題となる。【解決手段】  従来技術によるモンゴメリ逆元演算方式では、多倍倍長精度整数同士の大小比較を行った後、減算の方向を決定して演算を行っていた。これは、演算の中間結果が常に正の値となることを保証するためであるが、中間結果が負の値になることを容認することで、大小比較を行わず、直接多倍長精度演算を行えるようになり、多倍長精度整数同士の演算回数を削減することができた。【選択図】図１０
2006091086.tif 000002
【特許請求の範囲】
【請求項１】
第１の整数ａと、
前記第１の整数ａと互いに素である第２の整数ｂと、
前記第１の整数ａを法として、ａ＜２ｎを満たす整数ｎとが与えられ、
前記第２の整数ｂの逆元を整数ｂ−１としたとき、
ｒ≡ｂ−１・２ｎ ｍｏｄ ａである第３の整数ｒを計算するモンゴメリ型逆元演算装置を備えた半導体装置において、
ｎビット長の整数値を格納する５つの格納部ｕ、ｖ、ｒ、ｓ、ｗと、
０から２ｎまでの値を表現でき、少なくとも｛log２(n)｝+１ビット長の整数値を格納できる２つの格納部ｋ、ｉとを有し、
ステップ（１）前記格納部ｕ、ｖ、ｒ、ｓ、およびｋにおける格納値の初期状態をそ
れぞれ、ｕ＝ａ、ｖ＝ｂ、ｒ＝０、ｓ＝１、およびｋ＝０とする、
ステップ（２）ｖが０であれば、ステップ（８）の処理を行い、
ｖが０以外の値であれば、ステップ（３）の処理を行う、
ステップ（３）ｕの値が偶数であれば、ｕ＝ｕ／２、ｓ＝２ｓの演算を行なって、ス
テップ（７）の処理に進み、
ｕの値が偶数でなければ、ステップ（４）の処理を行う、
ステップ（４）ｖの値が偶数であれば、ｖ＝ｖ／２、ｒ＝２ｒの演算を行って、ステ
ップ（７）の処理に進み、
ｖの値が偶数でなければ、ステップ（５）の処理を行う、
ステップ（５）ｖの符号が非負の場合は、ｗ＝（ｕ−ｖ）／２の演算を行った後、ステ
ップ(6)の処理を行い、
ｖの符号が負の場合は、ｗ＝（ｕ＋ｖ）／２の演算を行った後、ステッ
プ（６）の処理を行う、
ステップ（６）ｗの符号が負もしくはゼロの場合は、
ｖ＝ｗ、ｒ＝ｒ＋ｓ、ｒ＝２ｒの演算を行なった後、ステップ（７）の
処理に進み、
ｗの符号が正の場合は、ｕ＝ｗ、ｒ＝ｒ＋ｓ、ｒ＝２ｒの演算を行なっ
た後、ステップ(７)の処理に進む、
ステップ（７）ｋ＝ｋ＋１とし、ステップ(２)の処理に進む、
ステップ（８）ｕが１であるか否かを判定し、ｕが１以外の場合は逆元が存在しないと
判定して処理を完了し、
ｕが１以外の場合は、ステップ(９)の処理に進む、
ステップ（９）ｒ＞ａであるか否かを判定し、ｒ＞ａであれば、ｒ＝ｒ−ａとし、ステ
ップ(１０)の処理に進み、
ｒ≦ａであれば、ステップ(１０)の処理に進む、
ステップ（１０）ｉ＝０とし、ステップ(１１)の処理を行う、
ステップ（１１）ｉ＜ｋ−１であるか否かを判定し、ｉ＜ｋ−１の場合は、ステップ(１
４)の処理を行い、
ｉ＜ｋ−１でない場合は、ステップ(１２)の処理を行う、
ステップ（１２）ｒが奇数の場合は、ｒ＝ｒ＋ａとし、ステップ(１３)の処理を行い、
ｒが偶数の場合は、ステップ（１３）の処理を行う、
ステップ（１３）ｒを右シフトしその結果をｒとし、ｉ＝ｉ＋１として、ステップ(１
１)の処理を行う、
ステップ（１４）ｒ＝ａ−ｒとし、ｒを実行結果として処理を終了とする、
上記ステップ（１）乃至（９）の処理を実行する逆元計算部と、
上記ステップ（１０）乃至（１４）の処理を実行する逆元補正部とを有するモンゴメリ型逆元演算装置を備えることを特徴とする半導体装置。
【請求項２】
符号を反転する符号反転部を有し、
前記ステップ（５）において、ｗ＝（ｕ−ｖ）／２とする演算処理に代えて、前記符号反転部によりｖ’＝−ｖを求めた後に、ｗ＝（ｕ＋ｖ’）／２の演算処理を実行するモンゴメリ型逆元演算装置を備えることを特徴とする請求項１記載の半導体装置。
【請求項３】
前記符合反転部は、ｖの最下位ビット以外のすべてのビットを反転することで符号反転を行うモンゴメリ型逆元演算装置を備えることを特徴とする請求項２記載の半導体装置。
【請求項４】
加算部および減算部を有し、前記ステップ（５）において、
ｖの最上位ビットを用いてｖの符号を判定し、前記判定の結果に従い前記加算部と前記減算部のいずれか１つを選択し、
ｖの符号が非負の場合は、ｗ＝（ｕ−ｖ）／２とする演算を行なった後に、ステップ
（６）の処理に進み、
ｖの符号が負の場合は、ｗ＝（ｕ＋ｖ）／２とする演算を行なった後に、ステップ（６）の処理を行うモンゴメリ型逆元演算装置を備えることを特徴とする請求項１記載の半導体装置。
【請求項５】
第１の整数ａと、
前記第１の整数ａと互いに素である第２の整数ｂと、
前記第１の整数ａを法として、ａ＜２ｎを満たす整数ｎとが与えられ、
前記第２の整数ｂの逆元を整数ｂ−１としたとき、
ｒ≡ｂ−１・２ｎ ｍｏｄ ａである第３の整数ｒを計算するモンゴメリ型逆元演算装置を備えた半導体装置において、
ｎビット長の整数値を格納する５つの格納部ｕ、ｖ、ｒ、ｓ、ｗと、
０から２ｎまでの値を表現でき、少なくとも｛log２(n)｝+１ビット長の整数値を格納できる２つの格納部ｋ、ｉとを有し、
ステップ（１）前記格納部ｕ、ｖ、ｒ、ｓ、およびｋにおける格納値の初期状態をそ
れぞれ、ｕ＝ａ、ｖ＝ｂ、ｒ＝０、ｓ＝−１、およびｋ＝０とする、
ステップ（２）ｖが０であれば、ステップ（８）の処理を行い、
ｖが０以外の値であれば、ステップ（３）の処理を行う、
ステップ（３）ｕの値が偶数であれば、ｕ＝ｕ／２、ｓ＝２ｓの演算を行なった後に、
ステップ（７）の処理に進み、
ｕの値が偶数でなければ、ステップ（４）の処理を行う、
ステップ（４）ｖの値が偶数であれば、ｖ＝ｖ／２、ｒ＝２ｒの演算を行なった後に、
ステップ（７）の処理に進み、
ｖの値が偶数でなければ、ステップ（５）の処理を行う、
ステップ（５）ｖの符号が非負の場合は、ｗ＝（ｕ−ｖ）／２の演算を行なった後に、
ステップ(6)の処理を行い、
ｖの符号が負の場合は、ｗ＝（ｕ＋ｖ）／２の演算を行なった後に、ス
テップ（６）の処理を行う、
ステップ（６）ｗの符号が負もしくはゼロの場合は、
ｖ＝ｗとし、ｒ＝ｒ＋ｓ、ｒ＝２ｒの演算を行なった後に、ステップ
（７）の処理に進み、
ｗの符号が正の場合は、ｕ＝ｗ、ｒ＝ｒ＋ｓ、ｒ＝２ｒの演算を行った
後に、ステップ(７)の処理に進む、
ステップ（７）ｋをｋ＋１とし、ステップ(２)の処理に進む、
ステップ（８）ｕが１であるか否かを判定し、ｕが１以外の場合は逆元が存在しないと
判定して処理を完了し、
ｕが１以外の場合は、ステップ(９)の処理に進む、
ステップ（９）ｒ＝ｒ＋ａとし、ステップ（１０）の処理に進む、
ステップ（１０）ｒ＜０であるか否かを判定し、ｒ＜０であれば、ステップ(９)の処理
に進み、
ｒ≧０であれば、ステップ(１１)の処理に進む、
ステップ（１１）ｉ＝０とし、ステップ(１１)の処理を行い、
ステップ（１２）ｉ＜ｋ−１であるか否かを判定し、ｉ＜ｋ−１の場合は、ステップ(１
３)の処理を行い、
ｉ＜ｋ−１でない場合は、ステップ(１５)の処理を行う、
ステップ（１３）ｒが奇数の場合は、ｒ＝ｒ＋ａとし、ステップ(１４)の処理を行い、
ｒが偶数の場合は、ステップ（１４）の処理を行う、
ステップ（１４）ｒ＝ｒ／２、ｉ＝ｉ＋１の演算を行なった後に、ステップ(１２)の処
理を行う、
ステップ（１５）ｒを実行結果として処理を終了する、
上記ステップ（１）乃至（１０）の処理を実行する逆元計算部と、
上記ステップ（１１）乃至（１５）の処理を実行する逆元補正部とを有するモンゴメリ型逆元演算装置を備えることを特徴とする半導体装置。
【請求項６】
奇数の整数の符号反転部を有し、ステップ（５）において、ｗ＝（ｕ−ｖ）／２とする演算処理は、ｖの符号を反転した（−ｖ）とｕの加算処理を行った後に、算術右１ビットシフトを行うことにより、ｗ＝（ｕ＋（−ｖ））／２の演算処理を行うモンゴメリ型逆元演算装置を備えることを特徴とする請求項５に記載の半導体装置。
【請求項７】
多倍長精度の加算部と全ビットを反転させるＮＯＴ演算部とを有し、
ステップ（１）おいて、ｖ＝（ａ−ｂ）とする演算処理の代わりに、ｖ＝ａ＋ＮＯＴ（ｂ）＋１とする演算処理を行うモンゴメリ型逆元演算装置を備えることを特徴とする請求項５に記載の半導体装置。
【請求項８】
第１の整数ａと、
前記第１の整数ａと互いに素である第２の整数ｂと、
前記第１の整数ａを法として、ａ＜２ｎを満たす整数ｎとが与えられ、
前記第２の整数ｂの逆元を整数ｂ−１としたとき、
ｒ≡ｂ−１・２ｎ ｍｏｄ ａである第３の整数ｒを計算するモンゴメリ型逆元演算装置を備えた半導体装置において、
初期状態としてａが設定されるｕレジスタと、
初期状態としてｂが設定されるｖレジスタと、
初期状態として０が設定されるｒレジスタと、
初期状態として１が設定されるｓレジスタと、
初期状態として０が設定されるｋレジスタと、
ｕを右シフト、ｓを左シフト、ｖを右シフト、ｒを左シフトのうち指定されたものを実行するビットシフタと、
ｕレジスタからｖレジスタの内容を減じる処理、ｕレジスタにｖレジスタの内容を加える処理、ｒレジスタにｓレジスタの内容を加える処理、ｋレジスタに１を加える処理、ｒレジスタにａを加える処理、およびｉに１を加える処理のうち指定されたものを実行する算術演算器と、
ｖの最上位ビットの符号が正か否か、ｖが０か否か、ｖが偶数か否か、ｕが偶数か否か、ｖが正か否か、ｕが１か否か、ｒが正か否か、ｒが偶数か否か、およびｉが（ｋ−１）より大きいか否かを判断する判定器と、
前記ビットシフタ、前記演算器、および前記判定器を制御する制御部とを有するモンゴメリ型逆元演算装置を備えることを特徴とする半導体装置。
【請求項９】
第１の整数ａと、
前記第１の整数ａと互いに素である第２の整数ｂと、
前記第１の整数ａを法として、ａ＜２ｎを満たす整数ｎとが与えられ、
前記第２の整数ｂの逆元を整数ｂ−１としたとき、
ｒ≡ｂ−１・２ｎ ｍｏｄ ａである第３の整数ｒを計算するモンゴメリ型逆元演算装置を備えた半導体装置において、
前記整数ｂ、ｋと法ａを入力して逆元Ｘ＝ｂ−１・２ｋ ｍｏｄ ａを求めるモンゴメリ逆元演算部と、
求められた逆元Ｘと法ａを入力して除算結果ｒ＝ｂ−１・２ｎ ｍｏｄ ａを求めるモンゴメリ逆元補正演算手部とを備え、
前記モンゴメリ逆元演算部は、初期状態としてａを保存するｕレジスタと、
初期状態としてｂを保存するｖレジスタと、
ｕおよびｖの演算結果を保存するｗレジスタと、
ｕおよびｖが奇数か否かを判定する判定部とを少なくとも有し、
前記判定部による判定の結果、奇数と判定されたｕおよびｖを保存する前記ｕレジスタおよび前記ｖレジスタと、
前記ｖレジスタの最上位ビットの正負符号を判定し、該判定の結果と前記ｕおよびｖを入力し、前記判定の結果が正の場合には、ｕ＋ｖの演算を実行し、前記判定の結果が負の場合は、ｕ−ｖの演算を実行する算術演算部と、
前記算術演算部からの出力を右シフトするシフタと、
前記シフタからの演算結果を保存するｗレジスタと、
ｗが負の場合には、その値をｕレジスタに保存し、ｗが非負の場合は、ｖレジスタに保存する判別処理を行なうセレクタとを含むモンゴメリ型逆元演算装置を有する半導体装置。
【請求項１０】
前記ｖレジスタの値に対して、ｖの最上位のビットを反転し、ｖの最下位ビット以外のビットとＸＯＲ演算を行なう排他的論理回路とを有し、
前記排他的論理回路の出力を前記算術演算部に入力するモンゴメリ型逆元演算装置を備える請求項９記載の半導体装置。
【請求項１１】
請求項１又は５に記載の半導体装置を搭載することを特徴とするＩＣカード。
【請求項１２】
請求項８又は９に記載の半導体装置を搭載することを特徴とするＩＣカード。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、モンゴメリ逆元演算装置を搭載した半導体装置に係り、特に機密性の高いＩＣカードなどの耐タンパ装置の暗号処理に関するものである。
【背景技術】
【０００２】
暗号処理では、多倍長精度の剰余乗算を含み、処理時間の多くが剰余乗算に費やされている。多倍長精度の剰余乗算を行なう方法としては、計算途上でコストの大きい割り算を計算することなしに剰余乗算を行える、モンゴメリ剰余乗算が用いられることが多い。したがって、逆元を計算する際にも逆元を直接モンゴメリ表現上で計算する方法として、ユークリッド互除法 によるモンゴメリ型逆元（E.Savas、 C. K. Koc、 "The Montgomery Modular Inverse - Revised"、 IEEE Transactions on COMPUTERS、 VOL.49、 NO.7、 JULY 2000）が提案されている。図１、図２は従来手法による拡張ユークリッド互除法を用いたモンゴメリ型逆元計算のアルゴリズムである。
ユークリッド互除法によるモンゴメリ方逆元計算方式では、法をａ、逆元を計算したい値をｂとすると、ｋ＝０、ｐ＝１、ｒ＝０、ｕ＝ａ、ｑ＝０、ｓ＝１、ｖ＝ｂを初期値として、
【０００３】
【数１】
2006091086.tif 000003
【０００４】
【数２】
2006091086.tif 000004
なる関係がなりたつ。最終的にmod aした値のみが必要なので、式(1)、式(2)の両辺のmod a を取ると、
【０００５】
【数３】
2006091086.tif 000005
【０００６】
【数４】
2006091086.tif 000006
となる。
初期値からスタートし、ｕの値が１となるまで繰り返し次の演算を行う。
処理(1)  ｕが偶数であれば、ｕを右シフトし、ｋの値を＋１する。ｋが＋１された後も式(4)が成り立つように、ｓ←２ｓとし、処理(5)に移行する。ｕが偶数で無い場合は、処理(2)へ移行する。
処理(2)  ｖが偶数であれば、ｖを右シフトし、ｋの値を＋１する。ｋが＋１された後も式(3)が成り立つように、ｒ←２ｒとすし、処理(4)に移行する。ｕが偶数で無い場合は、処理(3)へ移行する。
処理(3)  処理(3)にたどり着くのは、ｕ、ｖの両者が奇数の場合のみである。したがって、ｕ、ｖの差を計算すると、必ず偶数となる。まず、ｕ＞ｖの場合は、式(4)から式(3)を引き、両辺を２で割った値で、ｒとｕの値を更新する。具体的には、右辺はｕ←（ｕ−ｖ）／２、左辺はｒ←ｒ＋ｓとして、２で割る代わりに、ｋ←ｋ＋１とする。ｋが＋１された後も、式(4)が成り立つように、ｓ←２ｓとし、処理(5)に移行する。ｕ＞ｖでない場合は、処理(4)へ移行する。
処理(4)  ここにたどり着くのは、ｕ、ｖが共に奇数で、ｕ≦ｖの場合のみである。式(3)から式(4)を引き、両辺を２で割った値で、ｓとｖの値を更新する。具体的には、右辺はｖ←（ｖ−ｕ）／２、左辺はｓ←ｓ＋ｒとして、２で割る代わりに、ｋ←ｋ＋１とする。ｋが＋１された後も、式(3)が成り立つように、ｒ←２ｒとし、処理(5)に移行する。
処理(5)  ｖの値が０より大きい場合は、処理(1)へ移行する。
以上の処理により、ａが奇数で、ａとｂが互いに素である場合は、ｖ＝０になると、必ずｕ＝１となる。処理(1)から処理(4)のいずれかが１回処理されると、ｕもしくはｖの大きさが半分以下になる。しがたって、ａのビット数をｎ、ｂのビット数をｍとすると、最大ｎ＋ｍ＋１回の計算により、ｖ＝０にたどり着く。右辺の計算は、拡張ユークリッド互除法の演算と等価であるので、ａとｂが互いに素でない場合には、１１２０でｕが１以上の値となり、エラーとなる。ｕ＝１では、式(3)は
【０００７】
【数５】
2006091086.tif 000007
となり、両辺に
【０００８】
【数６】
2006091086.tif 000008
を掛けると、
【０００９】
【数７】
2006091086.tif 000009
を得る。モンゴメリ型逆元で求めたいのは、
【００１０】
【数８】
2006091086.tif 000010
であるので、図２に示される処理フローにより、補正を行う。
まず
【００１１】
【数９】
2006091086.tif 000011
を乗じ、
【００１２】
【数１０】
2006091086.tif 000012
を得る。
具体的には、（ｋ−ｎ）回右シフトを行うことにより、式(8)を乗じる。右シフトを行う際に、値が偶数の場合は、最下位ビットが０であるので、右シフトをそのまま行えるが、値が奇数の場合は、最下位ビットが１であるので、右シフトをそのまま行うことはできないため、ａを加算して偶数にした後、右シフトを行う。モンゴメリ逆元補正処理の処理フロー図２に示す。２０２０でループカウンタを設定し、２０３０でループカウンタのチェックを行う。２０４０、２０５０、２０６０の処理は、ｒの値を右シフトするための処理で、右シフト可能なように、奇数の場合は法ａを加算して、偶数に変換する。ｋ−ｎ回右シフトを行う。  最後に、符号を反転させるためにａから式(9)を引き、
【００１３】
【数１１】
2006091086.tif 000013
を得る。図２では、２０８０でこの処理が行われる。
【００１４】
【特許文献１】特開平１０−２０７６８９号公報
【非特許文献１】"The Montgomery Modular Inverse - Revisited"、IEEE Transactions on COMPUTERS、 VOL.49、 NO.7、 JULY 2000
【発明の開示】
【発明が解決しようとする課題】
【００１５】
RSAやECCに代表される公開鍵暗号系では、有限要素体上での演算により暗号処理を行っている。暗号処理では、パラメータのうちの一部を秘密情報として、入力値に対して出力値を計算する。たとえば、RSA暗号では、復号化式
M=Cd mod N
を計算することで、暗号文Cを平文Mに変換できるが、この式のうち、指数のdが秘密情報であり、このdの値が知られてしまうと、RSA暗号では、Nは公開カギの一部であるため、誰でもが復号化式を用いて暗号Cを平文Ｍに戻すことが出来てしまう。また、Nは２つの大きな素数p,qの積であることを利用して、演算を高速化する方法として、CRT(Chinese Remainder Theorem)演算による高速化手法が知られている。CRT演算では、モジュロN上の演算を、モジュロpおよびモジュロqの演算に分けて計算し、最後に２つの演算結果を合成することで、モジュロＮ上の演算と同じ結果を得る。RSAの公開指数をeとすると、秘密指数dは、dp=e-1 mod (p-1) およびdq=e-1 mod (q-1)に分割されて計算される。
【００１６】
暗号文Cをそのまま演算に用いる実装の場合は、多くのビットが0で一部のビットのみが１となるように特別に選んだ暗号文Cを入力した場合、演算時の消費電流を観測することで、秘密指数dpおよびdqの推測が可能となる。逆元の定義と、秘密指数dpがp-1以下であることから、1<k≦e なる自然数kにより、
edp=(p-1)k+1
であり、kpについて解くと、
kp=edp+k-1
となる。Nの値は、素数p,qの積であるので、gcd(edp+k-1,N) をkの値を1からeまで変えながら計算すると、gcdの値が1以外の場合に、pが得られ、qの値も q = N / p から簡単に求まり、その結果
d = e-1 mod (p-1)(q-1)
より秘密鍵が分かってしまう。こうしたアタックを防ぐために、乱数rを用意し、
Cp=C mod p
の代りに、
Cpre mod p
を用いて計算し、最後にrの影響を取り除くために、
r-1 mod p
を乗じるという対策手法がある。r-1 mod p を計算する過程で、pが推定できると、結局は秘密鍵dが演算できてしまう。逆元を演算する方法としては、一般に拡張ユークリッド互除法を用いた手法が使われるが、拡張ユークリッド互助法演算では、演算終了時の内部状態が既知であるため、そこに至るまでの演算過程が既知となった場合、法の値が逆算できてしまう。r-1 mod pの場合、法の値がpは推定できることを意味する。
したがって、拡張ユークリッド互助法、および拡張ユークリッド互助法を拡張したアルゴリズムにおいては、演算の手順を外部から隠すことがセキュリティ上重要となる。
【００１７】
従来技術によるモンゴメリ逆元演算方式では、大きなビット長のｕとｖの大小を比較した後、判定結果によりｕ−ｖもしくはｖ−ｕのいずれか片方を計算する必要がある。ｕとｖの大小比較を行うには、多倍長精度整数同士の減算を行う必要があり、ｕとｖの大小関係判定後、ｕ≦ｖであることが判明した場合は、ｖ−ｕを計算しなおすか、計算結果の符号を反転する必要がある。ｕ−ｖもしくはｕ−ｖを計算するステップでは、ｕとｖの両方が奇数となるため、ｕ−ｖの値は偶数となる。偶数の値の符号反転を行う場合、必ずキャリーの伝播が発生するため、高速に演算することが難しい。また、高速化のためにｕ−ｖを計算し、必要に応じて符号反転処理を行う場合、ｖとｕの大小関係により、演算時間に差が出る。この差がリーク情報となり、秘密情報が推定できる。また、多倍長精度整数の加算器と減算器の両方が必要となる。
【課題を解決するための手段】
【００１８】
従来技術によるモンゴメリ逆元演算方式では、中間結果のｕ、ｖが常に正の値となることを保証するためにｕとｖの大小を比較している。モンゴメリ型逆元演算では、ｕもしくはｖの偶数・奇数が重要な情報となるが、負の値であっても、偶数・奇数の判定は最下位ビットのみで正の値の時と同様に判別できる。したがって、ｖ−ｕは計算せずに、常にｕ−ｖを計算し、結果が負になった場合は、次にｕ−ｖを計算する際に補正を行う。本発明の改良型モンゴメリ逆元演算方式では、ｖの値が負になることを許容することで、ｕとｖの大小判定を、ｖの値の符号のチェック処理に置き換えることができる。符号の判定は、最上位ビットのみを検査することで判定できるため、減算を必要とする大小比較よりも大幅に計算量を削減可能となる。真のｖの値はｖの絶対値と等しい。
また、ｖの最上位ビットの判定後に行われる処理は、判定結果にかかわらずほぼ同一の演算を行うため、リーク情報はきわめて小さくなる。
また、モンゴメリ逆元として、最終的に必要な値は
【００１９】
【数１２】
2006091086.tif 000014
であるが、従来技術によるモンゴメリ逆元演算では、
【００２０】
【数１３】
2006091086.tif 000015
を求めた後に、
【００２１】
【数１４】
2006091086.tif 000016
を計算して、
【００２２】
【数１５】
2006091086.tif 000017
を求めている。ｓ、ｒについても負の値を取ることを容認すると、直接
【００２３】
【数１６】
2006091086.tif 000018
が求められるようになる。
従来技術によるモンゴメリ逆元演算では、ここで得られるｒの値は、
０＜ｒ＜２ａ
であるので、ａ以下になるように、
ａ≦ｒ
である場合は、
ｒ←ｒ−ａ
を計算する。一方、ｓ、ｒに負の値を容認した場合、式(3)、式(4)のｂを(−ｂ)に置き換え、式(3)を
【００２４】
【数１７】
2006091086.tif 000019
とおき、式(4)を
【００２５】
【数１８】
2006091086.tif 000020
とし、式(17)、式(18)が成り立つように、ｒとｓの初期値をそれぞれ、符号を反転し、
ｒ＝−０＝０
ｓ＝−１
とする。ｕ＝１と成ったとき、式(17)は、
【００２６】
【数１９】
2006091086.tif 000021
となるので、ｒの値は、
【００２７】
【数２０】
2006091086.tif 000022
となる。また、ｒやｓの値は、常に直前のｒ、ｓを２倍にした値であるか、ｓとｒを加算した値であるので、必ず負の値になり、値の範囲は、
−２ａ＜ｒ＜０
となる。この値を０≦ｒ＜ａとするには、まず
ｒ←ｒ＋ａ
の補正を行い、さらに補正後も
ｒ＜０
である場合に、
ｒ←ｒ＋ａ
をもう一度計算する。従来技術によるモンゴメリ逆元の最後で、オーバーフローをチェックするための大小判定が必ず必要なのと同様、本発明でも
ｒ←ｒ＋ａ
の補正が必須であるため、計算量的にはほぼ等価であるが、本発明では加算のみで補正が出来るという利点がある。すなわち、ｓ、ｒについて負の値を認める場合、多倍長精度整数演算器としては加算器のみがあれば、逆元計算が実現できる。
【発明の効果】
【００２８】
本発明によれば、リーク情報が少なく、高速なモンゴメリ型逆元演算ハードウエアと、モンゴメリ型逆元演算ソフトウエアが実現できる。
【発明を実施するための最良の形態】
【００２９】
図３は本発明の一実施例を示す。法をａとして、ｂのモンゴメリ型逆元を計算する場合、図３の処理が３１９０に達すると、
【００３０】
【数２１】
2006091086.tif 000023
が得られる。処理の流れは従来技術によるモンゴメリ逆元演算とは、ｕおよびｖが奇数である場合の処理が異なる。図２では、３３００で囲われた処理に相当する。本発明では、常に（ｕ−ｖ）／２を計算し、結果が正の値の場合は、結果をｕに格納し、結果が負の場合は、結果をｖに格納する。常に（ｕ−ｖ）／２を計算するので、ｖの値が正の場合はそのまま（ｕ−ｖ）／２を計算するが、ｖの値が負の場合は、減算ではなく、加算を行う。従来技術によるモンゴメリ逆元演算との違いは、ｖの値に負の値が現れるか否かだけであり、ｖの値が負数になった場合でも、絶対値を計算すれば、従来技術によるモンゴメリ逆元計算で現れる値と同一の値となる。
また、ｖの値自体は、モンゴメリ演算の終了判定のみで用いるので、負の値を格納しても問題にならない。
【００３１】
図３の実施例の３３００の部分をハードウエアで実装した場合の実施例を図５および図７に示す。
【実施例１】
【００３２】
図５は本発明の一実施例であり、図３の処理フローのうちの３３００の処理を回路化した実施例である。図３の３０８０の処理は５０１０に格納されているｖの値の最上位ビットを検査することでｖが負数であるかを判定し、ｕとｖの加算を行うのか、減算を行うのかをＡＬＵ５０４０に伝える。５０４０では、５０３０の信号に従って演算の種類を決定し、５０６０の算術右シフタで右に１ビット算術シフトする。
【００３３】
ここで、算術シフトを用いるのは、シフト対象の値が負の値を取りうるからである。従来技術によるモンゴメリ型逆元演算方法では、図４に示す様（図１の１３００の回路化）、つねにｕ、ｖが正の値になるように制御しているので、単純なロジカルシフタでシフトすることが可能であるが、本発明では負数が入力される可能性があり、符号フラグ（ＭＳＢ）を保存する必要がある。得られた演算結果は、一旦ｕやｖとは異なる記憶手段ｗ（５０７０）に格納される。ｕとｖのいずれにｗの値を格納すべきかは、ｗの値が正の値か、ゼロもしくは負の値であるかに依存する。５０８０のＯＲ回路により、ｗの値がゼロもしくは負の値であるときにはｗをｖ側に保存するように、セレクタ５１００を制御する。
【００３４】
図６に、ｕ＝ｕ−ｖを計算する代わりに、（−ｖ）を計算して、加算器のみでｕ−ｖを計算する際の、（−ｖ）の項を計算する方法に関する説明図を示す。ｖの値は図３の３３００の部分を実行する場合は、常に奇数の値になる。これは、ｖもしくはｕの値が偶数ある間は、３２００の点線で囲われた部分のみが実行され、３３００の点線で囲われた部分は、ｕおよびｖが両方とも奇数になったときに初めて実行されるからである。
【００３５】
奇数の符号反転の処理では、キャリーの伝播は発生しない。符号反転処理では、すべてのビットを反転させ、＋１を行うが、奇数の値のビットをすべて反転させると、最下位ビットは常に０になる。したがって、＋１を行う際にも繰り上がりは発生しない。
【実施例２】
【００３６】
図７は、図３の３３００の部分の処理を図６の符号反転方式を用いて実現したモンゴメリ逆元計算装置の実施例である。７０３０で、最上位のビットを反転し、その結果を７０４０の排他的論理回路により、ｖの最下位ビット以外のビットとｘｏｒを演算する。この回路の意図は、ｖの値が負の場合は、ｖの値をそのまま加算器７０６０に送り、ｕとの和を計算することで、（ｕ−ｖ）を計算し、ｖの値が非負の場合は、７０３０の出力は１となるため、７０４０の排他的論理回路により、ｖの最下位ビット以外のビットを反転させる。非負の値のｖの符号を反転し、−ｖとして加算器７０６０に送り、ｕとの和を計算することで、（ｕ−ｖ）を計算することになる。（ｕ−ｖ）の計算結果は算術右シフタ７０８０により１ビット右に算術シフトされ、（ｕ−ｖ）／２がｗに格納される。
【００３７】
図８は、図１および図２に示される従来技術によるモンゴメリ逆元演算方式により、ａ＝２３を法として、ｂ＝１７に対して、ビット長ｎ＝５のモンゴメリ逆元を求める際の、中間結果を示す。図８の８０１０は、図１および図２の符号に相当する。最終的な結果は、ｒに格納され、
【００３８】
【数２２】
2006091086.tif 000024
が得られる。
【００３９】
図９は、本発明の実施例である、図３および図２の処理フローにより、ａ＝２３を法として、ｂ＝１７に対して、ビット長ｎ＝５のモンゴメリ逆元を求める際の、中間結果である。従来技術によるモンゴメリ逆元計算の図８と比べて、ｖの値が負になる事を除いて、同じ中間結果および最終結果が得られる。
【実施例３】
【００４０】
図１０及び図１１は、本発明の実施例のフローを示す。実施例１との違いは、１００２０で初期値として、ｓ＝０の代わりにｓ＝−１を代入している点である。
その結果、図１０のフローが１０１７０に達したときには、ｒには、
ｋ＞ｎであり、最終的に
【００４１】
【数２３】
2006091086.tif 000025
を得るためには、図１１に示される改良版モンゴメリ型逆元補正処理を行う。図１１に示される改良版モンゴメリ逆元補正処理は、図２の従来技術によるモンゴメリ逆元補正処理とは、最後に結果の符合を反転するための２０８０の処理がない点が異なる。
【００４２】
図１２は、図１０、図１１のフローにしたがってａ＝２３を法として、ｂ＝１７に対して、ビット長ｎ＝５のモンゴメリ逆元を求める際の、中間結果である。２０８０に相当する処理なしに、最終結果が得られている。
【００４３】
図１０、図１１の実施例の特徴は、多倍長精度整数演算が加算器のみで済む点が特徴である。したがって、ソフトウエアで多倍長演算をインプリメントする場合、演算の種類が１種類であるので、同じルーチンで演算が可能となり、たとえばリーク情報から現在演算に用いているプログラムのコードのアドレスを攻撃者が区別できる場合でも、演算の種類によるリークが生じない。また、ハードウエア実装を行う場合でも、多倍長精度整数の演算器が加算器のみで済むため、ハードウエアの規模が小さくなる。
【００４４】
図１３（Ａ）−（Ｃ）は従来技術の一実施例であり、図１の処理フローを回路化した実施例である。１０３０のフローに従い、以下の処理をｖが０より大きい間、行う。まず、図１３（Ａ）において、ｕの最下位ビットが０であれば、セレクタ１３０４０はｕの値を選択し、セレクタ１３０７０はセレクタ１３０４０の出力を選択するように設定され、右シフタ１３０８０により１／２に変換された値が、セレクタ１３１３０をとおり、ｕ記憶手段１３０２０に格納され、図１３（Ｃ）に示すように、ｓの値は、セレクタ１３１５０によりｓの値がセレクトされ、左シフタ１３１６０を通り、セレクタ１３１２０を通って、ｓ記憶手段１３２３０に格納される。
【００４５】
図１３（Ａ）において、ｖの最下位ビットが０の場合は、セレクタ１３０４０はｖの値を選択し、セレクタ１３０７０はセレクタ１３０４０の出力を選択するように設定され、右シフタ１３０８０により１／２に変換された値が、セレクタ１３１３０をとおり、ｖ記憶手段１３０１０に格納され、図１３（Ｃ）に示すように、ｒの値は、セレクタ１３１５０によりｓの値がセレクトされ、左シフタ１３１６０を通り、セレクタ１３１１０を通って、ｒ記憶手段１３２２０に格納される。図１３（Ａ）において、ｕおよびｖの最下位ビットがいずれも１の場合は、比較回路１３０３０により比較され、ｕ＞ｖの場合は、セレクタ１３０５０はｕを選択し、セレクタ１３０６０はｖを選択し、減算回路１３１７０はｕ−ｖを計算し、セレクタ１３０７０が減算回路１３１７０の出力を選択することで、右シフタ１３０８０は（ｕ−ｖ）／２を出力し、セレクタ１３１３０は出力としてｕ記憶手段１３０２０側を選択し、ｕ記憶手段１３０２０のｕの値が更新され、図１３（Ｃ）に示すように、加算器１３１４０によりｒ＋ｓが計算され、左シフタ１３１６０により２倍された後、セレクタ１３１１０を通じて、ｒ記憶手段１３２２０のｒの値を更新したのち、セレクタ１３１５０がｓの値を選択し、左シフタ１３１６０により値が２倍され、セレクタ１３１２０を通じて、ｓ記憶手段１３２３０のｓの値が更新される。
【００４６】
図１３（Ａ）において、ｕ≦ｖの場合は、セレクタ１３０５０はｖを選択し、セレクタ１３０６０はｕを選択し、減算回路１３１７０はｖ−ｕを計算し、セレクタ１３０７０は減算回路１３１７０の出力を選択することで、右シフタ１３０８０は（ｖ−ｕ）／２を出力し、セレクタ１３１３０は出力としてｖ記憶手段１３０１０側が選択し、ｖ記憶手段１３０１０のｖの値が更新され、図１３（Ｃ）に示すように、加算器１３１４０によりｒ＋ｓが計算され、左シフタ１３１６０により２倍された後、セレクタ１３１２０を通じて、ｓ記憶手段１３２３０のｓの値を更新したのち、セレクタ１３１５０がｒの値を選択し、左シフタ１３１６０により値が２倍され、セレクタ１３１１０を通じて、ｒ記憶手段の１３２２０ｓの値が更新される。その後、図１３（Ｂ）に示すように、加算器１３１００によりｋ記憶手段１３０９０に格納されたｋの値に１が加算されて、ｋ記憶手段１３０９０に格納される。
【００４７】
図１４は、本発明になるモンゴメリ逆演算装置が内蔵されたＩＣカード用チップ１４０２０を搭載したＩＣカード１４０１０を示す。
【００４８】
図１５は、図１４に示すＩＣカード用チップのシステムブロック図１５０１０の一例である。なお、このシステムブロックは、ＣＰＵ１５０２０と、記憶手段であるＲＯＭ１５０３０、ＲＡＭ１５０４０およびＥＥＰＲＯＭ１５０５０と、剰余乗算コプロセッサ１５０６０並びにシリアル通信回路１５０７０から構成されている。
【図面の簡単な説明】
【００４９】
【図１】従来技術によるモンゴメリ型逆元計算手順を示す図。
【図２】従来技術によるモンゴメリ型逆元計算で用いられる補正処理手順を示す図。
【図３】本発明のモンゴメリ型逆元計算手順の一実施例を示す図。
【図４】従来技術によるモンゴメリ型逆元計算回路図。
【図５】本発明のモンゴメリ型逆元計算回路の一実施例を示す図。
【図６】符号反転方式の説明図。
【図７】本発明のモンゴメリ型逆元計算回路の一実施例を示す図。
【図８】従来技術によるモンゴメリ型逆元計算の内部変数の推移図。
【図９】本発明のモンゴメリ型逆元計算の内部変数の推移図。
【図１０】本発明のモンゴメリ型逆元計算手順の一実施例を示す図。
【図１１】本発明のモンゴメリ型逆元計算手順の一実施例を示す図。
【図１２】本発明のモンゴメリ型逆元計算の内部変数の推移図。
【図１３（Ａ）】従来技術によるモンゴメリ型逆元計算回路のｕ、ｖ計算回路図。
【図１３（Ｂ）】従来技術によるモンゴメリ型逆元計算回路のｋ計算回路図。
【図１３（Ｃ）】従来技術によるモンゴメリ型逆元計算回路のｒ、ｓ計算回路図。
【図１４】ＩＣカードを示す図。
【図１５】ＩＣカード用チップのシステムブロック図。
【符号の説明】
【００５０】
１０１０…モンゴメリ逆元演算処理開始ポイント、
１０２０…内部変数初期化処理、
１０３０…終了判定処理、
１０４０…ｕの偶数判定、
１０５０…ｕが偶数の場合のｕおよびｓの更新処理、
１０６０…ｖの偶数判定、
１０７０…ｖが偶数の場合のｖおよびｒの更新処理、
１０８０…ｕとｖの大小判定、
１０９０…ｕ＞ｖの場合のｕ、ｒ、ｓの更新処理、
１１００…ｕ≦ｖの場合のｖ、ｓ、ｒの更新処理、
１１１０…２のベキの更新、
１１２０…逆元の存在判定、
１１３０…エラー終了ポイント、
１１４０…オーバーフロー補正の必要性判定、
１１５０…オーバーフロー補正処理、
１１６０…処理終了ポイント、
２０１０…モンゴメリ逆元補正処理開始ポイント、
２０２０…ループカウンタ初期化、
２０３０…ループ終了判定、
２０４０…奇数判定、
２０５０…奇数から偶数への補正処理、
２０６０…結果を２で割る処理、
２０７０…ループカウンタ更新、
２０８０…符号反転処理、
２０９０…処理終了ポイント、
３０１０…改良版モンゴメリ逆元処理開始ポイント、
３０２０…内部変数初期化処理、
３０３０…逆元計算判定処理、
３０４０…ｕの偶数判定、
３０５０…ｕが偶数の場合のｕおよびｓの更新処理、
３０６０…ｖの偶数判定、
３０７０…ｖが偶数の場合のｖおよびｒの更新処理、
３０８０…ｖの符号判定、
３０９０…ｖが非負の場合のｗの計算処理、
３１００…ｖが負の場合のｗの計算処理、
３１１０…ｗの符号判定処理、
３１２０…ｗが正の値の場合のｕ、ｒ、ｓの更新処理、
３１３０…ｗがゼロもしくは負の値の場合のｖ、ｒ、ｓの更新処理、
３１４０…２のベキの更新、
３１５０…逆元の存在判定、
３１６０…エラー終了ポイント
３１７０…オーバーフロー補正の必要性判定、
３１８０…オーバーフロー補正処理、
３１９０…処理終了ポイント、
４０１０…ｖ記憶手段、
４０２０…ｕ記憶手段、
４０３０…キャリーフラグ出力つき減算演算回路、
４０４０…キャリーフラグ信号、
４０５０,４０６０…セレクタ、
４０７０…減算演算回路、
４０８０…右シフタ
４０９０…セレクタ、
５０１０…ｖ記憶手段、
５０２０…ｕ記憶手段、
５０３０…最上位ビット、
５０４０…算術演算回路、
５０５０…ゼロフラグ信号、
５０６０…算術右シフタ、
５０８０…ＯＲ回路、
５０９０…選択信号、
５１００…セレクタ、
６０１０…元データ、
６０２０…最下位ビット、
６０３０…全ビット反転データ、
６０４０…最下位ビット、
６０５０…符号反転データ、
６０６０…最下位ビット、
７０１０…ｖ記憶手段、
７０２０…ｕ記憶手段、
７０３０…インバータ、
７０４０…排他論理和、
７０５０…最下位ビット
７０６０…加算器、
７０７０…ゼロフラグ信号、
７０８０…算術右シフタ、
７０９０…ｗ記憶手段、
７１００…最上位ビット、
７１１０…ＯＲ回路、
７１２０…選択信号、
７１３０…セレクタ、
８０１０…実行ステップ位置、
９０１０…実行ステップ位置、
１００１０…改良版モンゴメリ逆元処理開始ポイント、
１００２０…内部変数初期化処理、
１００３０…逆元計算判定処理、
１００４０…ｕの偶数判定、
１００５０…ｕが偶数の場合のｕおよびｓの更新処理、
１００６０…ｖの偶数判定、
１００７０…ｖが偶数の場合のｖおよびｒの更新処理、
１００８０…ｖの符号判定、
１００９０…ｖが非負の場合のｗの計算処理、
１０１００…ｖが負の場合のｗの計算処理、
１０１１０…ｗの符号判定処理、
１０１２０…ｗが正の値の場合のｕ、ｒ、ｓの更新処理、
１０１３０…ｗがゼロもしくは負の値の場合のｖ、ｒ、ｓの更新処理、
１０１４０…２のベキの更新、
１０１５０…逆元の存在判定、
１０１６０…エラー終了ポイント、
１０１７０…負数の補正処理、
１０１８０…負数の補正処理終了判定、
１０１９０…処理終了ポイント、
１１０１０…モンゴメリ逆元補正処理開始ポイント、
１１０２０…ループカウンタ初期化、
１１０３０…ループ終了判定、
１１０４０…奇数判定、
１１０５０…奇数から偶数への補正処理、
１１０６０…結果を２で割る処理、
１１０７０…ループカウンタ更新、
１１０９０…処理終了ポイント、
１２０１０…実行ステップ位置、
１３０１０…ｖ記憶手段、
１３０２０…ｕ記憶手段、
１３０３０…大小比較手段、
１３０４０,１３０５０,１３０６０,１３０７０…セレクタ、
１３０８０…右シフタ、
１３０９０…ｋ記憶手段、
１３１００…加算器、
１３１１０,１３１２０,１３１３０,１３１５０…セレクタ、
１３１４０…加算器、
１３１６０…左シフタ、
１３１７０…減算器、
１３２２０…ｒ記憶手段、
１３２３０…ｓ記憶手段、
１４０１０…ＩＣカード、
１４０２０,１５０１０…ＩＣカードチップ、
１５０２０…ＣＰＵ、
１５０３０…ＲＯＭ、
１５０４０…ＲＡＭ、
１５０５０…ＥＥＰＲＯＭ、
１５０６０…剰余乗算コプロセッサ、
１５０７０…シリアル通信回路。
【図１】
2006091086.tif 000026
【図２】
2006091086.tif 000027
【図３】
2006091086.tif 000028
【図４】
2006091086.tif 000029
【図５】
2006091086.tif 000030
【図６】
2006091086.tif 000031
【図７】
2006091086.tif 000032
【図８】
2006091086.tif 000033
【図９】
2006091086.tif 000034
【図１０】
2006091086.tif 000035
【図１１】
2006091086.tif 000036
【図１２】
2006091086.tif 000037
【図１３（Ａ）】
2006091086.tif 000038
【図１３（Ｂ）】
2006091086.tif 000039
【図１３（Ｃ）】
2006091086.tif 000040
【図１４】
2006091086.tif 000041
【図１５】
2006091086.tif 000042