(57)【要約】剰余乗算を計算するための装置には、ルックアヘッドアルゴリズムを用いて乗算シフト値（ｓm）を得るために乗数のけたを調べるための手段（１００）を含む。さらに、正の中間結果シフト値を決定する手段（１０４）を含む。さらに、中間結果シフト値（ｓz）と乗算シフト値（ｓm）との差である被乗数シフト値（ｓc）を計算する手段（１０６）を含む。前の反復工程と被乗数とから得られた中間結果を、適切なシフト量（ｓcおよびｓz）だけシフトする（１０８）。これにより、シフトされた値との３オペランド加算（１１２）を、場合によってはルックアヘッドパラメータ（ｖnおよびｖc）を用いて実行する。大きい場合の多い乗数シフト値（ｓm）によってシフタの大きさが決まらないとき、固定化されたモジューロに基づく中間結果と被乗数とがシフトすることは、効率的なシフタの使用をもたらす。
2006511833.tif 000002
【特許請求の範囲】
【請求項１】
複数の反復工程を有する反復方法を用いて、モジューロ（Ｎ）に基づいて乗数（Ｍ）と被乗数（Ｃ）との乗算を計算するための装置であって、
乗算ルックアヘッドシフト値（ｓm）を得るために、乗算ルックアヘッドアルゴリズムを用いて現在の反復工程の乗数のけたを調べるための手段（１００）と、
より上位のビットに中間結果シフト値（ｓz）だけシフトされた、現在の反復工程の先に行われた反復工程から供給された中間結果が、最上位のビットを有し、上記ビットの有意性が、先に行われた反復工程から供給された中間結果の最上位のビットよりも、モジューロの最上位のビット（２０６）の有意性に近いように、ゼロよりも大きな上記中間結果シフト値（ｓz）を算出するための手段（１０４）と、
中間結果シフト値（ｓz）と乗算ルックアヘッドシフト値（ｓm）との差である被乗数シフト値（ｓc）を計算するための手段（１０６）と、
現在の反復工程の中間結果を得るために、中間結果シフト値（ｓz）にしたがってシフトされた中間結果、被乗数シフト値（ｓc）にしたがってシフトされた被乗数（Ｃ）およびモジューロを用いて、３オペランド演算を実行するための手段（１０８、１１２）とを備えた、装置。
【請求項２】
さらに、上記モジューロ（Ｎ）を格納するためのモジューロレジスタ（２００）を備え、上記モジューロの最上位のビット（２０６）がモジューロレジスタ（Ｎ）の所定のレジスタ位置に存在するように、上記モジューロが上記レジスタ内に配置されている、請求項１に記載の装置。
【請求項３】
上記所定のレジスタ位置が、上記モジューロレジスタ（２００）の最上位レジスタ位置である、請求項２に記載の装置。
【請求項４】
上記モジューロレジスタ（２００）は、上記モジューロ（Ｎ）のけた数よりも多くの記憶位置を有するように、上記モジューロレジスタの大きさが規定され、上記モジューロの最下位のビット（２０８）よりも低い価数を有する上記モジューロレジスタ（Ｎ）の記憶位置がアンダーフローバッファ（２１０）である、請求項２または３に記載の装置。
【請求項５】
上記モジューロ（Ｎ）を格納するためのモジューロレジスタ（２００）と、反復工程の中間結果を格納するための中間結果レジスタ（２０４）と、被乗数（Ｃ）を格納するための被乗数レジスタ（Ｃ）とを備え、
上記モジューロは、上記モジューロレジスタに固定的に配置されており、
上記中間結果および上記被乗数は、それらの各レジスタ内にて、シフトするための各手段（１０８ａ、１０８ｂ）によってシフト可能となっている、請求項１〜４のいずれか１項に記載の装置。
【請求項６】
上記中間結果および被乗数をシフトするための手段（１０８）は、
上記中間結果をより上位の価数に最大シフト量（Ｚｓｈ）までシフトするために、および、上記被乗数を、より上位または下位の価数に最大被乗数シフト量（Ｃｓｈ）までシフトするために形成されている、請求項１〜５のいずれか１項に記載の装置。
【請求項７】
上記最大中間結果シフト量（Ｚｓｈ）は、最大被乗数シフト量（Ｃｓｈ）よりも大きいものである、請求項６に記載の装置。
【請求項８】
上記中間結果シフト値（ｓz）を決定するための手段（１０４）は、
上記中間結果シフト値（ｓz）を、先に行われた反復工程のシフトされた中間結果の最上位のビットの価数がモジューロの最上位のビット（２０６）の価数と同じであるような大きさにするために形成されている、請求項１〜７のいずれか１項に記載の装置。
【請求項９】
上記中間結果シフト値（ｓz）を決定するための手段（１０４）は、
上記中間結果シフト値（ｓz）を、最大中間結果シフト量（Ｚｓｈ）、および先に行われた反復工程の中間結果をシフトする必要がある値の最小値に等しくして、
先に行われた反復工程における値がシフトされた中間結果の、最上位のビットの有意性が、モジューロの最上位のビット（２０６）と同じになっているように形成されている、請求項７に記載の装置。
【請求項１０】
上記中間結果シフト値を算出するための手段（１０４）は、
中間結果シフト値が最大中間結果シフト量（Ｚｓｈ）によって制限されている場合に、上記３オペランド加算を実行するための手段（１１２）が上記反復工程において上記モジューロの考慮を省かせる還元パラメータ（ｖn）を決定するように形成されている、請求項８または９に記載の装置。
【請求項１１】
上記被乗数シフト値（ｓc）を計算するための手段（１０６）は、
被乗数シフト値（ｓc）を最大被乗数シフト量（Ｃｓｈ）に制限するために、および、制限した場合に、上記中間結果シフト値が（ｓm＋最大被乗数シフト量（Ｃｓｈ））と同じであるように、手段（１０４）によって決定された中間結果シフト値（ｓz）を調節するために、および、上記のように制限した場合に、この反復工程において手段（１１２）がモジューロを考慮せず３オペランド加算を実行させる還元パラメータを決定するように形成されている、請求項６〜１０のいずれか１項に記載の装置。
【請求項１２】
複数の反復工程を有する反復方法を用いて、モジューロ（Ｎ）に基づいて乗数（Ｍ）と被乗数（Ｃ）との乗算を計算するための方法であって、
乗算ルックアヘッドシフト値（ｓm）を得るために、乗算ルックアヘッドアルゴリズムを用いて現在の反復工程の乗数のけたを調べるステップ（１００）と、
より上位のビットに中間結果シフト値（ｓz）だけシフトされた、現在の反復工程の先に行われた反復工程から供給された中間結果が、最上位のビットを有し、上記ビットの有意性が、先に行われた反復工程から供給された中間結果の最上位のビットよりも、モジューロの最上位のビット（２０６）の有意性に近いように、ゼロよりも大きな中間結果シフト値（ｓz）を決定する（１０４）ステップと、
中間結果シフト値（ｓz）と乗算ルックアヘッドシフト値（ｓm）との差である被乗数シフト値（ｓc）を計算する（１０６）ステップと、
現在の反復工程の中間結果を得るために、中間結果シフト値（ｓz）にしたがってシフトされた中間結果と、被乗数シフト値（ｓc）にしたがってシフトされた被乗数（Ｃ）およびモジューロとを用いて、３オペランド演算を実行する（１０８、１１２）ステップとを有する、方法。
【請求項１３】
上記乗数（Ｍ）、被乗数（Ｃ）、およびモジューロ（Ｎ）が、暗号計算のパラメータである場合、上記暗号計算の範囲内で実行する、請求項１２に記載の方法。
【請求項１４】
請求項１２または１３に記載の方法を実行するためのプログラムコードを有し、
上記プログラムコードがコンピュータにおいて実行可能に記載されている、コンピュータプログラム。
【発明の詳細な説明】
【発明の詳細な説明】
【０００１】
本発明は、暗号化に関するものであり、特に、乗数、被乗数、および、モジューロ（Modul、法）が暗号計算のパラメータである場合、暗号計算の範囲内のモジューロに基づいて、乗数と被乗数との乗算を計算するための技術思想に関するものである。
【０００２】
暗号化は、剰余演算（modulare Arithmetik）にとって、重要な適用例の一つである。暗号化に適した主なアルゴリズムとして、ＲＳＡアルゴリズムが知られている。このＲＳＡアルゴリズムは、以下に示す、べき乗剰余（modularen Exponentiation）に基づいている。
Ｃ＝Ｍdｍｏｄ（Ｎ）
ここで、Ｃは、暗号化されたメッセージであり、Ｍは、暗号化されていないメッセージ（平文）であり、ｄは、秘密鍵であり、Ｎはモジューロである。モジューロＮは、通常、２つの素数ｐおよび素数ｑを互いに乗算することによって生成される。べき乗剰余は、公知の自乗乗算アルゴリズムを用いて各乗算に分解される。最後に、指数ｄは二乗にまで分解され、これにより、べき乗剰余を複数の剰余乗算（Modulare Multiplikationen）に分解できる。べき乗剰余を計算によって効果的に実行できるように、べき乗剰余は、剰余乗算に分解される。この剰余乗算は、その後、剰余加算（modulare Additionen）に分解される。
【０００３】
ＤＥ  ３６３１９９２は、乗算ルックアヘッド方法（Multiplikations-Vorausschau-Verfahrens）および還元ルックアヘッド方法（Reduktions-Vorausschau-Verfahren）を用いてべき乗剰余を高速化できる、暗号化方法について開示している。ＺＤＮ方法とも呼ばれる、このＤＥ  ３６３１９９２  Ｃ２に記載された方法については、図１８に基づいて詳述する。アルゴリズムの開始工程９００の後、全体変数Ｍ、Ｃ、および、Ｎを初期化して、次の剰余乗算を計算する。
Ｚ＝Ｍ＊ＣｍｏｄＮ
ここで、Ｍは乗数であり、Ｃは被乗数である。Ｚは剰余乗算の結果であり、Ｎはモジューロである。
【０００４】
続いて、様々な局所変数を初期化する。これについてはここで詳述する必要はない。次に、２つのルックアヘッド方法を用いる。乗算ルックアヘッド方法ＧＥＮ＿ＭＵＬＴ＿ＬＡでは、様々なルックアヘッド規則を用いて、乗算シフト値ｓzおよび乗算ルックアヘッドパラメータａを計算する（９１０）。続いて、Ｚレジスタの現在の内容が、ｓzけたまで左シフト演算を受ける。
【０００５】
それとほぼ同時に、還元シフト値ＳNおよび還元パラメータｂを計算するために、還元ルックアヘッド方法ＧＥＮ＿Ｍｏｄ＿ＬＡ（９３０）を実行する。次に、工程９４０では、シフトされたモジューロ値Ｎ´を形成するために、モジューロレジスタ（つまりＮ）の現在の内容を、ｓNけたまで左または右にシフトする。ＺＤＮ方法のこの中央３オペランド演算は、工程９５０において開始される。ここで、中間結果Ｚ´を、工程９２０の後で、乗算ルックアヘッドパラメータａによって乗算される被乗数Ｃと、還元ルックアヘッドパラメータｂによって乗算されるシフトされたモジューロＮ´とに加算する。現在の状況に応じて、このルックアヘッドパラメータａおよびｂは、＋１、０、または、−１の値を有することができる。
【０００６】
通常は、乗算ルックアヘッドパラメータａの値が＋１であり、還元ルックアヘッドパラメータｂの値が−１である。これを用いて、シフトされた中間結果Ｚ´に被乗数Ｃが加算され、そこから、シフトされたモジューロＮ´が減算される。乗算ルックアヘッド方法を、それぞれの左シフトのプリセット値以上に認めると、つまり、ｓzがその最大許容値（ｋとも示される）よりも大きいと、ａは０になる。ａが０であり、Ｚ´が、剰余還元がすでに行われている（つまり、シフトされたモジューロの減算がすでに行われている）ために非常に小さい（特に、シフトされたモジューロＮ´よりも小さい）場合、還元を行う必要はない。したがって、パラメータｂは０である。
【０００７】
工程９１０〜９５０を、被乗数の全てのけたまで処理するまで（つまり、ｍが０になるまで）実行する。また、これらの工程を、パラメータｎが０になるまで実行する。このパラメータｎは、シフトされたモジューロＮ´が元のモジューロＮよりも大きいかどうかを示すものである。あるいは、上記パラメータは、被乗数の全てのけたがすでに処理されているにもかかわらず、さらに他の還元工程をＺからモジューロを減算することにより実行する必要があるかどうかを示すものである。
【０００８】
結局、Ｚが０よりも小さいかどうかが算定される。Ｚが０よりも小さい場合、最後の還元に達するために、モジューロＮをＺに加算する必要がある。これにより、ようやく、剰余乗算の正確な結果Ｚが得られる。工程９６０において、ＺＤＮ方法を用いた剰余乗算が終了される。
【０００９】
工程９１０において乗算ルックアヘッドアルゴリズムを用いて計算される乗算シフト値ｓzおよび乗算パラメータａは、乗数のトポロジー（Topologie）と、ＤＥ  ３６３１９９２  Ｃ２に記載された、使用したルックアヘッド規則とによって得られる。
【００１０】
また、還元シフト値ｓNおよび還元パラメータｂを、同様にＤＥ  ３６３１９９２  Ｃ２に記載されているように、Ｚレジスタの現在の内容を値（２／３）×Ｎと比較することにより決定する。ＺＤＮ方法の名称（ＺＤＮ＝Ｎの３分の２）は、この比較に基づいたものである。
【００１１】
図１８に示したようなＺＤＮ方法は、剰余乗算を３オペランド加算（図１８のブロック９５０）に帰着させる。ここで、演算時間効率を上げるために、乗算ルックアヘッド方法、および、それに伴って生じる還元ルックアヘッド方法が使用される。これにより、演算時間に関して、モンゴメリ還元法（Montgomery-Reduktion）よりも効果が得られる。
【００１２】
次に、図１９に基づいて、図１８のブロック９３０において実行される還元ルックアヘッド方法について詳述する。初めに、ブロック１０００では、局所変数（つまり、還元ルックアヘッドパラメータｂおよび還元シフト値ｓN）の記憶位置の確保を実行する。ブロック１０１０では、還元シフト値ｓNをゼロに初期化する。続いて、ブロック１０２０では、モジューロＮの（２／３）に相当する値ＺＤＮを計算する。この、ブロック１０２０において決定される値は、暗号コプロセッサのそれぞれのレジスタ（ＺＤＮレジスタ）に格納される。
【００１３】
次に、ブロック１０３０では、変数ｎが０であるか、または、シフト値ｓNが−ｋであるかを算定する。ｋは、ハードウェアによって指定された最大シフト値を規定した値である。ファーストランでは、ブロック１０３０に「いいえ」と答える。これにより、ブロック１０４０では、パラメータｎが減少し、ブロック１０６０では、還元シフト値も１まで減少する。次に、ブロック１０８０では、変数ＺＤＮが新たに割り当てられ、それを半分の値にする。この値は、ＺＤＮレジスタに存在する値を右にシフトすることにより、容易に得られる。次に、ブロック１１００では、現在の中間結果の絶対値がＺＤＮレジスタに存在する値よりも大きいかどうかを確認する。
【００１４】
ブロック１１００のこの比較演算は、還元ルックアヘッド方法の中央演算である。質問に「はい」と答えると、反復が終了し、ブロック１１２０に示したように、還元ルックアヘッドパラメータｂが割り当てられる。これに対して、ブロック１１００において答える質問に「いいえ」と答えた場合、ブロック１０３０において現在の値ｎおよびｓNを調べるために、反復的に元の位置にジャンプして戻る。ブロック１０３０において「はい」と答えた場合は、ブロック１１４０にジャンプする。このブロックでは、還元パラメータｎがゼロに設定される。
【００１５】
これにより、図１８のブロック９５０に示した３オペランド演算では、モジューロを加算または減算しないようになる。つまり、中間結果Ｚが、剰余還元が必要ではない程に小さかったということである。次に、ブロック１１６０では、変数ｎが新たに割り当てられる。ここで、ブロック１１８０では、図１８のブロック９４０に必要である還元シフト値ｓNを計算する。これにより、モジューロの左シフトを実行することにより、シフトされたモジューロを得ることができる。
【００１６】
最後に、ブロック１２００、１２２０、および、１２４０では、レジスタのオーバーシュートが確実に実行されないようにＮレジスタの現在の割当てを調べるために、他の変数ＭＡＸおよびｃｕｒ＿ｋに関してｎおよびｋの現在の値を調べる。この詳細は、ＤＥ  ３６３１９９２  Ｃ２に詳述されているが、本発明では重要ではない。
【００１７】
また、図１８および図１９に示したアルゴリズムを、図１０に示したように、ハードウェアを用いて実行してもよい。ブロック９５０において３オペランド演算を行うために、演算ユニット７００（図１０ではＡＵと示されている）が必要である。このユニットが、被乗数用のレジスタＣ７１０と、モジューロ用のレジスタＮ７２０と、剰余乗算の現在の中間結果用のレジスタＺ７３０とに接続されている。図１０から、さらに、３オペランド演算の結果がフィードバック矢印７４０を介してＺレジスタ７３０に格納されることが分かる。
【００１８】
さらに、図１０から、レジスタが互いに接続されていることが分かる。図１９のブロック１０２０において計算された値ＺＤＮを、それぞれのＺＤＮレジスタ７５０に格納する必要がある。このＺＤＮの比較、および／または、図１９に示した反復ループを、さらに、ＺＤＮの比較を行うための各制御論理回路７６０によって繰り返し制御する。
【００１９】
したがって、Ｚ：＝Ｍ×Ｃ  ｍｏｄ  Ｎを計算するためのＺＤＮアルゴリズムは、主に、以下の２つの演算を行う。
１．レジスタＺおよびＮのためのシフト値ｓzおよびｓiの計算。これにより、以下の方程式が満たされる。
（２／３）Ｎ×２-si＜｜ｚ｜≦４／３Ｎ×２-si、および、
２．３オペランドの合計の計算。
Ｚ：＝２szＺ＋ａＣ＋ｂ×２sz-siＮ
乗算ルックアヘッドパラメータａおよび還元ルックアヘッドパラメータｂは、公知のように、−１、０、および、＋１の値をとることができる。
【００２０】
また、中間結果Ｚ、被乗数Ｃ、および、モジューロＮが、長大数であることに留意されたい。この長大数とは、けたおよび／またはビットの数が５１２よりも十分に大きくてもよく、２０４８けたまで有することができる数である。
【００２１】
剰余乗算を実行するための、上記の知られた方法は、上記式を少し書き換えた以下の３オペランド加算を有している。
Ｎ：＝Ｎ＊２sn
Ｚ：＝Ｚ＊２sz＋Ｖc＊Ｃ＋Ｖn＊Ｎ
上記の方程式では、ｓzは、公知のブース法（つまり、乗算ルックアヘッド方法）から計算されるような、中間結果Ｚのシフト値を示している。また、ｓnは、上記したように計算されるＮのシフト値を示している。
【００２２】
実際に実行するに当たり、単一のビットシフトを長大数レジスタにおいて最大シフト値まで達成できる長大数をシフトするためのシフタを供給するので、シフト値ｓzおよびｓnは、限りなく大きくなくてよい。したがって、公知のＺＤＮ方法にしたがって動作する暗号化プロセッサでは、０〜５のシフト値ｓzを用いることができる。モジューロのシフトには、−３〜＋３のシフト値が使用される。
【００２３】
これらの限られたシフト値についての不都合は、例えば、前の反復工程から中間結果Ｚをシフトするためのシフト値が、現在の反復工程では小さすぎることが多いという点にある。つまり、例えば５よりも大きいシフト値を実現できるような乗数が得られたことを、乗算ルックアヘッドアルゴリズムが確認する。また、つまり、ルックアヘッド規則に応じて、例えば５以上並んだゼロが乗数に存在しているということである。乗数Ｍが１０２４ビット、またはさらに、２０４８ビットを有していることを考えると、この状況は非常に頻繁に生じる。
【００２４】
シフト値が制限されているので、公知のＺＤＮ方法は、「特殊な場合」に、３オペランド演算を正確には最大シフト値で実行し、乗算ルックアヘッドパラメータｖCを０に設定することにより（つまり、この工程では被乗数を加算せずに）対処している。次の反復工程では、新たな乗算シフト値が計算される。この乗算シフト値は、最大シフト値ｓzmaxよりも大きいと、それによって再び制限される。これにより、再び、被乗数が加算されなくなり（つまり、シフトされた中間結果およびシフトされたモジューロのみが、モジューロのための符号を考慮して加算される）、「３オペランド加算」ができなくなる（degenerierten）。
【００２５】
上記の考察から、このような特殊な場合に、乗算ルックアヘッドアルゴリズムにおいて大きなシフトが認められるなら、このシフトを、シフト量ｓzmaxが制限されているので、最大効率にて変換できない、ということが分かる。
【００２６】
したがって、公知のＺＤＮ方法は、乗算ルックアヘッド方法の全ての場合において、効率向上を利用できない。効率を向上するには、公知のＺＤＮ方法の場合、シフタを増加させる必要がある。しかし、シフタの増加によって、特にチップカード用の集積回路では、チップ面積を拡大する必要がある。これにより、チップカード製造者によって提供される基準チップ面積が狭いために、上記拡大を許容できなくなり、および／または、著しいコスト高が生じてしまう。
【００２７】
この点については、特に暗号化プロセッサの分野には、非常に競争の激しい市場が存在することに留意されたい。この市場では、価格のわずかな差によって、ある提供者が生き延び、他の提供者は生き延びられない。なぜなら、チップカードは通常量産されるので、チップカード用のプロセッサは大量生産品であるからである。
【００２８】
他方、チップカードプロセッサに対する、かなりな程度のセキュリティ要求が存在している。なぜなら、チップカードを使用するのは、通常ユーザであるが、さらに、攻撃されるチップカードプロセッサを完全にコントロールできる攻撃者も、チップカードを入手できる。したがって、暗号化アルゴリズムのセキュリティ要求はますます高くなる。このことは、例えば、ＲＳＡアルゴリズムのセキュリティをさらに上げるために、オペランドが例えば１０２４ビットの長さだけではなく、２０４８ビットの長さである必要がある、ということである。
【００２９】
しかしながら、チップカードの製造者によって、プロセッサに必要な全ての面積は予め設定されている。つまり、チップカードプロセッサの製造者は、事前に設定された面積に、演算装置および所要面積の多いメモリを配置する必要がある。他方、ますますコストのかかる暗号化アルゴリズムには、多くのワーキングメモリも必要である。したがって、演算装置の拡大により、例えばより大きなシフタを設置することになるが、上述の理由によって、そのような設置は多くの場合許容され得ない。つまり、演算装置（例えばシフタ）に多くのチップ面を付与すると、それによって、より小さなワーキングメモリを、事前設定されたチップ面に実現しなくてはならなくなる。これにより、再び、非常に複雑な特定の暗号化アルゴリズムを全く実施できず、および／または、上記アルゴリズムを競争相手の製品によって実施および実行するよりも、計算速度が遅くなる。
【００３０】
本発明の目的は、乗算の計算に効果的なコンセプトを提示することにある。
【００３１】
この目的は、請求項１の装置、請求項１２の方法、または、請求項１４のコンピュータプログラムによって達成される。
【００３２】
本発明は、公知のＺＤＮ方法において固定されていた被乗数Ｃの代わりに、モジューロが、モジューロレジスタの所定位置に保持されており、および／または、被乗数Ｃがモジューロに基づいてシフトされるので、現在のシフタ資源をよりよく利用できるという知見に基づくものである。これにより、以下に詳述するように、乗算ルックアヘッドアルゴリズムによって計算されたシフト値（以下にｓmと示す）が、パラメータのシフトをすぐには導かず他のシフト値に結合されて、差を用いて、上記被乗数Ｃのシフト値を導くことができる。つまり、公知のブース法によって決定された乗算シフト値ｓmが、公知のＺＤＮ方法において行われるように、中間結果をこの量までシフトするために直接用いられず、上記乗算シフト値は、本発明にしたがって可変とした被乗数Ｃがそのレジスタにてシフトされるシフト量までのシフト量により還元されるように、シフタを用いて確実に実現されるものである。
【００３３】
本発明にしたがった新しいアルゴリズムが、反復工程において実行される３オペランド加算を以下のように計算する。
Ｃ：＝Ｃ＊２SC
Ｚ：＝Ｚ＊２SZ＋ＶC＊Ｃ＋Ｖn＊Ｎ
被乗数シフト値ｓcを、以下の方程式にしたがって、中間結果シフト値と乗算ルックアヘッドシフト値との差から計算する。
ｓc＝ｓz−ｓm
中間結果シフト値ｓzが以下で説明するように常に０よりも大きいので、被乗数シフト値ｓcは量的に乗算シフト値ｓmよりもますます小さくなる。これにより、公知のブース法により生じる大きくなる可能性がある乗算ルックアヘッドシフト値ｓmは、回路に備えられたシフタに対する要求に対して、完全に支配的にはならず、中間結果シフト値ｓzの値により、量的な意味で、より小さな影響力しか持たなくなる。
【００３４】
現在のシフタ資源を備えた演算装置については、本発明の方法により、剰余乗算段階において２つのシフタ全体を使用し、還元段階では、長い方のシフタを使用することができる。したがって、この短い方のシフタと長い方のシフタとの分割は、現在の使用において、剰余乗算の終わりにおいて、還元をできる限り速く実行する（つまり、長い方のシフタが必要である）という上記実際上の要求に対応するものとなっている。
【００３５】
さらに、本発明の方法により、現在のシフタ容量において、乗算ルックアヘッドアルゴリズムのシフト値をより大きく取り扱うことができる。これにより、より少数の特殊な場合が生じても、乗算ルックアヘッドアルゴリズムの性能をできる限りよく実行できる。
【００３６】
本発明の装置は、乗算ルックアヘッドシフト値ｓmを得るために、乗算ルックアヘッドアルゴリズムを用いて現在の反復工程の乗数のけたを調べるための装置を含んでいる。さらに、０よりも大きい中間結果シフト値ｓzを決定するための装置が備えられている。これにより、より上位のビットに中間結果シフト値ｓzだけシフトされた、現在の反復工程の先に行われた先行の反復工程から供給された中間結果が、最上位のビットを有するようになる。このビットの有意性（本発明の効果への有意性）は、先行の反復工程から供給された中間結果の最上位のビットよりも、モジューロの最上位のビットに近い。さらに、中間結果シフト値ｓzと乗算ルックアヘッドシフト値ｓmとの差である被乗数シフト値ｓcを計算するための装置が、備えられている。さらに、シフトされた中間結果とシフトされた被乗数とを得るために、モジューロに基づいて、中間結果を中間結果シフト値によりシフトし、かつ、被乗数を被乗数シフト値ｓcによりシフトするための装置が、備えられている。
【００３７】
現在の反復工程の中間結果を得るために、シフトされた中間結果と、シフトされた被乗数と、モジューロとを用いて、３オペランド加算を実行する。
【００３８】
中間結果シフト値ｓzの決定には、いくつかの方法がある。最適の特性（例えば最大処理速度）は、シフトされた中間結果のＭＳＢをモジューロのＭＳＢと同じにすることにより、良好な還元が得られるように（つまり、現在の中間結果が３オペランド演算の後で量的に可能な限り小さくなるように）、中間結果が常に最大にシフトされることによって、達成される。これらと比べて効率が低減される、近似的な（概略的で簡素化された）方法は、中間結果シフト値ｓzが最大にて選択されず、大まかな推定によって近似的方法にて選択されるか、または、例えば中間結果シフタの長さによって制限されて選択されるかによって達成される。基本的に、中間結果シフト値ｓzが０よりも大きく選択されると、前述したように性能向上が達成される。つまり、正確には、被乗数シフト値ｓcは量的に乗算ルックアヘッドシフト値ｓmよりも小さくなる。これにより、値ｓmは、もはや完全には支配的ではなくなり、シフタの大きさに対し影響しなくなる。
【００３９】
好ましい実施形態では、モジューロは、モジューロレジスタにおいて、左寄せされて配置されている。できる限り大きな容量のアンダーフローバッファが確保されていることにより、被乗数が現在のレジスタの最大量までアンダーフローバッファ内にシフトできる。
【００４０】
さらに、本発明の好ましい実施形態では、ＤＥ  １０１１１０８７  Ａ１に開示されているように、モジューロ変換（Modultransformation）が使用される。
【００４１】
他の効率改善のために、本発明の実施形態では、現在の工程の本来の中間結果よりも速く得られる近似的な中間結果を計算するために、あたかも２オペランド加算にスリム化されて、ある程度縮小されたような３オペランド加算を、本来の３オペランド加算と同時に実行することが好ましい。現在の工程の正確な中間結果を計算すると同時に、上記現在の工程の近似的な中間結果に基づいて、次の工程に係るルックアヘッドパラメータの計算を実行できる。したがって、３オペランド加算を実行するためのコストのかかる大きな演算装置が現在の工程の中間結果を計算した時点で、すでに次の工程のルックアヘッドパラメータが存在していることが好ましい。これにより、３オペランド演算装置は、最近（直前）の反復工程が完了した直後に、現在の反復工程の正確な中間結果の計算を開始できる。これにより、現在の工程の正確な中間結果の計算と並行して、次の工程に係るルックアヘッドパラメータの計算は、近似的な３オペランド加算の「スリム化版」である近似的なオペランド加算に基づいて実行される。
【００４２】
また、本発明の他の実施形態では、モジューロ変換と次の反復工程に係るルックアヘッドパラメータの並行計算とを組み合わせることが好ましい。なぜなら、この場合、モジューロ変換によって特定され、前述したモジューロの上位ビットに基づいた近似的な中間結果の計算は、非常に簡略化されており、したがって著しく高速化される。
【００４３】
本発明の好ましい実施形態について添付の図を参照して以下で詳しく説明する。
【００４４】
図１に、複数の反復工程を含む反復方法を使用して、モジューロＮに基づいて、乗数Ｍと被乗数Ｃとの乗算を計算するための、本発明の装置のブロック図を示す。ただし、乗数、被乗数、モジューロは、整数または多項式であってもよい。
【００４５】
図１８に関連して説明されたように、乗算方法は、特に暗号化計算では、原則的に同一に実施される複数の反復工程を使用して乗算が計算されるという点で反復性のある方法である。図１に、反復工程の実施に含まれていてもよい手段および／またはサブ工程を示す。
【００４６】
詳しく説明すると、図１に記載の本発明の装置は、乗算ルックアヘッドアルゴリズムを使用して、現在の反復工程の乗数Ｍのけたを調べる手段１００を含む。手段１００は、乗算ルックアヘッドシフト値ｓmを手段１００の出力部１０２にて取得するようになっている。
【００４７】
本発明の好ましい実施形態では、乗算ルックアヘッドアルゴリズムは、公知のブース法のアルゴリズムである。公知のブース法のアルゴリズムは、複数のルックアヘッド規則を実施する場合、乗算ルックアヘッドシフト値ｓmの他に、乗算ルックアヘッドパラメータｖcも生成する。しかしながら、乗算ルックアヘッドアルゴリズムが、ただ１つまたは制限された数のルックアヘッド規則を、（充分に大きなシフタが存在していることを前提として）符号パラメータｖcが常に「＋１」に等しいように使用していれば、ルックアヘッドパラメータを正確に計算する必要はない。しかしながら、他のルックアヘッド規則では、符号パラメータｖcが−１に等しい場合もある。大きすぎる乗算ルックアヘッドシフト値ｓmが取得されていれば、乗算ルックアヘッドパラメータｖcが０に等しい場合もある。
【００４８】
図１に示す装置は、さらに、中間結果シフト値ｓzを算出するための手段１０４を備えている。手段１０４は、原則的に、０よりも大きな中間結果シフト値を算出するように設計されている。中間結果シフト値により、処理される中間結果は、中間結果シフト値ｓzによりシフトされると、最上位のビット（ＭＳＢ）を有することとなる。最上位のビットの有意性（重み）は、先に行われた反復工程の中間結果の最上位のビットよりも、モジューロの最上位のビットの有意性に近い。言い換えれば、このことは、より上位のビットがレジスタ内の左側に配置されており、下位のビットがレジスタ内の右側に配置されている場合は、中間結果シフト値ｓzによって、中間結果が少なくとも１けた左へシフトされることとなる。
【００４９】
ここでは、最上位のビット（ＭＳＢ）が、レジスタ内の有用情報を有するビットであることに留意されたい。ある数がレジスタ長の最大値よりも小さく、かつ、上記数がレジスタ内の右側に配置されていれば、上記数はレジスタ内の何処かに配置されている最上位のビットを有することになる。この数のＭＳＢの上側には、レジスタ内にて０がある可能性がある。しかしながら、これらの０は重要な情報を有していない。したがって、「最上位のビット」は、数のほかのビットと比べて最上位の有意性を有しており、かつ、有用情報も有している数のビットと理解される。
【００５０】
具体的な実施形態では、中間結果シフト値ｓzを決定するための手段１０４が、シフトされた中間結果のＭＳＢがモジューロのＭＳＢと同じ重みを有するように、中間結果をできる限り左へシフトするように設計されている。この場合は、モジューロ減算（すなわち、還元）により、３オペランド加算後の新しい中間結果は著しく小さくなる。このような状態が、得ようと努力なされてきたものである。なぜなら、このとき、還元は常に良好に、迅速に、効率的になされるからである。以上のように、中間結果シフト値を算出するための手段１０４は、中間シフト値ｓzを０よりも大きく生成すれば、既に効果的である。
【００５１】
本発明の装置は、さらに、中間結果シフト値ｓzと乗算ルックアヘッドシフト値ｓmとの間の差に等しい被乗数シフト値ｓcを計算するための手段１０６を備えている。図１のブロック１０６に記載されている等式から、既に、中間結果シフト値が０よりも大きい場合、乗算シフト値ｓmは、完全に支配的なものではなくなり、シフタ寸法の決定に対する影響力がもはやない。このような乗算ルックアヘッドシフト値ｓmは、ｓzが０よりも大きければ、既に量的に還元されていることが分かる。
【００５２】
図１に示す装置は、さらに、中間結果シフト値ｓzにより中間結果Ｚをシフトするための手段１０８を備えている。中間結果シフト値ｓzは、手段１０４から、その出力１１０を介して、手段１０６と手段１０８との双方に供給される。さらに、シフトのための手段は、シフトされた被乗数を取得するために、被乗数Ｃを被乗数シフト値ｓcだけシフトするように設計されている。
【００５３】
さらに、図１に示す装置は、シフトされた中間結果、シフトされた被乗数およびモジューロを使用して３オペランド加算を実施するための手段１１２を備えている。上記法は、現在の反復工程の中間結果を取得するために、固定されている。現在の反復工程の中間結果は、３オペランド加算手段１１２の出力１１４から出力される。
【００５４】
ここでは、シフト手段１０８と３オペランド加算手段１１２とが、必ずしも別々の手段として実施されていなくてもよく、オペランドのシフト（すなわち、オペランドに２Sを掛ける乗算）は、必ずしもハードウェアによって実施される必要はなく、すなわち、現在のレジスタシフトによって実施される必要はなく、原則的に、２Sの乗算は、ソフトウェアによって行われてもよいということに留意されたい。この場合は、各手段１０８、１１２は、乗算および後続の加算との機能を図１のブロック１１２に示す等式に基づいて実施する単一の手段にまとめられていてもよい。
【００５５】
図２に、３つの関連レジスタ、つまり、モジューロレジスタＮ２００、被乗数レジスタＣ２０２および中間結果レジスタＺ２０４を概略的に示す。
【００５６】
被乗数レジスタ２０２の被乗数をシフトする場合は、モジューロＮが、モジューロレジスタ２００に対し固定的（内容や位置が変化せず）に書き込まれる。さらに、モジューロＮは、モジューロレジスタ２００へ左寄せして書き込まれることが好ましい。その結果、モジューロＮの最上位のビット（ＭＳＢ）は、最上位のレジスタけたに書き込まれる。この最上位のレジスタけたは、図２では、一番左に記載されており、２０６の符号が付けられている。
【００５７】
隣接するレジスタセルには、モジューロＮのビットＭＳＢ−１、ＭＳＢ−２、ＭＳＢ−３などが、モジューロの最下位のビット（ＬＳＢ）２０８まで続く。モジューロＮは、例えばＲＳＡ計算で使用される正規のモジューロ（法）、または、以下で説明されるような好ましくは変換されたモジューロのどちらかであって、反復計算の間中、モジューロレジスタ２００中に固定されている。
【００５８】
これに対して、被乗数Ｃおよび中間結果Ｚは、シフト手段または対応するシフタを使用することにより、レジスタ付近の二重矢印によって示すように、レジスタ２０２・２０４中を移動できる。図２は、モジューロＮに基づいて乗数Ｍと被乗数Ｃとの乗算を計算するときの任意の反復工程での典型的な状況を示している。図２から分かるように、被乗数Ｃは、既に、５ビット右へ、つまり、アンダーフローバッファ２１０へシフトされている。さらに、ちょうど中間結果レジスタは、現在の中間結果を、３ビットだけ上位へシフトできるように規定されていることが理解される。
【００５９】
図２に示す実施形態では、モジューロＮは、常に左寄せしてモジューロレジスタ２００に配置されている。モジューロＮのビット長に応じて、モジューロＮのＬＳＢ２０８は、モジューロレジスタのどこに規定してもよい。したがって、モジューロレジスタにあるモジューロＮのＬＳＢ２０８の下側のビット２１０は、被乗数Ｃが移動してもよいアンダーフローバッファを規定する。
【００６０】
以下では、被乗数Ｃのシフトの方法を、被乗数Ｃが一定であった公知のＺＤＮアルゴリズムと比較する。従来のＺＤＮ方法では、２つのバイナリ数の工程ごとの乗算と同じように、原則的に、オーソドックス数学に基づいた処理がなされる。この処理では、各反復工程で効率的な還元を行うために、中間結果が、乗算ルックアヘッドシフト値だけ左へシフトされ、次に、モジューロが同じく上位へシフトされる。一方、本発明の方法では、あたかも、コンマの位置がレジスタ内を移動するようになっている。コンマの移動は、コンマを規定する被乗数がシフトされることによって生じる。
【００６１】
被乗数シフトがシフトされる好ましい実施形態では、中間結果レジスタ２０４の値Ｚが、常にできる限り高くシフトされる。その結果、還元を生じさせることができる。図２に示す場合では、シフト値ｓz２１８（３ビット）が、次の反復工程のために選択された場合、その結果として、Ｚレジスタ２０４にある現在のＺ値のＭＳＢ２２０は、その有意性が、モジューロのＭＳＢ２０６に等しくなる。したがって、レジスタＺからモジューロＮが減算される場合は、上記両者間の差は比較的小さいであろう。なぜなら、上記両者の数は、ほほ等しい大きさだからである。ここで、正の数を用いても、負の数と同じように良好に計算を行えることに留意されたい。
【００６２】
次の工程では、図１に関連して説明されたとおり、どの乗算ルックアヘッドシフト値ｓmが受け容れられるかを見出すために、現在の反復工程の乗数Ｍのけたが調べられる。したがって、図１のブロック１０６に記載のように、被乗数レジスタ２０２のシフト値ｓcはｓz−ｓmから決定される。
【００６３】
例えば乗算ルックアヘッドアルゴリズムが、乗算シフト値ｓmが「３」であることを決定する場合は、つまり、乗算シフト値ｓmがｓz２１８に等しい場合は、０に等しい被乗数シフト値ｓcが計算される。この結果を公知のＺＤＮアルゴリズムと比較すると、この場合は、ｓzがブース法のアルゴリズムによって許容されるように選択されていることが分かる。したがって、コンマシフト、すなわち、被乗数Ｃのシフトを行う必要はない。
【００６４】
以下に、ｓmがｓzよりも小さく、つまり、ｓmが図２に示す例ではたった２であり、一方でｓz２１８は３に等しい場合について説明する。公知のブース法のアルゴリズムと比較して、このことは、中間結果が、実際には１ビットだけ上位へシフトされすぎていることを意味している。つまり、ＺはＣとの加算のためには因数２だけ、つまり、１レジスタけた分のシフトだけ大きすぎる。これを補償するため、本発明の新しい方法では、被乗数Ｃが同じく１ビットだけ上位へシフトされる。言い換えると、Ｃおよび／またはＣのＬＳＢ２１２によって規定されているコンマは、選択されたＺシフト値ｓz２１８に合うように調節される。Ｃが１ビットだけまたはｓcの値だけ上位へシフトされた後、ＣとＺとの関係は再び明らになっており、図１のブロック１１２ではエラーの無い加算が行われる。
【００６５】
さらに、ｓzができる限り大きく選択されていることにより、図１のブロック１１２の３オペランド加算では、効率的な還元も行われる。なぜなら、Ｚは、ｓz２１８だけシフトされることにより既にＮの桁とほぼ同じになっているからであり、また、さらに被乗数Ｃも加算されているから、その結果、各数Ｎ、Ｚはいずれにせよ類似した桁になっている。
【００６６】
ｓmがｓzよりも大きい場合について以下で説明する。説明してきたとおり、ｓz２１８を最大値に選択することが有利である。図２の３つのビットよりも大きなｓzの値は不可能である。なぜなら、ＺのＭＳＢ２２０はレジスタ２０４から「抜け落ちる」からである。
【００６７】
このとき、ブース法のアルゴリズムが、ｓzよりも大きなｓmを決定するならば、図２に示す反復方法では、中間結果値が、上位へ十分にシフトされず、例えば小さすぎる１ビットだけ上位へシフトされる。このことは、対抗処置を講じなければ、３オペランド加算のためには、ＺがＣよりも小さすぎることを意味している。この状態を改善するため、被乗数Ｃも、ｓzとｓmとの間の差に基づいて例えば１ビットだけ右へシフトする。その結果、ＣとＺとの関係がふたたび一致する。この場合も、同じく、良好な還元が行われる。なぜなら、Ｚは、できる限り上位へシフトされているので、Ｎの桁になっており、その結果、ＺとＮとの間の差は同じく比較的小さな数であり、すなわち、図１のブロック１１２の３オペランド加算の範囲内で、良好な還元が行われる。
【００６８】
したがって、図２に示す方法は、既存のシフタ資源の利用に関して２つの重要な利点を有している。図１のシフト手段１０８に実施できるようなＺおよびＣをシフトするためのこのようなシフタを図３に示す。この図では（schematisch）シフタが、Ｚをシフトするための第１シフタ部分１０８ａと、Ｃをシフトするための第２シフタ部分１０８ｂとを備えている。
【００６９】
第１シフタ部分１０８ａは、正の方向だけにシフトできるシフタである。第１シフタ部分１０８ａは、Ｚをシフトするために使用される。このことから、ＺのＬＳＢ２１４を、アンダーフローバッファ２１０へは決してシフトできないことが分かる。
【００７０】
しかしながら、図２は、ＣのＬＳＢ２１２およびＺのＬＳＢ２１４は同じ価数を有しているので、３オペランド加算の後の状態を示すものである。ＣのＬＳＢ２１２およびＺのＬＳＢ２１４が同じ価数を有している理由は、３オペランド加算では、ＬＳＢ２１４の算定が、この３オペランド加算の前にＺがどれだけ上位へシフトされていたかに関係なく、図１のブロック１１２の全ての関連するオペランドのＬＳＢによって行われるからである。Ｎは一定であり、Ｃを下位へシフトできるので、Ｃは、３オペランド加算の後に、ＺのＬＳＢを常に算定する。
【００７１】
Ｚが常に、既述のように、ｓz２１８だけ左へシフトされるならば、ＣおよびＺのＬＳＢ２１２・２１４は、３オペランド加算の後に再び一致するように、３オペランド加算の前に変化するであろう。ｓmは常に正なので、乗数が一度も逆方向へ処理されず、つまり、下位のビットからより上位のビットへ処理され、ｓzは常に正なので、ｓcの量は常にｓzよりも小さい。その結果、ＺのＬＳＢは、常にＣによって決定される。
【００７２】
したがって、＋５だけシフトできる大きなシフタ１０８ａを、ｓzのために使用する。その結果、この大きなシフト値によって、Ｚは常にできる限りＮの近くへシフトされる。ここで、図２に示す状況は、必ずしも典型的な状況ではないことに留意されたい。ＺおよびＮが、先行する３オペランド加算でほぼ同じ大きさであれば、結果としてＭＳＢ２２０が、左へ最大限シフトされているにもかかわらず、モジューロＮのＭＳＢ２０６よりも小さな価数を常に有していることも同じ程度でありえる。
【００７３】
この状況を、できる限り稀なものとするために、一方向だけにシフトできる大きなシフタ、つまりシフタ１０８ａを、Ｚをシフトするために使用する。被乗数Ｃを２方向にシフトする必要があるので、これらの被乗数のためには、上位（つまり、左）へのシフト能力、および、下位（つまり、右）へのシフト能力を有するシフタが使用される。
【００７４】
しかしながら、ｓcは常に正の数の差となるので、シフタを非常に大きく設計する必要はない。したがって、−３から＋３のシフト能力を有するシフタで充分なことが証明された。
【００７５】
既存のシフタ容量は、したがって、被乗数Ｃを変数として有する、本発明の新しい方法によって効率的に利用される。なぜなら、乗算シフト値ｓm（この値は大きい傾向がある）を直接シフトに使用する必要は決してないからであり、また、それゆえに大きなシフタを、還元目的で（つまり、ＺをＮにできるだけ近くシフトするために）使用できるからである。その結果、良好な還元が行われる。
【００７６】
従来のＺＤＮ方法および被乗数Ｃを変数として有する新しい方法の反復工程の実施形態では、乗算よりも還元が常に少し「遅れを取って」いることが証明された。
【００７７】
このことは、従来のＺＤＮ方法では、乗数Ｍのけた全体を処理終了後、従来の方法でシフトされたモジューロＮは、元来のモジューロよりも依然として大きいということによって顕著になる。言い換えれば、従来のＺＤＮ方法では、現在のモジューロの一部が、依然としてオーバーフローバッファに存在していた。したがって、さらに数回の剰余オペランド加算を実施する必要があった。余りオペランド加算では、乗数けたを調べる必要は無くなるが、モジューロのＭＳＢが、オーバーフローバッファから再び出て行き、計算の開始時と同じ、つまり、レジスタ内で第１反復工程の前と同じけたになるまで、依然として非常に多くの３オペランド加算を、シフトされたモジューロ（右へシフトされたモジューロ）によって実施する必要があった。したがって、乗算ルックアヘッドアルゴリズムは、典型的には、既に、還元ルックアヘッドアルゴリズムの数工程前に「終了」している。
【００７８】
本発明に係る新しい方法でも、このような状況は生じる。しかしながら、このような状況は、モジューロがオーバーフローバッファにあるということということによっては顕著にならない。新しい方法では、モジューロが固定されており、従来のようにシフトできない。すべての乗数けたが処理され、ＬＳＢ２１２が依然としてモジューロＬＳＢ２０８よりも下位であることが確認される場合は、同じく、さらに数回の最終的なオペランド加算を、乗数けたは既に処理されてしまっている乗数けたを用いずに、実施する必要がある。乗数けたは既に処理されてしまっているので、被乗数Ｃも必要なくなる。
【００７９】
したがって、全ての乗数けたが処理されてしまっている場合は、ＬＳＢ２０８によって定義される「ゼロ線」をシフトする必要がなくなる。全ての乗数けたが処理されてしまっている限り、被乗数Ｃはもはや処理とは無関係なものとなっている。したがって、全ての乗数けたが処理されてしまっている場合は、一工程において常に３のシフト値だけ左へシフトする小さなシフタ１０８ｂを使用して、被乗数ＣのＬＳＢ２１２を上位へシフトする必要がなくなる。その代わり、全ての乗数けたが処理されてしまった時点で、被乗数は、処理とは無関係なものとなっており、必要なくなる。
【００８０】
しかしながら、最終的な還元には、中間結果レジスタＺのＬＳＢ２１４がアンダーフローバッファ２１０のどこにあるかが注目される。こうして、被乗数ＣのＬＳＢ２１２は、依然として乗数けたが存在している最後の３オペランド加算で、中間結果レジスタＺのＬＳＢ２１４の有意性を決定するものである。
【００８１】
最終的な還元は、ＬＳＢ２１４が、モジューロレジスタ２００のＬＳＢ２０８によって定義される「ゼロ線」上に来るまで実施される。しかしながら、このとき、Ｚ値を中間結果レジスタ２０４中の「上位へシフトすること」は、図３に示す実施形態では常に５つのシフト値を許容する大きなシフタ１０８ａによって行われる。
【００８２】
したがって、最終的な還元は、大きな工程で行われ、一方、公知の方法では、これを小さなシフタによって行う必要があった。なぜなら、モジューロＮを再びその元来の位置へ戻す必要があったからである。これに対し、本発明の新しい方法では、モジューロＮが固定されており、一方、コンマは、被乗数Ｃによって対処される。
【００８３】
しかしながら、この被乗数Ｃは、最終的な還元のためには無関係なものとなっている。なぜなら、乗数けたが存在しなくなるからである。したがって、乗算ルックアヘッドパラメータｖcは、いずれにせよ０である。その結果、「機能停止された（degenerated）」最終的なオペランド加算でＺを上位へシフトするために、５以下のシフトを許容する大きなシフタＺを常に使用してもよい。
【００８４】
要するに、図３に示すシフト手段の一例は、Ｚのための５シフタ、および、Ｃのための−３，...，＋３シフタによって、長さ８（！）のブース法の仮想シフタ、および、長さ５の還元シフタを提供する。
【００８５】
本発明の新しい反復乗算方法に関しては、以下に図１２から図１７ｂまでを参照して詳しく説明される。これらの図には、本発明の好ましい実施形態が、並行して説明される擬似コードで示されている。図示されたこの実施形態では、被乗数Ｃをシフトする新しい方法が、モジューロ変換の方法と、乗算ルックアヘッドパラメータおよび還元ルックアヘッドパラメータを並行して計算するための新しい方法とに組み合わされている。
【００８６】
図４に、モジューロに基づいて被乗数と乗数との乗算を、複数の反復工程を有する反復方法によって計算するための装置のブロック図を示す。なお、上記複数の反復工程は、先行する反復工程と現在の反復工程とを含んでいる。図４に示す装置は、被乗数Ｃをシフトできる新しい方法（図１に示す）のルックアヘッドパラメータｓm・ｓc・ｓzの計算を加速するため、および、図１８のブロック９２０・９４０のルックアヘッドパラメータｓz・ｓn、つまり、公知のＺＤＮ方法のルックアヘッドパラメータを計算するために使用できる。
【００８７】
ここでは、状況によって、ルックアヘッドパラメータは、シフト値であり、または、被乗数および法のための符号であることに、留意されたい。なお、上記符号は、利用可能なシフタおよび利用可能なアンダーフローバッファの大きさに関しては、ルックアヘッド規則およびシフト値の状況に応じて算定されており、以下で説明するように＋、−、または０でもよい。
【００８８】
図４に示す、反復方法を加速して実施するための装置は、正確な３オペランド加算を実施するための手段４００を備えている。なお、正確な３オペランド加算は、先行する反復工程のために、先行の中間結果ＺvorつまりＺpre４０２と、モジューロＮ４０４と、被乗数Ｚ４０６と、図４の概略図では配線４０８を介して供給される先行のルックアヘッドパラメータとを使用して実施される。
【００８９】
正確な３オペランド加算を計算するための手段４００は、現在の反復工程ＺaktまたはＺcurのための正確な中間結果（図４では４１０で示す）を提供する。図４に示す装置は、さらに、近似化されたオペランド加算を実施するための手段４１２を備えている。なお、近似化されたオペランド加算は、先行する反復工程のために、先行する中間結果Ｚvorと、モジューロＮ４０４と、図４では配線４０８を介して供給される先行するルックアヘッドパラメータの少なくとも一部とを使用して、現在の反復工程の近似化された中間結果（図４ではＺakt，approxで示す）を取得するために実施される。
【００９０】
現在の反復工程の近似化された中間結果４１４は、正確な中間結果Ｚakt４１０に相当していないが、正確な中間結果Ｚakt４１０の推定または予測である。この中間結果４１４と、乗数Ｍ４１６とを使用して、現在のルックアヘッドパラメータが計算され、配線４１８を介して出力される。既述のように、現在のルックアヘッドパラメータ（つまり、現在の近似化された中間結果４１４および乗数４１６）を計算するための手段４１７は、現在のルックアヘッドパラメータ４１８を計算するために使用される。
【００９１】
図４に示す装置は、さらに有効である。なぜなら、正確な３オペランド加算を実施するための手段が、以下のように設計されているからである。すなわち、正確な３オペランド加算を、現在の反復工程で、現在の反復工程の正確な中間結果４１０を使用して、すなわち、モジューロＮ４０４と、被乗数４０６と、手段４１７から配線４１８を介して供給される現在のルックアヘッドパラメータとを使用して実施するように設計されているからである。
【００９２】
この状況を、図４に概略的に示す。図４には、現在の反復工程の正確な３オペランド加算を計算するための手段４００’と、現在の反復工程の近似化されたオペランド加算を計算するための手段４１２’と、その後続のルックアヘッドパラメータを計算するための手段４１７’とが示されている。詳細には、手段４１２’は、現在の中間結果４１０とモジューロＮとを使用して、近似化されたオペランド加算を実施するように設計されており、手段４００’で正確に計算され、４２０で示されるその後続の工程の中間結果Ｚを、Ｚnach、approx４２２として推定するためのものである。
【００９３】
次に、値４２２を使用して、その後続のルックアヘッドパラメータを、少なくとも乗数Ｍ４１６を用いて計算する。ただし、各反復工程のために、正確な３オペランド加算を計算するための固有の手段、近似化されたオペランド加算を計算するための固有の手段、または、現在のルックアヘッドパラメータを計算するための固有の手段を設けず、暗号化プロセッサが、正確な３オペランド加算を計算するための単一の手段４００、近似化されたオペランド加算を計算するための単一の手段、および、近似化された中間結果に基づいてルックアヘッドパラメータを計算するための単一の手段を備えていることが当然好ましい。この場合、図４から分かるように、上記３つの手段に、各反復工程のために対応する新しい入力パラメータを格納する制御手段が備えられている。
【００９４】
手段４１７（または、４１７’）は、シフト可能な被乗数Ｃを有する新しい方法のために、図１の手段１００・１０４・１０６の機能性を備えるよに設計されている。
【００９５】
従来の方法に関しては、手段４１７または４１７’は、手段９１０・９３０の機能性を備えるように設計されている。これらの手段は、図１８から分かるように、同じく、先行の工程の正確な中間結果の代わりに、先行の工程の近似化された中間結果を格納できる。
【００９６】
既に、図４に示す概略的な図から明らかなように、正確な３オペランド計算で計算される正確な中間結果を近似化することにより、反復工程での正確な３オペランド加算の計算に並行して、次の反復工程のルックアヘッドパラメータを計算できる。その結果、３オペランド加算を、ルックアヘッドパラメータを計算するために中断することなく、ある程度連続的に実施できる。
【００９７】
図１８に関しては、正確な中間結果の近似化が実施されない従来の方法では、各反復ループは、基本的に２つの連続した段階を含んでいることが分かる。２つの段階とは、つまり、まず、現在の反復工程のルックアヘッドパラメータを計算する段階（９１０，９３０）、次に、対応するシフトを含む３オペランド加算を計算する段階（９２０，９４０，９５０）である。
【００９８】
同じく、被乗数Ｃのシフトを有する本発明の新しい方法も、現在の反復工程のために、ｓcおよびｓzを求め、次に、ルックアヘッドパラメータが計算されたら、対応するシフトを手段１０８によって実施し、３オペランド加算を手段１１２によって実施するために、反復工程においてまず各ブロック１００、１０４、１０６が有効になっていることにより実施することができる。
【００９９】
２クロック特性は、著しい性能低下を伴っている。図４に示す加速方法は、現在の反復工程の正確な中間結果の計算と、上記現在の反復工程における、近似化された中間結果を使用する、次の反復工程のルックアヘッドパラメータの計算とを、相互に並行して行うことにより、この性能低下を克服する。
【０１００】
したがって、図４に示す加速された方法によって、図１８の従来のＺＤＮ方法、および、図１のシフト可能な被乗数Ｃを有する新しい反復方法の問題を克服できる。この問題とは、図１８のシフトおよび符号パラメータｓz・ｓn・ａ・ｂ、または、図１の新しい方法のｓc・ｓz・ｖc・ｖnを、まず（つまり、各３オペランド加算の前に）計算する必要があるということである。したがって、シフトおよび符号パラメータの計算の間は、図１８の従来方法の加算器９５０、または、図１の新しい方法の加算器１１２は稼動していないであろう。
【０１０１】
図４の加速方法では、この問題は、現在行われている３オペランド加算の良好かつ非常に迅速な推定を実施することにより解決される。したがって、この近似化された早期に利用できる値によって、残りの時間に、次の反復工程のルックアヘッドパラメータを計算できる。これらルックアヘッドパラメータは、次の３オペランド加算の開始時に使用される。その結果、因数２までの上記方法だけの加速が達成される。
【０１０２】
本発明によると、将来的なシフト値および符号値は、基本的に、Ｚの最上位の（例えば１２）ビットだけに依存しており、図１に示す新しい方法では、被乗数シフト値ｓcは、乗数Ｍ（すなわち、ｓm）とｓzとに依存していることが分かる。
【０１０３】
さらに、近似化は、Ｚの最上位のビットが基本的にＣに依存していない、ということを基礎としている。なぜなら、既述のように、還元は、乗算よりも常にいくらか遅れているからである。その結果、各数Ｚ、Ｎ、Ｃについて考察すると、還元が遅れている場合はＺがＣよりも常に大きい。
【０１０４】
したがって、ブロック４１２での近似化された３オペランド加算のためには、Ｃを無視することが好ましい。その結果、近似化された３オペランド加算は、実際には２オペランド加算となる。２オペランド加算は、さらに上位ビットの重要性についての後述の説明により、Ｃを無視して、ビットの合計数よりも小さい上位ビットの数（例えば、ＺおよびＮの上位１２ビット）だけで実施される。
【０１０５】
近似化されたオペランド加算、または一般的に言えばブロック４１２での近似化された３オペランド加算をさらに加速（高速化）するために、モジューロＮ４０４としては、元来のモジューロは使用されず、変換されたモジューロが使用される。この変換されたモジューロは、ドイツ特許公報第１０１１１９８７号Ａ１（DE 10111987 A1）に記載されているモジューロ変換の原則に基づいて、モジューロ変換に応じて１と任意の値との間で変化する上位ビットの特定の数が、実際に処理されるモジューロに依存せず、常に等しいように変換されたものである。
【０１０６】
好ましい近似化されたオペランド加算では、いずれにせよ、モジューロレジスタのＭＳＢから始まる特定の数のビットだけが採用され、相当するビットの特定の数が中間結果レジスタＺから採用されるので、近似化された３オペランド加算のためには、現実には、モジューロレジスタから何も取り出す必要はない。なぜなら、モジューロレジスタの上位ビットは、いずれにせよ分かっているからである。
【０１０７】
したがって、近似化されたオペランド加算を計算するための単一の変数は、モジューロの符号ｖnおよび中間レジスタＺの例えば上位１２ビットである。これにより、近似化されたオペランド加算を、以下のように、実配線で組み合わせて実施できることが好ましい。すなわち、近似化されたオペランド加算は、正確な３オペランド加算よりも非常に速く終了するように実施できる。その結果、正確な３オペランド加算を実施する期間に、近似化された中間結果Ｚapproxに基づいて次の工程のルックアヘッドパラメータを計算するための充分な時間が残る。
【０１０８】
近似化されたオペランド加算を実施するための手段４１２の具体的な実施形態について詳しく説明する前に、図５〜図１０を参考にして、ドイツ特許公報第１０１１１９８７号Ａ１（DE 10111987 A1）に開示されているモジューロ変換の方法について以下で説明する。
【０１０９】
図５に、モジューロＮを使用して被乗数Ｃに乗数Ｍを剰余乗算するための方法のフローチャートを示す。まず、工程５００で、モジューロＮを、以下の等式に基づいてモジューロＮTに変換する。
ＮT＝Ｔ×Ｎ
工程５２０では、次に、変換されたモジューロＮTと変換されたモジューロの所定の分数（好ましい実施形態では２／３）とを使用して、剰余乗算が処理される。このことは、べき乗剰余では、以下の形式のＲＳＡ等式が計算されることを意味している。
ＣT：＝ＭdｍｏｄＮT
すなわち、べき乗剰余Ｃの結果は、モジューロＮによって規定された剰余類ではなく、変換されたモジューロＮTによって規定された剰余類によって計算される。なぜなら、上記等式の左側にはＣではなくＣTが存在しているからである。ここでは、変換されたモジューロＮTを使用することによって、図１９に記載の公知の還元ルックアヘッド方法の反復ループに相当する補助還元シフト値ｓiの計算が非常に簡単になっている。
【０１１０】
最終的な工程５４０では、ＮTからＮへの逆変換が、等式
Ｃ：＝ＣTｍｏｄＮ
に相当する演算を実施することによって実施される。
【０１１１】
変換されたモジューロＮTの剰余類にある変換された結果ＣTは、このとき、簡単なシフト／引算還元によって、モジューロＮの剰余類へ戻されることが好ましい。その結果、得られたＣは、べき乗剰余の結果である。
【０１１２】
モジューロＮは、工程５００で変換子Ｔを用いて、変換されたモジューロＮTへ、以下のように変換される。すなわち、所定の分数により変換されたモジューロ（つまり、好ましい実施形態では、２／３倍に変換されたモジューロ）が、第１の所定の値を有するより上位のけたを有し、上記より上位のけたには、第２の所定の値を有する下位のけたが続くように変換される。
【０１１３】
その結果、中間結果Ｚと２／３倍に変換されたモジューロとの比較を非常に簡単にできる。つまり、同じく第１の所定の値を有するＺの最上位のけたが検索され、所定の分数に変換されたモジューロの第１の所定の値を有するより上位のけたと、第１の所定の値を有する中間結果Ｚの最上位のけたとの間の差が、差ｓiに等しいことによって、上記比較を非常に簡単にできる。
【０１１４】
以下にまとめを記載する。Ｎを、暗号化コプロセッサではなく、３２ビットＣＰＵで、変換されたモジューロＮTに変換することが好ましい。その結果、次式の変換式
ＮT：＝Ｔ×Ｎ
となる。ただし、Ｔは自然数である。
【０１１５】
ＮTについては、使用される全ての数がバイナリ数であれば、以下の式となる。
ＮT：＝１１００．．．０ＸＸ．．．ＸＸ
２／３倍に変換されたモジューロについては、以下の値となる。
（２／３）ＮT＝１００．．．０Ｘ'Ｘ'．．．Ｘ'Ｘ'
【０１１６】
ＮTおよび（２／３）ＮTから、これらが、例えば１６ビットの第１部分を有しており、次に、Ｌ（Ｎ）ビットＸまたはＸ’の一部を有していることが分かる。いわゆるＺＤＮ比較には、変換されたモジューロＮTの２／３倍の最上位１６ビットだけが使用される。なぜなら、エラー率は、既に、約２-10よりも良好となっているからである。つまり、変換されたモジューロの２／３倍の全ての５１２・１０２４または２０４８ビットをＺＤＮ比較に使用する必要はなく、この比較は、変換されたモジューロの最上位１６ビットによって実施されれば充分である。当然、（２／３）ＮTのより低いビットも比較のために使用できるであろう。
【０１１７】
しかしながら、その場合は、エラー率が次第に上昇する。しかしながら、エラーは問題のないものであり、還元ルックアヘッド方法の最適な特性が若干低下するだけなので、この方法を問題なく行える。
【０１１８】
したがって、２／３倍に変換されたモジューロＮTは、値１を有するより上位のけたを有している。比較的上位のけたには、値０（すなわち、第２の所定の値）を有する下位のけたが続く。上述の実施形態では、下位のけたの数が１５である。当然、この場合も、中間結果Ｚと２／３倍に変換されたモジューロＮTとの間でどのような大きさの差があると予期されているか、または、処理されたほうがよいのかに応じて、より大きい、または、より小さい数を使用できる。剰余乗算の中間結果Ｚ、つまり、図１８のブロック９５０における３オペランド加算の結果の量については、以下の式となる。
｜Ｚ｜＝００．．．０１ＹＹ．．．Ｙ
補助シフト値ｓiを、以下の等式に基づいて計算する。
（２／３）ＮT×２-si＜｜Ｚ｜≦（４／３）ＮT×２-si
２／３倍に変換されたモジューロＮTのトポロジーによって、値ｓiは、常に、２／３倍に変換されたモジューロＮTの１を有する最上位のビットと、中間結果の大きさの最上位１との間の差である。
【０１１９】
このけたの差または値ｓiは、簡単な方法にて決定される。さらなる反復工程は必要なくなる。
【０１２０】
さらに、モジューロの２／３倍を格納するために、ＺＤＮレジスタは必要なくなる。なぜなら、定義によると、２／３倍に変換されたモジューロＮTの少なくとも上位、例えば１６ビットは、常に同じ式を有しているからである。ビット比較器は必要なくなる。「１」を有する、２／３倍に変換されたモジューロＮTの最上位のけたと、「１」を有するＺの最上位のけたとの値の差を、例えば変換されたモジューロのためのレジスタと、中間結果Ｚのためのレジスタとを、ビット毎にＸＯＲ結合することによって簡単に実施できる。したがって、ｓiは、ＸＯＲ結合が第１の「１」を出力する位置と、ＸＯＲ結合が第２の「１」を出力する位置との価数の差に等しい。
【０１２１】
ＺＤＮレジスタおよびＺＤＮ比較器が必要ないので、演算装置全体を、より小さなチップ面積に実装できる。
【０１２２】
さらに、暗号制御部分、つまり、ＺＤＮ比較（図１０の７６０）のための制御論理は、複雑性がより低い。なぜなら、図１９の複雑な反復ループを実施する必要がないからである。その結果、計算がより迅速になり、補助シフト値ｓiの計算によって、アルゴリズム全体のためのタイミング問題は生じなくなる。
【０１２３】
以下では、図６から図９を参照して、好ましい変換について詳しく説明する。
【０１２４】
上述のように、ＺＤＮアルゴリズムの主要な部分は、以下の等式が満たされているという点である。
（２／３）２-siＮ＜｜Ｚ｜≦（４／３）２-siＮ
ｓiを、補助シフト値として示す。また、ｓiは、ＺのけたをＮと同じ位置にシフトするために必要なシフト値である。従来技術では、ｓiを計算するために、｜Ｚ｜を（２／３）Ｎと比較する演算が必要であった。
【０１２５】
（２／３）との比較は、モジューロを変換されたモジューロＮTに変換することにより、簡単になる。なお、Ｎによるなんらかのモジュラ演算が実施される前は、変換されたモジューロＮTは、Ｎよりも大きい。次に、全ての計算をモジューロＮTに実施する。しかしながら、計算の結果は、剰余類Ｎ内でなければならないので、Ｎによる最終的な還元が依然として実施される。
【０１２６】
図６に示すように、Ｎが、Ｎビットの長さを有する整数であるとする。モジューロＮは、常に正の整数なので、つまり、２補集合表示ではＭＳＢ＝０なので、符号ビットは常に０に等しく、モジューロＮの第２の最上位のビット（ＭＳＢ−１）は常に１に等しい。ＺＤＮ比較のために、モジューロの全てのビットを、中間結果の全てのビットと比較する必要はなく、ＺＤＮ方法のためには、ｍ個の数のビットを使用すれば充分である。モジューロＮの最上位のｍ個のビットは、モジューロＮTの第１部分を規定し、一方、モジューロの残りのＮ−ｍ個のビットは、モジューロの第２部分ＮRを規定する。好ましい実施形態では、ｍは１６に等しい。当然ながら、ｍの値はより大きくてもより小さくてもよい。
【０１２７】
図７に示すように、変換は、変換されたモジューロＮTが、図６の元来のモジューロよりも１６ビット長いように実施される。
【０１２８】
ＺＤＮ比較には、ＮTの第１の１６ビットを使用すれば充分である。この場合、例えば１２ビットだけが比較に使用され、最下位の４ビットは、より下位のビットから来る可能性のある繰越のためのバッファを示す。
【０１２９】
この場合は、比較が誤った結果となる可能性は、２-12よりも低い。比較で誤った結果が出たとしても、最適な還元シフト値以下の値ＳNが生成されだけであり、結果モジューロＮは、依然として正しい。
【０１３０】
モジューロが、図６に示すように、２補集合表示で使用される場合は、モジューロＮは以下のように分解される。
Ｎ＝２n-mＮT＋ＮR
Ｎを、変換子Ｔを使用して、ＮTに変換する。ただし、Ｔは、適切に選択された整数である。このことは、合同式を理由として、このようでなければならない。ＮTは、図７に示す形式を有していることが好ましい。すなわち、ＮTの最上位のビット（ＭＳＢ）は、０に等しい必要がある。なぜなら、ＮTは、正の整数であることが好ましいからである。以下で説明するように、変換されたモジューロの第２最上位および第３最上位のビットは、１に等しい必要がある。一方、変換されたモジューロＮTの最上位セクションのほかの全てのビット（図７では符号３３で示す）は、「０」の値を有していることが好ましい。この場合だけ、つまりＮTの２／３倍については、図８に示すようなＮTの２／３倍の最上位セクションが、「１」を有する１つのビットだけを有し、一方、この最上位セクション４４にある他の全てのビットは、「０」に等しい。したがって、ｓiを算定するための既述の取るに足らない比較を実施してもよい。
【０１３１】
しかしながら、まず、変換子７を用いて変換されたモジューロＮTを計算することについて、図７を参照しながら説明する。この以下の規定が当てはまる。
ＮT＝ＴＮ
＝Ｔ（２n-mＮT＋ＮR）
変換子Ｔについては、以下のことが当てはまる。
Ｔ＝｜（２p-2＋２p-3）／ＮT｜
等式１７を使用して、変換されたモジューロＮTについては、以下のようになる。
ＮT＝｜（２p-2＋２p-3／ＮT｜（２n-mＮT＋ＮR）
ＮT＝（２n+p-m-2＋２n+p-m-3）ＮT／ＮT＋（２p-2＋２p-3）ＮR／ＮT
ｐおよびｍのための例えば典型的な値つまり、ｐ＝３２ビットおよびｍ＝１６ビットについて言えば、ＮTについては以下のようになる。
ＮT＝２n+14＋２n+13＋ＮR（（２P-2＋２p-3）／ＮT）
ＮTの計算は、暗号化コプロセッサではなくホストＣＰＵで実施されることが好ましいということに、留意されたい。ホストＣＰＵは、短数演算装置（Kurzzahl-Rechenwerk）を備えており、ＮTの計算にはこれで充分である。Ｔは整数である必要があり、モジューロＮの代わりにＮよりも大きなモジューロＮTについて暗号化コプロセッサの内部で計算されるので、簡単なＺＤＮ比較のためのＮTの第１のｐ−ｍ＝１６ビットだけが、補助シフト値ｓiを計算するために、関連している。ＮTのほかのｎ個のビットは、任意の数でもよく、これらｎ個のビットは、補助シフト値ｓiを計算するため、つまり、Ｚとの比較のためには関係していない。当然、しかしながら、変換されたモジューロＮTの全てのビットは、３オペランド加算のために必要である。なお、この３オペランド加算は、シフトされたモジューロを使用する代わりに、シフトされた変換後のモジューロを使用して実施される。
【０１３２】
ｍおよびｐのための選択された値に対しては、変換子Ｔは１６ビット整数である。したがって、Ｔを計算するため、または、ＮTを計算するために必要な割り算を最上位３２ビットだけに対して実施する必要がある。したがって、上記割り算を、ホストＣＰＵで実行可能で、簡単かつ迅速なプログラムコードであるプログラムにより実行できる。
【０１３３】
図８に、変換されたモジューロＮTを２／３倍したものを示す。図７に示したように、ＮTのＭＳＢ‐１およびＭＳＢ‐２が「１」であり、次の式
（１１）2＝（３）10＋（（２／３）×３）2＝（２）10＝（１０）2
が成り立つので、上記の変換されたモジューロＮTの２／３倍の簡単なビットパターンが生じる。ここで、上記の変換されたモジューロＮTの２／３倍の長さは、ｎ‐ｍ＋ｐである。
【０１３４】
（２／３）ＮTが特殊な形態をしているので、｜Ｚ｜の比較は非常に簡単である。（２／３）ＮTの最上位である１が、剰余演算の初めのｎ＋ｐ−ｍ−２の位置にあることが、知られている。レジスタＺのポインタが、好ましい実施形態では、ＺのＭＳＢにおいて始まり、Ｚの初めの「１」を探索する。ＺのＭＳＢが１である場合、Ｚは負の数であり、その代わりにＺの初めのゼロを探索する。レジスタＮおよびレジスタＺでの初めの１のビット位置の差から、補助シフト値ｓiを算定する。
【０１３５】
モジューロ演算（Modulo-Operaton）の結果が剰余Ｎになければならないので、最後の還元モジューロＮを実行する。つまり、逆変換（図５の工程５４０）を実行する必要がある。
【０１３６】
ＮからＮTへの変換には、公知のＺＤＮ比較と比べて、暗号コプロセッサ内での（２／３）Ｎの計算の代わりに、ホストＣＰＵにおいて、ＮからＮTへの変換を簡単に実行できるという利点がある。
【０１３７】
チップには、ＺＤＮレジスタおよび比較器論理回路は必要ではない。そのために、チップの大きさは小さくなり、コプロセッサの複雑さは低減される。
【０１３８】
最後に、図９に示したように、ＮからＮTへの変換を、モジューロＮのランダム化と組み合わせてもよい。Ｒがｓビットの長さの乱数である場合、ランダム化され、変換されたモジューロＮTは、図９に示した形状を有している。ランダム化された数Ｎによって、ランダム化され変換されたモジューロは、ランダム化されていない場合（図７）と比べて、ｓビットだけ（つまり、Ｒのけたの数だけ）長くなる。
【０１３９】
方程式では、以下のように表現できる。
ＮT＝Ｔ Ｎ
＝Ｔ（２n-mＮT＋ＮR）
次に、ランダム化された変換子Ｔを、以下のように表現する。
Ｔ＝｜（２p-2−２p-3＋Ｒ）／ＮT｜
したがって、ランダム化され変化されたモジューロを以下のように表現する。
ＮT＝｜（２p-2＋２p-3＋Ｒ）／ＮT｜（２n-mＮT＋ＮR）
ＮT＝（２n+p-m-2＋２n+p-m-3＋Ｒ  ２n-m）ＮT／ＮT＋（２p-2＋２p-3＋Ｒ）ＮR／ＮT
ｐを１４４ビットとし、ｍを１６ビットとし、ｓを１１２ビットとする場合、ランダム化を含んだ変換されたモジューロＮTのために、次の値が得られる。
ＮT＝２n+126＋２n+125＋Ｒ  ２n-16＋ＮR（２144＋２143＋Ｒ）／ＮT
ＮTのビット長は、以下のようになる。
Ｌ（ＮT）＝ｎ＋ｐ−ｍ＝ｎ＋ｍ＋ｓ＝ｎ＋１６＋１１２＝ｎ＋１２８  ビット
図１０は、ＺＤＮレジスタを備えず、演算ユニット７００と、Ｃレジスタ７１０と、Ｎレジスタ７２０と、Ｚレジスタ７３０とのみを備えた演算装置を、示している。ここで、Ｎレジスタ７２０には、モジューロおよび／またはシフトされたモジューロが格納されておらず、変換されたモジューロおよび／またはシフトされ変換されたモジューロ、または、ランダム化され変換されたモジューロ、または、シフトされランダム化され変換されたモジューロが格納されている。
【０１４０】
以下に、図１１に基づいて、反復工程の近似的なオペランド加算を計算するための回路の、特定の実施形態を示す。図１１は、再び、モジューロレジスタ２００およびＺレジスタ２０４を示している。図１１に示しているのは、変換されたモジューロであり、上記モジューロの上位ビットは、実際に計算に基づいているモジューロであるかどうかに係らず例えば有意性を有するＭＳＢ‐１２を有するビットまで、図７では０１１０００．．．．．０００として知られている。
【０１４１】
近似的な３オペランド加算を計算するために、初めに、被乗数Ｃを無視する。さらに、Ｚの上位１２ビットだけを、特定のＺマルチプレクサ４１２ａを用いて、Ｚレジスタ２０４から読み出す。それにしたがって、これらの上位１２ビットをｓzだけ、小さなシフタ４１２ｂを用いて左にシフトする。これにより、近似的にシフトされたＺ値（中間レジスタ４１２ｃと記号で示している）が得られる。
【０１４２】
このような値の格納を非常に短時間で行うことができることに留意されたい。これにより、固有のレジスタを備える必要がなくなり、ビットを伝送するバスが十分に存在するようになる。
【０１４３】
また、モジューロが知られており、モジューロが変換されたモジューロであるので、モジューロの上位の３ビットのみと特に第２および第３ビットのみとが「１」である一方、残りのビットが０であるので、選択４１２ｄで示しているように、シフトされた最後の中間結果の最も高い３つのビットのみが必要である。これら３つのビットを、組み合わせ回路４１２ｅに格納する。
【０１４４】
この組み合わせ回路には、さらに、モジューロの符号ｖnが格納されており、一方、上記組み合わせ回路４１２ｅに、モジューロの上位３つのビット（つまり「０１１」）が配線されている。この組み合わせ回路４１２ｅは、次に、近似的な中間結果（他の中間結果レジスタ４１２ｆとして示している）の上位３つのビットを供給する。さらに中間結果レジスタ４１２ｃから、矢印４１２ｇで示しているように、近似的な中間結果の他の９のビットを複写できる。
【０１４５】
図１１から、変換されたモジューロを使用する場合に、計算を３つのビットのみを用いて実行する必要があることが分かる。ここではしかし、「加算の相手」のビットが、その符号以外について知られており、これにより、明らかに、近似的な中間結果Ｚapproxの計算を非常に速く行うことができる。
【０１４６】
このようにして近似化されたＺ［Ｌ‐１、Ｌ‐１２］を用いて、次の反復工程の、シフト値および符号値がほぼ常に正確に計算されるということが分かるということに、留意されたい。Ｚの近似が非常に不正確または非常に大まかである他の全ての場合には、最適のシフト値以下の値および最適の記号値以下の値が、得られる。
【０１４７】
しかし、これらの、最適のシフト値以下の値および最適の記号値以下の値によって現在の演算エラーは生じず、剰余乗算の計算に、最適の場合によりも多くのサイクルが必要になるだけである。しかし、先程考察した反復工程の近似的な中間結果を計算し、かつ、この近似的な中間結果を正確な中間結果の計算と同時に用いて、次の工程のルックアヘッドパラメータを算出するには、このような上昇（つまり、性能の悪化）は、近似的なオペランド加算を同時に実施することによる利得よりも明らかに小さい。
【０１４８】
さらに、近似的な中間結果を計算するための装置を、チップ面積においてわずかなコストで実現できる。これにより、演算装置のほぼ２倍の速度が、チップ面積において非常にわずかな「コスト」で得られる。
【０１４９】
次に、図１２〜図１７ｂに関して、被乗数がシフトされ、モジューロが固定されている好ましい実施形態について、詳述する。ここで、近似的な中間結果Ｚapproxを計算することにより、この方法を高速化させ、さらに、他の高速化のためにモジューロ変換を使用する。
【０１５０】
図１２〜図１７ｂは、いわば、直感的な擬似コードの形状で、本発明の方法のフローチャート図を示している。さらに、図１２〜図１７ｂは、本発明の方法を状況に応じてハードウェアだけでなくソフトウェアにおいて実施できることを示している。この実施を、デジタル記憶媒体（特に、ディスクまたはＣＤ）において、電子的に読取り可能で、本発明の方法を実施するようにプログラマブルコンピュータシステムにて実行可能な制御信号によって、行うことができる。
【０１５１】
コンピュータプログラムプロダクトがコンピュータにおいて実行可能に記載されている場合、通常、本発明は、機械可読キャリアに格納された、本発明の方法を実施するためのプログラムコードを有するコンピュータプログラムプロダクトからも構成されている。言い換えると、コンピュータプログラムがコンピュータにて実行可能な、本発明の方法を実施するためのプログラムコードを有するコンピュータプログラムとして実現できる。
【０１５２】
図１２は、個々に用いられる変数、および、変数が有する型の概観を示している。変数Ｃｓｈを、図３の１０８ｂに示しているように、３と規定する。ここで、この変数は、−３〜＋３の被乗数シフト値ｓcが用いられるように、被乗数Ｃのシフタを特定している。
【０１５３】
変数Ｚｓｈは、５であり、図３のブロック１０８ａに示しているように、中間結果のシフタの大きさ（つまり、中間結果シフト値ｓzが有することができる大きさ）を規定している。変数ＮｏＺｅｒｏｓが、正確には図１１の上位のＭＳＢ‐１２に基づいて、変換されたモジューロＮTがレジスタ２００にあるゼロの数を規定する。この変数を、図１２にＣｓｈとＺｓｈとの合計として規定するが、他の大きさを用いてもよい。
【０１５４】
変数ＮｏＴｏｐＢｉｔｓは、Ｚレジスタ２０４の上位ビットの数全体に関するものである。これらの数を、Ｚマルチプレクサ４１２ａからＺレジスタ２０４を用いて読み出すことにより、近似的な中間結果Ｚapproxを計算する。図１２から、変数ＮｏＴｏｐＢｉｔｓが１２である（つまり、ＮｏＺｅｒｏｓ（＝８）＋４）と読取れる。さらに、図１２では、全演算装置のレジスタ長を特定する変数ＭａｘＲｅｇＢｉｔＬｅｎｇｔｈが特定されている。この数は、図１２では１６０として、任意に固定されている。
【０１５５】
それに代わるものとして、この数は、当然ながら１０２４、２０４８、または、例えば明らかに２０４８よりも多い数であってもよいし、例えば、２３０４であってもよい。これにより、ＲＳＡ法のアンダーフローバッファ２１０（図２）に十分な領域を供給でき、さらに、通常のモジューロよりも大きな変換されたモジューロを加えるための十分な領域を供給できる。また、変数Ｄｅｂｕｇは、出力変数である。この変数はそれほど重要ではない。
【０１５６】
また、図１３に基づいて、これ以降の図面に示す方法に必要な、いくつかの補助機能について説明する。例えば、関数ＲｅｔｕｒｎＢｉｔは、数Ｘのけたｉにビットを供給する。
【０１５７】
関数ＳｅｔＢｉｔは、数Ｘのけたｉに、ビットを、「値」によって特定された値（つまり、０または１）で割り当てることができる。
【０１５８】
関数ＢｉｔＬｅｎｇｔｈは、ＬＳＢからＭＳＢまでのレジスタの数の長さを計算できる。図４のレジスタ２０４の場合、この関数ＢｉｔＬｅｎｇｔｈは、ＭＳＢ２２０とＬＳＢ２１４との間のビットの数を供給する。
【０１５９】
また、図１４ａは、図１に概略的に示したように、剰余乗算のための設定／規定および／または調整および初期化を示している。これらの外部変数については、すでに図１２に基づいて説明した。
【０１６０】
ブロック「演算装置の状態」では、必要な変数の型を規定する。変数Ｚは、中間結果を表している。変数ＡｐｐｒｏｘＺは、例えば図４のブロック４１２において計算され、かつ、図４の４１４において示す近似的な中間結果を、表している。変数Ｌｓｂは、いわば、被乗数のコンマを供給する。計算の開始時に、変数Ｌｓｂは、アンダーフローバッファ２１０の長さをビットで示し、図２に示した例では、例えば９である。図２に示した、被乗数のＬＳＢ２１２をアンダーフローバッファ２１０にシフトした中間状態では、変数Ｌｓｂは、例えば４であろう。これは、アンダーフローバッファにおいて４ビットまで、被乗数をさらに下へとシフトできるということである。
【０１６１】
また、変数ｃｕｒ＿ｌｓｂは、被乗数Ｃがシフトする度に変化し、シフト値ｓcを制限する（これについては、後で説明する）。変数ＬＡｃｃｕは、乗数の長さをビットで規定する。変数ｃは、被乗数Ｃがどれだけ下位にシフトしたかを示している。したがって、ｃおよびｃｕｒ‐Ｌｓｂの合計は一定であり、常に、アンダーフローバッファ２１０の長さに相当している。この長さは最大３００ビットであり、３０〜５０ビットであることが好ましい。この値は、含まれている数の大きさの影響を受けるので、変化する可能性があるということに、留意されたい。
【０１６２】
また、ブロック「３オペランド加算のための量の算定」では、本発明の好ましい実施形態において用いられるルックアヘッドパラメータを規定する。したがって、変数ＶＺ＿Ｃは、図１のブロック１１２の符号ｖcである。変数ＶＺ＿Ｎは、図１のブロック１１２のモジューロの符号ｖnを示している。最後に、変数ｓ＿Ｚは、被乗数シフト値を示している。この被乗数シフト値については、図１のブロック１１２に示しており、図１のブロック１０６において計算される。
【０１６３】
また、区分「乗算のための量の算定」の変数は、乗算ルックアヘッドアルゴリズムに関連している。したがって、ｍは、乗数によって示されるビットの数である。ここで、知られているように、乗数ビットは上から下に処理される。したがって、ｍが０よりも大きい限り、乗数ビットが存在する。ｍが得ることのできる最大値は、ＬＡｃｃｕである。つまり、反復乗算が始まる前である。この反復型乗算では、乗数のけたはまだ処理されていない。
【０１６４】
また、変数ＬＡは、用いられるルックアヘッド規則を規定している。ここで、ＤＥ  ３６３１９９２  Ｃ２（Ｕ．Ｓ．特許明細書第４，８７０，６８１）に記載されているように、ルックアヘッド規則を用いることができる。変数ｓ＿Ｍは、図１のブロック１００において計算される乗算シフト値ｓmである。
【０１６５】
初めに、各変数を、与えられた大きさを用いて調整し、初期化する。特に、処理されるモジューロＮ（および／または、変換されるモジューロＮT）のビット長に基づいて設定される変数Ｌｓｂが示される。アンダーフローバッファが、用いたモジューロに応じて、例えば各ＲＳＡ計算（つまり、モジューロとのべき乗剰余）のために新しく初期化されることが分かる。さらに、モジューロが左寄せされてレジスタに配置されることが分かる。つまり、より小さなモジューロのために、より大きなアンダーフローバッファも利用でき、また、より大きなモジューロのために、より小さなアンダーフローバッファも利用できることが、分かる。
【０１６６】
図１４ｂは、図１および図４のブロック回路図を用いて示した方法を擬似コードで示している。打切り状況になるまで、反復を実行する。打切り状況は、一方では、ｍが０である（つまり、全ての乗数けたが処理された）状況のことであり、ｃは０である（つまり、ＬＳＢ２１２に関する被乗数が、全ての剰余乗算の終わりに再びモジューロＮのＬＳＢ２０８に（図２参照）調整されている）状況のことである。通常、初めにｍは０であり、次に、数サイクル後にｃは０となる。なぜなら、すでに実行したような還元が乗算の後で行われる（または「後れをとる」）からである。
【０１６７】
初めに、第１関数ＬＡＭｏｄｕｌｏを、近似的な中間結果を用いて実行する。したがって、この関数ＬＡＭｏｄｕｌｏ（以下で詳述する）は、（次の反復工程のルックアヘッドパラメータを近似的な中間結果Ｚapproxを用いて計算する）ユニット４１７の機能性を示している。
【０１６８】
続いて、関数  後処理＿ＬＡＭｏｊｕｌｏ、関数  ＬＡＭｕｌｔｉｐｌｉｃａｔｉｏｎ、および、関数  後処理＿ＡＬＭｕｌｔｉｐｌｉｃａｔｉｏｎを行うことにより、通常、乗算シフト値ｓzおよび乗算ルックアヘッドパラメータｖnを計算できる。適切な還元ルックアヘッドパラメータｓzおよびｖnを、上記の関数ＬＡＭｏｄｕｌｏを用いて計算する。この関数ＬＡＭｏｄｕｌｏ、後処理＿ＬＡＭｏｄｕｌｏ、ＬＡＭｕｌｔｉｐｌｉｃａｔｉｏｎ、および、後処理＿ＬＡＭｕｌｔｉｐｌｉｃａｔｉｏｎ、の全てを、ユニット４１７において、実行する。このユニットは、現在の３オペランド加算用のルックアヘッドパラメータを計算せず、次の反復工程のルックアヘッドパラメータを算出するものである。
【０１６９】
続いて、被乗数Ｃを、その被乗数シフト値までシフトする。このことは、図１のユニット１０８の機能性であり、および／または、規定に応じて、３オペランド加算を正確に計算するための図４のユニット４００の機能性である。
【０１７０】
次に、次の反復工程の近似的な中間結果を割り当てることにより、関数ＴｈｒｅｅＯｐｅｒａｎｄＡｄｄｉｔｉｏｎとの正確な３オペランド加算（つまり、現在の反復工程の正確な３オペランド加算）を実行できる。続いて、変数ｍ、ｃ、および、ｃｕｒ＿ｌｓｂを調節する。
【０１７１】
したがって、反復打切り状況が、ｍが０であるか、ｃが０であることを、満たさない限り、ｗｈｉｌｅループを循環させる。
【０１７２】
最後の「ｉｆ」ループでは、Ｚレジスタの上位ビットが１である（負の数を示している）場合、縮退した３オペランド加算を実行する。つまり、モジューロＮに符号ｖn＋１を加算することにより、現在の（負の）中間結果が得られる。これにより、最後に、最後の「ｄｉｖ」演算によって生じるような、ＬＳＢ未満のビット（つまりアンダーフローバッファのビット）が切り捨てられる正の中間結果が得られる。
【０１７３】
次に、図１４ｂに示す機能について詳述する。図１５は、図１のブロック１１２に示したように実施される関数３オペランド加算の概観を示している。特に、図１５から、実施された３オペランド加算では、Ｃのシフトを３オペランド加算の外部で実行する一方、Ｚのシフトを、ｓZまで、３オペランド加算内で実行するということが分かる。このことは、特定の実施形態において有効であるが、それに代わるものとして、Ｃのシフトを３オペランド加算内で実行してもよいし、両方のシフトを３オペランド加算の外部で実行してもよい。
【０１７４】
また、ｓzが、図２に示されるＭＳＢ２２０がＭＳＢ２０６と同列になるように選択された場合、モジューロ２＊＊ＭａｘＲｅｇＢｉｔＬｅｎｇｔｈと共の剰余還元は、ソフトウェアにおいて、Ｚレジスタの最上位のビットが、加算操作、および、けたの上げ下げ操作において完全に「抜け落ちる」ことをシミュレートできるということに、留意されたい。しかしこのことは、技術的に知られているように、特定のけた上げ処理ルーチンを使用する場合には、重要ではない。
【０１７５】
図１５のシフト機能は、自己説明されるものであり、どのようにレジスタ内容Ｘがシフト値ｓ＿Ｘまで、左または右にシフトされるかをソフトウェア技術にしたがって示している。左へのシフトは、２進表記法において、２SXとの乗算を意味している。右へのシフトは、２SXでの割り算を意味している。
【０１７６】
図１６ａに示した関数ＬＡＭｏｄｕｌｏは、中間結果シフト値ｓzとモジューロＶＺ＿Ｎの符号とを含む還元パラメータの計算に、効果的である。入力変数として、Ｚ、Ｎ、および、ｃを用いることが好ましい。初めに、変数ｃｕｒ＿Ｚｓｈを変数Ｚｓｈの最小値（つまり、中間結果シフタのシフタ長）に、および、ｃ（つまり、図２の開始ＬＳＢ２０８からの被乗数のＬＳＢの現在の偏差）に設定する。続いて、基本的には正確な３オペランド加算と同様に行われる近似的な３オペランド加算を実行する。しかし、上記２つの3オペランド加算は、上位１２ビットおよび／またはＮのＮｏＴｏｐＢｉｔｓのみを取り、３オペランド加算式ｓcおよびＣの符号（つまりｖc）を０に設定する、という点において異なっている。
【０１７７】
次の０／１サーチャーは、初めに、レジスタＺの最上位のビットを供給し、次に、シフト値ｓzが変数ｃｕｒ＿Ｚｓｈよりも小さいと同時に、最大レジスタ長を越えない内は、シフト値ｓzを増分する。
【０１７８】
最後に、ｉｆループにおいて、ｓzが、シフタＺｓｈによる規定よりも大きく選択された場合（図２には示されていない）、つまり、ＺレジスタのＭＳＢが、レジスタＺｓｈにより許容されるよりも大きなビットだけ、モジューロレジスタ２００のモジューロのＭＳＢ２０６から、例えば４ビット離れている場合、ｓzを、ｃｕｒ＿Ｚｓｈを介してＺｓｈに設定する。ここで、中間結果Ｚが確実に１つまたは複数のビットだけモジューロＮよりも小さくなれば、３オペランド加算のモジューロ減算の形態での還元は、抑制される。このことは、還元ルックアヘッドパラメータｖnが０に設定されることにより示される。このようにして還元を抑制する。しかしながら、そのような還元を実行すれば、中間結果は、負になり、特に、以前よりもバラツキの量も増加する。それゆえ、シフタ長が制限されたために中間結果Ｚが完全には上位にシフトされない場合、上記還元を抑制することにより、本発明の方法の効率は著しく上がる。
【０１７９】
図１６ｂに、関数、後処理＿ＬＡＭｏｄｕｌｏを示す。ｍが０より大きい（つまり、乗数けたがさらに処理される）場合、および、ｓzが０よりも大きいが、変換されたモジューロに関してゼロの数よりもｃが小さい場合、シフトは生じず、ｓzは０に設定される。同時に、還元も抑制される。つまり、符号ｖnが０に設定される。
【０１８０】
図１７ａは、乗算ルックアヘッドアルゴリズムを規定する関数ＬＡＭｕｌｔｉｐｌｉｃａｔｉｏｎを示している。この図に示したように、初めに、変数ｃｕｒ＿Ｃｓｈおよびｓmを初期化する。次に、０／１サーチャーを実行し、その間に変数を増分する。打切り状況が特定の状況なく得られたとき、ｗｈｉｌｅループはすでに、図１のブロック１００において計算される乗算シフト値ｓmとなっている。続いて、乗算のビットと比較されるルックアヘッドパラメータＬＡに応じて、特定の適切な処置を実行する。これにより、例えば、シフタによって本来規定されるよりも大きな乗算シフト値が得られる場合に、例えば被乗数の符号ｖcを「０」に設定できる。この場合、上方へのシフト、および剰余還元は実行されるが、被乗数は加算されない。
【０１８１】
図１７ｂは、手段（ユニット）１０６の機能性が実行される関数、後処理＿ＬＡＭｕｌｔｉｐｌｉｃａｔｉｏｎを示している。ここで、ｓcを、ｓz−ｓmによって計算する。
【０１８２】
Ｃシフタの規定の長さＣｓｈよりも長いｓcが得られると、ｓcを最大シフタ長と同じ長さに設定し、図１７ｂに示したようにｓzを設定し、図１のブロック１１２の３オペランド加算のモジューロの符号ｖnを０に設定する。これにより、最大シフト値が得られず、図１７ｂに示した関数、後処理において設定されたシフト値ｓzが得られるので、還元は生じない。
【図面の簡単な説明】
【０１８３】
【図１】被乗数のシフトを有する乗算を計算するための本発明の装置のブロック図である。
【図２】モジューロが左寄せされているレジスタＮ・Ｃ・Ｚのレジスタ割り当てを示す図である。
【図３】制限されたシフト値を有する２つのシフト器の詳細図である。
【図４】次の反復工程のルックアヘッドパラメータの並行計算によって加速された３オペランド加算のブロック図である。
【図５】モジューロ変換方法のフローチャートである。
【図６】ビットの第１部分ＮTおよびビットの第２部分ＮRへのモジューロＮの分割を示す図である。
【図７】長さＬ（ＮT）を有するけたの第１部分およびそのほかのけたへの変換されたモジューロＮTの分割を示す図である。
【図８】変換されたモジューロＮTの２／３倍のけたを示す図である。
【図９】ランダム化によって変換されたモジューロのけたの概略図である。
【図１０】モジューロ変換によって剰余乗算を実施するための演算装置の概略図である。
【図１１】近似化したオペランド加算を実施するための手段の実施の概略図である。
【図１２】本発明のコンピュータプログラムの変数定義を示す図である。
【図１３】本発明の方法のための補助関数を示す図である。
【図１４ＡＡ】好ましい実施形態の方法のための初期化時表示を示す図である。
【図１４ＡＢ】好ましい実施形態の方法のための初期化時表示を示す図である。
【図１４Ｂ】被乗数シフトと、次の反復工程のために現在の反復工程におけるルックアヘッドパラメータの並行計算とを有する、本発明の方法のプログラムの図である。
【図１５】図１４ｂで使用される３オペランド加算の詳細なプログラム図である。
【図１６Ａ】図１４ｂで使用されるルックアヘッドモジューロ関数の詳細図である。
【図１６Ｂ】図１４ｂで使用される後処理ルックアヘッドモジューロ関数の詳細図である。
【図１７Ａ】図１４ｂのルックアヘッド乗算関数の詳細図である。
【図１７Ｂ】後処理ルックアヘッド乗算関数の詳細図である。
【図１８】既知のＺＤＮ方法のフローチャート図である。
【図１９】既知の還元ルックアヘッド方法のフローチャート図である。
【符号の説明】
【０１８４】
１００    調べるため手段
１０２    乗算シフト値
１０４    算出のための手段
１０６  ｓcを計算するための手段
１０８    ＺおよびＣをシフトするための手段
１０８ａ    Ｚのためのシフタ
１０８ｂ    Ｃのためのシフタ
１１０    中間結果シフト値ｓz
１１２    ３オペランド加算を実施するための手段
１１４    現在の反復工程の中間結果
２００    モジューロレジスタ
２０２    被乗数レジスタ
２０４    中間結果レジスタ
２０６    モジューロのＭＳＢ
２０８    モジューロのＬＳＢ
２１０    アンダーフローバッファ
２１２    被乗数のＬＳＢ
２１４    ３オペランド加算後の中間結果のＬＳＢ
２１８    最大中間結果シフト値
２２０    中間結果のＭＳＢ
４００    正確な３オペランド加算を実施するための手段
４００’    現在の反復工程の正確な３オペランド加算
４０２    正確な先行する中間結果
４０４    モジューロＮ
４０６    被乗数Ｃ
４０８    先行する反復工程のルックアヘッドパラメータ
４１０    先行する反復工程の結果としての正確な中間結果
４１２    近似化されたオペランド加算を実施するための手段
４１２ａ    Ｚマルチプレクサ
４１２ｂ    シフタ
４１２ｃ    Ｚのシフトされた１２ビットを格納するためのバッファメモリ
４１２ｄ    組み合わせ部供給線
４１２ｅ    組み合わせ部
４１２ｇ    ビット複写線
４１２ｆ    近似化された中間結果のためのメモリ
４１２ａ    Ｚマルチプレクサ
４１２ｂ    シフタ
４１２ｃ    Ｚのシフトされた１２ビットを格納するためのバッファメモリ
４１２ｂ    組み合わせ部供給線
４１２ｅ    組み合わせ部
４１２ｇ    ビット複写線
４１２ｆ    近似化された中間結果のためのメモリ
４１２’    現在の反復工程の近似化されたオペランド加算
４１４    近似化された現在の中間結果
４１６    乗数Ｍ
４１７    現在のルックアヘッドパラメータを計算するための手段
４１７’    その後のルックアヘッドパラメータの計算
４１８    現在のルックアヘッドパラメータ
４２０    その後の反復工程を計算するための正確な中間結果
５００    モジューロを変換するための手段
５２０    変換されたモジューロを使用して反復処理するための手段
５４０    変換された結果を逆変換するための手段
７００    演算ユニット
７１０    Ｃレジスタ
７２０    Ｎレジスタ
７３０    Ｚレジスタ
７４０    反復ループ
７５０    ＺＤＮレジスタ
７６０    ＺＤＮ比較のための制御論理
９００    ＺＤＮ方法の開始
９１０    ＺＤＮアルゴリズムの乗算ルックアヘッド方法
９２０    Ｚを左または右にシフトする
９３０    ＺＤＮアルゴリズムの還元ルックアヘッド方法
９４０    モジューロを左にシフトする
９５０    ＺＤＮアルゴリズムのための３オペランド加算
９６０    ＺＤＮアルゴリズムの終了
１０００    広域変数
１０１０    還元シフト値を初期化する
１０２０    ＺＤＮを還元する
１０３０    ｎとｓNとを調べる
１０４０    ｎを減少させる
１０６０    還元シフト値を減少させる
１０８０    ＺＤＮ／２を計算する
１１００    中間結果をＺＤＮと比較する
１１２０    還元ルックアヘッドパラメータを算定する
１１４０    還元ルックアヘッドパラメータを算定する
１１６０    ｎを計算する
１１８０    還元ルックアヘッドパラメータを計算する
１２００    ｎを調べる
１２２０    ｃｕｒ＿ｋを計算する
１２４０    ｃｕｒ＿ｋを計算する
【図１】
2006511833.tif 000003
【図２】
2006511833.tif 000004
【図３】
2006511833.tif 000005
【図４】
2006511833.tif 000006
【図５】
2006511833.tif 000007
【図６】
2006511833.tif 000008
【図７】
2006511833.tif 000009
【図８】
2006511833.tif 000010
【図９】
2006511833.tif 000011
【図１０】
2006511833.tif 000012
【図１１】
2006511833.tif 000013
【図１２】
2006511833.tif 000014
【図１３】
2006511833.tif 000015
【図１４ＡＡ】
2006511833.tif 000016
【図１４ＡＢ】
2006511833.tif 000017
【図１４Ｂ】
2006511833.tif 000018
【図１５】
2006511833.tif 000019
【図１６Ａ】
2006511833.tif 000020
2006511833.tif 000021
【図１７Ａ】
2006511833.tif 000022
2006511833.tif 000023
【図１８】
2006511833.tif 000024
【図１９】
2006511833.tif 000025
【手続補正書】
【提出日】平成16年11月18日(2004.11.18)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数の反復工程を有する反復方法を用いて、モジューロ（Ｎ）に基づいて乗数（Ｍ）と被乗数（Ｃ）との乗算を計算するための、乗数（Ｍ）、被乗数（Ｃ）、および、法（Ｎ）をパラメータとする暗号計算の範囲内で設定される装置であって、
乗算ルックアヘッドシフト値（ｓｍ）を得るために、乗算ルックアヘッドアルゴリズムを用いて現在の反復工程の乗数のけたを調べるための手段（１００）と、
より上位のビットに中間結果シフト値（ｓｚ）だけシフトされた、現在の反復工程の先に行われた反復工程から供給された中間結果が、最上位のビットを有し、上記ビットの有意性が、先に行われた反復工程から供給された中間結果の最上位のビットよりも、モジューロの最上位のビット（２０６）の有意性に近いように、ゼロよりも大きな上記中間結果シフト値（ｓｚ）を算出するための手段（１０４）と、
中間結果シフト値（ｓｚ）と乗算ルックアヘッドシフト値（ｓｍ）との差である被乗数シフト値（ｓｃ）を計算するための手段（１０６）と、
現在の反復工程の中間結果を得るために、中間結果シフト値（ｓｚ）にしたがってシフトされた中間結果、被乗数シフト値（ｓｃ）にしたがってシフトされた被乗数（Ｃ）およびモジューロを用いて、３オペランド演算を実行するための手段（１０８、１１２）とを備えた、装置。
【請求項２】
さらに、上記モジューロ（Ｎ）を格納するためのモジューロレジスタ（２００）を備え、上記モジューロの最上位のビット（２０６）がモジューロレジスタ（Ｎ）の所定のレジスタ位置に存在するように、上記モジューロが上記レジスタ内に配置されている、請求項１に記載の装置。
【請求項３】
上記所定のレジスタ位置が、上記モジューロレジスタ（２００）の最上位レジスタ位置である、請求項２に記載の装置。
【請求項４】
上記モジューロレジスタ（２００）は、上記モジューロ（Ｎ）のけた数よりも多くの記憶位置を有するように、上記モジューロレジスタの大きさが規定され、上記モジューロの最下位のビット（２０８）よりも低い価数を有する上記モジューロレジスタ（Ｎ）の記憶位置がアンダーフローバッファ（２１０）である、請求項２または３に記載の装置。
【請求項５】
上記モジューロ（Ｎ）を格納するためのモジューロレジスタ（２００）と、反復工程の中間結果を格納するための中間結果レジスタ（２０４）と、被乗数（Ｃ）を格納するための被乗数レジスタ（Ｃ）とを備え、
上記モジューロは、上記モジューロレジスタに固定的に配置されており、
上記中間結果および上記被乗数は、それらの各レジスタ内にて、シフトするための各手段（１０８ａ、１０８ｂ）によってシフト可能となっている、請求項１〜４のいずれか１項に記載の装置。
【請求項６】
上記中間結果および被乗数をシフトするための手段（１０８）は、
上記中間結果をより上位の価数に最大シフト量（Ｚｓｈ）までシフトするために、および、上記被乗数を、より上位または下位の価数に最大被乗数シフト量（Ｃｓｈ）までシフトするために形成されている、請求項１〜５のいずれか１項に記載の装置。
【請求項７】
上記最大中間結果シフト量（Ｚｓｈ）は、最大被乗数シフト量（Ｃｓｈ）よりも大きいものである、請求項６に記載の装置。
【請求項８】
上記中間結果シフト値（ｓｚ）を決定するための手段（１０４）は、
上記中間結果シフト値（ｓｚ）を、先に行われた反復工程のシフトされた中間結果の最上位のビットの価数がモジューロの最上位のビット（２０６）の価数と同じであるような大きさにするために形成されている、請求項１〜７のいずれか１項に記載の装置。
【請求項９】
上記中間結果シフト値（ｓｚ）を決定するための手段（１０４）は、
上記中間結果シフト値（ｓｚ）を、最大中間結果シフト量（Ｚｓｈ）、および先に行われた反復工程の中間結果をシフトする必要がある値の最小値に等しくして、
先に行われた反復工程における値がシフトされた中間結果の、最上位のビットの有意性が、モジューロの最上位のビット（２０６）と同じになっているように形成されている、請求項７に記載の装置。
【請求項１０】
上記中間結果シフト値を算出するための手段（１０４）は、
中間結果シフト値が最大中間結果シフト量（Ｚｓｈ）によって制限されている場合に、上記３オペランド加算を実行するための手段（１１２）が上記反復工程において上記モジューロの考慮を省かせる還元パラメータ（ｖｎ）を決定するように形成されている、請求項８または９に記載の装置。
【請求項１１】
上記被乗数シフト値（ｓｃ）を計算するための手段（１０６）は、
被乗数シフト値（ｓｃ）を最大被乗数シフト量（Ｃｓｈ）に制限するために、および、制限した場合に、上記中間結果シフト値が（ｓｍ＋最大被乗数シフト量（Ｃｓｈ））と同じであるように、手段（１０４）によって決定された中間結果シフト値（ｓｚ）を調節するために、および、上記のように制限した場合に、この反復工程において手段（１１２）がモジューロを考慮せず３オペランド加算を実行させる還元パラメータを決定するように形成されている、請求項６〜１０のいずれか１項に記載の装置。
【請求項１２】
複数の反復工程を有する反復方法を用いて、モジューロ（Ｎ）に基づいて乗数（Ｍ）と被乗数（Ｃ）との乗算を計算するために設定されている装置において実行される方法であって、
上記方法は、暗号計算の各パラメータである上記乗数（Ｍ）、上記被乗数（Ｃ）、および、上記モジューロ（Ｎ）により、上記暗号計算の範囲内で実行されるものであり、
乗算ルックアヘッドシフト値（ｓｍ）を得るために、乗算ルックアヘッドアルゴリズムを用いて現在の反復工程の乗数のけたを調べるステップ（１００）と、
より上位のビットに中間結果シフト値（ｓｚ）だけシフトされた、現在の反復工程の先に行われた反復工程から供給された中間結果が、最上位のビットを有し、上記ビットの有意性が、先に行われた反復工程から供給された中間結果の最上位のビットよりも、モジューロの最上位のビット（２０６）の有意性に近いように、ゼロよりも大きな中間結果シフト値（ｓｚ）を決定する（１０４）ステップと、
中間結果シフト値（ｓｚ）と乗算ルックアヘッドシフト値（ｓｍ）との差である被乗数シフト値（ｓｃ）を計算する（１０６）ステップと、
現在の反復工程の中間結果を得るために、中間結果シフト値（ｓｚ）にしたがってシフトされた中間結果と、被乗数シフト値（ｓｃ）にしたがってシフトされた被乗数（Ｃ）およびモジューロとを用いて、３オペランド演算を実行する（１０８、１１２）ステップとを有する、方法。
【請求項１３】
請求項１２に記載の方法を実行するためのプログラムコードを有し、
上記プログラムコードがコンピュータにおいて実行可能に記載されている、コンピュータプログラム。
【国際調査報告】
2006511833.tif 000026
2006511833.tif 000027
2006511833.tif 000028
2006511833.tif 000029
2006511833.tif 000030
2006511833.tif 000031
2006511833.tif 000032
2006511833.tif 000033
2006511833.tif 000034
2006511833.tif 000035