(57)【特許請求の範囲】
【請求項１】
乗算先読み方法とリダクション先読み方法とにより、法（Ｎ）についての、乗数（Ｍ）の被乗数（Ｃ）に対する剰余乗算を行うためのプロセッサであって、
変換された法（ＮＴ）に所定の分数（２／３）を乗じた値が、所定の第１値を有する上位の桁と、上記上位の桁に続く、所定の第２値を有する少なくとも１つの低位の桁とを持つように、上記法（Ｎ）を上記法（Ｎ）よりも大きい変換された法（ＮＴ）に変換（１０）するための手段と、
上記乗算先読み方法と上記リダクション先読み方法とにより、上記変換された法（ＮＴ）を用いて、剰余乗算の反復処理（１２）を行い、反復の最後に上記剰余乗算の変換された結果を得る手段と、
上記変換された結果に対する上記法（Ｎ）を用いた法リダクションにより、上記変換された結果を逆変換（１４）するための手段と
を含む、プロセッサ。
【請求項２】
ホストＣＰＵおよびコプロセッサを備え、この際、上記法を変換（１０）するための上記手段が上記ホストＣＰＵに配置されており、この際、剰余乗算の反復処理（１２）を行うための上記手段が、上記コプロセッサに配置されている、請求項１に記載のプロセッサ。
【請求項３】
上記ホストＣＰＵが、６４よりも小さい、あるいは６４と等しい桁数を有する短い数の演算装置であり、上記コプロセッサが、５１２よりも大きい、あるいは５１２と等しい桁数を有する長い数の演算装置である、請求項２に記載のプロセッサ。
【請求項４】
剰余乗算の反復処理を行うための上記手段が、変換された法のためのレジスタと、上記剰余乗算における中間結果のためのレジスタとを備えている、請求項１に記載のプロセッサ。
【発明の詳細な説明】
本発明は、暗号法アルゴリズム、ならびに、このような暗号法アルゴリズムを実施するための装置、そして、特に、乗算先読み方法（Multiplikations-Vorausschau-Verfahren）、および、リダクション先読み方法（Reduktions-Vorausschau-Verfahren）を用いた剰余乗算（modularenMultiplizieren）のための方法と装置に関するものである。
【０００１】
暗号法は、法計算のための主な使用の１つである。暗号法のための主なアルゴリズムは、既知のＲＳＡアルゴリズムである。ＲＳＡアルゴリズムは、べき乗剰余を基に構成されている。この累乗法は、以下のように示せる：
Ｃ＝Ｍｄｍｏｄ（Ｎ）
この際、Ｃは、符号化された情報、Ｍは、符号化されていない情報、ｄは、秘密鍵、Ｎは、法である。通常、法Ｎは、２つの素数ｐとｑとの乗算によって生成される。べき乗剰余は、既知の平方および乗法アルゴリズム（Square-and-Multiply-Algorithmus）によって、乗法に分解される。さらに、べき指数ｄは、２の累乗に分解される。その結果、べき乗剰余を、複数の剰余乗算に分解できる。それゆえ、べき乗剰余を、計算によって効果的に実施できるように、べき乗剰余は、法加算法に分解可能な剰余乗算に分解される。
【０００２】
ドイツ特許２次公報第３６３１９９２号（ＤＥ３６３１９９２Ｃ２）に、乗算先読み方法およびリダクション先読み方法を用いて、剰余乗算を速く行う暗号方法が開示されている。ドイツ特許２次公報第３６３１９９２号（ＤＥ３６３１９９２Ｃ２）に記載されている方法は、ＺＤＮ方法とも称され、図９を参照して詳しく説明する。アルゴリズムの開始工程９００の後、広域変数Ｍ，Ｃ，およびＮが初期化される。目的は、以下の剰余乗算を計算することである：
【０００３】
【数１】
0004660066.tif 000002
【０００４】
Ｍは、乗数を示し、一方、Ｃは、被乗数を示している。Ｚは、剰余乗算の結果であり、一方、Ｎは、法である。
【０００５】
次に、さしあたり詳しく説明する必要のない様々な局所変数が初期化される。続いて、２つの先読み方法が使用される。乗算先読み方法ＧＥＮ−ＭＵＬＴ−ＬＡでは、様々な先読み規則を用いて、乗算桁送り値ｓｚおよび乗算先読みパラメータａが計算される（９１０）。次に、Ｚレジスタの現在の内容が、ｓｚ桁だけ左桁送りされる（９２０）。
【０００６】
これとほぼ並行して、リダクション桁送り値ＳＮおよびリダクションパラメータｂを計算するために、リダクション先読み方法ＧＥＮ−Ｍｏｄ−ＬＡ（９３０）が実施される。次に、工程９４０では、桁送りされた法の値Ｎ′を生成するために、法レジスタの内容、つまり、Ｎの現在の内容が、ｓＮ桁だけ左もしくは右に桁送りされる。ＺＤＮ方法の中央３演算数演算を、工程９５０に示す。この際、工程９２０の後、乗算先読みパラメータａが乗算された被乗数Ｃと、リダクション先読みパラメータｂが乗算され桁送りされた法Ｎ’とに、中間結果Ｚ’が加算される。実際の状態に応じて、先読みパラメータａおよびｂは、＋１、０、または−１の値を有していてもよい。
【０００７】
乗算先読みパラメータａが、＋１であり、リダクション先読みパラメータｂが、−１であるのが典型的な場合である。その結果、被乗数Ｃが桁送りされた中間結果Ｚ’に加算され、桁送りされた法Ｎ’が桁送りされた中間結果Ｚ’から減算される。乗算先読み方法が初期設定されている個々の左桁送り数よりも多くを許容するとしたら、すなわち、ｓｚがｋとしても記載されるｓｚの最大許容値よりも大きい場合、ａは値０を有するようになる。ａが０であり、先行する法リダクション、すなわち、桁送りされた法の先行する減算のせいで、Ｚ’がまだ非常に小さい、特に、桁送りされた法Ｎ’よりも小さい場合、リダクションを行う必要はない。その結果、パラメータｂは０である。
【０００８】
工程９１０から９５０は、被乗数の全ての桁が処理されるまで、すなわち、ｍは０であり、１つのパラメータｎも０であるまでずっと実施される。このパラメータは、桁送りされた法Ｎ’が、まだ元々の法Ｎよりも大きいか、それとも被乗数の全ての桁が既に処理されているという事実にもかかわらず、Ｚから法を減算することにより、まださらなるリダクション工程を行われなければならないかを示している。
【０００９】
最後に、Ｚが０よりも小さいかどうかさらに決定される。その場合には、最後のリダクションが達成されるように、法ＮがＺに加算されなければならない。このことにより、最後に剰余乗算の正確な結果Ｚが得られる。工程９６０において、ＺＤＮ方法を用いる剰余乗算が終了される。
【００１０】
工程９１０において乗算先読みアルゴリズムによって計算される乗算桁送り値ｓｚおよび乗算パラメータａは、乗数のトポロジー（Topologie）および先読み規則（Vorausschau-Regeln）によって生じ、この先読み規則はドイツ特許２次公報第３６３１９９２号（ＤＥ３６３１９９２Ｃ２）に記載されている。
【００１１】
リダクション桁送り値ｓＮおよびリダクションパラメータｂは、同じくドイツ特許２次公報第３６３１９９２号（ＤＥ３６３１９９２Ｃ２）に記載のように、Ｚレジスタの現在の内容を、値２/３×Ｎと比較することにより決定される。この比較により、ＺＤＮ方法は、その名称を有している（ＺＤＮ＝Ｎの三分の二（ZweiDrittel N））。
【００１２】
図９に記載のようなＺＤＮ方法は、剰余乗算を３演算数加算（図９のブロック９５０）に戻す。この際、演算時間効率を上昇させるため、乗算先読み方法およびリダクション先読み方法も共に使用される。従って、モンゴメリーリダクション（Montgomery-Reduktion）と比較して、有利な演算時間（Rechenzeitvorteil）が達成される。
【００１３】
以下に、図１０を基に、リダクション先読み方法について詳しく説明する。この方法は、図９のブロック９３０で行われているものである。まず、ブロック１０００に局所変数、すなわち、リダクション先読みパラメータｂおよびリダクション桁送り値ｓＮのための予約が行われる。ブロック１０１０では、リダクション桁送り値ｓＮがゼロに初期化される。次に、ブロック１０２０では、値ＺＤＮが計算される。この値ＺＤＮは法Ｎの２/３に等しい。ブロック１０２０において決定される値は、独自のレジスタ、つまり暗号法コプロセッサのＺＤＮレジスタに格納される。
【００１４】
次に、ブロック１０３０では、変数ｎが０であるかどうか、あるいは、桁送り値ｓＮが−ｋであるかどうかが決定される。ｋは、ハードウエアによって予め与えられている最大桁送り値を定義する値である。ブロック１０３０は、第１経路（ersten Durchgang）において「いいえ」を応答する。その結果、ブロック１０４０では、パラメータｎが減少される。また、ブロック１０６０では、リダクション桁送り値も１だけ減少される。そしてブロック１０８０では、変数ＺＤＮが新規に、つまり、変数ＺＤＮの半分の値が割付られる。このことは、ＺＤＮレジスタにある値の右桁送りにより簡単に得られる。次に、ブロック１１００において現在の中間結果の絶対値がＺＤＮレジスタにある値よりも大きいかどうかが決定される。
【００１５】
ブロック１１００での比較演算は、リダクション先読み方法の中央演算である。問い合わせに対し「はい」が応答されると、反復は終了し、リダクション先読みパラメータｂは、ブロック１１２０において記載されたように割り付けられる。これに対し、ブロック１１００において応答される問い合わせに対して、「いいえ」が応答されると、ブロック１０３０におけるｎおよびｓＮの現在の値を調査するために、反復が再び始まる（zurueckgesprungen）。ブロック１０３０が、反復のいつかの時点で「はい」によって応答されると、ブロック１１４０へと進む（gesprungen）。このブロック１１４０において、リダクションパラメータｂがゼロに設定される。このことは、図９のブロック９５０に記載の３演算数演算では法が加算も減算もされないことに繋がる。このことは、中間結果Ｚが大変小さかったので、法リダクションは必要なかったということを意味している。次に、ブロック１１６０では変数ｎが新規に割付られる。この際、次にブロック１１８０において最後にリダクション桁送り値ｓＮが計算される。この値は、図９のブロック９４０において、桁送りされた法を得るために、法の左桁送りを行うのに必要である。
【００１６】
最後に、ブロック１２００，１２２０，１２４０では、記録超過（Registerueberschreitungen）が生じていないことを確実にするために、Ｎレジスタの現在の割付を調査するのに、さらなる変数ＭＡＸおよびｃｕｒ−ｋを考慮しながら、ｎおよびｋの現在の値が調査される。詳しい内容は、本発明には関係がないが、ドイツ特許２次公報第３６３１９９２号（ＤＥ３６３１９９２Ｃ２）に詳しく記載されている。
【００１７】
図９および図１０に記載のアルゴリズムは、図７に示すようなハードウエアとして実施されている。ブロック９５０に実施されている３演算数演算のためには、図７にＡＵで示す計算装置７００が必要である。この計算装置が、被乗数用のレジスタＣ７１０、法用のレジスタＮ７２０、および、剰余乗算の現在の中間結果用のレジスタＺ７３０に連結されている。さらに、図７から、３演算数演算の結果が逆連結矢印７４０を介して再びＺレジスタ７３０に供給されることが分かる。さらに、図７から、レジスタが相互に接続されていることが分かる。図１０のブロック１０２０において計算される値ＺＤＮは、独自のＺＤＮレジスタ７５０に格納されなければならない。ＺＤＮ比較、つまり図１０に記載の反復ループは、さらに、独自のＺＤＮ比較のための制御論理７６０によって順序制御される。
【００１８】
従って、Ｚ：＝Ｍ×Ｃ  ｍｏｄ  Ｎの計算のためのＺＤＮアルゴリズムの主な作用は、以下の両方の演算から構成されている：
１．以下の方程式：
２/３Ｎ×２−ｓｉ＜｜Ｚ｜≦４/３Ｎ×２−ｓｉ
が満たされる、レジスタＺおよびＮ用の桁送り値ｓｚおよびｓｉの計算、および
２．３演算数合計の計算：
Ｚ：＝２ｓＺＺ＋ａＣ＋ｂ×２ｓｚ−ｓｉＮ
乗算先読みパラメータａおよびリダクション先読みパラメータｂは、知られているとおり、−１、０および＋１の値であってもよい。
【００１９】
中間結果Ｚ，被乗数Ｃおよび法Ｎは、長い数、すなわち完全に５１２よりも大きな桁またはビット数でもよい。この際、この数は２０４８に達する桁を有していてもよい。
【００２０】
しかし、ブロック１１００において行われる実際の中間結果Ｚと値ＺＤＮとの比較は、演算時間の理由からＺの全てのビットによって行われるのではなく、多数のＺの最上位ビットによってのみ行われる。この際、比較結果のために非常に高い精度を得るには、３２ビットの数で十分であることが判明した。
【００２１】
この比較に必要な２/３Ｎの３２個の最上位ビットのためには、参照番号７５０によって図７に示すように、ＺＤＮレジスタと称される独自のレジスタが必要である。
【００２２】
さらに、独自のハードウエア比較機が必要である。このハードウエア比較機は、Ｚレジスタにおける実際の値と、ＺＤＮレジスタにおける実際の値とのために、以下の方程式が満たされるように正しいｓｉ値を計算する：
２/３  ２−ｓｉＮ＜｜Ｚ｜≦４/３  ２−ｓｉＮ
従って、この方法において不都合なのは、一方では、付加的なＺＤＮレジスタとハードウエア比較機との双方が、余分に集積回路領域を必要とすることである。他方では、図１０に示す反復ループによって行われる２/３Ｎの計算とＺＤＮアルゴリズムにおける補助桁送り値ｓｉの計算とは、全てのアルゴリズムのために臨界的な時間があり、アルゴリズムの全ての演算時間のために完全に決定的であってもよい。
【００２３】
本発明の目的は、剰余乗算のための改善された構想を提供することであり、この構想は、一方では面積を節約して実施することができ、他方では必要とする演算時間が短いものである。
【００２４】
本目的は、特許請求項１に記載の剰余乗算のための方法、または、特許請求項１４に記載の剰余乗算のための装置によって達成される。
【００２５】
本発明は、法Ｎが、変換された法ＮＴにまず変換され、全ての剰余乗算が、実際の法の変わりに変換された法ＮＴによって実施される場合には、更新された中間結果と、値ＺＤＮと、すなわち法Ｎの２/３倍との演算時間の比較を簡単にできるという認識に基づいている。本発明に基づき、法は、変換された法の所定の分数、すなわち、好ましい実施例では、変換された法の２/３倍が、特定の数となるように変換される。この特定の数は、２/３ＮＴと中間結果Ｚとの比較が簡単に（trivial）なるように選択される。本発明に基づけば、変換された法の所定の分数が所定の第１値を有する上位の桁を有し、その後に、所定の第２値を有している少なくとも１つの低位の桁が続くように変換が行われる。２進法表示（binaererDarstellung）と、最上位のビットが符号を示している２の補数規則（Zweier-Komplement-Konvention）とにおいて、２/３ＮＴの第２最上位ビットが２進法で１であり、一方、第３の最上位ビットおよびさらに他の低位ビットがゼロであるように、変換された法へと変換される。
【００２６】
この場合、桁送り値ｓｉを得るために数えなければならないのは、変換された法の所定の分数の最上位の１と、剰余乗算の実際の中間結果Ｚとの間の桁数のみであるので、比較は簡単である。そして、ＺＤＮ比較によって得られるいわゆる補助桁送り値ｓｉが、並行して行われている乗算先読み方法の乗算桁送り値から減算されることにより、桁送り値ｓｉからリダクション桁送り値ｓＮを簡単に査定することができる。
【００２７】
全てのＺＤＮ方法は、従来技術と同じく処理される。しかしここでは法Ｎの代わりに変換された法ＮＴが使用される。その結果、剰余乗算の「変換結果」が最後に獲得される。この変換結果は、変換された法ＮＴの余剰群（Restklasse）にある。最後の逆変換は、剰余乗算の変換結果が、もともとの法Ｎを用いて法リダクションされることである。従って、法Ｎを用いて被乗数Ｃにより乗数Ｍを剰余乗算した実際の結果が提供される。
【００２８】
本発明の好ましい実施例を以下に、添付の図を参照しながら詳しく説明する。
図１は、剰余乗算のための本発明の構想のフローチャートを示す。図２は、法Ｎの、ビットの第１部分ＮＴ、および、ビットの第２部分ＮＲへの分解を示す。図３は、変換された法ＮＴの、長さＬ（ＮＴ）を有する桁の第１部分、および、残りの桁（verbleibenden Stellen）への分解を示す。図４は、変換された法ＮＴの２／３倍の桁の表示を示す。図５は、ランダム化により変換された法の桁の概略的な表示を示す。図６は、本発明に基づく剰余乗算を実施するための演算装置の概略的な表示を示す。図７は、公知のＺＤＮ方法のための演算装置の概略的な表示を示す。図８ａから８ｃは、乗算桁送り値ｓｚと、補助桁送り値ｓｉと、リダクション桁送り値ｓＮとの間の関係を概略的に表示する図である。図９は、既知のＺＤＮ方法のフローチャートを示す。図１０は、既知のリダクション先読み方法のフローチャートを示す。
【００２９】
図１は、法Ｎを用いる、乗数Ｍによる被乗数Ｃの剰余乗算のための本発明の方法のフローチャートを示す。まず、工程１０において、法Ｎが、以下の方程式：
ＮＴ＝Ｔ×Ｎ
に基づいて、変換された法ＮＴに変換される。
【００３０】
次に、工程１２において、剰余乗算は、変換された法ＮＴと変換された法の所定の分数とを用いて処理される。本実施例では、この所定の分数が、２/３であることが好ましい。
つまり、剰余乗算の結果は、法Ｎによって定義される余剰群においてではなく、変換された法ＮＴによって定義される余剰群において計算される。本発明の構想は、変換された法ＮＴを使用することにより、補助リダクション桁送り値ｓｉの計算が、非常に簡易化されることが特徴である。この補助リダクション桁送り値ｓｉは、既知のリダクション先読み方法の、図１０の反復ループに相当している。
【００３１】
次に、最後の工程１４では、ＮＴからＮへの逆変換が再び行われる：
この際、変換された法ＮＴの余剰群にある変換された結果は、簡単な桁送り/減算リダクション（Verschiebungs/Subtraktions-Reduktion）によって、法Ｎの余剰群にフィードバックされることが好ましい。
【００３２】
法Ｎの変換された法ＮＴへの変換は、変換された法の所定の分数、すなわち、好ましい実施例では、変換された法の２/３倍が、所定の第１値を有するより上位の桁を有し、このより上位の桁に所定の第２値を有している少なくとも１つの低位の桁が続くように、工程１０の変換子Ｔを用いて行われる。従って、つまり、同じく所定の値を有するＺの一番上の桁が探され、変換された法の所定の分数の、所定の第１値を有する上位の桁と、所定の第１値を有する中間結果Ｚの一番上の桁との間の差が差ｓｉと同じであることにより、中間結果Ｚと変換された法の２/３倍との比較を、非常に簡単にできる。
【００３３】
要するに、このことは、以下のように示される。Ｎは、暗号法コプロセッサ（Krypto-Coprozessor）においてではなく、３２ビットＣＰＵにおいて変換された法ＮＴに変換されることが好ましく、その結果：
ＮＴ：＝Ｔ×Ｎ
が適用する。このときＴは自然数である。
【００３４】
使用される全ての数が２進数の場合、ＮＴのために、以下の形が生じる：
ＮＴ＝１１００．．．０  ＸＸ．．．ＸＸ
従って、変換された法の２/３倍のために、以下の値が生じる：
２/３ＮＴ＝１００．．．０  Ｘ′Ｘ′．．．Ｘ′Ｘ′
ＮＴと２/３ＮＴとから、両方とも、例えば１６ビットの第１部分を有し、そして、Ｌ（Ｎ）ビットのＸもしくはＸ′の部分を有していることが分かる。いわゆるＺＤＮ比較のために、変換された法ＮＴの２/３倍の一番上の１６ビットだけが呼び出される。なぜなら、このとき既に、約２−１０よりも良い誤り率が生じるからである。従って、変換された法の２/３倍の全ての５１２ビット、１０２４ビットまたは２０４８ビットを、ＺＤＮ比較のために呼び出す必要はなく、変換された法の一番上の１６ビットと比較されれば十分である。当然、２/３ＮＴのより少ないビットも、比較のためにさらに呼び出されてもよい。しかし、そうすると、誤り率が次第に上昇する。しかし、誤りは、危険ではなく非臨界的であり、リダクション先読み方法の副最適率（suboptimalenVerhalten）に繋がるだけなので、この方法を簡単に行える。
【００３５】
従って、変換された法ＮＴの２/３倍は、値１を有する上位の桁を有しており、この桁に値０、すなわち、所定の第２値を有する少なくとも１つの低位の桁が続く。既に記載された実施例の場合、低位の桁数は１５である。当然、ここでも、中間結果Ｚと変換された法ＮＴの２/３倍との間にどのような大きな差を期待、もしくは処理しなければならないかに応じて、より大きな、またはより小さな数も考慮できる。剰余乗算の中間結果Ｚの量、つまり、図９のブロック９５０における３演算数加算の結果の量は、以下の形を生じる：
｜Ｚ｜＝００．．．０１ＹＹ．．．Ｙ
補助桁送り値ｓｉは、以下の方程式に基づき計算される：
２/３ＮＴ×２−ｓｉ＜｜Ｚ｜≦４/３ＮＴ×２−ｓｉ
変換された法ＮＴの２/３倍のトポロジーに基づいて、値ｓｉは常に変換された法ＮＴの２/３倍の、１を有する最上位ビットと中間結果の量の最上位１との間の間隔である。
【００３６】
本発明に基づき、桁の差もしくは値ｓｉは、簡単に求め得られる。反復は、もはや必要ない。
【００３７】
そのうえ、法の２/３倍を格納するために、ＺＤＮレジスタはもはや必要ない。なぜなら、定義により、変換された法ＮＴの２/３倍の上側の、例えば、少なくとも１６ビットが常に同じ形だからである。ビット比較機はもはや必要ない。「１」を有する変換された法ＮＴの２/３倍の最上位の桁と、「１」を有するＺの最上位の桁との間の価数差（Wertigkeits-differenz）は、例えば、変換された法用のレジスタ、および、中間結果Ｚ用のレジスタのビットとしてのＸＯＲ接続により、簡単に実施できる。従って、ｓｉは、ＸＯＲ接続が第１の「１」を出力する桁と、ＸＯＲ接続が第２の「１」を出力する桁との価数の差と同じである。
【００３８】
ＺＤＮレジスタもＺＤＮ比較機も必要ないという事実により、全ての演算装置は、より小さな集積回路領域に配置されている。
【００３９】
とりわけ、暗号法制御部分、すなわちＺＤＮ比較のための制御論理（図７の７６０）は、あまり複雑ではない。なぜなら、図１０の煩雑な反復ループを実施する必要がないからである。従って、計算が迅速になり、その結果、補助桁送り値ｓｉの計算によって、タイミング問題はもはや、全てのアルゴリズムに生じない。
【００４０】
以下に図２から図５を参照しながら本発明の変換について詳細に説明する。
【００４１】
すでに実施されたように、ＺＤＮアルゴリズムの基本部分は、以下の方程式を満たすことである：
２/３  ２−ｓｉＮ＜｜Ｚ｜≦４/３  ２−ｓｉＮ
ｓｉは、補助桁送り値として示され、桁に応じて、Ｎと同一の位置にＺを桁送りするのに必要である桁送り値である。従来技術では、ｓｉの計算のために、Ｚを２/３Ｎと比較する演算が必要である。
【００４２】
本発明に基づき、法が、法ＮＴに変換されることにより、２/３との比較は簡易化される。この際、変換された法ＮＴは、Ｎを用いた任意の法演算が行われる前は、Ｎよりも大きい。そして、全ての計算法ＮＴが実施される。しかし、計算の結果が余剰群Ｎ内でなければならない以上、本発明に基づきＮによる最後のリダクションが実施される。
【００４３】
図２に示すように、ＮをＮビットの長さを有する整数とする。法Ｎは、常に正の整数、すなわち、２の補数表現（Zweier-Komplement-Darstellung）においてＭＳＢ＝０であるので、符号のビットは０であり、法Ｎの第２の最上位ビット（ＭＳＢ−１）は、常に１である。ＺＤＮ比較のために、上記法の全てのビットを中間結果の全てのビットと比較する必要はなく、ＺＤＮ比較のためにｍビットの数を使用することで間に合う。法Ｎの最上位のｍビットは法ＮＴの第１部分を定義する。一方、上記法の残りのＮ−ｍビットは法の第２部分ＮＲを定義する。好ましい実施例では、ｍは１６である。当然、ｍがより大きな値、またはより小さな値であることも可能である。
【００４４】
図３に示すように、変換は、変換された法ＮＴが、図２の元々の法よりも１６ビット長くなるように実施される。
【００４５】
ＺＤＮ比較のために、ＮＴの最初の１６ビットを使用することで十分である。この際、本発明の好ましい実施例では、１２ビットだけが比較のために使用される。一方、低位の４ビットは、より低位のビットから生じ得る繰り上げの可能性のためのバッファを構成する。
【００４６】
この場合、比較が誤った結果を生じる可能性は、２−１２よりも小さい。比較が、誤った結果を生じると、副最適リダクション桁送り値ｓＮのみが生じるが、結果として生じる法Ｎは、依然として正しい。
【００４７】
上記法が図２に示されるような２の補数表現として使用される場合には、法Ｎは以下のようにして分解される：
Ｎ＝２ｎ−ｍＮＴ＋ＮＲ
このとき、Ｎは、変換子Ｔを用いてＮＴに変換される。この際、Ｔは合同式のために（Kongruenzgruenden）必要な適切に選択された整数である。ＮＴは、図３に示された形態、すなわち、ＮＴの最上位ビット（ＭＳＢ）が０でなければならない。なぜなら、ＮＴは、正の整数でなければならないからである。以下に実施されるように、変換された法の第２の最上位、および、第３の最上位ビットは１でなければならない。一方、変換された法ＮＴの一番上の部分（図３に、参照番号３３によって示す）にある他の全てのビットは、「０」の値を有していなければならない。この場合にのみ、つまり、ＮＴの２/３倍のために、図４に示すようなＮＴの２/３倍の一番上の部分は、「１」を有するビットのみを有し、一方、この一番上の部分４４の他の全てのビットは０である。その結果、ｓｉを決定するための上記の簡単な比較が決定のために実施できる。
【００４８】
しかし、まず図３を参照して、変換子Ｔを用いた、変換された法ＮＴの計算について説明する。以下の定義が通用する：
ＮＴ＝Ｔ  Ｎ
＝Ｔ（２ｎ−ｍＮＴ＋ＮＲ）
変換子Ｔには、以下が通用する：
Ｔ＝｜２ｐ−２＋２ｐ−３/ＮＴ｜
この方程式を用いると、変換された法ＮＴに対して以下が生じる：
ＮＴ＝｜２ｐ−２＋２ｐ−３/ＮＴ｜（２ｎ−ｍＮＴ＋ＮＲ）
ＮＴ＝（２ｎ＋ｐ−ｍ−２＋２ｎ＋ｐ−ｍ−３）ＮＴ/ＮＴ
＋（２ｐ−２＋２ｐ−３）ＮＲ/ＮＴ
例えば、ｐおよびｍのために典型的な値を考えた場合、つまりｐが３２ビット、ｍが１６ビットの場合、ＮＴのために以下が生じる：
ＮＴ＝２ｎ＋１４＋２ｎ＋１３＋ＮＲ｛（２ｐ−２＋２ｐ−３）/ＮＴ｝
ただし、ＮＴの計算は、暗号法コプロセッサではなく、ホストＣＰＵにおいて行われることが好ましい。ホストＣＰＵは、短い数の演算装置を備えており、このことは、しかし、ＮＴの計算のために十分である。なぜなら、Ｔは整数でなければならず、法Ｎの代わりに法ＮＴの暗号法コプロセッサ内部で計算が行われ、この際、ＮＴはＮより大きいので、ＮＴの１６ビットに等しい最初のｐ−ｍのみが、補助桁送り値ｓｉを計算するために、簡単なＺＤＮ比較に関連している。ＮＴの他のｎビットは、どのような数でもよく、補助桁送り値ｓｉの計算、すなわち、Ｚとの比較には関連していない。しかし、当然、変換された法ＮＴの全てのビットは、３演算数加算のために必要であり、この３演算数加算は、この際、桁送りされた法を使用する代わりに、桁送りされ変換された法を使用することにより実施される。
【００４９】
図１７に示すように、変換子Ｔは、ｍおよびｐのために選択された値のために１６ビット整数（16-Bit-Ganzzahl）である。従って、Ｔの計算のために、もしくは、ＮＴの計算のために必要な割り算は、最上位の３２ビットのためにしか実施されない。従って、ホストＣＰＵにおいて、迅速かつ簡単にプログラムできる。
【００５０】
図４に、変換された法ＮＴの２/３倍を示す。図３に示すように、ＮＴのＭＳＢ−１およびＭＳＢ−２は「１」であるので、以下が通用する：
（１１）２＝（３）１０および（２/３×３）２＝（２）１０＝（１０）２
簡単なビットパターンが変換された法ＮＴの２/３倍のために生じる。この際、変換された法ＮＴの２/３倍の長さはｎ−ｍ＋ｐである。
【００５１】
２/３ＮＴの特別な形式が理由で、このとき、｜Ｚ｜との比較は非常に簡単となる。２/３ＮＴの最上位の１が法演算の始めに位置ｎ＋ｐ−ｍ−２にあることが知られている。従って、レジスタＺのためのポインタは、好ましい実施例では、ＺのＭＳＢで始められ、Ｚの最初の「１」を探す。ＺのＭＳＢが１である場合には、Ｚは負の数であり、「１」の代わりにＺの最初のゼロを探す。
【００５２】
レジスタＮ、および、レジスタＺにおける、最初の１のビット位置の差が補助桁送り値ｓｉを決定する。法演算の結果は、余剰群Ｎ内でなければならないので、本発明では、最終リダクションＮが実施され、このことは、逆変換（図１の工程１４）が実施されなければならないことを意味する。ＮからＮＴへの変換は、既知のＺＤＮ比較と比較して以下の長所がある。
【００５３】
暗号法コプロセッサの内部での２/３Ｎの計算の代わりに、ホストＣＰＵにおいてＮからＮＴへの簡単な変換が行われる。
【００５４】
集積回路上にＺＤＮレジスタおよび比較論理は不要である。従って、集積回路の大きさはより小さくなり、集積回路プロセッサの複雑性がより減少する。
【００５５】
続いて、ＮからＮＴへの変換を、図５を参考に記載されているように、法Ｎのランダム化と組み合わせることができる。Ｒがｓビットの長さの乱数である場合、ランダム化された変換された法ＮＴは図５に示す形である。ランダム化数（Randomisierungszahl）Ｎによって、上記ランダム化された変換された法は、ランダム化が行われていない場合（図３）よりもｓビットだけ、すなわち、Ｒの桁数だけ、長くなる。
【００５６】
このことは、方程式として、以下のような式で示される：
ＮＴ＝Ｔ  Ｎ
＝Ｔ（２ｎ−ｍＮＴ＋ＮＲ）
従って、ランダム化された変換子Ｔは、以下のようである：
Ｔ＝｜２ｐ−２−２ｐ−３＋Ｒ/ＮＴ｜
従って、ランダム化された、変換された法に対して以下の式が生じる：
ＮＴ＝｜２ｐ−２＋２ｐ−３＋Ｒ/ＮＴ｜（２ｎ−ｍＮＴ＋ＮＲ）
ＮＴ＝（２ｎ＋ｐ−ｍ−２＋２ｎ＋ｐ−ｍ−３＋Ｒ  ２ｎ−ｍ）ＮＴ/ＮＴ
＋（２ｐ−２＋２ｐ−３＋Ｒ）ＮＲ/ＮＴ
ｐを１４４ビット、ｍを１６ビット、ｓを１１２ビットとすると、ランダム化を含む変換された法ＮＴのために、以下の値が生じる：
ＮＴ＝２ｎ＋１２６＋２ｎ＋１２５＋Ｒ  ２ｎ−１６＋ＮＲ（２１４４＋２１４３＋Ｒ/ＮＴ）
従って、ＮＴのビットの長さは：
Ｌ（ＮＴ）＝ｎ＋ｐ−ｍ＝ｎ＋ｍ＋ｓ＝ｎ＋１６＋１１２＝ｎ＋１２８ビットである。図６は、本発明の演算装置を示す。この演算装置は、図７と比較すると、もはやＺＤＮレジスタを有しておらず、計算装置７００、Ｃレジスタ７１０、Ｎレジスタ７２０およびＺレジスタ７３０のみを有している。この際、Ｎレジスタ７２０には、法もしくは桁送りされた法がもはや格納されておらず、変換された法、もしくは、桁送りされた変換された法、もしくは、ランダム化された変換された法、もしくは、桁送りされランダム化された変換された法が格納されている。
【００５７】
以下に、補助桁送り値ｓｉとリダクション桁送り値ｓＮとの間の関係を示すために、図８ａから図８ｃについて説明する。
【００５８】
以下に、補助リダクション桁送り値ｓｉを用いたリダクション桁送り値ｓｚの計算を示すため、図８ａから図８ｃについて説明する。図８ａでは、中間結果Ｚと、法Ｎとが示されている。単なる例として、中間結果は４ビットを有しており、一方、上記法は９ビットを有している。このとき、図２のブロック２１４において、桁送りされた中間結果Ｚ’が計算されると考えられる。このことは、ｓｚを乗算することにより達成できる。従って、乗数８をゼロとすれば、このことは、乗算桁送り値ｓｚは８に繋がる。法リダクションを達成するために、法Ｎは、桁送りされた中間結果Ｚ’の大きさ（Groessenordnung）にならなければならない。本発明では、法Ｎは、桁送りされた中間結果多項式（Zwischenergebnis-Polynoms）Ｚ’の一番上のビットと、桁送りされた法Ｎの一番上のビットとが等しくなるまで桁送りされなければならない。このため、図８ｂから分かるように、ｓＮのリダクション桁送り値が３であることが必要である。
【００５９】
同じく、ｓＮから求め得るのに、実際にはｓｚが計算されてから、初めて行うことができ、すなわち、本発明にとって好ましいように、図２のブロック２１０と２１２とを並行して行うことは不可能であるということが、図８ｂから分かる。この理由から、補助桁送りパラメータｓｉが導入される。ｓｉの長所は、実際の工程のｓｚが分からなくても、この値を計算できることである。
【００６０】
図８ｃから、ｓｚは常にｓｉとｓＮとの和と同じであることが分かる。従ってｓｚとｓｉとは常に、以下の方程式が通用するように相関している：
ｓＮ＝ｓｚ−ｓｉ
従って、ｓＮを決定するための時間のかかる反復方法は、ｓｉを決定するために時間のかかる反復方法と、迅速な差分演算（Differenz-Operation）とに分解される。従って、事実上、両方の先読み方法を並行して実施できる。この際、連続して行われる唯一のことは、計算の前に、乗算先読みアルゴリズムによってｓｚの実際の値が既に計算されており、搬送されていることである（図２の矢印２３０）。
【００６１】
要するに、本発明は、既知のＺＤＮ方法と比較して、２/３ＮとＺの量との間の比較を簡易化して実施している。２/３Ｎの一番上の３２ビットが暗号法コプロセッサにおいて計算され、別個の３２ビットレジスタ、ＺＤＮレジスタに格納される。この際、２/３ＮとＺの量との比較は、既知のＺＤＮ方法に基づいて、ハードウエアにおいて、暗号法コプロセッサの制御部の構成部分である比較機を介して実施されていたようなこれまでに既知の方法に対して、ここでは、以下のようにして行われる。法Ｎは、ホストＣＰＵによってＮよりも大きな法ＮＴに変換される。この際、ＮＴの最初のビットは、２/３ＮＴとＺの量との比較が簡単になるように選択された定数である。例えば、ＳＰＡ、ＤＰＡ、タイミング作用、．．．のような情報漏洩作用（Informations-Leck-Attacken）に対する安全性を改善するため、ＮからＮＴへの変換は、説明してきたように、法のランダム化と組み合わせられてもよい。
【００６２】
従って、暗号法コプロセッサにおける２/３Ｎ計算が省かれる。ＺＤＮレジスタと、比較機論理は、同じく省かれる、このことから、比較機論理を省くことにより、集積回路領域はより小さくなり、暗号法コプロセッサにおける制御部分の複雑さが減少される。
【図面の簡単な説明】
【図１】  剰余乗算のための本発明の構想のフローチャートである。
【図２】  法Ｎの、ビットの第１部分ＮＴ、および、ビットの第２部分ＮＲへの分解を示す図である。
【図３】  変換された法ＮＴの、長さＬ（ＮＴ）を有する桁の第１部分、および、残りの桁への分解を示す図である。
【図４】  変換された法ＮＴの２／３倍の桁の表示を示す図である。
【図５】  ランダム化により変換された法の桁の概略的な表示を示す図である。
【図６】  本発明に基づく剰余乗算を実施するための演算装置の概略的な表示を示す図である。
【図７】  公知のＺＤＮ方法のための演算装置の概略的な表示を示す図である。
【図８】  図８ａから８ｃは、乗算桁送り値ｓｚと、補助桁送り値ｓｉと、リダクション桁送り値ｓＮとの間の関係を概略的に表示する図である。
【図９】  公知のＺＤＮ方法のフローチャートである。
【図１０】  公知のリダクション先読み方法のフローチャートである。
【符号の説明】
１０  法の変換
１２  剰余乗算の反復処理
１４  変換された結果の逆変換
３３  変換された法の上位部分
４４  変換された法の２／３倍の上位部分
７００  計算装置
７１０  Ｃレジスタ
７２０  Ｎレジスタ
７３０  Ｚレジスタ
７４０  反復ループ
７５０  ＺＤＮレジスタ
７６０  ＺＤＮ比較用制御論理
９００  ＺＤＮ比較の開始
９１０  ＺＤＮアルゴリズム用乗算先読み方法
９２０  左または右へのＺの桁送り
９３０  ＺＤＮアルゴリズム用リダクション先読み方法
９４０  左への法の桁送り
９５０  ＺＤＮアルゴリズム用３演算数加算
９６０  ＺＤＮアルゴリズムの終了
１０００  広域変数
１０１０  リダクション桁送り値の初期化
１０２０  ＺＤＮの計算
１０３０  ｎおよびｓＮの調査
１０４０  ｎの減少
１０６０  リダクション桁送り値の減少
１０８０  ＺＤＮ/２の計算
１１００  中間結果とＺＤＮとの比較
１１２０  リダクション先読みパラメータの決定
１１４０  リダクション先読みパラメータの決定
１１６０  ｎの計算
１１８０  リダクション先読みパラメータの決定
１２００  ｎの調査
１２２０  ｃｕｒ−ｋの計算
１２４０  ｃｕｒ−ｋの計算
【図４】
0004660066.tif 000003
【図６】
0004660066.tif 000004
【図７】
0004660066.tif 000005
【図８】
0004660066.tif 000006
【図１０】
0004660066.tif 000007
【図１】
0004660066.tif 000008
【図２】
0004660066.tif 000009
【図３】
0004660066.tif 000010
【図５】
0004660066.tif 000011
【図９】
0004660066.tif 000012