(57)【要約】【課題】回路規模あたりの処理性能が最適化されており、ｔの計算によって余分な遅延が発生しない剰余演算装置。【解決手段】剰余演算装置１４は、積和回路３２を具備する複数の処理ユニット３１で順次連続的に処理させてパイプライン処理を行い、このパイプライン処理を繰り返し実行する。例えば、Ｎ（０）ｔ（２）の実行にあたり、Ｎ（１）ｔ（１）とｘ（０）ｙ（２）が間に合わないから、パイプライン処理とは別のｔ計算部４０でＮ（１）ｔ（１）＋ｘ（０）ｙ（２）を前倒しで計算し、ｔ（２）を前倒しで求める。このｔ（２）を用いて、Ｎ（０）ｔ（２）の実行を行う。処理ユニット３１の数が法Ｎのワード数より少ない場合には、各処理ユニット３１で被演算子の連続する複数ワードの処理を均等に行う。【選択図】    図５
2004280036.tif 000002
【特許請求の範囲】
【請求項１】
積和回路を有する複数の処理ユニットによるパイプライン処理を所定回実施し剰余を求める演算手段と、
あるパイプライン処理の前に、該あるパイプライン処理の一つ前のパイプライン処理においてある処理ユニットの処理結果に対して所定の演算を施し、該あるパイプライン処理の開始時に、該所定の演算の演算結果を該あるパイプライン処理の初段の処理ユニットへ供給する計算手段と、
を具備する剰余演算装置。
【請求項２】
前記各処理ユニットは剰余演算における２種類の処理を１回ずつ交互に実行する１個の乗算器を具備する請求項１記載の剰余演算装置。
【請求項３】
積和回路を有し、途中結果に依存した変数を用いてパイプライン処理を行い剰余を求める複数の処理ユニットと、
積和回路を有し、前記変数を前記途中結果が求められる前に求める１個の計算部と、
を具備する剰余演算装置。
【請求項４】
前記各処理ユニットは剰余演算における２種類の処理を１回ずつ交互に実行する１個の乗算器を具備する請求項３記載の剰余演算装置。
【請求項５】
前記計算部は剰余演算の最小動作周期である２クロックのうち、第１クロック目で前記変数の計算を行い、第２クロック目で前記変数を出力する請求項２または請求項３に記載の剰余演算装置。
【請求項６】
整数ａ，ｅ，Ｎに基づいてべき乗剰余ａｅ  ｍｏｄ  Ｎを求めるべき乗剰余演算装置において、
積和回路を有する複数の処理ユニットによるパイプライン処理を所定回実施し剰余を求める基本演算手段と、あるパイプライン処理の前に、該あるパイプライン処理の一つ前のパイプライン処理においてある処理ユニットの処理結果に対して所定の演算を施し、該あるパイプライン処理の開始時に、該所定の演算の演算結果を該あるパイプライン処理の初段の処理ユニットへ供給する計算手段とを具備する剰余演算部と、
前記パイプライン処理を所定回実施した後の前記剰余演算部の演算結果が整数Ｎより大きいか同じ場合には該演算結果から整数Ｎを減した値を、また該演算結果が整数Ｎより小さい場合には該演算結果を、前記べき乗剰余として出力する判定手段と、
を具備するべき乗剰余演算装置。
【請求項７】
積和回路を有する複数の処理ユニットによるパイプライン処理を所定回実施し剰余を求め、
あるパイプライン処理の前に、該あるパイプライン処理の一つ前のパイプライン処理においてある処理ユニットの処理結果に対して所定の演算を施し、該あるパイプライン処理の開始時に、該所定の演算の演算結果を該あるパイプライン処理の初段の処理ユニットへ供給する剰余演算方法。
【請求項８】
積和回路を有する複数の処理ユニットに、途中結果に依存した変数を用いてパイプライン処理を行わせ剰余を求めさせ、
積和回路を有する１個の計算部に、前記変数を前記途中結果が求められる前に求めさせる剰余演算方法。
【請求項９】
積和回路を有する複数の処理ユニットによるパイプライン処理を所定回実施し剰余を求める基本演算手段と、
剰余演算の法サイズと処理ユニット数に応じて前記基本演算手段を制御する制御手段と、
を具備する剰余演算装置。
【請求項１０】
前記各処理ユニットは剰余演算における２種類の処理を前記法サイズと処理ユニット数に応じた回数ずつ交互に実行する１個の乗算器を具備する請求項９載の剰余演算装置。
【請求項１１】
前記制御手段は、前記法サイズと処理ユニット数に応じて、前記各処理ユニットの負荷が均等化するように被演算子の連続した数ワードずつを下位ユニットから割り振り、パイプライン処理中は前記基本演算手段の前記処理ユニットに演算の桁が合うよう被演算子を供給し演算を行わせる請求項９記載の剰余演算装置。
【請求項１２】
整数ａ，ｅ，Ｎに基づいてべき乗剰余ａｅ  ｍｏｄ  Ｎを求めるべき乗剰余演算装置において、
積和回路を含む複数の処理ユニットによるパイプライン処理を所定回実施し剰余を求める基本演算手段と、剰余演算の法サイズと処理ユニット数に応じて前記基本演算手段を制御する制御手段とを具備する剰余演算部と、
前記パイプライン処理を所定回実施した後の前記剰余演算部の演算結果が整数Ｎより大きいか同じ場合には該演算結果から整数Ｎを減した値を、また該演算結果が整数Ｎより小さい場合には該演算結果を、前記べき乗剰余として出力する判定手段と、
を具備するべき乗剰余演算装置。
【請求項１３】
積和回路を有する複数の処理ユニットにパイプライン処理を所定回実施させ剰余を求めさせ、
剰余演算の法サイズと処理ユニット数に応じて前記各処理ユニットの負荷が均等化するように被演算子の連続した数ワードずつを下位ユニットから割り振り、
各処理ユニットは剰余演算における２種類の処理を前記法サイズと処理ユニット数に応じた回数ずつ交互に実行する剰余演算方法。
【請求項１４】
積和回路を有する複数の処理ユニットにパイプライン処理を所定回実施させ剰余を求めさせ、
剰余演算の法サイズと処理ユニット数に応じて前記各処理ユニットの負荷が均等化するように被演算子の連続した数ワードずつを下位ユニットから割り振り、
パイプライン処理中は前記処理ユニットに演算の桁が合うよう被演算子を供給する剰余演算方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、パイプライン処理により大きな整数の演算を高速に計算する剰余演算装置、剰余演算方法、及びべき乗剰余演算装置に関する。
【０００２】
【従来の技術】
ＲＳＡ公開鍵暗号方式で用いられる“べき乗剰余演算”の実装方法として、Ｍｏｎｔｇｏｍｅｒｙによって提案されたモンゴメリ乗算と呼ばれる剰余付き乗算を繰り返し実行する方法が知られている（例えば、非特許文献１参照）。
【０００３】
このモンゴメリ乗算は、剰余付き乗算を加算と乗算で代替して実行する手法であり、剰余乗算の効率的な実装が可能である。モンゴメリ乗算ではｘ・ｙ  ｍｏｄ  Ｎを計算する代わりにｘ・ｙ＋Ｎ・ｔという演算を実行する。ここで、ｘ，ｙ，Ｎ，ｔは大きな整数である。
【０００４】
モンゴメリ乗算の高速実装法の従来方式は、整数をバイナリ表現した下でモンゴメリ乗算を行う方式と、整数をＲＮＳ（Ｒｅｓｉｄｕｅ  Ｎｕｍｂｅｒ  Ｓｙｓｔｅｍ：剰余系）表現した下でモンゴメリ乗算を行う方式に大きく分けることができる。
【０００５】
バイナリ表現の下で行う方式では、ｘ，ｙ，Ｎ，ｔをそれぞれワード単位に分割し（例えば、ｘをｒビットずつ下位からｘ（０），…，ｘ（ｍ−１）のｍワードに分割する。ｙ，Ｎ，ｔについても同様）、その下でワード単位の乗算を複数個の処理ユニットでパイプライン処理することでモンゴメリ乗算を行う。すなわち、ｘ（ｉ）ｙ（ｊ）およびＮ（ｉ）ｔ（ｊ）の乗算とそれらの総和演算を桁合せや桁上がりを考慮しながらｕ個のユニットに割り振って実行する。その際、ｔ（ｊ）が演算途中結果に依存して決まる変数であることがモンゴメリ乗算のアルゴリズム上のポイントであり、ここに実装上の工夫が要求される（非特許文献２、非特許文献３、特許文献１参照）。
【０００６】
非特許文献２では、ｘ（ｉ）ｙ（ｊ）＋Ｎ（ｉ）ｔ（ｊ）の演算をユニットｉにおいて１クロックで実行する目的で、各ユニットが乗算器を２個有するものを開示している。しかし、ｔ（ｊ）の計算との兼ね合いから、２クロックに１回ずつ待ち状態が発生し、さらに、ｔ（ｊ）の計算のために余分な乗算が発生し、それがパイプライン処理による本計算に遅延を与える（クリティカルパスを長くする）結果となっている。
【０００７】
特許文献１では、ｘ（ｊ）ｙ（ｉ＋１）＋Ｎ（ｊ＋１）ｔ（ｉ）の演算をユニットｉにおいて１クロックで実行する目的で、非特許文献２と同様に各ユニットが乗算器を２個有するものを開示している。特許文献１によれば、非特許文献２のような待ち状態は発生しないアルゴリズムとなっているが、その代わりｔ（ｉ）の計算用に３個目の乗算器を各ユニットが具備する。このｔ（ｉ）の計算には、１つのユニットがモンゴメリ乗算で要する全クロック（このクロック数はワード長と同じオーダーを持つ）のうち１クロックしか要しないため、回路規模（乗算器の個数）あたりの処理性能が最適化されていないハードウェア構成となっている。さらに非特許文献２と同様に、ｔ（ｉ）の計算ために余分な乗算が発生し、それがパイプライン処理による本計算に遅延を与える結果となっている。
【０００８】
また、非特許文献２、非特許文献３では、モンゴメリ乗算を高速に実行するために、法Ｎのワード数と同数もしくはそれ以上の処理ユニットを用いて演算を行っている。通常、ＲＳＡ暗号では法Ｎのサイズとして１０２４ビットなどの大きな整数が用いられ、１ワード長ｒとしては３２ビットなどの値を用いる。よって、非特許文献２、非特許文献３を実装する場合には、処理ユニット数も多くなり、それに伴いハードウェア規模も大きくなるという問題がある。現実にはある程度処理効率の低下を許容しても、ハードウェア規模を削減したいという要求も考えられる。つまり、ワード長以下の処理ユニット数でモンゴメリ乗算を行わねばならない。これは１処理ユニットに複数ワードの演算を割り振ることにより可能であるが、各ワード間には後述する桁上がりや累積計算などの依存関係が数多く存在するため、単純には減らした処理ユニット数に比例する以上の効率の低下が起こることが問題となる。
【０００９】
整数をＲＮＳ表現した下でモンゴメリ乗算を行う方式については、各基底ごとの演算を複数の処理ユニットで並列に行う方式がある（非特許文献４参照）。非特許文献４に記載の方式では、各基底の演算を複数の処理ユニットに分散して処理させるが、基底ごとの演算の独立性が高いため、処理ユニット数を基底数以下に削減した場合でも、それに比例した効率の低下のみしか起こらないという利点を持つ。しかしながら、各処理ユニット内にＲＯＭを設けねばならず、回路規模が大きくなるという欠点があった。
【００１０】
【特許文献１】
特開平５−３２４２７７号公報
【００１１】
【非特許文献１】
ピー・エル・モンゴメリー（Ｐ．  Ｌ．  Ｍｏｎｔｇｏｍｅｒｙ）著、「モジュラー・マルチプリケーション・ウィズアウト・トライアル・ディビジョン（Ｍｏｄｕｌａｒ  ｍｕｌｔｉｐｌｉｃａｔｉｏｎ  ｗｉｔｈｏｕｔ  ｔｒｉａｌ  ｄｉｖｉｓｉｏｎ）」Ｍａｔｈｅｍａｔｉｃｓ  ｏｆ  Ｃｏｍｐｕｔａｔｉｏｎ、Ｖｏｌ．  ４４、Ｎｏ．  １７０、ｐｐ．  ５１９−５２１、Ａｐｒｉｌ  １９８５
【００１２】
【非特許文献２】
シー・デー・ウォルター（Ｃ．  Ｄ．  Ｗａｌｔｅｒ）著、「アン・オーバービュー・オブ・モンゴメリーズ・マルチプリケーション・テクニック：ハウ・トゥ・メイク・イット・スモーラー・アンド・ファースター（Ａｎ  Ｏｖｅｒｖｉｅｗ  ｏｆ  Ｍｏｎｔｇｏｍｅｒｙ’ｓ  Ｍｕｌｔｉｐｌｉｃａｔｉｏｎ  Ｔｅｃｈｎｉｑｕｅ：  Ｈｏｗ  ｔｏ  ｍａｋｅ  ｉｔ  Ｓｍａｌｌｅｒ  ａｎｄ  Ｆａｓｔｅｒ）」Ｐｒｏｃ．  Ｗｏｒｋｓｈｏｐ  ｏｎ  Ｃｒｙｐｔｏｇｒａｐｈｉｃ  Ｈａｒｄｗａｒｅ  ａｎｄ  Ｅｍｂｅｄｄｅｄ  Ｓｙｓｔｅｍｓ、ＣＨＥＳ  ’９９、ＬＮＣＳ、Ｖｏｌ．  １７１７、ｐｐ．  ８０−９３、Ｓｐｒｉｎｇｅｒ−Ｖｅｒｌａｇ、１９９９
【００１３】
【非特許文献３】
岩村等著、「べき乗剰余に適したモンゴメリ法による剰余乗算法とそれを実現するシストリアックアレー」、電子情報通信学会論文誌Ａ、Ｖｏｌ．  Ｊ７６−Ａ、Ｎｏ．  ８、ｐｐ．  １２１４−１２２３、１９９３
【００１４】
【非特許文献４】
川村等（Ｓ．  Ｋａｗａｍｕｒａ，  Ｍ．  Ｋｏｉｋｅ，  Ｆ．  Ｓａｎｏ  ａｎｄ  Ａ．  Ｓｈｉｍｂｏ）著、「コックス・ロウアー・アーキテクチャ・フォオ・ファスト・パラレル・モンゴメリ・マルチプリケーション（Ｃｏｘ−Ｒｏｗｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ  ｆｏｒ  Ｆａｓｔ  Ｐａｒａｌｌｅｌ  Ｍｏｎｔｇｏｍｅｒｙ  Ｍｕｌｔｉｐｌｉｃａｔｉｏｎ）」Ａｄｖａｎｃｅｓ  ｉｎ  Ｃｒｙｐｔｏｌｏｇｙ−Ｅｕｒｏｃｒｙｐｔ  ２０００、ＬＮＣＳ  １８０７、ｐｐ５２３−５３８、２０００
【００１５】
【発明が解決しようとする課題】
上述したようにモンゴメリ乗算では、演算の途中結果を用いてｔを計算しているが、このｔの計算はパイプライン処理による本計算に遅延を与えないように実行されることが望ましい。しかしながら、上述した従来の技術では、そのようなアルゴリズムとハードウェア構成が実現されておらず、ｔの計算のために余分な遅延が生じるという問題が生じていた。
【００１６】
非特許文献２では、ｔの計算のためにパイプライン処理による本計算に２クロックに１回ずつの待ち状態が生じ、また、特許文献１では、全ユニットにｔ計算用の余分な乗算器を要するために、何れも回路規模あたりの処理性能が最適化されていないアルゴリズムおよびハードウェア構成となっていた。
【００１７】
また、モンゴメリ乗算の実装において、バイナリ表現を用いた方式では、Ｎのワード数と同数もしくはそれ以上の処理ユニットを具備した装置によりモンゴメリ乗算を実施しているが、現実の実装を考えた場合、ワード数と同数程度の処理ユニットを用意するのは難しいと考えられるため、処理速度の低下をある程度許容してもハードウェア規模を削減したいという要求がある。しかし、単純に処理ユニット数を減らしてモンゴメリ乗算を行おうとした場合には、削減した処理ユニット数に比例した以上の効率の低下が起こるという問題がある。
【００１８】
これに対してＲＮＳ表現を用いた方式では、基底ごとの演算の独立性が高いため、処理ユニット数を基底数以下に減らした場合でもそれに比例した効率の低下のみしか起こらないが、処理ユニットあたりの回路規模が大きくなるという欠点がある。
【００１９】
本発明は、上記問題点を鑑みなされたものであって、複数ユニットのパイプライン処理によるモンゴメリ乗算において、回路規模あたりの処理性能が最適化されており、かつ、ｔの計算によって余分な遅延が発生しない剰余演算装置、剰余演算方法、及びべき乗剰余演算装置を提供することを目的とする。
【００２０】
また、本発明の他の目的は、複数ユニットのパイプライン処理によるモンゴメリ乗算において、処理ユニット数をワード数以下に減らした場合でも、減らした処理ユニット数に比例した速度の低下のみしか起こらず、回路規模あたりの処理速度で定義される装置の効率がユニット数によらず一定になり、ＲＳＡ暗号の処理等に用いられるのに適した剰余演算装置、剰余演算方法、及びべき乗剰余演算装置を提供することである。
【００２１】
【課題を解決するための手段】
本発明の一態様による剰余演算装置は、積和回路を有する複数の処理ユニットによるパイプライン処理を所定回実施し剰余を求める演算手段と、あるパイプライン処理の前に、該あるパイプライン処理の一つ前のパイプライン処理においてある処理ユニットの処理結果に対して所定の演算を施し、該あるパイプライン処理の開始時に、該所定の演算の演算結果を該あるパイプライン処理の初段の処理ユニットへ供給する計算手段と、を具備する。
【００２２】
本発明の他の態様による剰余演算装置は、積和回路を有し、途中結果に依存した変数を用いてパイプライン処理を行い剰余を求める複数の処理ユニットと、積和回路を有し、前記変数を前記途中結果が求められる前に求める１個の計算部と、を具備する。
【００２３】
本発明の他の態様によるべき乗剰余演算装置は、整数ａ，ｅ，Ｎに基づいてべき乗剰余ａｅ  ｍｏｄ  Ｎを求めるべき乗剰余演算装置において、積和回路を有する複数の処理ユニットによるパイプライン処理を所定回実施し剰余を求める基本演算手段と、あるパイプライン処理の前に、該あるパイプライン処理の一つ前のパイプライン処理においてある処理ユニットの処理結果に対して所定の演算を施し、該あるパイプライン処理の開始時に、該所定の演算の演算結果を該あるパイプライン処理の初段の処理ユニットへ供給する計算手段とを具備する剰余演算部と、前記パイプライン処理を所定回実施した後の前記剰余演算部の演算結果が整数Ｎより大きいか同じ場合には該演算結果から整数Ｎを減した値を、また該演算結果が整数Ｎより小さい場合には該演算結果を、前記べき乗剰余として出力する判定手段と、を具備する。
【００２４】
本発明の他の態様によるべき乗剰余演算装置は、整数ａ，ｅ，Ｎに基づいてべき乗剰余ａｅ  ｍｏｄ  Ｎを求めるべき乗剰余演算装置において、積和回路を含む複数の処理ユニットによるパイプライン処理を所定回実施し剰余を求める基本演算手段と、剰余演算の法サイズと処理ユニット数に応じて前記基本演算手段を制御する制御手段とを具備する剰余演算部と、前記パイプライン処理を所定回実施した後の前記剰余演算部の演算結果が整数Ｎより大きいか同じ場合には該演算結果から整数Ｎを減した値を、また該演算結果が整数Ｎより小さい場合には該演算結果を、前記べき乗剰余として出力する判定手段と、を具備する。
【００２５】
【発明の実施の形態】
以下、図面を参照して本発明による剰余演算装置、剰余演算方法、及びべき乗剰余演算装置の実施の形態を説明する。
【００２６】
（第１の実施の形態）
図１は本発明の第１の実施の形態に係る“べき乗剰余”演算装置の構成を示す図である。
【００２７】
ＲＳＡ暗号など公開鍵暗号方式の多くでは、その処理過程において“べき乗剰余”演算ｂ＝ａｅ  ｍｏｄ  Ｎ（ｂ、ａ、ｅは整数）が用いられる。“べき乗剰余”演算ｂ＝ａｅ  ｍｏｄ  Ｎは、剰余乗算の繰り返しにより実装される。また、剰余乗算の代替計算法としてはモンゴメリ乗算が知られている。モンゴメリ乗算は、整数ｘ，ｙ，Ｎ（ｘ＜Ｎ，ｙ＜Ｎ）の入力に対して、ｗ＝ｘｙＲ−１  ｍｏｄ  Ｎ、またはｗ＝ｘｙＲ−１  ｍｏｄ  Ｎ＋Ｎ（すなわちｗ＜２Ｎ）を出力するものであり、ｗ＝（ｘｙ＋Ｎ［ｘｙ（−Ｎ−１）  ｍｏｄ  Ｒ］）／Ｒによって演算される。Ｒはモンゴメリ定数と呼ばれ、Ｒ＞Ｎ、ｇｃｄ（Ｒ，Ｎ）＝１を満たす任意の整数である。ｇｃｄは最大公約数を示す。一般には、Ｒは上式の剰余算と除算が簡単になるように選ばれるものであり、二進数表現ではＲを２の“べき乗”にとることで、剰余算を上位ビットの切り捨て、除算をシフト演算で実現する。
【００２８】
モンゴメリ乗算を繰り返し用いて“べき乗剰余”演算を行う方法については、バイナリ法やウィンドウ法などの手法が知られている。ここでは一例として、バイナリ法による“べき乗剰余”演算ｂ＝ａｅ  ｍｏｄ  Ｎのアルゴリズムを示す。
【００２９】
バイナリ法による“べき乗剰余”演算アルゴリズム
2004280036.tif 000003
ｇは指数ｅのビット長、ｅｉはｅのｉ番目のビットの値を表す。ただし、最上位ビットｅｇは１とする。ＭＭ（ｘ，ｙ，Ｎ）はモンゴメリ乗算（ｘｙ＋Ｎ［ｘｙ（−Ｎ−１）  ｍｏｄ  Ｒ］）／Ｒを示している。
【００３０】
図１は、上記で説明したバイナリ法による“べき乗剰余”演算アルゴリズムを実行する“べき乗剰余”演算装置の機能ブロック構成を示す。
【００３１】
入出力部１１は、“べき乗剰余”演算装置１の外部、例えばパーソナルコンピュータ本体とのデータの入出力を行うインタフェースであって、外部からａ、ｅ、Ｎを入力し、また外部へそれらの入力に対する演算結果ｂを出力する。
【００３２】
制御部１２は、“べき乗剰余”演算装置１の全体の制御を司るものであり、バイナリ法による“べき乗剰余”演算アルゴリズムに基づいて、装置１内の個々の部分を制御する。制御部１２は、入出力部１１からの入力Ｎを格納するＮ用レジスタ２１と、入出力部１１からの入力Ｎとこの“べき乗剰余”演算装置１のワード幅ｒビット（装置固有値）とに基づいて、モンゴメリ定数Ｒを算出するＲ算出部２２とを具備する。ワード幅ｒ（ビット）はＲ算出部２２に格納される。制御部１２は、入出力部１１から入力された指数ｅを格納するｅ用レジスタ２３と、入力された指数ｅのビット長ｇを求めて、ビット長ｇから１減算した値をｉの初期値として出力するビット長算出部２４と、ビット長算出部２４からの初期値ｉを１づつカウントダウンし、ｅ用レジスタ２３に格納されるｅを参照し、ｉ番目のビットが１（ｅｉ＝１）であるか否かを判定するｅｉ判定部２５とを具備する。
【００３３】
制御部１２は、後述の予備演算部１３からのａ’を格納するａ’用レジスタ２６と、ａ’を初期値とし、後述の剰余演算装置１４で演算されたｂ’を更新するように格納するｂ’用レジスタ２７と、ｅｉ判定部２５の結果に基づき、ａ’用レジスタ２６、またはｂ’用レジスタ２７に格納されるａ’、またはｂ’を選択的に剰余演算装置１４へ出力するセレクタ２８とを具備する。制御部１２は、剰余演算装置１４で計算されたＭＭ（ｂ’，１，Ｎ）の演算結果がｂ’用レジスタ２７に格納されると、演算結果ｂ’とＮ用レジスタ２１に格納されるＮとの大小関係を判定し、ｂ’≧Ｎと判定した際にはｂ’からＮを減算した値を演算結果ｂとし、ｂ≧Ｎでないと判定した際にはｂ’をｂとし、入出力部１１へ出力するｂ判定部２９を具備する。
【００３４】
予備演算部１３は、剰余算を行うものであって、入出力部１１からのａと、Ｎ用レジスタ２１からのＮと、Ｒ算出部２２で演算されたモンゴメリ定数Ｒとによって剰余算ａ’＝ａＲ  ｍｏｄ  Ｎを行い、ａ’を求める。
【００３５】
剰余演算装置１４は、Ｎ用レジスタ２１からのＮとｂ’用レジスタ２７からのｂ’とを入力し、積和演算を繰り返し用いて新たなｂ’（＝ＭＭ（ｂ’，ｂ’，Ｎ））を求める。剰余演算装置１４は、ｅｉ＝１のとき、Ｎ用レジスタ２１からのＮとｂ’用レジスタ２７からのｂ’とａ’用レジスタ２６からのａ’とを入力し、積和演算を繰り返し用いて新たなｂ’（＝ＭＭ（ｂ’，ａ’，Ｎ））を求める。更に、剰余演算装置１４は、Ｎ用レジスタ２１からのＮとｂ’用レジスタ２７からのｂ’とを入力し、積和演算を繰り返し用いて新たなｂ’（＝ＭＭ（ｂ’，１，Ｎ））を求める。求められた新たなｂ’は、ｂ’用レジスタ２７へ出力され、ｂ’用レジスタ２７は更新される。なお、本実施の形態では、モンゴメリ乗算におけるモンゴメリ定数Ｒに関する演算を下位（ｎ＋１）ワード（後述するようにｎは法Ｎのワード数である）の切り捨てとして実現するため、データＲ自体を剰余演算装置１４で取り扱う必要がなく、図１では剰余演算装置１４へのＲの入力の明示は省略した。剰余演算装置１４の内部の詳細な説明は後述する。
【００３６】
Ｎｉｎｖ演算部１５は、Ｎ用レジスタ２１からのＮと、Ｒ算出部２２と同様にＮｉｎｖ演算部１５の内部に備える“べき乗剰余”演算装置１のワード幅ｒ（ビット）（装置固有値）とによって、剰余算−Ｎ−１  ｍｏｄ  ２ｒ、または−Ｎ（０）−１ｍｏｄ  ２ｒを行い、Ｎｉｎｖを求める。
【００３７】
本実施の形態の“べき乗剰余”演算装置１は以上のように構成したが、これに限るものではない。例えば、“べき乗剰余”演算装置１の外部でｅのビット長を算出して“べき乗剰余”演算装置１へ与えるようにすれば、ビット長算出部２４の代わりに−１を行う減算部を持てば良い。また、“べき乗剰余”演算装置１の外部でモンゴメリ定数Ｒを算出して“べき乗剰余”演算装置１へ与えるようにすれば、Ｒ算出部２２の代わりにＲを格納するＲ用レジスタを持てば良い。さらに、ウィンドウ法を適用した場合には、別構成の“べき乗剰余”演算装置となることは当然であり、要は、剰余演算装置１４へ適切な変数を与えるような構成であれば、いずれの構成であっても良い。
【００３８】
次に、本実施の形態の剰余演算装置１４について詳細に説明する。モンゴメリ乗算を行う剰余演算装置１４の機能ブロックの構成について説明する前に、幾つかの補足説明を行う。
【００３９】
まず、整数の基数表現について説明する。整数ｘは、基数を２ｒとした場合、次式のように表現できる。
【００４０】
ｘ＝ｘ（０）＋ｘ（１）・２ｒ＋ｘ（２）・２２ｒ＋  …  ＋ｘ（ｍ−１）・２（ｍ−１）ｒ
ｍは１ワードをｒビットとした場合のｘのワード長であり、ｘ（ｉ）がｉ番目のワードであり、ｘ（０）を最下位ワード、ｘ（ｍ−１）を最上位ワードとしている。つまり、整数ｘは、（ｘ（０），ｘ（１），ｘ（２），…，ｘ（ｍ−１））として扱うことができる。なお、整数ｙ，Ｎ，ｗなどの他の整数も同様にして扱うことができる。以下で説明する剰余演算装置１４の基本演算ビット幅は、この基数表現による１ワードのビット幅ｒに一致する。
【００４１】
次に、モンゴメリ定数は、Ｒ≧４Ｎを満たすものを採用する。入力ｘ（＜２Ｎ），ｙ（＜２Ｎ）に対するモンゴメリ乗算の出力がｗ（＜２Ｎ）となる。よって、モンゴメリ乗算を繰り返し実行する際に、得られた演算結果ｗをそのまま次のモンゴメリ乗算の入力データｘ，ｙとして用いることが可能になる。本実施の形態におけるモンゴメリ乗算の変数に対する条件は以下のとおりである。
【００４２】
法Ｎ：ｎワード（ワード幅はｒビット）、ｇｃｄ（Ｒ，Ｎ）＝１より奇数
モンゴメリ定数：Ｒ＝２（ｎ＋１）ｒ  （ｒ≧２）
入力データ：ｘ（＜２Ｎ），ｙ（＜２Ｎ）
出力データ：ｗ＜２Ｎ
先で説明したモンゴメリ乗算ｗ＝（ｘｙ＋Ｎ［ｘｙ（−Ｎ−１）  ｍｏｄ  Ｒ］）／Ｒは、ｔ＝ｘｙ（−Ｎ−１）  ｍｏｄ  Ｒとおくことにより、モンゴメリ乗算ｗ＝（ｘｙ＋Ｎｔ）／Ｒを実行すると表現できる。基数表現に基づくモンゴメリ乗算は、次のアルゴリズムで演算される。
【００４３】
モンゴメリ乗算アルゴリズム
ｗ＝０
ｆｏｒ  ｊ＝０，…，ｎ
ｗ＝ｗ＋ｘｙ（ｊ）
ｔ（ｊ）＝ｗ（０）Ｎｉｎｖ  ｍｏｄ  ２ｒ
ｗ＝（ｗ＋Ｎｔ（ｊ））／２ｒ
ｎｅｘｔ  ｊ
Ｎｉｎｖは、次式によって事前に計算される値である。
【００４４】
Ｎｉｎｖ＝−Ｎ−１  ｍｏｄ  ２ｒ＝−Ｎ（０）−１  ｍｏｄ  ２ｒ    （１）
上記のモンゴメリ乗算アルゴリズムは、図２のような単純な積算と加算の繰り返し処理を行うこととなる。つまり、ループｊでは、ｘｙ（ｊ）、Ｎｔ（ｊ）を求めて、ループｊ−１までに求まった全てのｘｙ（ｋ）、Ｎｔ（ｋ）（ｋ＝０，…ｊ−１）の総和を求める処理を行って（図示していないが、２ｒで除す）いる。なお、ｘｙ（ｊ）、Ｎｔ（ｊ）の組が昇順に左へシフトしているのは、基数表現によるためである。
【００４５】
ところで、上記モンゴメリ乗算アルゴリズムをハードウェアで並列実装するにあたっては、さらにワード単位の乗算に分割して、各単位ごとに演算し実行することとなる。この分割実行するモンゴメリ乗算アルゴリズムは、分割数をｕとすると、図３のような処理となる。このとき、各分割単位（図３の各セル）で演算した結果、桁上がり（キャリー：図３の矢印）が生じるため、同じ行（ｊが同じもの）の各単位の乗算は同時に処理することができない。つまり、下位の単位から、上位の単位へ順次演算する必要が生じる。
【００４６】
そこで、剰余演算装置１４では、ｕ個の処理単位ユニット（以下、単にユニットと称し、ユニット０〜ユニットｕ−１と書く）を用意し、下位の単位から上位の単位へ順次ユニット間をシフトしながら処理を行う。これを、ここではパイプライン処理と呼ぶ。このパイプライン処理によるモンゴメリ乗算アルゴリズムの処理は、図４のような処理となり、各パイプライン処理内では、遅延なく順次演算可能となる。
【００４７】
なお、各パイプライン処理内の最上位の桁上がりは、次パイプライン処理の最終段に影響を与えるが、次パイプライン処理の最終段は、桁上がり時の次タイミングで行うものであるから、タイミング上の問題は生じない。
【００４８】
しかし、各パイプライン処理間では、前のパイプライン処理で演算された演算結果の一部を用いてｔ（ｊ）を得るが、そのｔ（ｊ）を得るために必要な所定演算（後述）が間に合わないため、遅延が生じる。
【００４９】
そこで、本実施の形態の剰余演算装置１４は、ｔ（ｊ）を前倒しで求める処理を別に設けるようにし、パイプライン間での遅延を無くなるようにした。
【００５０】
図５は、この前倒し処理を設けた本実施の形態の剰余演算装置１４の機能ブロックを示す。
【００５１】
剰余演算装置１４は、それぞれが１個の積和回路３２を有するｕ個のパイプライン処理単位ユニット３１からなる基本演算部３０と、１個の積和回路４１を有する１個のｔ計算部４０と、ｕ−１番目のユニット３１で生じた桁上がりを処理するキャリー部５０とから構成される。このように構成された剰余演算装置１４は、ｂ’、ａ’／ｂ’、Ｎを入力し、新たなｂ’を求めて出力する。または、ｂ’、Ｎを入力し、新たなｂ’を求めて出力する。なお、特に図示しないが、ｕ個のパイプライン処理単位ユニット３１には、適宜ＲＡＭ、ＲＯＭを個別に具備してもよいし、基本演算部３０で一括して具備してもよい。また、特に図示しないが、ｔ計算部４０は、ＲＡＭ、ＲＯＭを基本演算部３０と共用してもよいし、基本演算部３０とは別に具備してもよい。また、後述するが、キャリー部５０は、パイプライン処理単位ユニット３１を代わりに設けて、代用しても良い。
【００５２】
ｒ、ｎ、ｕの具体的な値としては、例えば鍵長１０２４ビットのＲＳＡ処理を演算ビット幅３２の回路で実行する場合、本実施の形態によればｒ＝３２、ｎ＝３２、ｕ（＝ｎ＋１）＝３３となる。
【００５３】
次に、各ユニット３１及びｔ計算部４０の構成を説明する前に、本実施の形態で適用のモンゴメリ乗算アルゴリズムについて説明する。
【００５４】
本実施の形態では、ユニット数ｕとｎの関係がｕ＝ｎ＋１の場合を説明する。このｕ（＝ｎ＋１）は、ｎに対して最大のパフォーマンスを実現する最小のユニット数である。なおｔ計算部４０のアルゴリズム上、ｕ≧２とする。
【００５５】
第１の実施の形態で適用のモンゴメリ乗算アルゴリズム
ユニットｉの処理
2004280036.tif 000004
上記において、Ｃ｜｜Ｍ＝＜右辺＞という表記は、右辺の演算結果のビット長がｒ＋ｒ’である場合に、右辺演算結果の下位ｒビットをＭとし、上位ｒ’ビットをＣとすることを表す。すなわち、Ｍはその演算を行っている桁の総和を、Ｃは桁上がり（キャリー）を意味する。上記アルゴリズムでは、キャリーの最大ビット長はｒであり、上位ｒビットをＣとする。また、Ｌ（Ａ）はＡの下位ｒビットを表す。
【００５６】
ｎ＝３、ｕ（＝ｎ＋１）＝４の場合について、第１の実施の形態で適用のモンゴメリ乗算アルゴリズムによるパイプライン処理の流れの具体例を図６に示す。
同図は、ワード単位の乗算がどのユニットのどのクロックで実行されるかを示している。また、実線の矢印は計算された総和（Ｍ（ｘ（ｉ）ｙ（ｊ））、またはＭ（Ｎ（ｉ）ｔ（ｊ）））をどのユニットに入力するかを示し、点線の矢印はキャリー（Ｃ（ｘ（ｉ）ｙ（ｊ））、またはＣ（Ｎ（ｉ）ｔ（ｊ）））をどのユニットに入力するかを示している。図６にはｔ計算部での処理も合わせて示す。
【００５７】
以下、第１の実施の形態で適用のモンゴメリ乗算アルゴリズムについて詳しく説明する。
【００５８】
まず、ユニットｉの処理では、ステップ１のＣ（ｘ（ｉ）ｙ（ｊ））、Ｍ（ｘ（ｉ）ｙ（ｊ））をクロックｉ＋２ｊ時に計算し、ステップ２のＣ（Ｎ（ｉ）ｔ（ｊ））、Ｍ（Ｎ（ｉ）ｔ（ｊ））をクロックｉ＋２ｊ＋１時に計算する。その際、ステップ１の入力データは、Ｃ（ｘ（ｉ−１）ｙ（ｊ））が１クロック前にユニットｉ−１で計算され、Ｍ（Ｎ（ｉ＋１）ｔ（ｊ−１））が同クロック時にユニットｉ＋１で計算される。ステップ２については、Ｃ（Ｎ（ｉ−１）ｔ（ｊ））が１クロック前にユニットｉ−１で計算され、Ｍ（ｘ（ｉ）ｙ（ｊ））が１クロック前にユニットｉで計算される。ステップ２では、ｔ（ｊ）も演算過程の途中結果に依存して決まるデータであり、その演算処理がｔ計算部の処理に従って次のように行われる。
【００５９】
ｔ計算部の処理では、クロック２ｊ−１でステップ１のｖ（ｊ）を計算し、クロック２ｊでステップ２のｔ（ｊ）を計算する。このような２段階の処理を行う理由は次の通りである。ｔ（ｊ）を用いた乗算がパイプライン処理で初めて実行されるのは、クロック２ｊ＋１のユニット０においてである（図６参照）。これに間に合うように、（ａ）１クロック前のクロック２ｊでｔ（ｊ）の計算が完了すること、かつ、（ｂ）１クロック内の遅延（クリティカルパス）をパイプライン処理による本計算の最長パス以下である乗算器１個＋加算器１個に抑えること、を考える。その際、演算途中結果に対するｔ（ｊ）の依存性を次のように考慮しなければならない。
【００６０】
前述の第１の実施の形態で適用のモンゴメリ乗算アルゴリズムによれば、ｔ（ｊ）はｗ（０）から計算される。ｗ（０）は中間結果ｗの最下位ワードであり、ｔ（ｊ）の計算に用いるｗ（０）は次式で与えられる。
【００６１】
ｗ（０）＝Ｌ（［ｚ（０）＋  …  ＋ｚ（ｊ−１）＋ｘ（０）ｙ（ｊ）］／２ｊｒ）
なお、ｚ（ｈ）＝［ｘ（０）ｙ（ｈ）＋Ｎ（０）ｔ（ｈ）］２ｈｒ＋  …  ＋［ｘ（ｈ’）ｙ（ｈ）＋Ｎ（ｈ’）ｔ（ｈ）］２（ｈ＋ｈ’）ｒ
ここで、ｈ＝０，…，ｊ−１、ｈ’＝ｊ−ｈである。例としてｎ＝３の場合を図７に示す。例えば、ｔ（２）の計算に用いる上記ｗ（０）は、図上の太線で囲った各乗算の桁合せと桁上がりを考慮した総和で与えられる。すなわちｔ（ｊ）を計算するには、それ以前に上式に含まれる乗算とそれらの総和演算が実行されている必要がある。
【００６２】
上記の依存性によれば、ｔ（ｊ）の計算に必要な乗算の内、パイプライン処理の最も遅いクロックで実行される演算はＮ（１）ｔ（ｊ−１）とｘ（０）ｙ（ｊ）である（図６参照）。これらはそれぞれユニット１とユニット０で演算されるが、そのタイミングがクロック２ｊであるため、ｔ計算部４０で利用しようとした場合は、上記の条件（ａ）、（ｂ）を満たすことができない。
【００６３】
この問題を解決するため、本実施の形態によるｔ計算部の処理では、この二つの乗算をｔ計算部４０で前倒し計算する。その際、前倒し計算をステップ１としてステップ２の１クロック前に実行することで、条件（ａ）、（ｂ）を同時に満たすことを可能にする。Ｎ（１）ｔ（ｊ−１）とｘ（０）ｙ（ｊ）以外にｔ（ｊ）の計算で必要となる乗算はクロック２ｊ−１までに全て計算済みであり、それらはＣ（Ｎ（０）ｔ（ｊ−１））およびＭ（ｘ（１）ｙ（ｊ−１））としてそれぞれユニット０とユニット１のクロック２ｊ−１に得られる。よって、クロック２ｊにそれら演算結果をユニット０とユニット１から受け取ることで、ステップ２を問題なく実行することが可能である。
【００６４】
この第１の実施の形態ではユニット数ｕをｕ＝ｎ＋１としている。よって最上位のユニットｎに対してはキャリーＣ（ｘ（ｎ）ｙ（ｊ））とＣ（Ｎ（ｎ）ｔ（ｊ））を渡すべきユニットが存在せず、それらキャリーの処理を行う必要がある。それを上記キャリー部の処理において行う。まず、ステップ１をクロックｎ＋２ｊ＋１で実行し、１クロック前に計算されたＣ（ｘ（ｎ）ｙ（ｊ））をユニットｎから受け取ってＭ（ｘ（ｎ＋１）ｙ（ｊ））とする。次に、ステップ２をクロックｎ＋２ｊ＋２で実行し、１クロック前に計算されたＣ（Ｎ（ｎ）ｔ（ｊ））をユニットｎから受け取りＭ（ｘ（ｎ＋１）ｙ（ｊ））との加算を行ってＭ（Ｎ（ｎ＋１）ｔ（ｊ））を得る。このＭ（Ｎ（ｎ＋１）ｔ（ｊ））は同クロック中にユニットｎに入力され、ユニットｉの処理におけるステップ１の入力データとして用いられる。
【００６５】
第１の実施の形態で適用のモンゴメリ乗算アルゴリズムの実行により、モンゴメリ乗算の演算結果ｗ（＜２Ｎ）として、ｗ（ｉ）＝Ｍ（Ｎ（ｉ＋１）ｔ（ｎ））（ｉ＝０，…，ｎ）を得る。
【００６６】
パイプライン処理では、第１のユニットの処理が終わればそれ以外のユニットの処理が終わっていなくても次の処理を開始することができる。本実施の形態では、一つのユニットがモンゴメリ乗算の実行に要するクロック数をパイプライン周期と呼ぶ。よって、“べき乗剰余”演算の処理時間はこのパイプライン周期に比例して決まる。第１の実施の形態に適用のモンゴメリ乗算アルゴリズムによるパイプライン周期は２（ｎ＋１）＋εである。ここでεはｎと比較して十分小さい値であり、第１の実施の形態の場合、ε＝２である。
【００６７】
以下、上記で説明したアルゴリズムを適用した剰余演算装置１４の構成及び動作について詳細に説明する。
【００６８】
図８は、各ユニットｉ（３１）の構成及びその処理動作を示す。
【００６９】
本実施の形態の各ユニットｉ（３１）は、クロックに応じて２種類の処理動作が存在するため、それぞれを図８の（ａ）と（ｂ）とに分けて示す。点線はそのパスがそのクロックでは選択されていないことを表す。各ユニットｉは３つのレジスタＲ１、Ｒ２、Ｒ３、セレクタＳＥＬ、乗算器３４、加算器３５からなる。
【００７０】
図８の（ａ）は、クロックｉ＋２ｊ時の処理動作を示す。これはユニットｉの処理のステップ１に対応する。ユニットｉには、ｙ（ｊ）とＣ（ｘ（ｉ−１）ｙ（ｊ））がユニットｉ−１から、Ｍ（Ｎ（ｉ＋１）ｔ（ｊ−１））がユニットｉ＋１から入力される。ｘ（ｉ）は各ユニットが有するレジスタやＲＡＭに分散して保存しておく方式でもよいし、ｘ（ｉ）（ｉ＝０，…ｎ）を装置全体で一括して保存しておく方式でもよい。クロックｉ＋２ｊのユニットｉでは、ｘ（ｉ）ｙ（ｊ）＋Ｃ（ｘ（ｉ−１）ｙ（ｊ））＋Ｍ（Ｎ（ｉ＋１）ｔ（ｊ−１））を演算し、下位ｒビットをＭ（ｘ（ｉ）ｙ（ｊ））としてレジスタＲ１に保存し、残り上位をＣ（ｘ（ｉ）ｙ（ｊ））としてレジスタＲ２に保存する。さらにレジスタＲ３にｙ（ｊ）を保存する。ユニットｉからは、１クロック前のクロックｉ＋２ｊ−１にレジスタＲ２に保存されたＣ（Ｎ（ｉ）ｔ（ｊ−１））とＲ３に保存されたｔ（ｊ−１）が出力され、ユニットｉ＋１に入力される。
【００７１】
図８の（ｂ）は、クロックｉ＋２ｊ＋１時の処理動作を示す。これはユニットｉの処理のステップ２に対応する。ユニットｉにはｔ（ｊ）とＣ（Ｎ（ｉ−１）ｔ（ｊ））がユニットｉ−１から入力される。Ｎ（ｉ）はｘ（ｉ）と同様に各ユニットが有するレジスタやＲＡＭに分散して保存しておく方式でもよいし、Ｎ（ｉ）（ｉ＝０，…，ｎ）を装置全体で一括して保存しておく方式でもよい。クロックｉ＋２ｊ＋１のユニットｉでは、Ｎ（ｉ）ｔ（ｊ）＋Ｃ（Ｎ（ｉ−１）ｔ（ｊ））＋Ｍ（ｘ（ｉ）ｙ（ｊ））を演算する。その際、Ｍ（ｘ（ｉ）ｙ（ｊ））はクロックｉ＋２ｊにレジスタＲ１に保存された値である。そして、下位ｒビットをＭ（Ｎ（ｉ）ｔ（ｊ））としてユニットｉ−１へ入力し、残り上位をＣ（Ｎ（ｉ）ｔ（ｊ））としてレジスタＲ２に保存する。レジスタＲ３にはｔ（ｊ）を保存する。ユニットｉからの出力は、積和結果のＭ（Ｎ（ｉ）ｔ（ｊ））と、クロックｉ＋２ｊにレジスタＲ２に保存されたＣ（ｘ（ｉ）ｙ（ｊ））およびＲ３に保存されたｙ（ｊ）であり、ユニットｉ−１、またはユニットｉ＋１へ入力される。
【００７２】
ｙ（ｊ）とｔ（ｊ）は１クロック毎に交互に使用されるため、図８の（ａ）、（ｂ）にはレジスタＲ３を共有する構成を示したが、ｙ（ｊ）とｔ（ｊ）それぞれに対してレジスタと配線を設ける方式でもよい。また、図８の（ａ）、（ｂ）のように乗算器からの出力を全て加算器へ入力する構成ではなく、加算器への入力は下位ｒビットのみとし、残りの上位をＣ’（ｘ（ｉ）ｙ（ｊ））（下段の処理動作ではＣ’（Ｎ（ｉ）ｔ（ｊ））として新たに設けたレジスタＲ２’に保存し、それをユニットｉ＋１の加算器へ入力する構成を採用してもよい。この場合、加算器への入力が１本増えるものの、加算器のビット幅を小さくすることが可能である。
【００７３】
次に、ｔ計算部４０の構成と処理動作を図９を参照して説明する。同図にはｔ計算部４０と基本演算部３０との接続も合わせて示す。ｔ計算部４０は３つのレジスタＲｔ１、Ｒｔ２、Ｒｔ３、３つの乗算器４２、４３、４６、２つの加算器４４、４５からなる。先ず、ｔ計算部４０へは、クロック２ｊ−１でｘ（０），Ｎ（１），ｙ（ｊ）が入力される。ｘ（０）とＮ（１）は必ずしもｔ計算部用に新たに保有する必要はなく、上述のユニット用に保有されたデータを共用することも可能である。またｙ（ｉ）（ｉ＝０，…，ｎ）は、ｘ（ｉ）やＮ（ｉ）と同様に各ユニットが有するレジスタやＲＡＭに分散して保存する方式でもよいし、装置全体で一括して保存する方式でもよい。
【００７４】
以上の入力データを用いて、クロック２ｊ−１のｔ計算部ではｖ（ｊ）＝Ｌ（Ｎ（１）ｔ（ｊ−１）＋ｘ（０）ｙ（ｊ））を計算し、レジスタＲｔ１に保存する。ここで、ｔ（ｊ−１）はクロック２ｊ−２でレジスタＲｔ２に保存された値である。次に、クロック２ｊではｔ（ｊ）＝ＮｉｎｖＬ（ｖ（ｊ）＋Ｃ（Ｎ（０）ｔ（ｊ−１））＋Ｍ（ｘ（１）ｙ（ｊ−１）））を計算し、レジスタＲｔ２に保存する。ここで、Ｃ（Ｎ（０）ｔ（ｊ−１））はクロック２ｊ−１にユニット０のレジスタＲ２に保存された値であり、Ｍ（ｘ（１）ｙ（ｊ−１））はクロック２ｊ−１にユニット１のレジスタＲ１に保存された値である。
【００７５】
Ｎｉｎｖは、前記した式（１）に従って、Ｎｉｎｖ演算部１５で事前に計算され、レジスタ、またはＲＡＭに保存されている値である。ｔ計算部４０でクロック２ｊにｔ（ｊ）が計算されると、続くクロック２ｊ＋１でｔ（ｊ）がユニット０に入力され、ユニットｉの処理に使用される。なお、各ユニットではｙ（ｊ）とｔ（ｊ）が１クロック毎に交互に使用されるため、図９にはｙ（ｊ）とｔ（ｊ）をセレクタで切り替えて交互にユニット０（３１）に入力する構成を示したが、ｙ（ｊ）とｔ（ｊ）を独立に入力する構成でもよい。
【００７６】
最後に、キャリー部の処理の構成と処理動作を図１０を参照して説明する。
【００７７】
キャリー部５０は、１個の加算器５１、１個のレジスタＲＣ、１個のセレクタＳＥＬから構成される。図１０の（ａ）に示すように、クロックｎ＋２ｊ＋１で、ユニットｕ−１からのＣ（ｘ（ｎ）ｙ（ｊ））をレジスタＲＣへ書き込み、図１０の（ｂ）に示すように、クロックｎ＋２ｊ＋２で、レジスタＲの値Ｍ（ｘ（ｎ＋１）ｙ（ｊ））にユニットｕ−１からのＣ（Ｎ（ｎ）ｔ（ｊ））を加算し、Ｍ（Ｎ（ｎ＋１）ｔ（ｊ））をユニットｕ−１へ供給する。
【００７８】
キャリー部５０は、基本演算部３０の各ユニットと比較して小さな回路規模であり、演算ビット幅も各ユニット３１のｒより小さくでき、その処理動作もユニットｉの処理に従って定まる単純な処理（ユニットｉの処理の一部）である。ここでは、ｕ個のユニットとは別にキャリー部５０を設けたが、これに代え、最上位のユニットｕ−１に組み込む方式でもよい。また、ユニット数を１つ増やしてｕ＝ｎ＋２とし、最上位のユニットｎ＋１においてキャリー部の処理を行う方式を採用してもよい。
【００７９】
以上のように構成され、動作する本実施の形態によるハードウェア構成のクリティカルパスについて、図８を参照して説明する。
【００８０】
クリティカルパスは、ユニットｉのクロックｉ＋２ｊ＋１において乗算器と加算器を経た演算結果Ｍ（Ｎ（ｉ）ｔ（ｊ））がユニットｉ−１へ入力され、それがユニットｉ−１で同クロック（ｉ−１）＋２ｊ＋２に加算器を経てレジスタＲ１へ保存されるまでのパスとなる。すなわち、本実施の形態によるモンゴメリ乗算のクリティカルパスは、（乗算器１個＋加算器２個）である。一方、ｔ計算による最長パスは（乗算器１個＋加算器１個）であり、本実施の形態によるモンゴメリ乗算では、ｔ計算による遅延は発生することなく、クリティカルパスが基本演算部３０における本計算で決まる。
【００８１】
本実施の形態のハードウェア規模を乗算器の個数で見積ると、基本演算部３０が乗算器（１×ｕ）個、ｔ計算部４０が乗算器３個である。なお、乗算器は、加算器、レジスタ、セレクタ等と比較してその回路規模が格段に大きいため、このような見積りは妥当といえる。
【００８２】
本実施の形態の剰余演算装置１４は、回路規模あたりの処理性能では、従来の技術で説明した非特許文献２（ウォルター等）による技術と比較し、“べき乗剰余”演算の単独処理において約２倍の効率化が可能である。さらに、クリティカルパスも乗算器１個分短いため（加算器よりも乗算器による遅延の影響が大きい故に）、より高い動作周波数での処理が可能になる。
【００８３】
同様に、本実施の形態の剰余演算装置１４は、回路規模あたりの処理性能では、従来の技術で説明した特許文献１による技術と比較し、“べき乗剰余”演算の単独処理において約３倍の効率化が可能になる。また、クリティカルパスについても、乗算器が１個分短いため、より高い動作周波数での処理が可能である。
【００８４】
以上説明してきたように、第１の実施の形態によれば、パイプライン周期の全クロックの間、各ユニットの全ての乗算器が待ち状態を作ることなく毎クロック動作しており、回路規模（基本演算部の乗算器の個数）あたりの処理性能が最適化されていることがわかる。装置全体でのクリティカルパスがパイプライン処理による本計算で決まり、ｔ計算による余分な遅延が生じないアルゴリズムおよびハードウェア構成が実現されている。
【００８５】
以下、本発明による“べき乗剰余”演算装置の他の実施の形態を説明する。他の実施の形態の説明において第１の実施の形態と同一部分は同一参照数字を付してその詳細な説明は省略する。
【００８６】
（第２の実施の形態）
第２の実施の形態のブロック図は第１の実施の形態のブロック図と同一であるので、図示は省略する。
【００８７】
第２の実施の形態では、短い法Ｎによるモンゴメリ乗算を第１の実施の形態の構成を用いて行う場合の処理を説明する。すなわちユニット数ｕがｕ＞ｎ＋１（ｕ≧２）である。
【００８８】
この場合、下位ｎ＋２個のユニットをモンゴメリ乗算で使用し、第１の実施の形態で適用のモンゴメリ乗算アルゴリズムのキャリー部の処理をユニットｎ＋１で行うことで、第１の実施の形態に記載のモンゴメリ乗算を実行することが可能である。その際、パイプライン周期も第１の実施の形態と同じ２（ｎ＋１）＋εとなる。
【００８９】
（第３の実施の形態）
第３の実施の形態では、長い法Ｎ、すなわちユニット数ｕがｕ＜ｎ＋１（ｕ≧２）の場合のモンゴメリ乗算を第１の実施の形態の図５と同等の構成を用いて行う場合の処理を説明する。なお、第３の実施の形態の各ユニットｉ（３１）、ｔ計算部４０、及びキャリー部５０の内部構成は、第１の実施の形態のそれらと若干構成を異にしているが、図５上では、差がないため、同一参照数字のままで説明を進める。
【００９０】
第３の実施の形態で適用のモンゴメリ乗算アルゴリズム
ユニットｉの処理
2004280036.tif 000005
ｔ計算部の処理
2004280036.tif 000006
キャリー部の処理
2004280036.tif 000007
上記アルゴリズムにおいて、ｐは（ｎ＋１）／ｕ以上の最小の整数、Ｄ＝ｕ（ｐ−１）＋２である。
【００９１】
第３の実施の形態に適用のモンゴメリ乗算アルゴリズムによるパイプライン処理の流れを、ｎ＝５、ｕ＝３の場合のｊ＝１までの処理について、図１１に示す。第３の実施の形態によるｕ＜ｎ＋１の場合、ユニットｉの処理において、ｋに関する繰り返し処理が必要となり、それに伴って待ち状態が挿入される。ステップ２のＭ（Ｎ（Ｉ）ｔ（ｊ））を同クロックでユニットｉ−１へ渡すことができないため、それらを一旦レジスタ、またはＲＡＭへ保存し、必要に応じて読み出しを行う。ｔ計算部の処理とキャリー部の処理でも、ユニットｉの処理に同期して待ち状態が発生する。なお、第３の実施の形態に適用のモンゴメリ乗算アルゴリズムによるパイプライン周期はＤ（ｎ＋１）である。
【００９２】
図１２は、第３の実施の形態によるユニットｉ（３１）のハードウェア構成を示す。第１の実施の形態の図８からの変更点は、レジスタＲ１がｐ個のレジスタＲ１（ｋ）（ｋ＝０，…，ｐ−１）に置き換えられている点である。クロックＩ＋Ｄｊでは、（ａ）に示すように、ユニットｉ＋１のレジスタＲ１（ｋ）からＭ（Ｎ（Ｉ＋１）ｔ（ｊ−１））を読み出して演算処理を行う。これに伴い、クロックＩ＋Ｄｊ＋１では、（ｂ）に示すように、Ｍ（Ｎ（Ｉ）ｔ（ｊ））をレジスタＲ１（ｋ）へ保存する。
【００９３】
ｐ個のレジスタＲ１（ｋ）はＲＡＭで構成してもよい。さらに、該レジスタ、またはＲＡＭをユニット毎に設けるのではなく、基本演算部３０で一括して設ける方式でもよい。なお、ｋに関する繰り返し処理を実行するために、最下位ユニット０は出力Ｍ（Ｎ（Ｉ）ｔ（ｊ））（Ｉ＝ｉ＋ｕｋ，ｉ＝０，ｋ＝１，…，ｐ−１）を最上位ユニットｕ−１へ入力し、最上位ユニットｕ−１は出力ｙ（ｊ）、ｔ（ｊ）、Ｃ（ｘ（Ｉ）ｙ（ｊ））、Ｃ（Ｎ（Ｉ）ｔ（ｊ））（Ｉ＝ｉ＋ｕｋ，ｉ＝ｕ−１，ｋ＝０，…，ｐ−２）を最下位ユニット０へ入力する。
【００９４】
ｔ計算部４０のハードウェア構成を図１３に示す。第１の実施の形態の図９からの変更は、ｖ（ｊ）の計算が１個の乗算器４６で構成される点と、基本演算部３０からの入力として、ユニット１のレジスタＲ１（０）からＭ（Ｎ（１）ｔ（ｊ−１））がｔ計算部４０の加算器４５へ入力される点である。また、ｋに関する繰り返し処理を実行するために、最下位ユニットから最上位ユニットへ、最上位ユニットから最下位ユニットへ変数を渡すための配線が付加される。なお、ｔ（ｊ）の計算タイミングであるクロックＤｊよりも２クロック以上前にＭ（Ｎ（１）ｔ（ｊ−１））の計算は終了しているため、予めＭ（Ｎ（１）ｔ（ｊ−１））をクロックＤｊ以前にｔ計算部のレジスタ、またはＲＡＭへ取り込む方式を採用してもよい。
【００９５】
キャリー部５０の処理について説明する。第１の実施の形態によるキャリー部の処理との違いは、クロックｎ＋Ｄｊ＋２のステップ２で加算結果Ｍ（Ｎ（ｎ＋１）ｔ（ｊ））を図１０のレジスタＲへ書き込む点である。この書き込まれたデータは、クロックｎ＋Ｄ（ｊ＋１）で最上位ユニットｕ−１へ供給される。ｕとｎの関係について補足説明する。ｕがｎ＋１の約数である場合、キャリー部の処理用の回路が必要であり、第１の実施の形態と同様にｕ個のユニットとは別に回路を設ける方式でもよいし、最上位のユニットｕ−１の内部に組み込む方式を採用してもよい。ｕがｎ＋１の約数でない場合は、キャリー部の処理に使用できるユニットが存在するため、第２の実施の形態と同様にユニットｎ＋１−ｕ（ｐ−１）でキャリー部の処理を行うことで、第３の実施の形態で適用のモンゴメリ乗算アルゴリズムを実行することが可能である。
【００９６】
以上のように構成すれば、第１の実施の形態に記載のモンゴメリ乗算をユニット数ｕ（＜ｎ＋１）の構成においても実行することができる。
【００９７】
（第４の実施の形態）
第４の実施の形態では、第１の実施の形態によるモンゴメリ乗算の変形例を説明する。ユニット数は第１の実施の形態と同様にｕ＝ｎ＋１であるが、ｕ≧３である点が異なっている。なお、第４の実施の形態の各ユニットｉ、ｔ計算部及びキャリー部の内部構成は、第１の実施の形態のそれらと若干構成を異にしているが、特に図５上では差がないため、同一符号（番号）のままで説明を進める。
【００９８】
第４の実施の形態で適用のモンゴメリ乗算アルゴリズム
ユニットｉの処理
2004280036.tif 000008
ｔ計算部の処理
2004280036.tif 000009
キャリー部の処理
2004280036.tif 000010
第４の実施の形態で適用のモンゴメリ乗算アルゴリズムによるパイプライン処理の流れを、ｎ＝３、ｕ（＝ｎ＋１）＝４の場合について図１４に示す。第１の実施の形態で適用のモンゴメリ乗算アルゴリズムとの違いは、以下で説明するように総和Ｍ（ｘ（ｉ）ｙ（ｊ））、Ｍ（Ｎ（ｉ）ｔ（ｊ））の処理の仕方である。
【００９９】
第４の実施の形態によるユニットｉ（３１）のハードウェア構成を図１５に示す。第１の実施の形態の図８からの変更点は、Ｍ（ｘ（ｉ）ｙ（ｊ））およびＭ（Ｎ（ｉ）ｔ（ｊ））を次クロックで下位ユニットへ入力するために、ユニットｉのレジスタＲ１がユニットｉ−１の加算器へ接続される点である。
【０１００】
また、ユニットｉの処理のステップ２がｉ，ｊに応じて次のように条件分岐する。ユニット０のｊ＝０，…，ｎおよび全ユニットのｊ＝ｎでは、図１６におけるセレクタの下のポートが選択され、ｔ計算部４０ではレジスタＲ１の値（Ｍ（ｘ（１）ｙ（ｊ−１）））も加算される。それ以外の処理では、セレクタの上のポートが選択され、ｔ計算部４０ではレジスタＲ１からの加算は行われない。
【０１０１】
同様に、キャリー部の処理においても、ｊ＝ｎか否かでステップ２が上記のように条件分岐する。
【０１０２】
次に、ｔ計算部４０のハードウェア構成を図１６に示す。第１の実施の形態の図９からの変更点は、基本演算部３０から加算器４５への入力がユニット０、ユニット１、ユニット２からの３つの信号になった点である。
【０１０３】
キャリー部５０については、第１の実施の形態による図１０と同様のハードウェア構成によって、上記キャリー部の処理を実行することが可能である。
【０１０４】
第４の実施の形態によるクリティカルパスは、ユニットｉのレジスタＲ１の接続が変更されたことに伴い、第１の実施の形態よりも加算器が１個減り、（乗算器１個＋加算器１個）である。ただし、ユニットｉの加算器やｔ計算部の下側の加算器への入力パスが１本増えるため、クリティカルパスの差は加算器の内部構成に依存すると考えられる。また、ハードウェア規模は第１の実施の形態と同様に、基本演算部が乗算器（２×ｕ）個、ｔ計算部が乗算器２個である。
【０１０５】
（第５の実施の形態）
第５の実施の形態では、短い法Ｎによるモンゴメリ乗算を第４の実施の形態の構成を用いて行う場合の処理を説明する。すなわちユニット数ｕがｕ＞ｎ＋１（ｕ≧３）である。
【０１０６】
この場合、下位ｎ＋２個のユニットをモンゴメリ乗算で使用し、第４の実施の形態で適用のモンゴメリ乗算アルゴリズムのキャリー部の処理をユニットｎ＋１で行うことで、第４の実施の形態に記載のモンゴメリ乗算を実行することが可能である。その際、パイプライン周期も第４の実施の形態と同じ２（ｎ＋１）＋εとなる。
【０１０７】
（第６の実施の形態）
第６の実施の形態では、長い法Ｎによるモンゴメリ乗算を第４の実施の形態の構成を用いて行う場合の処理を説明する。すなわちユニット数ｕがｕ＜ｎ＋１（ｕ≧３）である。
【０１０８】
第６の実施の形態で適用のモンゴメリ乗算アルゴリズム
ユニットｉの処理
2004280036.tif 000011
ｔ計算部の処理
2004280036.tif 000012
キャリー部の処理
2004280036.tif 000013
第３の実施の形態と同様に、ｐは（ｎ＋１）／ｕ以上の最小の整数、Ｄ＝ｕ（ｐ−１）＋２である。
【０１０９】
第６の実施の形態で適用のモンゴメリ乗算アルゴリズムによるパイプライン処理の流れを、ｎ＝５、ｕ＝３の場合のｊ＝１までの処理について図１７に示す。第６の実施の形態では第３の実施の形態と同様に、ユニットｉの処理においてｋに関する繰り返し処理が必要となり、それに伴って待ち状態が挿入される。ｔ計算部の処理とキャリー部の処理でも、ユニットｉの処理に同期して待ち状態が発生する。第３の実施の形態と同様に、第６の実施の形態で適用のモンゴメリ乗算アルゴリズムのパイプライン周期はＤ（ｎ＋１）である。
【０１１０】
第６の実施の形態によるユニットｉ（３１）のハードウェア構成では、第４の実施の形態の図１５におけるレジスタＲ１を２ｐ個用意し、クロックＩ＋ＤｊでＭ（ｘ（Ｉ）ｙ（ｊ））をレジスタＲ１（１，ｋ）へ、クロックＩ＋Ｄｊ＋１でＭ（Ｎ（Ｉ）ｔ（ｊ））をレジスタＲ１（２，ｋ）へ書き込む。書き込まれた値はそれぞれクロックＩ＋Ｄ（ｊ＋１）−１とクロックＩ＋Ｄ（ｊ＋１）でユニットｉ−１へ入力され、ユニットｉの処理で使用される。レジスタＲ１（１，ｋ）、Ｒ１（２，ｋ）（ｋ＝０，…，ｐ−１）はＲＡＭで構成してもよい。さらに、該レジスタ、またはＲＡＭをユニット毎に設けるのではなく、基本演算部３０で一括して設ける方式でもよい。なお、ｋに関する繰り返し処理を実行するために、最下位ユニット０は出力Ｍ（ｘ（Ｉ）ｙ（ｊ））、Ｍ（Ｎ（Ｉ）ｔ（ｊ））（Ｉ＝ｉ＋ｕｋ，ｉ＝０，ｋ＝１，…，ｐ−１）を最上位ユニットｕ−１へ入力し、最上位ユニットｕ−１は出力ｙ（ｊ）、ｔ（ｊ）、Ｃ（ｘ（Ｉ）ｙ（ｊ））、Ｃ（Ｎ（Ｉ）ｔ（ｊ））（Ｉ＝ｉ＋ｕｋ，ｉ＝ｕ−１，ｋ＝０，…，ｐ−２）を最下位ユニット０へ入力する。
【０１１１】
第６の実施の形態によるｔ計算部４０のハードウェア構成は、第３の実施の形態の図１３とほぼ同じ構成となる。第３の実施の形態との違いは、基本演算部からの入力として、ユニット１のレジスタＲ１（１，０）からＭ（ｘ（１）ｙ（ｊ−１））が、同じくユニット１のレジスタＲ１（２，０）からＭ（Ｎ（１）ｔ（ｊ−１））がｔ計算部４０の加算器へ入力される点である。第３の実施の形態と同様に、予めＭ（ｘ（１）ｙ（ｊ−１））とＭ（Ｎ（１）ｔ（ｊ−１））をクロックＤｊ以前にｔ計算部４０のレジスタ、またはＲＡＭへ取り込む方式を採用してもよい。
【０１１２】
キャリー部の処理については、第１の実施の形態の図１０におけるレジスタＲを２個用意し（レジスタＲ（１）とＲ（２））、クロックｎ＋Ｄｊ＋１でステップ１を実行してＭ（ｘ（ｎ＋１）ｙ（ｊ））をＲ（１）に書き込み、クロックｎ＋Ｄｊ＋２でステップ２を実行してＭ（Ｎ（ｎ＋１）ｔ（ｊ））をＲ（２）に書き込む。これら書き込まれたデータは、クロックｎ＋Ｄ（ｊ＋１）にレジスタＲ（１）の値が最上位ユニットｕ−１へ供給され、クロックｎ＋Ｄ（ｊ＋１）＋１にレジスタＲ（２）の値が同じくユニットｕ−１へ供給される。なお、ｕがｎ＋１の約数である場合とそうでない場合の取り扱いについては、第３の実施の形態と同様の方式を採用することが可能である。
【０１１３】
以上のように構成すれば、第４の実施の形態に記載のモンゴメリ乗算をユニット数ｕ＜ｎ＋１の構成において実行することができる。
【０１１４】
以上詳細に説明してきた第１乃至第６の実施の形態によれば、各条件に応じ回路規模あたりの処理性能が最適化され、ｔの計算によって余分な遅延が発生しない、モンゴメリ乗算のアルゴリズムとハードウェア構成を提供することができる。
【０１１５】
第１乃至第６の実施の形態は、回路規模あたりの処理性能として従来技術と比較し、“べき乗剰余”演算の単独処理において約２倍から３倍を達成できる。また、クリティカルパスが乗算器１個分短くなっているため、従来技術よりも高い動作周波数での処理が可能である。
【０１１６】
上述した実施の形態はｔ計算部４０を基本演算部３０から独立させ、演算過程の途中結果に依存するｔ（ｊ）を前倒しで求めているので、パイプライン処理の効率を高めているが、被演算子の連続した数ワードずつを各処理ユニットの負荷が均等化するように剰余演算の法サイズと処理ユニット数に応じて下位ユニットから割り振ることによりパイプライン処理の効率を高める実施の形態を以下に説明する。
【０１１７】
（第７の実施の形態）
第７の実施の形態の全体構成は図１に示した第１の実施の形態の構成と同じである。
【０１１８】
第７の実施の形態の剰余演算装置１４０の詳細を図１８に示す。剰余演算装置１４０は、入力ｘ、ｙ、Ｎ、Ｎｉｎｖに対してｗ＝ＭＭ（ｘ，ｙ，Ｎ）を出力する。高速処理を実現するため、ｕ個の処理ユニット（以下、単にユニットと称し、ユニット０，ユニット１，…，ユニットｕ−１と書く）によるパイプライン処理を行う。第７の実施の形態では、ユニット数ｕがｕ＝ｎ＋２の場合を扱い、１ユニットが１ワードの演算を受け持つものとする。後述するように、１ユニットが１ワードの演算を受け持つ場合には、法Ｎのワード数ｎに対してユニット数ｕはｕ＝ｎ＋２で十分である。
【０１１９】
剰余演算装置１４０は図１８に示すように剰余演算制御部１３０と基本演算部１３１とを具備し、基本演算部１３１はｕ個のユニット１４１が互いに接続された構成となっている。剰余演算制御部１３０は入力に応じて基本演算部１３１を制御する役割を持つ。制御の内容については後に説明する。
【０１２０】
各ユニット１４１は、図１９に示すような積和回路となっており、ユニットｉ−１のＡ、Ｂ，Ｃ，Ｄに対してユニットｉのａ、ｂ、ｃ、ｄがそれぞれ接続されている。ただし、ユニット０はそれより下位のユニットが存在しないので、図２０の構成とする。また、最上位のユニットであるユニットｕ−１はそれより上位のユニットが存在しないので図２１の構成とする。図２０、図２１のユニットはともに図１９のユニットに含まれる構成となっており、図１９のユニットを用いて構成可能である。
【０１２１】
各ユニット１４１は、１つの２入力乗算器１４３と１つの４入力加算器１４４、ｒビットの演算値を格納できるレジスタＲ１，Ｒ２，Ｒ３，Ｒ４，Ｒ５，Ｒ６，Ｒ７、２ビットの演算値を格納できるレジスタｒ１，ｒ２、複数の演算値を格納できるＲＡＭ１，ＲＡＭ２もしくはそれに代わるものから構成されている。図１９、図２０、図２１に示したユニットの構成は、第７の実施の形態を実現するためには冗長であるが、同じ構成により第８の実施の形態、第９の実施の形態も実現できるため、この構成を用いるものとする。
【０１２２】
ここで、剰余演算装置１４０の動作について説明する。まず、簡単のために法Ｎのサイズｎ＝２について、モンゴメリ乗算ｗ＝（ｘｙ＋Ｎｔ）／Ｒの演算について順を追って示す。図２２はｘｙを計算する手順を示したものであり、ｘｙ（０）、ｘｙ（１）、ｘｙ（２）の総和、つまり縦方向に加えたものがｘｙとなることを示している。その際、ｘ（ｉ）ｙ（ｊ）には、ｘ（ｉ−１）ｙ（ｊ）からの桁上がりが加えられていることに注意する。同様にして、Ｎｔの計算手順を示したのが図２３であり、Ｎｔ（０）、Ｎｔ（１）、Ｎｔ（２）の総和がＮｔとなる。ここで、前述した変数に対する条件より、ｘｙ（０）、ｘｙ（１）は高々３ｒ＋１ビット、ｘｙ（２）は２ｒ＋２ビットとなる。また、Ｎｔについては、Ｎｔ（０）、Ｎｔ（１）、Ｎｔ（２）はそれぞれ高々３ｒビットとなる。更に、ｘｙ＋Ｎｔは図２４のように５ｒ＋１ビットとなり、その下位３ｒビットはモンゴメリ乗算の性質より必ず０なり、上位２ｒ＋１ビットがｗとなる。一般には、ワード数ｎの場合には下記のようになる。
【０１２３】
ｘｙ（ｊ）：０≦ｊ＜ｎ  の場合には、高々（ｎ＋１）ｒ＋１ビット
ｊ＝ｎの場合には、高々ｎｒ＋２ビット
Ｎｔ（ｊ）：高々（ｎ＋１）ｒビット
ｘｙ＋Ｎｔ：高々（２ｎ＋１）ｒ＋１ビット、ただし下位（ｎ＋１）ｒビットは０、上位ｎｒ＋１ビットはｗ
これらより、被演算子および演算結果の最大長は（ｎ＋１）ｒ＋１ビットで、１ワードをｒビットとすると、ｎ＋２ワードの演算を扱うことができるユニットを備えれば十分である。第１乃至第６の実施の形態では、ｎ＋２ワード目は高々１ビットの演算しか扱わないのでこれをキャリー部で扱っていたため、ｕ＝ｎ＋１がｎに対して最大のパフォーマンスを実現する最小のユニット数であるとしていたが、第７乃至第１０の実施の形態では第１乃至第６の実施の形態でキャリー部が行っていた処理も１つのユニットが行うものとし、ｕ＝ｎ＋２がｎに対して最大のパフォーマンスを実現する最小のユニット数であるとする。（第１乃至第６の実施の形態と同様にｎ＋２ワード目をキャリー部で扱うとしても良い。）
剰余演算装置１４０の目的は、図２４に示した計算を効率的に行うことである。図２４における１ワードを１ユニットで行うことを考え、各ユニットへの処理の割り振りを考えたものが図２５である。図２５では、列がユニット、行が演算ステップを表しており、図２４におけるｘ（ｉ−１）ｙ（ｊ）からｘ（ｉ）ｙ（ｊ）への桁上がりとＮ（ｉ−１）ｔ（ｊ）からＮ（ｉ）ｔ（ｊ）への桁上がりを点線の矢印で、図２４における縦方向の累積計算を実線の矢印で示してある。ここで、ステップは必ずしもクロックに対応しているものではない。ユニットｉではｘ（ｉ）ｙ（ｊ）、Ｎ（ｉ）ｔ（ｊ）をｊ＝０，１，…，ｎについて順次計算する。ｘ（ｉ）ｙ（ｊ）がｘ（ｉ−１）ｙ（ｊ）より後のステップで処理されているのは、ｘ（ｉ−１）ｙ（ｊ）の計算により得られた桁上がり値をｘ（ｉ）ｙ（ｊ）に加える必要があるためである。これはＮ（ｉ）ｔ（ｊ）についてでも同様である。また、ユニット０ではｘ（ｉ）ｙ（ｊ）、Ｎ（ｉ）ｔ（ｊ）に加えてｔ（ｊ）を計算する。ｔ（ｊ）はモンゴメリ乗算アルゴリズムで示したようにｔ（ｊ）＝ｗ（０）Ｎｉｎｖ  ｍｏｄ  ２ｒにより計算される。これらをまとめるとユニットｉの処理は下記のように書ける。
【０１２４】
第７の実施の形態におけるユニットｉの処理アルゴリズム
2004280036.tif 000014
ここで、ユニットｉの処理ステップについて詳しく述べる。まず、ユニットｉではｘ（ｉ）ｙ（ｊ）を計算する。その際、下位ワードからの桁上がりＣ（ｘ（ｉ−１）ｙ（ｊ））とこれまでの累積値Ｍ（Ｎ（ｉ＋１）ｔ（ｊ−１））が加えられる。この結果の下位ｒビットがＭ（ｘ（ｉ）ｙ（ｊ））であり、それより上位部分がＣ（ｘ（ｉ）ｙ（ｊ））となる。
【０１２５】
次のステップでは、Ｎ（ｉ）ｔ（ｊ）を計算する。その際、下位ワードからの桁上がりＣ（Ｎ（ｉ−１）ｔ（ｊ））とこれまでの累積値Ｍ（ｘ（ｉ）ｙ（ｊ））が加えられる。この結果の下位ｒビットがＭ（Ｎ（ｉ）ｔ（ｊ））、それより上位がＣ（Ｎ（ｉ）ｔ（ｊ））となる。以後、ｘ（ｉ）ｙ（ｊ＋１）、Ｎ（ｉ）ｔ（ｊ＋１）、ｘ（ｉ）ｙ（ｊ＋２）とｊ＝ｎまで順次計算を行う。
【０１２６】
また、ユニット０においては上記のｘ（ｉ）ｙ（ｊ）とＮ（ｉ）ｔ（ｊ）の計算の間に、これまでの累積値Ｍ（ｘ（ｉ）ｙ（ｊ））を用いてｔ（ｊ）を計算する。このｔ（ｊ）の値は、ユニット０のみで計算すればよく、後のステップではユニット０からユニット１へ、ユニット１からユニット２へというように順次伝達されていく。
【０１２７】
以上、処理の概略を述べたが、図１８の剰余演算装置１４０では下記のような処理が行われる。まず、剰余演算制御部１３０に入力されたｘ、Ｎはそれぞれワードごとに区切られ、ｘ（ｉ）、Ｎ（ｉ）がユニットｉのＲＡＭ１に格納され、演算の適切なタイミングで各ユニットのレジスタＲ１やＲ２に読み出される。また、ｙについても同様にしてワードごとに区切られ、ユニット０のＲＡＭ１のみに格納される。ｙ（ｊ）はステップの進行に伴い、ユニット０からユニット１へ、ユニット１からユニット２へと、順次ユニットｕまで各ユニットの配線Ａ，ａを通して送られる。ユニット０のＲＡＭ１にはＮｉｎｖも格納されている。
【０１２８】
先に述べたように、ユニットｉの動作は大きく分けて２つの動作に分けることができる。１つはｘ（ｉ）ｙ（ｊ）を計算する式（３１）のステップであり、もう一つはＮ（ｉ）ｔ（ｊ）を計算する式（３３）のステップである。
【０１２９】
式（３１）のｘ（ｉ）ｙ（ｊ）を計算するステップでは、準備としてレジスタＲ１にはＲＡＭ１よりｘ（ｉ）が読み出されている。また、先に述べたようにｙ（ｊ）はユニットｉ−１より配線ａを通じてレジスタＲ２に格納されている。その他に、下位ワードから桁上がり値Ｃ（ｘ（ｉ−１）ｙ（ｊ））がレジスタＲ７、ｒ２（Ｒ７にある桁上がり値とｒ２にある桁上がり値を加えたものがＣ（ｘ（ｉ−１）ｙ（ｊ））である）に、累積値Ｍ（Ｎ（ｉ＋１）ｔ（ｊ−１））がレジスタＲ５に格納されている。
【０１３０】
これらの下で、ユニットｉでは式（３１）のｘ（ｉ）ｙ（ｊ）の演算を行う。処理後、累積値Ｍ（ｘ（ｉ）ｙ（ｊ））はレジスタＲ３に格納され、桁上がりＣ（ｘ（ｉ）ｙ（ｊ））はユニットｉ＋１のレジスタＲ７、ｒ２に分割して格納され、それぞれ次のステップで使用される。ここで、Ｃ（ｘ（ｉ）ｙ（ｊ））は、乗算器で生じた桁上がりと加算器で生じた桁上がりを加えたものであり、乗算器の桁上がりをＲ７に、加算器の桁上がりをｒ２に格納する。
【０１３１】
次に式（３３）のＮ（ｉ）ｔ（ｊ）を計算するステップでは、準備としてレジスタＲ１にはＲＡＭ１よりＮ（ｉ）が読み出されている。また、先に述べたようにｔ（ｊ）はユニットｉ−１より配線ａを通じてレジスタＲ２に格納されている。その他に、下位ワードから桁上がり値Ｃ（Ｎ（ｉ−１）ｔ（ｊ））がレジスタＲ７、ｒ２（Ｒ７にある桁上がり値とｒ２にある桁上がり値を加えたものがＣ（Ｎ（ｉ−１）ｔ（ｊ））である）に、累積値Ｍ（ｘ（ｉ）ｙ（ｊ））がレジスタＲ５に格納されている。
【０１３２】
これらの下で、ユニットｉでは式（３３）のＮ（ｉ）ｔ（ｊ）の演算を行う。処理後、累積値Ｍ（Ｎ（ｉ）ｔ（ｊ））はユニットｉ−１のレジスタＲ５に格納され、桁上がり値Ｃ（Ｎ（ｉ）ｔ（ｊ））はユニットｉ＋１のレジスタＲ７、ｒ２に分割して格納され、それぞれ次のステップで使用される。Ｃ（ｘ（ｉ）ｙ（ｊ））と同様に、Ｃ（Ｎ（ｉ）ｔ（ｊ））は乗算器で生じた桁上がりと加算器で生じた桁上がりを加えたものであり、乗算器の桁上がりをＲ７に、加算器の桁上がりをｒ２に格納する。
【０１３３】
また、ユニット０では、ｘ（ｉ）ｙ（ｊ）、Ｎ（ｉ）ｔ（ｊ）の演算に加えて、式（３２）のｔ（ｊ）の計算も行う。これは、累積値Ｍ（ｘ（０）ｙ（ｊ））をレジスタＲ２に、ＲＡＭ１からＮｉｎｖを読み出しレジスタＲ１に格納しておき、これを用いてｔ（ｊ）＝Ｍ（ｘ（０）ｙ（ｊ））Ｎｉｎｖ  ｍｏｄ  ２ｒと計算される。ここで計算されたｔ（ｊ）は、各ユニットの配線Ａ、ａを通して順次上位ユニットへ送られ、それぞれのユニットで使用される。
【０１３４】
このようにしてｊ＝０，１，…，ｎと演算を行い、ｊ＝ｎの処理が終了した時点でのユニット０からユニットｕ−２のレジスタＲ５に保存されているＭ（Ｎ（ｉ）ｔ（ｊ））のｎ＋１ワードが、モンゴメリ乗算の結果ｗ（０），ｗ（１），…，ｗ（ｎ）として出力される。
【０１３５】
第７の実施の形態は、ユニット数ｕをｕ＜ｎ＋２と減らした場合にも、減らしたユニット数に比例した効率の低下のみしか起こらない“べき乗剰余”演算装置を提案するための基本形態となっており、ｕ＜ｎ＋２の場合の処理方法については第９の実施の形態で示すものとする。
【０１３６】
（第８の実施の形態）
第８の実施の形態では、ユニット数ｕ＞ｎ＋２の場合のモンゴメリ乗算を第７の実施の形態の図１８と同じ構成を用いて場合の処理を説明する。この場合、第２の実施の形態、第５の実施の形態と同様に、下位ｎ＋２個のユニットをモンゴメリ乗算で使用し、ｎ＋２を超えるユニットは演算には用いないとすれば、第７の実施の形態に記載の方法によりモンゴメリ乗算を実行することが可能である。
【０１３７】
（第９の実施の形態）
第９の実施の形態では、ユニット数ｕが法Ｎのワード数よりも少ない、つまりｕ＜ｎ＋２の場合のモンゴメリ乗算を第７の実施の形態、第８の実施の形態の図１８と同じ構成を用いて行う場合の処理を説明する。この場合、ワード数よりユニット数が少なくなるため、１ユニットで複数ワードの演算を実施しなければならない。この各ユニットへの演算の割り振りは、剰余演算制御部１３０が入力された法Ｎのワード数ｎと剰余演算装置１４０のユニット数ｕにより各ユニットへの付加が均等化するようにに連続したｓワードを割り振り、それに基づき剰余演算装置１４０の動作を制御する。剰余演算制御部１３０によるユニットへの演算の割り振りは、各ユニットの付加が均等であれば良く具体的には定める必要はないが、その一例としては、
ｓ＝［（ｎ＋２）／ｕ］以上の最小の整数
とし、ユニット０からｓワードずつをｎ＋２ワードに達するまで順次各ユニットに割り振るような方法が考えられる。例えば、ユニット０からユニット３の４つのユニット（ｕ＝４）で８ワード（ｎ＝８）の演算を行うのであれば、ユニット０には１から３ワード目を、ユニット１には４から６ワード目を、ユニット２には７から９ワード目を、最後にユニット３には１０ワード目を割り振るなどである。他の割り振り方としては、ユニット０、ユニット１にはそれぞれ３ワードずつを、ユニット２、ユニット３にはそれぞれ２ワードを割り振るとしても良い。
【０１３８】
まず、具体的な処理方法の説明に入る前に、簡単のため第７の実施の形態の説明で用いた例について、ユニット数ｕ＝２で実行する場合の処理について説明する。第７の実施の形態では図２５のように演算を処理していたが、それに対応したものが図２６である。図２６では、図２５と同じく列がユニット、行がステップを表しており、桁上がりを点線の矢印で、累積値を実践の矢印で表している。例では、ｎ＝２、ｕ＝２であるから、ユニット０ではｘ（０），ｙ（１），Ｎ（０），Ｎ（１）、ユニット１ではｘ（２），Ｎ（２）と桁上がりワードというように、各ユニットが連続した２ワードの演算を受け持っている。ここで、注意しなければならないのは、第７の実施の形態と異なり第９の実施の形態では各ユニット内で連続したｓワード（この例では２ワード）の演算を行うため、桁上がりと累積値の処理について桁合わせをする必要があることである。
【０１３９】
第９の実施の形態におけるユニットｉの処理を一般的に記述すると下記のように書ける。
【０１４０】
第９の実施の形態におけるユニットｉの処理アルゴリズム
2004280036.tif 000015
つまり、ユニットｉでは、ｊ＝０，１，…，ｎのそれぞれについて、ｘ（ｓｉ＋ｋ）ｙ（ｊ）をｋ＝０，１，…，ｓ−１について順次処理し、Ｎ（ｓｉ＋ｋ）ｔ（ｊ）についてもｋ＝０，１，…，ｓ−１について順次処理する。ユニットｉでｘ（ｓｉ＋ｓ−１）ｙ（ｊ）の処理が終わった後、ユニットｉ＋１でｘ（ｓ（ｉ＋１））ｙ（ｊ）の処理を、同じくユニットｉでＮ（ｓｉ＋ｓ−１）ｔ（ｊ）の処理が終わった後、ユニットｉ＋１でＮ（ｓ（ｉ＋１））ｔ（ｊ）の処理を開始する。これに加えてユニット０では、式（３５）のｔ（ｊ）の計算も行う。以上により、ｕ≧ｎ＋２の場合と同じ処理を、より少ないユニット数で実現することができる。
【０１４１】
ここで、上記の処理の剰余演算装置１４０での実装方法について述べる。ユニット内の要素の役割は基本的に第７の実施の形態と同じである。ただし、第７の実施の形態と異なり第９の実施の形態では各ユニット内で連続したｓワードの演算を行うため、桁上がりＣと累積値Ｍについて桁合わせをする必要があり、その点が大きく異なる。これは、計算されたＣ、Ｍの値をＲＡＭもしくはそれに代わるものに保存しておき、適切なタイミングで演算部に供給することにより実現される。このタイミングを制御するのも剰余演算制御部１３０である。
【０１４２】
まず、剰余演算制御部１３０に入力されたｘ、Ｎは、それぞれワードごとに区切られて、ユニットｉのＲＡＭ１にｘ（ｓｉ＋ｋ）、Ｎ（ｓｉ＋ｋ）（ｋ＝０，１，…，ｓ−１）が保存され、演算の適切なタイミングでそれぞれのユニットのレジスタＲ１やＲ２に提供される。また、ｙについてもワードごとに区切られ、ユニット０のＲＡＭ１に格納される。ｙ（ｊ）はステップの進行に伴い、ユニット０からユニット１へ、ユニット１からユニット２へ、と順次ユニットｕまで各ユニットの配線Ａ、ａを通して送られる。ユニット０には外部で計算されたＮｉｎｖも格納されているものとする。
【０１４３】
ユニットｉの動作は大きく分けて２つの動作に分けることができる。１つはｘ（ｓｉ＋ｋ）ｙ（ｊ）（ｋ＝０，１，…，ｓ−１）を計算する式（３４）のステップであり、もう一つはＮ（ｓｉ＋ｋ）ｔ（ｊ）（ｋ＝０，１，…，ｓ−１）を計算する式（３６）のステップである。
【０１４４】
式（３４）のｘ（ｓｉ＋ｋ）ｙ（ｊ）（ｋ＝０，１，…，ｓ−１）を計算するステップでは、必要な際にＲＡＭ１よりレジスタＲ１にｘ（ｓｉ＋ｋ）（ｋ＝０，１，…，ｓ−１）が順次読み出される。また、先に述べたようにｙ（ｊ）はユニットｉ−１より配線ａを通じてレジスタＲ２に格納されているものとする。
【０１４５】
まず、ｘ（ｓｉ）ｙ（ｊ）、つまりｋ＝０について計算する。式（３４）のＣ（ｘ（ｓｉ−１）ｙ（ｊ））は下位ワードからの桁上がり値であり、ユニットｉ−１からレジスタＲ７、ｒ２（Ｒ７にある桁上がり値とｒ２にある桁上がり値を加えたものがＣ（ｘ（ｓｉ−１）ｙ（ｊ））である）に送られている。また、Ｍ（Ｎ（ｓｉ＋１）ｔ（ｊ−１））は上位ワードからの累積値であり、これはＲＡＭ２から読み出されレジスタＲ４に格納されている。この下で、式（３４）を計算し、その際の累積値Ｍ（ｘ（ｓｉ）ｙ（ｊ））はレジスタＲ３に格納されＲＡＭ２へ、桁上がりＣ（ｘ（ｓｉ）ｙ（ｊ））はレジスタＲ６、ｒ１に格納され、ｘ（ｓｉ＋１）ｙ（ｊ）を計算する際に使用される。ここで、Ｃ（ｘ（ｓｉ）ｙ（ｊ））は、乗算器で生じた桁上がりと加算器で生じた桁上がりを加えたものであり、乗算器の桁上がりをＲ６に、加算器の桁上がりをｒ１に格納する。
【０１４６】
以後、同様にしてｘ（ｓｉ＋１）ｙ（ｊ），ｘ（ｓｉ＋２）ｙ（ｊ），…，ｘ（ｓｉ＋ｓ−１）ｙ（ｊ）の計算を行うが、ｘ（ｓｉ＋ｓ−１）ｙ（ｊ）では累積値Ｍ（Ｎ（ｓ（ｉ＋１））ｔ（ｊ−１））が加えられなければならないが、これは後にＮ（ｓｉ＋ｋ）ｔ（ｊ）のステップで述べるように既にレジスタＲ５に格納されており、これを加える。また、桁上がり値Ｃ（ｘ（ｓｉ＋ｓ−１）ｙ（ｊ））はユニットｉ＋１のｘ（ｓ（ｉ＋１））ｙ（ｊ）を計算する際に利用されるので、配線Ｂ、ｂを通してユニットｉ＋１のレジスタＲ７、ｒ２に送られる。
【０１４７】
次に、式（３６）のＮ（ｓｉ＋ｋ）ｔ（ｊ）（ｋ＝０，１，…，ｓ−１）を計算するステップでは、必要な際にＲＡＭ１よりレジスタＲ１にＮ（ｓｉ＋ｋ）（ｋ＝０，１，…，ｓ−１）が順次読み出される。また、先に述べたようにｔ（ｊ）はユニットｉ−１より配線ａを通じてレジスタＲ２に格納されているものとする。
【０１４８】
まず、Ｎ（ｓｉ）ｔ（ｊ）、つまりｋ＝０について計算する。式（３６）のＣ（Ｎ（ｉ−１）ｔ（ｊ））は下位ワードからの桁上がり値であり、ユニットｉ−１からレジスタＲ７、ｒ２（Ｒ７にある桁上がり値とｒ２にある桁上がり値を加えたものがＣ（Ｎ（ｉ−１）ｔ（ｊ））である）に送られている。また、累積値Ｍ（ｘ（ｓｉ）ｙ（ｊ））はＲＡＭ２から読み出されレジスタＲ４に格納されている。この下で、式（３６）を計算し、その際の累積値Ｍ（Ｎ（ｓｉ）ｔ（ｊ））はユニットｉ−１のレジスタＲ５に格納され、桁上がり値Ｃ（Ｎ（ｓｉ）ｔ（ｊ））はレジスタＲ６、ｒ１に格納され、Ｎ（ｓｉ＋１）ｔ（ｊ）を計算する際に使用される。ここで、Ｃ（Ｎ（ｓｉ）ｔ（ｊ））は、乗算器で生じた桁上がりと加算器で生じた桁上がりを加えたものであり、乗算器の桁上がりをＲ６に、加算器の桁上がりをｒ１に格納する。
【０１４９】
以後、同様にしてＮ（ｓｉ＋１）ｔ（ｊ），Ｎ（ｓｉ＋２）ｔ（ｊ），…，Ｎ（ｓｉ＋ｓ−１）ｔ（ｊ）の計算を行うが、ｋ＝０の場合とは異なり、累積値Ｍ（Ｎ（ｓｉ＋ｋ）ｔ（ｊ））はユニットｉのレジスタＲ３に格納されＲＡＭ２へ送られる。また、Ｎ（ｓｉ＋ｓ−１）ｔ（ｊ）では桁上がり値Ｃ（Ｎ（ｓｉ＋ｓ−１）ｔ（ｊ））はユニットｉ＋１のＮ（ｓ（ｉ＋１））ｔ（ｊ）を計算する際に利用されるので、配線Ｂ、ｂを通してユニットｉ＋１のレジスタＲ７、ｒ２に送られる。
【０１５０】
また、上記ｘ（ｓｉ＋ｋ）ｙ（ｊ）、Ｎ（ｓｉ＋ｋ）ｔ（ｊ）の計算以外に、ユニット０では式（３５）のｔ（ｊ）の計算も行う。これは、累積値Ｍ（ｘ（０）ｙ（ｊ））をレジスタＲ２に、ＲＡＭ１からＮｉｎｖを読み出しレジスタＲ１に格納しておき、これを用いて計算される。ここで計算されたｔ（ｊ）は、配線Ａ、ａを通して順次上位ユニットへ送られる。
【０１５１】
以後、ｕ個のユニットそれぞれでｊ＝ｎまでｘ（ｓｉ＋ｋ）ｙ（ｊ）（ｋ＝０，１，…，ｓ−１）とＮ（ｓｉ＋ｋ）ｔ（ｊ）（ｋ＝０，１，…，ｓ−１）の計算を繰り返すことによりモンゴメリ乗算を行う。
【０１５２】
第７の実施の形態ではｕ＝ｎ＋２の場合について、第８の実施の形態ではｕ＞ｎ＋２の場合について、第９の実施の形態ではｕ＜ｎ＋２の場合について述べた。第７の実施の形態は、第９の実施の形態においてｓ＝１としたものと等しい。よって、図１８、図１９、図２０、図２１に示した構成で、剰余演算制御部１３０による制御を変えることで第７の実施の形態、第８の実施の形態、第９の実施の形態の演算を実行できる剰余演算装置を構成でき、同じ剰余演算装置を用いて様々な法サイズの演算を効率良く実行できることが分かる。また、同じ法サイズの演算を、演算に用いるユニット数によらず効率よく処理できるため、スケーラビリティに優れた方式となっていることが分かる。
【０１５３】
このような構成にすることで、ユニット数とべき乗剰余算の相対処理速度の関係は、図２７に示したようになる。図２７は、法Ｎのサイズを５１２ビット、１０２４ビット、２０４８ビットとした際の、剰余演算装置の処理ユニット数とべき乗剰余算の相対処理速度を示したものである。ｕ≦ｎ＋２の場合にはユニット数に比例した効率が得られることが分かり、回路規模あたりの処理速度で定義できる装置の効率がユニット数によらず一定になっていることが分かる。
【０１５４】
また、回路規模については、各ユニットは乗算器１個、加算器１個とレジスタなどから構成されるため、非特許文献４に比べて十分小さくすることが可能である。
【０１５５】
（第１０の実施の形態）
次に、被演算子の連続した数ワードずつを各処理ユニットの負荷が均等化するように剰余演算の法サイズと処理ユニット数に応じて下位ユニットから割り振ることによりパイプライン処理の効率を高めた第７乃至第９の実施の形態において、第１乃至第６の実施の形態のｔ計算の前倒し処理を組み合わせる実施の形態を説明する。一例として、第９の実施の形態においてｔ計算部を独立させたものを第１０の実施の形態として図２９を参照して説明する。
【０１５６】
第１０の実施の形態では、ユニット数ｕが法Ｎのワード数よりも少ない、つまりｕ＜ｎ＋２の場合について述べる。第１０の実施の形態では図２９のように演算を処理する。例では、ｎ＝２、ｕ＝２であるから、ユニット０ではｘ（０），ｘ（１），Ｎ（０），Ｎ（１）、ユニット１ではｘ（２），Ｎ（２）と桁上がりワードというように、各ユニットが連続した２ワードの演算を受け持ち、ｘ（ｉ）ｙ（ｊ）を計算するステップとＮ（ｉ）ｔ（ｊ）を計算するステップを処理する。また、ｔ計算部はユニット０からの入力Ｍ（ｘ（ｉ）ｙ（ｊ））に基づきｔ（ｊ）の計算を行う。この際、各ユニットが受け持つワード数ｓが２ワード以上であれば、ｔ計算部における前倒し計算は必要ない。ｓが１の場合には、第１の実施の形態と同様に前倒し計算をする必要がある。
【０１５７】
図２６に示した第９の実施の形態においては、ｔ計算をユニット０において計算していたが（ステップ３、８、…）、図２９に示す第１０の実施の形態では、ステップ２、６、…で処理ユニットでの処理と並列にｔ計算部でｔ計算も行っているので、さらなる高速化が達成される。図示していないが、第７、第８、第９の実施の形態も図２９に示すように変形することができる。
【０１５８】
このように、第７乃至第１０の実施の形態では、剰余演算装置のユニット数が法Ｎのワード数より少ない場合でも、そのユニット数において最適な処理性能が得られ、またモンゴメリ乗算の制御を変えるのみでユニットごとのモジュール性が高く柔軟性の高い方式となっているため、ユニットをモジュールとして用いて様々な法サイズに対応可能な柔軟な構成を持つ剰余演算装置が構成可能である。
【０１５９】
（第１１の実施の形態）
第１１の実施の形態では、１つの剰余演算装置で同時に複数の演算を行う方式について述べる。第７、第８、第９の実施の形態では、１つの剰余演算装置で１つの剰余乗算を行う場合について説明したが、図１９、図２０、図２１に示したユニットの構成はモジュール性の高い構成となっており、１つの基本演算部１３１が持つｕ個のユニットを連続したユニットの集合に分けて使用することにより複数のモンゴメリ乗算を並行して行うことが可能である。この際の制御は、剰余演算制御部１３０が行う。
【０１６０】
例として、８個のユニットを具備する基本演算部１３１を持つ剰余演算装置１４０について考える。このとき、例えば法Ｎとして３０ワードの値についてｘｙＲ−１  ｍｏｄ  Ｎが入力された際には、１ユニットが４ワードを担当することになる。
【０１６１】
ここで、この剰余演算装置に、３０ワードの法Ｎによるモンゴメリ乗算ｘｙＲ−１  ｍｏｄ  Ｎと、１４ワードの法Ｎ’によるモンゴメリ乗算ａｂＲ’−１  ｍｏｄ  Ｎ’が入力された場合を考える。その場合、一つの実装方式としてはｘｙＲ−１  ｍｏｄ  Ｎの計算が終わった後にａｂＲ’−１  ｍｏｄ  Ｎ’を計算する方式が考えられる。
【０１６２】
第１１の実施の形態では、これを１つの剰余演算装置を２つの部分に分けて利用することで行う。例えば、ユニット０からユニット３でｘｙＲ−１  ｍｏｄ  Ｎの計算を行い、ユニット４からユニット７でａｂＲ’−１  ｍｏｄ  Ｎ’の計算を行う。つまり、ユニット０からユニット３では各ユニットがそれぞれ８ワードの演算を、ユニット４からユニット７では各ユニットがそれぞれ４ワードの演算を受け持つこととなる。これを、図示したのが図２８であり、この場合ユニット３からユニット４への情報の伝達は発生しない。
【０１６３】
この複数のモンゴメリ乗算を行う際の演算の制御も剰余演算制御部１３０が行い、ユニット０からユニット３と、ユニット４からユニット７を独立に動作させることで、複数のモンゴメリ乗算を並列に実行することができる。
【０１６４】
本発明は上述した実施の形態に限定されず、種々変形して実施可能である。例えば、本願発明は上記各実施の形態に限定されるものではなく、実施段階ではその趣旨を逸脱しない範囲で種々に変形することが可能である。また、各実施の形態は可能な限り適宜組み合わせて実施してもよく、その場合組合わせた効果が得られる。さらに、上記実施の形態には種々の段階の発明が含まれており、開示される複数の構成要件における適宜な組合わせにより種々の発明が抽出され得る。例えば、実施の形態に示される全構成要件から幾つかの構成要件が削除されても、発明が解決しようとする課題の欄で述べた課題の少なくとも１つが解決でき、発明の効果の欄で述べられている効果の少なくとも１つが得られる場合には、この構成要件が削除された構成が発明として抽出され得る。
【０１６５】
また、本発明は、コンピュータに所定の手段を実行させるための、コンピュータを所定の手段として機能させるための、あるいはコンピュータに所定の機能を実現させるためのプログラムを記録したコンピュータ読取り可能な記録媒体としても実施することもできる。
【０１６６】
【発明の効果】
以上説明したように本発明によれば、下記のような作用効果を奏する剰余演算装置、剰余演算方法、及びべき乗剰余演算装置を提供することができる。
【０１６７】
複数ユニットのパイプライン処理によるモンゴメリ乗算において、回路規模あたりの処理性能が最適化されており、かつ、ｔの計算によって余分な遅延が発生しない。
【０１６８】
クリティカルパスの短縮により、高い動作周波数での処理が可能である。
【０１６９】
整数のバイナリ表現の下で複数処理ユニットのパイプライン処理でモンゴメリ乗算を行う場合に、処理ユニット数をワード数以下に減らした場合でも、減らした処理ユニット数に比例した速度の低下のみしか起こらず、回路規模あたりの処理速度で定義される装置の効率が最適化されるため、ＲＳＡ暗号の処理等に用いられるのに適する。
【図面の簡単な説明】
【図１】本発明の第１の実施の形態に係る“べき乗剰余”演算装置１の機能ブロックを示す図。
【図２】モンゴメリ乗算アルゴリズムの処理を示す図。
【図３】図２をワード単位に分割した場合の処理を示す図。
【図４】図３をパイプラインで扱う場合の処理を示す図。
【図５】第１の実施の形態に係る剰余演算装置１４の機能ブロックを示す図。
【図６】第１の実施の形態に係るパイプライン処理の流れを示す図。
【図７】モンゴメリ乗算における変数ｔの演算途中結果依存性を示す図。
【図８】第１の実施の形態に係る処理ユニット３１の構成及び処理動作を示す図。
【図９】第１の実施の形態に係るｔ計算部４０の構成及び処理動作を示す図。
【図１０】第１の実施の形態に係るキャリー部５０の構成及び処理動作を示す図。
【図１１】第３の実施の形態に係るパイプライン処理の流れを示す図。
【図１２】第３の実施の形態に係る処理ユニット３１の構成を示す図。
【図１３】第３の実施の形態に係るｔ計算部の構成を示す図。
【図１４】第４の実施の形態に係るパイプライン処理の流れを示す図。
【図１５】第４の実施の形態に係る処理ユニット３１の構成を示す図。
【図１６】第４の実施の形態に係るｔ計算部４０の構成を示す図。
【図１７】第６の実施の形態に係るパイプライン処理の流れを示す図。
【図１８】本発明の第７の実施の形態に係る剰余演算装置の構成を示す図。
【図１９】第７の実施の形態に係る処理ユニット１４１の構成を示す図。
【図２０】第７の実施の形態に係る最下位の処理ユニット１４１の構成を示す図。
【図２１】第７の実施の形態に係る最上位の処理ユニット１４１の構成を示す図。
【図２２】第７の実施の形態に係るモンゴメリ乗算における変数ｘと変数ｙの乗算手順を示す図。
【図２３】第７の実施の形態に係るモンゴメリ乗算における変数Ｎと変数ｔの乗算手順を示す図。
【図２４】第７の実施の形態に係るモンゴメリ乗算におけるｘｙ＋Ｎｔの計算手順を示す図。
【図２５】第７の実施の形態に係るｘｙ＋Ｎｔの計算手順を示す図。
【図２６】本発明の第９の実施の形態に係るｘｙ＋Ｎｔの計算手順を示す図。
【図２７】第９の実施の形態における処理ユニット数と法サイズによる相対処理速度の比較を示す図。
【図２８】本発明の第１１の実施の形態に係る剰余乗算装置を示す図。
【図２９】本発明の第１０の実施の形態に係るｘｙ＋Ｎｔの計算手順を示す図。
【符号の説明】
１…べき乗剰余演算装置、１１…入出力部、１２…制御部、１３…剰余演算部、１４…剰余演算装置、１５…Ｎｉｎｖ演算部、２１…Ｎ用レジスタ、２２…Ｒ算出部、２３…ｅ用レジスタ、２４…ビット長算出部、２５…ｅｉ判定部、２６…ａ’用レジスタ、２７…ｂ’用レジスタ、２８…セレクタ、２９…ｂ判定部、３０…基本演算部、３１…パイプライン処理単位ユニット、３２…積和回路、４０…ｔ計算部、４１…積和回路、５０…キャリー部、
【図１】
2004280036.tif 000016
【図２】
2004280036.tif 000017
【図３】
2004280036.tif 000018
【図４】
2004280036.tif 000019
【図５】
2004280036.tif 000020
【図６】
2004280036.tif 000021
【図７】
2004280036.tif 000022
【図８】
2004280036.tif 000023
【図９】
2004280036.tif 000024
【図１０】
2004280036.tif 000025
【図１１】
2004280036.tif 000026
【図１２】
2004280036.tif 000027
【図１３】
2004280036.tif 000028
【図１４】
2004280036.tif 000029
【図１５】
2004280036.tif 000030
【図１６】
2004280036.tif 000031
【図１７】
2004280036.tif 000032
【図１８】
2004280036.tif 000033
【図１９】
2004280036.tif 000034
【図２０】
2004280036.tif 000035
【図２１】
2004280036.tif 000036
【図２２】
2004280036.tif 000037
【図２３】
2004280036.tif 000038
【図２４】
2004280036.tif 000039
【図２５】
2004280036.tif 000040
【図２６】
2004280036.tif 000041
【図２７】
2004280036.tif 000042
【図２８】
2004280036.tif 000043
【図２９】
2004280036.tif 000044