(57)【要約】Ｎを法とする第１の数Ｘ及び第２の数Ｙの積Ｐを計算する方法及び装置であって、Ｙは、各々が長さｐビットのｊワードに分割され、長さ（ｍ＋ｎ）ビットを有し、これら方法及び装置は、Ｙのｊワードの連続的な一つでサイクル的に動作し、形成された中間の積の中間的な法減少を実行する。Ｎの特別に選択した倍数Ｎ’を用いて、Ｎ’に基づく中間の単一の減少のみが、中間の積Ｐが各サイクルの終了時に（ｍ＋ｎ）ビットを超えないことを保証するようにする。Ｎ’はＮの整数倍であり、（ｍ−１）の最上位ビットが‘１’に等しくなるとともに最下位ビットが‘０’になるように値Ｎ’を選択する。
2006500615.tif 000002
【特許請求の範囲】
【請求項１】
Ｎを法とする第１の値Ｘ及び第２の値Ｙの積Ｐを計算する方法であって、Ｙが、各々が長さｐビットのｊワードに分割され、Ｘが長さ（ｍ＋ｎ）ビットを有し、
ａ）積レジスタＰを初期化するステップと、
ｂ）Ｙのｊワードのうちの最初のものを乗算器にロードするステップと、
ｃ）ＸをＹのロードされたワードに乗算して、中間の積Ｔを形成するステップと、
ｄ）前記積レジスタＰをＴ及びＰ＊２ｐの和によって更新するステップと、
ｅ）値ＰＨ（Ｎ’／２）の減算によって積レジスタＰのコンテンツを減少するステップと、
ｆ）Ｙのｊワードの連続するものを前記乗算器にロードするとともに、Ｙのｊワードの各々に対してステップｃ）〜ｅ）を繰り返すステップとを具え、
Ｎ’をＮの整数倍とし、（ｍ−１）の最上位ビットを‘１’に等しくするとともに最下位ビットが‘０’になるように値Ｎ’を選択し、
ＰＨを、前記レジスタのＰの（ｐ＋２）の最上位ビットとして選択することを特徴とする方法。
【請求項２】
前記第２の数Ｙも（ｍ＋ｎ）ビットの長さを有することを特徴とする請求項１記載の方法。
【請求項３】
ｍ≧ｐ＋３を選択するステップを更に有することを特徴とする請求項１又は２記載の方法。
【請求項４】
（ｍ＋ｎ）をｐビットの倍数として選択するステップを更に有することを特徴とする請求項１から３のうちのいずれか１項に記載の方法。
【請求項５】
前記乗算ステップを実行するとともに前記値ＰＨ（Ｎ’／２）を取得するために（ｐ＋２）＊ｐ乗算器を用いるステップを更に有することを特徴とする請求項１から４のうちのいずれか１項に記載の方法。
【請求項６】
前記乗算器にロードされるＹのｊワードのうちの最初のものを最上位ワードとし、ｊワードの連続的なものを、位が減少する順序でロードすることを特徴とする請求項１から５のうちのいずれか１項に記載の方法。
【請求項７】
パイプライン化された処理アーキテクチャで実行され、前記ステップｃ）〜ｅ）の連続的なサイクルに対する乗算ステップが、以前のサイクルの減算ステップｅ）の完了前に開始することを特徴とする請求項１から６のうちのいずれか１項に記載の方法。
【請求項８】
Ｎを法とする第１の値Ｘ及び第２の値Ｙの積Ｐを計算するプロセッサであって、Ｙが、各々が長さｐビットのｊワードに分割され、Ｘが長さ（ｍ＋ｎ）ビットを有し、
ａ）積レジスタＰを初期化する初期化手段と、
ｂ）Ｙのｊワードのうちの最初のものを乗算器にロードするロード手段と、
ｃ）ＸをＹのロードされたワードに乗算して、中間の積Ｔを形成する乗算器と、
ｄ）前記積レジスタＰをＴ及びＰ＊２ｐの和によって更新する更新手段と、
ｅ）値ＰＨ（Ｎ’／２）の減算によって積レジスタＰのコンテンツを減少する減少手段と、
ｆ）Ｙのｊワードの連続するものを前記乗算器にロードするとともに、Ｙのｊワードの各々に対してステップｃ）〜ｅ）を繰り返す制御手段とを具え、
Ｎ’をＮの整数倍とし、（ｍ−１）の最上位ビットを‘１’に等しくするとともに最下位ビットが‘０’になるように値Ｎ’を選択し、
ＰＨを、前記レジスタのＰの（ｐ＋２）の最上位ビットとして選択することを特徴とするプロセッサ。
【請求項９】
前記第２の数Ｙも（ｍ＋ｎ）ビットの長さを有することを特徴とする請求項８記載のプロセッサ。
【請求項１０】
ｍ≧ｐ＋３とすることを特徴とする請求項８又は９記載のプロセッサ。
【請求項１１】
（ｍ＋ｎ）をｐビットの整数倍としたことを特徴とする請求項８から１０のうちのいずれか１項に記載のプロセッサ。
【請求項１２】
前記乗算器が、ＰＨ（Ｎ’／２）の値を前記減少手段に供給するようにも適合した（ｐ＋２）＊ｐ乗算器としたことを特徴とする請求項８から１１のうちのいずれか１項に記載のプロセッサ。
【請求項１３】
前記ロード手段が、前記乗算器にロードされるＹのｊワードのうちの最初のものとして最上位ワードをロードするように適合され、ｊワードの連続的なものが、位が減少する順序でロードされることを特徴とする請求項８から１２のうちのいずれか１項に記載のプロセッサ。
【請求項１４】
パイプライン化された処理アーキテクチャで実現され、前記乗算器が、前記減算手段が先のサイクルに対するＰのコンテンツの減少を完了する前に、連続的なサイクルに対するＴの新たな値を取得するために乗算動作を開始することを特徴とする請求項８から１３のうちのいずれか１項に記載のプロセッサ。
【請求項１５】
コンピュータプログラムプロダクトであって、前記プログラムがコンピュータにロードされる際に、請求項１から７のうちのいずれか１項の手順をコンピュータに実行させるよう適合したコンピュータプログラムコード手段を有するコンピュータ読み出し可能媒体を具えることを特徴とするコンピュータプログラムプロダクト。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、二つの長整数の乗算を行い、第三の長整数を法としている方法及び装置に関する。そのような乗算を、例えば、暗号プロセッサの公開鍵アルゴリズムの実現中に繰り返し実行する必要がある。
【背景技術】
【０００２】
したがって、乗算を実行するのに要する時間に関して最も有効となるように、乗算動作を実現することは重要である。さらに、乗算される整数の長さより著しく小さいことがある最大ワードサイズのようなしばしば所定の実用的な制限を有する演算ハードウェア上で、有効に計算を実行できるようにすることは重要である。したがって、制限されたハードウェア上で有効に乗算動作を実行できる計算アルゴリズムを設けることも重要である。
【０００３】
例えば、多くの場合において、３２ビット幅データワードしか処理できないハードウェアを用いて１０２４ビット数又は４０９６ビット数の乗算を行う必要がある。特に、ＲＳＡ暗号化アルゴリズムは、現在では１０２４ビット数の処理を必要としており、これは、セキュリティを向上するために４０９６ビット数まで増大する。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
本発明の目的は、更に少ない計算を有し、したがって、現存するハードウェア上で更に高速に実現することができる更に有効な乗算方法を提供することである。
【課題を解決するための手段】
【０００５】
一態様によれば、本発明は、
Ｎを法とする第１の値Ｘ及び第２の値Ｙの積Ｐを計算する方法であって、Ｙが、各々が長さｐビットのｊワードに分割され、Ｘが長さ（ｍ＋ｎ）ビットを有し、
ａ）積レジスタＰを初期化するステップと、
ｂ）Ｙのｊワードのうちの最初のものを乗算器にロードするステップと、
ｃ）ＸをＹのロードされたワードに乗算して、中間の積Ｔを形成するステップと、
ｄ）前記積レジスタＰをＴ及びＰ＊２ｐの和によって更新するステップと、
ｅ）値ＰＨ（Ｎ’／２）の減算によって積レジスタＰのコンテンツを減少するステップと、
ｆ）Ｙのｊワードの連続するものを前記乗算器にロードするとともに、Ｙのｊワードの各々に対してステップｃ）〜ｅ）を繰り返すステップとを具え、
Ｎ’をＮの整数倍とし、（ｍ−１）の最上位ビットを‘１’に等しくするとともに最下位ビットが‘０’になるように値Ｎ’を選択し、
ＰＨを、前記レジスタのＰの（ｐ＋２）の最上位ビットとして選択することを特徴とする方法を提供する。
【０００６】
他の態様によれば、本発明は、
Ｎを法とする第１の値Ｘ及び第２の値Ｙの積Ｐを計算するプロセッサであって、Ｙが、各々が長さｐビットのｊワードに分割され、Ｘが長さ（ｍ＋ｎ）ビットを有し、
ａ）積レジスタＰを初期化する初期化手段と、
ｂ）Ｙのｊワードのうちの最初のものを乗算器にロードするロード手段と、
ｃ）ＸをＹのロードされたワードに乗算して、中間の積Ｔを形成する乗算器と、
ｄ）前記積レジスタＰをＴ及びＰ＊２ｐの和によって更新する更新手段と、
ｅ）値ＰＨ（Ｎ’／２）の減算によって積レジスタＰのコンテンツを減少する減少手段と、
ｆ）Ｙのｊワードの連続するものを前記乗算器にロードするとともに、Ｙのｊワードの各々に対してステップｃ）〜ｅ）を繰り返す制御手段とを具え、
Ｎ’をＮの整数倍とし、（ｍ−１）の最上位ビットを‘１’に等しくするとともに最下位ビットが‘０’になるように値Ｎ’を選択し、
ＰＨを、前記レジスタのＰの（ｐ＋２）の最上位ビットとして選択することを特徴とするプロセッサを提供する。
【発明を実施するための最良の形態】
【０００７】
本発明の実施の形態を、例示によって添付図面を参照しながら説明する。
【０００８】
ＲＳＡ又はＥＣＣ公開鍵動作中に数千回実行する必要がある計算は、積
Ｐ＝Ｘ＊ＹｍｏｄＮ
を決定することであり、この場合、Ｘ，Ｙ及びＮは全て長さ（ｍ＋ｎ）ビットの長整数である。従来の方法において、長整数Ｘ及びＹは、ｐビットワード（典型的には３２ビットワード）として処理される。部分積を、適切にサイズ化された乗算器、好適にはワードサイズを処理するために適切にサイズ化された例えばｐ＊ｐ乗算器を用いて計算することができる。
【０００９】
ここで図１を参照して説明すると、従来のQuisquater帰着(Quisquater reduction)形態１０において、実行される計算は、
Ｐ＝Ｘ＊ＹｍｏｄＮ’
である。この場合、Ｎ’をＮの倍数とし、すなわち、／を整数としたときにＮ’＝／．Ｎとする。さらに、ｍ最上位ビットが‘１’となるとともにＮ’が（ｎ＋Ｍ）ビット幅となるようにＮ’を特別に選択する。
←  ｍ    →←      ｎ    →
Ｎ’＝  １１１．．．１Ｎn-1Ｎn-2．．．Ｎ0
【００１０】
積Ｐ及びＮ’を法とする積Ｐの減算は、以下のアルゴリズムに従って計算される。
Ｂ＝２p（例えば、ｐ＝３２）
【００１１】
【数１】
2006500615.tif 000003
この場合、ｙiを、Ｙのｉ番目のｐビットワードとし、ｊを、Ｙのｐビットワードの数とする（すなわち、ｊ＊ｐ＝（ｍ＋ｎ））。
Ｐ＝０；
for i=j-1 downto 0
{  T=X*y(i)
P=P*B+T
P=P-(PH*N’)  //reduction of P
If msb(P)=1 then P=P-N’
}
【００１２】
図１を参照すると、Ｐは零に初期化され（ステップ１１）、ループ１０ａに対して、制御パラメータｉ＝（ｊ−１）による初期化が行われる（ステップ１２）。ステップ１３において、中間積(intermediate product)ＴがＸ＊y(i)として計算される。Ｘは（ｎ＋ｍ）ビット幅であり、y(i)はｐビット幅であり、その結果、積Ｔは（ｎ＋ｍ＋ｐ）ビット幅となる。これを、（ｎ＋ｍ）＊ｐビット乗算器を用いてワンパスで計算することができ、又は、Ｘを、更に小さい乗算器を用いてフラグメントで処理することができる。例えば、Ｘが、ｊ個のｐビットワードにも分解される場合、Ｘ＊y(i)を、ｐ＊ｐビット乗算器を用いて計算することができる。後に説明する他の理由のために、（ｐ＋１）＊ｐビット乗算器を用いるのが好ましい。
【００１３】
ループ１０ａの各サイクルにおいて、Ｐは、（ｎ＋ｍ）又は小ビット幅で開始し、その結果、積Ｐ＊Ｂは、（ｎ＋ｍ＋ｐ）ビット幅となる。Ｔの加算（ステップ１４）後、Ｐは、低減動作１５の前に最大でも（ｎ＋ｍ＋Ｐ＋１）ビット幅となる。この段階では、ＰをＰH．２n+mとして書き込むことができ、この場合、ＰHを、Ｐの上位の（ｐ＋１）ビットとし、それに対して、ＰLを、Ｐの残りの下位の（ｍ＋ｎ）ビットとする。モジュロ減少に対して、Ｐのサイズを、ＰH＊Ｎ’の減算を含む第１減算動作においてＮ’の倍数の減算によって減少することができる。
【００１４】
（ＰH＊Ｎ）の第１の減算の後、Ｐは、最大でも（ｍ＋ｎ＋１）ビットとなる。（ステップ１６のチェックにおいて）最上位ビットが１であるとき、他の減算動作Ｐ＝Ｐ−Ｎ’が要求され（ステップ１７）、Ｐを再び（ｍ＋ｎ）ビット長に減少する。このポイントでは、ｉの値が減分され（ステップ１８）、ループ１０ａは、ステップ１９の制御の下でｊサイクルが完了するまで繰り返される。
【００１５】
このアルゴリズムにおいて、各ループ１０ａにおけるＰの減少は、更なる減算動作（ステップ１７）が必要であるか否かを知るためのテスト（ステップ１６）を要求する。典型的な実現において、ｍは大きく、ステップ１７の更なる減算動作Ｐ＝Ｐ−Ｎ’は非常に稀に要求される。したがって、その必要性をチェックするステップ１６の動作は、大幅に浪費される動作である。
【００１６】
上位の（ｍ＋ｎ）−（ｐ＋１＋ｎ）の少なくとも全てすなわちｍ−ｐ−１ビットが‘１’であるときに他の減算動作が要求されるのを示すことができる。これが発生する機会は、２-(m-p-1)である。さらに、残りの（ｍ＋ｎ）ビットの総和は、オーバーフローを付与する。そのように発生するオーバーフローの機会は（２(m+n)−１）／２（ｍ＋ｎ＋１）であり、これを、ｍ及びｎの全ての通常の値に対して０．５で近似することができる。したがって、更なる減算ステップ１７を要求する全機会は、２-(m-p-1)＊０．５＝２-(m-p)となる。
【００１７】
典型的なアプリケーションにおいて、ｍ＝６３及びｐ＝３２であり、その結果、更なる減算動作を実行する必要がある機会の数は、典型的には２×１０９に１回だけである。
【００１８】
したがって、更なる減算が必要であるか否かをチェックする必要がある論理の組込みは、非常に稀に必要とされるイベントに対するオーバーヘッドの重大な処理を表す。
【００１９】
特に、アルゴリズム１０が、パイプライン化された乗算器を用いて実現されるときには、新たの乗算動作（ステップ１３及び１４）は、減算動作（ステップ１５〜１７）の終了まで開始することができない。この理由は、次の乗算動作が開始できるようになる前にＰの最上位ビットをチェックすることによって更なる減算動作（ステップ１７）が必要とされるか否かを確立する（ステップ１６）必要があるからである。
【００２０】
図２を参照すると、図１のアルゴリズム１０の変形２０を説明しており、この場合、更なる減算動作を必要とすることなく各サイクルの終了時のＰの最大サイズが（ｍ＋ｎ）ビットより大きくならないことを保証するように、Ｎ’の値が特別に選択される。
【００２１】
これは、最初の減算動作後のＰの最上位ビットのチェックが必要とされないという相当な処理の利点を提供し、パイプライン化されたプロセッサは、次のサイクルに対する乗算動作を開始する前に減算動作を待機する必要がない。
【００２２】
Ｎ’は、ｍ＋ｎビットの整数として再び特別に選択されるが、この場合、ｍ−１の最上位ビットが‘１’であり、最下位ビットが‘０’であり、その結果、Ｎ’は偶数である。
←ｍ−１  →←    ｎ          →１
Ｎ’＝１１１．．．１Ｎｎ−１Ｎｎ−２．．．Ｎ１ ０
【００２３】
積Ｐ及びＮ’を法とする積Ｐの減算は、以下のアルゴリズムに従って計算される。
Ｂ＝２ｐ（例えば、ｐ＝３２）
【００２４】
【数２】
2006500615.tif 000004
この場合、ｙiを、Ｙのｉ番目のｐビットワードとし、ｊを、Ｙのｐビットワードの数とする（すなわち、ｊ＊ｐ＝（ｍ＋ｎ））。この形態において、Ｐ≦ｍ−３である。
Ｐ＝０；
for i=j-1 downto 0
{  T=X*y(i)
P=P*B+T
P=P-(PH*N’/2)  //reduction of P
}
【００２５】
図２を参照すると、Ｐは零に初期化され（ステップ２１）、ループ２０ａは、制御ぱらっメータｉ＝（ｊ−１）で初期化される（ステップ２２）。
【００２６】
乗算ステップ２３において、中間積Ｔは、Ｘ＊y(i)として計算される。Ｘは、（ｎ＋ｍ）ビット幅であり、y(i)はｐビット幅であり、その結果、積Ｔは、（ｎ＋ｍ＋ｐ）ビット幅となる。これを、（ｎ＋ｍ）＊ｐビット乗算器を用いてワンパスで計算することができ、又は、Ｘを、更に小さい乗算器を用いてフラグメントで処理することができる。例えば、Ｘがｊ個のｐビットワードに分解される場合、Ｘ＊y(i)を、ｐ＊ｐビット乗算器又は（ｐ＋１）＊ｐ乗算器を用いて計算することができる。しかしながら、後に説明する理由から、好適な実施の形態において、ＸとＹの両方がｊワード、x(k)及びy(i)として処理されるときに（ｐ＋２）＊ｐビット乗算器が用いられ、この場合、ｉ＝０．．．（ｊ−１）及びｋ＝０．．．（ｊ−１）である。
【００２７】
ループ２０ａの各サイクルにおいて、Ｐは、（ｎ＋ｍ）又は少数ビット幅で開始し、その結果、積Ｐ＊Ｂは、（ｎ＋ｍ＋ｐ）ビット幅となる。ステップ２４において、Ｐレジスタは、Ｔの加算によって更新される。Ｔの加算後、Ｐは、減算動作２５の前では最大でも（ｎ＋ｍ＋ｐ＋１）ビットとなる。
【００２８】
この段階において、ＰをＰＨ＊2(n+m-1)＋ＰLとして書き込むことができ、この場合、ＰＨは、Ｐの上位の（ｐ＋２）ビットであり、それに対して、ＰＬは、Ｐの残りである下位の（ｍ＋ｎ＋１）ビットである。係数ｋ＝ＰＨ／２は、減算動作２５で用いられるＮ’に対する乗算係数の見積もりとして用いられる。この場合において、減算Ｐ’＝Ｐ−（ＰＨ／２）＊Ｎ’が行われ、又は、ステップ２５として、Ｐ＝Ｐ−ＰＨ＊Ｎ’／２となる。ＰＨが奇数となることがあるので、Ｎ’は、Ｎ’が２で割り切れるように偶数に選択される。
【００２９】
ＰＨ＊Ｎ’／２の最初の減算後、Ｐは、全ての状況の下で（ｍ＋ｎ）ビットとなる。したがって、図１のアルゴリズムとは異なり、最上位ビットチェック又は他の減算動作が要求されない。このポイントで、ｉの値が減分され（ステップ２８）、ループ２０ａは、ステップ２９の制御下でｊサイクルが完了するまで繰り返される。
【００３０】
ここでの好適な実施の形態において、
Ｐ＝Ｐ＋ＰＨ＊Ｍ
を用いることによって、ステップ２５が加算動作として実際に実行される。この場合、二つの相補形態においてＭ＝−Ｎ’／２である。
【００３１】
この加算を、複数のワード（例えば、ｐビットのｊワード）に分解することもできる。更に一般的には、Ｐがサイズｐのｑワードに分解される場合、ワードの各々に対してＰ（ｋ）となる。ここで、ｋ＝０．．．（ｑ−１）となる。
｛Ｃ（ｋ），Ｒ（ｋ）｝＝Ｐ（ｋ）ＰＨ＊Ｍ（ｋ）＋Ｃ（ｋ−１）
この場合、Ｐ（ｋ）は、Ｐのｋ番目のワードであり、Ｍ（ｋ）は、Ｍのｋ番目のワードであり、Ｒ（ｋ）は、計算結果の最下位ワードであり、Ｃ（ｋ）は、乗算結果の残りの上位ビット（最上位ワード）であり、それは、次の上位ワードに対する次の計算でＣ（ｋ−１）として加算される。Ｐが常に負でなく、かつ、常に（ｍ＋ｎ）の最大サイズまで減少されるようなステップ２５によるＰの適切な減少の証明は、以下の通りである。
【００３２】
Ｐが負になることはない。
Ｎ’が最大であるときにＰは最小になる。すなわち、Ｎ’＝２ｍ＋ｎ−２である。
この場合、Ｐ’＞０であることを証明する必要がある。
Ｐ＝ＰＨ．２ｎ＋ｍ−１＋ＰＬ−ＰＨ．（２ｍ＋ｎ−２）／２
＝ＰＬ＋ＰＨ
ＰＬとＰＨの両方とも負でないので、Ｐ’も負でない。
【００３３】
Ｐは（ｍ＋ｎ）ビット幅である。
Ｎ’が最小であるときにＰは最大である。すなわち、Ｎ’＝２ｍ＋ｎ−２ん＋１である。
Ｐ＝ＰＨ．２ｎ＋ｍ−１＋ＰＬ−ＰＨ．（２ｍ＋ｎ−２ｎ＋１）／２
＝ＰＬ＋ＰＨ＊２ｎ
ＰＬは、（ｍ＋ｎ−１）ビット幅である。
ＰＨ＊２ｎは（ｐ＋２＋ｎ）ビット幅である。
ｐ≦ｍ−３であるので、Ｐは最大でも（ｍ＋ｎ）ビット幅である。
【００３４】
既に説明したように、ｍ≧ｐ＋３が条件となる。ＰＨを容易に計算するために、ｍ＋ｎをｐビットの倍数とするのが好ましい。この場合、ＰＨは、加算の実行、加算の最上位ワード及び最上位であるが一つの上位ワードの最上位ビットから計算される。
【００３５】
最大（ｎ＋ｎ＋ｐ＋１）ビットの乗算段階後のＰのレイアウトＰ＝Ｐ＊Ｂ＋Ｔを、図３に示す。ＰＨは、Ｐｎ＋ｍ−１，Ｐｎ＋ｍ，Ｐｎ＋ｍ＋１，．．．Ｐｎ＋ｍ＋ｐ，Ｐｎ＋ｍ＋ｐ＋１のビット位置を用いて確立される。
【００３６】
プライム(prime)Ｎが１６０ビット以下であるとき、３２ビットシステム（ｐ＝３２）に対して、計算する３２ビットワードの数は７である。したがって、パフォーマンスを犠牲とすることなくｍを６４と選択することができる。
【００３７】
１５７ビット以下の長さを有するプライムＮに対して及び１５８〜１６０ビットの長さを有するあるプライムに対して、上位の（ｍ−１）ビットが全て‘１’となるようにＮ’（１９７ビット）を選択することができる。これは、計算するワードの数が７の代わりに６となることを意味する。ＰＨの長さが（ｐ＋２）ビットであるので、好適な実施の形態において、ｐ＊ｐ乗算器の最小要求の代わりに（ｐ＋２）＊ｐ乗算器が用いられる。この場合、ＰＨによるＮ’の乗算を分解する必要がなく、乗算の数が減少される。
【００３８】
図４を参照すると、図２のアルゴリズムを実現するパイプライン化されたプロセッサ４０の一例を示す。プロセッサ４０において、全てのオペランド（Ｘ，Ｙ、及び図４において“Ｚ”と称される積Ｐ）は、処理中にメモリ４１に格納され、記載すべきポインタレジスタによって設けられるような入力“Ａ”に設けられたメモリアドレスに従ってアクセスされる。データは、データ線“Ｄout”上のメモリ４１から読み出されるとともに、データ線“Ｄin”上のメモリに書き込まれる。適切な制御回路、例えばステートマシン（図示せず）は、プロセッサ４０の動作の正確なシーケンスを維持する。
【００３９】
オペランドＸのワードｘ（ｋ）は、ＸＰtrレジスタ４２Ｘによって指定されたアドレスのメモリ４１に格納される。同様に、オペランドＹのワードy(i)は、ＹＰtrレジスタ４２Ｙによって指定されるアドレスのメモリ４１に格納される。積及びオペランドＺのワードｚ（ｋ）は、ＺＰtrレジスタ４２Ｚによってしてされたアドレスのメモリに格納される。オペランド及び積のワード位置の値ｉ及びｋは、４３Ｘ，４３Ｙ及び４３Ｚでそれぞれ示されるカウンタＸＣnt，ＹＣnt及びＺＣntに格納される。ＸＰtr、ＹＰtr及びＺＰtrのアドレスは、カウンタＸＣnt，ＹＣnt，ＺＣntから導き出すことができるオフセットをベースアドレスに加えたものを表す。
【００４０】
関連の動作の各々に対して、Ｘ，Ｙ及びＺの次のワードは、ポインタ４２及びカウンタ４３の制御の下でメモリ４１から検索され、それぞれ４４Ｘ，４４Ｙ及び４４Ｚとラベルを付したレジスタＸＲeg，ＹＲeg及びＺＲegのうちの一つに格納される。ワードがレジスタ４４に対して検索される度に、各カウンタは、それに応じて増分され又は減分される。
【００４１】
Ｘ，Ｙ又はＺのワードの各乗算の結果Ｒの最下位ワードは、ＲＲegレジスタに送出され、４２Ｒを付されたポインタＲＰtrによって表されたアドレスのメモリ４１に格納される。キャリービット、すなわち、結果の最上位ビットＣは、次の乗算で用いる準備をしているＣＲegレジスタ４４Ｃに送出される。
【００４２】
乗算器４５は、必要に応じて、各乗算動作に対するワード入力x(k),y(i),z(k)及びc(k)を受信する。
【００４３】
新たなループ２０ａ（図２）の開始時に、ＣＲegが０に初期化される。その後、乗算ごとに（すなわち、ステップ２３及び２４のループ内のｋの値の各々に対して）、以前の結果Ｃ(k-1)の最上位ワードは、x(k)及びy(i)のｋ番目の乗算に追加される。既に説明したように、ループ２０ａに対してｉが１回更新され、それに対して、ループ２０ａの各パス内でＸのｊワードの各々に対してｋが更新される。ステップ２３（Ｔ＝Ｘ＊y(i)）及びステップ２４（Ｐ＝Ｐ＊Ｂ＋Ｔ）は、有効に結合されるが、全てのx(k)に基づいてワードごとに実行される。
【００４４】
最も頻繁な場合には、乗算器に入力されるz(k)（ステップ２４）は、１ワードシフトされる（Ｂ＝２ｐの乗算）、レジスタ４４Ｒの以前に格納されたＲと同一であるが、減少ステップ２５中ではない。
【００４５】
カウンタ４３は、一連の乗算の各々に対して用いられるワードの数をカウントダウンする。当然、カウンタ４３Ｘ及び４３Ｚは、ループ２０ａを通じた各パスに対してｋ＝（ｑ−１）．．．０からカウントダウンを行い、同時に、カウンタ４３Ｙは、ループ２０ａを通じた各パスに対して１回減分を行う。好適な実施の形態において、カウンタ４３Ｘ及び４３Ｚを組み合わせることができる。
【００４６】
一連のｋ＝（ｑ−１）．．．０の各々の終了時に、ｘ（ｋ）＝０の乗算が更に一度存在し、これによって、乗算動作がＲ（ｋ）＝ｚ（ｋ）＋Ｃ（ｋ−１）まで減少し、これは、格納すべき最終結果である。Ｃ（ｋ）は、常に最終結果で０になる。この場合、互いに相違するオペレータによる減算ステップ（ステップ２５）が開始され（又は既に説明したような同等の加算が行われ）る。これは、同一の乗算器４５を用いて実行される。
【００４７】
本発明において、減算ステップ２５中、Ｘ及びＹの次の値が常にロードされるが、これは図１の従来の形態の場合ではない。その理由は、更なる減算ステップ１７が存在する可能性があるからである。
【００４８】
他の実施の形態は、添付した特許請求の範囲内にある。
【図面の簡単な説明】
【００４９】
【図１】従来のQuisquater reductionアルゴリズムを表現する流れ図を示す。
【図２】向上したQuisquater reductionアルゴリズムを表現する流れ図を示す。
【図３】減少動作の前の式Ｐ並びにその構成要素ＰＨ及びＰＬのレイアウトの線形図を示す。
【図４】図２のアルゴリズムを実現するパイプライン化されたプロセッサの線形図を示す。
【図１】
2006500615.tif 000005
【図２】
2006500615.tif 000006
【図３】
2006500615.tif 000007
【図４】
2006500615.tif 000008
【国際調査報告】
2006500615.tif 000009
2006500615.tif 000010