(57)【特許請求の範囲】
【請求項１】
多項式ベースのＧＦ（２q）及びＧＦ（ｐ）の両フィールドの演算において▲○×▼乗算及び平方を実行するマイクロエレクトロニクス装置であって、
直列に供給される基数２▲l▼の乗数Ｂと、ｋ文字の被乗数セグメントＡiと、ｋ文字の▲○＋▼アキュムレーターとを使用する平方及び簡約において、限定された合同への簡約がモジュラスＮ上で被乗数Ａiに乗数Ｂを掛け合わせて実行され、その結果が多くとも２ｋ＋１文字長さであり、最初に発生し無視され保存されないｋのゼロ文字を含み、ｋ文字がモジュラスと同等以上のビットを有し、前記装置は、
各々が少なくともｎビット長さのオペランドを保持するように動作し、夫々乗数値Ｂ及び２nより小さなモジュラスＮを保存するように動作する第一主メモリレジスタ手段及び第二主メモリレジスタ手段と、
▲○＋▼アダーアキュムレーターデバイスにおける値にモジュラス値が▲○＋▼加算されるような場合に、前記▲○＋▼アダーアキュムレーターデバイスから発生する全ての最初のｋ文字がゼロにされるように、予測するデジタル論理検知検出器と、
ただ一つの少なくともｋ文字長さの▲○＋▼加算器と、ｋ文字の被乗数を受け入れるように動作する▲○＋▼加算装置と、順番に被乗数値を▲○＋▼アキュムレーターデバイス内に入れ替え、順番に乗数レジスタから乗数値を受け入れるように動作する▲○×▼乗算装置と、ｋの最初に発生するゼロ文字を出力させるような乗数と同時に生成した予測値とを有し、各々の有効マシンサイクルで少なくとも一つの指定された被乗数が▲○＋▼加算装置に▲○＋▼加算される、少なくともｋ文字の入力被乗数のためのモジュラー乗算装置と、
全ゼロ文字列の値である第一被乗数、被乗数Ａｉである第二被乗数、モジュラスNの右側のｋ文字からなるモジュラスのＮ0セグメントである第三被乗数のうちの二つの被乗数からなる、順番に▲○＋▼アキュムレーションデバイス内に入れ替えられる被乗数値と、
▲ｌ▼ビットのｋ文字の直列入力されるゼロ強制変数の乗数値を予測する装置と、
乗算装置に順番に入力されるＢオペランドである乗数値と、同時に、最初に発生するゼロを出力させるため予測されたｋ文字列であるゼロ強制変数からなる第二乗数値と、
▲○＋▼アキュムレーションデバイスであって、被乗数が該アキュムレーションデバイスへ▲○＋▼加算されると同時に値を出力するように動作する▲○＋▼アキュムレーションデバイスと、
▲○＋▼アキュムレーションデバイスからの最終のモジュラー▲○×▼乗算の結果を出力するように動作する出力転送機構とからなるマイクロエレクトロニクス装置。
【請求項２】
▲○＋▼アキュムレーションデバイスへの▲○＋▼加算が、各々の新たな直列にロードされた上位の乗数の文字により始まる請求項１記載のマイクロエレクトロニクス装置。
【請求項３】
乗数が、入力された乗数文字と対応する入力されたゼロ強制変数文字の両方がゼロの場合は、▲○＋▼アキュムレーションデバイスへの▲○＋▼加算はされず、
入力された乗数文字が１であり、対応するゼロ強制変数がゼロである場合は、Ａi被乗数のみが▲○＋▼加算され、
入力された乗数文字がゼロであり、対応するゼロ強制変数が１である場合は、モジュラスＮのみが▲○＋▼加算され、
入力された乗数文字と対応するゼロ強制変数文字の両方が１である場合は、被乗数Ａiと共にモジュラスＮが▲○＋▼加算されるように動作する請求項１記載のマイクロエレクトロニクス装置。
【請求項４】
被乗数値Ａi，Ｎを二つの指定されたプリロードバッファにプリロードし、これらの値を第三被乗数プリロードバッファに▲○＋▼加算するように動作して、各々の被乗数値を別々に▲○＋▼加算する必要をなくす請求項１記載のマイクロエレクトロニクス装置。
【請求項５】
乗数値が入力において直列単一文字であり、▲○＋▼アキュムレーションデバイスの出力が直列単一文字出力であり、Ｙ0検出装置が一回のクロックで一文字のみ予測するように動作する請求項１記載のマイクロエレクトロニクス装置。
【請求項６】
全ての桁上げ入力がゼロ（▲Ｓ▼＝０を意味する）まで実行不能とされ、概して、多項式ベースの乗算を実行するように動作する請求項１記載のマイクロエレクトロニクス装置。
【請求項７】
▲Ｓ▼がＧＦ（２q）において計算する回路方程式中の要素に影響するゼロに等しく、▲Ｓ▼は桁上げ回路が除かれた回路を示し、▲○＋▼で表される全ての加算器及び減算器が排他的論理和に簡約されて、２を法とした加算／減算要素となる請求項１記載のマイクロエレクトロニクス装置。
【請求項８】
多項式ベースのオペランドでの▲○×▼乗算が逆モードで実行され、右側のＭＳ文字から左側のＬＳ文字を乗算し、モンゴメリ寄生要素２-nなしでモジュラー簡約された▲○×▼乗算を実行する請求項１記載のマイクロエレクトロニクス装置。
【請求項９】
プリロードバッファが直列供給され、被乗数値が複数の記憶装置から即座にプリロードバッファにプリロードされる請求項１記載のマイクロエレクトロニクス装置。
【請求項１０】
プロセスにおいて用いられる有限体に適するように、▲○＋▼が加算を定義し、▲○×▼が乗算を定義し、
デジタル論理検知検出器が▲○＋▼アキュムレーションデバイスにおいて▲○＋▼加算にモジュラスを▲○＋▼加算する必要性を検出するように動作する時に、最初に発生する出力文字がゼロであるように、▲ｌ▼ビットの▲○＋▼加算器回路を経由して、更なるｎビットのレジスタＳから発生する先の値が▲○＋▼アキュムレーションデバイスの出力値に▲○＋▼加算され、デジタル論理検知検出器が、次に順番に▲○＋▼加算した文字Ａ0・Ｂd ｍｏｄ ２▲ｌ▼、▲Ｓ▼（ＣＯ0）、ＳＯ1、Ｓd、▲Ｓ▼（ＣＯZ）を利用して、▲ｌ▼ビットのＪ0値により▲○×▼乗算される有限フィールドであるように▲○＋▼加算された文字を検出するように動作する請求項１記載のマイクロエレクトロニクス装置。
【請求項１１】
▲ｌ▼＝１で、ハードウェアを追加することなく、Ｊ0が暗黙的に１であり、Ｊ0▲○×▼乗算が暗黙的である請求項１記載のマイクロエレクトロニクス装置。
【請求項１２】
被乗数に乗数を掛けてモジュラスとなる出力ストリームを生成するように動作する、整数である被乗数及び乗数のインタリーブされた有限体▲○×▼モジュラー乗算を実行するマイクロエレクトロニクス装置であって、モジュラスオペランドレジスタにおける文字の数ｎがｋよりも大きく、▲○×▼乗算プロセスが反復で実行され、各々のインタリーブされた反復で▲○×▼乗算装置に入力されるオペランドは、モジュラス、乗数、予め計算された部分的な結果、被乗数のｋ文字列セグメントからなり、セグメントはＡ0文字列セグメントからＡm-1文字列セグメントまで処理され、各々の反復の結果は次の順番の一時的結果に▲○＋▼加算され、反復結果の最初に発生する文字はゼロであって、前記装置は、
各々がオペランドを保存、出力でき、夫々乗算値、部分的な結果値、モジュラスを保存するように動作する乗数の第一主メモリレジスタ、一時的結果の第二主メモリレジスタ、モジュラスの第三主メモリレジスタと、
反復▲○×▼乗算プロセスの間、順番に複数の被乗数値の一つ又は二つを▲○＋▼アキュムレーションデバイスに▲○＋▼加算し、順番に第一の値である乗数レジスタからの入力と、各々の反復において最初の右側ゼロ文字を出力させる乗数である第二の値である予測値であるゼロ強制変数の入力と、モジュラスレジスタからの第三の値であるモジュラスの入力とを乗数として受け入れるように動作するモジュラー乗算装置と、
少なくとも、被乗数，乗数，モジュラスレジスタ資源からの値を順番に受け入れ、続いて被乗数ゼロ強制変数値をも受け入れるように動作する被乗数並列レジスタと、
乗数又は、被乗数となるような二進列（ｂｉｎａｒｙ ｓｔｒｉｎｇ）を生成するように動作する最初に発生するゼロ強制変数検出装置と、
第一にゼロ、第二に被乗数のｋ文字列セグメントであるＡi、第三にモジュラスの最初に発生するｋ文字であるＮ0からなる、▲○＋▼アキュムレーションデバイスに入れ替える被乗数値と、
次の反復で部分的な結果を生成するために、アキュムレーションデバイスから発する値に加算される先の反復の結果である一時的結果値Ｓと、
第一にゼロ、第二にオペランドＡi、第三にゼロ強制変数値である、アキュムレーションデバイスに順番に入力される被乗数値と、
乗数オペランドの最初に発生する文字列セグメントである、最初に発生する文字列Ｂ0であり、プリロードされた被乗数バッファに生成すると同時に文字毎にロードされる予測されたゼロ強制変数文字列からなる第二の乗数値と並行して乗算する乗算装置に入力される乗数値と、
夫々、Ｂで表される乗数オペランドからの左側ｎ−ｋ文字の値と、Ｎで表されるモジュラスの左側ｎ−ｋ文字である、装置に入力される二つの乗数値と、
アキュムレーションデバイスに残存する結果値の左側セグメントを結果レジスタに転送するように動作する乗算フラッシュアウト装置とからなるマイクロエレクトロニクス装置。
【請求項１３】
ＭＳ文字からＬＳ文字まで乗算する逆モードにおいて多項式ベースのオペランドで乗算が実行され、モンゴメリ寄生要素２-nなしでモジュラー簡約を実行する請求項１２記載のマイクロエレクトロニクス装置。
【請求項１４】
出力結果をモジュラスと比較するように動作する少なくとも一つのセンサからなり、その機構が、結果レジスタの出力に第二の減算器を動作させることにより、出力された結果値と限定された合同であるモジュラー簡約された値を出力するように動作し、より小さな結果に第二の記憶装置を割り当てる必要を排除する請求項１２記載のマイクロエレクトロニクス装置。
【請求項１５】
最初の値の一つがプリロードバッファにロードされるのと並行して、二つの被乗数の加算である値が、少なくとも一つのｋ文字メモリ手段レジスタでプリロード文字バッファにロードされる請求項１２記載のマイクロエレクトロニクス装置。
【請求項１６】
次の順番に用いられる被乗数が、即座にプリロードレジスタバッファ手段にプリロードされる請求項１２記載のマイクロエレクトロニクス装置。
【請求項１７】
二つの被乗数の合計である値が、その一つの値がそのプリロードバッファにロードされるのと並行して少なくとも一つのｋ文字レジスタに加算される請求項１２記載のマイクロエレクトロニクス装置。
【請求項１８】
装置のバッファ及びレジスタは外部メモリー資源からの値をロードされるように動作し、前記バッファ及びレジスタは計算の間に外部メモリー資源にアンロードされるように動作し、オペランドの最大サイズが利用できるメモリー手段に依存する請求項１２記載のマイクロエレクトロニクス装置。
【請求項１９】
メモリーレジスタ手段が、概して、直列単一文字入力／直列単一文字出力、並列少なくともｋ文字入力／並列少なくともｋ文字出力、直列単一文字入力／並列少なくともｋ文字出力、並列少なくともｋ文字入力／直列単一文字出力である請求項１２記載のマイクロエレクトロニクス装置。
【請求項２０】
乗算型反復の最終段階の間、乗数入力が桁上げ保存累算メモリーの左側セグメントをフラッシュアウトするように動作するゼロ文字である請求項１２記載のマイクロエレクトロニクス装置。
【請求項２１】
次の順番の被乗数が、即座にプリロードメモリーバッファにプリロードされる請求項１２記載のマイクロエレクトロニクス装置。
【請求項２２】
被乗数値が、中央記憶装置から即座にプリロードバッファにプリロードされる請求項１２記載のマイクロエレクトロニクス装置。
【発明の詳細な説明】
【０００１】
（技術分野）
本発明は暗号の共同処理用周辺装置（cryptographic co-processing peripherals）を速めるための演算装置に関するものであり、更に、楕円曲線及びＲＳＡ型の計算のために設計されたモジュラー演算公開鍵暗号コプロセッサ（modular arithmetic public key cryptographic coprocessor）における整数体の計算範囲及び直列の入力オペランド幅を拡張する多項式ベースで素数フィールド（prime number field；素体）の演算のための加速された演算装置に関するものである。
【０００２】
（背景技術）
計算装置のセキュリティ強化及び機能高速化は、出願人による米国特許第５７４２５３０号明細書（以下Ｐ１と称す）、第５５１３１３３号明細書、第５４４８６３９号明細書、第５２６１００１号明細書、第５２０６８２４号明細書、公開された国際出願第ＰＣＴ／ＩＬ９８／００１４８号（国際公開第９８／５０８５１号パンフレット）、対応する米国特許出願公開第０９／０５０９８号明細書（以下Ｐ２と称す）、オニスチャック（Onyszchuk）らの米国特許第４７４５５６８号明細書、オムラらの米国特許第４５８７７６２７号明細書、及び出願人の米国特許出願公開第０９／４８０１０２号明細書に記載されているが、本願はこれらの開示を参考文献として取り込んでいる。
出願人の米国特許第５２０６８２４号明細書には、多項式ベースの乗算及び平方を実行する初期の演算装置が示されているが、素数フィールドにおける演算（operation）を行うことはできず、多項式ベースの計算においてインタリーブする（interleave）ように設計されていない。
更なる解析が、パール・シー（Paar, C.），エフ・フライシュマン（F. Fleischmann），ピー・ソリア−ロドリゲス（P. Soria-Rodriguez）著、「素数ではない数（合成数）を有するガロア体における公開鍵アルゴリズムのための高速演算（Fast Arithmetic for Public-Key Algorithms in Galois Fields with Composite Exponents）」、コンピュータに関するＩＥＥＥ論文集、第４８巻、第１０号、１９９９年１０月（IEEE Transactions on Computers, vol. 48, No. 10, October 1999）（以下パールと称す）で、多項式ベースの演算における拡大体を利用するアプローチによりなされている。
ダブリュー・ウエズレー・ピーターソン（W. Wesley Peterson），イー・ジェー・ウェルドン・ジュニア（E. J. Weldon Jr.）著、「エラー訂正コード（Error-Correcting Codes）」、第二版、エムアイティープレス（MIT Press）、ケンブリッジ、マサチューセッツ州（Mass.）、１９７２年、ｐ．１７４−１７９（以下ピーターソンと称す）、では、多項式ベースの剰余表現GF(2q)における除算実行回路を示している。
ピーターソンの回路は、乗数がまさにモジュラス（modulus；剰余）の長さである装置においてのみ利用され得る。
典型的には、それは本装置より２倍の長さがある装置を必要とし、コンパクトなインプリメンテーション（implementation；実装）には経済的ではない。
また、マルチビット文字（multibit character；マルチビットキャラクター）のY0を決定する従来装置を備えていないので、インタリーブされた（interleaved）インプレメンテーションにも使用できず、▲l▼が１より長い場合は有効でない。
【０００３】
クヌース『ディー・クヌース（D.Knuth）著、「コンピュータプログラミングの技法（The art of computer programming）」、第２巻、準数値算法（Seminumerical algorithms）、アディソン・ウェズリー（Addison-Wesley）、リーディング、マサチューセッツ州、１９８１年、ｐ．４０７』は、多項式ベースの除算において、単一の▲l▼ビット文字に通常の除算プロセスを使用する旨を暗示しているのに対し、我々は商における次の文字を予測する方法を仮定でき、本発明が論理構成（logic configuration）を利用して決定論的に商の次の文字を予測する方法を開示する。
【０００４】
（発明の開示）
本発明の目的は、様々な基数での乗算器においてインタリーブされたモジュラー乗算（ｉｎｔｅｒｌｅａｖｅｄ ｍｏｄｕｌａｒ ｍｕｌｔｉｐｌｉｃａｔｉｏｎ）及び簡約（ｒｅｄｕｃｔｉｏｎ）を同時に実行するために同じ予測法（ａｎｔｉｃｉｐａｔｉｎｇ ｍｅｔｈｏｄ）を利用して、多項式ベース（ｐｏｌｙｎｏｍｉａｌ ｂａｓｅｄ）及び素数ベースの数値体フィールド（ｎｕｍｂｅｒ ｆｉｅｌｄ）における大数計算（ｌａｒｇｅ ｎｕｍｂｅｒ ｃｏｍｐｕｔａｔｉｏｎｓ）を実行するように機能するマイクロエレクトロニクス専用の算術演算装置を提供することである。
【０００５】
本発明の更なる目的は、非常に大きな整数でのモジュラー及びノーマルな（自然数であって負でない整数の体）乗算、除算、加算、減算、べき算を実行するためのコンパクトなマイクロエレクトロニクス専用の算術論理演算装置に関するものである。
簡略化された多項式ベースの乗算及び平方のためにモンゴメリ法及び逆フォーマット法（reversed format method）の両方を利用するモジュラー乗算及び平方に言及する場合、スーパースカラ（superscalar）モジュラー算術コプロセッサ、ＳＭＡＰ、ＭＡＰ、若しくはＳｕｐｅｒＭＡＰ（商標）のような装置の特定部分が参照され、また、出願人の１９９８年３月３１日に提出された米国特許出願公開第０９／０５０９５８号明細書及び２０００年１月１０日に提出された米国一部継続出願公開第０９／４８０１０２号明細書に存在する改良に関するものが参照される。
【０００６】
本願明細書において記載される本発明の好ましい実施例は、携帯型スマートカードで、概して一般に普及している磁気帯付クレジット及びバンクカードと形状及びサイズが同一の公開鍵暗号アプリケーションのためのモジュラー計算演算子を提供する。
出願人の米国特許第５５１３１３３号、５７４２５３０号明細書の技術及び出願人の上述した出願の技術による同様のスマートカードは、コンピュータ、データベース、商取引、軍事用取引、家庭内取引におけるデータフローを調整し保全するため及びスクランブルされた有料テレビプログラムを復号する等のための重要な装置、同様の応用のための端末装置としての重要な装置へのアクセスを制御するための新世代の公開鍵暗号装置において利用される。
典型的には、これらの装置は、コンピュータ−ファクシミリ端末、ドアロック、自動販売機等にも組み込まれている。
【０００７】
好ましい構成（architecture；アーキテクチャ）は、多数のマイクロコントローラ及びデジタル信号処理装置並びに減少した命令セット計算設計（reduced instruction set computational design）に集積されて動作する装置である一方で、該装置はホストの処理装置と並列に演算する。
【０００８】
この実施例は、好ましくは、本質的に２〜３つの乗算装置の役割を果たすたった一つの乗算装置を利用するものであり、該乗算装置は、出願人の米国特許第５５１３１３３号明細書に記載され、米国特許出願公開第０９／０５０９５８号明細書及び国際出願ＰＣＴ／ＩＬ９８／００４８で改良された構成に、基本的には近似している。
従来のマイクロエレクトロニクス技術を利用して、本発明の装置は、スマートカード超小形電子回路上へ記憶装置と共に制御ユニットを集積化される。
【０００９】
多項式ベースの体（field）におけるハードウェア実装と素数からなる体（field:フィールド）におけるハードウェア実装との間の主な差異は、多項式ベースの加算及び減算が、ＬＳからＭＳへの桁上げ信号の伝搬のない単純なＸＯＲ論理演算であるということである。
従って、ハードウェア実装における隣接するセル間で相互作用がなく、減算と加算が同一の手順（procedure）となる。
著者が知っている最初の公表は、１９９４年にイタリアのペルージャで開催されたユーロクリプト・コンフェレンス・ランプ・セッション（Eurocrypt Conference Rump Session）でフォンダツィオーネ・ウーゴ・ボルドーニ（Fondazione Ugo Bordoni）のマルコ・ブッチ（Marco Bucci）による短い講演であるが、この時でさえ当業者であるエンジニアの間にこの構成はよく知られていた。
【００１０】
Ｐ１，Ｐ２に記載された出願人の先の装置は、概して、ＧＦ（ｐ） 体における楕円曲線暗号プロトコルを効率的に計算するために備えられたものである。
本発明においては、ＧＦ（２ｑ） 体における使用のために、我々は、多項式体における隣接する二進数ビット間で相互作用がないので、モンゴメリ関数やモンゴメリ寄生要素（Ｍｏｎｔｇｏｍｅｒｙ ｐａｒａｓｉｔｅ）を導入することなくスーパースカラ乗算装置で簡約（Ｒｅｄｕｃｔｉｏｎ）及び乗算を同時に実行して、計算が効率的に行われることを示す。
計算機が好ましくは最上位の部分積から始めて、ＧＦ（２ｑ）における乗算が実行される。
簡約は、ＭＳの1をゼロに再設定するのに必要なだけモジュラスを加算することによって実行される。
これらの加算において、桁上げはないので、結果は自動的にモジュラー方式で（ｍｏｄｕｌａｒｌｙ）簡約される。
本発明において、多項式計算は同じ構成を利用して実行されるが、そこにおいて、ＧＦ（２ｑ）ではオペランドは最初にＭＳ文字において供給され、全ての内部桁上げ信号はゼロにされる。
ＧＦ（ｐ）計算は好ましくはＰ１及びＰ２に記載のように実行され、そこにおいて、ＬＳ文字は最初に処理され、ＭＳ文字は最後に処理される。
【００１１】
該構成は、直列乗算器が▲ｌ▼ビットの幅広文字（▲ｌ▼ ｂｉｔ ｗｉｄｅ ｃｈａｒａｃｔｅｒｓ）であり、各々のクロックで、▲ｌ▼ビット文字が桁上げ保存累算器ＣＳＡから発生される（ｂｅ ｅｍｉｔｔｅｄ；エミットされる）という点で、潜在的により速い進行（ｐｒｏｇｒｅｓｓｉｏｎ；数列）を可能にするように拡張されてきた。
このことは、単一ビットの広さのバスで２Ｘを法とした奇数の反転（ｉｎｖｅｒｓｉｏｎ；逆転）も奇数であるという点で予測プロセス（Ｙ０）をいくらか複雑にし、被乗数（Ｊ０）の最下位ビットが常に1であった。
しかし、両方の数値体で、我々が、k文字がゼロの文字列を出力することのみが目的であることを覚えており、Ｙ０関数をゼロ強制ベクトル（ｚｅｒｏ ｆｏｒｃｉｎｇ ｖｅｃｔｏｒ；ゼロフォーシングベクトル）としてのみ見なす場合は、桁上げをなくする（制限する）と仮定すると、簡約プロセスは同一である。
【００１２】
本発明は、米国特許第５５１３１３３号明細書に記載されたプロセスに関連する計算的、論理的、算術的な新規な特徴を有する従来のデジタルプロセッサの周辺機器であるデジタル装置の構成を提供しようとするものでもある。
【００１３】
好ましくは、概して各々の演算で大スケールの乗算及び除算を実行する古典的な乗算／除算装置により実行されるのと同様の演算数で除算することなくモジュラーべき算を実行するために、並列プロセス及びハードウェアアーキテクチャが提供される。
本発明の好ましい実施例の特別の特徴は、より大きなスケールの予測ゼロ強制関数（anticipatory zero forcing function）の並列化（concurrency；同時進行）、数値体の拡張、及び安全な通信のためのこの種のユニットを集積化する能力である。
【００１４】
本発明の好ましい実施例によって認識される利点は、直列プロセスの同期シーケンスから生じる。
これらのプロセスは、nの有効クロックサイクル（effective clock cycle）において一つの多重化されたk文字の直列／並列乗算器を用いて、同時に（並列的に）n文字のオペランドで三つの乗算演算を成し遂げるように組み合わされ、結果の左側の最後のk文字は乗算装置の出力バッファに存在する。
この手順は、モンゴメリによって記載されるように、素数からなる体（field:フィールド)で両体における三つの乗算計算と同等のものを得ることができ、GF(2q)において二つの乗算及び一つの除算プロセスと同等のものを得ることができる。
【００１５】
ＳｕｐｅｒＭＡＰへのオペランドのロード及びオペランド数値の即座の(on the fly；高速の）検出と、即座のプリローディング（preloading）及び使用されたオペランドの隣の同時の加算とを同期することにより、装置は決定論的に（in deterministic fashion）計算を実行するように機能する。
次の反復の平方シーケンスで三つの初めのk文字変数を即座にプリロードする全ての乗算及びべき算回路が好ましくは加わる。
好ましくは検出装置が備えられ、kの有効クロックサイクル待ち状態を排除して、三つのオペランドのうちの二つだけが次の反復の被乗数に選択される。
条件付き分岐（conditional branch）が、局所検出及び補正装置（local detection and compensation device）と置換されることにより、単純な制御機構での基準を備えることとなる。
ここに記載された基本的な演算は、典型的には、グレッセル（Gressel）らに付与された米国特許第５５１３１３３号明細書に記載された装置又はフランスのルーセ（Rousset）にあるエスティマイクロエレクトロニクス社（STMicroelectronics）による商品名ST19-CF58の装置を用いて、GF(p)において決定論的な時間で実行される。
【００１６】
オペランドが全演算に亘って外部の揮発性記憶装置へロードされ装置内に保存されるので、本発明の装置は、ほとんどの演算について外部の揮発性記憶装置に特に依存する。
装置は、好ましくは、ＭＡＰがその大数計算を実行する間に、単純なロード及びアンロード並びに装置へのコマンドのシーケンスを実行するために、装置が追加されたＣＰＵを利用する。
現在、スマートカードに応用されている大数は、１２８ビットから２０４８ビットまでの自然数の応用に及ぶ。
べき算処理時間は仮想的にＣＰＵから独立しており、これによりＣＰＵを制御する。
実際には、ＣＰＵに装置を追加する時に、設計上の変更は典型的には不必要である。
ハードウェアデバイスは自己内蔵型であって、好ましくはいかなるＣＰＵバスにも追加される。
【００１７】
一般的に、本発明は、大きな整数の演算処理にも関するものである。
これらの大数は典型的には、（ゼロ以上の）整数の自然数体（natural field：自然数フィールド）におけるものか、又は、素数のガロア体GF(p)、合成数モジュラス（composite prime modulus）、多項式ベースの数のガロア体GF(2q)におけるものである。
とりわけ、本発明の好ましい実施例は、大数のモジュラー演算及びべき算を実行することができる装置を提供しようとするものである。
このような装置は、素数フィールドにおいて次第に大きなオペランドで機能し、現存のモジュラー演算コプロセッサでは効率的に実行できず、ソフトウェア構築でも、しっかりと実行できないような公開鍵暗号認証（Public Key Cryptographic authentication）及び暗号化プロトコルの演算を実行することに適している。
好ましくは、より小さい桁である整数に関して、同じ全体的な構成が楕円曲線の実装（implementation）において利用される。
新規な乗算の逆モード法（reverse mode method；リバースモード法）を利用して、ゼロを生成することにより計算の際に寄生的な2-n因子の負担がないので、多項式演算は有利である。
【００１８】
該構成は、直列単一文字のバス（serial single character bus）を広げることによって、即ちより大きな基数の使用によって可能になった標準的な小さなオペランドの演算を可能する一方で、大きなオペランド整数の演算のモジュラー実行をも可能にする。
概して、これは、計算を高速化し、ＳｕｐｅｒＭＡＰを実行するためのシリコン領域を減少し、一般に普及しているデジタル信号プロセッサ（ＤＳＰ）で互換性がある長さの装置を生成することに有効である。
【００１９】
奇数の素体及び合成数体（ｃｏｍｐｏｓｉｔｅ ｆｉｅｌｄ；合成体）におけるモジュラー乗算について、Ａ及びＢは、夫々被乗数及び乗数と定義され、Ｎはモジュラー演算におけるモジュラスと定義される。
Ｎは、Ａ又はＢより概して大きい。
Ｎは、モジュラスの値が保存される合成レジスタ（ｃｏｍｐｏｓｉｔｅ ｒｅｇｉｓｔｅｒ；複合レジスタ）を意味する。
Ｎは、若干の場合において、概してＡより小さい。
Ａ，Ｂ，Ｎは概してｎ文字長さであり、その文字は概して１〜８ビットの長さである。
ｋは、乗算装置のサイズ（セル数）により定められる群のサイズにおける▲ｌ▼ビットの文字の数である。
同様に、多項式ベースのＧＦ（２ｑ）計算において、モジュラスＮは、ＭＳビットが１である（モニック（ｍｏｎｉｃ）である）ｎビットの長さであり、Ａ，Ｓ，Ｂのオペランドも適切に簡約された場合はｎビットの長さである。
ＧＦ（２ｑ）計算の結果がモニックである場合、前記結果の値からモジュラスで排他的論理和を求める（ＸＯＲ）ことにより、好ましくはＭＳゼロを有する値へ「簡約される（ｂｅ ｒｅｄｕｃｅｄ）」。
好ましい実施例において、ＧＦ（２ｑ）の最初の有効ビットが逆モードにおいて形成されるので、ＭＡＰはそのビットが１であるか否かを検知する（ｓｅｎｓｅ）ことができ、好ましい簡約を実行できる。
【００２０】
素体において、≡、或いは、若干の場合の＝は、例えば16 ≡ 2 mod 7のように、モジュラー数の合同を意味するように利用される。
16を7で割った場合、2が剰余であるので、16は7を法として（modulo 7）2と「合同である」と言う。
Y mod N ≡ X mod Nの場合、Y，Xの両方がNより大きくてもよいが、正のX，Yについては、剰余は同一である。
負の整数Yの合同がY+u・N（Nはモジュラス）であることにも留意する必要があり、Yの合同がN未満となるような場合は、uは正の結果を与える最も小さい整数である。
【００２１】
ＧＦ（２ｑ）において、加算及び減算が同一であり、通常の計算は、概して実質的な桁溢れを残さないので、合同はより単純である。
Ｎ＝１１０１，Ａ＝１００１について、左側のＡのＭＳビットが１であるので、我々は２を法とした演算、Ａ ＸＯＲ Ｎ＝１００１ ＸＯＲ １１０１＝０１００を利用することにより、ＡからＮを簡約（「減算」）しなければならない。
【００２２】
円記号\は、GF(p)において特に有用な限定された意味（limited sense）における合同を意味するように用いられる。
ここに記載されるプロセスの間、値はしばしば所望の値か、若しくは所望の値にモジュラスを加えた値と等しいかのいずれかである。
例えばX \ 2 mod 7の場合である。
Xは、2又は9と等しくなり得る。
Xは、7を法として２が限定された合同（limited congruence to 2 mod 7）を有すると定義される。
円記号がB\のように上付文字として用いられる場合、0≦B\＜2Nであり、別の表現をすれば、B\はB\と合同である最小の正のBと等しいか、又は最小の正のBにモジュラスNを加えたものと合同のものと等しいかのいずれかである。
本発明に特有のその他の記号は、後でまとめて説明する。
【００２３】
X＝A mod Nの場合、XはAをNで割った剰余として定義され、即ち、3＝45 mod 7であり、GF(2q)ではより単純であり、即ち、1111 mod 1001＝0110である。
【００２４】
数論において、Xのモジュラー逆数（modular multiplicative inverse）はX-1と記述され、X・X-1 mod N＝1によって定義される。
X＝3、N＝13の場合、X-1＝9であり、即ち、GF(p)において3・9を13で割った剰余は1である。
【００２５】
両方の数値からなる体で、我々は概して、指数関数を利用して、Aの逆数を計算する方を選択するので、例えば、A-1 mod q≡Aq-2 mod qである。
【００２６】
略語ＭＳ及びＬＳは、デジタル用語で一般に用いられているように、ビット、文字、全オペランド値に言及する場合に夫々「最上位」及び「最下位」を意味するように用いられるが、逆モードの多項式ベースにおいて、オペランドは最初にＭＳデータをロードされ、最後にＬＳデータをロードされ、そこにおいて、データ語（deta word）のビットオーダー（bit order）は、ロード時に逆にされる（be reversed）。
【００２７】
この明細書の全体に亘って、Nは値N、及び、Nを保存する送りレジスタ（shift register）の名称の両方を示す。
値上のアスタリスクの上付き文字は、その値が潜在的に不完全であるか変化する可能性があることを意味する。
Aは累乗されるべき数値であり、nはNオペランドのビット長さである。
初期状態設定の後、AがA*に「モンゴメリP体に標準化された（Montgomery P fieldnormalized）」（Ｐ１に記載したA*＝2n・A）場合、A*及びNは、概してべき算における中間段階を通じて一定値である。
計算がビットの標準的な逆にされていない位置（unreversed positioning）によって実行されるGF(2q)計算において、我々はこの同じプロトコルによって結合される（be bound）。
しかし、桁上げがないので、逆フォーマットを利用して、我々の計算は最上位ゼロを生成し、それを無視し、乗算のシフト（shift；桁送り）を表さない。
【００２８】
第一の反復の間、べき算の初期状態設定の後、ＢはＡ＊に等しい。
Ｂは、最終的にべき算の所望の結果と等しくなる累算された値が存在するレジスタの名称でもある。
Ｓ又はＳ*は一時的な値を示し、Ｓは、ＧＦ（ｐ）のＳにおける数の単一のＭＳビット以外の全てを保存するレジスタを示す。
（このＭＳビットに連結されるＳ*は、Ｓと同一である。）
Ｓ（ｉ−１）は、ｉ番目の反復の最初でのＳの値を意味する。
これらの多項式計算において、Ｓ上のモジュラー簡約を実行する必要はない。
【００２９】
概して、素数フィールドにおけるX，Yのモンゴメリ乗算は、実際に(X・Y・2-n) mod Nの実行であり、nは概してモジュラスにおける文字数である。
これは
【外１】
0004955182.tif 000002
と記述され、P体におけるＭＭ又は乗算を意味する。
モンゴメリ数学のコンテクスト（context）において、我々は、P体及び多項式ベースの体における乗算及び平方を乗算及び平方演算と称す。
【００３０】
我々は、ＧＦ（２ｑ）におけるモンゴメリ型演算のこの革新的な拡張を、逆フォーマットのデータ順序（ｄａｔａ ｏｒｄｅｒ）を意味するように再定義するが、ＭＳゼロ強制（ＭＳ ｚｅｒｏ ｆｏｒｃｉｎｇ）は合同を変更させず、若しくは、厄介な寄生要素（ｐａｒａｓｉｔｉｃ ｆａｃｔｏｒ）を開始させない。
従って、我々は、演算の拡張を受け入れるため及びより広い直列乗算器バスを有する構成を可能にするために、新たな記号のセットを導入する。
自然数のスーパースカラ乗算器を可能にするために、１ビットを越える直列乗算器ストリームが好ましい。
このような乗算器装置は、同時にモジュラー算術乗算及び簡約を実行することができる装置に、３２ビット被乗数及び４ビット乗数を受け入れることができる。
【００３１】
直列／並列のスーパースカラモジュラー乗算器の拡張における記号
0004955182.tif 000003
文字のビット数（桁）
ｒ：乗数（ｍｕｌｔｉｐｌｉｅｒ ｃｈａｒａｃｔｅｒ）の基数  ｒ＝２▲ｌ▼
ｎ：文字におけるオペランド（乗数、被乗数、モジュラス）のサイズ。
モンゴメリ演算のＧＦ（ｐ） 体における計算の実証において、▲ｌ▼は１に等しく、ｎはモジュラスのオペランドのビット長である。
ｋ：文字における直並列の乗数の長さ
ｍ：被乗数のインタリーブされたスライス（ｓｌｉｃｅ）（セグメント）の数で、ｍ＝ｎ／ｋ
Ｓｉ：ｉ番目のＭＭ反復の部分積の結果で、０≦ｉ≦ｍ−１，Ｓ０＝０
Ｓｉ０：Ｚの第一のｋ文字の右側ゼロを無視した後の、ｉ番目の反復結果の右側の文字
Ｓｉ：ｉ番目の結果の左側のｎ−ｋ文字
Ｓｉｊ：Ｓｉのｊ番目の文字
Ａ：ｍ・ｋ文字からなる並列の被乗数
Ａｉ：Ａのｉ番目のｋ文字のスライス（及び／又は文字列Ａｉ）
Ａｉｔ：Ａｉのｔ番目の文字
Ｂ：直列乗数（及び／又はＢのレジスタ記憶装置）
Ｂ０：Ｂの最初の右側のｋ文字
Ｂ：Ｂの最後の左側の（ｎ−ｋ）文字
Ｂ０ｊ：Ｂ０のｊ番目の文字
Ｂｊ：Ｂのｊ番目の文字
Ｎ：モジュラスのオペランド。｛及び／又は前記乗数を保存するレジスタ。｝
Ｎ０：Ｎの右側のｋ文字。｛ＧＦ（ｐ）におけるＬＳ文字，ＧＦ（２ｑ）におけるＭＳ文字｝
Ｎ：Ｎの左側の（ｎ−ｋ）文字。｛ＧＦ（ｐ）におけるＭＳ文字，ＧＦ（２ｑ）におけるＬＳ文字｝
Ｎ０ｊ：Ｎ0のｊ番目の文字
Ｎｊ：Ｎのｊ番目の文字
Ｙ０：ＧＦ（ｐ）におけるモンゴメリ乗算及び簡約の両方に必要なゼロ強制変数。
Ｙ０は、ｋ文字長さである。
Ｙ０ｊ：Ｙ０のｊ番目の文字
Ｒ：桁上げ保存アキュムレーターに存在する値の総和（未解の内部桁上げ挿入（ｃａｒｒｙ ｉｎｓ）を含む）及び最終の直列加算器（ｓｅｒｉａｌ ｓｕｍｍａｔｏｒ；直列総和器）４６０からの桁上げビット（ｃａｒｒｙ ｏｕｔ ｂｉｔ）。
Ｊ００：「即座の」有限体乗算及び簡約のためのモジュラスＮのゼロ強制文字関数。
▲l▼＝1ではＪ００は常に１に等しい。
Ｃａｒｒｙｊ：基数ｒの直並列乗算器のｊ番目の内部桁上げ文字
Ｃａｒｒｙａ：ＧＦ（ｐ）計算のための出力直列加算器の基数ｒの桁上げ
Ｓｕｍｊ：基数ｒの直並列乗算器のｊ番目の内部の和の文字。
ＬＳ：最下位
ＭＳ：最上位
‖：連結（ｃｏｎｃａｔｅｎａｔｉｏｎ）  例えばＡ＝１１０，Ｂ＝１１０１の時、Ａ‖Ｂ＝１１０１１０１
右側：全てのＧＦ（ｐ）計算データブロックの最下位の部分と逆にされたＧＦ（２ｑ）フォーマットのＭＳ部分
左側：全てのＧＦ（ｐ）計算データブロックの最上位の部分と逆にされたＧＦ（２ｑ）フォーマットのＬＳ部分
ＧＦ（ｐ）：ガロア体。厳密に言うと、加算、減算、乗算、擬除算（ｐｓｅｕｄｏ−ｄｉｖｉｓｉｏｎ）を許容する合成数（二つの非常に大きな素数の積）を使用する素数での有限体。
ＧＦ（２ｑ）：ガロア体で２を法とする演算を利用する有限体。
0004955182.tif 000004
特定の記数法に適するように、桁上げの有無に関わらず整数を加算又は減算するために外部で切り換えられる演算子又は装置。
0004955182.tif 000005
ＧＦ（ｐ）又はＧＦ（２ｑ）のいずれかで乗算を実行するために切り換えられる演算子又は装置。
0004955182.tif 000006
数値体スイッチであり、▲Ｓ▼＝1の場合、スイッチはＧＦ（ｐ）計算で全ての桁上げの入出力を可能にするように機能し、▲Ｓ▼＝0の場合、スイッチはＧＦ（２ｑ）  計算で全ての桁上げ入出力を不可能にするように機能する。
ＳｕｐｅｒＭＡＰ：本発明の目的である登録商標のスーパースカラモジュラー演算プロセッサ系統（Ｓｕｐｅｒｓｃａｌａｒ Ｍｏｄｕｌａｒ Ａｒｉｔｈｍｅｔｉｃ Ｐｒｏｃｅｓｓｏｒ ｆａｍｉｌｙ）の構成要素の一つ。
ＳｕｐｅｒＭＡＰの商標は、ヨーロッパにおいて登録され、米国においては係属中である。
【００３２】
本発明の第一の態様によると、多項式ベースのＧＦ（２ｑ）及びＧＦ（ｐ）の両体の演算において▲○×▼乗算及び平方を実行するマイクロエレクトロニクス装置であって、直列にされる供給される基数２▲ｌ▼の乗数Ｂと、ｋ文字の被乗数セグメントＡｉと、ｋ文字の▲○＋▼アキュムレーターとを使用する平方及び簡約において、限定された合同への簡約がモジュラスＮ上で被乗数Ａｉに乗数Ｂを掛け合わせてシストリックな（ｓｙｓｔｏｌｉｃ）態様で「即座に」実行され、その結果が多くとも２ｎ＋１文字長さであり、最初に発生し無視され保存されないｋのゼロ文字を含み、ｋ文字がモジュラスと同等以上のビットを有し、前記演算が二つの段階で行われ、前記装置は、各々が少なくともｎビット長さのオペランドを保持するように動作し、夫々符号Ｂの乗数値及び符号Ｎの２ｎより小さなモジュラスを保存するように動作する第一主メモリレジスタ手段Ｂ及び第二主メモリレジスタ手段Ｎと、▲○＋▼アダーアキュムレーターデバイスにおける値にモジュラス値が▲○＋▼加算されるような場合に、前記▲○＋▼アダーアキュムレーターデバイスから発生する全ての最初のｋ文字がゼロにされるように、「即座に」予測するように動作するデジタル論理検知検出器（ｄｉｇｉｔａｌ ｌｏｇｉｃ ｓｅｎｓｉｎｇ ｄｅｔｅｃｔｏｒ）Ｙ０と、ただ一つの少なくともｋ文字長さの▲○＋▼加算器と、ｋ文字の被乗数を受け入れるように動作する▲○＋▼加算装置（▲○＋▼ ｓｕｍｍａｔｉｏｎ ｄｅｖｉｃｅ）と、順番に被乗数値を▲○＋▼アキュムレーターデバイス内に入れ替え、順番にＢレジスタから乗数値を受け入れるように動作する▲○×▼乗算装置と、第一段階においてｋの最初に発生するゼロ文字を出力させるように動作する乗数と同時に生成した「即座の」予測値とを有し、各々の有効マシンサイクル（ｅｆｆｅｃｔｉｖｅ ｍａｃｈｉｎｅ ｃｙｃｌｅ）で少なくとも一つの指定された被乗数が▲○＋▼アキュムレーターデバイスに▲○＋▼加算される、少なくともｋ文字の入力被乗数のためのモジュラー乗算装置と、全ゼロ文字列の値である第一被乗数、被乗数Ａｉである第二被乗数、モジュラスのＮ０セグメントである第三被乗数のうちの一つ若しくは二つの被乗数からなる、順番に▲○＋▼アキュムレーションデバイス内に入れ替えられる被乗数値と、▲ｌ▼ビットのｋ文字直列入力Ｙ０乗数値を予測するアンティシペーター（ａｎｔｉｃｉｐａｔｏｒ；予測回路）とからなるマイクロエレクトロニクス装置が提供され、該装置は乗数値を乗算装置に順番に入力するように動作でき、前記乗数値は第一段階においてＢオペランドであり、同時に、第二乗数値は最初に発生するゼロを出力させるための「即座の」予測されたｋ文字列であるＹ０からなり、該装置は更に、アキュムレーションデバイス▲○＋▼からなり、該アキュムレーションデバイスは被乗数が該アキュムレーションデバイスへの▲○＋▼であると同時に値を出力するように動作し、第二段階において▲○＋▼アキュムレーションデバイスからの最終のモジュラー▲○×▼乗算の結果を出力するように動作する出力転送機構（ｏｕｔｐｕｔ ｔｒａｎｓｆｅｒ ｍｅｃｈａｎｉｓｍ）からなる。
【００３３】
好ましい実施例によると、▲○＋▼アキュムレーションデバイスへの▲○＋▼加算は、各々の新たな直列にロードされた上位の乗数の文字（ｈｉｇｈ ｏｒｄｅｒ ｍｕｌｔｉｐｌｉｅｒ ｃｈａｒａｃｔｅｒ）により始まる。
【００３４】
好ましくは、乗数は、入力されたB文字と対応する入力されたY0文字の両方がゼロの場合は、▲○＋▼アキュムレーションデバイスへの▲○＋▼加算はされず、入力されたB文字が1であり、対応するY0がゼロである場合は、Ai被乗数のみが▲○＋▼加算され、入力されたB文字がゼロであり、対応するY0が1である場合は、モジュラスNのみが▲○＋▼加算され、入力されたB文字と対応するY0文字の両方が1である場合は、被乗数Aiと共にモジュラスNが▲○＋▼加算されるように動作する。
【００３５】
好ましくは、該装置は被乗数値Ａｉ，Ｎを二つの指定されたプリロードバッファ（ｐｒｅｒｏａｄ ｂｕｆｆｅｒ）にプリロードし、これらの値を第三被乗数プリロードバッファに▲○＋▼加算するように動作して、各々の被乗数値を別々に▲○＋▼加算する必要をなくす。
【００３６】
好ましくは、乗数値は直列単一文字の形式での入力用に調整され、Y0検出装置は一回のクロックで一文字のみ予測するように動作する。
【００３７】
▲○＋▼アキュムレーションデバイスが2を法としてＸＯＲ加算／減算の計算を実行する好まし実施例において、加算成分及び減算成分中の全ての桁上げビットが無視されることにより、計算における桁溢れや更に限定する有益性は排除される。
【００３８】
好ましくは、桁上げ入力はゼロ（▲Ｓ▼＝0を意味する）まで実行不能とされ、概して、多項式ベースの乗算を実行するように動作する。
【００３９】
好ましくは、該装置は桁上げ回路を除くことにより桁上げなしの算術を提供するように動作するので、▲Ｓ▼はGF(2q)において計算する回路方程式（circuit equation）中の要素に影響するゼロに等しく、▲Ｓ▼は除かれた回路を示し、▲○＋▼で表される全ての加算器及び減算器は2を法とした加算／減算要素の排他的論理和を求める。
【００４０】
好ましい実施例は、動作ユニットから発生した最初のk文字セグメントがゼロであって、次のY0文字を予測する際に以下の四つの数量によって調整されるように適応する。
ｉ．  Aiレジスタの右側文字にBストリームのBd文字を掛けた▲l▼ビット毎の2▲l▼を法とする▲○×▼乗算の結果の▲l▼ビットのSoutビット  A0・▲○×▼ Bd mod 2▲l▼、
ｉｉ．  ▲○＋▼アキュムレーションデバイスから最初に発生する桁上げ文字▲Ｓ▼(CO0)、
ｉｉｉ．  ▲○＋▼アキュムレーションデバイスの右側の発生セル（emitting cell）からの次（the second）に発生する桁上げ文字からの▲l▼ビットのSout文字SO1、
ｉｖ．  N0モジュラス被乗数レジスタにおける右側文字の負の逆数である▲l▼ビットのJ0値。
ここで、A0 ▲○×▼ Bd mod 2▲l▼、▲Ｓ▼(CO0)、SO1の値は、共に文字に▲○＋▼加算される文字であり、▲l▼ビットのゼロを発する有効なY0ゼロ強制予測文字（Y0 zero-forcing anticipatory character）を出力するために「即座に」J0文字によって乗算される。
【００４１】
該装置は好ましくは逆モードで実行される多項式ベースのオペランドで乗算を実行するように動作でき、右側のＭＳ文字から左側のＬＳ文字を乗算し、モンゴメリ型寄生関数（Ｍｏｎｔｇｏｍｅｒｙ ｔｙｐｅ ｐａｒａｓｉｔｉｃ ｆｕｎｃｔｉｏｎ）なしでモジュラー簡約された▲○×▼乗算を実行するように動作する。
【００４２】
好ましくは、該装置は、更に直列供給されるプリロードバッファからなり、被乗数値は一以上の記憶装置から即座にプリロードバッファにプリロードされる。
【００４３】
該装置は、好ましくは、Y0検出器が▲○＋▼アキュムレーションデバイスにおいて▲○＋▼加算にモジュラスを▲○＋▼加算する必要性を検出ように動作する時に、最初に発生する出力文字がゼロであるように、▲l▼ビットの▲○＋▼加算器回路を経由して、更なるnビットのSレジスタから発生する先の値に乗算ストリームを▲○＋▼加算するように動作し、Y0検出器は、次に順番に加算した文字A0 ▲○×▼ Bd mod 2、▲Ｓ▼(CO0)、SO1、Sd、▲Ｓ▼(COZ)を利用して、▲l▼ビットのJ0値により即座に▲○×▼乗算される有限体であるように▲○＋▼加算される文字の合成（composite）を検出するように動作するが、ここで、プロセスにおいて用いられる有限体に適するように、▲○＋▼は加算を定義し、▲○×▼は乗算を定義する。
【００４４】
好ましくは、▲l▼＝1で、ハードウェアを追加することなく、J0は暗黙的に（implicitly）1であり、J0▲○×▼乗算は暗黙的（implicit）である（implicit）。
【００４５】
好ましくは、コンパレータ（ｃｏｍｐａｒａｔｏｒ）は、最初の右側の発生するkゼロ文字が無視されるGF(p)において機能している間、▲○×▼モジュラー乗算装置からの有限体出力を検知するように動作し、その出力がモジュラスNより大きいことにより、モジュラー簡約を調整するように動作し、前記値は、乗算装置からの出力ストリームの行き先であるメモリレジスタから出力されることにより、より小さな積の値に第二の記憶装置を割り当てる必要がなくなる。
【００４６】
好ましくは、GF(2q)における▲○×▼モジュラー乗算で、該装置は外部で予め計算された▲l▼ビットより大きなゼロ強制因子なしで乗算するように動作する。
【００４７】
好ましい実施例は、Aオペランド値又はBオペランド値のいずれかをゼロに再設定し、部分的な結果値S0を1に設定することにより、J0定数を計算するように動作する。
【００４８】
本発明の第二の態様によると、ＡにＢを掛けてモジュラスがＮ（Ａ ｔｉｍｅｓ Ｂ ｍｏｄｕｌｕｓ Ｎ）となる出力ストリームを生成するために、整数Ａ及びＢのインタリーブされた有限体モジュラー乗算を実行するマイクロエレクトロニクス装置であって、モジュラスオペランドレジスタにおける文字の数ｎがｋ文字のセグメント長さよりも大きく、▲○×▼乗算プロセスが複数のインタリーブされた反復で実行され、各々のインタリーブされた反復で▲○×▼乗算装置に入力されるオペランドは、モジュラスＮ、乗数Ｂ、予め計算された部分的な結果Ｓ、被乗数Ａのｋ文字列セグメントからなり、セグメントはＡ０文字列セグメントからＡｍ−１文字列セグメントまで処理され、各々の反復の結果は次の順番の一時的結果Ｓに▲○＋▼加算され、反復結果の最初に発する文字はゼロであって、前記装置は、各々が夫々乗算値、部分的な結果値、モジュラスを保存するように動作する第一主メモリレジスタＢ、第二主メモリレジスタＳ、第三主メモリレジスタＮと、順番に前記Ｂレジスタからの入力と、各々の反復において最初の右側ゼロ文字を出力させる乗数として有用な「即座の」予測値Ｙ０の入力と、前記Ｎレジスタと、少なくとも、Ａ，Ｂ，Ｎレジスタ資源からの値を順番に受け入れ、続いて被乗数ゼロ強制値Ｙ０をも受け入れるように動作する被乗数並列レジスタとからの入力で、複数の反復▲○×▼乗算プロセスの各々の間、順番に複数の被乗数値の一つ又は二つを▲○＋▼アキュムレーションデバイスに▲○＋▼加算し動作するモジュラー乗算装置と、該装置は、第一段階の間乗数となるように動作し、第二段階の間被乗数となるように動作する二進列（ｂｉｎａｒｙ ｓｔｒｉｎｇ）を生成するように動作するＹ０検出装置を更に利用し、該装置は、第一にゼロ、第二に被乗数Ａのｋ文字列セグメントであるＡｉ、第三にモジュラスＮの最初に発生するｋ文字であるＮ０からなる、第一段階で▲○＋▼アキュムレーションデバイスに入れ替えるのに適した被乗数値を得るように動作し、該装置は更に、次の反復で部分的な結果を生成するために、▲○＋▼アキュムレーションデバイスから発する値に▲○＋▼加算される先の反復の結果である一時的結果値Ｓを利用するように動作し、該装置は更に、第一にゼロ、第二に第一段階から残存するオペランドＡｉ、第三に第一段階で予測されたＹ０値からなる乗算の第二段階で▲○＋▼アキュムレーションデバイスに順番に入力される被乗数値を利用するように動作し、第一段階で乗算装置に入力される乗数値は、最初に発生する文字列Ｂ０であり、前記乗算装置は、第二段階でプリロードされた被乗数バッファに生成すると同時に文字毎にロードされる予測されたＹ０文字列からなる第二の▲○×▼乗数値と▲○×▼乗算するのと並行して前記文字列セグメントを乗算するように動作し、第二段階の間、装置に入力されるように動作する二つの乗数値は夫々、Ｂで表されるＢオペランドからの左側ｎ−ｋ文字の値と、Ｎで表されるＮモジュラスの左側ｎ−ｋ文字であり、前記装置は更に、▲○＋▼アキュムレーションデバイスに残存する結果値の左側セグメントを結果レジスタに転送するように最終段階で動作する乗算フラッシュアウト装置（ｍｕｌｔｉｐｌｙｉｎｇ ｆｌ��ｓｈ ｏｕｔ ｄｅｖｉｃｅ）からなる。
【００４９】
好ましくは、該装置は、ＭＳ文字からＬＳ文字まで乗算する逆モードにおいて実行される多項式ベースのオペランドで▲○×▼乗算を実行するように動作でき、出願人の米国特許第５７４２５３０号明細書に記載しているように、モンゴメリ型寄生関数なしでモジュラー簡約を実行するように動作する。
【００５０】
本発明の第三の態様によると、被乗数の最初に発生する値、B乗数の現在の入力、▲○＋▼アキュムレーションデバイスからの桁上げ値、▲○＋▼アキュムレーションデバイスからの▲○＋▼加算値、先に計算された部分的な結果からの現在の値、先の部分的な結果に▲○＋▼アキュムレーションデバイスからの結果を▲○＋▼加算する▲○＋▼加算器からの桁上げ値を用いてY0値を予測するように動作する装置が提供される。
【００５１】
好ましくは、該装置は、装置からのkの最初に発生する値がゼロ文字であることを保証するのに適しており、前記適していることが以下の数量を用いる次の順番のY0文字の予測からなる。
ｉ．  Aiレジスタの右側文字にBストリームのBd文字を掛けた▲l▼ビット毎の2▲l▼を法とする▲○×▼乗算の結果の▲l▼ビットのSoutビット  A0・Bd mod 2▲l▼、
ｉｉ．  ▲○＋▼アキュムレーションデバイスから最初に発生する桁上げ文字▲Ｓ▼(CO0)、
ｉｉｉ．  ▲○＋▼アキュムレーションデバイスの右側の発生セル（emitting cell）からの第二からの▲l▼ビットのSout文字SO1、
ｉｖ．  Sストリームからの次の順番の文字値Sd、
ｖ．  Z出力全加算器からの▲l▼ビット桁上げ文字▲Ｓ▼(COZ)、
ｖｉ．  N0モジュラス被乗数レジスタにおける右側文字の負の逆数である▲l▼ビットのJ0値。
ここで、A0・Bd mod 2▲l▼、▲Ｓ▼(CO0)、SO1、Sdの値は、共に文字に▲○＋▼加算される文字であり、有効なY0ゼロ強制予測文字を出力するために「即座に」J0文字によって▲○×▼乗算される。
【００５２】
更なる実施例において、出力結果をモジュラスＮと比較するように動作する少なくとも一つのセンサをも提供され、その機構は、結果レジスタの出力に第二（ｔｈｅ ｓｅｃｏｎｄ）の減算器を動作させることにより、出力された結果値と限定された合同であるモジュラー簡約された値を出力するように動作し、より小さな結果に第二の記憶装置を割り当てる必要を排除する。
【００５３】
なおも更なる実施例において、最初の値の一つが別のプリロードバッファにロードされるのと並行して、二つの被乗数の▲○＋▼加算である値が、少なくとも一つのk文字メモリ手段レジスタでプリロード文字バッファにロードされる。
【００５４】
本発明の第四の態様によると、一連のインタリーブされた▲○×▼モジュラー乗算及び平方を実行するように動作し、三つの自然数乗算演算と同等のものを並行して実行するのに適し、結果がべき算である単一の▲○＋▼アキュムレーションデバイス及び予測ゼロ強制機構（anticipating zero forcing mechanism）を有する装置が提供される。
【００５５】
一つの実施例において、次の順番に用いられる被乗数は、即座にプリロードレジスタバッファ（preload register buffer）にプリロードされる。
【００５６】
更なる実施例において、装置のバッファ及びレジスタは外部メモリー資源からの値をロードされるように動作し、前記バッファ及びレジスタは計算の間に外部メモリー資源にアンロードされるように動作するので、オペランドの最大サイズが利用できるメモリー手段に依存する。
【００５７】
なおも更なる実施例において、メモリーレジスタ手段をも提供され、前記メモリー手段は、概して、直列単一文字入力／直列単一文字出力、並列少なくともk文字入力／並列少なくともk文字出力、直列単一文字入力／並列少なくともk文字出力、並列少なくともk文字入力／直列単一文字出力である。
【００５８】
好ましくは、該装置は、乗算型反復の最終段階の間、乗数入力が桁上げ保存▲○＋▼累算メモリーの左側セグメントをフラッシュアウトするように動作するゼロ文字であることを提供するように動作できる。
【００５９】
好ましくは、該装置は、次の順番の被乗数を、必要とされるよりも前に、即座にプリロードメモリーバッファにプリロードするように動作できる。
【００６０】
好ましくは、該装置は、被乗数値を中央記憶装置から即座にプリロードバッファにプリロードするように動作できる。
【００６１】
同装置は、好ましくはA，Bの両方をゼロに再設定し、S0＝1に設定することにより、モジュラスの右側k文字セグメントに関するk文字モンゴメリ定数J0を計算するように動作でき、続いてkビット乗算を実行する。
結果はY0レジスタに存在する。
【００６２】
モンゴメリ型演算を利用するモジュラー乗算シーケンス
k文字桁上げ保存加算器ＣＳＡは、多項式体及び素数フィールドの両方における直列／並列のスーパースカラモジュラー乗算の基礎である。
多項式GF(2q)ベースの計算は、好ましくは全ての桁上げ機構のスイッチを切られた状態で実行される。
【００６３】
直並列スーパースカラモンゴメリ乗算器は三段階のモンゴメリモジュラー積を計算するが、その一つの好ましい実施例において、最終段階はＣＳＡの桁上げにより左側のk文字セグメント全体の単一クロックのダンプであってもよく（ＭＳは通常の乗算で、ＬＳは逆モードの多項式計算）、よりコンパクトな実施例では、最終段階はＣＳＡの内容のk有効クロック直列フラッシュアウト（k effective clock serial flush out）であってもよい。
【００６４】
先のＰ２の開示において、Y0因子はビット毎に計算されるので、J0の右側のビット、即ち定義では一つのビットのみが重要であって、モジュラスの右側ビットの関数である。
この拡張された装置において、装置は文字直列（character serial）であり、▲l▼ビット文字Y0は各々のクロックサイクルで生成される。
先のＰ１の開示において、Y0は累算された結果に必要な回数だけモジュラス値を加算する第一段階のゼロ強制関数であるので、関連した解が合同であってmk+1文字より決して長くなく、最初に右側で発生した文字は全てゼロであった。
QN≡0 mod NなのでX+QN≡Xである。
【００６５】
モジュラー乗算シーケンス
計算を開始する前に、我々は装置に過去の一時的又はランダムな値がなく、オペランドN，B及び少なくとも最初のAのセグメント値が装置のレジスタにおいて利用できると仮定する。
S0＝0で初めの部分積は概してゼロである。
典型的には、モジュラー演算は、概して三つの明確な段階において二以上のk文字セグメントからなるオペランドで実行される。
mセグメントのモジュラスがある通常の全乗算では、概して、mスーパースカラ乗算インタリーブされた反復（m superscalar multiplication interleaved iterations）があり、被乗数の各々のセグメントが、典型的にはBである全ての乗数によって掛けられる。
【００６６】
各々のインタリーブされたスーパースカラ乗算のi＝0番目のセグメントにおける第一段階のプロセスは、一般的なスーパースカラ乗算累算間の相互作用である。
即ち、Si ▲○＋▼ Ai・B0 ▲○＋▼ Y0・N0
（B0，Y0は直列的に文字毎にオペランドの最初のセグメントから乗算器に供給され、Ai，N0は並列的な単一のスライスのオペランドであり、Siは先の反復／計算からの部分積である。0番目の最初の反復ではSi＝0。）
【００６７】
第一段階のプロセスは、先の結果の右側セグメントへの二つのスーパースカラ積の▲○＋▼加算を実行する。
ゼロのk文字列は、乗算装置から発生して、無視されるが、最初のセグメントの部分積は装置バッファに存在し、第二段階の結果に加算される。
【００６８】
第一段階の結果は典型的にはRからなり、ＣＳＡの内容が全ゼロの直列出力された右側セグメントに連結される。（GF(p)計算において、Rへの更なるＬＳ桁上げビットがある。）
【００６９】
第二段階のプロセスは、一般的なスーパースカラ乗算累積間相互作用である。
即ち、R ▲○＋▼ Si ▲○＋▼ Ai・B ▲○＋▼ Y0・N
（下線を引いた変数、例えばBはオペランドの残存する左側の値であることに留意する。それは、典型的には一つ以上のセグメント、即ち、m-1セグメントである。B，Nは直列的に文字毎に乗算器に供給され、第一段階から残存するAiと、第一段階において乗数であり次の反復において被乗数となるように第一段階においてマシンへロードされるY0とは並列なオペランドである。）
【００７０】
概してm-1回の反復からなる第二段階の終わりに、Siの左側セグメントが転送可能な状態でＣＳＡ内に残存し、右側のスライス（k文字セグメント）は、装置から典型的にはSレジスタに発せられる。
素数フィールドにおける乗算が、従来の桁上げ保存加算法で実行されることに留意すべきである。
GF(2q)の逆フォーマットモードにおける乗算は、最上位文字から最下位文字まで進行した。
モジュラス値がアキュムレーターに「加算され」なければならない時、Y0関数が予測した。
装置において使用できない桁上げビットを除いて、機械的処理は二つの記数法で典型的には同一である。
【００７１】
我々は、有限体におけるゼロ強制ベクトルのY0j文字を誘導するために利用される方法を開示する。
【００７２】
J0j≡-N00-1 mod 2▲l▼を計算する。
モジュラスに対し互いに素である全ての自然数は、両数値体において逆数を有する。
N00は奇数であるので、2の因数を有しない。
mod 2▲l▼の全ての因数は2であるので、最下位1を有する数及び唯一の因数が2であるモジュラスは、互いに素であり、J0jは常に存在する。
正式には、奇数N00及び2▲l▼について、gcd(N00,2▲l▼)＝1となる。
【００７３】
関数のこの単一文字は、ランダムロジック、単純回路、又は単純なルックアップテーブル（look up table）で配線実装され得る。
ルックアップテーブルにおいて誘導されなければならない2k-1の異なる値がある。
逆モードフォーマットにおいて、多項式のモジュラスは、右詰めで、名目上奇数でなければならない。
典型的な指数関数（exponentiational function；べき算関数）において、モジュラスビットの右側ビットは一つであり、名目上奇数であり、2kを法とする奇数の逆数は常に奇数である。
【００７４】
▲l▼＝1である場合、J00乗数は明らかに1に等しく、計算される必要はない。  第一段階の間、Y0関数によって出される文字出力の結果は常に0であるので、ＳｕｐｅｒＭＡＰのj番目の文字出力Zijは、0＝(2▲l▼R ▲○＋▼ Sij ▲○＋▼ Ai0・B0j ▲○＋▼ Y0j・N00) mod 2▲l▼＝Zijとなり、従って、(R ▲○＋▼ Sij ▲○＋▼ Ai0・B0j)≡-Y0j・N00であり、Y0j≡-N00-1(R ▲○＋▼ Sij ▲○＋▼ Ai0・B0j) mod rである。
【００７５】
上記の式から、J00が好ましくは両記数法でモジュラスの右側のk文字のモジュラー逆数の負の値であることが分かるが、2を法とする演算において、正及び負の値は同じであることに留意すべきである。
【００７６】
Rは、図２における最終直列加算器４６０からの桁上げビットに加算されるＣＳＡに残存する値の総和である。
Sijは、i番目の反復での部分積のj番目のビットである。
Ai0は、Aのi番目のスライスの右側文字（GF(p)におけるＬＳ）である。
B0jは、Bのj番目の文字である。
B0は、モンゴメリ乗算の全反復の間の定数（乗数）である。
Y0は、各々の（i番目の）反復で生成されるk文字ベクトルである。
Y0jは、反復の第一段階のj番目のクロックで生成されるj番目の文字である。
Nは、mスライスされた（m sliced）モジュラスである。
N0は、モジュラスの右側スライスである。
N00は、N0の右側文字である。
【００７７】
両体についてスーパースカラモジュラー乗算法の公式化（Formalizing）
S0＝0
i＝0〜m-1（インタリーブ反復）で、
（各々のインタリーブの）第一段階
R＝0
j＝0〜k-1（第一段階の各々の文字）で
Y0j＝(J00(R ▲○＋▼ S0j ▲○＋▼ Ai0 ▲○×▼ B0j)) mod 2▲l▼
Zij＝(R ▲○＋▼ Sij ▲○＋▼ Ai0 ▲○×▼ B0j ▲○＋▼ Y0j ▲○×▼ N0) mod 2▲l▼
R＝[(2▲l▼R ▲○＋▼ Sij ▲○＋▼ Ai0 ▲○×▼ B0j ▲○＋▼ Y0j ▲○×▼ N0)]/2▲l▼
【００７８】
k有効クロックサイクルの後、Zストリームの最初のセグメントは全てゼロであって無視され、関連したY0（k文字ベクトル）は次の段階において被乗数となるように用意され、加算されたRの値は次の段階において利用される。
【００７９】
第二段階
j＝k〜n-1で、
Zij＝(R ▲○＋▼ Sij ▲○＋▼ Ai0 ▲○×▼ B0j ▲○＋▼ Y0j ▲○×▼ N0j) mod 2▲l▼
R＝[2▲l▼R ▲○＋▼ Sij ▲○＋▼ Ai0・B0j ▲○＋▼ Y0j・N0j]/2▲l▼
【００８０】
文字ベースの直並列乗算器での上記アルゴリズムのインプリメンテーションは、上記のプロトコルの単純な拡張である。
（Quotient（商）(x,y)は、剰余のない整数の除算関数である。例えば、x＝10101b，y＝10000bである場合は、Quotient(x,y)＝1）。
【００８１】
S0＝0
i＝0〜m-1（インタリーブのループ）で、
第一段階
j＝0〜k-1で、
Y0j＝(J00・Si0 ▲○＋▼ Ai0 ▲○×▼ B0j ▲○＋▼ ▲Ｓ▼・Carry0 ▲○＋▼ Sum1 ▲○＋▼ Quotient(Si0 ▲○＋▼ Sum0, r))) mod r
t＝0〜k-1（一つのクロックパルスを有する全ループ）で、
Sumt＝(Sumt+1 ▲○＋▼ ▲Ｓ▼・Carryt ▲○＋▼Ait ▲○×▼ B0j ▲○＋▼ Y0j ▲○×▼ N0t) mod r
Carryt＝(Quotient((Sumt+1 ▲○＋▼ Carryt ▲○＋▼ Ait ▲○×▼ B0j ▲○＋▼ Y0j ▲○×▼ N0t), r)
（この段階の乗算器装置の出力は、『0』である。）
【００８２】
第二段階
主要部
Carrya＝0
j＝k〜n-1，t＝0〜k-1（一つのクロックパルスを有する全ループ）で、
Sumt＝(Sumt+1 ▲○＋▼ ▲Ｓ▼・Carryt ▲○＋▼ Ait ▲○×▼ Bj ▲○＋▼ Y0t ▲○×▼ Nj) mod r
Carryt＝Quotient((Sumt+1 ▲○＋▼ Carryt ▲○＋▼ Ait ▲○×▼ Bj ▲○＋▼ Y0t ▲○×▼ Nj), r)
Si,j-k＝(Si,j-2k ▲○＋▼ Sum0 ▲○＋▼ ▲Ｓ▼・Carrya) mod r
Carrya＝Quotient((Si,j-2k ▲○＋▼ Sum0 ▲○＋▼ Carrya), r)
乗算器のフラッシング
j＝n〜(n+k-1)，t＝0〜k-1（一つのクロックパルスを有する全ループ）で、
Sumt＝(Sumt+1 ▲○＋▼ ▲Ｓ▼・Carryt) mod r
Carryt＝Quotient((Sumt+1 ▲○＋▼ Carryt), r)
Si,j-k＝(Si,j-2k ▲○＋▼ Sum0 ▲○＋▼ ▲Ｓ▼・Carrya) mod r
Carrya＝Quotient((Si,j-2k ▲○＋▼ Sum0 ▲○＋▼ Carrya), r)
【００８３】
GF(p) 体における▲l▼＝1の特定の場合の例での正式な説明については、Ｐ１を参照する。
【００８４】
上記は、AにBを掛けてモジュラスがN（A times B modulus N）となる出力ストリームを生成するために、整数A及びBのインタリーブされた有限体モジュラー乗算を実行するマイクロエレクトロニクスの方法及び装置であって、nがモジュラスオペランドレジスタにおける文字であり、k文字のセグメント長さよりも大きく、▲○×▼乗算プロセスが複数の反復で実行され、各々のインタリーブされた反復で▲○×▼乗算装置に入力されるオペランドは、モジュラスN、乗数B、予め計算された部分的な結果S、被乗数Aのk文字列セグメントからなり、セグメントはA0文字列セグメントからAm-1文字列セグメントまで進行し、各々の反復の結果は次の順番の一時的結果Sに▲○＋▼加算され、反復結果の最初に発生する文字はゼロであるマイクロエレクトロニクスの方法及び装置を説明している。
【００８５】
典型的には、乗算装置に供給される四つの直列▲l▼ビット文字レジスタ、第一にB、第二にS、第三にN、好ましくはAがあり、乗算器に効率的にロードされるように構成される。
【００８６】
典型的には、ＭＡＰの内部レジスタに収容されない長いオペランドでの計算のために、ＣＰＵは、そのアクセス可能なメモリーからオペランドをロードすることができる。
【００８７】
典型的には、これらの主メモリレジスタは、夫々、乗数値、部分的な結果値、モジュラスNを保存するように動作するオペランドを保存し出力する。
モジュラー乗算装置は、反復▲○×▼乗算プロセスの間、順番に複数の被乗数値の一つ又は二つを▲○＋▼アキュムレーションデバイスに▲○＋▼加算し、順番に前記Bレジスタの第一の値からの入力と、各々の反復において最初の右側ゼロ文字を出力させる乗数としての「即座の」予測値Y0の第二の値からの入力と、前記モジュラスNレジスタの第三の値からの入力とを乗数として受け入れるように動作する。
【００８８】
被乗数並列レジスタは、A，B，Nレジスタ資源からの値を順番に受け入れ、続いて被乗数ゼロ強制値Y0をも受け入れるように動作する。
【００８９】
ゼロ強制Y0検出装置は、演算の第一段階の間、乗数となるように動作し、各々の反復乗算の第二段階の間、被乗数となるように動作する二進列を生成するように動作する。
【００９０】
第一段階で▲○＋▼アキュムレーションデバイスに入れ替えられる被乗数値は、第一のゼロ値、被乗数Aのk文字列セグメントである第二の値Ai、モジュラスNの最初に発生するk文字である第三の値N0からなり、四つの値のうちの一つになり得る。
図６のように、四番目のプリロードバッファがある場合は、N0値は概して、乗算の開始時に入れ替えられる。
そして、Aのk文字スライスが入力される際は、Ai値はN0値に直列的に加算され、四番目のバッファに保存される。
【００９１】
概して単一のk文字モジュラスでの計算の場合、Sレジスタ若しくは一時的結果値Sの必要性はない。
オペランドが2k文字又はそれより長い場合、Aiスライスを進行させつつ、処理が反復的でなければならない。
平方演算で、Bのスライスは、概してBストリームから即座に回収され（be snared）、Aiプリロードバッファにプリロードされる。
【００９２】
乗算操作の第一の反復で、一時的結果はゼロである。
【００９３】
先の反復からのその後の一時的結果は、次の順番の反復で部分的な結果を生成するために、▲○＋▼アキュムレーションデバイスから発生する値に▲○＋▼加算されるように動作する。
【００９４】
第二段階で▲○＋▼アキュムレーションデバイスに順番に入力される被乗数値は、第一に擬レジスタ値（pseudo register value）であるゼロ、第二に第一段階から残存するオペランドAi、第三にNモジュラスの残存する文字を乗算し続けるように動作する第一段階で予測されたY0値である。
【００９５】
第一段階で乗算装置に入力される乗数値は、最初に発生する文字列B0であり、最初に発生するBオペランドの文字列セグメントであり、第二段階でプリロードされた被乗数バッファに生成すると同時に文字毎にロードされる予測されたY0文字列からなる第二の▲○×▼乗数値と▲○×▼乗算するのと並行して乗算する。
【００９６】
第二段階の間、装置に入力される二つの乗数値は夫々、Bで表されるBオペランドからの左側n-k文字の値と、Nで表されるNモジュラスの左側n-k文字である。
【００９７】
第三段階は、▲○＋▼アキュムレーションデバイスに残存する結果値の左側セグメントを転送するように動作する装置のフラッシュアウトである。
これは、乗数入力において供給されるゼロ文字によってなされる単一クロックのデータダンプか、又はまたは単純な直列アンロードのいずれかである。
【００９８】
ダンプが並列のダンプである場合、その結果（ｒｅｓｕｌｔ）がモジュラスによって更なる簡約を必要とするか否かを決定するために比較する手段がある。
【００９９】
本発明におけるより革新的な拡張のうちの一つは、ＧＦ（２ｑ）における逆モード乗算である。
この演算において加算器セル間の相互作用がないため、積のＭＳ側から始めて乗算及び簡約を実行することができることによって、従来のモンゴメリ乗算における右側シフトを実行することに相当する無視されたゼロにより発生する厄介な寄生（ｐａｒａｓｉｔｅ）なしでモジュラー簡約された解である積を有する。
【０１００】
自動ゼロ強制を可能にする第二の革新点は、ただ一つのビットが一度に予測される装置を記載する特許出願Ｐ２のY0関数の拡張である。
そこでJ00ビットは、単一ビットの排他的論理和を求められた値に掛けられるだけであった。
奇数の逆数及びその負の値は、奇数を発生させる。
これは、▲l▼＝1でのJ0値を計算するために、ルックアップテーブル又はランダム論理回路を実装して保存した。
J0は、近似していない記数法においては異なる数量であることに留意すべきである。
我々は、両方の関連した数値体で、この拡張において、Y0値がどのように誘導され得るかについて示した。
【０１０１】
以下の記載は、被乗数の最初に発生する値、B乗数の現在の入力、▲○＋▼アキュムレーションデバイスからの桁上げ値、▲○＋▼アキュムレーションデバイスからの▲○＋▼加算値、先に計算された部分的な結果からの現在の値、先の部分的な結果に▲○＋▼アキュムレーションデバイスからの結果を▲○＋▼加算する▲○＋▼加算器からの桁上げ値を用いてY0値を予測するように動作する回路要素を記載する。
【０１０２】
別の表現をすれば、ゼロ強制関数を制御するように動作する六つの値は、
ｉ．  Ａｉレジスタの右側文字にＢストリームのＢｄ文字を掛けた▲ｌ▼ビット毎の２▲ｌ▼を法とする▲○×▼乗算の結果の▲ｌ▼ビットのＳｏｕｔビット  Ａ０ ▲○×▼ Ｂｄ ｍｏｄ ２▲ｌ▼、
ｉｉ．  ▲○＋▼アキュムレーションデバイスから最初に発生する桁上げ文字▲Ｓ▼（ＣＯ０）、
ｉｉｉ．  ▲○＋▼アキュムレーションデバイスの右側の発生セルからの第二からの▲ｌ▼ビットのＳｏｕｔ文字
ＳＯ１、
ｉｖ．  Ｓストリームからの次の順番の文字値Sd、
ｖ．  Ｚ出力全加算器からの▲ｌ▼ビット桁上げ文字▲Ｓ▼（ＣＯＺ）、
ｖｉ．  Ｎ０モジュラス被乗数レジスタにおける右側文字の負の逆数である▲ｌ▼ビットのＪ０値、である。
ここでＡ０ ▲○×▼ Ｂｄ ｍｏｄ ２▲ｌ▼、▲Ｓ▼(ＣＯ０)、ＳＯ１、Ｓｄの値は、▲ｌ▼ビットのゼロ文字列を発生させるための共に文字に▲○＋▼加算される文字であり、有効なＹ０ゼロ強制予測文字を出力するために「即座に」Ｊ０文字によって▲○×▼乗算される。
Ｐ１の記載にあるように、出力がモジュラー簡約されなければならないか否かを決定するためには、センサが出力結果をモジュラスＮと比較するように動作し、その機構は、結果レジスタの出力に第二の減算器を動作させることにより、出力された結果値と限定された合同であるモジュラー簡約された値を出力するように動作し、より小さな結果に第二の記憶装置を割り当てる必要を排除する。
【０１０３】
乗算を実行するように構成される単独の▲○＋▼アキュムレーションデバイス及び予測ゼロ強制機構は共に、一連のインタリーブされた▲○×▼モジュラー乗算及び平方を実行するように動作する。
全装置は、従来のモンゴメリ法における三つの整数乗算と同等のものを実行し、J0はB0▲○×▼Ai及びSiの最初のk文字加算を乗算し、最後にNを乗算すべくY0を予測するk文字装置である。
【０１０４】
ＳｕｐｅｒＭＡＰが乗算の最後の反復を計算している間、次の乗算の第一のスライスは、即座にプリロードレジスタバッファ手段にプリロードされ得る。
この値は、図１若しくは図５のレジスタバンクにおけるレジスタセグメントの一つに残存する先の乗算の結果か、又は被乗数のスライスである。
【０１０５】
二つの被乗数の▲○＋▼加算であるプリロードされた値は、GF(2q)計算でのみ、k文字レジスタに▲○＋▼加算される。
GF(p)計算においては、更なる桁上げビットを備えなければならない。
【０１０６】
特に非常に長いモジュラスでは、ＳｕｐｅｒＭＡＰに隣接したバッファ及びレジスタは、概して不十分なメモリ資源を有する。
プリロードバッファにオペランドを直接ロードする手段が提供され、ＣＰＵのメモリマップ（memory map）にオペランドを保存するように動作する。
逆フォーマット乗算では、ＣＰＵから入力された語（word）のビットオーダーは、概してデータ入出力装置において逆にされる。
【０１０７】
図面において、太線は、k文字（k▲l▼ビット）の広い並列バスラインを示す。
より薄い隣接した信号ラインは、▲l▼ビットの広いラインを表す。
ほとんどの制御ラインは表示されていないが、ここに含まれるものは、概して手順を理解するのに必要であり、概して一点鎖線で示されている。
【０１０８】
（発明を実施するための最良な形態）
図面において、太線は、k文字（k▲l▼ビット）の広い並列バスラインを示す。
より薄い隣接した接続信号ラインは、▲l▼ビットの広いラインを表す。
概して、制御ラインは表示されていないが、手順を理解するのに好ましくは必要なものは、概して一点鎖線で示されている。
【０１０９】
図１，２は共に、本発明の好ましい実施例によって構成され作動する直並列算術論理演算ユニット（ＡＬＵ）のブロック略図である。
図１，２の装置は、好ましくは以下の部品を含む。
単一マルチプレクサ（single multiplexer）−一つの信号又は文字のストリームを多数の信号入力から選択し、この選択された信号を単一の出力に当てる制御切換素子。
マルチプレクサは、Ｍ１〜１３の符号を付され、より大きな素子が本来備える素子である。
【０１１０】
マルチプレクサ及びプリアッダー（pre-adder；予加算器）３９０は、k▲l▼+1のマルチプレクサの配列であり、四つのk若しくはk+1文字入力のいずれがＣＳＡ（carry save accumulator；桁上げ保存アキュムレーター）４１０に加えられるかを選択する。
【０１１１】
Ｂ（７０，８０）、ＳＡ（１３０）、ＳＢ（１８０）、Ｎ（２００，２１０）は、好ましい実施例における四つの主要な直列レジスタである。
ＳＡは、概念的に及び実際に冗長であるが、非常に長い番号の計算をかなり速めることができ、特にモジュラスの長さが2・k・m文字長さである場合には、揮発性記憶装置で保存する。
【０１１２】
直列加算器及び直列減算器は、二つの直列文字入力及び一つの直列文字出力を有し、二つの長い文字列を加算若しくは減算する論理素子である。
部品９０及び５００は減算器であり、３３０及び４６０は直列加算器である。入力から出力への伝搬時間は、非常に短い。
直列減算器９０及び５００は概して、B*がN以上である場合、B*をBに減少させ、及び／又は、S*がN以上である場合、S*をSに減少させる。
直列減算器４８０は、B*がN以上であるか否かを検知するコンパレータ部品の一部として利用される。
全加算器３３０は、二つの文字ストリームを加算し、ロードバッファ（load buffer）３４０に、ロードバッファ２９０及び３２０の値の合計と同じ値を供給する。
【０１１３】
高速ローダ及びアンローダ（１０，２０及び３０，４０）は夫々、ＣＰＵ制御装置からのデータフローを速める装置である。
これらの装置は概して、他の直接メモリアクセス部品の必要性を排除する。
符号２０，４０は、逆フォーマット（reverse format）のGF(2q)の乗算のためのデータ語を逆にする必要がある際に、データ語を逆にするためのものである。
【０１１４】
本算術論理演算ユニット装置は直列供給されるシストリックプロセッサ（systolic processor）であるので、データ入力（Data in)５０はパラレルイン−シリアルアウト方式の装置であり、データが並列に供給され、直列に処理される。
【０１１５】
データ出力（Data out）６０は、結果をコプロセッサから出力するためにシリアルイン−パラレルアウト方式の装置である。
商生成器（quotient generator）は、図２のその部分であるが、それは分割機構の各々の反復で商文字を生成する。
【０１１６】
Bd上のフラッシュ信号（flush signal）２４０、S*d上のフラッシュ信号２５０、Nd上のフラッシュ信号２６０は、直前のk+1文字が、確実にＣＳＡをフラッシュアウトできる（flush out）ような信号である。
第二の実施例は、第二段階の終わりにＲデータを一致させ、ＣＳＡをフラッシュアウトするために単一のパラレルデータのダンプ（dump）を行う。
【０１１７】
ロードバッファＲ１，Ｒ２，Ｒ３（２９０，３２０，３４０）は、三つの可能な０以上の被乗数の組合せを受信するのに適したシリアルイン−パラレルアウト方式の送りレジスタ（shift register；シフトレジスタ）である。
【０１１８】
ラッチＬ１，Ｌ２，Ｌ３（３６０，３７０，３８０）は、ロードバッファからの出力を受信し、それにより、次段階のデータが好ましくはＬ１，Ｌ２，Ｌ３にラッチされる前に、ロードバッファがこのデータを処理することが時間的に可能となる。
ラッチＬ０は概して３９０への「仮想」の一定の全ゼロの入力であり、概してラッチされた論理（latched logic）では実行されない。
【０１１９】
Y0検知（Y0 sense）４３０は論理回路であり、ＬＳ（least significant；最下位）ゼロのk文字列が▲○×▼乗算のＺで終了するために、モジュラスが累算される回数を決定する。
【０１２０】
一文字遅延装置（One character delay device）１００，２２０，２３０は、計算の同期のために図１のデータ作成装置と図１のデータ処理装置との間に収容されるように、夫々のデータストリームに挿入される。
【０１２１】
k文字遅延送りレジスタ４７０はNを同期させ、減算器は、Nより大きな比較のために右側の出力のゼロ文字列を無視した後の結果からNを減算する。
【０１２２】
ＣＳＡは、従来のような直列／並列乗算器の入力にラッチされるような単一の値の代わりに、三つの異なるゼロより大きな値が加算されるということを除いては、直列／並列乗算器とほとんど同一である。
多項式ベースの計算において利用される場合には、「全ての桁上げに依存する」関数は使用禁止となる。
【０１２３】
最後の桁上げ挿入（Insert Last Carry）４４０は、Ｓレジスタがm・k文字長さしかないので、Ｓストリームの（m・k・▲l▼+1）番目のビットを挿入するために利用される。
【０１２４】
借り／桁溢れ検出（borrow/overflow detect）４９０は、概して、結果が（Nからの）モジュラス以上であるか、又はGF(p)計算内であるかを検出する。
多項式ベースの計算において、第一の重要な結果のビットが一つである場合、桁溢れが検出される。
【０１２５】
制御機構は記載されていないが、好ましくは、GF(p)及びGF(2q)の両方のシストリック・データ・フロー用に設定されるスイッチを有する特殊関数のための有限状態機械を有する一組のカスケード方式の計数装置であると理解される。
【０１２６】
数の素体及び合成素体（composite prime field）におけるモジュラー型乗算のため、我々はA及びBを被乗数及び乗数と定義し、NをA若しくはBよりも概して大きなモジュラスと定義する。
Nはモジュラスの値が保存されるレジスタをも意味する。
Nは、若干の場合において、Aより小さい。
我々は、A，B，Nをm・k＝nの文字長さのオペランドとして定義する。
各々のkの文字群（k character group）はセグメント（segment）と呼ばれ、その群のサイズは乗算装置のサイズによって定められる。
A，B，Nは各々m文字長さである。
順次手順を説明していく際の平易のために、A，B，Nは512ビットの長さ（n＝512）と仮定し、乗数の経済的な長さ及び簡単なＣＰＵのデータ操作速度を考慮して、kは64文字長さと仮定し、m＝8がオペランドにおけるセグメントの数及び512ビットのオペランドでの平方若しくは乗算ループにおける反復の数である。
全てのオペランドは、自然数である。
より一般的には、A，B，N，n，k，mは、いかなる適切な値をも仮定することができる。
【０１２７】
非モジュラー関数において、Ｎ及びＳレジスタは、他の算術オペランドの一時記憶のために利用されることができる。
【０１２８】
我々は、記号≡をモジュラー数の合同を意味するものとし、例えば、2は16を7で割った剰余となるので、16≡2 mod 7 の場合、16は、7を法として（modulo 7）2と合同であると言う。
我々がY mod N≡X mod Nと記述する場合は、Y，Xの両方ともNより大きくてもよいが、正数のX，Yでは、剰余は同一である。
負の整数Yの合同がY+u・N（Nはモジュラス）であることにも留意する必要があり、Yの合同がN未満となる場合は、uは正の結果を与える最も小さい整数である。
【０１２９】
我々は、記号\を、より限定された意味における合同を意味するものとして利用する。
ここに記載されるプロセスの間、値はしばしば所望の値か、若しくは所望の値にモジュラスを加えた値と等しいかのいずれかである。
例えばＸ￥２ ｍｏｄ ７の場合である。
Ｘは、２又は９と等しい。
この場合、我々は、Ｘが７を法として限定された合同（limited congruence to 2 mod 7）を有すると言う。
多項式ベースの体において、アナログは、我々がＮより大きいというところのモニック（ｍｏｎｉｃ）の値であり、モジュラスに対する排他的論理和（ＸＯＲ）を求めることにより簡約される。
ＧＦ（２ｑ）においては、桁溢れがないので、￥の値は概して無視される。
【０１３０】
我々がX＝A mod N と記述した場合、XはAをNで割った剰余と定義され、例えば、3＝45 mod 7となる。
【０１３１】
数論において、モジュラー型逆数は基礎概念である。
例えば、Xのモジュラー型逆数はX-1と記述され、X・X-1 mod N＝1により定義される。
X＝3及びN＝13の場合、X-1＝9であるが、これを言い換えれば、3・9を13で割った剰余は1ということである。
【０１３２】
略語ＭＳ及びＬＳは、デジタル用語で一般に用いられているように、ビット、文字、セグメント、全オペランド値に言及する場合に最上位及び最下位を意味するように用いられる。
【０１３３】
この明細書の全体に亘って、Nは値N、及び、Nを含む送りレジスタの名称の両方を示す。
値上のアスタリスクの上付き文字は、その値が潜在的に不完全であるか変化する可能性があることを意味する。
Aは累乗されるべき数値であり、nはNオペランドの文字長さである。
初期状態設定の後、AがA*に「モンゴメリ標準化された（Montgomery normalized）」（後述するA*＝2n・A）場合、A*及びNは、べき算における中間段階を通じて一定値である。
第一の反復の間、べき算の初期状態設定の後、BはA*に等しい。
Bは、最終的にべき算の所望の結果と等しくなる累算された値が存在するレジスタの名称でもある。
S*は一時的な値を示し、S，SA，SBは、Sの単一のＭＳビット以外の全てを保存するレジスタを示す。
（このＭＳビットに連結されるS*は、Sと同一である。）
S(i-1)は、i番目の反復の最初でのSの値を意味し、S0は、S(i)番目の値のＬＳセグメントを意味する。
【０１３４】
我々は、GF(p)体（後に定義する）におけるプロセス▲Ｐ▼(A・B)Nを、P体における乗算と、又は時には単に乗算演算と称する。
【０１３５】
我々は、並列／直列乗算器の標準的な構造を複動式の直列並列乗算器を構成するための基礎として利用してきたので、（かなり複雑な桁上げ先見加算器（ｃａｒｒｙ ｌｏｏｋ ａｈｅａｄ ａｄｄｅｒ）若しくは非常に遅いリップル加算器とは対照的に）、桁上げ保存累算を基礎とする乗算器の加算部との差異を認め、桁上げ保存加算器若しくは桁上げ保存アキュムレーターと呼び、プリロード機構（ｐｒｅｌｏａｄｉｎｇ ｍｅｃｈａｎｉｓｍ）とマルチプレクサ及びラッチを別々に取り扱うが、これらは、例えばＡ・Ｂ＋Ｃ・Ｄ＋Ｓのように、ＡとＢ及びＣとＤを同時に掛けることができ、連続的に両方の結果と先の結果であるＳとを加算でき、このアキュムレーターをより汎用的なエンジンに変換する。
更なるロジックが、モジュラー簡約（ｍｏｄｕｌａｒ ｒｅｄｕｃｔｉｏｎ）に必要な予測された検知演算（ａｎｔｉｃｉｐａｔｅｄ ｓｅｎｓｅ ｏｐｅｒａｔｉｏｎ）、及び、極めて大きな数におけるモジュラー演算と通常の整数演算とを提供するのに必要な直列総和（ｓｅｒｉａｌ ｓｕｍｍａｔｉｏｎ）を提供するために、この乗算器に加えられる。
【０１３６】
GF(p)におけるモンゴメリモジュラー型乗算
以下の説明は、数のGF(p)におけるモンゴメリ演算について言及する。
本装置はGF(2q)における多項式ベースの数上のモンゴメリ演算に利用され得るが、計算が、全ての実行可能なオペランドが要素2nを乗ぜられるP体におけるものであるので、実行においては機能が低下する。
【０１３７】
モジュラー型乗算を計算するための古典的な方法において、A・B mod N の場合、積A・Bの剰余は除算によって算出される。
大きなオペランドで従来の除算を実行することは、直列／並列乗算よりも機能することが困難である。
【０１３８】
モンゴメリのモジュラー簡約法（ｍｏｄｕｌａｒ ｒｅｄｕｃｔｉｏｎ ｍｅｔｈｏｄ）を利用して、除算は二つの予め計算された定数を利用する乗算により本質的に置換される。
本願明細書で示される手順において、一つだけ予め計算された定数があり、それはモジュラス関数である。
この定数は、算術論理演算ユニット装置を利用して計算されるか、若しくは計算され得る。
【０１３９】
この装置において利用されるようなモンゴメリプロセスは、まず簡略的に示され、その後に完全な好ましい説明がなされる。
【０１４０】
我々が、例えば1010001（＝8110）のような奇数（ＬＳビットが1）を有する場合、我々は常に、その奇数に他の固定補正（fixing, comepnsationg）奇数、例えば1111（＝1510）を加算することにより、1111+1010001＝1100000（9610）として、この奇数を偶数（単一のＬＳビットが0）に変換することができる。
この具体的事例において、我々は前もって全文字列である81を知っており、81に加算する二進数を容易に決定でき、我々が必要とするＬＳゼロの数を有する新たな二進数を生成できたので、五つのＬＳゼロを生成する数を見つけることができた。
この固定数は右側に1を有していなければならず、さもなければ、結果として出るＬＳ文字に影響を及ぼさない。
【０１４１】
我々のプロセスが、連続したＬＳゼロの数を有することを望み、各々のクロックサイクルで次のビットを固定しさえすればよいクロックされた直列／並列桁上げ保存プロセスである場合、次のビットが1となるようなら各々のクロックでその固定数を加えれば十分であり、予測されるビットがゼロとなるようならその固定数を加えなければ十分である。
しかし、関連した乗数のビットが1であり、Y検知も1と予測する場合、ビット間の桁溢れ（倍の桁上げ）を発生させないために、この固定数は好ましくは前もって被乗数に加算され、アキュムレーターに加えられる。
【０１４２】
ここで、モジュラー演算において、我々はモジュラスによって除算される値の剰余にのみ興味があるので、モジュラスを何回でも値に加算することができ、同じ剰余を有する値をなお有することができることを知っている。
これは、Y・N＝Σyi・ri・Nをあらゆる整数に加えることができ、なおも同じ剰余を有することを意味する。
ここで、Yは、必要なk▲l▼の右側ゼロを生成するために、モジュラスNにおいて加算した回数である。
上記したように、我々が加えるモジュラスは奇数のみである。
（偶数モジュラスが、riが、iが偶数におけるＬＳゼロの数である場合に得られる奇数との積として定義される方法は存在する。）
【０１４３】
モンゴメリのインタリーブされた簡約は、概して保存必要量を減少させ、乗算装置の経済的なサイズを小さくする。
このことは、例えばｎ＝１０２４ビットのような一つの大きな整数に、別の同じ長さの整数を掛けるような、通常倍の長さの整数を生成するプロセスである公開鍵暗号機能を実行する際に、特に有効である。
【０１４４】
我々は、nのＬＳゼロと、多くともn+1のＭＳ文字を有する数Zを有するように、乗算（若しくは平方）プロセスの間、Ns（モジュラス）においてA・B＝X若しくはA・B+S＝Xに十分な回数加算することができる。
【０１４５】
これらのゼロを無視することにより、rnで所望の結果を除算したことを留意していれば、このような数を利用し続け、ＬＳのn文字を無視し続けることができる。
【０１４６】
ＬＳのn文字を無視し、最上位のn（若しくはn+1）文字のみを使用すると、その結果にrnの逆数であるr-nを効果的に乗算した。
我々が続けてこの結果にrn mod N（若しくはrn）を再乗算する場合、A・B+S mod Nとして、（同じ剰余を有する）所望の結果と合同な値を得る。
ここで見られるように、ＭＭ（Montgomery multiplication）を利用した場合、その結果は、ＭＭによって再導入されたr-n寄生要素（parasitic factor）を克服するために、好ましくはr2nを乗算される。
【０１４７】
例
A・B+S mod N＝(12・11+10) mod 13＝(1100・1011+1010)2 mod 10112
▲l▼＝1，r＝2
【０１４８】
我々は、固定数がnのＬＳビットのうち一つで必要な場合はいつでも2iNを加算する。
0004955182.tif 000007
【０１４９】
17は13より大きいので、13を減じて、17・24≡4・24 mod 13となり、正式には2-n(A・B+S) mod N＝9(12・11+10) mod 13≡４である。
【０１５０】
モンゴメリ演算において、我々はＭＳゼロでない結果である4のみを利用し、実際の結果が2nで割られnのゼロがＭＭの結果に押し込められたことを効果的に留意する。
【０１５１】
我々は、24 mod 13≡3により結果を効果的に乗算した(8+2)・13＝10・13において追加した。
結局、我々は不必要なゼロを利用したので、一プロセスでA・B+Y・N+S-(12・11+10・13+10)を実行したと言うことができ、好ましい実施例でできるだけ後述する。
【０１５２】
チェックすると、(12・11+10) mod 13＝12、4・3＝12
【０１５３】
結局、モンゴメリ乗算の結果は、2-nによって乗算される所望の結果である。
【０１５４】
各々のＭＭは2-nの寄生要素を残すので、前の結果を同じ乗算法を利用する所望の結果へ戻すために、我々は22nにより前の結果をモンゴメリ乗算する必要があり、これをHと呼ぶ。
【０１５５】
モンゴメリ乗算関数▲Ｐ▼(A・B)Nは、P体で積A・BのNを法とする乗算を実行する。（上記の例では4を誘導した部分である。）
Pフィールドから通常のモジュラー体へ戻すことは、予め計算された定数Hを利用して、▲Ｐ▼(A・B)Nの結果におけるPを定めることにより実行される。
ここでP＝▲Ｐ▼(A・B)Nである場合、▲Ｐ▼(P・H)N≡A・B mod Nに従うことにより、二つのP体の乗算において通常のモジュラー乗算を行う。
【０１５６】
モンゴメリモジュラー簡約（Ｍｏｎｔｇｏｍｅｒｙ ｍｏｄｕｌａｒ ｒｅｄｕｃｔｉｏｎ）は、ｎ若しくはｎ+1文字長さであるオペランドでの一連の乗算、加算、減算を実行することにより、ｎ若しくは２ｎ文字長さであるオペランドでの一連の乗算、除算を回避する。
全体のプロセスは、Ｎより小さいかＮと同じ結果となる。
与えられたＡ，Ｂ，奇数Ｎについては、Ａ・Ｂ＋Ｑ・ＮがｎのＬＳ文字がゼロである数となるか、又は、Ｐ・２ｎ＝Ａ・Ｂ＋Ｑ・ＮとなるようなＱが常にある。
【０１５７】
これは、我々がnのＬＳ文字がゼロである（可能な１ビットの桁溢れを有する）2n文字長さである表現を有することを意味する。
【０１５８】
ここで、基数r＝2▲l▼で、I・rn≡1 mod Nとする（Iは全ての奇数Nで存在する）。
上式の両側にIを乗算することで、以下の合同が得られる。
式の左側からはP・I・rn≡P mod N（I・rn≡1 mod Nより）、式の右側からはA・B・I+Q・N・I≡A・B・I mod N（Q・N・I≡0 mod Nより）、
従って、P≡A・B・I mod N
これは、P体乗算が実行される毎に、寄生要素I＝r-n mod Nが導入されることをも意味する。
▲Ｐ▼演算子は、P≡A・B・I mod N≡▲Ｐ▼(A・B)Nとなるように定義され、これを「P体におけるA×Bの乗算」又はモンゴメリ乗算と呼ぶ。
P体からの戻しは、P・Hで▲Ｐ▼を演算することによって計算でき、▲Ｐ▼(P・H)N≡A・B mod Nとする。
我々は、前出の合同式のPを置換することによってHの値を誘導することができる。
我々は、▲Ｐ▼(P・H)N≡(A・B・I)(H)(I) mod Nを見出した。
（A・B・I←P、H←H、I←であり、あらゆる乗算演算が寄生要素Iを導入することを参照）
【０１５９】
HがI2の逆数と合同である場合、合同式は有効であるので、H＝I-2 mod N≡r2n mod N（Hは、Nの関数であり、Ｈパラメーターと呼ぶ。）
【０１６０】
従来のモンゴメリ法において、A・Bでの▲Ｐ▼演算子を定めるためには、予め計算された定数Ｊを用いて以下のプロセスを行う。
１）X＝A・B
２）Y＝(X・J) mod rn（nのＬＳ文字のみが必要）
３）Z＝X+Y・N
４）S＝Z/rn（Jの必要条件は、Zをrnによって割り切れるようにすることである。）
５）P\S mod N（S≧Nの場合、NはSから減算される。）
最後に第５段階で、
P\▲Ｐ▼(A・B)N
［Nの減算の後、必要ならばP＝▲Ｐ▼(A・B)N］
上記に続いて、Y＝A・B・J mod rn（nのＬＳ文字のみを使用）
Z＝A・B+(A・B・J mod rn)・N
【０１６１】
Zをrnで割り切れるようにするため（ZのnのＬＳ文字は好ましくはゼロである）、以下の合同式がある。
[A・B+(A・B・J mod rn)・N] mod rn≡0
【０１６２】
この合同式が存在するために、N・J mod rnは-1と合同であるか、又は、
J≡-N-1 mod rn
我々は、定数Jを見つけた。
【０１６３】
従って、JはNのみの関数である予め計算された定数である。
しかし、ＭＭの結果を出力するマシンにおいて、ＬＳ文字列で出力される文字が別にゼロであった各々の場合で、文字毎にNに加えられる用意がなされているべきであり、それにより、Yが配線論理を利用して文字毎に検出されるので、Jを予め計算し、続いてY＝A・B・J mod rnを計算する必要性はなくなる。
我々は、この方法が奇数のNsについてのみ機能できることを述べた。
【０１６４】
従って、明らかなように、上述したプロセスは、▲Ｐ▼(A・B)Nを得るために、与えられたA，B，N及び予め計算された定数で三つの乗算、一つの加算、多くても一つの減算を用いる。
この結果、同じプロセス及び予め計算された定数H（モジュールNの関数）を利用して、我々はA・B mod Nを見つけることができる。
AはBと等しくてもよいので、この基本演算器は、モジュラー演算において平方又は乗算する装置として使用できる。
【０１６５】
インタリーブされたモンゴメリモジュラー型乗算
上記では、全てn文字長さであるオペランド及び2n+1文字の保存空間を必要とした結果の乗算を含んだモジュラー型乗算の方法を説明している。
【０１６６】
Ｐ１に記載したモンゴメリのインタリーブされた簡約を利用して、より短いオペランド、レジスタ及びハードウェア乗算器で乗算演算を実行することが可能であり、比較的少ない論理ゲートでの電子装置のインプリメンテーション（ｉｍｐｌｅｍｅｎｔａｔｉｏｎ）を可能にする。
【０１６７】
まず、我々は、インタリーブの各々の反復で、J0定数を利用してNが加算される回数を計算する場合に、装置がどのように機能するかについて説明する。
後で我々は、Y0の配線誘導（hardwire derivation）を利用したインタリーブする方法を説明するが、これは各々の乗算のJ0+段階を排除し（後述の例の（２）参照）、二つの別々の直列／乗算器を、同様のシリコン資源を利用して、倍速以上の速度でA・B+C・N+Sを実行できる新たな単一の汎用乗算器に組み込むことを可能にする。
【０１６８】
k文字の乗数を利用して、n文字にmのセグメントを有する、即ちm・k＝nとなるようにk文字長さのセグメントを定めることは便利である。
J0は、JのＬＳセグメントである。
従って、J0≡-N0-1 mod rkである（Nとして存在するJ0は奇数である）。
【０１６９】
Ｊ及びＪ０定数は、所定数の最下位ゼロを有するように、簡約していない出力を定める場合に、モジュラスを加える回数を伝える補正数（ｃｏｍｐｅｎｓａｔｉｎｇ）であることに留意すべきである。
次の出力の直列ビットを容易に決めることができるように、次の中間結果に常にモジュラス（常に奇数）を加算するので、我々は本発明に係るシリアルデバイスの更なる利点を後述する。
これは、この加算がなければＣＳＡに存在するＬＳ直列ビットである出力文字が「１」であった場合であり、それにより、先の中間結果にさえモジュラスを加算し、出力文字列に別のＬＳゼロを約束する。
どんなにモジュラスが結果に加算されようとも、剰余が一定であるので、合同が維持されることを思い出すべきである。
【０１７０】
モンゴメリのインタリーブされた簡約の従来の使用において、▲Ｐ▼(Ａ・Ｂ)Ｎは、（１）〜（５）の段階で説明されるように、ｍ回の反復で定められる。
まずＳ（０）＝０とする（第一の反復の最初でのＳの￥の値）。
ｉ＝１，２では、ｍ：
１）Ｘ＝Ｓ（ｉ−１）＋Ａｉ−１・Ｂ（Ａｉ−１はＡのｉ−１番目の文字であり、Ｓ（ｉ−１）は、ｉ番目の反復の最初でのＳの値である。）
２）Ｙ０＝Ｘ０・Ｊ０ ｍｏｄ ｒｋ（Ｘ０・Ｊ０の積のＬＳｋ文字）
（このプロセスは、ｋのＬＳ文字のみ、例えば最下位６４文字のみを使用し計算する。）
直列マシンにおいて、Ｙ０は文字毎に予測されるから、好ましいインプリメンテーションにおいて、この段階は不要である。
３）Ｚ＝Ｘ＋Ｙ０・Ｎ
４）Ｓ（ｉ）＝Ｚ／ｒｋ
（ＺのｋのＬＳ文字は常にゼロであるので、Ｚは常にｒで割り切れる。
ＺのＬＳｋ文字は全てのゼロであるので、この除算はｋ文字の右側へのシフト（ｓｈｉｆｔ；桁送り）に相当し、または、回路に示されるように、ＺのＬＳｋ文字は単に無視される。
５）Ｓ（ｉ）＝Ｓ（ｉ） ｍｏｄ Ｎ（Ｎは、Ｎより大きなそれらのＳ（ｉ）から減算されることになる）。
最後に、（必要な場合はＮの減算の後）最後の反復で、Ｃ＝Ｓ(ｍ)＝▲Ｐ▼（Ａ・Ｂ）Ｎ
【０１７１】
F＝A・B mod Nを誘導するために、P体計算▲Ｐ▼(C・H)Nが実行される。
【０１７２】
好ましい実施例において、全てのS(i)でS(i)が2Nより小さくなることを知ることが望ましい。
これは、最後の結果（S(m)）が常に、多くとも一回のNの減算で、Nより少ない数量に減算され得ることをも意味する。
【０１７３】
我々は、以下のプロセスにおいて利用されるオペランドでそのことを観察する。
即ち、S(i-1)＜rn+1
（一時レジスタは、B又はNレジスタよりも1ビット長くてもよい）、
B＜N＜rn、及び、Ai-1＜rk
定義により、S(i)＝Z/rk（可能な減算前のプロセスの終わりのSの値）
全てのZで、Z(i)＜rn+k+1
Xmax＝Smax+Ai・B＜rn+1-1+(rk-1)(rn-1)
Qmax＝Y0N＜(rk-1)(rn-1)
従って、Zmax＜rk+n+1-rk+1+1＜rk+n+1-1
Zmaxはrkで割り切れるので、
S(m)＜rn+1＜-r1
Nmin＞rn-rなので、S(m)maxは常に2・Nminよりも小さく、従って、一回の減算が最後の結果で必要なだけである。
S(m)max-Nmin＝(rn+1-r1-1)-(rn-1)＝rn-4＜Nmin
【０１７４】
モンゴメリのインタリーブされたモジュラー型乗算の例
十六進数での以下の計算は、インタリーブされた方法の意味を明らかにする。
N＝a59（モジュロ（modulo））、A＝99b（乗数）、B＝5c3（被乗数）、n＝12、 r＝2）（Ｎの文字長さ）、k＝4（乗数の文字におけるサイズ、更にはセグメントのサイズ）、n＝k・mなのでm＝3。
7・9≡-1 mod 16及びH≡22・12 mod a59≡44bなのでJ0＝7。
【０１７５】
期待される結果は、F≡A・B mod N≡99b・5c3 mod a59≡375811 mod a59≡22016である。
【０１７６】
最初にS(0)＝0で、
段階１
X＝S(0)+A0・B＝0+b・5c3＝3f61
Y0＝X0・J0 mod rk＝7（Y0は、ＳｕｐｅｒＭＡＰにおいて予測される配線）
Z＝X+Y0・N＝3f61+7・a59＝87d0
S(1)＝Z/rk＝87d
段階２
X＝S(1)+A1・B＝87d+9・5c3＝3c58
Y0＝X0・J0 mod rk＝8・7 mod 24＝8（予測される配線）
Z＝X+Y0・N＝3c58+52c8＝8f20
S(2)＝Z/rk＝8f2
段階３
X＝S(2)+A2・B＝8f2+9・5c3＝3ccd
Y0＝d・7 mod 24＝b（予測される配線）
Z＝X+Y0・N＝3ccd+b・a59＝aea0
S(3)＝Z/rk＝aea
S(3)＞Nなので、
S(m)＝S(3)-N＝aea-a59＝91
従って、C＝▲Ｐ▼(A・B)N＝9116
P体からの戻しは、▲Ｐ▼(C・H)Nを計算することによって実行される。
再び最初にS(0)＝0で、
段階１
X＝S(0)+C0・H＝0+1・44b＝44b
Y0＝d（スーパーマップにおいて予測される配線）
Z＝X+Y0・N＝44b+8685＝8ad0
S(1)＝Z/rk＝8ad
段階２
X＝S(1)+C1・H＝8ad+9・44b＝2f50
Y0＝0（スーパーマップにおいて予測される配線）
Z＝X+Y0・N＝2f50+0＝2f50
S(2)＝Z/rk＝2f50
段階３
X＝S(2)+C2・H＝2f5+0・44b＝2f5
Y0＝3（スーパーマップにおいて予測される配線）
Z＝X+Y0・N＝2f5+3・a59＝2200
S(3)＝Z/rk＝22016
それは、99b・5c3 mod a59の期待値である。
【０１７７】
各々の段階で我々がkのＬＳを無視したとすれば、本質的にnのＭＳ文字をrkによって乗算することとなる。
同様に、各々の段階で、乗数のi番目のセグメントはrikによって乗算される数であり、それにS(i)と同位（same rank）を与える。
【０１７８】
J0定数を知るための潜在的な値がある別の好ましい実施例において、Ai・B+S＝1である場合、Y0＝-N0-1＝J0である。
【０１７９】
べき算（Exponentiation）
『ディー・クヌース（D.Knuth）著、「コンピュータプログラミングの技法（The art of computer programming）」、第２巻、準数値算法（Seminumerical algorithms）、アディソン・ウェズリー（Addison-Wesley）、リーディング、マサチューセッツ州、１９８１年、ｐ．４０７』（以下クヌースと称す）で、シーケンスの以下の導出は、平方及び乗算のシーケンスを説明しており、べき剰余（modular exponentiation）を実行する。
【０１８０】
この装置はP体において平方及び乗算することができるので、モンゴメリ定数を予め計算した後（H＝22n）、我々はC＝AE mod Nを計算する。
E(j)はべき指数Eの二進法におけるjビットを意味し、指数1のＭＳビットから始まり、指数qのＬＳビットで終わるとすると、奇数のべき指数で以下のように累算できる。
A* \ ▲Ｐ▼(A・H)N
A*は、A・2nに等しい。
B＝A*
j＝2〜q-1で（FOR j=2 TO q-1）
B \ ▲Ｐ▼(B・B)N
E(j)＝1ならば、B \ ▲Ｐ▼(B・A*)Nである
（もし E(j)=1ならば B \ ▲Ｐ▼(B・A*)N
FORループの終わり（ENDFOR）
B \ ▲Ｐ▼(B・A)N    E(0)＝1
Bは、2nを掛けられる最後の一時的な値であり、Aは元々のAである。
C＝B
もしC≧Nならば、C＝C-N
最後の反復の後、値BはAE mod Nに対する\であり、Cは最終の値である。
【０１８１】
明らかにするために、以下の例を利用することとする。
E＝1011 → E(1)＝1、E(2)＝0、E(3)＝1、E(4)＝1
q＝4でA1011 mod Nを見つけるために、
A*＝▲Ｐ▼(A・H)N＝A・I-2I＝A・I-1 mod N
B＝A*
j＝2〜qで（FOR j=2 to q）
B＝▲Ｐ▼(B・B)Nより、A2(I-1)2・I＝A2・I-1
E(2)＝0    B＝A2・I-1
j＝3       B＝▲Ｐ▼(B・B)N＝A2(I-1)2・I＝A4・I-1
E(3)＝1    B＝▲Ｐ▼(B・A*)N＝(A4・I-1)(A・I-1)・I＝A5・I-1
j＝4       B＝▲Ｐ▼(B・B)N＝A10・I-2・I＝A10・I-1
E(4)が奇数だったので、寄生要素I-1を取り除くために、最後の乗算はAによるものである。
B＝▲Ｐ▼(B・A)N＝A10・I-1・A・I＝A11
C＝B
【０１８２】
逆数プロセスによってHパラメータを計算する方法は、米国特許第５５１３１３３号明細書に記載されている。
【０１８３】
次に図３を参照するが、これは本発明がスマートカード及び他のセキュリティ装置に実装される方法を示すブロック略図である。
内部バス５００は、ＣＰＵ５０２、ＲＡＭ５０４、不揮発性メモリ５０６、制御アクセスＥＥＰＲＯＭ（controlled access EEPROM）５０８、モジュラー演算コプロセッサ５１０を含む部品と連結する。
ここに示すように、コプロセッサ５１０は、データレジスタ５１２及び制御レジスタ５１４を経由して、内部バス５００に接続される。
制御アクセスＥＥＰＲＯＭ５０８は、アドレス及びデータラッチ手段５１６、並びに、制御及びテストレジスタ５１８を経由して接続される。
例えば物理シーケンスランダム生成器（physical sequence random generator）５２０、セキュリティ論理（security logic）５２２、スマートカードインターフェース回路５２４、外部ポートインターフェース回路５２６のような多様な他の装置が夫々、バスに接続されてもよい。
【０１８４】
ＲＳＡデジタル署名を確認するような暗号プログラムが実行される場合に、べき剰余のようなモジュラー演算機能を必要とする。
暗号関数を呼び出す暗号プログラムは、好ましくはＣＰＵ５０２上で実行される。
【０１８５】
次に図４を参照するが、これはスマートカードにおいて利用するための本発明の実装の別のブロック略図である。
図３において示されるものと同じ部品は、同じ符号を与えられているが、本実施例の理解に必要なもの以外は、ここでは説明しない。
図４において、ＣＰＵ５０２は外部アキュムレーター７３５０を備えて示される。
演算コプロセッサからのデータをアンロードすることによりＳＭＡＰから記憶装置への直接データ転送を可能にする一方で、データ使用禁止スイッチ７３４０が、データバス５００からＣＰＵアキュムレーターを分離する。
【０１８６】
図５は、J0生成器と共に、図２，６，７のコプロセッサにて図示されるようなコプロセッサ６０７５内でのデータレジスタバンク（data register bank）６２０５の好ましい実施例のブロック略図であり、J0生成器は概して▲l▼ビットの一次ゼロ（primary zero）強制関数をコンパイルする（compile）。
【０１８７】
コプロセッサ６０７５は、前出の図にあるように、ＣＰＵと共にデータバスに接続される。
レジスタバンク６２０５は、Bレジスタ６０７０、Aレジスタ６１３０、Sレジスタ６１８０、Nレジスタ６２００からなる。
各々のレジスタの出力は、直列データスイッチ及び直列プロセス調節器（serial data switch and serial process conditioner）６０２０に接続し、次いで演算ユニット６２０６に接続され、そこでモジュラー演算を行う。
Nレジスタ６２００と演算ユニット６２０６との間には、J0生成器５５２が接続される。
【０１８８】
本実施例において、J0生成器は、上記したモジュラー演算機能において利用するために、▲l▼ビットの一次ゼロ強制関数をコンパイルする。
【０１８９】
図６は、図５の演算ユニットの内部ブロック略図である。
このユニットは、更なるＹ０Ｂ０シリアルバッファ（ｓｅｒｉａｌ ｂｕｆｆｅｒ）が第一段階でＹ０を受け入れ、第二段階で次の平方演算のためにモジュラー簡約されたＢ０を受け入れ、そこでＢがＮより長いことが明らかになるという点において、好ましくは高速化平方演算（ａｃｃｅｌｅｒａｔｅｄ ｓｑｕａｒｉｎｇ ｏｐｅｒａｔｉｏｎ）を支援する。
【０１９０】
次に図７Ａを参照するが、これは図６の演算ユニットの主計算部のブロック図である。
丸数字で表した数字は図７Ｂ，Ｄのシーケンス図に関するものである。
【０１９１】
次に図７Ｂを参照するが、これは平方演算の第一の反復（first iteration）へ向かい、第一の反復をも含むプロセスを経時的に示した事象タイミングをポインタで示す図である。
【０１９２】
次に図７Ｃを参照するが、これは平方シーケンス（squaring sequence）の第一の反復における次のモンゴメリ平方（Next Montgomery Squaring）を排除する事象シーケンスを示す図である。
丸数字は図７Ａ，Ｂ，Ｄを参照する。
【０１９３】
次に図７Ｄを参照するが、これは、平方演算の第一の反復の計算の出力のタイミングを示す事象タイミングをポインタで示す図である。
【０１９４】
次に図８Ａを参照するが、これは概してJ0の選択を示す一組のルックアップテーブルであり、N0の右側の文字のモジュラス2▲l▼での負の逆数（multiplicative inverse；乗法逆元）である。
N0は常に、GF(2q)についてモニックである（monic）か、又はGF(p)について奇数であるので、J0は常に存在する。
【０１９５】
図８Ａ及び８Ｂにおいて、我々はこのモジュラスの右側の文字をN0と呼ぶ。
我々は、N0jを、局所定義された（locally defined）N0文字のj番目のビットとする。
【０１９６】
図８Ｂは、4ビット若しくは2ビットのY0ゼロ強制関数文字のいずれかの設計回路図である。
強制関数への変数入力は、N0ビット（乗算の間一定である）、▲l▼、S0ビット、▲l▼乗数及び被乗数ビットの積の▲l▼の右側のビットAi0及びB0j、GF(2q)又はGF(p)においてどの関数が機能するかを決定する桁上げスイッチ▲Ｓ▼である。
A及びBビットは、▲○×▼乗算器及びS0に加算された▲○＋▼に入力される。
▲Ｓ▼＝0の場合、全ての桁上げができなくなる。
【０１９７】
本発明の内容を明らかにするために別の実施例の文脈において記載される本発明の多様な特徴が、単一の実施例との組合せにより提供され得ることは理解される。
逆に、説明の容易化のために単一の実施例の文脈において記載される本発明の多様な特徴が、別々に、若しくは適切なサブコンビネーションにおいても提供され得る。
【０１９８】
本発明が、本明細書に特に示され記載されたものに限定されないことは当業者ならば理解できるだろう。
むしろ、本発明の範囲は、本明細書に記載された多様な特徴の変更及び修正と同様に、その多様な特徴の組合せ及びサブコンビネーションをも含み、従来技術にない前述の記載を読めば、当業者ならば思いつくものである。
【０１９９】
特許請求の範囲において、符号や記号は上記で与えられた意味を有する。
【図面の簡単な説明】
【図１】  本発明の一実施例に係る装置のブロック図であり、四つの主要なレジスタが記載され、演算ユニットへのシリアルデータのフロー経路、及び図３のホストＣＰＵへの入出力データの経路が示される。
【図２】  図１からのデータを演算するように機能する演算ユニットの実施例のブロック図である。
【図３】  典型的にはスマートカード内にある完全なシングルチップのモノリシック暗号コンピュータ（monolithic cryptocomputer））の好ましい実施例のブロック略図である。
【図４】  データ使用禁止スイッチ（data disable switch）が演算ユニットからのデータのアンロードを速めるように作動する完全なシングルチップのモノリシック暗号コンピュータの好ましい実施例のブロック略図である。
【図５】  J0を生成するように作動するデータレジスタバンク（data register bank）のブロック略図である。
【図６】  Y0検知（Y0 sense；Y0センス）が第一段階の出力を０にする演算装置である演算ユニットのブロック略図である。
【図７Ａ】  図７Ｂ〜Ｄのタイミング図及びフロー図に係る丸数字を付したシーケンスアイコンを有する図６の主計算部のブロック図である。
【図７Ｂ】  平方演算の第一の反復（first iteration）へ向かい、第一の反復をも含むプロセスを経時的に示した事象タイミングをポインタで示す図である。
【図７Ｃ】  図７Ａ，Ｂ，Ｄに係る平方シーケンス（squaring sequence）のアイコン化されたポインタの第一の反復における「次のモンゴメリ平方（Next Montgomery Squaring）」を排除する詳細な事象シーケンスを示す図である。
【図７Ｄ】  図７Ａ〜Ｃに係る計算の出力のタイミングを示す図である。
【図８Ａ】  GF(2q)及びGF(p)におけるY0ベクトルの生成について記載した図であって、▲l▼＝2及び▲l▼＝4の場合で、右側のN0の負の逆数を決定する一組のルックアップテーブル（look up table；参照表）である。
【図８Ｂ】  GF(2q)及びGF(p)におけるY0ベクトルの生成について記載した図であって、▲l▼＝2及び▲l▼＝4の場合の両数値フィールドにおけるY0関数を生成する信号を記載するブロック略図である。
【図１】
0004955182.tif 000008
【図２】
0004955182.tif 000009
【図３】
0004955182.tif 000010
【図４】
0004955182.tif 000011
【図５】
0004955182.tif 000012
【図６】
0004955182.tif 000013
【図７Ａ】
0004955182.tif 000014
【図７Ｂ】
0004955182.tif 000015
【図７Ｃ】
0004955182.tif 000016
【図７Ｄ】
0004955182.tif 000017
【図８Ａ】
0004955182.tif 000018
【図８Ｂ】
0004955182.tif 000019