(57)【要約】【課題】  多重精度を支援する拡張型モンゴメリモジュラ掛け算器を提供する。【解決手段】  本発明の掛け算器は、−Ｍ、０、Ｍ、２Ｍと以前行の結果ＳＩのｎビットモジュラス数のうちの一つをモジュラス積に選択するモジュラス積発生器と、−２Ａ、−Ａ、０、＋Ａ、および＋２Ａの被乗数のうちの一つを部分積の被乗数で選択する部分積発生器と、選択された前記モジュラス積と前記部分積とを累算する累算器とを含むことを特徴とする。【選択図】図８
2005250481.tif 000002
【特許請求の範囲】
【請求項１】
−Ｍ、０、Ｍ、２Ｍと以前行の結果ＳＩのｎビットモジュラス数のうちの一つをモジュラス積に選択するモジュラス積発生器と、
−２Ａ、−Ａ、０、＋Ａ、および＋２Ａの被乗数のうちの一つを部分積の被乗数で選択する部分積発生器と、
選択された前記モジュラス積と前記部分積とを累算する累算器とを含むことを特徴とする掛け算器。
【請求項２】
前記Ｍはｎビットモジュラス数のうちの現在入力された派生された部分から形成され、
前記Ａはｎビット被乗数のうちの現在入力された派生された部分から形成されることを特徴とする請求項１に記載の掛け算器。
【請求項３】
前記以前行の結果は前記累算器の以前行の掛け算結果のうちの前記被乗数と前記モジュラス数の現在入力された派生された部分に対応するビットから形成されることを特徴とする請求項２に記載の掛け算器。
【請求項４】
前記モジュラス積発生器は、
前記累算器の初期値修正サイクルで前記以前行の結果をモジュラス積に選択することを特徴とする請求項２に記載の掛け算器。
【請求項５】
前記部分積発生器は、
前記累算器の初期値修正サイクルで前記部分積を‘０’に設定することを特徴とする請求項４に記載の掛け算器。
【請求項６】
前記初期値修正サイクルは、
前記ｎビット被乗数と前記ｎビットモジュラス数のうちの現在入力された派生された部分のビットとを使用した基本掛け算演算の最初サイクルを示すことを特徴とする請求項４に記載の掛け算器。
【請求項７】
前記初期値修正サイクルは、
前記ｎビット被乗数と前記ｎビットモジュラス数のうちの現在入力された派生された部分のビットとを使用した基本掛け算演算の最初サイクルを示すことを特徴とする請求項５に記載の掛け算器。
【請求項８】
前記モジュラス数−Ｍは前記モジュラス数Ｍを反転させることによって求められることを特徴とする請求項１に記載の掛け算器。
【請求項９】
前記モジュラス数２Ｍは前記モジュラス数Ｍをシフトすることによって求められることを特徴とする請求項１に記載の掛け算器。
【請求項１０】
前記ｎビットモジュラス数（Ｍ）のうちの現在入力されたビットを貯蔵するためのモジュラスレジスタと、
前記ｎビット被乗数(Ａ)のうちの現在入力されたビットを貯蔵するための被乗数レジスタと、
前記ｎビット乗数(Ｂ)のうちの現在入力されたビットを貯蔵するための乗数レジスタとをさらに含むことを特徴とする請求項２に記載の掛け算器。
【請求項１１】
前記モジュラスレジスタと前記被乗数レジスタとはｃ'＋１ビットレジスタで各々構成され、
ｃ'はｎと同一、またはｎより小さい前記ｎビット被乗数と前記ｎビットモジュラス数のうちの少なくとも一つの派生された部分のビットとを示すプラスの整数であることを特徴とする請求項１０に記載の掛け算器。
【請求項１２】
前記モジュラスレジスタはハーフワードの大きさの多数のサブレジスタと１ビット符号レジスタとをさらに含むことを特徴とする請求項１０に記載の掛け算器。
【請求項１３】
ワード長さのデータを貯蔵するメモリインターフェースブロックをさらに含み、
前記モジュラスレジスタの多数のサブレジスタは偶数番目のサブレジスタと奇数番目ののサブレジスタとを含み、
前記偶数番目のサブレジスタは前記メモリインターフェースブロックから供給されたワード長さのデータのうちの下位ハーフワードを貯蔵し、
前記奇数番目のサブレジスタは前記メモリインターフェースブロックから供給されたワード長さのデータのうちの上位ハーフワードを貯蔵することを特徴とする請求項１２に記載の掛け算器。
【請求項１４】
前記被乗数レジスタはハーフワード大きさの多数のサブレジスタと１ビット符号レジスタとをさらに含むことを特徴とする請求項１０に記載の掛け算器。
【請求項１５】
ワード長さのデータを貯蔵するメモリインターフェースブロックをさらに含み、
前記被乗数レジスタの多数のサブレジスタは偶数番目のサブレジスタと奇数番目のサブレジスタとを含み、
前記偶数番目のサブレジスタは前記メモリインターフェースブロックから供給されたワード長さのデータのうちの下位ハーフワードを貯蔵し、
前記奇数番目のサブレジスタは前記メモリインターフェースブロックから供給されたワード長さのデータのうちの上位ハーフワードを貯蔵することを特徴とする請求項１４に記載の掛け算器。
【請求項１６】
ワード長さ(ｗ)が派生された部分の長さ(ｃ)と同一、または派生された部分の長さ(ｃ)より小さい、ｗ ＜＝ ｃ ＜＝ ｎ、前記ｎビット乗数のうちの入力ビットを貯蔵し、データを２ビットずつシフトするシフトレジスタをさらに含むことを特徴とする請求項１０に記載の掛け算器。
【請求項１７】
前記部分積発生器は、
前記ｎビット乗数のうちの現在入力されたビットの三つのビット(Ｂ０、Ｂ１、ＢＲ)から部分積選択信号を発生し、前記ｎビット被乗数の入力されたビットのうちのＡ、２Ａ、−Ａおよび−２Ａのうちの一つを前記部分積に選択することを特徴とする請求項１６に記載の掛け算器。
【請求項１８】
前記被乗数２Ａは前記被乗数Ａをシフトすることによって求められることを特徴とする請求項１７に記載の掛け算器。
【請求項１９】
前記被乗数−Ａは前記被乗数Ａを反転させることによって求められることを特徴とする請求項１７に記載の掛け算器。
【請求項２０】
前記被乗数−２Ａは前記被乗数Ａを反転させ、シフトすることによって求められることを特徴とする請求項１７に記載の掛け算器。
【請求項２１】
メモリと、
被乗数Ａ、乗数Ｂおよびモジュラス数Ｍを前記メモリに貯蔵するホストと、
前記ホストの制御に応じて貯蔵された被乗数、乗数およびモジュラス数でモンゴメリ掛け算演算を実行し、モンゴメリ掛け算演算から得られた演算結果を前記メモリに貯蔵することを特徴とする請求項１に記載の掛け算器を含む演算装置。
【請求項２２】
Ｍは前記ｎビットモジュラス数のうちの現在入力された派生された部分から形成され、Ａはｎビット被乗数のうちの現在入力された派生された部分から形成され、
前記以前行の結果は前記累算器の以前列の掛け算結果のうちの前記被乗数と前記モジュラス数の現在入力された派生された部分に対応するビットとから形成されることを特徴とする請求項２１に記載の演算装置。
【請求項２３】
前記モジュラス積発生器は前記メモリから前記以前行の結果であるＳＩと前記ｎビットモジュラス数の一部とを読み出し、ＳＩ、−Ｍ、０、Ｍおよび２Ｍのうちの一つを前記モジュラス積に選択し、
前記部分積発生器はｎビット被乗数のうちの一部を読み出し、−２Ａ、−Ａ、０、＋Ａ および２Ａのうちの一つを前記部分積に選択し、前記選択されたモジュラス積と部分積とを累算する累算器を含むことを特徴とする請求項２１に記載の演算装置。
【請求項２４】
前記メモリから前記被乗数、乗数およびモジュラス全体を読み出すまで前記掛け算を繰り返して実行することを特徴とする請求項２１に記載の演算装置。
【請求項２５】
前記被乗数、乗数、およびモジュラス数が各々ｎビットであり、
前記掛け算器が一回にｃ' ビットずつ掛け算演算を実行することができるとき、前記掛け算器は前記被乗数、乗数、およびモジュラス数を ｃ' ビットずつ読み出し、ここで ｃ'は前記被乗数、乗数、およびモジュラス数のビットのうちの派生された部分のビット長さを示すことを特徴とする請求項２１に記載の演算装置。
【請求項２６】
前記掛け算器は、
前記被乗数はワード長さを示すｗビット大きさのレジスタに貯蔵されたｗビットのうちの一ブロックを前記メモリから読み出し、
前記ｗビットレジスタに貯蔵された前記被乗数は根の長さであるｄビットずつ順次に処理され、
前記ｗビットレジスタに貯蔵された前記ｗビットを処理した後、前記メモリから前記被乗数の次のｗビットを読み出すことを特徴とする請求項２５に記載の演算装置。
【請求項２７】
前記掛け算器は、
強制部分積制御信号を発生するコントローラをさらに含むことを特徴とする請求項２６に記載の演算装置。
【請求項２８】
前記部分積発生器は、
部分積選択信号と前記強制部分積制御信号とが第１値を有するとき、前記現在入力された乗数の三つのビット(Ｂ０、Ｂ１、ＢＲ)から部分積印加信号を生成し、前記被乗数(Ａ)の入力ビットに基づいてＡ、２Ａ、−Ａ、−２Ａおよび０のうちの一つを前記部分積に選択することを特徴とする請求項２７に記載の演算装置。
【請求項２９】
前記部分積発生器は、
ノーマルレジデュー数を得るために前記強制部分積制御信号が第２値を有するとき、前記被乗数(Ａ)を前記部分積に選択することを特徴とする請求項２７に記載の演算装置。
【請求項３０】
前記部分積発生器は、
前記強制部分積制御信号が第３値を有するとき、前記被乗数(Ａ)に基づいて引いた前記部分積に選択することを特徴とする請求項２７に記載の演算装置。
【請求項３１】
前記初期値修正サイクルで、前記強制部分積制御信号は第４値を有し、前記強制部分積制御信号が前記第４値を有するとき、前記部分積発生器は０を前記部分積に選択することを特徴とする請求項２７に記載の演算装置。
【請求項３２】
前記部分積発生器は、
前記強制部分積制御信号が第３値を有するとき、前記被乗数(Ａ)に基づいて引いた前記部分積に選択することを特徴とする請求項２９に記載の演算装置。
【請求項３３】
前記累算器の初期値修正サイクルで前記強制部分積制御信号は第４値を有することを特徴とする請求項３２に記載の演算装置。
【請求項３４】
前記強制積制御信号が前記第４値を有するとき、前記部分積発生器は０を前記部分積に選択することを特徴とする請求項３２に記載の演算装置。
【請求項３５】
前記掛け算器は、
前記累算器に貯蔵されたキャリ、和と最下位値、前記部分積、および前記累算器の入力帰還シフト制御信号に応答して繰り返し的な部分積データＳＰＰＩを発生することを特徴とする請求項２７に記載の演算装置。
【請求項３６】
前記コントローラは、
強制モジュラス積制御信号をさらに発生することを特徴とする請求項３５に記載の演算装置。
【請求項３７】
前記モジュラス積発生器は、
前記強制モジュラス積制御信号が第１値を有するとき、前記繰り返し的なデータＳＰＰＩとモジュラス(Ｍ)の二番目の最下位ビットとから前記−Ｍ、０、Ｍ、２Ｍのうちの一つを選択するためのモジュラス積選択信号を発生することを特徴とする請求項３６に記載の演算装置。
【請求項３８】
前記累算器の前記初期値修正サイクルで、前記強制モジュラス積制御信号は第２値を有することを特徴とする請求項３６に記載の演算装置。
【請求項３９】
前記モジュラス積発生器は、
前記強制モジュラス積制御信号が第２値であるとき、前記以前結果を前記モジュラス積に選択することを特徴とする請求項３８に記載の演算装置。
【請求項４０】
前記強制モジュラス積制御信号が第３値を有するとき、ＱＩに基づいて前記モジュラス積選択信号を発生することを特徴とする請求項３９に記載の演算装置。
【請求項４１】
前記初期値修正サイクルを除いた残りのサイクルで、前記強制モジュラス積制御信号は第４値を有することを特徴とする請求項４０に記載の演算装置。
【請求項４２】
前記モジュラス積発生器は、
ノーマルレジデュー数を得るために前記強制部分積制御信号が第２値を有するとき、前記被乗数(Ａ)を前記部分積に選択することを特徴とする請求項４１に記載の演算装置。
【請求項４３】
前記被乗数、乗数、およびモジュラス数が各々ｃ'ビットずつ掛け算演算をすれば、すべての演算サイクルに対して(ｎ／ｃ)＊(ｎ／ｃ)回の単位掛け算演算を実行することを特徴とする請求項２６に記載の演算装置。
【請求項４４】
前記掛け算器は、
ｗビット単位の前記メモリから前記ｎビット被乗数とモジュラス数とを読み出し、
ｃ'ビット大きさのｃ'ビットレジスタに前記ｗビットを貯蔵し、
前記全体ｃ'ビットレジスタのｃ'ビットが処理されることを特徴とする請求項４３に記載の演算装置。
【請求項４５】
前記単位掛け算演算の各々の一番目の演算サイクルは前記累算器の初期値修正サイクルであることを特徴とする請求項４４に記載の演算装置。
【請求項４６】
前記モジュラス積発生器は、
前記初期値修正サイクルで前記以前結果を前記モジュラス積に選択することを特徴とする請求項４５に記載の演算装置。
【請求項４７】
前記部分積発生器は、
前記初期値修正サイクルで前記部分積を‘０’に設定することを特徴とする請求項４６に記載の演算装置。
【請求項４８】
前記モジュラス(Ｍ)のうちの現在入力された派生された部分の長さがｃ'であるビットを貯蔵するためのモジュラスレジスタと、
前記被乗数(Ａ)のうちの現在入力された派生された部分の長さがｃ'であるビットを貯蔵するための被乗数レジスタと、
前記乗数(Ｂ)のうちの現在入力された派生された部分の長さがｗであるビットを貯蔵するための乗数レジスタとをさらに含むことを特徴とする請求項４４に記載の演算装置。
【請求項４９】
前記モジュラスレジスタと前記被乗数レジスタとはｃ'＋１ビットレジスタで各々構成され、
ｃ'はｎと同一、またはｎより小さい前記ｎビット被乗数と前記ｎビットモジュラス数のうちの少なくとも一つの派生された部分のビットとを示すプラスの整数であることを特徴とする請求項４８に記載の演算装置。
【請求項５０】
前記モジュラスレジスタと前記被乗数レジスタとは多数のサブレジスタとクロック信号やローディング印加信号のうちの一つに応答して新しい値を選択的にローディングする１ビット符号レジスタとをさらに含むことを特徴とする請求項４８に記載の演算装置。
【請求項５１】
前記被乗数レジスタはワード長さｗビットを貯蔵し、
前記被乗数レジスタはクロックや制御信号のうちの一つに応答して新しい値をロードするか、データを右側にシフトさせることを特徴とする請求項４８に記載の演算装置。
【請求項５２】
キャリ加算モードで動作し、各々がモジュラス積、部分積、第１値および第２値を受け入れ、対応する次の和、対応する次のキャリおよび対応する次の下位値を発生する複数のコンプレッサと、
前記複数のコンプレッサの各々から前記対応する次の和を受け入れ、対応する更新された現在和を出力する和レジスタと、
前記複数のコンプレッサから前記対応する次のキャリを受け入れ、対応する更新された現在キャリを出力するキャリレジスタと、
前記複数のコンプレッサから前記対応する次の下位値を受け入れ、対応する更新された現在下位値を出力する下位値レジスタとを含むことを特徴とする累算器。
【請求項５３】
前記複数のコンプレッサの各々は初期値修正サイクルで自分から出力される前記対応する次の和、次のキャリおよび次の下位値を前記第１値および前記第２値に各々受け入れることを特徴とする請求項５２に記載の累算器。
【請求項５４】
前記初期値修正サイクルを除いた残りのサイクルで前記コンプレッサの各々は２ビット高いコンプレッサからの和と１ビット高いコンプレッサからのキャリとを前記第１値および前記第２値に各々受け入れることを特徴とする請求項５３に記載の累算器。
【請求項５５】
前記複数のコンプレッサのうちの最下位ビットコンプレッサの和は第１追加全加算器に供給され、
最下位コンプレッサのキャリ、第２下位コンプレッサの和と第１追加全加算器のキャリとは第２追加全加算器に供給され、
第１追加全加算器の和と第２追加全加算器の和とキャリとは次の下位値を示すことを特徴とする請求項５４に記載の累算器。
【請求項５６】
前記累算器の初期値修正サイクルを示す信号に応答して前記第１値および前記第２値を選択するためのマルチプレクサをさらに含むことを特徴とする請求項５３に記載の累算器。
【請求項５７】
前記モジュラス積はｎビットモジュラス数から生成され、
前記部分積はｎビット被乗数とｎビット乗数とから生成され、
前記部分積と前記モジュラス積の各々はｃ＋ｋ＋２＝ｃ'＋２ビットであり、ここで、ｋは８の倍数である整数、ｃはビットのうちの一部分の長さを示し、ｃ'はビットのうちの付け加えられた一部分の長さ、そしてｎはｃの倍数である整数、ｃ＜＝ｎ 、および ｃ'＝ｃ＋ｋであることを特徴とする請求項５２に記載の累算器。
【請求項５８】
前記複数のコンプレッサは直列に連結され、少なくともｃ＋ｋ＋５＝ｃ'＋５個のコンプレッサを有することを特徴とする請求項５５に記載の累算器。
【請求項５９】
前記複数のコンプレッサは各々４；２コンプレッサであることを特徴とする請求項５２に記載の累算器。
【請求項６０】
前記の複数のコンプレッサの各々は二つの全加算器で構成されることを特徴とする請求項５２に記載の累算器。
【請求項６１】
前記複数のコンプレッサの最下位コンプレッサは前記部分積反転信号と前記モジュラス積反転信号とのうちの一つを受け入れることを特徴とする請求項５２に記載の累算器。
【請求項６２】
掛け算器はｎ／ｃ部分で構成されたｎビット被乗数と、ｎ／ｃ部分で構成されたｎビット乗数と、ｎ／ｃ部分で構成されたｎビットモジュラス数と、乗数の派生された部分とモジュラス数の派生された部分に対する(ｎ／ｃ)＊(ｎ／ｃ)回の単位掛け算演算を順次に実行し、ここで、ｎ＞ｃであり、ｎとｃとはプラスの整数であることを特徴とする演算装置。
【請求項６３】
前記掛け算器は、
−Ｍ、０、Ｍ、２Ｍと以前行の結果ＳＩのｎビットモジュラス数のうちの一つをモジュラス積に選択するモジュラス積発生器と、
−２Ａ、−Ａ、０、＋Ａ、および＋２Ａの被乗数のうちの一つを部分積の被乗数に選択する部分積発生器と、
選択された前記モジュラス積と前記部分積とを累算する累算器とをさらに含むことを特徴とする請求項６２に記載の演算装置。
【請求項６４】
前記Ｍはｎビットモジュラス数のうちのｃ' (ｃ'=ｃ＋ｋ)ビットの現在入力された派生された部分であり、ｋは整数であり、
前記Ａはｎビット被乗数のうちのｃ'ビットの現在入力された派生された部分であることを特徴とする請求項６３に記載の演算装置。
【請求項６５】
前記以前行の結果は前記累算器の以前行の掛け算結果のうちの前記被乗数と前記モジュラス数の現在入力された派生された部分に対応するビットとから形成されることを特徴とする請求項６３に記載の演算装置。
【請求項６６】
前記掛け算器は複数の行に対する単位掛け算演算を実行して各行の最後に掛け算結果を生成し、
最後の行の掛け算結果を除いたすべての行に対する掛け算結果はｎ＋２長さのビットを有することを特徴とする請求項６２に記載の演算装置。
【請求項６７】
最後の行に対する掛け算結果はｎ＋１長さのビットを有することを特徴とする請求項６６に記載の演算装置。
【請求項６８】
ｎは前記被乗数、乗数およびモジュラス数のうちの一つの以上に構成される被演算子のビット長さを示すことを特徴とする請求項６２に記載の演算装置。
【請求項６９】
ｃはビットのうちの一部分のビット長さを示し、ｎはｃの倍数である整数であることを特徴とする請求項６８に記載の演算装置。
【請求項７０】
ｃ'はビットのうちの付け加えられた一部分のビット長さを示し、ｃ'＝ｃ＋ｋであり、ｋは整数であることを特徴とする請求項６９に記載の演算装置。
【請求項７１】
前記掛け算器でデータパスはｃ'に比例するサイズであることを特徴とする請求項７０に記載の演算装置。
【請求項７２】
ｎとｃとはプラスの整数であり、ｎ／ｃ個の行を有する各行は繰り返し的にｎ／ｃ回の単位モンゴメリ掛け算演算を実行し、キャリ伝達加算演算をすることに係わるマトリックス演算器と、
前記単位掛け算演算を繰り返して実行して加算構造に貯蔵されるキャリを有する累算器と、
キャリ伝達加算演算を実行する追加的なキャリ伝達加算器とを含むことを特徴とする掛け算装置。
【請求項７３】
前記モンゴメリ掛け算演算は前記単位掛け算演算を一度完了し、前記キャリ伝達加算演算をマトリックスのｎ／ｃ個行に対して完了することを特徴とする請求項７２に記載の掛け算装置。
【請求項７４】
多数の選択可能なｎビットモジュラス数のうちの現在入力された派生された部分から形成された与えられたモジュラス数Ｍからモジュラス積を選択するモジュラス積発生器と、
多数の選択可能なｎビット被乗数のうちの現在入力された派生された部分から形成された与えられた被乗数Ａから部分積を選択する部分積発生器と、
選択された前記モジュラス積と掛け算結果とで生成された部分積を累算する累算器とを含むことを特徴とする掛け算器。
【請求項７５】
メモリと、
被乗数Ａ、乗数Ｂおよびモジュラス数Ｍをメモリに貯蔵するホストと、
ホストの制御に応じて貯蔵された被乗数、乗数およびモジュラス数にモンゴメリ掛け算演算を実行し、モンゴメリ掛け算演算から得られた演算結果をメモリに貯蔵する請求項７４に記載の前記掛け算器を含む演算装置。
【請求項７６】
モンゴメリ掛け算演算を実行し、そこに入力制御信号の論理状態に基づいてノーマル掛け算演算が適用されることを特徴とするモンゴメリ掛け算器。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータ保安のための暗号化(ｃｒｙｐｔｏｇｒａｐｈｙ)システムに係り、特に暗号化システムでのモジュラ掛け算演算のための装置および方法に関する。
【背景技術】
【０００２】
コンピュータネットワーク、または有無線通信を介して各種のデータを取り交わす情報通信環境では、データの安全性を維持するための暗号化システムの重要性が大きくなっている。特に、電子決済または認証システムでは符号化(ｅｎｃｒｙｔｉｏｎ)および復号化(ｄｅｃｒｙｐｔｉｏｎ)技術を適用して安全性を確保することが必須である。暗号化技術は大きく秘密キー(対称キーまたは共通キー、ｓｅｃｒｅｔ ｋｅｙ、ｓｙｍｍｅｔｒｉｃ ｋｅｙ、ｐｒｉｖａｔｅ ｋｅｙ、ｃｏｍｍｏｎ ｋｅｙ)方式と公開キー(非対称キー、ｐｕｂｌｉｃ ｋｅｙ、ａｓｙｍｍｅｔｒｉｃ ｋｅｙ)方式とに分類することができる。
【０００３】
秘密キー方式は米国商務省の国立標準国(ＮＢＳ)によるＤＥＳ(Ｄａｔａ Ｅｎｃｒｙｐｔｉｏｎ Ｓｙｓｔｅｍ)暗号アルゴリズムが代表的な例であり、その外にＵＳＳＩのＧＯＳＴ(ＧＯｖｅｒｎｍｅｎｔ ＳＴａｎｄａｒｄ)、スイスのＩＤＥＡ(Ｉｎｔｅｒｎａｔｉｏｎａｌ Ｄａｔａ Ｅｎｃｒｙｐｔｉｏｎ Ａｌｇｏｒｉｔｈｍ)などがある。秘密キー暗号化方式では情報交換当事者間で同一の秘密キーを共有しなければならないので、別途の安全なチャンネルが必要であり、特に多数人との情報交換時には、一人の使用者が多数の秘密キーチャンネルを維持および管理しなければならないという短所がある。
【０００４】
一方、公開キー暗号化方式は暗号化するキーと復号化するキーとが互いに異なるので、いずれか一つが分かってもそれに対応するキーが分かりにくくするシステムである。公開キー暗号化方式では、一つの秘密キーと他の一つの公開キーとを使用して情報をスクランブル(ｓｃｒａｍｂｌｅ)／逆スクランブル(ｄｅｓｃｒａｍｂｌｅ)する。公開キー暗号化方式は、キーを共有するための別途のチャンネルは必要ではなく、キー管理が容易で秘密キー方式に比べて安全性は向上するが、二つの互いに異なるキーを生成して、これを介して情報を復元するための数学的な演算過程が複雑で高速処理に制限があることが知られている。
【０００５】
モンゴメリアルゴリズムはハードウェア実現が難しい任意の数に対するモジュラ演算を単純に掛け算および寄せ算演算とシフト(ｓｈｉｆｔ)演算とに変換して解決するので、公開キー暗号化アルゴリズムをハードウェアで実現する方式や、またはソフトウェアで実現する方式のいずれでも非常に有用である。モンゴメリアルゴリズムでは掛け算演算の前後に被演算子変換(ｏｐｅｒａｎｄ ｔｒａｎｓｆｏｒｍａｔｉｏｎ)過程が必要である。したがって、単一掛け算演算では他の一般的なモジュラ掛け算器に比べて処理性能が遅いことがあるが、ＲＳＡアルゴリズムのように同一のモジュラに対して繰り返し的な掛け算演算を行う応用領域では毎度の被演算子変換作業が不要であるので、他のモジュラ掛け算器に比べて高速で暗号化作業を処理することができる。
【０００６】
掛け算演算の速度を高める方法のうちの一つが基数(ｒａｄｉｘ)の値をふやすことである。基数値が増加すれば、掛け算演算過程で実行される累算(ａｃｃｕｍｕｌａｔｉｏｎ)の繰り返しの回数がそのだけ減る。しかし、基数値が増加すれば、一回の累算のために必要な過程がそのだけ複雑になり、一回の累算に消耗される時間がそれだけ増加する。例えば、基数２演算アルゴリズムはハードウェアで実現することが容易であるが、基数４演算アルゴリズムに比べて累算の繰り返しの回数が２倍になる。しかし、基数４演算方式は基本的に基数２演算アルゴリズムに比べてハードウェア実現が複雑で各繰り返しの実行の遅延時間が増加するという弱点がある。
【０００７】
したがって、ハードウェアのサイズを増加させず、より複雑にせず、かつモジュラ演算の速度を増加させることができる適正な設計が重要である。
【０００８】
一方、コンピュータの演算能力が向上することによって、暗号化システムの安全度を保障するために暗号化キーの長さを長くしなければならない。そして、応用分野に従って要求される暗号化キーの長さを異ならせることもできる。したがって、キーの長さが長くても、同一の応用で続いて使用することができ、また多様な暗号化キーの長さにも対応することができるハードウェアが要求される。
【発明の開示】
【発明が解決しようとする課題】
【０００９】
したがって、本発明の基数４論理演算を基づいて多重精度(ｍｕｌｔｉｐｌｅ ｐｒｅｃｉＳＩｏｎ)を支援する拡張可能型モンゴメリ掛け算器を提供することにある。
【課題を解決するための手段】
【００１０】
本発明の一特徴によると、モンゴメリ掛け算器は−Ｍ、０、Ｍ、２Ｍと以前行の結果 ＳＩのｎビットモジュラス数のうちの一つをモジュラス積に選択するモジュラス積発生器と −２Ａ、−Ａ、０、＋Ａ、および＋２Ａの被乗数のうちの一つを部分積の被乗数に選択する部分積発生器と、選択された前記モジュラス積と前記部分積とを累算する累算器とを含む。例えば、モンゴメリ演算装置はメモリと被乗数Ａ、乗数Ｂおよびモジュラス数Ｍをメモリに貯蔵するホストと前記モンゴメリ掛け算器とを含む。前記モンゴメリ掛け算器はホストの制御に応じて貯蔵された被乗数、乗数およびモジュラス数でモンゴメリ掛け算演算を実行し、モンゴメリ掛け算演算から得られた演算結果を前記メモリに貯蔵する。
【００１１】
本発明の他の特徴によると、累算器はキャリ加算モードで動作し、各々がモジュラス積、部分積、第１値および第２値を受け入れ、対応する次の和、対応する次のキャリおよび対応する次の下位値を発生する複数のコンプレッサと前記複数のコンプレッサの各々から前記対応する次の和を受け入れ、対応する更新された現在和を出力する和レジスタと前記複数のコンプレッサから前記対応する次のキャリを受け入れ、対応する更新された現在キャリを出力するキャリレジスタと、前記複数のコンプレッサから前記対応する次の下位値を受け入れ、対応する更新された現在下位値を出力する下位値レジスタとを含む。
【００１２】
本発明の他の特徴によると、演算装置はｎ／ｃ部分で構成されたｎビット被乗数とｎ／ｃ部分で構成されたｎビット乗数、ｎ／ｃ部分で構成されたｎビットモジュラス数、乗数の派生された部分とモジュラス数の派生された部分とに対する(ｎ／ｃ)＊(ｎ／ｃ)回の単位掛け算演算を順次に実行する掛け算器とを含む。ここで、ｎ＞ｃであり、ｎとｃはプラスの整数である。
【００１３】
本発明の他の特徴によると、モンゴメリ掛け算器は多数の選択可能なｎビットモジュラス数のうちの現在入力された派生された部分から形成された与えられたモジュラス数Ｍからモジュラス積を選択するモジュラス積発生器と多数の選択可能なｎビット被乗数のうちの現在入力された派生された部分から形成された与えられた被乗数Ａから部分積を選択する部分積発生器と、選択された前記モジュラス積と掛け算結果で生成された部分積とを累算する累算器とを含む。例えば、前記モンゴメリ掛け算器はメモリとホストとを含む演算装置の一部にすることもできる。
【００１４】
本発明の他の特徴によると、モンゴメリ掛け算器はモンゴメリ掛け算演算を実行し、そこに入力制御信号の論理状態に基づいてノーマル掛け算演算が適用される。
【発明の効果】
【００１５】
本発明によると、限定されたサイズのモンゴメリ掛け算器を利用して多重精度の掛け算演算を実行することができる。さらに、本発明の掛け算器は強制モジュラス積制御信号を利用してモンゴメリ掛け算だけではなく、ノーマル掛け算演算を実行することができ、強制部分積制御信号を利用してモンゴメリレジデュー数字をノーマルレジデュー数字に転換する作業を実行することができる。
【発明を実施するための最良の形態】
【００１６】
本発明の実施形態では、基数４論理演算を基づいてモンゴメリ掛け算アルゴリズムを適用し、これを基数４インタリブモンゴメリ掛け算アルゴリズム（Ｒａｄｉｘ−４  Ｉｎｔｅｒｌｅａｖｅｄ  Ｍｏｎｔｇｏｍｅｒｙ  Ｍｕｌｔｉｐｌｉｃａｔｉｏｎ  Ａｌｇｏｒｉｔｈｍ）といい、Ｒ４ＩＭＭと略称する。
【００１７】
本発明の実施形態に示す掛け算装置の論理演算体系は公開キー方式の暗号化アルゴリズムを適用するコンピュータシステムまたは通信網に適用することができ、また携帯可能な集積回路カード（またはスマートカード）に内蔵して運用することができる。
【００１８】
本発明の実施形態を説明する前に、本発明に適用されるモジュラ掛け算アルゴリズムＲ４ＩＭＭで参照されるパラメータ(ｐａｒａｍｅｔｅｒｓ)を次のように定義する。
【００１９】
Ｍはモジュラス(ｍｕｄｕｌｕｓ)として２より大きいプラスの整数(ｉｎｔｅｇｅｒ)として奇数値(例えば、３、７など)を有する。
【００２０】
Ｍ’は条件式(−Ｍ＊Ｍ’)ｍｏｄ４＝１を満足する整数である。
【００２１】
Ａは、被乗数(ｍｕｌｔｉｐｌｉｃａｎｄ)として、０≦Ａ＜Ｍの条件を満足する整数である。
【００２２】
Ｂは、乗数(ｍｕｌｔｉｐｌｉｅｒ)として、０≦Ｂ＜Ｍの条件を満足する整数である。ここで、
【００２３】
【数１】
2005250481.tif 000003
ｂＩ∈｛０、１、２、３｝である。 ｂＩは２ビットである。
【００２４】
ｏはオペランド(ｏｐｅｒａｎｄ) すなわち、被乗数、乗数およびモジュラスの各々の長さである。ｃは単位掛け算が実行されるチャンク(ｃｈｕｎｋ)の長さとして、ハードウェアの内部に存在するデータパス(ｄａｔａ  ｐａｔｈ)の幅である。ｗはメモリデータバス幅であるワード(ｗｏｒｄ)の長さであり、ｄは基数（ｒａｄｉｘ)すなわち、デジット(ｄｉｇｉｔ)の長さである。データバス幅が３２ビットであるメモリが使用される場合、ワードの長さｗは３２であり、基数４掛け算器でデジットの長さｄは２になる。
【００２５】
本発明に適用されるＲ４ＩＭＭ基本アルゴリズムは次のとおりである。
Ｓ０：＝０
ｆｏｒ  Ｉ：＝０  ｔｏ  （ｎ／２−１）
ｑＩ：＝（（（ＳＩ＋ｂＩＡ）ｍｏｄ  ４）＊Ｍ'）ｍｏｄ  ４
ＳＩ＋１：＝（ＳＩ＋ｂＩＡ＋ｑＩＭ）／４
ｅｎｄｆｏｒ
ｉｆ（ＳＮ≧Ｍ）ＳＮ：＝ＳＮ−Ｍ
【００２６】
Ｒ４ＩＭＭ基本アルゴリズムで、Ｉはデジットインデックスまたは演算の繰り返しの回数を示す。このアルゴリズムで商ｑＩは‘ＳＩ＋ｂＩＡ＋ｑＩＭの下位２ビットが“００”になれるように足すＭの個数'を示す。残り数体系(ｒｅｓｉｄｕｅ  ｎｕｍｂｅｒ  ｓｙｓｔｅｍ、ＲＮＳ)でどんな数にでも係数Ｍの整数倍を足した数は元々の数と同様であるので、係数Ｍの整数倍であるモジュラス積ｑＩＭ（以下、ＭＭＩ、 ｍｕｌｔｉｐｌｅ  ｏｆ  ｍｏｄｕｌｕｓ)を足した数は元々の数と同様である。また、ＳＩ＋ｂＩＡ＋ｑＩＭの下位２ビットを“００”で作った後に、基数値４で割ると(すなわち、２ビットずつ右側にシフトする)有效桁の数字はそのまま保存されるので情報が遺失されない。
【００２７】
このようなＲ４ＩＭＭアルゴリズムをハードウェア的に実現するためには、部分積ＰＰＩとモジュラス積ＭＭＩを求めなければならない。単位乗数ｂＩと商ｑＩが２ビットであるので、部分積ＰＰＩとモジュラス積ＭＭＩは次のように四つの場合の可能値を各々有するように設定することができるであろう(ここで、ｂＩ∈｛０、１、２、３｝であり、 ｑＩ∈｛０、１、２、３｝とする)。
【００２８】
【数２】
2005250481.tif 000004
【００２９】
しかし、数２のように部分積ＰＰＩとモジュラス積ＭＭＩとを設定するようになれば、値３Ａと３Ｍとを計算するとき、ＡまたはＭを１ビットシフトした値と元々の値との和を求めなければならない(２Ａ＋Ａ、２Ｍ＋Ｍ)。これをハードウェアに実現するためには、このような値を計算する独立した加算器(ａｄｄｅｒ)を使用するか、またはこの値をあらかじめ計算してメモリなどに貯蔵しておいて、必要時に参照する方法を使用しなければならない。そのような方法はハードウェアの無駄使いをもたらし、また、その値３Ａ、３Ｍを求める時間(あらかじめ計算しておくか、リアルタイムに計算する)を追加的に考慮してハードウェアを設計しなければならないので、性能低下の要因になる可能性がある。
【００３０】
本発明では二つの再符号化(ｒｅｃｏｄｉｎｇ)方法を使用して部分積ＰＰＩとモジュラス積ＭＭＩとを求めることによりハードウェア負担を減らし、同時に処理性能を高めようとする。
また、本発明の掛け算器は一度にｃビット掛け算演算を実行し、繰り返された演算を通じてｎ（ｎはｃの整数倍)ビット掛け算演算を実行することができる。本発明による多重精度Ｒ４ＩＭＭアルゴリズムは次のとおりである。
ｆｏｒ  ｒｏｗ＿ｉｄｘ＝０  ｔｏ  ｒｏｗ＿ｉｄｘ＝（ｎ／ｃ−１）
ｂｅｇｉｎ
ｆｏｒ  ｃｏｌ＿ｉｄｘ＝０  ｔｏ  ｃｏｌ＿ｉｄｘ＝（ｏ／ｃ−１）
ｂｅｇｉｎ
ｄｏ＿ｉｎｉ（）、
ｆｏｒ  ｗｒｄ＿ｉｄｘ＝０  ｔｏ  ｗｒｄ＿ｉｄｘ＝（ｃ／ｗ−１）
ｂｅｇｉｎ
ｆｏｒ  ｄｇｔ＿ｉｄｘ＝０  ｔｏ  ｄｇｔ＿ｉｄｘ＝（ｗ／ｄ−１）
ｂｅｇｉｎ
ｄｏ＿ａｃｃ（）、
ｅｎｄｆｏｒ
ｅｎｄｆｏｒ
ｅｎｄｆｏｒ
ｆｏｒ  ｗｒｄ＿ｉｄｘ＝０  ｔｏ  ｗｒｄ＿ｉｄｘ＝（ｃ／ｗ−１）
ｂｅｇｉｎ
ｄｏ＿ｃｐａ（）、
ｅｎｄｆｏｒ
ｅｎｄｆｏｒ
【００３１】
このアルゴリズムでｄｏ＿ｉｎｉ（）関数は以前行(ｒｏｗ)の演算結果値Ｓで現在列(ｃｏｌｕｍｎ)のような位置のチャンクを累算器内の現在値に累積する関数である。すなわち、列ループ(ｃｏｌｕｍｎ ｌｏｏｐ)を始めるとき、累算器の初期値を変更する。このような過程は本発明のモンゴメリ掛け算器が多重精度を支援するので必要なのである。ｄｏ＿ａｃｃ（）関数はサイクルごとに発生される部分積ＰＰとモジュラス積ＭＭという二つのベクタを累算器で累積する過程である。そして、本発明の累算器は基本的にキャリ貯蔵寄せ算器ＣＳＡ構造になっているので、寄せ算の結果値がキャリベクタと和ベクタ、および本発明の独特な形態である下位値ベクタなどの３種のベクタで分離して示し、したがって、累算器の内部に存在するキャリと和、および下位値を貯蔵するためのレジスタに各々貯蔵される。ｄｏ＿ｃｐａ（）関数は各行の最後の段階で累算結果であるキャリ値と和値、および下位値をＣＰＡ(ｃａｒｒｙ−ｐｏｒｐａｇａｔｉｏｎ ａｄｄｅｒ)を使用して足す関数である。
【００３２】
図１は４倍精度(ｑｕａｄｒｕｐｌｅ ｐｒｅｃｉｓｉｏｎ)演算を実行するための演算マトリックス構造を例示的に示す。
【００３３】
４倍精度演算を実行する場合、被乗数Ａ、乗数Ｂ、およびモジュラスＭは各々４個のチャンクで分割され、これらは各々Ａ＝｛Ａ３Ａ２Ａ１Ａ０｝、Ｂ＝｛Ｂ３Ｂ２Ｂ１Ｂ０｝、およびモジュラス Ｍ＝｛Ｍ３Ｍ２Ｍ１Ｍ０｝で表現することができる。チャンクの長さ、すなわちｃビット長さ掛け算器でｃ＊４ビット長さ掛け算演算を実行するためにはＡ０＊Ｂ０、Ａ１＊Ｂ０、Ａ２＊Ｂ０、Ａ３＊Ｂ０…などのようなチャンク単位演算を順次に実行し、各々の演算結果を貯蔵して最終掛け算演算結果を得ることができる。本明細書で、Ａ３、Ａ２、Ａ１およびＡ０、そしてＢ３、Ｂ２、Ｂ１およびＢ０は各々のチャンクｃの長さであり、Ａ０＊Ｂ０、Ａ１＊Ｂ０、Ａ２＊Ｂ０、Ａ３＊Ｂ０…演算の各々は単位掛け算演算(またはボックス(ｂｏｘ))と呼ぶ。被乗数Ａと乗数Ｂとの単位掛け算演算の各々はＣＳＡ(Ｃａｒｒｙ Ｓａｖｅ Ａｄｄ)方式の累算器を介して行われ、各行の最後の単位掛け算演算が完了した後、累算器内の三つの結果値(キャリ、和および下位値)を足して単一数字表現に転換するためのＣＰＡ(Ｃａｒｒｙ Ｐｒｏｐａｇａｔｅ Ａｄｄ)実行段階がある。図２は図１に示した４倍精度演算が実行される単位掛け算演算手順を示す。
【００３４】
図３は本発明の望ましい実施形態による暗号化システムを概略的に示すブロック図である。暗号化システム１はモンゴメリ掛け算器１０、ホスト２０、メモリアクセスアービタ３０、およびメモリ４０を含む。ホスト２０はモンゴメリ掛け算器１０と、入／出力装置のような周辺装置との通信のための周辺装置インターフェース２１と、メモリ４０との通信のためのメモリインターフェース２２とを含む。
【００３５】
掛け算器１０はホストとの通信のためのホストインターフェース１１、およびメモリ４０との通信のためのメモリインターフェース１２を含む。掛け算器１０、およびホスト２０とメモリ４０との間の通信はメモリアクセスアービタ３０によって仲裁される。掛け算器１０のホストインターフェース１１は制御および状態お知らせ用レジスタ(Ｓｐｅｃｉａｌ Ｆｕｎｃｔｉｏｎ Ｒｅｇｉｓｔｅｒ、ＳＦＲ)１３を含む。掛け算器１０は以下説明される制御信号ＦＯＲＣＥ＿ＲＩ［２：０］、ＳＥＬ＿ＲＤＯ［１：０］、ＦＯＲＣＥ＿ＰＰ［１：０］、ＦＯＲＣＥ＿ＭＭ［１：０］、ＵＳＥ＿Ｘ＿ＲＥＧ、ＳＥＬ＿ＣＰＡ＿ＩＮ［２：０］、ＩＳ＿１ＳＴ＿ＣＰＡ＿ＷＯＲＤ、ＩＳ＿ＯＤＤ＿ＰＲＥＣ、ＵＤＰ＿ＳＩＧＮ＿Ｓ、ＵＰＤ＿ＭＳ１Ｂ＿Ｓ、ＳＦＴ＿ＢＩ＿ＰＩＳＯ、ＳＦＴ＿ＱＩ＿ＰＩＳＯ、ＳＴＯ＿ＢＲ＿ＲＯＷ、ＵＳＥ＿ＢＲ＿ＲＯＷ、ＳＨＩＦＴ＿ＡＣＣなどを発生するコントローラをさらに含む。
【００３６】
ホスト２０はオペランド(被乗数Ａ、乗数Ｂ、およびモジュラスＭ)をメモリ４０に貯蔵し、ホストインターフェース１１内のＳＦＲ１３に動作モードと動作開始指示とを記録して演算実行を指示する。掛け算器１０は演算の結果値Ｓをホスト２０が指定したメモリ４０の所定領域に貯蔵した後、演算が終わったことをホストインターフェース１１のＳＦＲ１３に記録することによってホストに知らせる。また、ＳＦＲ１３には符号ビットがさらに貯蔵される。ＳＦＲ１３に貯蔵される符号ビットは以下詳細に説明される。
【００３７】
メモリ４０は一定のサイズのセグメントに分割されており、入力値と結果値とが貯蔵されるセグメントは各セグメントに割り当てられたインデックスを利用してホストが指定する。したがって、一度の掛け算演算が終わった後の結果を次の掛け算演算の入力値として使用すれば、ＲＳＡのような共有キー方式暗号化システムで使用される冪法演算であるデータの移動なしに簡単に入力値と出力値のためのセグメントのインデックスだけ変えた後に、次の掛け算演算を実行させればよいので、性能面で非常に有利である。
【００３８】
図４は本発明の望ましい実施形態によるモンゴメリ掛け算器データパス(Ｍｏｎｔｇｏｍｅｒｙ Ｍｕｌｔｉｐｌｉｅｒ ｄａｔａ  ｐａｔｈ)を示しており、図５は図３に示したモンゴメリ掛け算器のメモリインターフェース１２を示す。メモリインターフェース１２はマルチプレクサ１２＿１、１２＿３とレジスタ１２＿２、１２＿４とを含む。マルチプレクサ１２＿１は制御信号ＦＯＲＣＥ＿ＲＩ［２：０］に応答して入力信号のうちの一つを出力する。制御信号ＦＯＲＣＥ＿ＲＩ［２：０］の状態に応じてマルチプレクサ１２＿１が選択する信号が図６に整理されている。マルチプレクサ１２＿１とレジスタ１２＿２とを介して出力されるデータ信号ＲＥＧ＿ＤＩ［３１：０］は以下説明されるモンゴメリ掛け算器１００に提供される。マルチプレクサ１２＿３は制御信号ＳＥＬ＿ＲＤＯ［１：０］に応答して入力信号のうちの一つを出力する。制御信号ＳＥＬ＿ＲＤＯ［１：０］の状態に応じてマルチプレクサ１２＿３が選択する信号が図７に整理されている。マルチプレクサ１２＿３とレジスタ１２＿４とを介して出力されるデータ信号ＲＡＭ＿ＤＯ［３１：０］はメモリ４０に貯蔵される。
【００３９】
図８はモンゴメリ掛け算器データパス１００の全体的な構成を示す。
【００４０】
図８のモンゴメリ掛け算器データパス１００はモジュラスレジスタＭＹ＿ＲＥＧ、１０２およびＭＸ＿ＲＥＧ、１０３）に貯蔵されたモジュラスＭ、被乗数レジスタ（ＡＹ＿ＲＥＧ、１０４およびＡＸ＿ＲＥＧ、１０５）に貯蔵された被乗数Ａ、乗数レジスタ（Ｂ＿ＲＥＧ、１０６）に貯蔵された乗数Ｂ、以前結果値レジスタ（ＳＩ＿ＲＥＧ、１０１）に貯蔵された以前行結果値ＳＩ、モンゴメリリコーダ(Ｍｏｎｔｇｏｍｅｒｙ ｒｅｃｏｄｅｒ、１１０)、ブースリコーダ(Ｂｏｏｔｈ ｒｅｃｏｄｅｒ、１４０)、モジュラス積(ｍｕｌｔｉｐｌｅ ｍｏｄｕｌｕｓ、ＭＭ)を発生するマルチプルモジュラス発生器１２０、部分積（ｐａｒｔｉａｌ ｐｒｏｄｕｃｔ、ＰＰ)を発生する部分積発生器１３０、モンゴメリ掛け算演算を実行する累算器１５０、および累算器内の三つの結果値(キャリ、和、下位値)を足すためのＣＰＡブロック１６０を含む。
【００４１】
レジスタ１０１−１０５に貯蔵されたオペランドの各々の長さは(ｃ＋ｗ／２)＋１である。このレジスタはＰＩＰＯ（Ｐａｒａｌｌｅｌ Ｉｎｐｕｔ ｐａｒａｌｌｅｌ）レジスタで構成され、符号を入れる１ビットのフリップフロップと２＊（ｃ／ｗ）＋１個のサブレジスタとで分割されて制御される。各サブレジスタの長さはｗ／２である。レジスタ１０５の詳細な構成を図９に示す。
【００４２】
５個のレジスタ１０１−１０５は全部同一の構造で構成されている。図９に示したレジスタ１０５はｃ＝２５６であり、ｗ＝３２である場合を例として使用し、この場合にレジスタは１７個のサブレジスタ２００−２１６と符号レジスタ２２０とを含む。ｃ＝２５６であり、ｗ＝３２であるとき、サブレジスタ２００−２１６の各々の大きさは１６ビット(ｈａｌｆ−ｗｏｒｄ)であり、レジスタ２２０の大きさは１ビットである。偶数番目のサブレジスタ２００、２０２、２０４、…、２１６はメモリインターフェース１２から入力される３２ビットデータのうちの下位１６ビットＲＥＧ＿ＤＩ［１５：０］が入力され、奇数番目のサブレジスタ２０１、２０３、２０５、…、２１５はメモリインターフェース１２から入力される３２ビットデータのうちの上位１６ビットＲＥＧ＿ＤＩ［３１：１６］が入力される。
【００４３】
元々のオペランドのビット長さｎはチャンクのビット長さｃの整数倍であるが、ブースリコーティングとモングコメリリコーティングとを適用することによってオペランドに符号が追加される。したがって、モンゴメリ掛け算器データパス１００の内部で使用するオペランドのビット長さはｃ'＝ｃ＋ｋであり、ｋの最小値は１である。ここで使用されたｃ'を拡張チャンクのビット長さという。しかし、入力データをメモリから読み出されねばならず、データバス幅ｗ＝３２である場合、データ伝送単位がワード(３２ビット)、ハーフワード(１６ビット)、またはクオーターワード(８ビット)であるので、ｋの値として可能なのは各々ｗ、ｗ／２またはｗ／４である。ｋが小さいほど各単位掛け算演算(図１のＣＳＡ演算)内で実行しなければならない繰り返し(ｉｎｔｅｒａｔｉｏｎ)回数が少なくなり、ハードウェアの大きさも少なくなって性能、面積、電力などのすべての面で有利である。しかし、ｋ＝ｗ／２の場合よりｋ＝ｗの場合に、そして ｋ＝ｗ／４よりｋ＝ｗ／２である場合にハードウェアの構造が単純になる。ｋの値はｗ、ｗ／２またはｗ／４のうちのいずれでも可能であり、特別に本発明ではｋ＝ｗ／２である場合を使用して説明する。したがって、チャンクのビット長さｃ＝２５６、ｗ＝３２、ｋ＝３２／２＝１６であるとき、ｃ'＝２７２である。上述のＳＦＲ１３に貯蔵された符号ビットＳＩＧＮ＿Ｓはメモリインターフェース1２を介して符号レジスタ２２０に貯蔵される。
【００４４】
各サブレジスタはゲート−クロック(ｇａｔｅｄ−ｃｌｏｃｋ)、またはロード−イネーブル(ｌｏａｄ−ｅｎａｂｌｅ)制御信号によって選択的にデータ積載(ｄａｔａ ｌｏａｄｉｎｇ)が行われる。レジスタ１０５から出力される被乗数ＡＸ＿ＰＩＰＯ＿ＲＥＧ［２７２：０］は２７３ビットである。レジスタ１０１−１０５の構造は全部同一であるので、残りのレジスタ１０１−１０４に対する説明は省略する。レジスタ１０１−１０５に入力されるデータはＲＥＧ＿ＤＩ［３１：０］であり、これはメモリインターフェース１２から入力され、メモリインターフェース１２がメモリから入力されるワード長さデータＲＡＭ＿ＤＩ［３１：０］と演算子の符号ビットＳＩＧＮ＿Ａ、ＳＩＧＮ＿Ｂ、ＳＩＧＮ＿Ｓ、および以前行結果値の二番目の最上位ビットＭＳ１Ｂ＿Ｓなどを組み合わせて作ったデータであり、どの瞬間に、どんな組合を使用してＲＥＧ＿ＤＩ［３１：０］を作るかは制御信号ＦＯＲＣＥ＿ＲＩ［２：０］によって決められる。
【００４５】
以前結果値レジスタ１０１は以前行の結果値Ｓを現在行の計算に反映するために使用される。被乗数ＡとモジュラスＭとを貯蔵するためのレジスタが各々２個ずつ使用された理由は処理速度を向上させるためである。すなわち、被乗数Ａを貯蔵している二つのレジスタ１０４、１０５のうちの一つはモンゴメリ掛け算器データパス１００で現在単位掛け算演算中である被乗数を貯蔵しており、他の一つは次の単位掛け算演算で使用される被乗数を貯蔵する。同様に、モジュラスＭを貯蔵している二つのレジスタ１０２、１０３のうちの一つは掛け算器データパス１００で現在単位掛け算演算中であるモジュラスを貯蔵しており、他の一つは次の単位掛け算演算に使用されるモジュラスを貯蔵する。したがって、現在の単位掛け算演算が完了してから、メモリから被乗数およびモジュラスを読み出すために必要な遅延なしに次の単位掛け算演算をすぐ開始する事ができる。
【００４６】
掛け算器１０は繰り返し的なプロセスでモンゴメリ掛け算の解答を捜す。モンゴメリリコーダ１１０およびモジュラス積発生器１２０はモジュラス積ＭＭＩを選択するために使用される。モジュラス積ＭＭＩを選択するために、モンゴメリリコーダ１１０は累算器１５０から繰り返し的なデータを受け入れる。本発明の実施形態で繰り返し的なデータＳＰＰＩ［１：０］は累算器１５０に貯蔵された和ＡＣＣ＿Ｓ＿ＲＥＧＩ［１：０］とキャリーＡＣＣ＿Ｃ＿ＲＥＧＩ［１：０］、下位値ＡＣＣ＿Ｌ＿ＲＥＧＩ［２：０］、部分積ＰＰＩ［１：０］、および累算器帰還入力のシフト制御信号ＳＨＩＦＴ＿ＡＣＣを根拠とする。本発明の実施形態による上述の説明において、ビットの大きさは限定されない。ＳＰＰＩは２ビット以上でありうる。この場合、本発明の他の構成は変更されるであろう。
【００４７】
図１０はモジュラス積ＭＭＩを発生するためのモジュラス積発生器を詳細に示す。モジュラス積発生器１２０はマルチプレクサ３０１−３０３とＡＮD ゲート３０４とを含む。マルチプレクサ３０１はレジスタ選択信号ＵＳＥ＿Ｘ＿ＲＥＧに応答してレジスタ１０２、１０３からのモジュラスＭＹ＿ＰＩＰＯ＿ＲＥＧ［２７２：０］、ＭＸ＿ＰＩＰＯ＿ＲＥＧ［２７２：０］のうちの一つをＭ［２７２：０]として出力する。
【００４８】
マルチプレクサ３０３はモンゴメリリコーダ１１０からのモジュラス積選択信号ＳＥＬ＿ＭＭ［１：０］に応答して以前値ＳＩ＿ＰＩＰＯ＿ＲＥＧ［２７２：０］、Ｍ、２Ｍ および−Ｍのうちの一つを選択して出力する。２Ｍはマルチプレクサ３０２から出力されるＭを１ビット左側にシフトし、最下位ビットに‘０’を挿入して得ることができる。そして−ＭはＭマルチプレクサ３０２から出力されるＭをビット反転(ｂｉｔ−ｉｎｖｅｒｓｉｏｎ)して得ることができる。
【００４９】
ＡＮＤゲート３０４はモンゴメリリコーダ１１０からのモジュラス積イネーブル信号ＥＮ＿ＭＭとマルチプレクサ３０３からの出力とを結合してモジュラス積ＭＭＩを出力する。モジュラス積ＭＭＩは(ｃ ＋ ｗ／２)＋２ビットである。ｃ＝２５６、ｗ＝１６であるとき、ＭＭＩは２６６ビットである。モジュラス積イネーブル信号ＥＮ＿ＭＭはモジュラス積ＭＭＩを０とするために使用される。モジュラス積ＭＭＩは累算器１５０に入力される。
【００５０】
図１１は本発明の望ましい実施形態によるモンゴメリリコーダ１１０のコーディングスキームを示す。図１１にはモンゴメリリコーダ１１０に入力される三つの入力Ｍ［１］およびＳＰＰＩ［１：０］を示しているが、本発明は入力および出力を多様に変更することができる。
【００５１】
上述のように、典型的な基数４システムの場合に、モジュラス積ＭＭＩは０、Ｍ、２Ｍおよび３Ｍである。３Ｍを求めるためには１Ｍに２Ｍを足すための付加的な加算器またはメモリ素子が必要である。付加的な加算器および／またはメモリ素子はハードウェアの大きさおよび／または計算遅延などをもたらし、これは計算速度および電力消耗に影響を及ぼす。図１１のコーディングスキームはＭＭＩの値を得るために付加的な加算器またはメモリ素子なしにビット反転およびビットシフトを利用する。モンゴメリリコーダ１１０はモジュラスＭの二番目の最下位ビットＭ［１］とＳＰＰＩの最下位２ビットＳＰＰＩ［１：０］とが入力される。モンゴメリリコーダ１１０はモジュラス積選択信号ＳＥＬ＿ＭＭ［１：０］、モジュラス積イネーブル信号ＥＭ＿ＭＭ、および符号反転を知らせる(すなわち、−Ｍが選択されたことを知らせる)信号ＮＥＧ＿ＭＭを出力する。
【００５２】
減少したハードウェアの大きさ、増加した計算速度、および電力減少のための類似の方法を図１３および図１４に示したような部分積発生器１３０とブースリコーダ１４０に使用することができる。上述の掛け算器データパス１００はモジュラス積ＭＭＩおよび部分積ＰＰＩを累算器１５０に入力して繰り返し的なプロセスにモジュラ掛け算を実行する。
【００５３】
図１２は乗数Ｂを貯蔵するレジスタＢ＿ＲＥＧ、１０６を詳細に示す。レジスタ１０６はメモリ４０から入力される乗数Ｂを貯蔵し、累算器初期値修正サイクルを除いた残りのサイクルごとに乗数Ｂの最下位２ビット（Ｂ１とＢ０）と直前サイクルの最下位２ビットのうちの上位ビットＢＲを右側に一回シフトして出力する。レジスタ１０６はシフトレジスタ４０１、マルチプレクサ４０２、４０５、およびフリップフロップ４０３、４０４を含む。
【００５４】
シフトレジスタ４０１はワード長さ(ｗ＝３２)と同一の大きさを有し、シフト選択信号ＳＦＴ＿ＢＩ＿ＰＩＳＯに応答して動作する。シフトレジスタ４０１はシフト選択信号ＳＦＴ＿ＢＩ＿ＰＩＳＯが論理‘０’であるとき、乗数データの一ワード(ｗｏｒｄ)をメモリインターフェース１２からＲＥＧ＿ＤＩ［３１：０］を介して新しく受け入れ、シフト選択信号ＳＦＴ＿ＢＩ＿ＰＩＳＯが論理‘１’であるとき、２ビットずつ右側にシフトする。シフトレジスタ４０１の最下位２ビットＢ１、Ｂ０はブースリコーダ１４０に出力される。
【００５５】
信号ＳＴＯ＿ＢＲ＿ＲＯＷは行の最後の単位掛け算演算の最後のサイクルに使用されたＢ１を貯蔵するように制御する信号である。マルチプレクサ４０２は信号ＳＴＯ＿ＢＲ＿ＲＯＷに応答してフリップフロップ４０３に貯蔵された値、またはシフトレジスタ２０２の二番目の最下位ビットＢ１を選択的に出力する。フリップフロップ４０３はマルチプレクサ４０２の出力を貯蔵し、フリップフロップ４０４はシフトレジスタ４０１の二番目の最下位ビットＢ１を貯蔵する。信号ＵＳＥ＿ＢＲ＿ＲＯＷは各単位掛け算演算で二番目のサイクルすなわち、累算器初期値を修正した後、次のサイクルでフリップフロップ４０３に貯蔵された値ＢＲ＿ＲＯＷが値ＢＲとして選択されるように制御する。ビットＢＲはブースリコーダ１４０に提供される。
【００５６】
ブースリコーダ１４０および部分積選択器１３０は累算器１５０に提供される部分積 ＰＰＩの値０、Ａ、２Ａおよび２Ａを選択するために使用される。図８に示したようにブースリコーダ１４０はレジスタ１０６から乗数Ｂ１、Ｂ０およびＢＲが入力され、部分積選択信号ＳＥＬ＿ＰＰ［１：０］、部分積イネーブル信号ＥＮ＿ＰＰおよび部分積反転表示信号ＮＥＧ＿ＰＰを部分積発生器１３０に入力する。
【００５７】
図１３は部分積発生器１３０の回路構成例を示す。
【００５８】
部分積発生器１３０はマルチプレクサ５０１−５０３とＡＮＤゲート５０４とを含む。マルチプレクサ５０１はレジスタ選択信号ＵＳＥ＿Ｘ＿ＲＥＧに応答してレジスタ１０４、１０５からの被乗数ＡＹ＿ＰＩＰＯ＿ＲＥＧ［２７２：０］、ＡＸ＿ＰＩＰＯ＿ＲＥＧ［２７２：０］のうちの一つをＡ［２７２：０］として出力する。マルチプレクサ５０１はレジスタ選択信号ＵＳＥ＿Ｘ＿ＲＥＧに応答してレジスタ１０４、１０５からの被乗数ＡＹ＿ＰＩＰＯ＿ＲＥＧ［２７２：０］、ＡＸ＿ＰＩＰＯ＿ＲＥＧ［２７２：０］のうちの一つをＡ［２７２：０］として出力する。
【００５９】
マルチプレクサ５０３はブースリコーダ１４０からのモジュラス積選択信号ＳＥＬ＿ＰＰ［１：０］に応答して２Ａ、Ａ、２Ａ およびＡのうちの一つを選択して出力する。２Ａはマルチプレクサ５０１から出力されるＡを１ビット左側にシフトし、最下位ビットに‘１’を挿入して得る。２Ａはマルチプレクサ５０２から出力されるＡを１ビット左側にシフトし、最下位ビットに‘０’を挿入して得る。
【００６０】
ＡＮＤゲート５０４はブースリコーダ１４０からの部分積イネーブル信号ＥＮ＿ＰＰとマルチプレクサ５０３からの出力を結合して部分積ＰＰＩを出力する。部分積イネーブル信号ＥＮ＿ＰＰは部分積ＰＰＩを０とするために使用される。部分積ＰＰＩは（ｃ ＋ ｗ／２）＋２ビットである。ｃ＝２５６、ｗ＝３２であるとき、ＰＰＩは２７４ビットである。部分積ＰＰＩは累算器１５０に入力される。
【００６１】
図１４は本発明の望ましい実施形態によるブースリコーダ１４０のコーディングスキームを示す。図１４はブースリコーダ１４０に入力される三つの入力Ｂ１、Ｂ０およびＢＲを示すが、本発明は入力および出力を多様に変更することができる。
【００６２】
再び図８を参照すれば、モジュラス積発生器１２０からのモジュラス積ＭＭＩ［２７３：０］と部分積発生器１３０からの部分積 ＰＰＩ［２７３：０］とは累算器１５０に出力される。
【００６３】
本発明の望ましい実施形態による累算器１５０を図１５に示す。累算器１５０は直列に連結されたｃ'（＝ｃ ＋ ｗ／２ ＋ ５）個の４−２コンプレッサ６１０−６１７で構成される。上述の図１０および図１３で説明したように、モジュラス積ＭＭＩと部分積ＰＰＩは各々(ｃ ＋ ｗ／２) ＋２ビットである。
【００６４】
累算器１５０は演算結果を和レジスタ６２０、キャリレジスタ６３０、および下位値レジスタ６５０で割って貯蔵する。和レジスタ６２０は(ｃ ＋ ｗ／２)＋３個のフリップフロップドルで構成されており、キャリレジスタ６３０は(ｃ ＋ ｗ／２)＋４個のフリップフロップで構成されており、下位値レジスタ６５０は三つのフリップフロップで構成されている。和レジスタ６２０とキャリレジスタ６３０の出力のうちの各々下位(ｃ ＋ １)個のビットＡＣＣ＿Ｓ＿ＲＥＧ［ｃ：０］とＡＣＣ＿Ｃ＿ＲＥＧ［ｃ：０］と下位値レジスタ６５０の出力のうちの最上位ビットＡＣＣ＿Ｌ＿ＲＥＧ［２］とは図８に示したＣＰＡブロック１６０に入力される。また、下位レジスタ６５０の下位の二つのビットＡＣＣ＿Ｌ＿ＲＥＧ［１：０］は結果値出力用シフトレジスタ１８０であるＳＯ＿ＳＩＰＯ＿ＲＥＧ［３１：０］に入力される。
【００６５】
この実施形態において、累算器１５０への入力はモジュラス積ＭＭＩ、部分積ＰＰＩ、モジュラス積反転信号ＮＥＧ＿ＭＭ、部分積反転信号ＮＥＧ＿ＰＰ、および帰還入力のシフト制御信号ＳＨＩＦＴ＿ＡＣＣである。本発明の望ましい実施形態による累算器１５０はＣＳＡ（Ｃａｒｒｙ Ｓａｖｅ Ａｄｄ) 構造で設計されてキャリ伝播遅延時間(ｃａｒｒｙ ｐｒｏｐａｇａｔｉｏｎ ｄｅｌａｙ ｔｉｍｅ)による性能低下を防止する。また、コンプレッサ６１０−６１７は各々４−２コンプレッサで実現される。図１８は４−２ コンプレッサの一例を示す。コンプレッサ６１２は複数の入力を有する。コンプレッサの入力値はループインデックスＩを有し、出力値はループインデックスＩ＋１を有する。
【００６６】
本発明の実施形態において、コンプレッサ６１２は二つの全加算器７０１、７０２を含む。第１全加算器７０１にはＣＩ、ＳＩ およびＰＰＩが入力され、第１全加算器キャリＣＯおよび第１全加算器和ＳＯが出力される。第１全加算器キャリＣＯは出力キャリＣＮに出力されて、次の高いポジションコンプレッサｋ＋１の入力ＣＰになる。第２全加算器７０２には第１全加算器の和ＳＯとモジュラス積ＭＭＩ、および１ビット低いポジションコンプレッサからのキャリＣＰが入力されて第２全加算器キャリＣＯおよび第２全加算器和ＳＯが出力される。第２全加算器キャリＣＯは次のキャリビット値ＣＩ＋１として出力されて、１ビット低いポジションコンプレッサに入力されるキャリＣＩとして使用される。第２全加算器和ＳＯは２ビット低いポジションコンプレッサに入力される和ＳＩとして使用される。最下位ポジションコンプレッサ６１０にはキャリＣＰ入力として部分積反転信号ＮＥＧ＿ＰＰが入力される。
【００６７】
４−２コンプレッサ６１２の入出力の間の関係は数３のとおりである。
【００６８】
【数３】
2005250481.tif 000005
【００６９】
再び図１５を参照すれば、全加算器６４０には一番目のコンプレッサ６１０から出力される和ＳＩ［０］、モジュラス積の最下位ビットＭＭＩ［０］、およびモジュラス積反転信号ＮＥＧ＿ＭＭが入力される。全加算器６４１には二番目のコンプレッサ６１１から出力される和ビット、一番目のコンプレッサ６１０から出力されるキャリビット、および全加算器６４０から出力されるキャリビットが入力される。全加算器６４０の和と全加算器６４１の和およびキャリは下位値レジスタ６５０に貯蔵される。
【００７０】
累算器１５０は単位掛け算演算の一番目のサイクルで以前行の演算結果のうちの現在単位掛け算演算と対応する演算結果を累算器レジスタの値に累積しなければならない。このような過程を累算器の初期値修正サイクルといい、このような過程を支援するためにマルチプレクサ６００−６０９が提供される。
【００７１】
一つのコンプレッサの入力端には二つのマルチプレクサが各々連結される。モジュラス積および部分積の最下位ビット(すなわち、ＭＭＩ［０］および ＰＰＩ［０］に対応する一番目のコンプレッサ６１０と連結されたマルチプレクサ６００、６０１のうちの第１マルチプレクサ６００は２ビット高いコンプレッサからの和ビットＡＣＣ＿Ｓ＿ＲＥＧ［０］と下位値ビットＡＣＣ＿Ｌ＿ＲＥＧ［０］とを第１入力と第２入力として各々入力を受ける。第２マルチプレクサ６０１は１ビット高いコンプレッサ６１１のキャリビットＡＣＣ＿Ｃ＿ＲＥＧ［０］と下位値ビットＡＣＣ＿Ｌ＿ＲＥＧ［２］とを第１入力と第２入力として各々入力を受ける。
【００７２】
二番目のコンプレッサ６１１と連結されたマルチプレクサ６０２、６０３のうちの第１マルチプレクサ６０２は２ビット高いコンプレッサからの和ビットとＡＣＣ＿Ｌ＿ＲＥＧ［１］と下位値ビットＡＣＣ＿Ｌ＿ＲＥＧ［１］とを第１入力と第２入力として各々入力を受ける。第２マルチプレクサ６０３は１ビット高いコンプレッサ６１２のキャリビットＡＣＣ＿Ｃ＿ＲＥＧ［１］と下位値ビットＡＣＣ＿Ｌ＿ＲＥＧ［２］とを第１入力と第２入力として各々入力を受ける。
【００７３】
三番目のコンプレッサ６１２に連結されたマルチプレクサ６０４、６０５のうちの第１マルチプレクサ６０４は２ビット高いコンプレッサからの和ビットＡＣＣ＿Ｓ＿ＲＥＧ［２］と自分と連結されたコンプレッサ６１２の和ビットＡＣＣ＿Ｓ＿ＲＥＧ［０］を第１入力と第２入力として各々入力を受ける。第２マルチプレクサ６０５は１ビット高いコンプレッサのキャリビットＡＣＣ＿Ｃ＿ＲＥＧ［２］と１ビット低いコンプレッサのキャリビットＡＣＣ＿Ｃ＿ＲＥＧ［０］を第１入力と第２入力として各々入力を受ける。三番目のコンプレッサ６１２から最後のコンプレッサ６１７に各々連結された第１および第２マルチプレクサは同一の構造を取る。ただ、最上位コンプレッサ６１７に連結された第１マルチプレクサ６０８の第１入力は自分と連結されたコンプレッサの和ビットを入力として受け、第２マルチプレクサ６０９の第１入力は自分と連結されたコンプレッサ６１７のキャリビットが入力として受ける。また、最上位で一ポジション低いコンプレッサ６１６に連結された第１マルチプレクサ６０６の第１入力は１ビット高いコンプレッサ６１７の和ビットを入力として受ける。最上位４個のコンプレッサ６１７、６１６、６１５、６１４に入力されるＰＰＩとＭＭＩとは同一であり、全部ＰＰＩとＭＭＩの最上位ビットである。
【００７４】
累算器初期値修正サイクル直後の一サイクルで、シフト信号ＳＨＩＦＴ＿ＡＣＣは論理‘０’であり、残りのサイクルでシフト信号ＳＨＩＦＴ＿ＡＣＣは論理‘１’である。シフト信号ＳＨＩＦＴ＿ＡＣＣが論理‘１’であるとき、第１マルチプレクサ６００、６０２、…、６０８と第２マルチプレクサ６０１、６０２、…、６０９の各々は自分の第１入力を出力に送る。図１６は累算器帰還入力のシフト制御信号ＳＨＩＦＴ＿ＡＣＣが論理‘１’であるとき、コンプレッサ６１０−６１７に入力される信号を示している。
【００７５】
累算器初期値修正サイクルを除いた残りのサイクルでレジスタ６５０に貯蔵された和ＳＯ［１：０］が出力される。コンプレッサ６１２−６１７から出力されるキャリ、和、および下位値は各々キャリレジスタ６３０、和レジスタ６２０、および下位値レジスタ６５０に貯蔵され、次のサイクルでコンプレッサ６１０−６１７に帰還される(ｆｅｅｄｂａｃｋ)。次のサイクルで累積しなければならない部分積とモジュラス積とは以前サイクルの部分積およびモジュラスより２ビットだけ高い値なので、以前サイクルに貯蔵された位置より２ビット低い位置に帰還入力されなければならない。
【００７６】
累算器帰還入力のシフト制御信号ＳＨＩＦＴ＿ＡＣＣが論理‘０’であるとき、第１マルチプレクサ６００、６０２、…、６０８と第２マルチプレクサ６０１、６０２、…、６０９の各々は自分の第２入力を出力に送る。図１７は累算器帰還入力のシフト制御信号ＳＨＩＦＴ＿ＡＣＣが論理‘０’であるとき、コンプレッサ６１０−６１７に入力される信号を示している。
【００７７】
各ｂｏｘの累算器初期値修正サイクルでは累算器１５０ｂのレジスタに貯蔵されている値に以前行の結果値のうちのポジションが一致する部分を累積して累算器初期値を修正する作業が実行される。この際には、和レジスタ６２０、キャリレジスタ６３０および下位値レジスタ６５０に貯蔵された値をポジション移動なしに累算器の入力に帰還する。
【００７８】
上述のように、部分積ＰＰ＝｛−２Ａ、−Ａ、０、＋Ａ、＋２Ａ｝であり、モジュラス積ＭＭ＝｛ＳＩ、−Ｍ、０、＋Ｍ、＋２Ｍ｝である。累算器初期値修正サイクルでは０とＳＩとが各々部分積ＰＰとモジュラス積ＭＭとして選択される。累算器初期値修正サイクルを除いた残りのサイクルで部分積ＰＰとモジュラス積ＭＭとは図１１および図１４に示したようなコーディングスキームによって選択される。
【００７９】
部分積とモジュラス積として選択される−Ａと−Ｍとはビット反転(ｂｉｔ−ｉｎｖｅｒＳＩｏｎ)によって得られ、＋２Ａと＋２ＭとはＡとＭとを各々１ビット左側シフトして得られ、−２ＡはＡを１ビット左側シフトとビット反転をして得られる。このように、ビット反転とビットシフトとを通じて求められた部分積とモジュラス積とは１の補数(１‘ｓ ｃｏｍｐｌｅｍｅｎｔ ｎｕｍｂｅｒ)である。本発明の望ましい実施形態による掛け算器データパス１００は２の補数(２‘ｓ ｃｏｍｐｌｅｍｅｎｔ ｎｕｍｂｅｒ) 体系である。２の補数は１の補数に１を足したのと同様である。部分積反転信号ＮＥＧ＿ＰＰおよびモジュラス積反転信号ＮＥＧ＿ＭＭは１の補数で表現された−Ａ、−２Ａまたは−Ｍを２の補数として表現するために使用される。すなわち、部分積反転信号ＮＥＧ＿ＰＰは部分積ＰＰが−Ａまたは−２Ａであるとき、‘１ ’であり、部分積ＰＰが０、＋Ａまたは＋２Ａであるとき、‘０’である。モジュラス積反転信号ＮＥＧ＿ＭＭはモジュラス積ＭＭが−Ｍであるとき、‘１’であり、モジュラス積ＭＭが ＳＩ、０、＋Ｍまたは＋２Ｍであるとき、‘０’である。
【００８０】
本発明の望ましい実施形態によるモンゴメリ掛け算器は多重精度演算を実行するために図１に示したような演算マトリックス形態で動作する。本発明のモンゴメリ掛け算器の内部のデータは演算の進行中にデータのオーバーフローが発生せず、同時に不要に多くのビットが割り当てられないように最適のビット長さに表現されなければならない。次の数学的分析を通じて演算メトリックスの各行の演算結果値が有する範囲を求め、それによって、各行の演算結果値を表現するために必要なビット数を正確に決めることができる。図１に示した演算マトリックスの行のうちの最後の行を除いた残りの三つの行で使用される被乗数Ａ、乗数ＢおよびモジュラスＭは次のとおりである。
【００８１】
【数４】
2005250481.tif 000006
【００８２】
一番目の行で発生される中間結果(ｉｎｔｅｒｍｅｄｉａｔｅ ｒｅｓｕｌｔ)Ｓ０は数５のように表わされる。
【００８３】
【数５】
2005250481.tif 000007
【００８４】
上の数式において、Ｒは２ｃ＋ｗ／２という整数である。本発明のモンゴメリ掛け算器は基数４構造なので、サイクルごとに乗数Ｂの２ビットを処理する。そして、各サイクルごとに使用されるＱの値は｛−１、０、＋１、＋２｝のうちの一つである。したがって、一つの行で使用されたＱの最大値と最小値とは次のように表わされる。
【００８５】
【数６】
2005250481.tif 000008
【００８６】
以上の条件を使用して内部結果Ｓ０の最大値と最小値とを求めれば、次のようになる。
【００８７】
【数７】
2005250481.tif 000009
【００８８】
モジュラスＭがｎビットで構成されているので、上の範囲(ｂｏｕｎｄａｒｙ)を有する数を表現するのに必要なビット数は符号ビットを含んでｎ＋２ビットである。
【００８９】
二番目の行で発生される内部結果Ｓ１は一番目の行の内部結果Ｓ０を初期値として有して計算を実行する。したがって、Ｓ１の算式は次のようになる。
【００９０】
【数８】
2005250481.tif 000010
【００９１】
Ｓ１の最大値と最小値とは次のようになる。
【００９２】
【数９】
2005250481.tif 000011
【００９３】
上のような値の範囲を有する数を表現するのに必要なビット数もｎ＋２ビットである。
【００９４】
同一の方法で三番目の行の中間結果Ｓ２もｎ＋２個のビットで表現することができる。
【００９５】
しかし、多重精度の最後の行の結果値と行とがただ一つだけ存在する単一精度の結果値は符号を含んでｎ＋１ビットに表現することができる。これを証明すれば、次のとおりである。
【００９６】
被乗数Ａ、乗数ＢおよびモジュラスＭの値の範囲は次のとおりである。
【００９７】
【数１０】
2005250481.tif 000012
【００９８】
そして、最終結果Ｓは次のとおりである。
【００９９】
【数１１】
2005250481.tif 000013
【０１００】
数１１において、Ｒは２（ｃ＋ｗ／２）ｐである常数である。数１１に示したＱの最大値と最小値とは次のとおりである。
【０１０１】
【数１２】
2005250481.tif 000014
【０１０２】
したがって、最終結果Ｓの最大値と最小値とは次のとおりである。
【数１３】
2005250481.tif 000015
【０１０３】
上のような値の範囲を有する数を表現するのに必要なビット数はｎ＋１である。
【０１０４】
上述のように、多重精度の場合、最後の行を除いた他の行(内部行)で作られる中間結果が最大値の方に近付く条件が使われる場合に、＋Ｍを越すデータオーバーフロー状況が発生する。このような状況はサイクルごとに選択されるＱの値が上位ポジションの方で大部分＋２であり、また乗数Ａの符号と該当の内部行で使用される被乗数Ｂのチャンクの符号とが同一の場合である。
【０１０５】
各行の結果はｎ＋２ビットで表現される。ところで、ｎがｗの整数倍であり、メモリはｗの整数倍の大きさを有するので、追加された二つのビットをメモリに貯蔵することは非常に非効率的である。したがって、本発明ではｎ＋２ビットのうちの下位ｎビットはメモリに貯蔵し、残りの２ビット(すなわち、最上位にある符号ビットと二番目の最上位ビット)はモンゴメリ掛け算器の内部のレジスタに貯蔵する。これら最上位２ビットは各々ＳＩＧＮ＿Ｓ とＭＳ１Ｂ＿Ｓと名付ける。
【０１０６】
最後の行まで処理を終わらせたとき、レジスタに入られている符号ビットＳＩＧＮ＿Ｓと二番目の最上位ビットＭＳ１Ｂ＿Ｓとは常に同一の値を有する。しかし、内部行の処理を終わらせたとき、符号ビットが０の場合に、二番目の最上位ビットは１になることができる。
【０１０７】
本発明の望ましい実施形態によるモンゴメリ掛け算器データパス１００は、シフトレジスタ１０６、１１５、１１６、１８０を含む。シフトレジスタ１０６、１１５、１１６、１８０の各々の長さはｗであり、クロックに応答して一サイクルに２ビットずつ右側にシフトする。レジスタ１０６、１１５は並列入力直列出力シフトレジスタであり、レジスタ１１６、１８０は直列入力並列出力シフトレジスタである。
【０１０８】
サイクルごとに作られるモジュラス積ＭＭは累算器初期値修正サイクルの場合以前結果ＳＩであり、残りのサイクルでは図１１に示したようなリコーティング表によって決められる値であり、ｑＩＭである。この際、ｑＩは｛−１、０、１、２] のうちの一つである。
【０１０９】
図１に示した行で一番目の単位掛け算演算ＣＳＡ０，０、ＣＳＡ１，０、ＣＳＡ２，０、ＣＳＡ３，０(以下、Ｇｅｎ−Ｑ Ｂｏｘ)ではｑＩを計算して使用し、同一の行にある単位掛け算演算でｑＩを再使用するようにメモリに貯蔵する。図８に示したモンゴメリリコーダ１１０は各行の一番目の単位掛け算演算Ｇｅｎ−Ｑ Ｂｏｘの累算器初期値修正サイクルを除いた残りのサイクルごとに２ビットに符号化されたＱＯ［１：０］を生成し、生成されたＱＯ［１：０］をシフトレジスタ１１６に貯蔵する。
【０１１０】
図１９はシフトレジスタ１１６ＱＯ＿ＳＩＰＯ＿ＲＥＧ［３１：０］を詳細に示す。シフトレジスタ１１６はクロックに反応して一サイクルに２ビットずつ右側にシフトし、モンゴメリリコーダ１１０からのＱＯ［１：０］を最上位２ビットに貯蔵する。シフトレジスタ１１６は新しいワード長さデータが満たされた都度自分のデータをメモリ４０に貯蔵する。
【０１１１】
図２０はシフトレジスタ１１５ＱＩ＿ＳＩＰＯ＿ＲＥＧ［３１：０］を示す。メモリに貯蔵されたＱＯはワード長さｗ単位にシフトレジスタ１１５に入力される。シフトレジスタ１１５の最下位２ビットＱＩ［１：０］はモンゴメリリコーダ１１０に入力され、シフトレジスタ１１５はクロックに反応してシフト制御信号ＳＦＴ＿ＱＩ＿ＰＩＳＯが ‘０’であるとき、メモリ４０から新しいデータを受け入れ、シフト制御信号ＳＦＴ＿ＱＩ＿ＰＩＳＯが‘１’であるとき、２ビットずつ右側にシフトする。
【０１１２】
各行の一番目の単位掛け算演算Ｇｅｎ−Ｑ Ｂｏｘを除いた残りの単位掛け算演算ＣＳＡ０，１− ＣＳＡ０，３、ＣＳＡ１，１−ＣＳＡ１，３ ＣＳＡ２，１−ＣＳＡ２，３、ＣＳＡ３，１−ＣＳＡ３，３(以下、Ｇｅｎ−Ｓ Ｂｏｘ)で、累算器初期値修正サイクルを除いた残りのサイクルごとに２ビット掛け算結果ＳＯ［１：０］が生成されてシフトレジスタ１８０に順次に貯蔵される。
【０１１３】
図２１は累算器１５０の和ＳＯ［１：０］が入力されて貯蔵するシフトレジスタ１８０ＳＯ＿ＳＩＰＯ＿ＲＥＧ［３１：０］を示す。レジスタ１８０はクロックに応答して一サイクルに２ビットずつ右側にシフトし、累算器１５０からのＳＯ［１：０］を最上位２ビットに貯蔵する。シフトレジスタ１８０は新しいワード長さデータが満たされた都度、自分のデータをメモリ４０に貯蔵する。
【０１１４】
図２２はモンゴメリリコーダ１１０で使用されるＳＰＰＩ［１：０］を発生する回路を示す。本発明の実施形態で繰り返しな的データＳＰＰＩ［１：０］は、累算器１５０に貯蔵された和とキャリレジスタの最下位２ビットＡＣＣ＿Ｓ＿ＲＥＧＩ［１：０］、ＡＣＣ＿Ｃ＿ＲＥＧＩ［１：０］、［Ｌ］下位値レジスタの値ＡＣＣ＿Ｌ＿ＲＥＧＩ［２：０］、部分積の最下位２ビットＰＰＩ［１：０］、およびシフト制御信号ＳＨＩＦＴ＿ＡＣＣに依拠する。ＡＣＣ＿Ｓ＿ＲＥＧ［１：０］、ＡＣＣ＿Ｃ＿ＲＥＧ［１：０］、およびＡＣＣ＿Ｌ＿ＲＥＧ［２］は２ビット加算器８０１で合算される。合算された信号は２ビット加算器８０２でＰＰＩ［１：０］と合算される。２ビット加算器８０３はＰＰＩ［１：０］とＡＣＣ＿Ｌ＿ＲＥＧ［１：０］とを合算する。マルチプレクサ８０４はシフト制御信号ＳＨＩＦＴ＿ＡＣＣが論理‘０’であるとき、加算器８０２の出力を選択し、累算器帰還入力のシフト制御信号ＳＨＩＦＴ＿ＡＣＣが論理‘１’であるとき、加算器８０３の出力を選択してＳＰＰＩ［１：０］を出力する。ＳＰＰＩ［１：０］はモンゴメリリコーダ１１０に提供される。本発明の実施形態による上述の説明でビットの大きさは限定されない。ＳＰＰＩは２ビット以上でありうる。この場合、本発明の他の構成は変更されるであろう。
【０１１５】
図２３は本発明の望ましい実施形態によるＣＰＡ演算ブロック１６０を示す。図２３はｃ＝２５６、ｗ＝３２である例を使用した。ＣＰＡ演算ブロック１６０では図１に示したＣＰＡ０、ＣＰＡ１、ＣＰＡ２およびＣＰＡ３が順次に演算される。累算器１５０のキャリレジスタ６３０に貯蔵されたキャリビットのうちのチャンクの長さだけの下位部分ＡＣＣ＿Ｃ＿ＲＥＧ［２５５：０］はマルチプレクサ９０１に入力される。累算器１５０の和レジスタ６２０に貯蔵された和Ｓ［２５５：０］はマルチプレクサ９０２に入力される。マルチプレクサ９０１、９０２は入力選択信号ＳＥＬ＿ＣＰＡ＿ＩＮ［２：０］に応答して２５６ビット入力のうちの最下位ビットから３２ビットずつ順次に選択する。マルチプレクサ９０１、９０２の出力はレジスタ９０３、９０４に各々貯蔵される。入力選択信号ＳＥＬ＿ＣＰＡ＿ＩＮ［２：０］は‘０００’から‘１１１’まで変化する。したがって、ＣＰＡブロック１６０は３２ビットずつ８回繰り返してＣＰＡ演算を実行して、２５６ビット演算を実行することができる。
【０１１６】
キャリ伝播加算器９０５はレジスタ９０３、９０４に貯蔵された値ＣＰＡ＿Ａ＿ＲＥＧ［３１：０］、ＣＰＡ＿Ｂ＿ＲＥＧ［３１：０］とマルチプレクサ９２０からのキャリ入力Ｃ＿ＩＮとを加える。各行のＣＳＡ演算が終わった後、累算器に残っている演算結果値はＡＣＣ＿Ｓ＿ＲＥＧ［２５６：０］＋ＡＣＣ＿Ｃ＿ＲＥＧ［２５６：０］＋ＡＣＣ＿Ｌ＿ＲＥＧ［２］であり、この結果値をＣＰＡを通じて合わせて単一数字表現に変換してメモリに貯蔵しなければならない。したがって、ＣＰＡ演算の一番目のサイクルＳＥＬ＿ＣＰＡ＿ＩＮ［２：０］＝‘０００’でキャリ入力Ｃ＿ＩＮはＡＣＣ＿Ｌ＿ＲＥＧ［２］であり、残りのサイクル（ＳＥＬ＿ＣＰＡ＿ＩＮ［２：０］＝‘００１’からＳＥＬ＿ＣＰＡ＿ＩＮ［２：０］＝‘１１１’まで）でキャリ入力Ｃ＿ＩＮは以前演算サイクルのキャリ出力Ｃ＿ＯＵＴである。キャリ伝播加算器９０５からのキャリ出力Ｃ＿ＯＵＴはレジスタ９０６に貯蔵される。
【０１１７】
ＣＰＡブロック１５０で、繰り返し(ｉｔｅｒａｔｉｏｎ)によってキャリＡＣＣ＿Ｃ＿ＲＥＧ［２５５：０］と和ＡＣＣ＿Ｓ＿ＲＥＧ［２５５：０］とを加える動作を終えた後作られるＣ＿ＯＵＴをＡＣＣ＿Ｃ＿ＲＥＧ［２５６］、ＡＣＣ＿Ｓ＿ＲＥＧ［２５６］ とＸＯＲさせることによって行結果値の新しい符号ビットＳＩＧＮ＿Ｓが計算され、符号ビットＳＩＧＮ＿Ｓを新たに計算された値に変更することを制御する信号としてＵＰＤ＿ＳＩＧＮ＿Ｓが存在する。制御信号ＵＰＤ＿ＭＳ１Ｂ＿Ｓは結果値Ｓの二番目の最上位ビットＭＳ１Ｂ＿Ｓが新たに計算された値に変更されるように制御する信号である。
【０１１８】
偶数倍多重精度すなわち、２倍精度(ｄｏｕｂｌｅ ｐｒｅｃｉｓｉｏｎ)または４倍精度(ｑｕａｄｒｕｐｌｅ ｐｒｅｃｉＳＩｏｎ)などの場合、各行の最後のＣＳＡ演算が実行された後、ＣＰＡ演算に行くとき、累算器の出力のうちの最後のハーフワード(すなわち、ｗ＝３２である場合、１６ビット)はメモリ４０に伝送することができなかったままレジスタ１８０に残るようになる。このような現象を図２４で示している。図２４のように、４倍精度に実現された掛け算器でＣＳＡ単位演算は４回繰り返される。各単位掛け算演算のデータ長さは数１４のとおりである(ｃ＝２５６、ｗ＝３２)。
【０１１９】
【数１４】
2005250481.tif 000016
【０１２０】
二番目の単位演算ＣＳＡ１の最後のハーフワード(１６ ビット)の出力は三番目の単位演算ＣＳＡ２の一番目のハーフワードとともに一つのプルワードに構成されてメモリ４０に貯蔵される。しかし、四番目の単位演算ＣＳＡ３の最後のハーフワード出力はこれ以上の単位演算ブロックがなく、メモリに伝送することができず、レジスタ１８０に残される。このように、一行に対する累算動作が終わってからもメモリ４０に貯蔵することができなかったまま残っているハーフワードデータをＣＰＡ演算過程でメモリ４０に貯蔵するために制御信号ＩＳ＿１ＳＴ＿ＣＰＡ＿ＷＯＲＤ、ＩＳ＿ＯＤＤ＿ＰＲＥＣが使用される。
【０１２１】
再び図２３を参照すれば、偶数倍精度であるとき(ＩＳ＿ＯＤＤ＿ＰＥＣ＝‘０’)、ＣＰＡ演算の一番目のサイクル(ＩＳ＿１ＳＴ＿ＣＰＡ＿ＷＯＲＤ＝‘１’)でキャリ伝播加算器９０５から出力される結果の下位１６ビットＣＰＡ＿Ｓ＿ＯＵＴ［１５：０］はレジスタ１８０に貯蔵された上位１６ビットＳＯ＿ＳＩＰＯ＿ＲＥＧ［３１：１６］と結合して１ワード(３２ビット)で構成され、レジスタ９２５に貯蔵される。キャリー伝播加算器９０５から出力される結果の上位１６ビットＣＰＡ＿Ｓ＿ＯＵＴ［３１：１６］はレジスタ９２２に貯蔵される。
【０１２２】
残りのサイクルで、キャリ伝播加算器９０５の出力のうちの下位１６ビットは以前サイクルでレジスタ９２２に貯蔵された上位１６ビットと結合してレジスタ９２５に貯蔵される。レジスタ９２５のデータはサイクルごとにメモリ４０に貯蔵される。
【０１２３】
上述のブースリコーダ１４０は組み合わせ回路（ｃｏｍｂｉｎａｔｉｏｎａｌ ｃｉｒｃｕｉｔ)で構成される。ブースリコーダ１４０の入出力信号間の論理式は図２５のように異なって実現することができる。
【０１２４】
図２５において、Ａ［１］とＡ［０］とは現在処理中である単位掛け算演算で使用する被乗数Ａの最下位２ビットである。したがって、−Ａの最下位２ビット｛Ａ［１］ｘｏｒ Ａ［０］、Ａ［０］｝であり、 +２Ａと−２Ａの最下位２ビット｛Ａ［０］、０｝になる。
【０１２５】
強制部分積制御信号ＦＯＲＣＥ＿ＰＰ［１：０］が‘１１’であるときには、部分積ＰＰの値が乗数Ｂ１、Ｂ０、ＢＲによって決められる。しかし、強制部分積制御信号ＦＯＲＣＥ＿ＰＰ［１：０］が‘０１’であるときには ＋Ａ に、‘１０’であるときには−Ａに、‘００’であるときには０に強制選択される。
【０１２６】
図１に示したような単位掛け算演算の各々の累算器初期値修正サイクルで以前行の結果値ＳＩは累算器に累積しなければならない。この際、部分積ＰＰは０に選択し、モジュラス積ＭＭの値は以前行の結果値ＳＩに選択しなければならない。累算器初期値修正サイクルで部分積ＰＰの値を０に強制するためには強制部分積制御信号ＦＯＲＣＥ＿ＰＰ［１：０］を‘１１’に設定すれば良い。
【０１２７】
本発明の望ましい実施形態によるモンゴメリ掛け算器１０を利用してモジュラ冪法(ｍｏｄｕｌａｒ ｅｘｐｏｎｅｎｔｉａｔｉｏｎ)を実現すれば、結果はモンゴメリレジデュー数字(Ｍｏｎｔｇｏｍｅｒｙ ｒｅｓｉｄｕｅ ｎｕｍｂｅｒ)であり、“ＸＲ ｍｏｄ Ｍ”で表現される。しかし、窮極的に願う結果はノーマルレジデュー数字(ｎｏｒｍａｌ ｒｅｓｉｄｕｅ ｎｕｍｂｅｒ)である“Ｘ ｍｏｄ Ｍ”である。モンゴメリレジデュー数をノーマルレジデュー数字に変換しようとするときに強制部分積制御信号ＦＯＲＣＥ＿ＰＰ［１：０］を使うことができる。 例えば、被乗数Ｂを‘＋１’に設定し、乗数Ａを以前モンゴメリ掛け算の結果値に設定してモンゴメリ掛け算をもう一度実行すれば、ノーマルレジデュー数字を得ることができる。このような動作のために図１に示した演算マトリックスの一番目の行にある各単位演算で累算器初期値修正サイクルの以後の一サイクルでだけ強制部分積制御信号ＦＯＲＣＥ＿ＰＰ［１：０］を‘０１’に設定して部分積ＰＰの値が＋Ａになるようにし、他のすべてのサイクルで強制部分積制御信号ＦＯＲＣＥ＿ＰＰ［１：０］を‘１１’に設定して部分積ＰＰの値が０になるようにする。
【０１２８】
ブースリコーダ１４０の入力であるＢ１、Ｂ０、ＢＲはレジスタ１０６から入力され、入力Ａ［１：０］はＡＸ＿ＰＩＰＯ＿ＲＥＧ［１：０］とＡＹ＿ＰＩＰＯ＿ＲＥＧ［１：０］とのうちで選択された値であり、入力ＳＥＬ＿ＰＰ＿Ｄ［１：０］は遅延器１４１内のラッチＦＦ１によって選択信号ＳＥＬ＿ＰＰが一サイクル遅延された信号である。ブースリコーダ１４０の出力ＳＥＬ＿ＰＰ［１：０］および部分積イネーブル信号ＥＮ＿ＰＰは部分積発生器１３０に提供され、部分積反転信号ＮＥＧ＿ＰＰは累算器１５０に提供され、部分積ＰＰ［１：０］はＳＰＰ発生器１７０に提供される。
【０１２９】
モンゴメリリコーダ１１０は組み合わせ回路で構成される。モンゴメリリコーダ１１０の新しい入出力信号間の論理式を図２６に示す。図２６で、ｑＩ(ＱＩ［１：０］とＱＯ［１：０］とのコーディングは数１５のとおりである。
【０１３０】
【数１５】
2005250481.tif 000017
【０１３１】
図２６において、Ｍ１はモジュラスＭの二番目の最下位ビットである。強制モジュラス積制御信号ＦＯＲＣＥ＿ＭＭ［１：０］が‘１１’であるとき、モジュラス積ＭＭの値はＳＰＰ［１：０］とＭ１によって決められる。しかしモジュラス積ＭＭは、強制モジュラス積制御信号ＦＯＲＣＥ＿ＭＭ［１：０］が‘１０’であるとき、以前行の結果値ＳＩに、‘０１’であるとき、ＱＩ［１：０］によって選択される値に、‘００’であるとき、０に強制選択される。
【０１３２】
演算マトリックスのすべての単位演算で累算器初期値修正サイクルにはモジュラス積ＭＭの値は以前行の結果値ＳＩに選択しなければならない。演算マトリックスの各行の一番目の単位演算(すなわち、Ｇｅｎ−Ｑ Ｂｏｘ)ではＳＰＰ［１：０］とＭ１に適するモジュラス積ＭＭを決めなければならないので、累算器初期値修正サイクルを除いた残りのサイクルで強制モジュラス積制御信号ＦＯＲＣＥ＿ＭＭ［１：０]は‘００’に設定されなければならない。この際、ｑＩを計算してＱＯ［１：０］に出力し、出力されたＱＯ［１：０］がレジスタ１１６を介してメモリ４０に貯蔵される。
【０１３３】
演算マトリックスの各行の一番目を除いた単位演算(すなわち、Ｇｅｎ−Ｓ Ｂｏｘ)では累算器初期値修正サイクルを除いた残りのサイクルで強制モジュラス積制御信号ＦＯＲＣＥ＿ＭＭ［１：０］を‘０１’に設定し、一番目の単位演算でメモリに貯蔵しておいたｑＩ(すなわち、入力ＱＩ［１：０］)を再使用してモジュラス積ＭＭを選択しなければならない。
【０１３４】
また、本発明の望ましい実施形態による掛け算器データパス１００はモンゴメリ掛け算だけではなく、ノーマル掛け算まで支援することができる。このために、強制モジュラス積制御信号ＦＯＲＣＥ＿ＭＭ［１：０］が使用される。モンゴメリ掛け算と異なり、ノーマル掛け算ではモジュラスが不要であるので、モジュラス積ＭＭがない。したがって、各単位演算の累算器初期値修正サイクルでだけ強制モジュラス積制御信号ＦＯＲＣＥ＿ＭＭ［１：０］を‘１０’に設定してモジュラス積ＭＭが以前行の結果値ＳＩになるようにし、残りのサイクルでは強制モジュラス制御信号ＦＯＲＣＥ＿ＭＭ［１：０］を‘００’に設定してモジュラス積ＭＭの値が０になるようにする。
【０１３５】
モンゴメリリコーダ１１０の入力ＳＰＰ［１：０］はＳＰＰ発生器１７０から入力され、Ｍ１はレジスタ１０２に貯蔵されたモジュラスの二番目の最下位ビットとレジスタ１０３に貯蔵された二番目の最下位ビットのうちで各行の一番目の単位演算(すなわち、Ｇｅｎ−Ｑ Ｂｏｘ)で使用される。そして、ＱＩ［１：０］はレジスタ１１５に貯蔵された最下位２ビットである。また入力ＳＥＬ＿ＭＭ＿Ｄ［１：０］はフリップフロップ１１１によってＳＥＬ＿ＭＭ［１：０］が一サイクルだけ遅延された信号である。モンゴメリリコーダ１１０の出力ＱＯ［１：０］はレジスタ１１６に提供され、モジュラス積選択信号ＳＥＬ＿ＭＭ［１：０］とモジュラス積イネーブル信号ＥＮ＿ＭＭとはモジュラス積発生器１２０に提供され、モジュラス積反転信号ＮＥＧ＿ＭＭは累算器１５０に提供される。
【０１３６】
再び、図８を参照すれば、グリッチ除去器(ｇｌｉｔｃｈ ｒｅｍｏｖｅｒ、１１４)はモンゴメリリコーダ１１０の出力信号ＳＥＬ＿ＭＭ［１：０］、ＥＮ＿ＭＭ、ＮＥＧ＿ＭＭに示すグリッチを除去して消耗電力を低下させる。グリッチ除去器１１４はラッチ、またはフリップフロップで構成され、モンゴメリ掛け算器内の他のレジスタやフリップフロップが使用するクロックと反転された位相のクロックを使用する。消耗電力よりは動作速度が重要な応用ではグリッチ除去器１１０を使用しないことによって、臨界経路(ｃｒｉｔｉｃａｌ ｐａｔｈ)の長さを縮めることができる。パイプラインレジスタ１４１は２段パイプラインレジスタで実現してハードウェアの動作周波数を高めるためのものである。レジスタ１０６とブースリコーダ１４０との動作は残りのブロックの動作より一サイクルの先に発生する。ブースリコーダの入力信号Ａ［１：０］を選択するマルチプレクサ１４２、モジュラス積発生器１２０、部分積発生器１３０、およびモンゴメリリコーダ１１０に入力される信号Ｍ１を選択するマルチプレクサ１１３とフリップフロップ１１２とは共通の制御信号ＵＳＥ＿Ｘ＿ＲＥＧによって制御される。しかし、パイプライン動作なので、ブースリコーダ１４０の入力信号Ａ［１：０］を選択する回路１４２だけ制御信号ＵＳＥ＿Ｘ＿ＲＥＧをそのまま使用し、他の回路１４２、１２０、１３０、１１２は遅延素子を介して１サイクル遅延された制御信号ＵＳＥ＿Ｘ＿ＲＥＧを受け入れる。
【図面の簡単な説明】
【０１３７】
【図１】４倍精度演算を実行するための演算マトリックス構造を例示的に示す図である。
【図２】図１に示した４倍精度演算が実行される単位掛け算演算手順を示す図である。
【図３】本発明の望ましい実施形態による暗号化システムを概略的に示すブロック図である。
【図４】本発明の望ましい実施形態によるモンゴメリ掛け算器である。
【図５】図３に示したモンゴメリ掛け算器のメモリインターフェースを示す図である。
【図６】制御信号の状態に応じてマルチプレクサが選択する信号を示す図表である。
【図７】制御信号の状態に応じてマルチプレクサが選択する信号を示す図表である。
【図８】モンゴメリ掛け算器の全体的な構成を示す図である。
【図９】被乗数を貯蔵するレジスタの詳細な構成を示す図である。
【図１０】モジュラス積(ＭＭＩ)を発生するためのモジュラス積発生器を詳細に示す図である。
【図１１】本発明の望ましい実施形態によるモンゴメリリコーダのコーディングスキームである。
【図１２】乗数Ｂを貯蔵するレジスタである。
【図１３】部分積発生器の回路構成例である。
【図１４】本発明の望ましい実施形態によるブースリコーダのコーディングスキームである。
【図１５】本発明の望ましい実施形態による累算器である。
【図１６】シフト信号(ＳＨＩＦＴ＿ＡＣＣ)が論理‘１’であるとき、コンプレッサに入力される信号を示す図である。
【図１７】シフト信号(ＳＨＩＦＴ＿ＡＣＣ)が論理‘０’であるとき、コンプレッサに入力される信号を示す図である。
【図１８】４−２コンプレッサの一例を示す図である。
【図１９】シフトレジスタ(１１６)を詳細に示す図である。
【図２０】シフトレジスタ(１１５)を詳細に示す図である。
【図２１】累算器(１５０)の和（ＳＯ［１：０］）が入力されて貯蔵するシフトレジスタ(１８０)を示す図である。
【図２２】モンゴメリリコーダ(１１０)で使用されるＳＰＰＩ［１：０］を発生する回路を示す図である。
【図２３】本発明の望ましい実施形態によるＣＰＡ演算ブロック(１６０)を示す図である。
【図２４】偶数倍多重精度の場合、各行の最後のＣＳＡ演算が実行された後、ＣＰＡ 演算に行くとき、累算器の最上位ハーフワードがレジスタ(１８０)に残る現象を示す図である。
【図２５】ブースリコーダ(１４０)の入出力信号間の異なる論理式を示す図である。
【図２６】モンゴメリリコーダ(１１０)の入出力信号間の異なる論理式を示す図である。
【図１】
2005250481.tif 000018
【図２】
2005250481.tif 000019
【図３】
2005250481.tif 000020
【図４】
2005250481.tif 000021
【図５】
2005250481.tif 000022
【図６】
2005250481.tif 000023
【図７】
2005250481.tif 000024
【図８】
2005250481.tif 000025
【図９】
2005250481.tif 000026
【図１０】
2005250481.tif 000027
【図１１】
2005250481.tif 000028
【図１２】
2005250481.tif 000029
【図１３】
2005250481.tif 000030
【図１４】
2005250481.tif 000031
【図１５】
2005250481.tif 000032
【図１６】
2005250481.tif 000033
【図１７】
2005250481.tif 000034
【図１８】
2005250481.tif 000035
【図１９】
2005250481.tif 000036
【図２０】
2005250481.tif 000037
【図２１】
2005250481.tif 000038
【図２２】
2005250481.tif 000039
【図２３】
2005250481.tif 000040
【図２４】
2005250481.tif 000041
【図２５】
2005250481.tif 000042
【図２６】
2005250481.tif 000043