JP2006511833A - 被乗数のシフトを用いて乗算を計算するための装置およびその方法 - Google Patents

被乗数のシフトを用いて乗算を計算するための装置およびその方法 Download PDF

Info

Publication number
JP2006511833A
JP2006511833A JP2004562658A JP2004562658A JP2006511833A JP 2006511833 A JP2006511833 A JP 2006511833A JP 2004562658 A JP2004562658 A JP 2004562658A JP 2004562658 A JP2004562658 A JP 2004562658A JP 2006511833 A JP2006511833 A JP 2006511833A
Authority
JP
Japan
Prior art keywords
modulo
intermediate result
shift value
multiplicand
register
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2004562658A
Other languages
English (en)
Other versions
JP4302640B2 (ja
Inventor
フィッシャー,ヴィーランド
ピエール ザイフェルト,ジャン
ゼドラック,ホルガー
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Infineon Technologies AG
Original Assignee
Infineon Technologies AG
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Infineon Technologies AG filed Critical Infineon Technologies AG
Publication of JP2006511833A publication Critical patent/JP2006511833A/ja
Application granted granted Critical
Publication of JP4302640B2 publication Critical patent/JP4302640B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/60Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers
    • G06F7/72Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers using residue arithmetic
    • G06F7/722Modular multiplication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/60Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • G06F7/533Reduction of the number of iteration steps or stages, e.g. using the Booth algorithm, log-sum, odd-even
    • G06F7/5332Reduction of the number of iteration steps or stages, e.g. using the Booth algorithm, log-sum, odd-even by skipping over strings of zeroes or ones, e.g. using the Booth Algorithm

Landscapes

  • Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Mathematical Analysis (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Computational Mathematics (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Executing Machine-Instructions (AREA)
  • Complex Calculations (AREA)
  • Error Detection And Correction (AREA)

Abstract

剰余乗算を計算するための装置には、ルックアヘッドアルゴリズムを用いて乗算シフト値(sm)を得るために乗数のけたを調べるための手段(100)を含む。さらに、正の中間結果シフト値を決定する手段(104)を含む。さらに、中間結果シフト値(sz)と乗算シフト値(sm)との差である被乗数シフト値(sc)を計算する手段(106)を含む。前の反復工程と被乗数とから得られた中間結果を、適切なシフト量(scおよびsz)だけシフトする(108)。これにより、シフトされた値との3オペランド加算(112)を、場合によってはルックアヘッドパラメータ(vnおよびvc)を用いて実行する。大きい場合の多い乗数シフト値(sm)によってシフタの大きさが決まらないとき、固定化されたモジューロに基づく中間結果と被乗数とがシフトすることは、効率的なシフタの使用をもたらす。

Description

発明の詳細な説明
本発明は、暗号化に関するものであり、特に、乗数、被乗数、および、モジューロ(Modul、法)が暗号計算のパラメータである場合、暗号計算の範囲内のモジューロに基づいて、乗数と被乗数との乗算を計算するための技術思想に関するものである。
暗号化は、剰余演算(modulare Arithmetik)にとって、重要な適用例の一つである。暗号化に適した主なアルゴリズムとして、RSAアルゴリズムが知られている。このRSAアルゴリズムは、以下に示す、べき乗剰余(modularen Exponentiation)に基づいている。
C=Mdmod(N)
ここで、Cは、暗号化されたメッセージであり、Mは、暗号化されていないメッセージ(平文)であり、dは、秘密鍵であり、Nはモジューロである。モジューロNは、通常、2つの素数pおよび素数qを互いに乗算することによって生成される。べき乗剰余は、公知の自乗乗算アルゴリズムを用いて各乗算に分解される。最後に、指数dは二乗にまで分解され、これにより、べき乗剰余を複数の剰余乗算(Modulare Multiplikationen)に分解できる。べき乗剰余を計算によって効果的に実行できるように、べき乗剰余は、剰余乗算に分解される。この剰余乗算は、その後、剰余加算(modulare Additionen)に分解される。
DE 3631992は、乗算ルックアヘッド方法(Multiplikations-Vorausschau-Verfahrens)および還元ルックアヘッド方法(Reduktions-Vorausschau-Verfahren)を用いてべき乗剰余を高速化できる、暗号化方法について開示している。ZDN方法とも呼ばれる、このDE 3631992 C2に記載された方法については、図18に基づいて詳述する。アルゴリズムの開始工程900の後、全体変数M、C、および、Nを初期化して、次の剰余乗算を計算する。
Z=M*CmodN
ここで、Mは乗数であり、Cは被乗数である。Zは剰余乗算の結果であり、Nはモジューロである。
続いて、様々な局所変数を初期化する。これについてはここで詳述する必要はない。次に、2つのルックアヘッド方法を用いる。乗算ルックアヘッド方法GEN_MULT_LAでは、様々なルックアヘッド規則を用いて、乗算シフト値szおよび乗算ルックアヘッドパラメータaを計算する(910)。続いて、Zレジスタの現在の内容が、szけたまで左シフト演算を受ける。
それとほぼ同時に、還元シフト値SNおよび還元パラメータbを計算するために、還元ルックアヘッド方法GEN_Mod_LA(930)を実行する。次に、工程940では、シフトされたモジューロ値N´を形成するために、モジューロレジスタ(つまりN)の現在の内容を、sNけたまで左または右にシフトする。ZDN方法のこの中央3オペランド演算は、工程950において開始される。ここで、中間結果Z´を、工程920の後で、乗算ルックアヘッドパラメータaによって乗算される被乗数Cと、還元ルックアヘッドパラメータbによって乗算されるシフトされたモジューロN´とに加算する。現在の状況に応じて、このルックアヘッドパラメータaおよびbは、+1、0、または、−1の値を有することができる。
通常は、乗算ルックアヘッドパラメータaの値が+1であり、還元ルックアヘッドパラメータbの値が−1である。これを用いて、シフトされた中間結果Z´に被乗数Cが加算され、そこから、シフトされたモジューロN´が減算される。乗算ルックアヘッド方法を、それぞれの左シフトのプリセット値以上に認めると、つまり、szがその最大許容値(kとも示される)よりも大きいと、aは0になる。aが0であり、Z´が、剰余還元がすでに行われている(つまり、シフトされたモジューロの減算がすでに行われている)ために非常に小さい(特に、シフトされたモジューロN´よりも小さい)場合、還元を行う必要はない。したがって、パラメータbは0である。
工程910〜950を、被乗数の全てのけたまで処理するまで(つまり、mが0になるまで)実行する。また、これらの工程を、パラメータnが0になるまで実行する。このパラメータnは、シフトされたモジューロN´が元のモジューロNよりも大きいかどうかを示すものである。あるいは、上記パラメータは、被乗数の全てのけたがすでに処理されているにもかかわらず、さらに他の還元工程をZからモジューロを減算することにより実行する必要があるかどうかを示すものである。
結局、Zが0よりも小さいかどうかが算定される。Zが0よりも小さい場合、最後の還元に達するために、モジューロNをZに加算する必要がある。これにより、ようやく、剰余乗算の正確な結果Zが得られる。工程960において、ZDN方法を用いた剰余乗算が終了される。
工程910において乗算ルックアヘッドアルゴリズムを用いて計算される乗算シフト値szおよび乗算パラメータaは、乗数のトポロジー(Topologie)と、DE 3631992 C2に記載された、使用したルックアヘッド規則とによって得られる。
また、還元シフト値sNおよび還元パラメータbを、同様にDE 3631992 C2に記載されているように、Zレジスタの現在の内容を値(2/3)×Nと比較することにより決定する。ZDN方法の名称(ZDN=Nの3分の2)は、この比較に基づいたものである。
図18に示したようなZDN方法は、剰余乗算を3オペランド加算(図18のブロック950)に帰着させる。ここで、演算時間効率を上げるために、乗算ルックアヘッド方法、および、それに伴って生じる還元ルックアヘッド方法が使用される。これにより、演算時間に関して、モンゴメリ還元法(Montgomery-Reduktion)よりも効果が得られる。
次に、図19に基づいて、図18のブロック930において実行される還元ルックアヘッド方法について詳述する。初めに、ブロック1000では、局所変数(つまり、還元ルックアヘッドパラメータbおよび還元シフト値sN)の記憶位置の確保を実行する。ブロック1010では、還元シフト値sNをゼロに初期化する。続いて、ブロック1020では、モジューロNの(2/3)に相当する値ZDNを計算する。この、ブロック1020において決定される値は、暗号コプロセッサのそれぞれのレジスタ(ZDNレジスタ)に格納される。
次に、ブロック1030では、変数nが0であるか、または、シフト値sNが−kであるかを算定する。kは、ハードウェアによって指定された最大シフト値を規定した値である。ファーストランでは、ブロック1030に「いいえ」と答える。これにより、ブロック1040では、パラメータnが減少し、ブロック1060では、還元シフト値も1まで減少する。次に、ブロック1080では、変数ZDNが新たに割り当てられ、それを半分の値にする。この値は、ZDNレジスタに存在する値を右にシフトすることにより、容易に得られる。次に、ブロック1100では、現在の中間結果の絶対値がZDNレジスタに存在する値よりも大きいかどうかを確認する。
ブロック1100のこの比較演算は、還元ルックアヘッド方法の中央演算である。質問に「はい」と答えると、反復が終了し、ブロック1120に示したように、還元ルックアヘッドパラメータbが割り当てられる。これに対して、ブロック1100において答える質問に「いいえ」と答えた場合、ブロック1030において現在の値nおよびsNを調べるために、反復的に元の位置にジャンプして戻る。ブロック1030において「はい」と答えた場合は、ブロック1140にジャンプする。このブロックでは、還元パラメータnがゼロに設定される。
これにより、図18のブロック950に示した3オペランド演算では、モジューロを加算または減算しないようになる。つまり、中間結果Zが、剰余還元が必要ではない程に小さかったということである。次に、ブロック1160では、変数nが新たに割り当てられる。ここで、ブロック1180では、図18のブロック940に必要である還元シフト値sNを計算する。これにより、モジューロの左シフトを実行することにより、シフトされたモジューロを得ることができる。
最後に、ブロック1200、1220、および、1240では、レジスタのオーバーシュートが確実に実行されないようにNレジスタの現在の割当てを調べるために、他の変数MAXおよびcur_kに関してnおよびkの現在の値を調べる。この詳細は、DE 3631992 C2に詳述されているが、本発明では重要ではない。
また、図18および図19に示したアルゴリズムを、図10に示したように、ハードウェアを用いて実行してもよい。ブロック950において3オペランド演算を行うために、演算ユニット700(図10ではAUと示されている)が必要である。このユニットが、被乗数用のレジスタC710と、モジューロ用のレジスタN720と、剰余乗算の現在の中間結果用のレジスタZ730とに接続されている。図10から、さらに、3オペランド演算の結果がフィードバック矢印740を介してZレジスタ730に格納されることが分かる。
さらに、図10から、レジスタが互いに接続されていることが分かる。図19のブロック1020において計算された値ZDNを、それぞれのZDNレジスタ750に格納する必要がある。このZDNの比較、および/または、図19に示した反復ループを、さらに、ZDNの比較を行うための各制御論理回路760によって繰り返し制御する。
したがって、Z:=M×C mod Nを計算するためのZDNアルゴリズムは、主に、以下の2つの演算を行う。
1.レジスタZおよびNのためのシフト値szおよびsiの計算。これにより、以下の方程式が満たされる。
(2/3)N×2-si<|z|≦4/3N×2-si、および、
2.3オペランドの合計の計算。
Z:=2szZ+aC+b×2sz-si
乗算ルックアヘッドパラメータaおよび還元ルックアヘッドパラメータbは、公知のように、−1、0、および、+1の値をとることができる。
また、中間結果Z、被乗数C、および、モジューロNが、長大数であることに留意されたい。この長大数とは、けたおよび/またはビットの数が512よりも十分に大きくてもよく、2048けたまで有することができる数である。
剰余乗算を実行するための、上記の知られた方法は、上記式を少し書き換えた以下の3オペランド加算を有している。
N:=N*2sn
Z:=Z*2sz+Vc*C+Vn*N
上記の方程式では、szは、公知のブース法(つまり、乗算ルックアヘッド方法)から計算されるような、中間結果Zのシフト値を示している。また、snは、上記したように計算されるNのシフト値を示している。
実際に実行するに当たり、単一のビットシフトを長大数レジスタにおいて最大シフト値まで達成できる長大数をシフトするためのシフタを供給するので、シフト値szおよびsnは、限りなく大きくなくてよい。したがって、公知のZDN方法にしたがって動作する暗号化プロセッサでは、0〜5のシフト値szを用いることができる。モジューロのシフトには、−3〜+3のシフト値が使用される。
これらの限られたシフト値についての不都合は、例えば、前の反復工程から中間結果Zをシフトするためのシフト値が、現在の反復工程では小さすぎることが多いという点にある。つまり、例えば5よりも大きいシフト値を実現できるような乗数が得られたことを、乗算ルックアヘッドアルゴリズムが確認する。また、つまり、ルックアヘッド規則に応じて、例えば5以上並んだゼロが乗数に存在しているということである。乗数Mが1024ビット、またはさらに、2048ビットを有していることを考えると、この状況は非常に頻繁に生じる。
シフト値が制限されているので、公知のZDN方法は、「特殊な場合」に、3オペランド演算を正確には最大シフト値で実行し、乗算ルックアヘッドパラメータvCを0に設定することにより(つまり、この工程では被乗数を加算せずに)対処している。次の反復工程では、新たな乗算シフト値が計算される。この乗算シフト値は、最大シフト値szmaxよりも大きいと、それによって再び制限される。これにより、再び、被乗数が加算されなくなり(つまり、シフトされた中間結果およびシフトされたモジューロのみが、モジューロのための符号を考慮して加算される)、「3オペランド加算」ができなくなる(degenerierten)。
上記の考察から、このような特殊な場合に、乗算ルックアヘッドアルゴリズムにおいて大きなシフトが認められるなら、このシフトを、シフト量szmaxが制限されているので、最大効率にて変換できない、ということが分かる。
したがって、公知のZDN方法は、乗算ルックアヘッド方法の全ての場合において、効率向上を利用できない。効率を向上するには、公知のZDN方法の場合、シフタを増加させる必要がある。しかし、シフタの増加によって、特にチップカード用の集積回路では、チップ面積を拡大する必要がある。これにより、チップカード製造者によって提供される基準チップ面積が狭いために、上記拡大を許容できなくなり、および/または、著しいコスト高が生じてしまう。
この点については、特に暗号化プロセッサの分野には、非常に競争の激しい市場が存在することに留意されたい。この市場では、価格のわずかな差によって、ある提供者が生き延び、他の提供者は生き延びられない。なぜなら、チップカードは通常量産されるので、チップカード用のプロセッサは大量生産品であるからである。
他方、チップカードプロセッサに対する、かなりな程度のセキュリティ要求が存在している。なぜなら、チップカードを使用するのは、通常ユーザであるが、さらに、攻撃されるチップカードプロセッサを完全にコントロールできる攻撃者も、チップカードを入手できる。したがって、暗号化アルゴリズムのセキュリティ要求はますます高くなる。このことは、例えば、RSAアルゴリズムのセキュリティをさらに上げるために、オペランドが例えば1024ビットの長さだけではなく、2048ビットの長さである必要がある、ということである。
しかしながら、チップカードの製造者によって、プロセッサに必要な全ての面積は予め設定されている。つまり、チップカードプロセッサの製造者は、事前に設定された面積に、演算装置および所要面積の多いメモリを配置する必要がある。他方、ますますコストのかかる暗号化アルゴリズムには、多くのワーキングメモリも必要である。したがって、演算装置の拡大により、例えばより大きなシフタを設置することになるが、上述の理由によって、そのような設置は多くの場合許容され得ない。つまり、演算装置(例えばシフタ)に多くのチップ面を付与すると、それによって、より小さなワーキングメモリを、事前設定されたチップ面に実現しなくてはならなくなる。これにより、再び、非常に複雑な特定の暗号化アルゴリズムを全く実施できず、および/または、上記アルゴリズムを競争相手の製品によって実施および実行するよりも、計算速度が遅くなる。
本発明の目的は、乗算の計算に効果的なコンセプトを提示することにある。
この目的は、請求項1の装置、請求項12の方法、または、請求項14のコンピュータプログラムによって達成される。
本発明は、公知のZDN方法において固定されていた被乗数Cの代わりに、モジューロが、モジューロレジスタの所定位置に保持されており、および/または、被乗数Cがモジューロに基づいてシフトされるので、現在のシフタ資源をよりよく利用できるという知見に基づくものである。これにより、以下に詳述するように、乗算ルックアヘッドアルゴリズムによって計算されたシフト値(以下にsmと示す)が、パラメータのシフトをすぐには導かず他のシフト値に結合されて、差を用いて、上記被乗数Cのシフト値を導くことができる。つまり、公知のブース法によって決定された乗算シフト値smが、公知のZDN方法において行われるように、中間結果をこの量までシフトするために直接用いられず、上記乗算シフト値は、本発明にしたがって可変とした被乗数Cがそのレジスタにてシフトされるシフト量までのシフト量により還元されるように、シフタを用いて確実に実現されるものである。
本発明にしたがった新しいアルゴリズムが、反復工程において実行される3オペランド加算を以下のように計算する。
C:=C*2SC
Z:=Z*2SZ+VC*C+Vn*N
被乗数シフト値scを、以下の方程式にしたがって、中間結果シフト値と乗算ルックアヘッドシフト値との差から計算する。
c=sz−sm
中間結果シフト値szが以下で説明するように常に0よりも大きいので、被乗数シフト値scは量的に乗算シフト値smよりもますます小さくなる。これにより、公知のブース法により生じる大きくなる可能性がある乗算ルックアヘッドシフト値smは、回路に備えられたシフタに対する要求に対して、完全に支配的にはならず、中間結果シフト値szの値により、量的な意味で、より小さな影響力しか持たなくなる。
現在のシフタ資源を備えた演算装置については、本発明の方法により、剰余乗算段階において2つのシフタ全体を使用し、還元段階では、長い方のシフタを使用することができる。したがって、この短い方のシフタと長い方のシフタとの分割は、現在の使用において、剰余乗算の終わりにおいて、還元をできる限り速く実行する(つまり、長い方のシフタが必要である)という上記実際上の要求に対応するものとなっている。
さらに、本発明の方法により、現在のシフタ容量において、乗算ルックアヘッドアルゴリズムのシフト値をより大きく取り扱うことができる。これにより、より少数の特殊な場合が生じても、乗算ルックアヘッドアルゴリズムの性能をできる限りよく実行できる。
本発明の装置は、乗算ルックアヘッドシフト値smを得るために、乗算ルックアヘッドアルゴリズムを用いて現在の反復工程の乗数のけたを調べるための装置を含んでいる。さらに、0よりも大きい中間結果シフト値szを決定するための装置が備えられている。これにより、より上位のビットに中間結果シフト値szだけシフトされた、現在の反復工程の先に行われた先行の反復工程から供給された中間結果が、最上位のビットを有するようになる。このビットの有意性(本発明の効果への有意性)は、先行の反復工程から供給された中間結果の最上位のビットよりも、モジューロの最上位のビットに近い。さらに、中間結果シフト値szと乗算ルックアヘッドシフト値smとの差である被乗数シフト値scを計算するための装置が、備えられている。さらに、シフトされた中間結果とシフトされた被乗数とを得るために、モジューロに基づいて、中間結果を中間結果シフト値によりシフトし、かつ、被乗数を被乗数シフト値scによりシフトするための装置が、備えられている。
現在の反復工程の中間結果を得るために、シフトされた中間結果と、シフトされた被乗数と、モジューロとを用いて、3オペランド加算を実行する。
中間結果シフト値szの決定には、いくつかの方法がある。最適の特性(例えば最大処理速度)は、シフトされた中間結果のMSBをモジューロのMSBと同じにすることにより、良好な還元が得られるように(つまり、現在の中間結果が3オペランド演算の後で量的に可能な限り小さくなるように)、中間結果が常に最大にシフトされることによって、達成される。これらと比べて効率が低減される、近似的な(概略的で簡素化された)方法は、中間結果シフト値szが最大にて選択されず、大まかな推定によって近似的方法にて選択されるか、または、例えば中間結果シフタの長さによって制限されて選択されるかによって達成される。基本的に、中間結果シフト値szが0よりも大きく選択されると、前述したように性能向上が達成される。つまり、正確には、被乗数シフト値scは量的に乗算ルックアヘッドシフト値smよりも小さくなる。これにより、値smは、もはや完全には支配的ではなくなり、シフタの大きさに対し影響しなくなる。
好ましい実施形態では、モジューロは、モジューロレジスタにおいて、左寄せされて配置されている。できる限り大きな容量のアンダーフローバッファが確保されていることにより、被乗数が現在のレジスタの最大量までアンダーフローバッファ内にシフトできる。
さらに、本発明の好ましい実施形態では、DE 10111087 A1に開示されているように、モジューロ変換(Modultransformation)が使用される。
他の効率改善のために、本発明の実施形態では、現在の工程の本来の中間結果よりも速く得られる近似的な中間結果を計算するために、あたかも2オペランド加算にスリム化されて、ある程度縮小されたような3オペランド加算を、本来の3オペランド加算と同時に実行することが好ましい。現在の工程の正確な中間結果を計算すると同時に、上記現在の工程の近似的な中間結果に基づいて、次の工程に係るルックアヘッドパラメータの計算を実行できる。したがって、3オペランド加算を実行するためのコストのかかる大きな演算装置が現在の工程の中間結果を計算した時点で、すでに次の工程のルックアヘッドパラメータが存在していることが好ましい。これにより、3オペランド演算装置は、最近(直前)の反復工程が完了した直後に、現在の反復工程の正確な中間結果の計算を開始できる。これにより、現在の工程の正確な中間結果の計算と並行して、次の工程に係るルックアヘッドパラメータの計算は、近似的な3オペランド加算の「スリム化版」である近似的なオペランド加算に基づいて実行される。
また、本発明の他の実施形態では、モジューロ変換と次の反復工程に係るルックアヘッドパラメータの並行計算とを組み合わせることが好ましい。なぜなら、この場合、モジューロ変換によって特定され、前述したモジューロの上位ビットに基づいた近似的な中間結果の計算は、非常に簡略化されており、したがって著しく高速化される。
本発明の好ましい実施形態について添付の図を参照して以下で詳しく説明する。
図1に、複数の反復工程を含む反復方法を使用して、モジューロNに基づいて、乗数Mと被乗数Cとの乗算を計算するための、本発明の装置のブロック図を示す。ただし、乗数、被乗数、モジューロは、整数または多項式であってもよい。
図18に関連して説明されたように、乗算方法は、特に暗号化計算では、原則的に同一に実施される複数の反復工程を使用して乗算が計算されるという点で反復性のある方法である。図1に、反復工程の実施に含まれていてもよい手段および/またはサブ工程を示す。
詳しく説明すると、図1に記載の本発明の装置は、乗算ルックアヘッドアルゴリズムを使用して、現在の反復工程の乗数Mのけたを調べる手段100を含む。手段100は、乗算ルックアヘッドシフト値smを手段100の出力部102にて取得するようになっている。
本発明の好ましい実施形態では、乗算ルックアヘッドアルゴリズムは、公知のブース法のアルゴリズムである。公知のブース法のアルゴリズムは、複数のルックアヘッド規則を実施する場合、乗算ルックアヘッドシフト値smの他に、乗算ルックアヘッドパラメータvcも生成する。しかしながら、乗算ルックアヘッドアルゴリズムが、ただ1つまたは制限された数のルックアヘッド規則を、(充分に大きなシフタが存在していることを前提として)符号パラメータvcが常に「+1」に等しいように使用していれば、ルックアヘッドパラメータを正確に計算する必要はない。しかしながら、他のルックアヘッド規則では、符号パラメータvcが−1に等しい場合もある。大きすぎる乗算ルックアヘッドシフト値smが取得されていれば、乗算ルックアヘッドパラメータvcが0に等しい場合もある。
図1に示す装置は、さらに、中間結果シフト値szを算出するための手段104を備えている。手段104は、原則的に、0よりも大きな中間結果シフト値を算出するように設計されている。中間結果シフト値により、処理される中間結果は、中間結果シフト値szによりシフトされると、最上位のビット(MSB)を有することとなる。最上位のビットの有意性(重み)は、先に行われた反復工程の中間結果の最上位のビットよりも、モジューロの最上位のビットの有意性に近い。言い換えれば、このことは、より上位のビットがレジスタ内の左側に配置されており、下位のビットがレジスタ内の右側に配置されている場合は、中間結果シフト値szによって、中間結果が少なくとも1けた左へシフトされることとなる。
ここでは、最上位のビット(MSB)が、レジスタ内の有用情報を有するビットであることに留意されたい。ある数がレジスタ長の最大値よりも小さく、かつ、上記数がレジスタ内の右側に配置されていれば、上記数はレジスタ内の何処かに配置されている最上位のビットを有することになる。この数のMSBの上側には、レジスタ内にて0がある可能性がある。しかしながら、これらの0は重要な情報を有していない。したがって、「最上位のビット」は、数のほかのビットと比べて最上位の有意性を有しており、かつ、有用情報も有している数のビットと理解される。
具体的な実施形態では、中間結果シフト値szを決定するための手段104が、シフトされた中間結果のMSBがモジューロのMSBと同じ重みを有するように、中間結果をできる限り左へシフトするように設計されている。この場合は、モジューロ減算(すなわち、還元)により、3オペランド加算後の新しい中間結果は著しく小さくなる。このような状態が、得ようと努力なされてきたものである。なぜなら、このとき、還元は常に良好に、迅速に、効率的になされるからである。以上のように、中間結果シフト値を算出するための手段104は、中間シフト値szを0よりも大きく生成すれば、既に効果的である。
本発明の装置は、さらに、中間結果シフト値szと乗算ルックアヘッドシフト値smとの間の差に等しい被乗数シフト値scを計算するための手段106を備えている。図1のブロック106に記載されている等式から、既に、中間結果シフト値が0よりも大きい場合、乗算シフト値smは、完全に支配的なものではなくなり、シフタ寸法の決定に対する影響力がもはやない。このような乗算ルックアヘッドシフト値smは、szが0よりも大きければ、既に量的に還元されていることが分かる。
図1に示す装置は、さらに、中間結果シフト値szにより中間結果Zをシフトするための手段108を備えている。中間結果シフト値szは、手段104から、その出力110を介して、手段106と手段108との双方に供給される。さらに、シフトのための手段は、シフトされた被乗数を取得するために、被乗数Cを被乗数シフト値scだけシフトするように設計されている。
さらに、図1に示す装置は、シフトされた中間結果、シフトされた被乗数およびモジューロを使用して3オペランド加算を実施するための手段112を備えている。上記法は、現在の反復工程の中間結果を取得するために、固定されている。現在の反復工程の中間結果は、3オペランド加算手段112の出力114から出力される。
ここでは、シフト手段108と3オペランド加算手段112とが、必ずしも別々の手段として実施されていなくてもよく、オペランドのシフト(すなわち、オペランドに2Sを掛ける乗算)は、必ずしもハードウェアによって実施される必要はなく、すなわち、現在のレジスタシフトによって実施される必要はなく、原則的に、2Sの乗算は、ソフトウェアによって行われてもよいということに留意されたい。この場合は、各手段108、112は、乗算および後続の加算との機能を図1のブロック112に示す等式に基づいて実施する単一の手段にまとめられていてもよい。
図2に、3つの関連レジスタ、つまり、モジューロレジスタN200、被乗数レジスタC202および中間結果レジスタZ204を概略的に示す。
被乗数レジスタ202の被乗数をシフトする場合は、モジューロNが、モジューロレジスタ200に対し固定的(内容や位置が変化せず)に書き込まれる。さらに、モジューロNは、モジューロレジスタ200へ左寄せして書き込まれることが好ましい。その結果、モジューロNの最上位のビット(MSB)は、最上位のレジスタけたに書き込まれる。この最上位のレジスタけたは、図2では、一番左に記載されており、206の符号が付けられている。
隣接するレジスタセルには、モジューロNのビットMSB−1、MSB−2、MSB−3などが、モジューロの最下位のビット(LSB)208まで続く。モジューロNは、例えばRSA計算で使用される正規のモジューロ(法)、または、以下で説明されるような好ましくは変換されたモジューロのどちらかであって、反復計算の間中、モジューロレジスタ200中に固定されている。
これに対して、被乗数Cおよび中間結果Zは、シフト手段または対応するシフタを使用することにより、レジスタ付近の二重矢印によって示すように、レジスタ202・204中を移動できる。図2は、モジューロNに基づいて乗数Mと被乗数Cとの乗算を計算するときの任意の反復工程での典型的な状況を示している。図2から分かるように、被乗数Cは、既に、5ビット右へ、つまり、アンダーフローバッファ210へシフトされている。さらに、ちょうど中間結果レジスタは、現在の中間結果を、3ビットだけ上位へシフトできるように規定されていることが理解される。
図2に示す実施形態では、モジューロNは、常に左寄せしてモジューロレジスタ200に配置されている。モジューロNのビット長に応じて、モジューロNのLSB208は、モジューロレジスタのどこに規定してもよい。したがって、モジューロレジスタにあるモジューロNのLSB208の下側のビット210は、被乗数Cが移動してもよいアンダーフローバッファを規定する。
以下では、被乗数Cのシフトの方法を、被乗数Cが一定であった公知のZDNアルゴリズムと比較する。従来のZDN方法では、2つのバイナリ数の工程ごとの乗算と同じように、原則的に、オーソドックス数学に基づいた処理がなされる。この処理では、各反復工程で効率的な還元を行うために、中間結果が、乗算ルックアヘッドシフト値だけ左へシフトされ、次に、モジューロが同じく上位へシフトされる。一方、本発明の方法では、あたかも、コンマの位置がレジスタ内を移動するようになっている。コンマの移動は、コンマを規定する被乗数がシフトされることによって生じる。
被乗数シフトがシフトされる好ましい実施形態では、中間結果レジスタ204の値Zが、常にできる限り高くシフトされる。その結果、還元を生じさせることができる。図2に示す場合では、シフト値sz218(3ビット)が、次の反復工程のために選択された場合、その結果として、Zレジスタ204にある現在のZ値のMSB220は、その有意性が、モジューロのMSB206に等しくなる。したがって、レジスタZからモジューロNが減算される場合は、上記両者間の差は比較的小さいであろう。なぜなら、上記両者の数は、ほほ等しい大きさだからである。ここで、正の数を用いても、負の数と同じように良好に計算を行えることに留意されたい。
次の工程では、図1に関連して説明されたとおり、どの乗算ルックアヘッドシフト値smが受け容れられるかを見出すために、現在の反復工程の乗数Mのけたが調べられる。したがって、図1のブロック106に記載のように、被乗数レジスタ202のシフト値scはsz−smから決定される。
例えば乗算ルックアヘッドアルゴリズムが、乗算シフト値smが「3」であることを決定する場合は、つまり、乗算シフト値smがsz218に等しい場合は、0に等しい被乗数シフト値scが計算される。この結果を公知のZDNアルゴリズムと比較すると、この場合は、szがブース法のアルゴリズムによって許容されるように選択されていることが分かる。したがって、コンマシフト、すなわち、被乗数Cのシフトを行う必要はない。
以下に、smがszよりも小さく、つまり、smが図2に示す例ではたった2であり、一方でsz218は3に等しい場合について説明する。公知のブース法のアルゴリズムと比較して、このことは、中間結果が、実際には1ビットだけ上位へシフトされすぎていることを意味している。つまり、ZはCとの加算のためには因数2だけ、つまり、1レジスタけた分のシフトだけ大きすぎる。これを補償するため、本発明の新しい方法では、被乗数Cが同じく1ビットだけ上位へシフトされる。言い換えると、Cおよび/またはCのLSB212によって規定されているコンマは、選択されたZシフト値sz218に合うように調節される。Cが1ビットだけまたはscの値だけ上位へシフトされた後、CとZとの関係は再び明らになっており、図1のブロック112ではエラーの無い加算が行われる。
さらに、szができる限り大きく選択されていることにより、図1のブロック112の3オペランド加算では、効率的な還元も行われる。なぜなら、Zは、sz218だけシフトされることにより既にNの桁とほぼ同じになっているからであり、また、さらに被乗数Cも加算されているから、その結果、各数N、Zはいずれにせよ類似した桁になっている。
mがszよりも大きい場合について以下で説明する。説明してきたとおり、sz218を最大値に選択することが有利である。図2の3つのビットよりも大きなszの値は不可能である。なぜなら、ZのMSB220はレジスタ204から「抜け落ちる」からである。
このとき、ブース法のアルゴリズムが、szよりも大きなsmを決定するならば、図2に示す反復方法では、中間結果値が、上位へ十分にシフトされず、例えば小さすぎる1ビットだけ上位へシフトされる。このことは、対抗処置を講じなければ、3オペランド加算のためには、ZがCよりも小さすぎることを意味している。この状態を改善するため、被乗数Cも、szとsmとの間の差に基づいて例えば1ビットだけ右へシフトする。その結果、CとZとの関係がふたたび一致する。この場合も、同じく、良好な還元が行われる。なぜなら、Zは、できる限り上位へシフトされているので、Nの桁になっており、その結果、ZとNとの間の差は同じく比較的小さな数であり、すなわち、図1のブロック112の3オペランド加算の範囲内で、良好な還元が行われる。
したがって、図2に示す方法は、既存のシフタ資源の利用に関して2つの重要な利点を有している。図1のシフト手段108に実施できるようなZおよびCをシフトするためのこのようなシフタを図3に示す。この図では(schematisch)シフタが、Zをシフトするための第1シフタ部分108aと、Cをシフトするための第2シフタ部分108bとを備えている。
第1シフタ部分108aは、正の方向だけにシフトできるシフタである。第1シフタ部分108aは、Zをシフトするために使用される。このことから、ZのLSB214を、アンダーフローバッファ210へは決してシフトできないことが分かる。
しかしながら、図2は、CのLSB212およびZのLSB214は同じ価数を有しているので、3オペランド加算の後の状態を示すものである。CのLSB212およびZのLSB214が同じ価数を有している理由は、3オペランド加算では、LSB214の算定が、この3オペランド加算の前にZがどれだけ上位へシフトされていたかに関係なく、図1のブロック112の全ての関連するオペランドのLSBによって行われるからである。Nは一定であり、Cを下位へシフトできるので、Cは、3オペランド加算の後に、ZのLSBを常に算定する。
Zが常に、既述のように、sz218だけ左へシフトされるならば、CおよびZのLSB212・214は、3オペランド加算の後に再び一致するように、3オペランド加算の前に変化するであろう。smは常に正なので、乗数が一度も逆方向へ処理されず、つまり、下位のビットからより上位のビットへ処理され、szは常に正なので、scの量は常にszよりも小さい。その結果、ZのLSBは、常にCによって決定される。
したがって、+5だけシフトできる大きなシフタ108aを、szのために使用する。その結果、この大きなシフト値によって、Zは常にできる限りNの近くへシフトされる。ここで、図2に示す状況は、必ずしも典型的な状況ではないことに留意されたい。ZおよびNが、先行する3オペランド加算でほぼ同じ大きさであれば、結果としてMSB220が、左へ最大限シフトされているにもかかわらず、モジューロNのMSB206よりも小さな価数を常に有していることも同じ程度でありえる。
この状況を、できる限り稀なものとするために、一方向だけにシフトできる大きなシフタ、つまりシフタ108aを、Zをシフトするために使用する。被乗数Cを2方向にシフトする必要があるので、これらの被乗数のためには、上位(つまり、左)へのシフト能力、および、下位(つまり、右)へのシフト能力を有するシフタが使用される。
しかしながら、scは常に正の数の差となるので、シフタを非常に大きく設計する必要はない。したがって、−3から+3のシフト能力を有するシフタで充分なことが証明された。
既存のシフタ容量は、したがって、被乗数Cを変数として有する、本発明の新しい方法によって効率的に利用される。なぜなら、乗算シフト値sm(この値は大きい傾向がある)を直接シフトに使用する必要は決してないからであり、また、それゆえに大きなシフタを、還元目的で(つまり、ZをNにできるだけ近くシフトするために)使用できるからである。その結果、良好な還元が行われる。
従来のZDN方法および被乗数Cを変数として有する新しい方法の反復工程の実施形態では、乗算よりも還元が常に少し「遅れを取って」いることが証明された。
このことは、従来のZDN方法では、乗数Mのけた全体を処理終了後、従来の方法でシフトされたモジューロNは、元来のモジューロよりも依然として大きいということによって顕著になる。言い換えれば、従来のZDN方法では、現在のモジューロの一部が、依然としてオーバーフローバッファに存在していた。したがって、さらに数回の剰余オペランド加算を実施する必要があった。余りオペランド加算では、乗数けたを調べる必要は無くなるが、モジューロのMSBが、オーバーフローバッファから再び出て行き、計算の開始時と同じ、つまり、レジスタ内で第1反復工程の前と同じけたになるまで、依然として非常に多くの3オペランド加算を、シフトされたモジューロ(右へシフトされたモジューロ)によって実施する必要があった。したがって、乗算ルックアヘッドアルゴリズムは、典型的には、既に、還元ルックアヘッドアルゴリズムの数工程前に「終了」している。
本発明に係る新しい方法でも、このような状況は生じる。しかしながら、このような状況は、モジューロがオーバーフローバッファにあるということということによっては顕著にならない。新しい方法では、モジューロが固定されており、従来のようにシフトできない。すべての乗数けたが処理され、LSB212が依然としてモジューロLSB208よりも下位であることが確認される場合は、同じく、さらに数回の最終的なオペランド加算を、乗数けたは既に処理されてしまっている乗数けたを用いずに、実施する必要がある。乗数けたは既に処理されてしまっているので、被乗数Cも必要なくなる。
したがって、全ての乗数けたが処理されてしまっている場合は、LSB208によって定義される「ゼロ線」をシフトする必要がなくなる。全ての乗数けたが処理されてしまっている限り、被乗数Cはもはや処理とは無関係なものとなっている。したがって、全ての乗数けたが処理されてしまっている場合は、一工程において常に3のシフト値だけ左へシフトする小さなシフタ108bを使用して、被乗数CのLSB212を上位へシフトする必要がなくなる。その代わり、全ての乗数けたが処理されてしまった時点で、被乗数は、処理とは無関係なものとなっており、必要なくなる。
しかしながら、最終的な還元には、中間結果レジスタZのLSB214がアンダーフローバッファ210のどこにあるかが注目される。こうして、被乗数CのLSB212は、依然として乗数けたが存在している最後の3オペランド加算で、中間結果レジスタZのLSB214の有意性を決定するものである。
最終的な還元は、LSB214が、モジューロレジスタ200のLSB208によって定義される「ゼロ線」上に来るまで実施される。しかしながら、このとき、Z値を中間結果レジスタ204中の「上位へシフトすること」は、図3に示す実施形態では常に5つのシフト値を許容する大きなシフタ108aによって行われる。
したがって、最終的な還元は、大きな工程で行われ、一方、公知の方法では、これを小さなシフタによって行う必要があった。なぜなら、モジューロNを再びその元来の位置へ戻す必要があったからである。これに対し、本発明の新しい方法では、モジューロNが固定されており、一方、コンマは、被乗数Cによって対処される。
しかしながら、この被乗数Cは、最終的な還元のためには無関係なものとなっている。なぜなら、乗数けたが存在しなくなるからである。したがって、乗算ルックアヘッドパラメータvcは、いずれにせよ0である。その結果、「機能停止された(degenerated)」最終的なオペランド加算でZを上位へシフトするために、5以下のシフトを許容する大きなシフタZを常に使用してもよい。
要するに、図3に示すシフト手段の一例は、Zのための5シフタ、および、Cのための−3,...,+3シフタによって、長さ8(!)のブース法の仮想シフタ、および、長さ5の還元シフタを提供する。
本発明の新しい反復乗算方法に関しては、以下に図12から図17bまでを参照して詳しく説明される。これらの図には、本発明の好ましい実施形態が、並行して説明される擬似コードで示されている。図示されたこの実施形態では、被乗数Cをシフトする新しい方法が、モジューロ変換の方法と、乗算ルックアヘッドパラメータおよび還元ルックアヘッドパラメータを並行して計算するための新しい方法とに組み合わされている。
図4に、モジューロに基づいて被乗数と乗数との乗算を、複数の反復工程を有する反復方法によって計算するための装置のブロック図を示す。なお、上記複数の反復工程は、先行する反復工程と現在の反復工程とを含んでいる。図4に示す装置は、被乗数Cをシフトできる新しい方法(図1に示す)のルックアヘッドパラメータsm・sc・szの計算を加速するため、および、図18のブロック920・940のルックアヘッドパラメータsz・sn、つまり、公知のZDN方法のルックアヘッドパラメータを計算するために使用できる。
ここでは、状況によって、ルックアヘッドパラメータは、シフト値であり、または、被乗数および法のための符号であることに、留意されたい。なお、上記符号は、利用可能なシフタおよび利用可能なアンダーフローバッファの大きさに関しては、ルックアヘッド規則およびシフト値の状況に応じて算定されており、以下で説明するように+、−、または0でもよい。
図4に示す、反復方法を加速して実施するための装置は、正確な3オペランド加算を実施するための手段400を備えている。なお、正確な3オペランド加算は、先行する反復工程のために、先行の中間結果ZvorつまりZpre402と、モジューロN404と、被乗数Z406と、図4の概略図では配線408を介して供給される先行のルックアヘッドパラメータとを使用して実施される。
正確な3オペランド加算を計算するための手段400は、現在の反復工程ZaktまたはZcurのための正確な中間結果(図4では410で示す)を提供する。図4に示す装置は、さらに、近似化されたオペランド加算を実施するための手段412を備えている。なお、近似化されたオペランド加算は、先行する反復工程のために、先行する中間結果Zvorと、モジューロN404と、図4では配線408を介して供給される先行するルックアヘッドパラメータの少なくとも一部とを使用して、現在の反復工程の近似化された中間結果(図4ではZaktapproxで示す)を取得するために実施される。
現在の反復工程の近似化された中間結果414は、正確な中間結果Zakt410に相当していないが、正確な中間結果Zakt410の推定または予測である。この中間結果414と、乗数M416とを使用して、現在のルックアヘッドパラメータが計算され、配線418を介して出力される。既述のように、現在のルックアヘッドパラメータ(つまり、現在の近似化された中間結果414および乗数416)を計算するための手段417は、現在のルックアヘッドパラメータ418を計算するために使用される。
図4に示す装置は、さらに有効である。なぜなら、正確な3オペランド加算を実施するための手段が、以下のように設計されているからである。すなわち、正確な3オペランド加算を、現在の反復工程で、現在の反復工程の正確な中間結果410を使用して、すなわち、モジューロN404と、被乗数406と、手段417から配線418を介して供給される現在のルックアヘッドパラメータとを使用して実施するように設計されているからである。
この状況を、図4に概略的に示す。図4には、現在の反復工程の正確な3オペランド加算を計算するための手段400’と、現在の反復工程の近似化されたオペランド加算を計算するための手段412’と、その後続のルックアヘッドパラメータを計算するための手段417’とが示されている。詳細には、手段412’は、現在の中間結果410とモジューロNとを使用して、近似化されたオペランド加算を実施するように設計されており、手段400’で正確に計算され、420で示されるその後続の工程の中間結果Zを、Znachapprox422として推定するためのものである。
次に、値422を使用して、その後続のルックアヘッドパラメータを、少なくとも乗数M416を用いて計算する。ただし、各反復工程のために、正確な3オペランド加算を計算するための固有の手段、近似化されたオペランド加算を計算するための固有の手段、または、現在のルックアヘッドパラメータを計算するための固有の手段を設けず、暗号化プロセッサが、正確な3オペランド加算を計算するための単一の手段400、近似化されたオペランド加算を計算するための単一の手段、および、近似化された中間結果に基づいてルックアヘッドパラメータを計算するための単一の手段を備えていることが当然好ましい。この場合、図4から分かるように、上記3つの手段に、各反復工程のために対応する新しい入力パラメータを格納する制御手段が備えられている。
手段417(または、417’)は、シフト可能な被乗数Cを有する新しい方法のために、図1の手段100・104・106の機能性を備えるよに設計されている。
従来の方法に関しては、手段417または417’は、手段910・930の機能性を備えるように設計されている。これらの手段は、図18から分かるように、同じく、先行の工程の正確な中間結果の代わりに、先行の工程の近似化された中間結果を格納できる。
既に、図4に示す概略的な図から明らかなように、正確な3オペランド計算で計算される正確な中間結果を近似化することにより、反復工程での正確な3オペランド加算の計算に並行して、次の反復工程のルックアヘッドパラメータを計算できる。その結果、3オペランド加算を、ルックアヘッドパラメータを計算するために中断することなく、ある程度連続的に実施できる。
図18に関しては、正確な中間結果の近似化が実施されない従来の方法では、各反復ループは、基本的に2つの連続した段階を含んでいることが分かる。2つの段階とは、つまり、まず、現在の反復工程のルックアヘッドパラメータを計算する段階(910,930)、次に、対応するシフトを含む3オペランド加算を計算する段階(920,940,950)である。
同じく、被乗数Cのシフトを有する本発明の新しい方法も、現在の反復工程のために、scおよびszを求め、次に、ルックアヘッドパラメータが計算されたら、対応するシフトを手段108によって実施し、3オペランド加算を手段112によって実施するために、反復工程においてまず各ブロック100、104、106が有効になっていることにより実施することができる。
2クロック特性は、著しい性能低下を伴っている。図4に示す加速方法は、現在の反復工程の正確な中間結果の計算と、上記現在の反復工程における、近似化された中間結果を使用する、次の反復工程のルックアヘッドパラメータの計算とを、相互に並行して行うことにより、この性能低下を克服する。
したがって、図4に示す加速された方法によって、図18の従来のZDN方法、および、図1のシフト可能な被乗数Cを有する新しい反復方法の問題を克服できる。この問題とは、図18のシフトおよび符号パラメータsz・sn・a・b、または、図1の新しい方法のsc・sz・vc・vnを、まず(つまり、各3オペランド加算の前に)計算する必要があるということである。したがって、シフトおよび符号パラメータの計算の間は、図18の従来方法の加算器950、または、図1の新しい方法の加算器112は稼動していないであろう。
図4の加速方法では、この問題は、現在行われている3オペランド加算の良好かつ非常に迅速な推定を実施することにより解決される。したがって、この近似化された早期に利用できる値によって、残りの時間に、次の反復工程のルックアヘッドパラメータを計算できる。これらルックアヘッドパラメータは、次の3オペランド加算の開始時に使用される。その結果、因数2までの上記方法だけの加速が達成される。
本発明によると、将来的なシフト値および符号値は、基本的に、Zの最上位の(例えば12)ビットだけに依存しており、図1に示す新しい方法では、被乗数シフト値scは、乗数M(すなわち、sm)とszとに依存していることが分かる。
さらに、近似化は、Zの最上位のビットが基本的にCに依存していない、ということを基礎としている。なぜなら、既述のように、還元は、乗算よりも常にいくらか遅れているからである。その結果、各数Z、N、Cについて考察すると、還元が遅れている場合はZがCよりも常に大きい。
したがって、ブロック412での近似化された3オペランド加算のためには、Cを無視することが好ましい。その結果、近似化された3オペランド加算は、実際には2オペランド加算となる。2オペランド加算は、さらに上位ビットの重要性についての後述の説明により、Cを無視して、ビットの合計数よりも小さい上位ビットの数(例えば、ZおよびNの上位12ビット)だけで実施される。
近似化されたオペランド加算、または一般的に言えばブロック412での近似化された3オペランド加算をさらに加速(高速化)するために、モジューロN404としては、元来のモジューロは使用されず、変換されたモジューロが使用される。この変換されたモジューロは、ドイツ特許公報第10111987号A1(DE 10111987 A1)に記載されているモジューロ変換の原則に基づいて、モジューロ変換に応じて1と任意の値との間で変化する上位ビットの特定の数が、実際に処理されるモジューロに依存せず、常に等しいように変換されたものである。
好ましい近似化されたオペランド加算では、いずれにせよ、モジューロレジスタのMSBから始まる特定の数のビットだけが採用され、相当するビットの特定の数が中間結果レジスタZから採用されるので、近似化された3オペランド加算のためには、現実には、モジューロレジスタから何も取り出す必要はない。なぜなら、モジューロレジスタの上位ビットは、いずれにせよ分かっているからである。
したがって、近似化されたオペランド加算を計算するための単一の変数は、モジューロの符号vnおよび中間レジスタZの例えば上位12ビットである。これにより、近似化されたオペランド加算を、以下のように、実配線で組み合わせて実施できることが好ましい。すなわち、近似化されたオペランド加算は、正確な3オペランド加算よりも非常に速く終了するように実施できる。その結果、正確な3オペランド加算を実施する期間に、近似化された中間結果Zapproxに基づいて次の工程のルックアヘッドパラメータを計算するための充分な時間が残る。
近似化されたオペランド加算を実施するための手段412の具体的な実施形態について詳しく説明する前に、図5〜図10を参考にして、ドイツ特許公報第10111987号A1(DE 10111987 A1)に開示されているモジューロ変換の方法について以下で説明する。
図5に、モジューロNを使用して被乗数Cに乗数Mを剰余乗算するための方法のフローチャートを示す。まず、工程500で、モジューロNを、以下の等式に基づいてモジューロNTに変換する。
T=T×N
工程520では、次に、変換されたモジューロNTと変換されたモジューロの所定の分数(好ましい実施形態では2/3)とを使用して、剰余乗算が処理される。このことは、べき乗剰余では、以下の形式のRSA等式が計算されることを意味している。
T:=MdmodNT
すなわち、べき乗剰余Cの結果は、モジューロNによって規定された剰余類ではなく、変換されたモジューロNTによって規定された剰余類によって計算される。なぜなら、上記等式の左側にはCではなくCTが存在しているからである。ここでは、変換されたモジューロNTを使用することによって、図19に記載の公知の還元ルックアヘッド方法の反復ループに相当する補助還元シフト値siの計算が非常に簡単になっている。
最終的な工程540では、NTからNへの逆変換が、等式
C:=CTmodN
に相当する演算を実施することによって実施される。
変換されたモジューロNTの剰余類にある変換された結果CTは、このとき、簡単なシフト/引算還元によって、モジューロNの剰余類へ戻されることが好ましい。その結果、得られたCは、べき乗剰余の結果である。
モジューロNは、工程500で変換子Tを用いて、変換されたモジューロNTへ、以下のように変換される。すなわち、所定の分数により変換されたモジューロ(つまり、好ましい実施形態では、2/3倍に変換されたモジューロ)が、第1の所定の値を有するより上位のけたを有し、上記より上位のけたには、第2の所定の値を有する下位のけたが続くように変換される。
その結果、中間結果Zと2/3倍に変換されたモジューロとの比較を非常に簡単にできる。つまり、同じく第1の所定の値を有するZの最上位のけたが検索され、所定の分数に変換されたモジューロの第1の所定の値を有するより上位のけたと、第1の所定の値を有する中間結果Zの最上位のけたとの間の差が、差siに等しいことによって、上記比較を非常に簡単にできる。
以下にまとめを記載する。Nを、暗号化コプロセッサではなく、32ビットCPUで、変換されたモジューロNTに変換することが好ましい。その結果、次式の変換式
T:=T×N
となる。ただし、Tは自然数である。
Tについては、使用される全ての数がバイナリ数であれば、以下の式となる。
T:=1100...0XX...XX
2/3倍に変換されたモジューロについては、以下の値となる。
(2/3)NT=100...0X'X'...X'X'
Tおよび(2/3)NTから、これらが、例えば16ビットの第1部分を有しており、次に、L(N)ビットXまたはX’の一部を有していることが分かる。いわゆるZDN比較には、変換されたモジューロNTの2/3倍の最上位16ビットだけが使用される。なぜなら、エラー率は、既に、約2-10よりも良好となっているからである。つまり、変換されたモジューロの2/3倍の全ての512・1024または2048ビットをZDN比較に使用する必要はなく、この比較は、変換されたモジューロの最上位16ビットによって実施されれば充分である。当然、(2/3)NTのより低いビットも比較のために使用できるであろう。
しかしながら、その場合は、エラー率が次第に上昇する。しかしながら、エラーは問題のないものであり、還元ルックアヘッド方法の最適な特性が若干低下するだけなので、この方法を問題なく行える。
したがって、2/3倍に変換されたモジューロNTは、値1を有するより上位のけたを有している。比較的上位のけたには、値0(すなわち、第2の所定の値)を有する下位のけたが続く。上述の実施形態では、下位のけたの数が15である。当然、この場合も、中間結果Zと2/3倍に変換されたモジューロNTとの間でどのような大きさの差があると予期されているか、または、処理されたほうがよいのかに応じて、より大きい、または、より小さい数を使用できる。剰余乗算の中間結果Z、つまり、図18のブロック950における3オペランド加算の結果の量については、以下の式となる。
|Z|=00...01YY...Y
補助シフト値siを、以下の等式に基づいて計算する。
(2/3)NT×2-si<|Z|≦(4/3)NT×2-si
2/3倍に変換されたモジューロNTのトポロジーによって、値siは、常に、2/3倍に変換されたモジューロNTの1を有する最上位のビットと、中間結果の大きさの最上位1との間の差である。
このけたの差または値siは、簡単な方法にて決定される。さらなる反復工程は必要なくなる。
さらに、モジューロの2/3倍を格納するために、ZDNレジスタは必要なくなる。なぜなら、定義によると、2/3倍に変換されたモジューロNTの少なくとも上位、例えば16ビットは、常に同じ式を有しているからである。ビット比較器は必要なくなる。「1」を有する、2/3倍に変換されたモジューロNTの最上位のけたと、「1」を有するZの最上位のけたとの値の差を、例えば変換されたモジューロのためのレジスタと、中間結果Zのためのレジスタとを、ビット毎にXOR結合することによって簡単に実施できる。したがって、siは、XOR結合が第1の「1」を出力する位置と、XOR結合が第2の「1」を出力する位置との価数の差に等しい。
ZDNレジスタおよびZDN比較器が必要ないので、演算装置全体を、より小さなチップ面積に実装できる。
さらに、暗号制御部分、つまり、ZDN比較(図10の760)のための制御論理は、複雑性がより低い。なぜなら、図19の複雑な反復ループを実施する必要がないからである。その結果、計算がより迅速になり、補助シフト値siの計算によって、アルゴリズム全体のためのタイミング問題は生じなくなる。
以下では、図6から図9を参照して、好ましい変換について詳しく説明する。
上述のように、ZDNアルゴリズムの主要な部分は、以下の等式が満たされているという点である。
(2/3)2-siN<|Z|≦(4/3)2-si
iを、補助シフト値として示す。また、siは、ZのけたをNと同じ位置にシフトするために必要なシフト値である。従来技術では、siを計算するために、|Z|を(2/3)Nと比較する演算が必要であった。
(2/3)との比較は、モジューロを変換されたモジューロNTに変換することにより、簡単になる。なお、Nによるなんらかのモジュラ演算が実施される前は、変換されたモジューロNTは、Nよりも大きい。次に、全ての計算をモジューロNTに実施する。しかしながら、計算の結果は、剰余類N内でなければならないので、Nによる最終的な還元が依然として実施される。
図6に示すように、Nが、Nビットの長さを有する整数であるとする。モジューロNは、常に正の整数なので、つまり、2補集合表示ではMSB=0なので、符号ビットは常に0に等しく、モジューロNの第2の最上位のビット(MSB−1)は常に1に等しい。ZDN比較のために、モジューロの全てのビットを、中間結果の全てのビットと比較する必要はなく、ZDN方法のためには、m個の数のビットを使用すれば充分である。モジューロNの最上位のm個のビットは、モジューロNTの第1部分を規定し、一方、モジューロの残りのN−m個のビットは、モジューロの第2部分NRを規定する。好ましい実施形態では、mは16に等しい。当然ながら、mの値はより大きくてもより小さくてもよい。
図7に示すように、変換は、変換されたモジューロNTが、図6の元来のモジューロよりも16ビット長いように実施される。
ZDN比較には、NTの第1の16ビットを使用すれば充分である。この場合、例えば12ビットだけが比較に使用され、最下位の4ビットは、より下位のビットから来る可能性のある繰越のためのバッファを示す。
この場合は、比較が誤った結果となる可能性は、2-12よりも低い。比較で誤った結果が出たとしても、最適な還元シフト値以下の値SNが生成されだけであり、結果モジューロNは、依然として正しい。
モジューロが、図6に示すように、2補集合表示で使用される場合は、モジューロNは以下のように分解される。
N=2n-mT+NR
Nを、変換子Tを使用して、NTに変換する。ただし、Tは、適切に選択された整数である。このことは、合同式を理由として、このようでなければならない。NTは、図7に示す形式を有していることが好ましい。すなわち、NTの最上位のビット(MSB)は、0に等しい必要がある。なぜなら、NTは、正の整数であることが好ましいからである。以下で説明するように、変換されたモジューロの第2最上位および第3最上位のビットは、1に等しい必要がある。一方、変換されたモジューロNTの最上位セクションのほかの全てのビット(図7では符号33で示す)は、「0」の値を有していることが好ましい。この場合だけ、つまりNTの2/3倍については、図8に示すようなNTの2/3倍の最上位セクションが、「1」を有する1つのビットだけを有し、一方、この最上位セクション44にある他の全てのビットは、「0」に等しい。したがって、siを算定するための既述の取るに足らない比較を実施してもよい。
しかしながら、まず、変換子7を用いて変換されたモジューロNTを計算することについて、図7を参照しながら説明する。この以下の規定が当てはまる。
T=TN
=T(2n-mT+NR
変換子Tについては、以下のことが当てはまる。
T=|(2p-2+2p-3)/NT
等式17を使用して、変換されたモジューロNTについては、以下のようになる。
T=|(2p-2+2p-3/NT|(2n-mT+NR
T=(2n+p-m-2+2n+p-m-3)NT/NT+(2p-2+2p-3)NR/NT
pおよびmのための例えば典型的な値つまり、p=32ビットおよびm=16ビットについて言えば、NTについては以下のようになる。
T=2n+14+2n+13+NR((2P-2+2p-3)/NT
Tの計算は、暗号化コプロセッサではなくホストCPUで実施されることが好ましいということに、留意されたい。ホストCPUは、短数演算装置(Kurzzahl-Rechenwerk)を備えており、NTの計算にはこれで充分である。Tは整数である必要があり、モジューロNの代わりにNよりも大きなモジューロNTについて暗号化コプロセッサの内部で計算されるので、簡単なZDN比較のためのNTの第1のp−m=16ビットだけが、補助シフト値siを計算するために、関連している。NTのほかのn個のビットは、任意の数でもよく、これらn個のビットは、補助シフト値siを計算するため、つまり、Zとの比較のためには関係していない。当然、しかしながら、変換されたモジューロNTの全てのビットは、3オペランド加算のために必要である。なお、この3オペランド加算は、シフトされたモジューロを使用する代わりに、シフトされた変換後のモジューロを使用して実施される。
mおよびpのための選択された値に対しては、変換子Tは16ビット整数である。したがって、Tを計算するため、または、NTを計算するために必要な割り算を最上位32ビットだけに対して実施する必要がある。したがって、上記割り算を、ホストCPUで実行可能で、簡単かつ迅速なプログラムコードであるプログラムにより実行できる。
図8に、変換されたモジューロNTを2/3倍したものを示す。図7に示したように、NTのMSB‐1およびMSB‐2が「1」であり、次の式
(11)2=(3)10+((2/3)×3)2=(2)10=(10)2
が成り立つので、上記の変換されたモジューロNTの2/3倍の簡単なビットパターンが生じる。ここで、上記の変換されたモジューロNTの2/3倍の長さは、n‐m+pである。
(2/3)NTが特殊な形態をしているので、|Z|の比較は非常に簡単である。(2/3)NTの最上位である1が、剰余演算の初めのn+p−m−2の位置にあることが、知られている。レジスタZのポインタが、好ましい実施形態では、ZのMSBにおいて始まり、Zの初めの「1」を探索する。ZのMSBが1である場合、Zは負の数であり、その代わりにZの初めのゼロを探索する。レジスタNおよびレジスタZでの初めの1のビット位置の差から、補助シフト値siを算定する。
モジューロ演算(Modulo-Operaton)の結果が剰余Nになければならないので、最後の還元モジューロNを実行する。つまり、逆変換(図5の工程540)を実行する必要がある。
NからNTへの変換には、公知のZDN比較と比べて、暗号コプロセッサ内での(2/3)Nの計算の代わりに、ホストCPUにおいて、NからNTへの変換を簡単に実行できるという利点がある。
チップには、ZDNレジスタおよび比較器論理回路は必要ではない。そのために、チップの大きさは小さくなり、コプロセッサの複雑さは低減される。
最後に、図9に示したように、NからNTへの変換を、モジューロNのランダム化と組み合わせてもよい。Rがsビットの長さの乱数である場合、ランダム化され、変換されたモジューロNTは、図9に示した形状を有している。ランダム化された数Nによって、ランダム化され変換されたモジューロは、ランダム化されていない場合(図7)と比べて、sビットだけ(つまり、Rのけたの数だけ)長くなる。
方程式では、以下のように表現できる。
T=T N
=T(2n-mT+NR
次に、ランダム化された変換子Tを、以下のように表現する。
T=|(2p-2−2p-3+R)/NT
したがって、ランダム化され変化されたモジューロを以下のように表現する。
T=|(2p-2+2p-3+R)/NT|(2n-mT+NR
T=(2n+p-m-2+2n+p-m-3+R 2n-m)NT/NT+(2p-2+2p-3+R)NR/NT
pを144ビットとし、mを16ビットとし、sを112ビットとする場合、ランダム化を含んだ変換されたモジューロNTのために、次の値が得られる。
T=2n+126+2n+125+R 2n-16+NR(2144+2143+R)/NT
Tのビット長は、以下のようになる。
L(NT)=n+p−m=n+m+s=n+16+112=n+128 ビット
図10は、ZDNレジスタを備えず、演算ユニット700と、Cレジスタ710と、Nレジスタ720と、Zレジスタ730とのみを備えた演算装置を、示している。ここで、Nレジスタ720には、モジューロおよび/またはシフトされたモジューロが格納されておらず、変換されたモジューロおよび/またはシフトされ変換されたモジューロ、または、ランダム化され変換されたモジューロ、または、シフトされランダム化され変換されたモジューロが格納されている。
以下に、図11に基づいて、反復工程の近似的なオペランド加算を計算するための回路の、特定の実施形態を示す。図11は、再び、モジューロレジスタ200およびZレジスタ204を示している。図11に示しているのは、変換されたモジューロであり、上記モジューロの上位ビットは、実際に計算に基づいているモジューロであるかどうかに係らず例えば有意性を有するMSB‐12を有するビットまで、図7では011000.....000として知られている。
近似的な3オペランド加算を計算するために、初めに、被乗数Cを無視する。さらに、Zの上位12ビットだけを、特定のZマルチプレクサ412aを用いて、Zレジスタ204から読み出す。それにしたがって、これらの上位12ビットをszだけ、小さなシフタ412bを用いて左にシフトする。これにより、近似的にシフトされたZ値(中間レジスタ412cと記号で示している)が得られる。
このような値の格納を非常に短時間で行うことができることに留意されたい。これにより、固有のレジスタを備える必要がなくなり、ビットを伝送するバスが十分に存在するようになる。
また、モジューロが知られており、モジューロが変換されたモジューロであるので、モジューロの上位の3ビットのみと特に第2および第3ビットのみとが「1」である一方、残りのビットが0であるので、選択412dで示しているように、シフトされた最後の中間結果の最も高い3つのビットのみが必要である。これら3つのビットを、組み合わせ回路412eに格納する。
この組み合わせ回路には、さらに、モジューロの符号vnが格納されており、一方、上記組み合わせ回路412eに、モジューロの上位3つのビット(つまり「011」)が配線されている。この組み合わせ回路412eは、次に、近似的な中間結果(他の中間結果レジスタ412fとして示している)の上位3つのビットを供給する。さらに中間結果レジスタ412cから、矢印412gで示しているように、近似的な中間結果の他の9のビットを複写できる。
図11から、変換されたモジューロを使用する場合に、計算を3つのビットのみを用いて実行する必要があることが分かる。ここではしかし、「加算の相手」のビットが、その符号以外について知られており、これにより、明らかに、近似的な中間結果Zapproxの計算を非常に速く行うことができる。
このようにして近似化されたZ[L‐1、L‐12]を用いて、次の反復工程の、シフト値および符号値がほぼ常に正確に計算されるということが分かるということに、留意されたい。Zの近似が非常に不正確または非常に大まかである他の全ての場合には、最適のシフト値以下の値および最適の記号値以下の値が、得られる。
しかし、これらの、最適のシフト値以下の値および最適の記号値以下の値によって現在の演算エラーは生じず、剰余乗算の計算に、最適の場合によりも多くのサイクルが必要になるだけである。しかし、先程考察した反復工程の近似的な中間結果を計算し、かつ、この近似的な中間結果を正確な中間結果の計算と同時に用いて、次の工程のルックアヘッドパラメータを算出するには、このような上昇(つまり、性能の悪化)は、近似的なオペランド加算を同時に実施することによる利得よりも明らかに小さい。
さらに、近似的な中間結果を計算するための装置を、チップ面積においてわずかなコストで実現できる。これにより、演算装置のほぼ2倍の速度が、チップ面積において非常にわずかな「コスト」で得られる。
次に、図12〜図17bに関して、被乗数がシフトされ、モジューロが固定されている好ましい実施形態について、詳述する。ここで、近似的な中間結果Zapproxを計算することにより、この方法を高速化させ、さらに、他の高速化のためにモジューロ変換を使用する。
図12〜図17bは、いわば、直感的な擬似コードの形状で、本発明の方法のフローチャート図を示している。さらに、図12〜図17bは、本発明の方法を状況に応じてハードウェアだけでなくソフトウェアにおいて実施できることを示している。この実施を、デジタル記憶媒体(特に、ディスクまたはCD)において、電子的に読取り可能で、本発明の方法を実施するようにプログラマブルコンピュータシステムにて実行可能な制御信号によって、行うことができる。
コンピュータプログラムプロダクトがコンピュータにおいて実行可能に記載されている場合、通常、本発明は、機械可読キャリアに格納された、本発明の方法を実施するためのプログラムコードを有するコンピュータプログラムプロダクトからも構成されている。言い換えると、コンピュータプログラムがコンピュータにて実行可能な、本発明の方法を実施するためのプログラムコードを有するコンピュータプログラムとして実現できる。
図12は、個々に用いられる変数、および、変数が有する型の概観を示している。変数Cshを、図3の108bに示しているように、3と規定する。ここで、この変数は、−3〜+3の被乗数シフト値scが用いられるように、被乗数Cのシフタを特定している。
変数Zshは、5であり、図3のブロック108aに示しているように、中間結果のシフタの大きさ(つまり、中間結果シフト値szが有することができる大きさ)を規定している。変数NoZerosが、正確には図11の上位のMSB‐12に基づいて、変換されたモジューロNTがレジスタ200にあるゼロの数を規定する。この変数を、図12にCshとZshとの合計として規定するが、他の大きさを用いてもよい。
変数NoTopBitsは、Zレジスタ204の上位ビットの数全体に関するものである。これらの数を、Zマルチプレクサ412aからZレジスタ204を用いて読み出すことにより、近似的な中間結果Zapproxを計算する。図12から、変数NoTopBitsが12である(つまり、NoZeros(=8)+4)と読取れる。さらに、図12では、全演算装置のレジスタ長を特定する変数MaxRegBitLengthが特定されている。この数は、図12では160として、任意に固定されている。
それに代わるものとして、この数は、当然ながら1024、2048、または、例えば明らかに2048よりも多い数であってもよいし、例えば、2304であってもよい。これにより、RSA法のアンダーフローバッファ210(図2)に十分な領域を供給でき、さらに、通常のモジューロよりも大きな変換されたモジューロを加えるための十分な領域を供給できる。また、変数Debugは、出力変数である。この変数はそれほど重要ではない。
また、図13に基づいて、これ以降の図面に示す方法に必要な、いくつかの補助機能について説明する。例えば、関数ReturnBitは、数Xのけたiにビットを供給する。
関数SetBitは、数Xのけたiに、ビットを、「値」によって特定された値(つまり、0または1)で割り当てることができる。
関数BitLengthは、LSBからMSBまでのレジスタの数の長さを計算できる。図4のレジスタ204の場合、この関数BitLengthは、MSB220とLSB214との間のビットの数を供給する。
また、図14aは、図1に概略的に示したように、剰余乗算のための設定/規定および/または調整および初期化を示している。これらの外部変数については、すでに図12に基づいて説明した。
ブロック「演算装置の状態」では、必要な変数の型を規定する。変数Zは、中間結果を表している。変数ApproxZは、例えば図4のブロック412において計算され、かつ、図4の414において示す近似的な中間結果を、表している。変数Lsbは、いわば、被乗数のコンマを供給する。計算の開始時に、変数Lsbは、アンダーフローバッファ210の長さをビットで示し、図2に示した例では、例えば9である。図2に示した、被乗数のLSB212をアンダーフローバッファ210にシフトした中間状態では、変数Lsbは、例えば4であろう。これは、アンダーフローバッファにおいて4ビットまで、被乗数をさらに下へとシフトできるということである。
また、変数cur_lsbは、被乗数Cがシフトする度に変化し、シフト値scを制限する(これについては、後で説明する)。変数LAccuは、乗数の長さをビットで規定する。変数cは、被乗数Cがどれだけ下位にシフトしたかを示している。したがって、cおよびcur‐Lsbの合計は一定であり、常に、アンダーフローバッファ210の長さに相当している。この長さは最大300ビットであり、30〜50ビットであることが好ましい。この値は、含まれている数の大きさの影響を受けるので、変化する可能性があるということに、留意されたい。
また、ブロック「3オペランド加算のための量の算定」では、本発明の好ましい実施形態において用いられるルックアヘッドパラメータを規定する。したがって、変数VZ_Cは、図1のブロック112の符号vcである。変数VZ_Nは、図1のブロック112のモジューロの符号vnを示している。最後に、変数s_Zは、被乗数シフト値を示している。この被乗数シフト値については、図1のブロック112に示しており、図1のブロック106において計算される。
また、区分「乗算のための量の算定」の変数は、乗算ルックアヘッドアルゴリズムに関連している。したがって、mは、乗数によって示されるビットの数である。ここで、知られているように、乗数ビットは上から下に処理される。したがって、mが0よりも大きい限り、乗数ビットが存在する。mが得ることのできる最大値は、LAccuである。つまり、反復乗算が始まる前である。この反復型乗算では、乗数のけたはまだ処理されていない。
また、変数LAは、用いられるルックアヘッド規則を規定している。ここで、DE 3631992 C2(U.S.特許明細書第4,870,681)に記載されているように、ルックアヘッド規則を用いることができる。変数s_Mは、図1のブロック100において計算される乗算シフト値smである。
初めに、各変数を、与えられた大きさを用いて調整し、初期化する。特に、処理されるモジューロN(および/または、変換されるモジューロNT)のビット長に基づいて設定される変数Lsbが示される。アンダーフローバッファが、用いたモジューロに応じて、例えば各RSA計算(つまり、モジューロとのべき乗剰余)のために新しく初期化されることが分かる。さらに、モジューロが左寄せされてレジスタに配置されることが分かる。つまり、より小さなモジューロのために、より大きなアンダーフローバッファも利用でき、また、より大きなモジューロのために、より小さなアンダーフローバッファも利用できることが、分かる。
図14bは、図1および図4のブロック回路図を用いて示した方法を擬似コードで示している。打切り状況になるまで、反復を実行する。打切り状況は、一方では、mが0である(つまり、全ての乗数けたが処理された)状況のことであり、cは0である(つまり、LSB212に関する被乗数が、全ての剰余乗算の終わりに再びモジューロNのLSB208に(図2参照)調整されている)状況のことである。通常、初めにmは0であり、次に、数サイクル後にcは0となる。なぜなら、すでに実行したような還元が乗算の後で行われる(または「後れをとる」)からである。
初めに、第1関数LAModuloを、近似的な中間結果を用いて実行する。したがって、この関数LAModulo(以下で詳述する)は、(次の反復工程のルックアヘッドパラメータを近似的な中間結果Zapproxを用いて計算する)ユニット417の機能性を示している。
続いて、関数 後処理_LAMojulo、関数 LAMultiplication、および、関数 後処理_ALMultiplicationを行うことにより、通常、乗算シフト値szおよび乗算ルックアヘッドパラメータvnを計算できる。適切な還元ルックアヘッドパラメータszおよびvnを、上記の関数LAModuloを用いて計算する。この関数LAModulo、後処理_LAModulo、LAMultiplication、および、後処理_LAMultiplication、の全てを、ユニット417において、実行する。このユニットは、現在の3オペランド加算用のルックアヘッドパラメータを計算せず、次の反復工程のルックアヘッドパラメータを算出するものである。
続いて、被乗数Cを、その被乗数シフト値までシフトする。このことは、図1のユニット108の機能性であり、および/または、規定に応じて、3オペランド加算を正確に計算するための図4のユニット400の機能性である。
次に、次の反復工程の近似的な中間結果を割り当てることにより、関数ThreeOperandAdditionとの正確な3オペランド加算(つまり、現在の反復工程の正確な3オペランド加算)を実行できる。続いて、変数m、c、および、cur_lsbを調節する。
したがって、反復打切り状況が、mが0であるか、cが0であることを、満たさない限り、whileループを循環させる。
最後の「if」ループでは、Zレジスタの上位ビットが1である(負の数を示している)場合、縮退した3オペランド加算を実行する。つまり、モジューロNに符号vn+1を加算することにより、現在の(負の)中間結果が得られる。これにより、最後に、最後の「div」演算によって生じるような、LSB未満のビット(つまりアンダーフローバッファのビット)が切り捨てられる正の中間結果が得られる。
次に、図14bに示す機能について詳述する。図15は、図1のブロック112に示したように実施される関数3オペランド加算の概観を示している。特に、図15から、実施された3オペランド加算では、Cのシフトを3オペランド加算の外部で実行する一方、Zのシフトを、sZまで、3オペランド加算内で実行するということが分かる。このことは、特定の実施形態において有効であるが、それに代わるものとして、Cのシフトを3オペランド加算内で実行してもよいし、両方のシフトを3オペランド加算の外部で実行してもよい。
また、szが、図2に示されるMSB220がMSB206と同列になるように選択された場合、モジューロ2**MaxRegBitLengthと共の剰余還元は、ソフトウェアにおいて、Zレジスタの最上位のビットが、加算操作、および、けたの上げ下げ操作において完全に「抜け落ちる」ことをシミュレートできるということに、留意されたい。しかしこのことは、技術的に知られているように、特定のけた上げ処理ルーチンを使用する場合には、重要ではない。
図15のシフト機能は、自己説明されるものであり、どのようにレジスタ内容Xがシフト値s_Xまで、左または右にシフトされるかをソフトウェア技術にしたがって示している。左へのシフトは、2進表記法において、2SXとの乗算を意味している。右へのシフトは、2SXでの割り算を意味している。
図16aに示した関数LAModuloは、中間結果シフト値szとモジューロVZ_Nの符号とを含む還元パラメータの計算に、効果的である。入力変数として、Z、N、および、cを用いることが好ましい。初めに、変数cur_Zshを変数Zshの最小値(つまり、中間結果シフタのシフタ長)に、および、c(つまり、図2の開始LSB208からの被乗数のLSBの現在の偏差)に設定する。続いて、基本的には正確な3オペランド加算と同様に行われる近似的な3オペランド加算を実行する。しかし、上記2つの3オペランド加算は、上位12ビットおよび/またはNのNoTopBitsのみを取り、3オペランド加算式scおよびCの符号(つまりvc)を0に設定する、という点において異なっている。
次の0/1サーチャーは、初めに、レジスタZの最上位のビットを供給し、次に、シフト値szが変数cur_Zshよりも小さいと同時に、最大レジスタ長を越えない内は、シフト値szを増分する。
最後に、ifループにおいて、szが、シフタZshによる規定よりも大きく選択された場合(図2には示されていない)、つまり、ZレジスタのMSBが、レジスタZshにより許容されるよりも大きなビットだけ、モジューロレジスタ200のモジューロのMSB206から、例えば4ビット離れている場合、szを、cur_Zshを介してZshに設定する。ここで、中間結果Zが確実に1つまたは複数のビットだけモジューロNよりも小さくなれば、3オペランド加算のモジューロ減算の形態での還元は、抑制される。このことは、還元ルックアヘッドパラメータvnが0に設定されることにより示される。このようにして還元を抑制する。しかしながら、そのような還元を実行すれば、中間結果は、負になり、特に、以前よりもバラツキの量も増加する。それゆえ、シフタ長が制限されたために中間結果Zが完全には上位にシフトされない場合、上記還元を抑制することにより、本発明の方法の効率は著しく上がる。
図16bに、関数、後処理_LAModuloを示す。mが0より大きい(つまり、乗数けたがさらに処理される)場合、および、szが0よりも大きいが、変換されたモジューロに関してゼロの数よりもcが小さい場合、シフトは生じず、szは0に設定される。同時に、還元も抑制される。つまり、符号vnが0に設定される。
図17aは、乗算ルックアヘッドアルゴリズムを規定する関数LAMultiplicationを示している。この図に示したように、初めに、変数cur_Cshおよびsmを初期化する。次に、0/1サーチャーを実行し、その間に変数を増分する。打切り状況が特定の状況なく得られたとき、whileループはすでに、図1のブロック100において計算される乗算シフト値smとなっている。続いて、乗算のビットと比較されるルックアヘッドパラメータLAに応じて、特定の適切な処置を実行する。これにより、例えば、シフタによって本来規定されるよりも大きな乗算シフト値が得られる場合に、例えば被乗数の符号vcを「0」に設定できる。この場合、上方へのシフト、および剰余還元は実行されるが、被乗数は加算されない。
図17bは、手段(ユニット)106の機能性が実行される関数、後処理_LAMultiplicationを示している。ここで、scを、sz−smによって計算する。
Cシフタの規定の長さCshよりも長いscが得られると、scを最大シフタ長と同じ長さに設定し、図17bに示したようにszを設定し、図1のブロック112の3オペランド加算のモジューロの符号vnを0に設定する。これにより、最大シフト値が得られず、図17bに示した関数、後処理において設定されたシフト値szが得られるので、還元は生じない。
被乗数のシフトを有する乗算を計算するための本発明の装置のブロック図である。 モジューロが左寄せされているレジスタN・C・Zのレジスタ割り当てを示す図である。 制限されたシフト値を有する2つのシフト器の詳細図である。 次の反復工程のルックアヘッドパラメータの並行計算によって加速された3オペランド加算のブロック図である。 モジューロ変換方法のフローチャートである。 ビットの第1部分NTおよびビットの第2部分NRへのモジューロNの分割を示す図である。 長さL(NT)を有するけたの第1部分およびそのほかのけたへの変換されたモジューロNTの分割を示す図である。 変換されたモジューロNTの2/3倍のけたを示す図である。 ランダム化によって変換されたモジューロのけたの概略図である。 モジューロ変換によって剰余乗算を実施するための演算装置の概略図である。 近似化したオペランド加算を実施するための手段の実施の概略図である。 本発明のコンピュータプログラムの変数定義を示す図である。 本発明の方法のための補助関数を示す図である。 好ましい実施形態の方法のための初期化時表示を示す図である。 好ましい実施形態の方法のための初期化時表示を示す図である。 被乗数シフトと、次の反復工程のために現在の反復工程におけるルックアヘッドパラメータの並行計算とを有する、本発明の方法のプログラムの図である。 図14bで使用される3オペランド加算の詳細なプログラム図である。 図14bで使用されるルックアヘッドモジューロ関数の詳細図である。 図14bで使用される後処理ルックアヘッドモジューロ関数の詳細図である。 図14bのルックアヘッド乗算関数の詳細図である。 後処理ルックアヘッド乗算関数の詳細図である。 既知のZDN方法のフローチャート図である。 既知の還元ルックアヘッド方法のフローチャート図である。
符号の説明
100 調べるため手段
102 乗算シフト値
104 算出のための手段
106 scを計算するための手段
108 ZおよびCをシフトするための手段
108a Zのためのシフタ
108b Cのためのシフタ
110 中間結果シフト値sz
112 3オペランド加算を実施するための手段
114 現在の反復工程の中間結果
200 モジューロレジスタ
202 被乗数レジスタ
204 中間結果レジスタ
206 モジューロのMSB
208 モジューロのLSB
210 アンダーフローバッファ
212 被乗数のLSB
214 3オペランド加算後の中間結果のLSB
218 最大中間結果シフト値
220 中間結果のMSB
400 正確な3オペランド加算を実施するための手段
400’ 現在の反復工程の正確な3オペランド加算
402 正確な先行する中間結果
404 モジューロN
406 被乗数C
408 先行する反復工程のルックアヘッドパラメータ
410 先行する反復工程の結果としての正確な中間結果
412 近似化されたオペランド加算を実施するための手段
412a Zマルチプレクサ
412b シフタ
412c Zのシフトされた12ビットを格納するためのバッファメモリ
412d 組み合わせ部供給線
412e 組み合わせ部
412g ビット複写線
412f 近似化された中間結果のためのメモリ
412a Zマルチプレクサ
412b シフタ
412c Zのシフトされた12ビットを格納するためのバッファメモリ
412b 組み合わせ部供給線
412e 組み合わせ部
412g ビット複写線
412f 近似化された中間結果のためのメモリ
412’ 現在の反復工程の近似化されたオペランド加算
414 近似化された現在の中間結果
416 乗数M
417 現在のルックアヘッドパラメータを計算するための手段
417’ その後のルックアヘッドパラメータの計算
418 現在のルックアヘッドパラメータ
420 その後の反復工程を計算するための正確な中間結果
500 モジューロを変換するための手段
520 変換されたモジューロを使用して反復処理するための手段
540 変換された結果を逆変換するための手段
700 演算ユニット
710 Cレジスタ
720 Nレジスタ
730 Zレジスタ
740 反復ループ
750 ZDNレジスタ
760 ZDN比較のための制御論理
900 ZDN方法の開始
910 ZDNアルゴリズムの乗算ルックアヘッド方法
920 Zを左または右にシフトする
930 ZDNアルゴリズムの還元ルックアヘッド方法
940 モジューロを左にシフトする
950 ZDNアルゴリズムのための3オペランド加算
960 ZDNアルゴリズムの終了
1000 広域変数
1010 還元シフト値を初期化する
1020 ZDNを還元する
1030 nとsNとを調べる
1040 nを減少させる
1060 還元シフト値を減少させる
1080 ZDN/2を計算する
1100 中間結果をZDNと比較する
1120 還元ルックアヘッドパラメータを算定する
1140 還元ルックアヘッドパラメータを算定する
1160 nを計算する
1180 還元ルックアヘッドパラメータを計算する
1200 nを調べる
1220 cur_kを計算する
1240 cur_kを計算する

Claims (14)

  1. 複数の反復工程を有する反復方法を用いて、モジューロ(N)に基づいて乗数(M)と被乗数(C)との乗算を計算するための装置であって、
    乗算ルックアヘッドシフト値(sm)を得るために、乗算ルックアヘッドアルゴリズムを用いて現在の反復工程の乗数のけたを調べるための手段(100)と、
    より上位のビットに中間結果シフト値(sz)だけシフトされた、現在の反復工程の先に行われた反復工程から供給された中間結果が、最上位のビットを有し、上記ビットの有意性が、先に行われた反復工程から供給された中間結果の最上位のビットよりも、モジューロの最上位のビット(206)の有意性に近いように、ゼロよりも大きな上記中間結果シフト値(sz)を算出するための手段(104)と、
    中間結果シフト値(sz)と乗算ルックアヘッドシフト値(sm)との差である被乗数シフト値(sc)を計算するための手段(106)と、
    現在の反復工程の中間結果を得るために、中間結果シフト値(sz)にしたがってシフトされた中間結果、被乗数シフト値(sc)にしたがってシフトされた被乗数(C)およびモジューロを用いて、3オペランド演算を実行するための手段(108、112)とを備えた、装置。
  2. さらに、上記モジューロ(N)を格納するためのモジューロレジスタ(200)を備え、上記モジューロの最上位のビット(206)がモジューロレジスタ(N)の所定のレジスタ位置に存在するように、上記モジューロが上記レジスタ内に配置されている、請求項1に記載の装置。
  3. 上記所定のレジスタ位置が、上記モジューロレジスタ(200)の最上位レジスタ位置である、請求項2に記載の装置。
  4. 上記モジューロレジスタ(200)は、上記モジューロ(N)のけた数よりも多くの記憶位置を有するように、上記モジューロレジスタの大きさが規定され、上記モジューロの最下位のビット(208)よりも低い価数を有する上記モジューロレジスタ(N)の記憶位置がアンダーフローバッファ(210)である、請求項2または3に記載の装置。
  5. 上記モジューロ(N)を格納するためのモジューロレジスタ(200)と、反復工程の中間結果を格納するための中間結果レジスタ(204)と、被乗数(C)を格納するための被乗数レジスタ(C)とを備え、
    上記モジューロは、上記モジューロレジスタに固定的に配置されており、
    上記中間結果および上記被乗数は、それらの各レジスタ内にて、シフトするための各手段(108a、108b)によってシフト可能となっている、請求項1〜4のいずれか1項に記載の装置。
  6. 上記中間結果および被乗数をシフトするための手段(108)は、
    上記中間結果をより上位の価数に最大シフト量(Zsh)までシフトするために、および、上記被乗数を、より上位または下位の価数に最大被乗数シフト量(Csh)までシフトするために形成されている、請求項1〜5のいずれか1項に記載の装置。
  7. 上記最大中間結果シフト量(Zsh)は、最大被乗数シフト量(Csh)よりも大きいものである、請求項6に記載の装置。
  8. 上記中間結果シフト値(sz)を決定するための手段(104)は、
    上記中間結果シフト値(sz)を、先に行われた反復工程のシフトされた中間結果の最上位のビットの価数がモジューロの最上位のビット(206)の価数と同じであるような大きさにするために形成されている、請求項1〜7のいずれか1項に記載の装置。
  9. 上記中間結果シフト値(sz)を決定するための手段(104)は、
    上記中間結果シフト値(sz)を、最大中間結果シフト量(Zsh)、および先に行われた反復工程の中間結果をシフトする必要がある値の最小値に等しくして、
    先に行われた反復工程における値がシフトされた中間結果の、最上位のビットの有意性が、モジューロの最上位のビット(206)と同じになっているように形成されている、請求項7に記載の装置。
  10. 上記中間結果シフト値を算出するための手段(104)は、
    中間結果シフト値が最大中間結果シフト量(Zsh)によって制限されている場合に、上記3オペランド加算を実行するための手段(112)が上記反復工程において上記モジューロの考慮を省かせる還元パラメータ(vn)を決定するように形成されている、請求項8または9に記載の装置。
  11. 上記被乗数シフト値(sc)を計算するための手段(106)は、
    被乗数シフト値(sc)を最大被乗数シフト量(Csh)に制限するために、および、制限した場合に、上記中間結果シフト値が(sm+最大被乗数シフト量(Csh))と同じであるように、手段(104)によって決定された中間結果シフト値(sz)を調節するために、および、上記のように制限した場合に、この反復工程において手段(112)がモジューロを考慮せず3オペランド加算を実行させる還元パラメータを決定するように形成されている、請求項6〜10のいずれか1項に記載の装置。
  12. 複数の反復工程を有する反復方法を用いて、モジューロ(N)に基づいて乗数(M)と被乗数(C)との乗算を計算するための方法であって、
    乗算ルックアヘッドシフト値(sm)を得るために、乗算ルックアヘッドアルゴリズムを用いて現在の反復工程の乗数のけたを調べるステップ(100)と、
    より上位のビットに中間結果シフト値(sz)だけシフトされた、現在の反復工程の先に行われた反復工程から供給された中間結果が、最上位のビットを有し、上記ビットの有意性が、先に行われた反復工程から供給された中間結果の最上位のビットよりも、モジューロの最上位のビット(206)の有意性に近いように、ゼロよりも大きな中間結果シフト値(sz)を決定する(104)ステップと、
    中間結果シフト値(sz)と乗算ルックアヘッドシフト値(sm)との差である被乗数シフト値(sc)を計算する(106)ステップと、
    現在の反復工程の中間結果を得るために、中間結果シフト値(sz)にしたがってシフトされた中間結果と、被乗数シフト値(sc)にしたがってシフトされた被乗数(C)およびモジューロとを用いて、3オペランド演算を実行する(108、112)ステップとを有する、方法。
  13. 上記乗数(M)、被乗数(C)、およびモジューロ(N)が、暗号計算のパラメータである場合、上記暗号計算の範囲内で実行する、請求項12に記載の方法。
  14. 請求項12または13に記載の方法を実行するためのプログラムコードを有し、
    上記プログラムコードがコンピュータにおいて実行可能に記載されている、コンピュータプログラム。
JP2004562658A 2002-12-23 2003-11-28 被乗数のシフトを用いて乗算を計算するための装置およびその方法、上記装置を実行するためのプログラムコードを格納した記録媒体 Expired - Fee Related JP4302640B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
DE10260655A DE10260655B3 (de) 2002-12-23 2002-12-23 Vorrichtung und Verfahren zum Berechnen einer Multiplikation mit einer Verschiebung des Multiplikanden, insbesondere bei der kryptographischen Berechnung
PCT/EP2003/013426 WO2004059463A1 (de) 2002-12-23 2003-11-28 Vorrichtung und verfahren zum berechnen einer multiplikation mit einer verschiebung des multiplikanden

Publications (2)

Publication Number Publication Date
JP2006511833A true JP2006511833A (ja) 2006-04-06
JP4302640B2 JP4302640B2 (ja) 2009-07-29

Family

ID=32336588

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004562658A Expired - Fee Related JP4302640B2 (ja) 2002-12-23 2003-11-28 被乗数のシフトを用いて乗算を計算するための装置およびその方法、上記装置を実行するためのプログラムコードを格納した記録媒体

Country Status (8)

Country Link
US (1) US7647367B2 (ja)
EP (1) EP1543408B1 (ja)
JP (1) JP4302640B2 (ja)
KR (1) KR100744216B1 (ja)
AU (1) AU2003289909A1 (ja)
DE (2) DE10260655B3 (ja)
TW (1) TWI290300B (ja)
WO (1) WO2004059463A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101927858B1 (ko) 2013-12-28 2018-12-11 인텔 코포레이션 Rsa 알고리즘 가속 프로세서들, 방법들, 시스템들 및 명령어들

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100382011C (zh) * 2001-12-14 2008-04-16 Nxp股份有限公司 蒙哥马利乘法器中的流水线内核
DE10260660B3 (de) * 2002-12-23 2004-06-09 Infineon Technologies Ag Modulare Multiplikation mit paralleler Berechnung der Look-Ahead-Parameter u.a. bei der kryptographischen Berechnung
EP1939838A1 (en) * 2005-10-19 2008-07-02 Matsushita Electric Industrial Co., Ltd. Information security device, information security method, computer program, computer-readable recording medium, and integrated circuit
DE102006025569A1 (de) 2005-10-28 2007-05-03 Infineon Technologies Ag Vorrichtung und Verfahren zum Berechnen einer Multiplikations-Additions-Operation und zum Berechnen eines Ergebnisses einer modularen Multiplikation
DE102006025673B9 (de) * 2005-10-28 2010-12-16 Infineon Technologies Ag Rechenwerk zum Reduzieren einer Eingabe-Zahl bezüglich eines Moduls
DE102006025713B9 (de) 2005-10-28 2013-10-17 Infineon Technologies Ag Kryptographie-Vorrichtung und Kryptographie-Verfahren zum Berechnen eines Ergebnisses einer modularen Multiplikation
DE102006025677B4 (de) 2005-10-28 2020-03-12 Infineon Technologies Ag Vorrichtung und Verfahren zum Berechnen eines Ergebnisses einer Summe mit einem Rechenwerk mit begrenzter Wortlänge
KR100901280B1 (ko) * 2006-12-07 2009-06-09 한국전자통신연구원 모듈러 3 연산 장치 및 방법
US8005210B2 (en) * 2007-06-30 2011-08-23 Intel Corporation Modulus scaling for elliptic-curve cryptography
US8670557B2 (en) * 2007-09-10 2014-03-11 Spansion Llc Cryptographic system with modular randomization of exponentiation
JP5175983B2 (ja) 2009-09-24 2013-04-03 株式会社東芝 演算装置
KR101685354B1 (ko) 2010-10-14 2016-12-13 삼성전자주식회사 모듈러 연산기와 이를 포함하는 장치들
FI20115490A0 (fi) * 2011-05-20 2011-05-20 Adaptamat Tech Oy Muistimetalliseos ja aktuaattori
FR3050847B1 (fr) * 2016-05-02 2019-04-05 Morpho Procede d'optimisation d'ecritures en memoire dans un dispositif
CN113131948A (zh) * 2020-01-10 2021-07-16 瑞昱半导体股份有限公司 具有多模式的数据移位运算装置及方法
CN114327370B (zh) * 2022-03-10 2022-06-21 湖北芯擎科技有限公司 计算蒙哥马利模乘算法中mr值的方法及电路

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0239749B1 (de) * 1986-03-05 1990-07-25 Holger Sedlak Kryptographie-Verfahren und Kryptographie-Prozessor zur Durchführung des Verfahrens
DE3631992A1 (de) * 1986-03-05 1987-11-05 Holger Sedlak Kryptographie-verfahren und kryptographie-prozessor zur durchfuehrung des verfahrens
JPH08249161A (ja) 1995-03-13 1996-09-27 Fujitsu Ltd 立方根演算装置
DE10107376A1 (de) * 2001-02-16 2002-08-29 Infineon Technologies Ag Verfahren und Vorrichtung zum modularen Multiplizieren und Rechenwerk zum modularen Multiplizieren
DE10111987A1 (de) * 2001-03-13 2002-09-26 Infineon Technologies Ag Verfahren und Vorrichtung zum modularen Multiplizieren
US7426529B2 (en) * 2002-06-06 2008-09-16 Infineon Technologies Ag Processor and method for a simultaneous execution of a calculation and a copying process

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101927858B1 (ko) 2013-12-28 2018-12-11 인텔 코포레이션 Rsa 알고리즘 가속 프로세서들, 방법들, 시스템들 및 명령어들
US10187208B2 (en) 2013-12-28 2019-01-22 Intel Corporation RSA algorithm acceleration processors, methods, systems, and instructions

Also Published As

Publication number Publication date
TWI290300B (en) 2007-11-21
DE50302251D1 (de) 2006-04-06
WO2004059463A1 (de) 2004-07-15
KR100744216B1 (ko) 2007-07-30
EP1543408A1 (de) 2005-06-22
EP1543408B1 (de) 2006-01-18
JP4302640B2 (ja) 2009-07-29
TW200424925A (en) 2004-11-16
KR20050089067A (ko) 2005-09-07
US20060010192A1 (en) 2006-01-12
DE10260655B3 (de) 2004-06-24
AU2003289909A1 (en) 2004-07-22
US7647367B2 (en) 2010-01-12

Similar Documents

Publication Publication Date Title
JP4302640B2 (ja) 被乗数のシフトを用いて乗算を計算するための装置およびその方法、上記装置を実行するためのプログラムコードを格納した記録媒体
JP3939658B2 (ja) モジュラー乗算を行うための装置、および、モジュラー乗算を行うための算術演算装置
KR100848412B1 (ko) 정수연산필드의 범위를 확장하는 장치 및 방법
US5982900A (en) Circuit and system for modulo exponentiation arithmetic and arithmetic method of performing modulo exponentiation arithmetic
US8024391B2 (en) Modular multiplication method with precomputation using one known operand
US7831650B2 (en) Method for modular multiplication
US20060064453A1 (en) Modular multiplication with parallel calculation of the look-ahead parameters
US7603558B2 (en) Montgomery transform device, arithmetic device, IC card, encryption device, decryption device and program
KR101925868B1 (ko) 모듈러 계산 유닛 및 그것을 포함하는 보안 시스템
US7240204B1 (en) Scalable and unified multiplication methods and apparatus
JP2008535011A (ja) モンゴメリーのモジュラー乗算を実行する方法及びそのための装置
US7016927B2 (en) Method and apparatus for modular multiplication
US7590235B2 (en) Reduction calculations in elliptic curve cryptography
JP2000207387A (ja) 演算装置及び暗号処理装置
US7167885B2 (en) Emod a fast modulus calculation for computer systems
JP4223819B2 (ja) べき乗剰余演算装置及びそのプログラム
JP4850884B2 (ja) べき乗剰余演算器
Lórencz et al. Subtraction-free almost Montgomery inverse algorithm
JP3137599B2 (ja) BのC乗のnを法とした剰余を計算する回路
JP2002175178A (ja) 除算方法,除算回路,乗除算回路
JP2006500615A (ja) 向上したQuisquaterReduction
Großschädl A new serial/parallel architecture for a low power modular multiplier
Großschädl High-Speed RSA Hardware Based on
JP2002091759A (ja) 演算回路及び演算方法

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080318

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20080610

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20080617

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080918

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20090324

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20090422

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120501

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 4302640

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120501

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130501

Year of fee payment: 4

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140501

Year of fee payment: 5

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees