(57)【特許請求の範囲】
【請求項１】
与えられた第１オペランドと第２オペランド及びモジュラスを持ってモジュラ演算を遂行するモジュラ掛け算方法において、
第１方向に配列される第１乃至第３制御ノードを通じて前記モジュラスの補数及び前記補数の倍数のうちのいずれか一つを選択するための制御信号を発生する段階と、
前記第１方向に直交する第２方向に前記第１制御ノードに続いて平行に配列された第１群の処理ノードの各々が、前記第１制御ノードから発生された前記制御信号に応答して前記モジュラスの補数及び前記補数の倍数のうちのいずれか一つを選択して、前記選択結果を現在のアレイ以前の繰り返し段アレイから発生されたモジュラ演算結果と加算する第１モジュラ演算を遂行する段階と、
前記第２方向に前記第２制御ノードに続いて平行に配列された第２群の処理ノードの各々が、前記第１オペランドと前記第２オペランドとを構成する各々のビットを掛けた結果と、前記第１群の処理ノードから発生された第１モジュラ演算結果を加算する段階と、
前記第２方向に前記第３制御ノードに続いて平行に配列された第3群の処理ノードの各々が、前記第３制御ノードから発生された前記制御信号に応答して前記モジュラスの補数及び前記補数の倍数のうちのいずれか一つを選択して、前記選択結果を前記第２群の処理ノードから発生された処理結果と加算する第２モジュラ演算を遂行して、前記第２モジュラ演算結果を現在のアレイで遂行されるモジュラ演算結果として出力する段階とを含むことを特徴とするモジュラ掛け算方法。
【請求項２】
前記制御信号を発生する段階では、前記第１乃至第３制御ノードが前記第１乃至第３群の処理ノードで発生される循環キャリの大きさを計算して、前記計算された循環キャリの大きさに応答して前記制御信号を発生することを特徴とする請求項１に記載のモジュラ掛け算方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、無線通信、コンピュータネットワーク等におけるデータ保安のための暗号化システムに関するものであり、特に２進数のモジュラ掛け算を遂行する方法及び装置に関するものである。
【０００２】
【従来の技術】
最近、コンピュータネットワークや無線通信などのような多様な通信サービスにおいて、データの保安性を改善するための方法として、暗号化システムの重要性が増大している。暗号化アルゴリズムは二つに分類することができるが、一つは秘密キー暗号化システムであり、他の一つは公開キー暗号化システムである［W.Diffe and M. E. Hellman, "New directions in cryptography", IEEE Trans. Inform. Theory, vol. IT-22, pp. 644-654, Nov.1976, U.S.Pat. Nos. 4,351,982, 5,349,551及び5,666,419 ］。
【０００３】
秘密キー暗号化システムでは、送信側が一つの秘密キーだけを使用して情報をスクランブルして送信し、受信側は受信された情報を同じキーでディスクランブルする。この秘密キー方式の代表的な例としては、現在、アメリカの商務省が標準として指定しているＤＥＳ（Data Encryption System）と、最近大きな反響を起こしているＩＤＥＡ(International Data Encryption Algorithm）［X. Lai and J. L. Massey, "A proposal for a new block encryption standard", in EUROCRYPT '90, Aarhus, Denmark, May1990., and R. Zimmermann et al., "5Å, 177/Mb VLSI implementaion of International data encryption algorithm", IEEE J. Solid-State Circuits, Vol. 29, pp. 303-307, Mar. 1994］とが挙げられる。このような方式の一番大きな問題点は、秘密キーの交換のために他の安全なチャンネルが必要ということである。このような短所を補完するために提案された方式が公開キー暗号化システムである。この方式では、一つの秘密キーと他の一つの公開キーを使用して情報をスクランブル／ディスクランブルする。この二つのキーは、一般に数学的な根拠により生成され、公開キーはだれにも公開され、使用が可能であるが、秘密キーなしにはその情報を受信して復元することができない。この方式は、キーを共有するためのチャンネルが別途に必要としないので安全であるが、その代わりに、二つのキーを生成し、これを通じて情報を復元するための数学的な演算が非常に複雑なので、高速処理が難しいという問題がある。それにもかかわらず、これからは公開キー方式が有望であると理由は、情報の安全性が高いからである。公開キー方式の代表的なシステムとしては、ＲＳＡ（Riseman-Shamir-Adelman）アルゴリズム［R. L. Rivest, A. Shamir, and L.Adelman, "A method for obtaining digital signatures and public-key cryptosystems", Commun. ACM, vol. 21, pp.120-126, Feb.1978］が現在世界的に広く使用されており、しかも、主にソフトウエアで実現され、使用されている。
【０００４】
ＲＳＡアルゴリズムの核心の演算はモジュラ掛け算であり、この掛け算はよく知られているように次のような数式で表現される。
【数１】
Ｆ＝Ａ×Ｂ  ｍｏｄ  Ｃ              …（１）
ここで、Ａ、Ｂ及びＣはｎビット定数である。
モジュラ掛け算は、一般的に固有な掛け算および割り算演算のため、複雑な算術演算となる。モジュラ掛け算においてのモジュロ演算は、定数割り算（この演算での残りだけが次の計算に必要となる）により遂行される。
【０００５】
モジュラ掛け算を遂行する技術は、大きく分けると、掛け算を完全に終わった後、割り算を遂行して残りを取る“掛け算後、モジュロ演算”技術と、掛け算を遂行する中間でモジュロ演算を行う“掛け算中、モジュロ演算”技術に分けられる。前者の技術では、ｎ×ｎビット掛算器と２ｎ×ｎビット割算器が必要となるから、要求されるハードウエアの大きさが大きくなる。後者の技術では、中間段で発生したキャリが貯蔵された後、最終段でキャリ伝搬が成立するＣＳＡ（carry save adder）スキーム［C. K. Koc とC. Y. Hungによる "Carry-Save Adders for Computing the Product AB Modulo N", Electronics Letters, vol.26, No.13, pp. 899-900, 21 June 1990 または、J. Korenの "Computer Arithmetic Algorithm", Englewood Cliffs, NJ:Prentice-Hall, 1993］を利用して部分的な積の上でモジュロ演算が遂行されるため、ｎ×ｎビット掛算器だけが必要である。しかし、この方法では、モジュロ演算のための掛け算と引き算演算が前者より多く要求される。これにより、発生する長いキャリ伝搬チェーンは、パイプライン段で、あるいは並列構造で待ち時間とクロックサイクルを相対的に長くさせる制限要素として作用する。
【０００６】
超高集積化のためのモジュラ掛算器のアレイ構造が次の文献すなわち、A. Vanemeulebroecke などによる "A new carry-free division algrithm and its application to a single chip 1024-b RSA processor" (IEEE J. Solid-State Circuits, vol. 25. pp.748-755, June 1990)、 C. K. Koc C.Y.Hung による "Bi-level systolic arrays for modular multiplication" (J. VLSI Sig. Proc., vol. 3, pp. 215-223, 1991)、S. E. Eldridgeと D. Walterによる "Hadware implementation of Montgomery's modular multiplication algrithm" (IEEE Trans. Comput., vol. 42, pp.693-699, June 1993) および、C. D. Walterによる "Systolic modular multiplication" (IEEE Trans. Comput., Vol.42, pp.376-378, Mar. 1993) 等に開示されている。Vanemeulebroke等は、符号表示された数の桁表示方式を使用する掛け算をした後、モジュロ演算を行っている。又、Vanemeulebroeckeのアルゴリズムは掛け算のための、そして、定数割り算のための二つのアレイで構成される。Koc とHungは、Blakley のアルゴリズム［G. R. Blakley, "A computer algorithm for the product AB modulo "M", IEEE Trans. Comput., vol. 32. pp.497-500, 1983］を適用し、各反復段からの五つのＭＳＢビットを観察することにより、符号推定方法を使用している。このアルゴリズムは、ビットレベルの伸縮的アレイ構造を有するが、各段からの中間結果の符号を計算する制御ノードのため、相対的に待ち時間とクロックサイクルが長くなる。EldridgeとWalterは、ＲＳＡの場合だけに該当するが、モジュラスと基数が互いに素数の関係である場合だけに動作するMontgomeryのアルゴリズム［P. L.. Montgomery, "Modular multiplication without trial division", Math. Comp., Vol. 44, pp.519-512, 1985］を使用している。しかし、以上の各技術は、それら各々のアルゴリズム特性のためにハードウエアオーバヘッドが大きく増加する問題を持っているので、実用化されていないのが実状である。
【０００７】
【発明が解決しようとする課題】
結局、モジュロ演算における重要感心は、長いキャリチェーンによる臨界経路の遅延をどのように減らして演算速度を向上させるかということ、そして、どのようにハードウェアの構造を簡素化するかという点である。モジュラ掛け算においてのモジュロ演算は定数割り算により遂行され、その割り算は連続された引き算演算により遂行されるので、モジュロ演算上の長い臨界経路遅延の改善は、ｎビット割り算に必要なＭＳＢ部分からのキャリ処理をどの程度早く遂行できるか、あるいはどのようにキャリ計算量を減らすかによる。
【０００８】
本発明の目的は、高速暗号化処理に適合し、実用的な構造を持つアレイモジュラ掛算器を提供することにある。
【０００９】
本発明の他の目的は、モジュラ掛算器の伸縮的なアレイ構造を提供することにある。
【００１０】
本発明のその他の目的は、高速暗号化処理に適合するモジュラ掛け算方法を提供することにある。
【００１１】
【課題を解決するための手段】
上記の課題を解決し、上記の目的を達成するための本発明の一つの特徴によると、モジュラ掛け算方法は、与えられたモジュラスの補数およびこの補数の倍数を計算する段階と、モジュラ掛け算の間に循環キャリの総大きさを計算する段階と、前記モジュラスの重みより大きな重みを持つ項のために前記循環キャリの総大きさにより前記計算された倍数を選択する段階と、この選択された倍数を加える段階とを含む。以後、モジュロ演算は、部分的な積のＭＳＢ状態、すなわち、循環キャリの総大きさにより選択された倍数を簡単なマルチプレクシングを通じて選択的に加えた数に置き換えられる。このように、あらかじめ計算された常数を加えるので、符号表示のための追加的な計算上のオーバヘッドが無くて、早いクロックサイクルを得ることができる。また、このようなアルゴリズムは、ＶＬＳＩへの適用が容易な定型アレイ形態に容易にマッピングすることができる。
【００１２】
本発明の他の特徴によると、モジュラ掛算器は、与えられたモジュラスの補数およびこの補数の倍数を計算する手段と、この手段により計算された倍数を貯蔵する手段と、モジュラ掛け算の間に、循環キャリの総大きさにより前記計算された倍数を選択する手段と、この手段により選択された倍数を加える手段とを含む。
【００１３】
【発明の実施の形態】
本発明の実施の形態として、ＲＳＡシステムと関連した、しかし、それだけに限定されないアレイモジュラ掛け算に対して詳細に説明する。
【００１４】
ＲＳＡアルゴリズムで、モジュラスあるいはキーＣは大抵５００ビット以上少数の掛け算であり、あまり変化せず、相当な期間の間同一の値で維持される（応用分野により異なるが、データの安定性要求により大抵幾月、幾週、又は幾日毎にキー変更が行われる）。本発明のモジュラ掛け算アルゴリズムでは、モジュラスＣの補数と、これの倍数があらかじめ計算される。
【００１５】
前記の式１で、二つのオペランドＡ及びＢ、モジュラスＣ、そして出力Ｆは、全てが無符号ｎビット定数とし、モジュラスＣ（このＣは２進数体系で示されるので、２n より小さい）の２の補数Ｋ、そしてＫの倍数Ｋh を次のように定義する。
【数２】
Ｋ＝２n mod Ｃ                    …（２）
【数３】
Ｋh ＝ｈ×Ｋ mod  Ｃ              …（３）
ここで、ｈは正の定数である。
【００１６】
上記の式２及び３から、２n*j mod Ｃ＝２j ×Ｋ modＣが成立することが容易に分かれる。一方、重みあるいはビット位置ｎのキャリ以外にも、重みｎ＋１、ｎ＋２等のキャリも発生するが、これらも上記のような同一な方式で表現することができる。たとえば、二つの重み２n+1 のキャリと一つの重み２n のキャリが発生すると、（２n+1 ＋２n+1 ＋２n ）mod Ｃ＝５×２n mod Ｃ＝５×Ｋ modＣ＝Ｋ5 となる。
【００１７】
従って、Ｋの倍数Ｋh をあらかじめ計算してレジスタに貯蔵しておくと、モジュロ演算のＣＳＡスキームで発生する２n より大きい項、すなわち、キャリと和は倍数Ｋh に置き換えることができる。各Ｋh のｈは掛け算中、モジュロ演算の各反復段階で計算され、該当Ｋh は部分的ＭＳＢ状態によりマルチプレクサを通じて選択される。ＲＳＡアルゴリズムではモジュラスＣ（すなわち、キー）が長時間固定されているので、Ｋh の事前の計算が可能である。ただし、キーが変更される場合にはＫh は更新されなければならない。実際にキーが変わる頻度は、応用分野により違うが、幾日あるいは幾月毎に一回ずつ変える。
【００１８】
式１のモジュラ掛け算は、ホナーの法則を利用して次のように表現することができる。
【数４】
0003784156.tif 000002
【００１９】
この式４は、次のような反復的な形態で表現することができる。
【数５】
Ｐo ＝０
Ｐi ＝２Ｐi-1 ＋ｂn-1 Ａ mod  Ｃ      …（５）
ここで、Ｐi は部分的である。
【００２０】
ＣＳＡスキームにおいて、中間段で部分的な和とキャリシーケンスが発生し、最終段だけでキャリ伝搬が成立する。ＣＳＡスキームの基本的な構成要素は全加算器である。各全加算器はそれの重み２i と関連して三つの入力ｓi ，ｃi 及びｘi を受け入れ、重み２i+1 と関連したキャリｃo 及び重み２i と関連した和ｓo を発生する。従って、全加算器の算出演算はよく知られているように、次のような式で示される。
【数６】
２ｃo ＋ｓo ＝ｓi ＋ｃi ＋ｘi       …（６）
ここで、＋は代数的な和を意味する。
ＣＳＡスキームを使用すると、各段の最左側ノードで重み２n のキャリが発生する。式１に示しているように、このキャリはモジュロ演算の間に定数Ｋの和で置き換えることができる。
【００２１】
式５から、部分的Ｐi は次のように示される。
【数７】
Ｐi ＝２Ｃi ＋Ｓi   （０≦ｉ≦ｎ）      …（７）
この時、０≦Ｐｉ≦３×２n −３が成立する。
【００２２】
前記の式３は二つのモジュロ減少段階を持っているし、新しい部分的項Ｔi を導入することにより次のように表現することができる。
＜アルゴリズム１＞
ｉ）Ｔi ＝２Ｐi-1 mod Ｃ
ii）Ｐi ＝（Ｔi ＋ｂn-i Ａ）mod Ｃ
【００２３】
しかし、上記のアルゴリズム１の段階ii）は加算される四つのオペランドを持つので、ＣＳＡスキームとしては実現することができないが、これは段階ii）を次のように二つの段階に分割することにより解決できる。
＜アルゴリズム２＞
ｉ）Ｔi ＝２Ｐi-1 mod Ｃ
ii-a）Ｔi * ＝Ｔi ＋ｂn-i Ａ
ii-b）Ｐi ＝Ｔi * mod Ｃ
【００２４】
上記のアルゴリズム２の段階ｉ）で２Ｐi-1 は一つの２n+1 項（すなわち、ｎ−１番目ビット位置のキャリｃn-1 i-1 ）と二つの２n 項（すなわち、ｎ−１番目ビット位置の和ｓn-1 i-1 とｎ−２番目ビット位置のキャリｃn-2 i-1 ）を示すが、最大４×２n まで示すことができる。これらの項はＫh （ｈ＝１，２，３，４）の足し算で置き換えられる。段階ii-a）では既に三つのオペランド（ＣＳＡ形態であるＴi のキャリ及び和、そして、ｂi により加えるＡ）があるので、モジュロ演算からの足し算からの置換は遂行されない。段階ii-b）では、段階ｉ）からのＴi のキャリと段階ii-a）からのＴi * のキャリがＫh に置換されるため、循環キャリとして、多ければ２×２n をもつようになる。二つの段階ｉ）とii-b）ではただ一つの追加オペランドが許容されるが、これがすぐＫをいくつか加える代わりにＫh をあらかじめ計算しておいて、一回だけを加える理由になるのである。
【００２５】
上記のアルゴリズム２に対するより詳細な説明のため、次のようにσ（Ｐi ）が定義される。
【数８】
σ（Ｐi ）＝Ｐi −ｈ×２n ＋Ｋh     …（８）
ここで、ｈ＝ｆ（ｘ1 ，ｘ2 ，ｘ3 ，....，ｘr ）である。従って、関数ｆ（・）は循環キャリの総大きさに該当するＫh を選択するためにｈを計算する。ｘ1 ，ｘ2 ，ｘ3 ，....，ｘr はビット変数（常にＭＳＢ位置のキャリ及び和）である。従って、関数ｆ（・）は次のようである。
【数９】
0003784156.tif 000003
ここで、ｘk が重み２n を持つとαk ＝１であり、重みが２n+1 であるとαk ＝２，重みが２n+2 であると、αk ＝４等である。言い換えれば、σ（Ｐi ）はあらかじめ計算されたＫh でｈ×２n を置き換える。上記の式８を使用すると、アルゴリズム２は次のように表現することができる。
＜アルゴリズム３＞
ｉ）Ｔi ＝σ（２Ｐi-1 ）
ii-a）Ｔi * ＝Ｔi ＋ｂn-i Ａ
ii-b) Ｐi ＝σ（Ｔi * ）
【００２６】
図４は本発明によるモジュラ掛算器の反復段の構造を示す。図示されたように、上記のアルゴリズム３の関数ｆ（・）は段階ｉ）に対して２ｃn-1 i-1 ＋ｓn-1 i-1 ＋ｃn-2 i-1 であり、段階ii-b）に対してはγi n-1 ＋γi *n-1である。ここで、γi n-1 とγi *n-1は各々Ｔi とＴi * のＭＳＢキャリであり、二つとも重み２n を持つ。以上のように、本発明による関数ｆ（・）の計算は、いままで発表された他の方法に比べて簡単であるので、ここで所要される全体のクロックサイクル周期を減らすことができる。しかし、図４の構造はすぐＶＬＳＩハードウエアで実現することが容易てはない。ここで、示した伝搬信号を各処理ノードを通じて他のノードへ伝達させると、並列掛算器として直接実現することができるアレイ構造を得ることができる。
【００２７】
図１はｎ＝７である場合において、完全に局部的に連結される構造のモジュラ掛算器アレイを示す。図１を参照すると、制御ノードＸ１，Ｘ２及びＸ３は第１の方向（列方向）で配列される。複数の処理ノードＡは第１の方向に直交する第２の方向（行方向）に制御ノードＸ１に続いて平行に配列される。複数の処理ノードＢは行方向に制御ノードＸ２に続いて平行に配列される。最後に、複数の処理ノードＣは行方向に制御ノードＸ３に続いて平行に配列される。
【００２８】
図２（ａ）ないし図２（ｆ）は図１の各ノードの機能を説明するための図である。この構造で、ノードＸ１とＸ３は式６の制御値ｈを計算する制御ノードである。従って、これらは単純なエンコーダで構成される。ノードＸ２はただ配線だけである。ノードＡは４×１マルチプレクサとＡＮＤゲート及び全加算器（ＦＡ）で構成される。ノードＢは全加算器とＡＮＤゲートだけで構成される。ノードＣは２×１マルチプレクサとＡＮＤゲート及び全加算器で構成される。図２（ａ）ないし図２（ｆ）で、＊と＋は各々代数的な掛け算及び足し算を、そして、＆はブウリアンＡＮＤ演算を示し、ki［０］＝０である。ノードＸ３でｈの最大値が２であるからノードＣはただＫ1 とＫ2 だけを必要とする。制御値ｈが０である時、Ｋo ＝０を受け入れるノードＡとＢではＡＮＤゲートが必要である。各処理ノードのマルチプレクサは該当制御ノードにより制御される。
【００２９】
表１はｎ＝１２、Ａ＝0100010001002(=109210)，Ｂ＝0100110011012(=129910)，そして、Ｃ＝1000001010012 (=208910) である場合、本発明のビットレベルモジュラ掛け算アルゴリズムの例を示している。
【００３０】
Ｋh がＫ1 ＝0111110101112  (=200710), Ｋ2 ＝0111100001012  (=192510), Ｋ3 ＝0111001100112  (=184310)，そして、Ｋ4 ＝0110111000012 (=176110) であらかじめ計算される。式７から、次のような最終出力Ｐn が得られる。
0003784156.tif 000004
上記の値を２０８９に対してモジュラで演算を行うと９３０になる。
【表１】
0003784156.tif 000005
【００３１】
図１のアレイ構造で、各行の二つのノードを一つのノードに併合し、各アレイ間の定型性を維持することにより、図３に図示されるＶＬＳＩ化に適するアレイ構造が得られる。図３で、ノードＸ１，Ｘ２及びＸ３は関数ｆ（・）を求めるノードであり、列方向に配列される。ノードＡＡ, ＢＢ及びＣＣは図１のノードＡ，Ｂ及びＣを各々二つずつまとめたノードである。このようなノード併合は線形伸縮構造を持っているし、ハードウエア実現をより容易にする。ワード長さｎが偶数であるには、制御ノードを除いた所定のノードが併合されることで実現できる。図３のアレイは偶数のｎを持つために最下位位置（すなわち、最右側）にもとのノードＡ，Ｂ及びＣが存在する。ノードＡ，Ｂ及びＣは、ノードＸ１，Ｘ２及びＸ３と平行に列方向に配列される。複数のノードＡＡはノードＸ１とノードＡ間に行方向に配列される。複数のノードＢＢはノードＸ２とノードＢ間に行方向に配列される。複数のノードＣＣはノードＸ３とノードＣ間に行方向に配列される。
【００３２】
図１及び図３の構造によると、マッピング関数により種々の異なる１次元アレイ（例えば、ビットシリアルモジュラ掛算器）を得ることができる。
【００３３】
本発明のアレイで、各行の最左側ノードは制御信号を発生する。各制御ノードは四つのゲート（二つのＸＯＲゲート、一つのＡＮＤゲート、そして、一つのＮＯＲゲート）あるいは二つのゲート（一つのＸＯＲゲート及び一つのＮＯＲゲート）で構成される。このような、制御ノードの簡略な構成はアレイ全体により早いクロックサイクルを提供する効果をもたらす。これにより、本発明のアレイのクロックサイクルは、制御ノードではない処理ノードにより決定される。図１で、キャリｃo と和ｓo を除いた全ての信号はアレイを通過する途中に変更されない伝搬信号であるので、ブロードキャスティング（broadcasting）ができる。
【００３４】
【発明の効果】
以上のように本発明によればモジュロ演算があらかじめ計算された所定の値を加えて置き換えられるようにしたので、ＭＳＢキャリの計算量を画期的で減らして高速モジュラ掛け算を遂行することができる。また、ＶＬＳＩ化が容易となる。
【図面の簡単な説明】
【図１】本発明によるモジュラ掛算器アレイ構造の一つの具体例を示す図。
【図２】図１のアレイ構造の各ノードの機能を説明するための図。
【図３】本発明によるモジュラ掛算器アレイ構造の他の具体例を示す図。
【図４】本発明によるモジュラ掛算器の反復段を示す図。
【図１】
0003784156.tif 000006
【図２】
0003784156.tif 000007
【図３】
0003784156.tif 000008
【図４】
0003784156.tif 000009