(57)【特許請求の範囲】
【請求項１】
モジュラ乗算を行なうためのコプロセッサであって、
ＢおよびＮの２進データストリームを生成するための手段、
データ値Ａを受けるための手段、および
前記ＢおよびＮの２進データストリームの成分データストリームおよび前記データ値Ａを順次処理してモジュロ縮小された乗算値（Ａ＊Ｂ）ｍｏｄ  Ｎを生成するよう結合された加算手段、減算手段および乗算手段
を具備し、前記ＢおよびＮの２進データストリームを生成するための手段は、
ＢおよびＮの値を保持するためのランダムアクセスメモリ、
前記ランダムアクセスメモリから並列データを受けかつそこから前記２進データストリームＢおよびＮを生成するための並列−直列インタフェース手段、
前記ＢおよびＮの２進データストリームの各々を成分データストリームへと分割するための分割手段、および
前記ＢおよびＮの値の順次的な部分を保持する前記ランダムアクセスメモリの複数のロケーションを順次参照するための自動インデクス・ランダムアクセスメモリポインタ
を具備する、モジュラ乗算を行なうためのコプロセッサ。
【請求項２】
前記コプロセッサは前記ＢおよびＮの値を保持するランダムアクセスメモリのロケーションの数に依存する数の処理の反復を行なうよう構成されている、請求項１に記載のコプロセッサ。
【請求項３】
さらに、
指数値を保持するためのランダムアクセスメモリ、
前記ランダムアクセスメモリから並列に前記指数値を受けかつそこから２進データストリームＥを生成するための並列−直列インタフェース手段、および
前記２進データストリームＥを受けかつその各々のビットの値に応じて２乗または乗算操作を開始するための制御手段、
を備えた累乗手段を具備する、請求項１に記載のコプロセッサ。
【請求項４】
前記成分データストリームは、前記２進データストリームのそれぞれ一つおきのビットを含む成分データストリームであって、
前記加算手段、減算手段および乗算手段は、前記成分データストリームを並列に処理するよう配置されている
請求項１に記載のコプロセッサ。
【発明の詳細な説明】
発明の分野
この発明は一般的にはモジュラ乗算（ｍｏｄｕｌａｒ  ｍｕｌｔｉｐｌｉｃａｔｉｏｎ）を行なうためのコプロセッサ（ｃｏ−ｐｒｏｃｅｓｓｏｒ）に関し、かつ特定的には、排他的ではないが、モンゴメリ・リダクション・アルゴリズム（Ｍｏｎｔｇｏｍｅｒｙ  Ｒｅｄｕｃｔｉｏｎ  Ａｌｇｏｒｉｔｈｍ）を実施するためのコプロセッサに関する。
発明の背景
モジュラ乗算はＲＳＡ暗号のような暗号方法を実施する上で広く使用されている。
モンゴメリ・アルゴリズムはモジュラ乗算を行なうための最も効率的な技術の１つである。これを用いることは計算時間を最小にするために高い性能が要求される場合に特に効率的である。
モンゴメリの証明（Ｍｏｎｔｇｏｍｅｒｙ  ｐｒｏｏｆ）は付属書類１に与えられており、かつモンゴメリ・リダクション・アルゴリズムは以下に概略を説明する。
〈モンゴメリ・アルゴリズム〉
Ａ・Ｂに関してＰ演算子を規定するために、以下に概略を示すプロセスに従う。
（１）Ｘ＝Ａ・Ｂ＋Ｓ｛Ｓは始めはゼロ｝
（２）Ｙ＝（Ｘ・Ｊ）ｍｏｄ２ｎ（この場合、Ｊは予め計算された定数である）
（３）Ｚ＝Ｘ＋Ｙ・Ｎ
（４）Ｓ＝Ｚ／２ｎ
（５）Ｐ＝Ｓ（ｍｏｄＮ）（もしＳ≧Ｎであれば、ＮがＳから減算される）
したがって、Ｐ＝Ｐ（Ａ・Ｂ）Ｎ（モンゴメリフィールドの数における結果）
スマートカードが取引の間の高いレベルの保安性を保証する手段として使用される財務または金融の用途においては、パブリックキーまたは公開鍵（Ｐｕｂｌｉｃ  Ｋｅｙ）暗号法が益々普及してきている。パブリックキー暗号法は伝統的な対称（ｓｙｍｍｅｔｒｉｃ）あるいはプライベイトキーまたは秘密鍵（ｐｒｉｖａｔｅ  ｋｅｙ）方法よりも高いレベルの保護を提供するが、最近まで実施するのが高価であった。技術の進歩は今やそのような方法の実施をコスト効率のよいものにしている。ＲＳＡパブリックキー能力はスマートカードのマイクロコントローラ内に設計されており、該マイクロコントローラはまた各々５１２ビットの長さのオペランドに対してモジュラ乗算を行なうよう特に設計されたオンチップのコプロセッサを含む。前記コプロセッサはＲＯＭ内にまたはＥＥＰＲＯＭ内に記憶されたプログラムによってソフトウェアの制御の下に前記マイクロコントローラのＣＰＵによって直接ドライブされる。除算プロセスなしにモジュラ縮小またはモジュラ・リダクションのためのモンゴメリ・アルゴリズムを実施するそのようなコプロセッサはヨーロッパ特許公報ＥＰ−０６０１９０７−Ａから知られている。
後に詳細に説明するように、そのような知られたコプロセッサは数多くの不都合を有する。
【図面の簡単な説明】
モンゴメリ・リダクション・アルゴリズムを実施するためにモジュラ乗算を行なうための１つのコプロセッサにつき、実例のみにより、添付の図面を参照して説明する。添付の図面においては、
図１は、モンゴメリ・リダクション・アルゴリズムを実施するためにモジュラ乗算を行なうための知られた、従来技術のコプロセッサのブロック回路図を示す。
図２は、モンゴメリ・リダクション・アルゴリズムを実施するためにモジュラ乗算を行なうための新規な、改善されたコプロセッサのブロック回路図を示す。
図３は、図２のコプロセッサにおいて使用されるビット対加算器段のブロック回路図を示す。
図４は、図２のコプロセッサにおいて使用される乗算器および関連する回路のブロック回路図を示す。
図５Ａは、並列−直列インタフェースを使用するランダムアクセスメモリから構成要素の直列ビットストリームを発生するために図２のコプロセッサにおいて使用される構成のブロック回路図を示す。
図５Ｂは、図２のコプロセッサにおいて使用されるデュアルポートのレジスタ構成のブロック回路図を示す。
図６は、自動インデクスポインタ（ａｕｔｏ−ｉｎｄｅｘｉｎｇ  ｐｏｉｎｔｅｒ）を使用する直接累乗法のための図２のコプロセッサにおいて使用される構成のブロック回路図を示す。
図７は、中国の剰余定理（Ｃｈｉｎｅｓｅ  Ｒｅｍａｉｎｄｅｒ  Ｔｈｅｏｒｅｍ）を実施する上で、図２のコプロセッサの使用を説明するブロック回路図を示す。
好ましい実施形態の詳細な説明
〈知られたコプロセッサの動作〉
図１は、フルモード５１２ビットおよびハーフモード２５６ビットのオペランドの双方に対するモンゴメリ・アルゴリズムを行なうためのコプロセッサの知られた、従来技術のハードウェア構成の図を示す。
この図は基本的に３つの５１２ビットのクロックド・シフトレジスタおよび２つの並列−直列乗算器を具備する実行ユニットを示す。
前記Ｂの値およびモジュラス（ｍｏｄｕｌｕｓ）ＮはそれぞれＢおよびＮレジスタへと予めロードされる。レジスタＳは５１２クロックサイクルの各々のローテーション（ｒｏｔａｔｉｏｎ）の後に中間結果を記憶するために使用される。始めに、このレジスタはクリアされることになる。予め計算されたモンゴメリ定数、Ｊ０、は３２ビットのシフトレジスタを介してコプロセッサへとロードされかつラッチ２においてラッチされる。
Ａの値は一度に４バイト（３２ビット）でマルチプレクサＭ２＿１；２を介してシフトされかつラッチ１にラッチされる。Ｂレジスタにおける値は一度に１ビットずつ第１の並列−直列乗算器ＭＬ１へと直列的にクロッキングされる。この乗算器の出力は、ノードｎＡにおいて、値Ａｉ＊Ｂである。この値Ａｉ＊Ｂは次に加算器Ａｄ１においてレジスタＳに記憶された中間値に加算されて値Ｘ＝Ａｉ＊Ｂ＋Ｓを生成する。
最初の３２クロックサイクルに対しては、Ｘの値の最初の３２ビットの部分はマルチプレクサＭ３＿１；４を介して第２の並列−直列乗算器ＭＬ２へと供給され、そこで値Ｊ０によって乗算される。ノードｎＤにおけるＭＬ２からの出力は値Ｙ０＝Ａ＊Ｂ＊Ｊ０である。Ｙ０は３２ビットのシフトレジスタを介してフィードバックされかつマルチプレクサＭを介してラッチ２にラッチされる。
最初の３２クロックサイクルの後に、マルチプレクサＭ３＿１；４は切り替わりかつモジュラスＮを乗算器ＭＬ２へと供給し、そこでＮはＹ０によって乗算されて値Ｙ０＊Ｎを生成する。この値は次に、次の５４４クロックサイクルにわたり、加算器Ａｄ２においてＸと加算されて値Ｚ＝Ｘ＋Ｙ０＊Ｎを生成する。この計算の最後の３２ビットはゼロでありかつ５１２の最上位ビットのみがＳレジスタへとセーブし戻される。これは１つの全ローテーションを完了させる。
３２ビットの乗算を使用して、１６のローテーションが全５１２ビット×５１２ビットの乗算を行なうために必要とされ、これによって次式が求められる。
Ｐ＝Ａ・Ｂ・Ｉ（ｍｏｄＮ）＝Ｐ（Ａ・Ｂ）Ｎ
（モンゴメリ・フィールドの数の結果）
必要とされる結果Ｐを回復するためにＰはＨ（予め計算されたモンゴメリ定数）によって乗算されて次式で示される実数のフィールドの結果を与える。
Ｒ＝Ａ・Ｂ（ｍｏｄＮ）＝Ｐ（Ｐ・Ｈ）Ｎ
〈ＲＳＡパブリックキー暗号法〉
ＲＳＡパブリックキーまたは公開鍵暗号システムを実施するためには形式Ｍｄ（ｍｏｄＮ）の値を計算することを必要とし、この場合指数ｄはｎビットまでの長さとすることができる（ｎはＮにおける２進デジットの数）。これは順次取り入れられる前記指数値ｄの各ビットの値に応じて反復された２乗操作または演算および乗算操作または演算を行なうことによって達成される。５１２ビットの指数に対しては、ほぼ７６８のモジュラ操作または演算が必要とされる。これは２０ＭＨｚのクロックレートで５１２ビットのＲＳＡ署名（ｓｉｇｎａｔｕｒｅ）に対して以下のような性能計算につながる。
ｔｒｓａ＝（５４４＊１６＊５０＊７６８）＊１０−６ｍＳ
ｔｒｓａ＝３３４．２３ｍＳ
〈知られたコプロセッサ・アーキテクチャの不都合〉
図１に示された知られたコプロセッサ・アーキテクチャはマイクロコントローラと共に単一のシリコンチップ上に集積される。該コプロセッサは直接ＲＯＭまたはＥＥＰＲＯＭに記憶されたプログラムによってソフトウェアの制御の下でマイクロコントローラのＣＰＵによってドライブされる。そのような知られたコプロセッサの構成は数多くの欠点を有する。
＊コプロセッサの性能はソフトウェアドライバとの相互作用により大幅に制限される。
＊ＣＰＵは計算の間にＡｉ値を提供するＣＰＵに対するコプロセッサの依存性によって制限される。
＊固定長さのクロックド・シフトレジスタはコプロセッサを柔軟性のないものにする。固定された５１２または２５６ビットのキー長さより小さいビット長さを効率的に処理することは可能ではない。さらに、ローテーションごとに５４４または２８８クロックサイクルを必要とする。
＊コプロセッサは５１２ビットの固定されたレジスタ長さを有するから、５１２ビットより大きなキー長さを取り扱うことは手に負えないかまたは非実用的になる。これは５１２ビットより大きなキー長さに対して高いＣＰＵオーバヘッドにつながる（以下の表１のタイミングを参照）。
＊コプロセッサは固定長さの、クロックド・シフトレジスタを使用するから、データがコプロセッサに対しタイムリーな様式でＲＡＭからロードされかつアンロードされなければならない。これはＣＰＵのオーバヘッドを伴ないかつＣＰＵがコプロセッサに充分高速で供給できないいくつかの場合にデータの窮乏（ｄａｔａ  ｓｔａｒｖａｔｉｏｎ）につながり得る。これは特にコプロセッサがハーフモードで動作しておりかつ中国の剰余定理（Ｃｈｉｎｅｓｅ  Ｒｅｍａｉｎｄｅｒ  Ｔｈｅｏｒｅｍ：ＣＲＴ）を使用して計算を行なう場合に当てはまる。
＊３つの５１２ビットのシフトレジスタをクロッキングすることは高い電力消費につながり、かつクロック周波数を上昇させることにより計算機的な性能の増大が試みられる場合に特にクロッキング機構に関して困難な設計上の問題につながる。
＊モジュラ累乗（ｍｏｄｕｌａｒ  ｅｘｐｏｎｅｎｔｉａｔｉｏｎ）が必要とされる場合のＲＳＡパブリックキー署名／真正証明機構において、現在のアーキテクチャは累乗プロセスを制御するためにＣＰＵの直接的な介入を必要とする。
＊前記コプロセッサは、２進デジットがクロック周期ごとに一度に１ビットずつ１ビット加算器、減算器および３２ビット×１ビット並列−直列乗算器を通して直列的にシフトされる点で単一の直列ループ設計である。
＊ＲＳＡ署名（ＲＳＡ  ｓｉｇｎａｔｕｒｅ）を発生するために、もしＮの素因数（ｐｒｉｍｅ  ｆａｃｔｏｒｓ）（ｐおよびｑ）が知られておれば、計算時間を実質的にスピードアップするために中国の剰余定理（ＣＲＴ）を使用することが可能である。付属書類２は中国の剰余定理を説明しかつそのＲＳＡへの適用を詳細に示している。現在のアーキテクチャは単にモジュラ乗算でありかつＣＲＴの容易な実施を可能にしない。結果として、実質的なＣＰＵのオーバヘッドがＣＲＴを使用する利点を否定する傾向にある。
中国の剰余定理を使用した異なる長さの署名を処理する知られたコプロセッサの構成に対する典型的な性能時間（ＣＰＵ時間、コプロセッサ時間および合計時間）は次の通りである。
【表１】
0004612918.tif 000002
〈新しい、改善されたコプロセッサ〉
次に図２を参照すると、示された新しいコプロセッサは、上に述べた、知られたコプロセッサの不都合を克服するために改善された性能および柔軟性を提供する。改善を与える新しいコプロセッサの特徴は以下に詳細に説明する（説明は典型的には都合上５１２ビットの計算に言及する）。
〈ビット対計算〉
新しいコプロセッサはビット対（ｂｉｔ−ｐａｉｒ）乗算、加算および減算を使用する。図１のコプロセッサにおけるような単一の直列ループクロッキング機構を使用する代わりに、新しい改善されたコプロセッサにおいては直列ビットストリームがクロック周期ごとに一度に２ビット調べられる。
以下に詳細に説明するように、各々の直列ビットストリームは２つの（奇数および偶数の）成分のビットストリームへと分割され（発出する（ｏｒｉｇｉｎａｔｉｎｇ）直列ビットストリームからのビットがそれぞれ交互に２つの成分の直列ビットストリームへと供給され）かつ前記２つの成分のビットストリームは並列に処理され、１ビットが前記成分のビットストリームの各々によって同時に提供されて計算のためのビット対を形成する。これは加算器、減算器および並列−直列乗算器が一度に２ビットを評価しまたは値を求めかつ結果を計算することを意味する。アーキテクチャのこの変化は直ちに同じクロック周波数に対して性能を倍化する。直接の利点は計算機的なスループットが対応する電力消費の倍化なしにほぼ２倍にされることである。
次に図３をも参照すると（新しいコプロセッサのビット対乗算器、加算器および減算器の基礎を形成するビット対加算器３００を示している）、新しいコプロセッサのビット対乗算、加算および減算は次のように行なわれる。
始めに、加算器の各要素がゼロにセットされる。
奇数（ｏｄｄ）データストリームからのビットＡＯおよびＢＯがキャリーセイブ・ハーフアダー（ｃａｒｒｙ−ｓａｖｅ  ｈａｌｆ−ａｄｄｅｒ）３１０において加算されてそれぞれ奇数合計および奇数キャリー出力ＳＯおよびＣＯを生成する。
偶数（ｅｖｅｎ）データストリームからのビットＡＥおよびＢＥがキャリーセイブ・フルアダー（ｃａｒｒｙ−ｓａｖｅ  ｆｕｌｌ−ａｄｄｅｒ）３２０に入力されてそれぞれ偶数合計および偶数キャリー出力ＳＥおよびＣＥを生成する。
前記信号ＳＯおよびＣＯは論理３３０において信号ＣＥと論理的に結合されて信号ＣＥ・ＳＯ＋＊ＣＯを生成し、この信号はフルアダーに入力される。なお、ここで記号＊は論理的反転を示す。
前記信号ＳＯおよびＣＥは論理３４０においてＸＯＲ操作されて前記ビット対加算の奇数ビット結果を生成し、かつ前記信号ＳＥは前記ビット対加算の偶数ビット結果を形成する。
前記ビット対減算器は上で述べたビット対加算器３００と同じ回路を使用するが、例外として減算器として使用するために初期値ＣＥおよびＳＯは論理“１”にセットされかつ減算されるべきデータストリームはハーフアダー３１０およびフルアダー３２０にそれぞれ入力される前に反転される。この減算はしたがって２の補数加算によって達成される。
前記ビット対乗算器（これらは２×３２ビット乗算器である）は前に説明したようにビット対加算器３００を使用して形成される。
直列データストリームの奇数および偶数ビットが乗算器に提供されると、次のようにして加算によって乗算処理が進行する。
＊もし２つの入力直列データビットが“００”であれば、ゼロの値が加算される。
＊もし２つの入力直列データビットが“０１”であれば、３２ビットの値が加算される。
＊もし２つの入力直列データビットが“１０”であれば、３２ビットの値が１ビットだけ左にシフトされ、次に加算される。
＊もし２つの入力直列データビットが“１１”であれば、前記３２ビットの値の３倍の予め計算された値が加算される。
〈改善されたＹ０計算〉
上に述べたように、新しいコプロセッサは性能を強化するためにビット対乗算機構を使用する。図１に示される知られたアーキテクチャにおいては、これは乗算器ＭＵＬ２に供給するＪ０およびＹ０の経路の双方に付加的な論理および３ｘ機能を加えることにより、Ｙ０制御の大幅な複雑化を伴なう。この複雑化は図２に示すようにして避けられる。
図１を参照すると、知られたアーキテクチャにおいては、ローテーションの始めに、最初の３２クロックサイクルの間に、Ｊ０がＸ＝Ａ＊Ｂ＋Ｓにより乗算される。結果Ｙ０はこれらの始めの３２クロックサイクルの間にフィードバックされかつラッチ２にラッチされ、その後Ｙ０がＭＵＬ２に供給されかつ引き続く５１２のクロックサイクルにわたり積Ｙ０＊Ｎを発生するために使用される。
次に図２および図４を参照すると、新しいコプロセッサでは、Ｊ０は始めにラッチＭＬ２へとロードされる。レジスタＳＲはセットされているＳＲ＿ビット１６（ＳＲ＿ｂｉｔ１６）を除きクリアされる。もし論理“１”であればＳＲ＿ビットｋの出力はデータがＭＳＢからラッチＭＬ２を通りｋ番目のビット対へとクロッキングできるようにする。いずれの与えられたローテーションにおける最初のクロックサイクルの後は、ＭＬ２のビット３１および３０はもはや必要とされずかつＹ０の最初の２ビットはフィードバックしかつＭＬ２＿ビット３１およびＭＬ２＿ビット３０へとラッチすることができる。最初のクロックサイクルの間に、ＳＲ＿ビット１６における論理“１”はＳＲ＿ビット１５へとクロッキングされ、その時点でＭＬ２＿ビット３１およびＭＬ２＿ビット３０はイネーブルされる。第２のクロックサイクルに際して、ＳＲ＿ビット１５における論理“１”はＳＲ＿ビット１４へとシフトされる。ＳＲ＿ビット１５は論理“１”によって再ロードまたはリロードされかつ今やＭＬ２＿ビット３１、ＭＬ２＿ビット３０、ＭＬ２＿２９およびＭＬ２＿ビット２８はイネーブルされる。ＭＵＬ２からの次の２つの出力ビットはＭＬ２＿ビット３１およびＭＬ２＿ビット３０へとクロッキングされる。前にＭＬ２＿ビット３１およびＭＬ２＿ビット３０にあったビットはそれぞれＭＬ２＿ビット２９およびＭＬ２＿ビット２８へとシフトされる。このプロセスが１６クロックサイクルの後に、Ｙ０の３２ビットがフィードバックされかつＭＬ２へとロードされるまで反復する。引き続く２５６クロックサイクルに際し、Ｙ０はモジュラスＮ（ｍｏｄｕｌｕｓ  Ｎ）によって乗算される。
次のローテーションに対しては、Ｊ０はＭＬ２へと再ロードされ、ＳＲ＿ビット１５〜ＳＲ＿ビット０はクリアされかつＳＲ＿ビット１６はセットされかつ処理は反復される。
この構成はそうでない場合はビット対乗算機構の直接的な構成に対して必要とされる１つの３４ビットシフトレジスタ、１つの３２ビットシフトレジスタ、１つの３４ビットマルチプレクサおよび１つの３２ビットマルチプレクサの必要性を除去し、かつ代わりに１つの１７ビットのシフトレジスタを使用する。
〈レジスタの置き換え〉
上で述べたように、知られたアーキテクチャは３つの５１２ビットのクロックド直列シフトレジスタ（Ｂ，ＳおよびＮレジスタ）を使用する。データ（すなわち、値Ｂおよびモジュラス値Ｎ）はメモリからバスインタフェースを介してＣＰＵによってそれぞれＢおよびＮレジスタへとロードされる。ＣＰＵはＡの値を、一度に４バイト、コプロセッサに供給する。ＣＰＵはその後いったん計算が完了すれば結果をＢまたはＳレジスタからメモリへとロードし戻す。この機構は電力を消費しかつＣＰＵのオーバヘッドを加える。
次に図５Ａを参照すると、新しいコプロセッサにおいては、前の固定された長さの、クロックド・シフトレジスタは今や、ＲＡＭとモジュラ乗算器との間に配置された、簡単な８ビットの並列−直列インタフェース５１０、ならびに自動ＲＡＭポインタメカニズムを利用することにより置き換えられている（図６を参照）。この場合、各々の交互のビットが４ビットのクロックド・シフトレジスタへとロードされる。２つのそのような４ビットのクロックド直列シフトレジスタ５２０および５３０があり奇数および偶数成分の直列ビットストリームを形成する。これらの２つの成分の直列ビットストリームは次にモジュラ乗算器へと供給される。
図５Ｂは、データをＲＡＭに書き戻すための構成を示す。ＲＡＭは両側（ｄｏｕｂｌｅ  ｓｉｄｅｄ）またはデュアルポート（ｄｕａｌ  ｐｏｒｔ）配列で構成され、この場合右および左側のアレイは中央のローデコーダを共有する。この配列により、与えられたデコードされた行またはローに対して、同時にデータが右側のアレイに書き戻されている間にデータを左側のアレイから読み出すことができる。この機構の利点はＲＡＭのデータがロードおよびストア命令に基づきＣＰＵによって決してレジスタにロードされず、データは単にコプロセッサによって必要とされる場合に自動的に直列インタフェースへとダウンロードされることである。各々の５１２ビットのクロックド・シフトレジスタが８ビットのクロックド・シフトレジスタのインタフェース（図５Ａ）によって置き換えられるという事実は電力消費を大幅に低減する。
図６に示すメカニズムを使用して、自動ＲＡＭポインタおよびダウンロードメカニズム６００はＣＰＵの介入の必要性を除去する。ＲＡＭ６１０におけるデータはＲＡＭポインタ６２０によって参照されかつ直列インタフェース６３０へと転送されかつクロック出力される。ＲＡＭポインタ６２０は自動的に次のデータ転送のための容易さを増大する。この機構はさらにそれが多様なキー長さを取り扱う上でより大きな柔軟性を可能にする点で有利である。コプロセッサ６４０はローテーションごとに３２ビット×５１２ビットの乗算を行なう。ローテーションの数は前記キー長さによって決定される。改善された機構はキー長さが３２ビットの増分で変えられるようにする。いったんキー長さが選択されると、計算のために必要とされるローテーションの数が３２ビットの倍数として自動的に決定される（例えば、３８４／３２＝１２ローテーション）。
図２は、改善されたコプロセッサのための概略的な構成を示す。全てのデータパスは２ビット幅であり（乗算器Ｍｕｌ１およびＭｕｌ２への３２ビット入力のような、より広いビット幅が明らかに必要とされる場合を除き）ビット対演算または操作を可能にする。前記中間のＳ値およびＢ値はデュアルポートＲＡＭにこれらの記憶領域が計算の種々の段階でオーバライトされる際に記憶される。
〈直接の累乗〉
知られたコプロセッサにおいては、ＲＳＡパブリックキーシステムのために必要とされる累乗（ｅｘｐｏｎｅｎｔｉａｔｉｏｎ）演算を行なうために、ＣＰＵは各々の指数ビット（ｅｘｐｏｎｅｎｔ  ｂｉｔ）を順次調べることによりソフトウェアの制御のもとに累乗プロセスを調節または規制しなければならない。現在のビット（ｃｕｒｒｅｎｔ  ｂｉｔ）はモジュラ平方（ｍｏｄｕｌａｒ  ｓｑｕａｒｅ）あるいはモジュラ乗算（ｍｏｄｕｌａｒ  ｍｕｌｔｉｐｌｙ）を行なうかを決定するために使用される。前記指数値はメモリに記憶されかつ必要に応じて一度に１バイトＣＰＵによって読み出される。前記現在のビット値は命令シーケンスによって決定される。コプロセッサがＣＰＵが前記Ａの値をモジュラ演算の間に提供することを要求する場合、指数ビットの決定はモジュラ演算の間でのみ生じ得る。その場合にのみＣＰＵはコプロセッサの動作モードを制御できる。
図６は、前に述べたのと同様の自動ＲＡＭポインティングメカニズムを使用することによって、コプロセッサ６４０が今や累乗プロセスの間に自動的に制御されることを示している。各々のモジュラ演算の終りに（平方または乗算）、信号ＥＯＰがコプロセッサによって発生される。これは制御論理６５０がカウンタレジスタ６２０におけるポインタを次の指数ビットへとシフトするようにさせる。このようにして、次のモジュラ演算はＣＰＵの介入なしに選択されかつ直ちに開始できる。もし指数ビットが論理“１”であれば、２つのモジュラ演算（平方とそれに続く乗算）が行なわれる。
中国の剰余定理を使用する異なる長さの署名（ｓｉｇｎａｔｕｒｅ）を処理する新しいコプロセッサのための典型的な性能時間（ＣＰＵ時間、コプロセッサ時間および合計時間）は次の通りである。
【表２】
0004612918.tif 000003
新しいコプロセッサ構成によって提供される改善は表２の時間を前の表１に与えられた知られたプロセッサに対するものと比較することから容易に明らかである。
〈付加的な算術演算〉
新しいコプロセッサの構成において必要とされるＣＰＵオーバヘッドをさらに低減するため、２つの付加的な演算操作がコプロセッサに加えられ、すなわち加算および減算機能である。
〈加算〉
新しいコプロセッサにおいては、Ｂ−ＲＡＭおよびＳ−ＲＡＭに記憶された値は一緒に加算できる。図２を参照すると、マルチプレクサＭｘ２，Ｍｘ６は論理“０”の出力を与えるようセットされる。これはＳｕｂ１からの出力が入力、ｂｓｔｒ、に等しいことを意味する。同様に、減算器Ｓｕｂ２に対しては、出力は入力、ｓｓｔｒ、に等しくなる。Ｂ−ＲＡＭ（ｂｓｔｒ）およびＳ−ＲＡＭ（ｓｓｔｒ）からのデータは直列的に減算器Ｓｕｂ１およびＳｕｂ２を通って供給される。Ｓｕｂ１（ｂｓｔｒ）からの出力はマルチプレクサＭｘ３を介して加算器Ａｄｄ１に供給され、そこでＳｕｂ２（ｓｓｔｒ）からの出力と加算される。結果はマルチプレクサＭｘ７およびＭｘ８を介してＢ−ＲＡＭに戻される。
〈減算〉
Ｓ−ＲＡＭまたはＮ−ＲＡＭに記憶された値は任意選択的にＢ−ＲＡＭに記憶された値から減算できる。図２を参照すると、いずれの場合にも、Ｓ−ＲＡＭまたはＮ−ＲＡＭからのデータは直列的にマルチプレクサＭｘ２を介して減算器Ｓｕｂ１へと供給され、そこでＢ−ＲＡＭに記憶された値から減算される。結果はマルチプレクサＭｘ７およびＭｘ８を介してＳ−ＲＡＭまたはＢ−ＲＡＭへフィードバックされる。
これらの付加的な機能を含めることは、以下に概略を説明するように、中国の剰余定理を使用したモジュラ累乗の効率的な実施を可能にする。
〈ＣＲＴエンジン〉
もしモジュラスＮの素因数（ｐｒｉｍｅ  ｆａｃｔｏｒｓ）が知られていれば、ＣＲＴは与えられたＲＳＡシグネチャまたは署名プロセスのための計算時間を低減するのに使用できる。中国の剰余定理およびＲＳＡ署名を発生する上でのその応用は付属書類２に与えられている。知られたコプロセッサアーキテクチャによれば、ＣＲＴ技術を使用する上で依然として大きなＣＰＵオーバヘッドがある。これはコプロセッサが始めに使用されてｒｐ＝Ｍｐｒ（ｍｏｄｐ）および（ｒｑ＝Ｍｑｓ（ｍｏｄｑ）を評価しまたは求めるためである。最終的な結果は次にＣＰＵによってソフトウェアの制御のもとで求められる。すぐ上に示された処理時間（表２）は性能の低下に対してＣＰＵが大きな一因であることを示している。
前に述べたように、新しいコプロセッサの累乗機能のために加算および減算の演算機能を含めることはコプロセッサが、このＣＰＵオーバヘッドが劇的に低減できるようにＣＲＴエンジンとして作用できるようにする。図７はどのようにしてこれが実施されるかを示す。
もしＮの素因数が知られていれば、モンゴメリ方法およびＣＲＴを使用してＲ＝Ｍｄ（ｍｏｄＮ）を計算するために、以下の予め計算された値、ｕ，Ｊｐ，Ｊｑ，Ｈｐ，Ｈｑ，Ｒ＝ｄ  ｍｏｄ（ｐ−１）およびｓ＝ｄ  ｍｏｄ（ｑ−１）が利用される。スマートカード装置におけるこれらの値は典型的にはＥＥＰＲＯＭに記憶される。その後の計算のシーケンスは次の通りである。
Ｍｐ＝Ｍ（ｍｏｄｐ）  （１）
Ｍｑ＝Ｍ（ｍｏｄｑ）  （２）
ｒｐ＝Ｍｐｒ（ｍｏｄｐ）  （３）
ｒｑ＝Ｍｑｓ（ｍｏｄｑ）  （４）
ａ＝ｒｑ（ｍｏｄｐ）  （５）
ｂ＝ｒｐ−ａ  （６）
ｃ＝ｂ＊ｕ（ｍｏｄｐ）  （７）
ｑ＝ｃ＊ｑ  （８）
Ｒ＝ｇ＋ｒｑ  （９）
上で述べた新しいコプロセッサのアーキテクチャは今やＣＲＴ方法を使用して要求される結果を効率的に計算することができるようにする必要な機能の全てを有している。新しいコプロセッサがこの計算を達成できるようにするために事象を適切に順序づけまたは順番に並べる（ｓｅｑｕｅｎｃｉｎｇ）ことについて以下に説明する。シーケンスの制御はＣＰＵを使用してソフトウェア制御のもとで行なうことができる。この場合、ＣＰＵのオーバヘッドは最小になり、そうでない場合は計算のシーケンスの制御は専用のハードウェアの状態マシンを使用して行なうことができる。
計算の上記シーケンスにおいて、操作（１），（２），（３），（４），（５）および（７）は全てモンゴメリ・アルゴリズムを使用しかつコプロセッサをモジュラ乗算器として使用するモジュラ操作である。新しいコプロセッサのメモリのポインティングメカニズムは今やこれらの中間結果がＣＲＴ計算の引き続く段階のための準備においてメモリ内の予め指定されたロケーションに戻すことができるようにする。
段階（８）は通常の乗算機能を使用し、一方段階（６）および（９）は今や新しいコプロセッサ内で利用可能な演算操作、すなわち、加算および減算を使用する。
〈ＣＲＴエンジンの動作〉
次に図７を参照する。以下の説明のために、Ａ−ＲＡＭ領域、Ｂ−ＲＡＭ領域、Ｎ−ＲＡＭおよびＳ−ＲＡＭ領域はそれぞれ領域ＡＬおよびＡＨ，ＢＬおよびＢＨ，ＮＬおよびＮＨ，ＳＬおよびＳＨへと分割される。
メッセージＭが始めにＢ−ＲＡＭに記憶されかつ素因数ｐおよびｑがそれぞれメモリのＮ−ＲＡＭ領域のＮＬおよびＮＨに記憶される。メッセージＭは次に１  ｍｏｄｕｌｏ  ｐによって乗算されて結果Ｍｐを与える。この値は始めにＳ−ＲＡＭ領域、ＳＬ、に戻されかつ次にＡ−ＲＡＭ領域ＡＬに転送される。同様にして、値Ｍｑが計算されかつＳ−ＲＡＭ領域ＳＨに戻され、その後それはＡ−ＲＡＭ領域ＡＨに転送される。
ＭｐおよびＭｑが次に次の累乗プロセスの準備においてそれぞれＢ−ＲＡＭ領域ＢＬおよびＢＨへとロードされる。
次に新しく導入された累乗機能を使用してＭｐｒ（ｍｏｄｐ）およびＭｑｓ（ｍｏｄｑ）の２つのモジュラ累乗が行なわれ、かつ結果ｒｐおよびｒｑがＢＬおよびＢＨに記憶され、それぞれ値ＭｐおよびＭｑをオーバライトする。
次に、値ａ＝ｒｑ（ｍｏｄｐ）が計算される。これはｒｑを１  ｍｏｄｕｌｏ  ｐ倍で乗算することにより行なわれる。結果は便宜的にＳＨに記憶される。
次に、値ｂ＝（ｒｐ−ａ）が計算される。これは新しく導入された減算機能にたよることによって実行されかつ結果はＢＬに戻され、ｒｐをオーバライトする。
次に、ｃ＝ｂ＊ｕ（ｍｏｄｐ）が計算される。これはモジュラ乗算であり結果はＢＬに戻され、最終のローテーションに際して値ｂをオーバライトする。次に、積ｇ＝ｃ＊ｑが通常の乗算機能にたよることによって形成される。結果はＳ−ＲＡＭ領域、Ｓ、に記憶される。
最後に、結果Ｒ＝ｇ＋ｒｑが新しく導入された加算機能を適用することにより計算される。この値はＳ−ＲＡＭまたはＢ−ＲＡＭに戻される。
上で述べた新しいコプロセッサに対する種々の変更は当業者に明らかであり、かつ以下の請求の範囲に記載された発明の範囲から離れることなく行なうことができることが理解されるであろう。
付属書類１
〈モンゴメリ・モジュラ・リダクション技術〉
モンゴメリ関数Ｐ（Ａ・Ｂ）ＮはＰフィールドまたは領域への積Ａ・Ｂの乗算モジュロＮを行なう。Ｐフィールドから通常のモジュラフィールドへの読出しまたは回復はＰ（Ａ・Ｂ）Ｎの結果および予め計算された定数Ｈに関してＰを定めることによって行なわれる。
したがって、もしＰ＝＝Ｐ（Ａ・Ｂ）Ｎであれば、Ｐ（Ｐ・Ｈ）Ｎ＝＝Ａ・Ｂ（ｍｏｄＮ）である。
〈証明〉
我々はＲ＝Ａ・Ｂ（ｍｏｄＮ）を計算することを求める。
始めに次のようなＱを見つける。
Ｐ２ｎ＝Ａ・Ｐ＋Ｑ・Ｎ（この場合Ｎは奇数）  （１）
ここで、
Ｉ・２ｎ＝＝１（ｍｏｄＮ）（かつ、ｎはＮのビット長さである）  （２）
式（１）をＩにより乗算して次式を得る。
Ｐ・Ｉ・２ｎ＝Ａ・Ｂ・Ｉ＋Ｑ・Ｉ・Ｎ  （３）
式（３）の左側を考慮すると、式（２）から、
Ｐ・Ｉ・２ｎ＝＝Ｐ（ｍｏｄＮ）  （４）
式（３）の右側を考慮すると、式（４）から、
Ｐ＝＝｛Ａ・Ｂ・Ｉ＋Ｑ・Ｉ・Ｎ｝（ｍｏｄＮ）、かつしたがって、
Ｐ＝＝Ａ・Ｂ・Ｉ（ｍｏｄＮ）＝Ｐ（Ａ・Ｂ）Ｎ  （５）
Ｐ（Ｐ・Ｈ）Ｎを考慮すると、式（５）から、
Ｐ（Ｐ・Ｈ）Ｎ＝＝Ａ・Ｂ・Ｉ２・Ｈ（ｍｏｄＮ）  （６）
明らかに、もしＨがＩ−２と定義されれば、
Ｒ＝＝Ｐ（Ｐ・Ｈ）Ｎ＝＝Ａ・Ｂ（ｍｏｄＮ）  （７）
式（７）が所望の結果を与えている。
上の式（２）から、Ｈ＝２２ｎ（ｍｏｄＮ）でありかつＮおよびｎのみに依存する予め計算された定数である。
次にＱが見つけられる必要がある。式（１）から、
｛Ａ・Ｂ・Ｉ＋Ｑ・Ｉ・Ｎ｝（ｍｏｄ２ｎ）＝０  （８）
これは、
Ａ・Ｂ・Ｉ（ｍｏｄ２ｎ）＝−Ｑ・Ｉ・Ｎ（ｍｏｄ２ｎ）であり、かつしたがって、
Ｑ＝＝−Ｎ−１Ａ・Ｂ（ｍｏｄ２ｎ）  （９）
奇数のＮに対しては、Ｊ＝Ｎ−１であり、したがってＮ・Ｊ＝Ｉ・２ｎ＋１である。
したがって、Ｑ＝＝−Ａ・Ｂ・Ｊ（ｍｏｄ２ｎ）である。
この場合、ＪもまたＮおよびｎのみに依存する予め計算された定数であることに注意を要する。
付属書類２
〈中国の剰余定理〉
中国の剰余定理（Ｃｈｉｎｅｓｅ  Ｒｅｍａｉｎｄｅｒ  Ｔｈｅｏｒｅｍ）は次のように説明できる。ｇｃｄ（ｍ１，ｍ２，ｍ３，…，ｍｋ）＝１となるような与えられた１組の整数ｍ０，ｍ１，ｍ２，…，ｍｋに対して、ｒｉ＜ｍｉ（０＜ｉ＜ｋ）であるような任意の組の整数ｒ０，ｒ１，ｒ２，…，ｒｋに対して、Ｘ（ｍｏｄｍｉ）＝ｒｉ（０＜ｉ＜ｋ）およびＸ＜ｍ０ｍ１ｍ２…ｍｋのような独自の整数Ｘが存在する。
〈ＲＳＡに適用された中国の剰余定理〉
ＲＳＡシステムにおいては、モジュラスＮは２つの大きな素因数、ｐおよびｑ、の積である。ｐおよびｑが素数または素（ｐｒｉｍｅ）であるから、ｇｃｄ（ｐ，ｑ）＝１である｛ｇｃｄ＝最大公約数｝。
したがって、ｒｐ＜ｐおよびｒｑ＜ｑのようないくつかの整数ｒｐおよびｒｑに対して、Ｒ（ｍｏｄｐ）＝ｒｐおよびＲ（ｍｏｄｑ）＝ｒｑのような独自の整数Ｒ（Ｒ＜Ｎ）が存在する。
一般に、
（Ｍ  ｍｏｄＮ）ｍｏｄｐ＝Ｘ  ｍｏｄｐ＝ｒｐ
（Ｍ  ｍｏｄＮ）ｍｏｄｑ＝Ｘ  ｍｏｄｑ＝ｒｑ
Ｒ＝Ｍｄ（ｍｏｄＮ）であるものとすると、中国の剰余定理を次のように使用できる。
ｒｐ＝Ｒ  ｍｏｄｐ＝（Ｍｄ（ｍｏｄＮ））ｍｏｄｐ
ｒｑ＝Ｒ  ｍｏｄｑ＝（Ｍｄ（ｍｏｄＮ））ｍｏｄｑ
また、ｄ＝ｋ＊（ｐ−１）＋ｒであるものとすると、オイラー・フェルマー定理（Ｅｕｌｅｒ−Ｆｅｒｍａｔ  Ｔｈｅｏｒｅｍ）により、
ｒｐ＝（Ｍｐ−１）ｋＭｒ（ｍｏｄｐ）
＝１ｋＭｒ（ｍｏｄｐ）
＝（Ｍ  ｍｏｄｐ）ｒｍｏｄｐ
同様に、もしｄ＝ｊ＊（ｑ−１）＋ｓであれば、
ｒｑ＝（Ｍｑ−１）ｊＭｓ（ｍｏｄｑ）
＝１ｊＭｓ（ｍｏｄｑ）
＝（Ｍ  ｍｏｄｑ）ｓｍｏｄｑ
また、ｒ＝ｄ（ｍｏｄ（ｐ−１））およびｓ＝ｄ（ｍｏｄ（ｑ−１））である。
したがって、Ｒ＝Ｍｄ（ｍｏｄＮ）とし、Ｒを計算するためには、
１）以下を計算する。
ａ）ｒｐ＝（Ｍ  ｍｏｄｐ）ｄ  ｍｏｄ（ｐ−１）ｍｏｄｐ
ｂ）ｒｑ＝（Ｍ  ｍｏｄｐ）ｄ  ｍｏｄ（ｑ−１）ｍｏｄｑ
２）０＜ｕ＜ｐとなるｕを見つけ、かつ、
ｕ＊ｑ＝１（ｍｏｄｐ）
３）次の内の１つを使用する。
ａ）Ｒ＝（（（ｒｐ−（ｒｑｍｏｄｐ））＊ｕ）ｍｏｄｐ）＊ｑ＋ｒｑ
（ここでａ＞ｒｑｍｏｄｐ）
ｂ）Ｒ＝（（（ｒｐ＋ｐ−（ｒｑｍｏｄｐ））＊ｕ）ｍｏｄｐ）＊ｑ＋ｒｑ
（ここでａ＜ｒｑｍｏｄｐ）
したがって、Ｍ，Ｎおよびｄがｎの２進デジット値である場合に、Ｒ＝Ｍｄ（ｍｏｄＮ）を計算する問題はｎ／２の２進デジット値を含む２つの値ｒｐおよびｒｑを計算することの内の１つに縮小される（ｒｅｄｕｃｅｄ）。これは計算時間の大幅な節約を表わす。
【図１】
0004612918.tif 000004
【図２】
0004612918.tif 000005
【図３】
0004612918.tif 000006
【図４】
0004612918.tif 000007
【図５Ａ】
0004612918.tif 000008
【図５Ｂ】
0004612918.tif 000009
【図６】
0004612918.tif 000010
【図７】
0004612918.tif 000011