JP2004534266A - ハードウェアにおいて算術演算を効率的に行う方法および装置 - Google Patents
ハードウェアにおいて算術演算を効率的に行う方法および装置 Download PDFInfo
- Publication number
- JP2004534266A JP2004534266A JP2003507688A JP2003507688A JP2004534266A JP 2004534266 A JP2004534266 A JP 2004534266A JP 2003507688 A JP2003507688 A JP 2003507688A JP 2003507688 A JP2003507688 A JP 2003507688A JP 2004534266 A JP2004534266 A JP 2004534266A
- Authority
- JP
- Japan
- Prior art keywords
- input
- output
- value
- storage device
- bit
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/60—Methods 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/72—Methods 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/728—Methods 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 using Montgomery reduction
Landscapes
- Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Computational Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- General Engineering & Computer Science (AREA)
- Complex Calculations (AREA)
- Hardware Redundancy (AREA)
- Apparatus For Radiation Diagnosis (AREA)
Abstract
必要な反復回数が奇数モジュロ値Nのビット数nよりも多い、第1の整数値Aと第2の整数値Bとの非縮減および拡張モンゴメリ乗算を使用して乗算演算を含むモジュラ算術計算を行う方法。この方法は、n+2ビット値(X)をその内容に加えることができ、その内容2を2で割ることができる累算装置に、n+2ビットの値(S)を格納するステップを含む。所望の場合は、累算装置の内容をゼロ値に設定する。各反復において前記第1の整数値Aの値からその最下位ビットより開始して順次に1ビットを選択しながら、累算装置の内容Sに、選択されたビットと第2の整数値Bとの積を加算するステップと、その結果の内容に、その時点での最下位ビットとNとの積を加算するステップと、その結果を2で割るステップと、毎回直前の結果(S)を使用してこれらのステップをさらにs−1回反復することによって非縮減および拡張モンゴメリ乗算結果を得るステップとを、少なくともs(>n+1)回行う。
Description
【技術分野】
【0001】
本発明は、ハードウェアにおけるモジュラ演算の高速かつ効率的実施の分野に関する。より詳細には、本発明は、モンゴメリ法および簡単な方法を使用してモジュラ乗算やべき乗計算などのモジュラ算術演算を行う方法および装置に関する。
【背景技術】
【0002】
最近の公開鍵暗号方式(PKC)の中核となる演算は、一般に、モジュラ算術関数、具体的にはモジュラべき乗計算の実行に基づいており、ここでモジュラべき乗計算は、基本的に、モジュラ乗算とモジュラ自乗計算のシーケンスに基づく。したがって、モジュラ算術関数を特にハードウェアで高速実行する方法がPKCの実際の実施にとってきわめて重要である。モンゴメリ法は、ある種のモジュラ演算を実行する効率的な方法を提供するが、中でも最も重要なのはモジュラべき乗計算である。この方法の利点は、主としてモジュラべき乗計算のハードウェアによる実施において発揮される。したがって、モンゴメリ法は、たとえばRSA、デジタル署名規格(Digital Signature Standard(DSS))、ディフィー=ヘルマン(Diffie−Hellman(DF))鍵交換、楕円曲線暗号システム(Elliptic Curve Cryptography(ECC))アルゴリズムなどを実施するPKCの実施において広く採用されている(「Handbook of Applied Cryptography」Alfred J. Menezes、Paul C. van Oorschot、およびScott A. Vanstone著、CRC Press、1996年10月)。
【0003】
モンゴメリ乗算の定義:nビットの整数A、B、およびN(N>A、Bであり、Nは奇数)を想定すると、モンゴメリ乗算MMUL(A,B,N,n)、(略してMMUL(A,B)とも記す)は、以下の式で定義される。
【0004】
【数1】
【0005】
上式により、縮減結果、すなわち0≦MMUL(A,B)<Nが得られる。
表記法:以下の説明では、nビット整数A=(An-1,...,A1,A0)2などの整数値のビットは、Ai(0≦i≦n−1)という表記を使用して表す。ここで、最上位ビット(MSB)An-1は、整数値Aの左端のビットであり、最下位ビット(LSB)A0は右端のビットである。さらに、j番目の反復における所与の変数Sの値は、S(j)で示す。A*B modNなどのモジュラ結果の表記は、範囲[0,N)における換算値を示す。
【0006】
(基数2における)モンゴメリ乗算を計算するアルゴリズムは、以下のステップで行うことができる。
アルゴリズム1
入力:A、B、N、n(前提条件:A、B、NはN>Aを満足するnビットの整数であり、BとNは奇数である)
出力:MMUL(A,B)=A*B*2-n modN
【0007】
【数2】
【0008】
このアルゴリズムのメイン・ループは、一連の加算(ステップ1.1および1.2)と、2で割る除算(ステップ1.3)のみしか必要としない。ステップ1.4は、本明細書では縮減ステップと呼び、このステップがないとアルゴリズムの出力Sが必ずしも縮減されない不可欠のステップである。
【実施例1】
【0009】
表1に、A=18=(10010)2、B=12=(01100)2で、N=19(10011)2の場合のMMUL(A,B)を計算するこのプロセスを示す。この例では、n=5であり、モンゴメリ乗算は、18*12*2-5 mod19=2である。
【0010】
表1:(前提条件:S=0、A=18、B=12、およびN=19)
【0011】
【表1】
【0012】
ステップ1.4がない場合、このアルゴリズムの出力Sは必ずしも[0,N]の範囲には含まれない。具体的には、Sはnビットより大きくなる可能性がある。したがって、アルゴリズムの出力を[0,N]の範囲にシフトさせるために、追加的な縮減(S=S−N)(ステップ1.4)が必要な場合がある。上記の実施例1では、計算結果はS=21>Nとなり、したがってこの場合、追加の縮減S=S−N=21−19=2が必要である。仮定したようにA,B<Nの場合、縮減ステップ(1.4)の前に結果SがN+Bによって制限されることを(帰納により)示すことができる。したがって、S>Nの場合、反復ステップ1.1、1.2、および1.3の後に、多くとも1回のみ行われる追加の縮減ステップ1.4(S=S−N)があれば、最終結果を範囲[0,N)に縮減するのに十分であり、したがって所望の結果S=A*B+2-n modNが、実際にこのアルゴリズムの出力となる。
【0013】
MMUL(A,B)を求めるこのモンゴメリ乗算アルゴリズムは、正規のモジュラ乗算A*B modNの計算に使用することができる。これは、以下のステップに示すように、複数の方法で行うことができる。
【0014】
方法1:
入力:A、B、N、A’(A、B、およびNはnビットの整数であり、事前計算値A’=A*2n modNである。)
出力:A*B modN
【0015】
【数3】
【0016】
たとえば、A=18、B=12、N=19で、n=5の場合、
補助値A’=18*25 mod19=6を事前計算し、次にこれを使用して
T=MMUL(A’,B)=6*12*2-5 mod19=7
を計算する。
【0017】
方法2:
入力:A、B、N、A’、B’(A、B、およびNはnビットの整数であり、事前計算値A’=A*2n modNおよびB’=B*2n modNである。)
出力:A*B modN
【0018】
【数4】
【0019】
たとえば、A=18、B=12、N=19でn=5の場合、2つの補助値A’=18*25 mod19=6とB’12*25 mod19=4を事前計算し、次に、この2つの値を使用して、T=MMUL(A’,B’)=6*4*2-5 mod19=15を求め、最後に以下の式によって結果を求める。
【0020】
【数5】
【0021】
方法2では、補助値A’およびB’を計算する。これにより、整数AおよびBが「モンゴメリ基底」と呼ばれるものに変換される。最初のモンゴメリ乗算を変換された数値に適用すると、以下のようになる。
【0022】
【数6】
【0023】
これは、AおよびBの正規表現における正規モジュラ乗算に対応する。
2番目の(1を乗ずる)モンゴメリ乗算によって、この結果を元の正規基底表現に変換し戻す。言い換えると、上記の結果であるT=MMUL(A’,B’)から冗長な2n因子を除去し、それによって以下のような所望の結果が得られる。
【0024】
【数7】
【0025】
方法1に要する(補助値を計算する)オーバーヘッドは、直接的な手法と較べた場合に、モンゴメリ・アルゴリズムが単一のモジュラ乗算を計算するのに必ずしも有用と見なされない主な理由である。しかし、方法2は、いくつかのモジュラ乗算が必要な場合には効率的に使用することができる。入力をモンゴメリ基底に変換した後、モンゴメリ乗算アルゴリズムを使用してすべての乗算を行い、その結果を、乗算シーケンスの最後に正規基底に変換する。その場合、方法2の演算オーバーヘッドは無視し得るほどであり、モンゴメリ・アルゴリズムによって全体的な演算の効率が相当向上する。最も典型的な例は、方法2とモンゴメリ乗算を使用するモジュラ指数AE modN(mビットの整数値指数Eの場合。ただし、一般性を失わずに、ここではA<Nであるものとする)の計算である。べき乗計算の結果は、たとえば以下に述べるようにして求めることができる(左から右に実行される二進べき乗計算)。
【0026】
アルゴリズム2
入力:A、E、N
出力:AE modN
【0027】
【数8】
【0028】
事前計算値A’=A*2n modN(0≦A’<N)の計算により、入力がモンゴメリ基底に変換され、モンゴメリ乗算と自乗計算(ステップ2.1およびステップ2.2)は、正規基底における左から右に実行される二進べき乗計算を実施する乗算と自乗計算のシーケンスに対応し、その結果は、1を乗じるモンゴメリ乗算(ステップ2.3)によって正規基底に変換し戻される。結果がNによって確実に制限されるようにするため、アルゴリズム1によって実施される各モンゴメリ乗算の中間ステップにおいて縮減(ステップ1.4)が必要である。この縮減は、後続のモンゴメリ乗算への入力が適切に制限されるように保証するため、このような連鎖アルゴリズムの実施ではきわめて重要である。縮減を行わず、1つの(縮減ステップのない)モンゴメリ乗算の結果がNを超える場合、それ移行のステップでオーバーフローまたは誤った結果が生じる可能性がある。
【0029】
モンゴメリ乗算を使用する主な利点は、この乗算演算のハードウェア実施にある。MMULアルゴリズムは、各ステップで、累算結果(上記ステップ1.2のS=S+S0*N)のLSBのみしか必要としない。
【0030】
以下の例で、上述のアルゴリズムを使用して行うべき乗計算を示す。この例では、212240 mod249=241を求める。
【実施例2】
【0031】
表2に、nビットの値AおよびNとmビットの値Eの場合について、上述のアルゴリズムを使用したAE modNの計算を示す。表2では、前のステップT(I+1)で求めた値の後に、ステップ2.1のT(I+1) 2で得られた結果と、ステップ2.2のT(I)で得られた結果が示されている。この例では、A=212、E=240=(11110000)2、N=249である。したがって、Aはn=8ビット、Eはm=8ビットの値であり、必要な事前計算値はA’=212*28 mod249=239である。
【0032】
表2:(前提条件:A=212、E=240(11110000)2、N=249、T(1)=A’=239)
【0033】
【表2】
【0034】
さらに、T(0)=MMUL(T(0),1)=193*1*2-8 mod249=241を計算して最終結果を求める。
この例では、モンゴメリ乗算MMUL(A,B)をモンゴメリ乗算、モンゴメリ自乗、および1を乗じるモンゴメリ乗算の計算に使用する。前述のように、縮減ステップ(1.4)の前では、累算結果はNより大きくなる可能性があり、モンゴメリ乗算の(適切に縮減された)結果を求めるためには、縮減を行う必要がある。
【0035】
実施例2では、I=6、5、および4の場合について、MMUL(T(I),A’)を実行する際と、I=1および6の場合についてMMUL(T(I+1),T(I+1))を実行する際に、縮減が必要であった。
【0036】
縮減を行う必要があるために、特にビット数nがきわめて大きい場合(たとえばn=512の場合)、このような装置のハードウェア実現はかなり複雑になることに留意されたい。結果がNを超える場合を検出する専用回路と、適切な減算(すなわち必要な縮減)を行うための専用回路が必要である。
【0037】
実際の乗算を回避する間接的方法によって実現される整数乗算の効率的な実施が、文献で知られている(たとえばK. Hwang,Computer Arithmetic; Principles,Architecture,and Design,Willey,New York,1979年、第5章)。このような方法は、適切に事前選択された数量を連続的に加算して乗算結果を求める。たとえば、値S=S+M*Aは(ただしMはm=2ビット長)、積M*Aを直接計算せずに、以下のように、事前記憶された3個の数量を加算するだけで求めることができる。累積器に加算する数量は、M=(0,0)、M=(0,1)、M=(1,0)、M=(1,1)という考えられる4通りの場合のうちの1つによって次のように決まる。
【0038】
M=(0,0)の場合、累積器Sには何も加算されない。
M=(0,1)の場合、累積器Sに値Aを加算する。
M=(1,0)の場合、累積器Sに値2*Aを加算する。
【0039】
M=(1,1)の場合、累積器Sに値3*A=A+2*Aを加算する。
したがって、適切な場合を特定し(ハードウェアの1:4マルチプレクサ)、それに応じて0、A、2*A、または3*Aのいずれかを累積器に加算することによって、1つの演算で和S=S+M*Aが得られる。A、2*A、および3*Aの追加の記憶は、それぞれに応じてハードウェア制御を設定する(これには手間がかかる)ことによって省くことができる。すなわち、2*Aの加算は、Aの記憶値をシフトさせてから累積器に供給することによって実現し、3*Aの加算は、値Aを加算し、シフトされたAの値を累積器に供給することによって実現することができる。
【0040】
したがって、この演算の最適化には、記憶と速度/ハードウェア要件との兼ね合いを図る必要がある。値A、2*A、3*Aの余分な記憶は、同じ演算を何度も繰り返す場合には有利である。たとえば、S=S+K*A(ただしKはkビット長)の計算は反復して行うことができる。(1+[k/m])=(1+[k/2])回の反復の各回で、Kの次のm=2ビットを走査し、Mの暫定値(Mのmビット部分)を定義し、その値を用いて前述の方法を使用する。ビット数mは、このような暫定値(Mの一部)のビット長を示し、したがって加算結果S=S+K*Aに対して行う必要がある右シフト数も定義する。類似の方法では、より大きなm値、より多くの記憶量またはハードウェア/制御を使用するが、反復回数は少ない(1+[k/m])。S=S+M*A+L*Bを計算するために累積器に値M*A+L*Bを加算する場合にも同じ方法を使用することができる。その場合、各反復回におけるmビットのMおよびLの走査で、加算する数量について22m通りの組合せが生じる。
【0041】
たとえば、m=2の場合、加算される数量の22*2=16通りの組合せは、0、A、2*A、3*A、B、2*B、3*B、A+B、A+2*B、A+3*B、2*A+B、2*(A+B)、2*A+3*B、3*A+B、3*A+2*B、3*(A+B)となる。記憶値(A+B)を使用して2(A+B)の加算および/または3(A+B)の加算を行うために余分のハードウェア/制御を使用しない限り、15個の数量の記憶が必要である。m=1の場合、22*1=4通りの組合せ、すなわち、0、A、B、A+Bがある。m=1で、4個の整数A、B、C、およびDの乗算および合計演算を行う場合を図1に示す。図1に示す装置は、3個のレジスタR0、R1、およびR2と、1:4マルチプレクサ(MUX)と、桁上げ保存加算器(CSA)とを使用して、A*B+C*D+Gの計算を行う。レジスタR0およびR2はそれぞれnビットで、レジスタR1はn+1ビットである。各レジスタR0、R1、およびR2は、MUXの入力In2、In3、およびIn1のうちの1つにそれぞれ接続され、MUXの入力In0には常に「0」値(nビット値)が供給される。
【0042】
マルチプレクサMUXは2つの制御入力C0およびC1を有し、制御入力の各状態について、対応する入力が選択され、MUXの出力(out)で出力される。A*B+C*D+Gの計算は、レジスタR0、R1、R2およびCSAに値D、B+D、B、およびGをそれぞれロードし、MUXの制御入力C0およびC1を介してそれぞれAおよびCのデータ・ビット(AIおよびCI(I=0,1,2,...,n−1))を順次供給することによって行われる。
【0043】
CSAは、n+2ビットであり、2ビットのオーバーフローが可能であり、それを使用して、MUXの出力outを介して取り出された、選択された入力(In0、In1、In2、またはIn3)の値が、CSAのその時点での内容に加算される。この加算の結果はCSAに格納された後、CSAの内容に対して行われる右シフトが適用される。偶数の2進値のビットを右にシフトすることは、その値を2で割る除算(前述のステップ1.3)に相当する。したがって、このシステムの演算の各サイクルで、以下の演算が行われる。
【0044】
1)In0、In1、In2、およびin3のそれぞれの値を選択
2)選択された値をCSAレジスタのその時点での内容に加算
3)CSAビットの右シフト。これによってCSAのLSB(すなわちCSA0)がCSA0出力に出力される。
【0045】
ステップ1およびステップ2を実施するために、AおよびCのビットAIおよびCI(I=0,1,2,...,n−1)が、LSBから先に順次、MUXの制御入力C0およびC1に供給される。したがって、MUXの出力out(I)は、反復Iのたびに以下の値のいずれかをとることができる。
【0046】
【数9】
【0047】
A*B+C*D+Gを計算するプロセスについて、以下の疑似コードを用いて詳述する。
【0048】
【数10】
【0049】
n回の反復後、CSAの内容(CSA(n-1))には計算結果のn+1個の最上位ビット(MSB)が格納され、反復中にさらに計算結果のn個のLSBがCSA0出力で得られる。CSAの内容は、並列出力バス(図示せず)を使用して出力するか、あるいは、MUXの制御入力をリセット(すなわちC0=C1=0に設定する)し、さらにn+1回の追加の反復を行ってCSA0出力に結果のn+1個のMSBを出力すること(直列手法)によって、出力することができる。直列手法の主な欠点は、時間がかかることである(CSAの内容を入手するのにn+1サイクルの追加を要する)。一方、並列手法を使用するとパフォーマンスは大幅に向上するが、ハードウェア手段の点でコストが高くつくと考えられる。
【0050】
特許出願WO98/50851号および米国特許出願第6185596号に記載されているように、モンゴメリ法を適用することによってこの装置を効率的に使用してモンゴメリ乗算が行われる。これらの特許出願では、事前計算済みの定数(J=N-1 mod2n)を使用して、各反復において、A*Bの乗算にモジュラスNを加える回数Y=(A*B*J)mod2nを計算する。この方法は、モンゴメリ・プロセスの各反復回後に、加算結果がモジュラス値Nを超えるか否かを検査する必要がある。その場合、結果は2*Nを超えない。したがって、そのような実施方法では、反復回ごとに結果を検査し、モジュラス値を超えた場合には結果からモジュラス値Nを減算するための専用ハードウェアを使用する。
【0051】
当技術分野で周知のようにモンゴメリ法を使用してモジュラ乗算を実施する方法は、主として、出力結果値をN未満の値に縮減する必要があるため、時間とハードウェアの両方の点で影響を受ける。さらに、縮減ステップは、(「if」文を介した)特定の入力に依存し、この実施方法をサイド・チャネル攻撃にさらされやすくする。したがって、モンゴメリ乗算法は、モジュラべき乗計算などのモジュラ算術演算の効率的なハードウェア実施を可能にはするが、そのような演算のハードウェア実施を改善する必要がある。これは、各モンゴメリ乗算後に繰り返される縮減を必要としない方法および装置を使用して達成することができる。
【発明の開示】
【発明が解決しようとする課題】
【0052】
本発明の目的は、中間計算結果および最終計算結果が既知の境界を超えず、べき乗計算プロセスに必要なシーケンスなど、修正版モンゴメリ乗算の連鎖シーケンス中に縮減を必要とせず、べき乗計算プロセスの最終結果が自動的に(0とNの間に)縮減される、モンゴメリ乗算の修正版を実行する方法および装置を提供することである。
【0053】
本発明の他の目的は、モンゴメリ乗算に基づくか否かを問わず、公開鍵暗号方式のハードウェア実施のために必要な基本演算を含めて、モジュラべき乗計算およびその他のモジュラ算術演算の効率的なハードウェア実施を可能にする方法および装置(本明細書ではPKI装置とも呼ぶ)を提供することである。
【0054】
本発明の他の目的は、右から左の実行、左から右の実行、m配列、スライディング・ウィンドウべき乗アルゴリズムなど、様々なモジュラべき乗アルゴリズムの効率的なハードウェア実施を可能にする方法および装置を提供することである。
【0055】
本発明のさらに他の目的は、非縮減および修正モンゴメリ乗算に基づく、タイミング攻撃に耐えられる安全なPKIのための方法および装置を提供することである。
【課題を解決するための手段】
【0056】
一態様では、本発明は、必要な反復回数が奇数モジュロ値Nのビット数nよりも多い、第1の整数値Aと第2の整数値Bとの非縮減および拡張モンゴメリ乗算を使用して乗算演算を含むモジュラ算術計算を行う方法であって、
a)n+2ビット値を格納し、その内容(S+X→S)にn+2ビット値(X)を加算し、その内容を2(S/2→S)で割ることができる累算装置(S)を設けるステップと、
b)所望の場合には、該装置の内容をゼロ値(「0」→S)に設定し、該装置において少なくともs(>n+1)回の反復を行い、各反復において第1の整数値Aの値(AI;0≦I≦s−1)から、その最下位ビット(A0)から開始して1ビットを順次選択するステップとを含み、
ステップb)が
b.1)該装置Sの内容に選択されたビットAIと第2の整数値Bとの積を加算する(S+AI*B→S)ステップと、
b.2)該装置の結果の内容に、その時点での最下位ビットS0とNとの積を加算する(S+S0*N→S)ステップと、
b.3)該装置の結果の内容を2で割る(S/2→S)ステップと、
b.4)反復のたびにその前の結果(S)を使用してステップb.1)ないしステップb.3)をさらにs−1回反復することによって非縮減および拡張モンゴメリ乗算結果を得るステップとを含む方法を対象とする。
【0057】
モジュロ値Nを格納する第1の記憶装置(R2)を設け、第2の整数Bの値を格納する第2の記憶装置(R0)を設け、モジュロNと第2の整数値Bとの和を格納する第3の記憶装置(R1)を設け、第1(R2)、第2(R0)、および第3(R1)の記憶装置からのそれぞれ第1(In1)、第2(In2)、および第3(In3)の入力を有し、追加のゼロ入力(In0)を有し、第1(C1)および第2(C0)の制御入力を受け取るアービトレーション回路であって、
その第1(C1)および第2(C0)の制御入力がゼロの場合は、追加のゼロ入力(In0)を選択し、
その第1の制御入力(C1)が1で、その第2の制御入力(C0)がゼロの場合は、その第2の入力(In2)を選択し、
その第1の制御入力(C1)がゼロで、その第2の制御入力(C0)が1の場合は、その第1の入力(In1)を選択し、
その第1の制御入力(C1)と第2の制御入力(C0)とが1の場合は、第3の入力(In3)を選択するように、
他の入力の1つをその出力として選択することができ、選択された入力が、累算装置の入力に接続されたアービトレーション回路の出力として供給されるアービトレーション回路とを設けることによって、ステップb.1)ないしステップb.3)を単一のステップに統合してモンゴメリ乗算結果を得ることができる。この計算は、第1の整数値Aのビット(A1;0≦I≦s)を、その最下位ビット(A0)から開始して順次に1ビットずつ、第1の制御入力(C1)に適用し、第1の整数値の選択されたビット(AI)の状態と、第2の整数値の最下位ビット(B0)の状態と、累算装置の最下位ビット(S0)の状態とに応じて第2の制御入力(C0)の状態(KI)を生成する回路を設けることによって行われる。
【0058】
第2の制御入力(C0)の状態(KI)は、第1の制御入力(C1)の状態と前記第2の整数値の最下位ビット(B0)の状態が1であって前記累算装置の最下位ビット(S0)の状態がゼロである場合か、前記第1の制御入力(C1)の状態と前記第2の整数値Bの最下位ビット(B0)の状態とが異なる状態であり、前記累算装置の最下位ビット(S0)の状態が1である場合に値1(KI=「1」)を生成し、それ以外の場合には、第2の制御入力(C0)の状態(KI)としてゼロ値(KI=「0」)を生成することによって生成することができる。
【0059】
第2の制御入力(C0)の状態は、論理ANDゲートと論理XORゲートとを含み、論理ANDゲートの入力が第1の制御入力(C1)の状態と第2の整数値Bの最下位ビット(B0)の状態とを受け取り、論理XORゲートの入力が論理ANDゲートからの出力と累算装置の最下位ビット(S0)の状態とを受け取り、前記論理XORゲートの出力が第2の制御入力(C0)の状態として使用される回路によって生成することができる。
【0060】
好ましくは、モンゴメリ乗算を行うために使用される反復回数sがn+2であり、それによってn+2回の反復が行われる拡張モンゴメリ乗算の結果を得る。
この方法は、最上位ビット位置への直列入力を有するとともに、内容の並列出力も可能なn+2ビットのシフト・レジスタを、第1(R2)、第2(R0)、および第3(R1)の記憶装置として使用し、第1の記憶装置(R2)にその最下位ビット位置(R20)からの直列出力を設けて、周期的ビット・ローテーションを行うことができるようにし、第2の記憶装置(R0)がその直列入力で累算装置の最下位ビット(S0)を受け取ることができるようにし、その内容をその最下位ビット(R30)から開始して順次に1ビットずつ(R3I; I=0,1,2,...,n+1)並列出力することができ、n+2ビットを格納することができ、その内容に対して周期的ビット・ローテーションを行うことができる第4の記憶装置(R3)を設け、直列入力と直列出力とを有し、n+2ビットの値を格納することができる第5の記憶装置(R4)を設け、その内容をその最下位ビットから開始して順次に1ビットずつ(R5I I=0,1,2,...,n+1)並列出力することができ、n+2ビットを格納することができる第6の記憶装置(R5)を設け、第5の記憶装置からの第1の入力(R4I)と、第2の制御入力の状態(KI)を生成する回路からの第2の入力とを有し、出力が第2の制御入力(C0)に接続された第1のアービトレーション装置(MX1)を設け、累算装置の最下位ビット(S0、および本明細書ではCSA0も指す)と等しい第1の入力と、回路の出力から受け取る第2の入力(KI)と、第5の記憶装置(R4)の直列出力に接続された第3の入力(R4I)とを有し、出力が第5の記憶装置(R4)の直列入力に接続された第2のアービトレーション装置(MX2)を設け、常にゼロ値(「0」)が供給される第1の入力と、第5の記憶装置の直列出力から受け取る第2の入力(R4I)とを有し、出力が累算装置の直列入力に接続された第3のアービトレーション装置(MX3)を設け、第6の記憶装置に接続された第1の入力(R5I)と第4の記憶装置の直列出力に接続された第2の入力(R3I)とを有し、出力が第1の制御入力(C1)に接続された第4のアービトレーション装置(MX4)を設け、n+2ビット値の直列加算を行うことができ、累算装置の最下位ビット位置からの第1の入力(S0)と、第1の記憶装置(R2)の直列出力からの第2の入力とを受け取り、出力が第3の記憶装置(R1)の直列入力に接続された、加算器を設けることによって、モジュラ算術演算を行うことができるようにすることをさらに含むことができる。
【0061】
好ましくは、累算装置は、各段が第1および第2のフリップフロップ装置と、3個の入力を有する全加算器装置とから成るn+2段の加算およびラッチ段から成り、第1段目の段からは第2のフリップフロップ装置が省かれている。各加算およびラッチ段では、全加算器の第1の入力が第1のフリップフロップ装置の出力に接続され、全加算器の第2の入力が後続の加算およびラッチ段の第2のフリップフロップ装置の出力に接続され、全加算器の第3の入力がアービトレーション装置のそれぞれのビット出力(MUXi 0≦i≦n+1)に接続されている。
【0062】
この方法は、さらに、(n+1)段目の加算およびラッチ段に第1および第2の半加算器装置と第3のフリップフロップ装置とを設け、第1のフリップフロップ装置の入力を第2の半加算器の和出力に接続し、第2のフリップフロップ装置の入力を第2の半加算器の桁上げ出力に接続し、フリップフロップ装置の出力を、(n+2)段目の加算およびラッチ段の全加算器の第2の入力に接続し、第2の半加算器の第1の入力を(n+1)段目の加算およびラッチ段の全加算器の桁上げ出力に接続し、その第2の入力を第1の半加算器の桁上げ出力に接続し、第1の半加算器の第1の入力を全加算器の和出力に接続し、第2の半加算器の第2の入力を第3のアービトレーション装置(MX3)の出力に接続し、第3のフリップフロップ装置の入力を第1の半加算器の和出力に接続し、その出力を(n−1)段目の加算およびラッチ段の全加算器の第2の入力に接続することによって、累算装置の直列入力を介して第3のアービトレーション装置(MX3)から出力を(n+1)段目の加算およびラッチ段の加算結果に加算することもできる。
【0063】
第2の制御入力(C0)の状態は、第2の記憶装置(R0)の最下位ビットと、第4のアービトレーション装置(MX4)の出力と、第1段目の加算およびラッチ段の全加算器の桁上げ出力と、第2段目の加算およびラッチ段の全加算器の和出力とを使用して判断することができる。これは好ましくは、第2の記憶装置(R0)の最下位ビットと第4のアービトレーション装置(MX4)の出力とをAND論理ゲートの入力に接続し、追加の半加算器と追加のフリップフロップ装置とを設け、半加算器の第1の入力を、第2段目の加算およびラッチ段の全加算器の和出力に接続し、その第2の入力を第1段目の加算およびラッチ段の全加算器の桁上げ出力に接続し、半加算器の和出力を追加のフリップフロップ装置の入力に接続し、AND論理ゲートの出力とフリップフロップ装置の出力とをXORゲートの入力に接続し、XORゲートの出力を使用して第2の制御入力(C0)の状態を判断することによって行われる。
【0064】
この方法は、第1(R2)、第2(R0)、および第3(R1)の記憶装置に、それぞれ、モジュラスNの値と、整数Bの値と、モジュラスと整数との和(N+B)の値とをロードし、第2の制御入力(C0)の状態(KI)を生成する回路の入力、第2の制御入力(C0)の状態(KI)を生成する回路の入力、ゼロ値(「0」)の入力、および第6の記憶装置(R5)の出力の入力をそれぞれ選択するように、第1(MX1)、第2(MX2)、第3(MX3)、および第4(MX4)のアービトレーション装置を設定し、第6の記憶装置(R5)の内容に第2の記憶装置(R0)の内容をロードし、累算装置の内容にゼロ値をロードし、各サイクルで第6の記憶装置(R5)の内容が1ビットずつ右にシフトされる非縮減および拡張モンゴメリ乗算を行い、累算装置において非縮減モンゴメリ自乗の結果を得ることによって、整数値Bの非縮減モンゴメリ自乗を行うことをさらに含むこともできる。
【0065】
また、この方法は、第1(R2)、第2(R0)、第3(R1)、および第4(R3)の記憶装置に、それぞれ、モジュラスNの値と、第2の整数(B)の値と、モジュラスと第2の整数との和(N+B)の値と、第1の整数(A)の値とをロードし、第2の制御入力(C0)の状態(KI)を生成する回路の入力、第2の制御入力(C0)の状態(KI)を生成する回路の入力、ゼロ値(「0」)の入力、および第4の記憶装置(R3)の出力の入力をそれぞれ選択するように第1(MX1)、第2(MX2)、第3(MX3)、および第4(MX4)のアービトレーション装置を設定し、累算装置の内容にゼロ値をロードし、各サイクルで第4の記憶装置(R3)の内容が右に1ビットずつシフトされる非縮減および拡張モンゴメリ乗算を行い、累算装置において非縮減モンゴメリ乗算の結果を得るステップとを行うことによって、第1(A)と第2(B)の整数値のモンゴメリ乗算を行うことも含むことができる。
【0066】
調整されたオペランド値A’=A*2s modNを事前計算し、ビット順序を逆転させ、最上位ビットem-1を削除して調整された値E’(e0,e1,...,em-2)2を得ることによって、指数E=(em-1,em-2,...,e1,e0)2の調整された値を構成し、第1、第2、第3、および第5の記憶装置の内容に、それぞれ、モジュラスNの値、調整されたオペランド(A’)の値、モジュラスと調整されたオペランドとの和(N+A’)の値、および調整された指数値E’をロードし、指数値Eのビット長mを求めて、
− 第5の記憶装置(R4)の内容を右シフトするステップと、
− 非縮減モンゴメリ自乗を行って累算装置において第3の記憶装置(R3)の内容の非縮減モンゴメリ自乗を得るステップと、
− 第3の記憶装置(R3)の内容に累算装置の内容をロードするステップと、
− 第3の記憶装置(R1)の内容に第1の記憶装置(R2)の内容と累算装置の内容との和をロードするステップとをm−1回行い、
第5の記憶装置の最下位ビット(R40)が「1」の場合、非縮減および拡張モンゴメリ乗算を行って第2の記憶装置(R0)の内容と第4の記憶装置(R3)の内容との非縮減モンゴメリ乗算結果を累算装置で得て、第2の記憶装置(R0)の内容に累算装置の内容をロードし、第3の記憶装置(R1)の内容に第1の記憶装置(R2)の内容と累算装置の内容との和をロードすることによって、モジュラべき乗AE modNの計算を行うことができる。
【0067】
上記のステップをm−1回反復した後、第2の記憶装置(R0)の内容に1を乗じる非縮減および拡張モンゴメリ乗算を行って累算装置で最終縮減結果を得ることにより、モジュラべき乗計算結果を得る。
【0068】
あるいは、調整されたオペランド値A’=A*2s modNを事前計算し、第1(R2)、第2(R0),第3(R1)、および第5(R4)の記憶装置に、モジュラスNの値、調整されたオペランド(A’)の値、モジュラスと調整されたオペランドとの和(N+A’)、および指数値Eをロードし、指数値値Eのビット長mを求め、フラグを「1」に設定して、
第5の記憶装置(R4)の内容を右シフトするステップと、
第5の記憶装置の最下位ビット(R40)が「1」の場合、フラグの状態を調べ、フラグが「1」でない場合は、非縮減および拡張モンゴメリ乗算を行って第2の記憶装置(R0)と第4の記憶装置(R3)の内容の非縮約および拡張モンゴメリ乗算結果を累算装置で得て、第4に記憶装置(R3)の内容に累算装置の内容をロードし、それ以外の場合は、第4の記憶装置(R3)の内容に第2の記憶装置(R0)の内容をロードし、フラグを「0」の状態にリセットするステップと、
拡張および非縮減モンゴメリ自乗を行って累算装置で第2の記憶装置(R0)の内容の拡張および非縮減モンゴメリ自乗を求めるステップと、
第2の記憶装置(R0)の内容に累算装置の内容をロードするステップと、
第3の記憶装置(R1)の内容に第1の記憶装置の内容と累算装置の内容との和をロードするステップとをm−2回行うことによって、モジュラべき乗AE modNを計算することもできる。
【0069】
上記のステップをm−2回行った後、拡張および非縮減モンゴメリ乗算を行って、累算装置で第2の記憶装置(R0)の内容と第4の記憶装置(R3)の内容との拡張および非縮減モンゴメリ乗算結果を求め、第2の記憶装置(R0)の内容に累算装置の内容をロードし、第3の記憶装置(R1)の内容に第1の記憶装置(R2)の内容と累算装置の内容との和をロードし、第2の記憶装置(R0)の内容に1を乗じる拡張および非縮減モンゴメリ乗算を行って累算装置で最終縮減結果を得るステップとを行う。
【0070】
第1(R2)、第2(R0)、第3(R1)、および第4(R3)の記憶装置に、それぞれ、モジュラス値(N)のn個の最下位ビット(N0)、第2の整数値(B)のn個の最下位ビット(B0)、モジュラス値(N)のn個の最下位ビットと第2の整数値(B)のn個の最下位ビット(B0)の和(B0+N0)、および第1の整数値(A)のn個の最下位ビット(A0)をロードするステップと、
第1(MX1)、第2(MX2)、第3(MX3)、および第4(MX4)のアービトレーション装置を、第2の制御入力(C0)の状態(KI)を生成する回路の入力、第2の制御入力(C0)の状態(KI)を生成する回路の入力、ゼロ値(「0」)、および第4の記憶装置(R3)の入力を選択するように設定し、必要であれば累算装置の内容をゼロにリセットするステップと、
モンゴメリ乗算を行い、その結果(S(I))を累算装置で得て、第2の制御入力のビット状態(KI 0≦1≦n−1)(K0)を第5のレジスタ(R4)で得るステップとを行うことによって、第1の整数値のn個の最下位ビット(A0)と第2の整数値のn個の最下位ビット(B0)のモンゴメリ乗算(MMUL(A0,B0)を計算し、
第1(R2)、第2(R0)、第3(R1)、および第4(R3)の記憶装置に、それぞれ、モジュラス値(N)のn個の最上位ビット(N1)、第2の整数値(B)のn個の最上位ビット(B1)、モジュラス値(N)のn個の最上位ビットと第2の整数値(B)のn個の最上位ビットとの和(B1+N1)および第1の整数値(A)のn個の最下位ビット(A0)をロードするステップと、
第1(MX1)、第2(MX2)、第3(MX3)、および第4(MX4)のアービトレーション装置を、第5のレジスタ(R4)の入力、累算装置の最下位ビット(S0)、ゼロ値(「0」)、および第4の記憶装置(R3)の入力を選択するように設定するステップと、
通常の乗算を行い、その結果(S(II))の最上位ビットを累算装置で、結果(R(4))の最下位ビットを第5の記憶装置で得るステップとを行うことによって行うステップとを行うことによって、第1の整数値のn個の最下位ビット(A0)と、第2の整数値のn個の最上位ビット(B1)と、モジュラス値のn個の最上位ビット(N1)と、第5のレジスタ(R4)で得たnビット値(K0)と、ステップa)で得た結果(S(I))とのA0*B1+N1*K0+S(I)の値を計算し、
第1(R2)、第2(R0)、第3(R1)、および第4(R3)の記憶装置に、それぞれモジュラス値(N)のn個の最下位ビット(N0)、第2の整数値(B)のn個の最下位ビット(B0)、モジュラス値(N)のn個の最下位ビットと第2の整数値(B)のn個の最下位ビット(B0)との和(B0+N0)、および第1の整数値(A)のn個の最上位ビット(A1)をロードするステップと、
累算装置(Sまた、本発明ではCSAも指す)の内容にステップb)で得た結果(R4(II))のn個の最下位ビットをロードし、第5の記憶装置(R4)の内容にステップb)で得た結果(S(II))のn個の最上位ビットをロードするステップと、
第1(MX1)、第2(MX2)、第3(MX3)、および第4(MX4)のアービトレーション装置を、第2の制御入力(C0)の状態(KI)を生成する回路の入力、第2の制御入力(C0)の状態(KI)を生成する回路の入力、第5の記憶装置(R4)からの入力、および第4の記憶装置(R3)の入力を選択するように設定するステップと、
モンゴメリ乗算を行い、その結果(S(III))を累算装置で得て、第2の制御入力の状態(KI 0≦I≦n−1)(K1)を第5のレジスタ(R4)で得るステップとを行うことによって、第1の整数値のn個の最上位ビット(A1)と、第2の整数値のn個の最下位ビット(B0)と、ステップb)で得た結果(R4(II),S(II))とのモンゴメリ乗算の加算の結果を計算し、
第1(R2)、第2(R0)、第3(R1)、および第4(R3)の記憶装置に、それぞれ、モジュラス値(N)のn個の最上位ビット(N1)、第2の整数値(B)のn個の最上位ビット(B1)、モジュラス値(N)のn個の最上位ビットと第2の整数値(B)のn個の最上ビットとの和(B1+N1)、および第1の整数値(A)n個の最上位ビット(A1)をロードするステップと、
第1(MX1)、第2(MX2)、第3(MX3)、および第4(MX4)のアービトレーション装置を、第5のレジスタ(R4)の入力、累算装置の最下位ビット(S0)、ゼロ値(「0」)、および第4の記憶装置(R3)の入力を選択するように設定するステップと、
モンゴメリ乗算を行い、結果(S(IV))の最上位ビットを累算装置で得、結果(R(IV))の最下位ビットを第5の記憶装置で得るステップとを行うことによって、第1の整数値のn個の最上位ビット(A1)と、第2の整数値のn個の最上位ビット(B1)と、モジュラス値のn個の最上位ビット(N1)と、第5のレジスタ(R4)で得たnビット値(K1)と、ステップc)で得た結果(S(III))とのA1*B1+N1*K1+S(III)を計算することによって、第1の整数と第2の整数とモジュラス(N)とが2×nビットである、第1(A=A1*2n+A0)および第2(B=B1*2n+B0)の整数値のモジュラ乗算を行うことができる。
【0071】
また、この方法は、第1
【0072】
【数11】
【0073】
と第2
【0074】
【数12】
【0075】
の整数値のモジュラ乗算を行うステップであって、第1の整数、第2の整数、およびモジュラス
【0076】
【数13】
【0077】
が2×nビットを超えてもよく、計算を第1および第2の整数の2×nビットの後続部分の乗算の中間結果を計算することによって行うことをさらに含むことができる。
他の態様では、本発明は、必要な反復回数(s)がモジュロ値(N)内のビット数(n)よりも多く、モンゴメリ乗算結果がモジュロ値の2倍(2×N)よりも小さい、第1(A)と第2(B)の整数値の拡張および非縮減モンゴメリ乗算を行う装置であって、
モジュロ値(N)を格納する第1の記憶装置(R2)と、
第1の整数値(A)を格納する第2の記憶装置(R0)と、
第1の整数値とモジュロとの和(A+N)を格納する第3の記憶装置(R1)と、
第1(R2)、第2(R0)、および第3(R1)の記憶装置からの第1(In1)、第2(In2)、および第3(In3)の入力を有し、ゼロ(「0」)である第4の入力を有し、第1(C1)および第2(C0)の制御入力を受け取り、それによって他の入力の1つをその出力として選択することができ、累算装置の入力に接続された、アービトレーション装置と、
第1の整数値の選択されたビット(AI)の状態と、第2の整数値の最下位ビット(B0)の状態と、累算装置の最下位ビット(S0)の状態とに応じて第2の制御入力(C0)の状態(KI)を生成する回路と、
n+2ビットの値を格納し、その内容にn+2ビットの値(X)を加算し(S+X→S)、その内容を2で割る(S/2→2)ことができる、累算装置(S)とを含む装置を対象とする。
【0078】
好ましくは、第2の制御入力の状態(KI)を生成するために使用される回路は、選択されたビット(AI)の状態と第2の整数値の最下位ビット(B0)の状態とが1で、累算装置の最下位ビット(S0)の状態がゼロの場合、または選択されたビット(AI)の状態と第2の整数値の最下位ビット(B0)の状態とが異なる状態であり、累算装置の最下位ビット(S0)の状態が1である場合に、値1を生成し、それ以外のすべての場合に回路がゼロ値を生成する。
【0079】
第1(R2)、第2(R0)、および第3(R1)の記憶装置は、それぞれの最上位ビット位置への直列入力を有するとともに、内容の並列出力も可能なn+2ビットのシフト・レジスタとすることができる。第1の記憶装置(R2)は、最下位ビット位置(R20)からの直列出力を有することができ、それによって周期的ビット・ローテーションを行うことができる。
【0080】
また、この装置は、モジュラ算術演算を行うことができるようにする手段をさらに含むことができ、この手段は、
第2の記憶装置(R0)の直列入力を累算装置(S)の最下位ビット(S0)に接続する手段と、
その内容をその最下位ビット(R30)から開始して順次に1ビットずつ(R3I I=0,1,2,...,n+1)直列出力することができ、n+2ビットを格納することができ、その内容に対して周期的ビット・ローテーションを行うことができる第4の記憶装置(R3)と、
直列入力と直列出力とを有し、n+2ビットの値を格納することができる第5の記憶装置(R4)と、
その内容をその最下位ビットから開始して順次に1ビットずつ(R5I I=0,1,2,...,n+1)直列出力することができ、n+2ビットを格納することができる第6の記憶装置(R5)と、
第5の記憶装置からの第1の入力(R4I)と、第2の制御入力の状態を生成する回路からの第2の入力(KI)とを有し、出力が第2の制御入力(C0)に接続された、第1のアービトレーション装置(MX1)と、
累算装置の最下位ビット(S0)と等しい第1の入力と、回路の出力(KI)から受け取る第2の入力と、第5の記憶装置(R4)の直列出力(R4I)に接続された第3の入力とを有し、出力が第5の記憶装置(R4)の直列入力に接続された、第2のアービトレーション装置(MX2)と、
常にゼロ値(「0」)が供給される第1の入力と、第5の記憶装置の直列出力(R4I)から受け取る第2の入力とを有し、出力が累算装置の直列入力に接続された、第3のアービトレーション装置(MX3)と、
第6の記憶装置の直列出力(R5I)に接続された第1の入力と、第4の記憶装置の直列出力(R3I)に接続された第2の入力とを有し、出力が第1の制御入力(C1)に接続された、第4のアービトレーション装置(MX4)と、
n+2ビット値の直列加算を行うことができ、累算装置の最下位ビット位置(S0)からの第1の入力と、第1の記憶装置(R2)の直接出力からの第2の入力とを受け取り、出力が第3の記憶装置(R1)の直列入力に接続された加算器とを含む。
【0081】
累算装置は、n+2段の加算およびラッチ段から成ることができ、各段が第1および第2のフリップフロップ装置と、3個の入力を有する全加算器装置とから成るn+2段の加算およびラッチ段から成り、第1段目の段からは第2のフリップフロップ装置が省かれており、累算装置は、
a)全加算器の第1の入力を第1のフリップフロップ装置の出力に接続する手段と、
b)全加算器の第2の入力を後続の加算およびラッチ段の第2のフリップフロップ装置の出力に接続する手段と、
c)全加算器の第3の入力をアービトレーション装置のそれぞれのビット出力(MUXi 0≦i≦n+1)に接続する手段とを含む。
【0082】
累算装置は、累算装置の直列入力を介して第3のアービトレーション装置(MX3)から出力を(n+1)段目の加算およびラッチ段の加算結果に加算する手段をさらに含むことができ、この手段は、
a)第1および第2の半加算器装置と第3のフリップフロップ装置と、
b)第1のフリップフロップ装置の入力を第2の半加算器の和出力に接続する手段と、
c)第2のフリップフロップ装置の入力を第2の半加算器の桁上げ出力に接続し、フリップフロップ装置の出力を、(n+2)段目の加算およびラッチ段の全加算器の第2の入力に接続する手段と、
d)第2の半加算器の第1の入力を(n+1)段目の加算およびラッチ段の全加算器の桁上げ出力に接続し、その第2の入力を第1の半加算器の桁上げ出力に接続する手段と、
e)第1の半加算器の第1の入力を全加算器の和出力に接続し、第2の半加算器の第2の入力を第3のアービトレーション装置(MX3)の出力に接続する手段と、
f)第3のフリップフロップ装置の入力を第1の半加算器の和出力に接続し、その出力を(n−1)段目の加算およびラッチ段の全加算器の第2の入力に接続する手段と含む。
【0083】
また、第2の記憶装置(R0)の最下位ビットと、第4のアービトレーション装置(MX4)の出力と、第1段目の加算およびラッチ段の全加算器の桁上げ出力と、第2段目の加算およびラッチ段の全加算器の和出力とを使用して第2の制御入力(C0)の状態を判断することができ、
a)第2の記憶装置(R0)の最下位ビットと第4のアービトレーション装置(MX4)の出力とをAND論理ゲートの入力に接続する手段と、
b)追加の半加算器と追加のフリップフロップ装置と、
c)半加算器の第1の入力を、第2段目の加算およびラッチ段の全加算器の和出力に接続し、その第2の入力を第1段目の加算およびラッチ段の全加算器の桁上げ出力に接続する手段と、
d)半加算器の和出力を追加のフリップフロップ装置の入力に接続する手段と、
e)AND論理ゲートの出力とフリップフロップ装置の出力とをXORゲートの入力に接続し、XORゲートの出力を使用して第2の制御入力(C0)の状態を判断する手段とを含む。
【発明を実施するための最良の形態】
【0084】
本発明は、ハードウェア手段の点で高速かつ効率的なモジュラ算術演算を行う方法および装置に関する。本発明の好ましい実施形態の中核にあるのは、修正(拡張)モンゴメリ法に基づく、2つの整数AおよびBモジュロN(以下A・B modN)のモジュラ乗算の計算である。
【0085】
修正(拡張)モンゴメリ乗算の定義:A、B≦2*Nであり、整数s≧nであるような、nビット長の奇数のモジュラスN、整数A、Bについて、NRMM(s)(A,B,N)=A*B*2-s mod(N+ε*N)によって非縮減および拡張モンゴメリ乗算(NRMM)を定義する。ただし、縮減された結果の場合はε=0であり、縮減されていない結果の場合はε=1である。以下、文脈(すなわちNおよびs)が分かっている場合、NRMM(s)(A,B,N)を示すのに略してNRMM(s)(A,B)を使用する。NRMM(s)(A,B)の計算は、縮減ステップ1.4を行わずに、ステップ1.1、1.2、および1.3をs(≧n)回反復することによって行う。以下、このような計算の結果を非縮減および拡張モンゴメリ乗算とも呼ぶ。非縮減および拡張モンゴメリ乗算によって得られた結果は必ずしも縮減されているわけではない(すなわちNRMM(s)(A,B,N)がモジュラスNよりも大きい場合がある)ことに留意することが重要である。
【0086】
NRMM(s)(A,B)を計算するプロセスを以下のステップで示す。
プロセス1:
入力:A、B、N、s、n(前提条件:Nはnビットの整数であり、A,B<2*Nで、Nは奇数であり、s≧nである)
出力:NRMM(s)(A,B)
【0087】
【数14】
【0088】
A、B<Nかつs=nである特別な場合は、最終縮減ステップが無視されるほとんどの用途で使用される、従来のモンゴメリ乗算である。本発明の方法によると、このプロセスは、縮減(ステップ1.4)を行わずに行い、本発明の好ましい実施形態では、s=n+2を使用し、入力は2*Nによって制限され、得られる結果も2*Nによって制限されるが、B<2*Nかつ、Aがn+1ビットを超えないことを条件とすれば十分である。
【0089】
本発明の方法は、以下の事実に基づく。すなわち、s=n+2回の反復を行う場合、nビット長のモジュラスNと(n+1)ビット長の入力値AおよびB(ただしA,B<2*N)で、NRMM(s)(A,B)の最終結果は2*Nを超えず、暫定累算結果(ステップ3.2)は6*Nを超えない。このことは、入力値と出力値が同じ上限(2*N)によって制限され、したがってオーバーフローの可能性がないこの拡張及び非縮減モンゴメリ乗算の連続的適用が可能になるため、極めて重要である。前述のように、べき乗計算プロセスAE modNは、モンゴメリ乗算とモンゴメリ自乗のシーケンスによって実施することができる。nビット長のオペランドA(A<N)を使用したMMUL(A,A)演算によって、Nより大きく2*Nより小さい非縮減結果が得られる。したがって、s=n+2回の非縮減モンゴメリ乗算によって、中間ステップにおける縮減の必要なしに、(n+2)ビット長の記憶レジスタと最大(n+3)ビットの結果を計算することができる累算器とを使用して、NRMM(s)の連続べき乗シーケンスを行うことができる。後述するように、本発明の方法によると、(n+2)ビットの累積器(CSA)の実施態様を使用することができる。さらに、s=n+2は、縮減なしのこのようなべき乗計算を保証する最低回数である。
【0090】
非縮減拡張モンゴメリ乗算の計算は、積A*BにK・Nの値(任意のK≧0)を加えることに暗黙的に基づいている。Kの値は、事前にはわからず、反復により構築される。本発明の好ましい実施形態では、後述するように、このプロセスの各反復において、整数Kのさらに他のビットKIを計算する。A*Bの積にモジュラス値Nを任意の回数加えることができ、同じ結果のモジュラスNとみなすことができる。すなわち、範囲[0,N)に縮減した場合、K*Nを加えた後の結果によって同じ剰余モジュロNが与えられる。Kの値は、A*B+K*Nが2sによって割り切れるように選定する。結果のLSBからs個のゼロを廃棄するために、(s回右にシフトして)結果のA*B+K*Nを2sで除算する。したがって、結果は実際にはs回の連続右シフト(RSHs)演算、RSHs(A*B+K*N)=(A*B+K*N)/2sの結果であり、RSHs(X)=X*2-sはXを右にs回シフトすることを示す。これらのシフトは各反復(ステップ3.3)ごとに行われる。
【0091】
本発明の方法により行われるNRMM(s)は、累積結果に値が加算されるs=n+2回の反復から成る。各反復で累積結果に加算される値は、ステップ3.2の暫定累積加算結果が偶数になるように選定する。したがって、累積結果の暫定値のLSBビットは常にゼロであり、1回の右シフトによって2で割り切ることができる(ステップ3.3)。
【0092】
具体的には、S=S+AI*Bの計算結果が奇数値の場合は常に、(奇数の)モジュラスNをSに加える。したがって、各反復において、以下の計算を行う。
【0093】
【数15】
【0094】
したがって、結果は常に2で割り切れ(すなわち右シフトによって)、剰余は出ない。
本発明の好ましい実施形態によると、従来のモンゴメリ乗算法の修正を使用して、完全にハードウェアによって実現可能なモジュラ算術演算の実施を容易にする。従来のモンゴメリ乗算を計算する従来技術の方法では、MMUL(A,B)=A*B*2-n modNの計算は、n回の反復プロセスで得られ、nはモジュラスNのビット数である。前述のように、この計算でn回を超える反復を行うことには大きな利点がある。本発明の好ましい実施形態では、s=n+2を用い、このタイプのモンゴメリ乗算には以下の論法が成り立つ。
【0095】
nビット長の入力値AおよびB(A,B<N)とnビット長のモジュラスNを使用し、s=n+2回の反復を行ってNRMM(s)(A,B)を計算した場合、Aのすべてのビットが走査され、最終結果はN+B<2*Nを超えず、暫定累積結果は2*(N+B)<4*Nを超えない。
【0096】
さらに、(n+1)ビット長の入力値AおよびB(ただしA、B<2*N)とnビット長のモジュラスNを使用し、s=n+2回の反復を行って非縮減および拡張NRMM(s)(A,B)を行った場合、Aのすべてのビットが走査され、最終結果は(N+B+N)/2*Nを超えず、暫定累積結果は2*(N+B)<6*Nを超えない。
【0097】
(n+1)ビット長の入力値A(A<2*N)とnビット長のモジュラスNを使用し、s=n+2回の反復を行ってNRMM(s)(A,1)を計算する場合、Aのすべてのビットが走査され、得られた最終結果が縮減、すなわちNより小さくなることに留意することが重要である。
【0098】
その結果、nビット長のモジュラスNと、2*Nによって制限された入力とを使用して非縮減モンゴメリ乗算の連鎖シーケンスを行った場合、出力は2*Nによって制限されたままであり、1を乗じる1回の(最終)拡張モンゴメリ乗算によって(ステップ1.4の縮減を実際に行わずに)、結果が[0,N)の範囲に縮減される。
【0099】
後者の結果は、実際の適用においてきわめて重要である。前述のように、モンゴメリ乗算とモンゴメリ自乗(MMUL(X,A)、MMUL(X,X))演算のシーケンスを使用してべき乗計算プロセスAE modN(A<N)を実施することができる。nビット長のオペランドX(X<N)を使用し、実際にn+1ビットのオペランドX<2*Nを使用しても、Nよりは大きく2*Nよりは小さい非縮減結果になる。s=n+2回のこの修正モンゴメリ乗算(非縮減)により、中間ステップにおける縮減の必要なしに、(n+2)ビット長の記憶レジスタと(n+3)ビット長の累算器(すなわち桁上げのための追加の1ビットを含む(n+2)ビット長の累算器)を使用して、NRMM(s)の連続べき乗計算シーケンスを行うことができる。さらに、s=n+2は、縮減なしのこのようなべき乗計算を保証する最小回数である。
【実施例3】
【0100】
以下の例では、修正モンゴメリ乗算を、指数AE modNの計算に使用する。ただし、A=212、E=240=(11110000)2(m=8)、およびN=249(実施例2と同様n=8)である。この修正モンゴメリ乗算は、s=n+2=10回の反復によって行われ、したがってA’=212*210 mod249=209の事前計算が必要である。
【0101】
表3(前提条件:A=212、E=240(11110000)2、N=249、およびT(I)=A’=209)
【0102】
【表3】
【0103】
表2では、前のステップT(I+1)で求めた値の後に、ステップ2.1のT(I+1) 2で得られた結果と、ステップ2.2のT(I)で得られた結果が示されている。最終結果は、T(0)=NRMM(s)(T(0),1)=241を計算することによって得られる。表に示すように、行った中間モンゴメリ乗算の結果は縮減されていない。反復I=6、5、4、および3で行ったステップ2.2の演算において、結果はNRMM(s)(T(I)、A’)>Nであり、反復回I=3におけるステップ2.1の演算では結果はNRMM(s)(T(I+1),T(I+1))>Nであった。前述のように、非縮減モンゴメリ乗算には制限が設けてあり、2*Nを超えない。表4に、上記の表4のステップI=3で行ったNRMM(s)(319,319)の計算の場合の修正モンゴメリ乗算の利点を例示する。
【0104】
表4:(前提条件:S=0、A=319=(100111111)2、B=319、およびN=249)
【0105】
【表4】
【0106】
得られた結果は、319*319*2-10 mod249=175であり、明らかにすべての暫定累積結果が6*Nによって制限されている。I=5の場合、S=S+S0*N=1056=(10000100000)2の暫定結果が得られ、これは11ビットの(n+3)であることに留意されたい。実際には、これは、非縮減モンゴメリ乗算を使用したこのような計算に必要な最大ビット長であり、したがって、CSAは最大n+3ビットの結果を計算することができなければならない。しかし、各演算においてCSAで行われる連続右シフトのため、CSAはn+2ビットCSAとして実施される。
【0107】
KIビットは、各反復で得られる部分結果S=S+AI*BのLSBである値S0をとる。この値(KI)は、直前の反復回の結果の最下位ビットと、他の既知の値によって完全に決まり、
【0108】
【数16】
【0109】
によって得られ、CSA’1(603)は、CSAから得られる出力である。図6を参照しながら詳述するように、ある種のハードウェアを追加することにより、CSAはCSA’1(603)出力を提供することができ、この出力を使用してKIビットの生成プロセスが高速化される。この実現は、ハードウェアで容易に実施可能である。本発明の好ましい実施形態によるKIの決定に基づく装置を、図2に示す。この装置では、AのAIビットを供給するために追加のシフト・レジスタR3を使用する。R3レジスタは、直列出力を有し、そのLSBにAの値を保持するsビットと、その左端の2つのMSB位置に、追加の2回の反復(s=n+2)を行うために使用する追加の2つの(ゼロ)ビットを有する。CSAは、s+2ビットであり、追加の記憶装置として機能し、したがって、中間ステップで得られる部分結果のために追加の記憶装置を設ける必要がない。
【0110】
本発明の好ましい実施形態では、KIの値は、AI、R00、およびCSA’1(603)の値から実現される。図2を参照すると、KIの値は、A1、R00、およびCSA’1を入力として受け取る適切な回路602(その可能な実施態様を図3に示す)を使用して実現される。ビットB0が、レジスタR0(R00)のLSBを受け取るラッチ装置200に入れられる。NRMM(s)(A,B)の計算を行うために、値B、B+N、N、およびAをそれぞれのレジスタR0、R1、R2、およびR3にロードし、CSAの内容をゼロ化することによってシステムを初期設定する。したがって、K0は、A0=B0=1の場合にのみ「1」となる。
【0111】
モンゴメリ乗算を行うときにNが奇数の場合、CSAの内容は常に偶数であり、それによって1回の右シフトによって2で割る除算が可能になり、剰余が出ないことに留意されたい。さらに、CSAのLSBは、CSA0出力で得られ、したがって、剰余がある場合(正規乗算)、その剰余はCSA0出力で得られる。
【0112】
図3に、KIビットを供給する回路602の可能な一実施態様を示す。図3の実施態様は、ANDゲート300と排他的OR(XOR)ゲート301を使用して実現され、ANDゲートの入力はビットAIおよびB0であり、XORゲートの入力はANDゲート300の出力とCSA’1603である。CSAからのCSA’1603出力によって、CSA LSBの期待値が得られ、したがってKIビットの実現が高速化されると共に簡略化される。
【0113】
以上で説明し例示したように、本発明の方法は、拡張および非縮減モンゴメリ乗算NRMM(s)(A,B)の高速で効率的な計算のために使用される。この場合、AおよびBは2*Nより小さく、Nは最大nビット(s≧n+2)である。後述するように、この装置に変更を加えて、モンゴメリ・インタリーブド・モジュラ乗算とも呼ばれるnビットを超える整数のモジュラ積計算を行えるようにすることができる。
【0114】
図4に、拡張非縮減モンゴメリ・モジュラ乗算に基づく算術演算を行う本発明の好ましい実施形態による装置を示す。この装置は、本明細書では公開鍵インターフェース(PKI)とも呼び、(それぞれがn+2ビットの)6個のレジスタR0、R1、R2、R3、R4、R5と、(n+2ビットの)桁上げ保存加算器CSAとに基づき、何らかの制御(図示せず)を備える。このPKI装置は、以下での述べるように、様々な算術演算とモジュラ算術演算を行うことができる。
【0115】
図4の装置には、追加のマルチプレクサMX1、MX2、MX3、およびMX4と、シフト・レジスタR4およびR5が組み込まれている。MUXの制御入力C1はMX4の出力に接続されている。MX4はレジスタR3の直列出力とR5の直列出力とのうちから選択するアービトレータとして機能する。レジスタR2、R3、およびR4は、直列入力と直列出力を有し、周期的ビット・ローテーションを行うことができる。他方のMUX制御入力C0は、MX1の出力に接続されている。MX1は、レジスタR4からの入力値と値KIを生成する回路からの入力値のいずれかを選択するアービトレータとして機能する。レジスタR4は、MX2の出力に接続された直列入力を有する。MX2はCSA0値の入力、R4の出力(R4の周期的ビット・ローテーションを行う際に有用)、またはKI602の値のいずれかを選択するアービトレータとして機能する。
【0116】
第3のマルチプレクサMX3は、CSA直列入力への入力を選択するとともに、「0値」とMX4の出力のいずれかを選択することもできる。MX3の出力は、CSAのn番目のビットに加えられ、それによって、後述するように各ステップでCSA(I+1)=(CSA(I)+out(I)+MX3(I)*2n)/2(ただし、out(I)およびMX3(I)はそれぞれMUXおよびMX3からの出力)の計算を行うことによってCSAの内容が設定される。レジスタR5は、より複雑な算術演算(すなわちべき乗計算)に関係する自乗演算を行うためにのみ使用されることに留意されたい。以下で示すように、自乗演算を行うためにレジスタR5にはレジスタR0の内容がロードされる。したがって、同じ装置をレジスタR5なしで実現し、多重化技法を使用してレジスタR0の後続ビットを読み取ることもできる。CSAの可能な実施形態を図6Aおよび図6Bに示す。
【0117】
図6Aおよび図6Bに示すCSAは、n個の全加算器(FA)のセットが直列接続された直列手法に基づく。図6Aに示すCSA600は、nビットCSAであり、各FAは3つの入力と、桁上げ(C)と和(S)の2つの出力を有し、各出力はフリップフロップ(FF)装置の入力である。各FAは、以下の入力を受け取る。すなわち、後続のFAのS出力を受け取るFFの出力と、それ自体のC出力を受け取るFFの出力と、MUX(MUXn-1,MUXn-2,...,MUX0)からの対応する入力である。このようにして、CSAの内容の右シフトと、MUX出力outの加算とが行われる。左端のFA装置610は、図6Bに示す他の2段611および612からの入力を受け取る。
【0118】
図6Bに示す追加の段611および612は、図6AのnビットCSA600を(n+2)ビットCSAに拡張するために使用される。図6Bの第n段611は、CSAの内容にMX3(I)*2nを加算するために使用される。第n段611によって4ビットの加算が行われるように図示されているが、実際にはこの段によって3ビットのみが合計されることを理解されたい。具体的には、モンゴメリ方式の計算を行うときは、MX3から受け取る入力は常にゼロ状態であり、インタリーブド乗算の一部である正規乗算を行うときは、第(n+1)段612から受け取る入力がゼロ状態である。
【0119】
システムのパフォーマンスを高速化するために、第1段のFAのC出力604と第2段のFAのS出力608が、半加算器(HA)607に接続され、HA607のS出力がFFに接続され、このFFから出力CSA’1603が、KIを決定するために使用される回路に供給される。HA607は、論理XORゲートまたは
【0120】
【数17】
【0121】
の演算(すなわち基底2モジュラ加算)を行うことが可能な任意の装置に置き換えることもできる。また、CSAの直列出力CSA0はFF装置を介して供給されるのではなく、第1段のFAのS出力から直接得られることにも留意されたい。
【0122】
以下に、本発明の好ましい実施形態による様々な算術演算の適用について述べる。これは限られた演算セットであるが、本発明の方法を使用する他の可能な演算を含むより広いセットの適用を限定するものではなく、例示のために示すに過ぎない。
【0123】
モンゴメリ自乗(NRSQR (s) )
以下のプロセスは、CSA=(B*B+K*N+CSA)・2sの計算のために使用され、したがって、整数値Bの非縮減および拡張モンゴメリ自乗NRMM(s)(B,B)を実現する。回数はs≧nであるが、最適な選定回数としてs=n+2を示す。
【0124】
入力:B、N、s(B→R0、B+N→R1、N→R2)
出力:NRSQR(s)=NRMM(s)(B,B)
【0125】
【数18】
【0126】
この計算のために、KI、KI,「0」、およびR5の入力をそれぞれ選択するようにMX1、MX2、MX3、およびMX4の制御入力を設定する。この計算の場合、MX2のための入力の選択は結果に影響を与えないことに留意されたい。この演算をインタリーブド乗算の一部として行う場合、MX3の制御入力は、R4入力を選択するように設定する。s回の反復を行った後、R4レジスタからKの値を得る。従来の並列/直列技法(図示せず)またはソフトウェアを使用して、R5の内容にレジスタR0の内容をロードすることができる(図5)。このNRSQRプロセスは、初期設定ステップでCSAの内容をゼロ化することによって、(B*B+K*N+CSA)/2sまたは(B*B+K*N)/2sを計算するためにも使用することができることを理解されたい。
【0127】
非縮減および拡張モンゴメリ乗算(NRMM (s) )
本発明の方法により、PKI装置によって実施される非縮減モンゴメリ乗算について説明する。以下のプロセスでは、縮減されていない結果CSA=(A*B+K*N+CSA)/2sを計算する。
【0128】
入力:A、B、N、s(A→R3、B→R0、B+N→R1、N→R2)
出力:NRMM(s)(A,B)
【0129】
【数19】
【0130】
MX1およびMX4の制御入力を、KIおよびR3の入力がそれぞれ選択されるように設定する。MX2およびMX3の制御入力を、単純NRMM(s)を行うときにKIおよび「0」の入力をそれぞれ選択するように、あるいは(図5に示す)インタリーブド乗算の一部としてKIおよびR4の入力をそれぞれ選択するように設定する。前述のように、sサイクルの計算が完了するとKの値がR4レジスタで得られる。当然ながら、このNRMM(s)プロセスは、初期設定ステップでCSAの内容をゼロ化することによって、(A*B+K*N)/2sを計算するために使用することもできる。
【0131】
1を乗じるモンゴメリ乗算(MMULBY1 (s) )
以下のプロセスは、本発明の方法により、PKI装置を使用し、任意の値BについてCSA=(B+K*N+CSA)/2sを計算するために使用される。前述のように、B<2*Nおよびs=n+2の場合、MMULBY1(s)(B)演算によって得られる結果は縮減される(B<2*Nおよびs=n+2の場合 MMULBY1(s)(B)<N)。
【0132】
入力:B、N、s(B→R0、B+N→R1、N→R2、1→R3)
出力:MMULBY1(s)(B)=NRMM(s)(B,1)
【0133】
【数20】
【0134】
MX1、MX3、およびMX4の制御入力を、KI、「0」、およびR3の入力をそれぞれ選択するように設定する(MX2の選択はこの演算には影響を与えない)。Kの値はR4レジスタで得られ、sサイクルの計算が終了すると最終結果がCSAで得られる。R3に値1(n+2ビット)をロードする代わりに、(図4に破線で示すように)MX4出力に最初のサイクルで「1」が出力され、残りのサイクルで「0」が出力されるように強制する外部制御を使用することもできることに留意されたい。前述のように、初期設定ステップでCSAの内容をゼロ化することによって(B+K*N)/2sの計算を行うことができる。
【0135】
正規乗算(RMUL)
本発明の方法により、PKI装置を使用して正規乗算を行う方法は様々ある。以下のプロセスは、CSA:R4=A*B+C*D+CSA(CSAの内容には前回行った演算の結果が保持されるか、またはCSAの内容を所望の値に設定することもできる)を計算する可能な1つの方法である。RMUL演算のMSBは、CSAで得られ、LSBはR4で得られる。
【0136】
入力:A、B、C、D、n(B→R0、B+D→R1、D→R2、A→R3、C→A4)
出力:RMUL(A,B,C,D)=A*B+C*D+CSA
【0137】
【数21】
【0138】
MX1、MX2、MX3、およびMX4の制御入力を、R4、CSA0、「0」、およびR3の入力をそれぞれ選択するように設定する。n回の反復を行った後、レジスタR4で結果のn個のLSBが得られ、CSAで結果のn個のMSBが得られる。
【0139】
モンゴメリ指数
PKIの指数計算への適用は、AE modN(一般性を失わずにA<N)を計算する前述の指数プロセスに基づく。PKI装置を使用してこの計算を行うには、事前計算値A’=A*2s modNが必要である。この特定のプロセスでは、指数E=(em-1,em-2,...,e0)の調整(打切り)値E’が必要であり、MSBem-1が削除され、ビット順序が逆転され、したがってE’=(e0,e1,...,em-2)2(mはE内のビット数)となる。
【0140】
プロセス2
入力:m、A’、N、E’(A’→R0、A’+N→R1、N→R2、A’→R3、E’→R4)
出力:CSA=AE modN(左から右の手法)
【0141】
【数22】
【0142】
上記のプロセスではループでモンゴメリ自乗と乗算のシーケンスを行う。プロセス2を使用したPKI装置の動作の詳細をフローチャートの形で図7Aに示す。この動作はステップ730および731で開始され、A’、E’、N、およびm−1の値がPKI装置に入力される。一連の動作(上記のステップ4.1ないしステップ4.3)を、ステップ732aおよび732bから始まるループで行い、レジスタR4の内容に対して右シフトを行い、CSAの内容をゼロ化し、R0の内容のNRMSQR(s)を行う。ステップ732Cで、CSAで得られたNRMSQR(s)の結果がレジスタR0にロードされ、CSAとレジスタR2の内容の加算結果がレジスタR1にロードされる。
【0143】
ステップ732dで、上記の指数プロセスのステップ4.3の処理が行われ、R4のLSBを検査し、それが「1」の場合、CSAの内容がゼロ化され、レジスタR0およびR3の内容のNRMM(s)が行われ、その結果がR0に格納されると共にR2の内容にも加算され、レジスタR1に格納される。処理はステップ732eに進み、ループ・インデックスiの値を1だけ減少させ、ステップ732fで、そのループ・インデックスiがゼロか否かを調べる。iがゼロ化されていない場合、ステップ732aに移行してこのプロセスをもう一度反復する。iがゼロの場合は、CSAの内容がゼロ化され、R0の内容に対してMMULBY1(s)演算を行う。MMULBY1(s)演算を行って2s因子を削除した後、CSAでべき乗計算(縮減)結果が得られる。
【0144】
図7Aに示すプロセスは、外部制御(図示せず)を使用して行われることを理解されたい。この制御は、プロセッサ/コントローラを使用してソフトウェアによって、または専用ハードウェアを付加することによって行うことができる。
【0145】
右から左に実行される2進べき乗計算、m配列べき乗計算、スライディング・ウィンドウべき乗計算など、その他のべき乗計算プロセスも同様にして実施することができる(「Handbook of Applied Cryptography」、Alfred J. Menezes,Paul C. van Oorschot、およびScott A. Vanstone、CRC Press、1996年10月)。
【0146】
PKI装置を使用した他のべき乗計算の例を、以下のプロセスで説明する。このプロセス(右から左の2進べき乗計算)では、直接、指数値を使用し、そのビットの調整は不要である。
【0147】
プロセス3
入力:m(>1)、A’、N、E(A’→R0、A’+N→R1、N→R2、A’→R3、E→R4)
出力:CSA=AE modN
【0148】
【数21】
【0149】
このプロセスのPKI動作を図7Bに示す。このプロセスは、ステップ750および751で開始され、値A’、E’、N、およびm−1がPKI装置に入力され、フラグが「1」に設定される。上記の指数プロセスのステップ5.1ないし5.4で行われる演算が、ステップ752aから開始され、レジスタR4の内容に対して右シフトが行われる。ステップ752bで、R4のLSBを調べ、「1」の場合はステップ752cでさらにフラグが「1」の状態か否かを判断する検査を行う。フラグの状態が「1」の場合、レジスタR3にレジスタR0の内容がロードされ、フラグの状態が「0」にリセットされる。ステップ752cでフラグの状態が「0」の場合、CSAの内容がゼロ化され、レジスタR0およびR3の内容に対してNRMM(s)演算を行い、その結果がCSAで得られ、R3レジスタにロードされる。動作は、ステップ752dに制御を渡して継続される。
【0150】
ステップ752bでR4レジスタのLSBの状態が「1」でない場合、処理はステップ752dに進み、CSAの内容がゼロ化され、R0の内容のNRSQR(s)演算が行われ、その結果がCSAで得られる。次に、NRSQR(s)の結果はレジスタR0にロードされ、レジスタR2の内容にも加算される。CSAとレジスタR2の内容の加算結果がレジスタR1に格納される。このプロセスはステップ752fに進み、ループ・インデックスiを1だけ減少させる。ステップ752eで、iがゼロか否かを調べる。iがゼロでない場合、制御はステップ752aに渡されてもう一度反復が行われる。iがゼロの場合は、CSAの内容がゼロ化され、R0およびR3の内容のNRMM(s)演算を行い、その結果がCSAで得られ、レジスタR0にロードされる。レジスタR2とCSAの内容の加算がレジスタR1に格納され、CSAの内容がゼロ化され、MMULBY1(s)が行われる。次に、最終(縮減)結果がCSAで得られる。
【0151】
前述のように、この動作の各ステップは外部制御を使用して行われる。
べき乗計算プロセスの様々な実施態様の選択に柔軟性をもたせることは、実際の適用において重要である。たとえば、右から左に実行されるべき乗計算プロセスによって、2つのPKI装置の並列使用が可能になる。
【0152】
また、本発明の方法は、特に従来のモンゴメリ乗算方法で行われる減算の検出に基づく攻撃に対して、PKI装置のセキュリティを大幅に向上させることを理解されたい。そのような攻撃方法では、行われた縮減演算を暴露することによってユーザの秘密(プライベート)鍵を計算する(W. Schindler「A Timing Attack against RSA with the Chinese Reminder Theorem」、第2回国際ワークショップ、米国マサチューセッツ州ウースター、2000年8月)。このような攻撃に対して現在使用されている一般的な方法は、追加の(ダミー)減算を行うことであり、これは当然ながらより多くの時間と電力を消費する。本発明の方法では減算は行わないため、そのような方法を使用して秘密鍵を暴くことは不可能である。
【0153】
前述のように、本発明の方法を使用して、並列稼働する2つのPKI装置を使用して右から左に実行されるべき乗プロセスを実施することができる。当業者ならわかるように、このような並列実施態様は、システムのセキュリティをさらに向上させる。そのような並列システムでいつどのような演算が行われるかを追跡し、特定するのは困難なため、敵対的作業はさらに難しくなる。
【0154】
モンゴメリ・インタリーブド乗算
図5で、モンゴメリ・インタリーブド乗算の異なるステップ(I、II、IIIおよびIV)のために各レジスタ(R0、R1、R2、R3、およびR4)にロードされる値と、各マルチプレクサ(MX1、MX2、MX3、およびMX4)の入力の選択について説明されている。各ステップで、レジスタにそれぞれの値がロードされ、それに対応する入力を供給するようにMUXの制御入力が設定され、それぞれの積を計算するs回の反復のプロセスが行われる。
【0155】
以下の説明では、A・B modNのモンゴメリ・インタリーブド・モジュラ乗算について説明する。ここで、A、B、およびNは2nビットの値である。各整数値A、B、およびNはnビットの部分値の対として扱われる。たとえば、A=A1*2n+A0の部分値は、A=(A1,A0)と表す。ただし、A1はAのn個のMSBを示し、A0はAのn個のLSBを示す。同様に、B=B1*2n+B0およびN=N1*2n+N0の部分値は、B=(B1,B0)およびN=(N1,N0)で示す。この実施形態に(ソフトウェアによって)変更を加え、任意の長さのA、B、およびNについてA・B modNの計算を可能にすることもできる。他の態様では、各整数は、各部分値がnビットのl個の部分値から成る。
【0156】
ステップIで、レジスタR0、R1、R2、およびR3にそれぞれB0、B0+N0、N0、およびA0をロードして(A0*B0+N0*K0)/2-nの計算を行う。さらに、MX1、MX2、MX3、およびMX4の制御入力を、それぞれKI、KI、「0」、R3の入力を選択するように設定する。結果(A0*B0+N0*K0)/2-n A0*B02-s modN0はCSAに格納されたままである。このステップではMX2はKI出力を選択するため、レジスタR4には次のステップの計算に必要なK0値のビットがロードされる。
【0157】
ステップIIで、正規乗算を行ってA0・B1+N1・K0+CSA(I)を計算する。ここでCSA(I)は前のステップであるステップIで得られた結果である。R0、R1、R2、およびR3レジスタにそれぞれ値B1、B1+N1、N1、およびA0がロードされ、MX1、MX2、MX3、およびMX4の制御入力が、それぞれR4、CSA0、「0」、R3の入力を選択するように設定される。R3ビットの右シフトは周期ビット・ローテーションであり、そのため実際にはR3にA0の値を再ロードする必要がないことに留意されたい。このステップでは、この装置を正規乗算の計算に使用するため、結果のn個のLSBがR4レジスタの直列入力に供給され、結果のn個のMSBはCSAに残る。
【0158】
次のステップであるステップIIIで、(A1*B0+N0*K1+R4*2n+CSA)/2-n modN0の計算を行う。このために、このステップの演算の前に、R4レジスタに格納されている値をCSAに格納し、CSAの内容をR4レジスタに格納する。さらに、レジスタR0、R1、R2、およびR3に、それぞれ値B0、N0+B0、N0、およびA1をロードし、MX1、MX2、MX3、およびMX4の制御入力を、それぞれKI、KI、R4、R3の入力を選択するように設定する。このステップの処理中、R4レジスタの内容にK1のビットKI 1がロードされる。このステップの結果は、最終ステップの計算のためにCSAに残される。
【0159】
最後のステップIVで、A1*B1+N1*K1+CSA(III)の正規乗算を行う。ここでCSA(III)は、ステップIIIで得られた結果である。レジスタR0、R1、R2、およびR3に、それぞれ値B1、B1+N1、N1、およびA1をロードし、MX1、MX2、MX3、およびMX4の制御入力が、それぞれR4、CSA0、「0」、R3の入力を選択するように設定される。このステップでは、結果のn個のLSBがR4レジスタにロードされ、結果のn個のMSB(n+1ビットの場合もある)がCSAで得られる。
【0160】
このプロセスの各ステップ(ステップIないしステップVI)の最終結果は、Nより大きい。したがって、縮減が必要な場合がある。必要な場合は、各ステップの後にソフトウェアによって縮減を行う。あるいは、拡張非縮減手法を使用してインタリーブド乗算の同じ方法を実施することができ、その場合、各ステップ後に得られた結果の縮減を行わなくても済む。
【0161】
さらに、インタリーブド乗算の暫定結果を記憶するソフトウェアを使用して、より大きな値の計算を行うこともできる。
以上の各例および説明は、例示のためのものであって、決して本発明を限定するものではないことは言うまでもない。当業者ならわかるように、本発明は、本発明の範囲から逸脱することなく、上述の技法とは異なる方法を使用して多様な方法で実施することができる。
【図面の簡単な説明】
【0162】
【図1】乗算および加算演算を行う従来技術の装置の概略を示すブロック図である。
【図2】非縮減および拡張モンゴメリ乗算を計算する本発明の好ましい実施形態の概略を示すブロック図である。
【図3】KIビットを生成する本発明の好ましい一実施形態を示す概略図である。
【図4】モンゴメリ乗算を使用してモジュラ算術演算を行う本発明の好ましい実施形態の概略を示すブロック図である。
【図5】本発明の好ましい実施形態による、インターリーブド・モンゴメリ乗算を計算するプロセスを示す概略図である。
【図6】図6Aは、本発明の方法によるCSA装置の可能な実施形態を示す略図である。 図6Bは、本発明の方法によるCSA装置の可能な実施形態を示す略図である。
【図7−A】PKI装置を使用してべき乗計算を行う方法を示すフローチャートである。
【図7−B】PKI装置を使用してべき乗計算を行う方法を示すフローチャートである。
【0001】
本発明は、ハードウェアにおけるモジュラ演算の高速かつ効率的実施の分野に関する。より詳細には、本発明は、モンゴメリ法および簡単な方法を使用してモジュラ乗算やべき乗計算などのモジュラ算術演算を行う方法および装置に関する。
【背景技術】
【0002】
最近の公開鍵暗号方式(PKC)の中核となる演算は、一般に、モジュラ算術関数、具体的にはモジュラべき乗計算の実行に基づいており、ここでモジュラべき乗計算は、基本的に、モジュラ乗算とモジュラ自乗計算のシーケンスに基づく。したがって、モジュラ算術関数を特にハードウェアで高速実行する方法がPKCの実際の実施にとってきわめて重要である。モンゴメリ法は、ある種のモジュラ演算を実行する効率的な方法を提供するが、中でも最も重要なのはモジュラべき乗計算である。この方法の利点は、主としてモジュラべき乗計算のハードウェアによる実施において発揮される。したがって、モンゴメリ法は、たとえばRSA、デジタル署名規格(Digital Signature Standard(DSS))、ディフィー=ヘルマン(Diffie−Hellman(DF))鍵交換、楕円曲線暗号システム(Elliptic Curve Cryptography(ECC))アルゴリズムなどを実施するPKCの実施において広く採用されている(「Handbook of Applied Cryptography」Alfred J. Menezes、Paul C. van Oorschot、およびScott A. Vanstone著、CRC Press、1996年10月)。
【0003】
モンゴメリ乗算の定義:nビットの整数A、B、およびN(N>A、Bであり、Nは奇数)を想定すると、モンゴメリ乗算MMUL(A,B,N,n)、(略してMMUL(A,B)とも記す)は、以下の式で定義される。
【0004】
【数1】
【0005】
上式により、縮減結果、すなわち0≦MMUL(A,B)<Nが得られる。
表記法:以下の説明では、nビット整数A=(An-1,...,A1,A0)2などの整数値のビットは、Ai(0≦i≦n−1)という表記を使用して表す。ここで、最上位ビット(MSB)An-1は、整数値Aの左端のビットであり、最下位ビット(LSB)A0は右端のビットである。さらに、j番目の反復における所与の変数Sの値は、S(j)で示す。A*B modNなどのモジュラ結果の表記は、範囲[0,N)における換算値を示す。
【0006】
(基数2における)モンゴメリ乗算を計算するアルゴリズムは、以下のステップで行うことができる。
アルゴリズム1
入力:A、B、N、n(前提条件:A、B、NはN>Aを満足するnビットの整数であり、BとNは奇数である)
出力:MMUL(A,B)=A*B*2-n modN
【0007】
【数2】
【0008】
このアルゴリズムのメイン・ループは、一連の加算(ステップ1.1および1.2)と、2で割る除算(ステップ1.3)のみしか必要としない。ステップ1.4は、本明細書では縮減ステップと呼び、このステップがないとアルゴリズムの出力Sが必ずしも縮減されない不可欠のステップである。
【実施例1】
【0009】
表1に、A=18=(10010)2、B=12=(01100)2で、N=19(10011)2の場合のMMUL(A,B)を計算するこのプロセスを示す。この例では、n=5であり、モンゴメリ乗算は、18*12*2-5 mod19=2である。
【0010】
表1:(前提条件:S=0、A=18、B=12、およびN=19)
【0011】
【表1】
【0012】
ステップ1.4がない場合、このアルゴリズムの出力Sは必ずしも[0,N]の範囲には含まれない。具体的には、Sはnビットより大きくなる可能性がある。したがって、アルゴリズムの出力を[0,N]の範囲にシフトさせるために、追加的な縮減(S=S−N)(ステップ1.4)が必要な場合がある。上記の実施例1では、計算結果はS=21>Nとなり、したがってこの場合、追加の縮減S=S−N=21−19=2が必要である。仮定したようにA,B<Nの場合、縮減ステップ(1.4)の前に結果SがN+Bによって制限されることを(帰納により)示すことができる。したがって、S>Nの場合、反復ステップ1.1、1.2、および1.3の後に、多くとも1回のみ行われる追加の縮減ステップ1.4(S=S−N)があれば、最終結果を範囲[0,N)に縮減するのに十分であり、したがって所望の結果S=A*B+2-n modNが、実際にこのアルゴリズムの出力となる。
【0013】
MMUL(A,B)を求めるこのモンゴメリ乗算アルゴリズムは、正規のモジュラ乗算A*B modNの計算に使用することができる。これは、以下のステップに示すように、複数の方法で行うことができる。
【0014】
方法1:
入力:A、B、N、A’(A、B、およびNはnビットの整数であり、事前計算値A’=A*2n modNである。)
出力:A*B modN
【0015】
【数3】
【0016】
たとえば、A=18、B=12、N=19で、n=5の場合、
補助値A’=18*25 mod19=6を事前計算し、次にこれを使用して
T=MMUL(A’,B)=6*12*2-5 mod19=7
を計算する。
【0017】
方法2:
入力:A、B、N、A’、B’(A、B、およびNはnビットの整数であり、事前計算値A’=A*2n modNおよびB’=B*2n modNである。)
出力:A*B modN
【0018】
【数4】
【0019】
たとえば、A=18、B=12、N=19でn=5の場合、2つの補助値A’=18*25 mod19=6とB’12*25 mod19=4を事前計算し、次に、この2つの値を使用して、T=MMUL(A’,B’)=6*4*2-5 mod19=15を求め、最後に以下の式によって結果を求める。
【0020】
【数5】
【0021】
方法2では、補助値A’およびB’を計算する。これにより、整数AおよびBが「モンゴメリ基底」と呼ばれるものに変換される。最初のモンゴメリ乗算を変換された数値に適用すると、以下のようになる。
【0022】
【数6】
【0023】
これは、AおよびBの正規表現における正規モジュラ乗算に対応する。
2番目の(1を乗ずる)モンゴメリ乗算によって、この結果を元の正規基底表現に変換し戻す。言い換えると、上記の結果であるT=MMUL(A’,B’)から冗長な2n因子を除去し、それによって以下のような所望の結果が得られる。
【0024】
【数7】
【0025】
方法1に要する(補助値を計算する)オーバーヘッドは、直接的な手法と較べた場合に、モンゴメリ・アルゴリズムが単一のモジュラ乗算を計算するのに必ずしも有用と見なされない主な理由である。しかし、方法2は、いくつかのモジュラ乗算が必要な場合には効率的に使用することができる。入力をモンゴメリ基底に変換した後、モンゴメリ乗算アルゴリズムを使用してすべての乗算を行い、その結果を、乗算シーケンスの最後に正規基底に変換する。その場合、方法2の演算オーバーヘッドは無視し得るほどであり、モンゴメリ・アルゴリズムによって全体的な演算の効率が相当向上する。最も典型的な例は、方法2とモンゴメリ乗算を使用するモジュラ指数AE modN(mビットの整数値指数Eの場合。ただし、一般性を失わずに、ここではA<Nであるものとする)の計算である。べき乗計算の結果は、たとえば以下に述べるようにして求めることができる(左から右に実行される二進べき乗計算)。
【0026】
アルゴリズム2
入力:A、E、N
出力:AE modN
【0027】
【数8】
【0028】
事前計算値A’=A*2n modN(0≦A’<N)の計算により、入力がモンゴメリ基底に変換され、モンゴメリ乗算と自乗計算(ステップ2.1およびステップ2.2)は、正規基底における左から右に実行される二進べき乗計算を実施する乗算と自乗計算のシーケンスに対応し、その結果は、1を乗じるモンゴメリ乗算(ステップ2.3)によって正規基底に変換し戻される。結果がNによって確実に制限されるようにするため、アルゴリズム1によって実施される各モンゴメリ乗算の中間ステップにおいて縮減(ステップ1.4)が必要である。この縮減は、後続のモンゴメリ乗算への入力が適切に制限されるように保証するため、このような連鎖アルゴリズムの実施ではきわめて重要である。縮減を行わず、1つの(縮減ステップのない)モンゴメリ乗算の結果がNを超える場合、それ移行のステップでオーバーフローまたは誤った結果が生じる可能性がある。
【0029】
モンゴメリ乗算を使用する主な利点は、この乗算演算のハードウェア実施にある。MMULアルゴリズムは、各ステップで、累算結果(上記ステップ1.2のS=S+S0*N)のLSBのみしか必要としない。
【0030】
以下の例で、上述のアルゴリズムを使用して行うべき乗計算を示す。この例では、212240 mod249=241を求める。
【実施例2】
【0031】
表2に、nビットの値AおよびNとmビットの値Eの場合について、上述のアルゴリズムを使用したAE modNの計算を示す。表2では、前のステップT(I+1)で求めた値の後に、ステップ2.1のT(I+1) 2で得られた結果と、ステップ2.2のT(I)で得られた結果が示されている。この例では、A=212、E=240=(11110000)2、N=249である。したがって、Aはn=8ビット、Eはm=8ビットの値であり、必要な事前計算値はA’=212*28 mod249=239である。
【0032】
表2:(前提条件:A=212、E=240(11110000)2、N=249、T(1)=A’=239)
【0033】
【表2】
【0034】
さらに、T(0)=MMUL(T(0),1)=193*1*2-8 mod249=241を計算して最終結果を求める。
この例では、モンゴメリ乗算MMUL(A,B)をモンゴメリ乗算、モンゴメリ自乗、および1を乗じるモンゴメリ乗算の計算に使用する。前述のように、縮減ステップ(1.4)の前では、累算結果はNより大きくなる可能性があり、モンゴメリ乗算の(適切に縮減された)結果を求めるためには、縮減を行う必要がある。
【0035】
実施例2では、I=6、5、および4の場合について、MMUL(T(I),A’)を実行する際と、I=1および6の場合についてMMUL(T(I+1),T(I+1))を実行する際に、縮減が必要であった。
【0036】
縮減を行う必要があるために、特にビット数nがきわめて大きい場合(たとえばn=512の場合)、このような装置のハードウェア実現はかなり複雑になることに留意されたい。結果がNを超える場合を検出する専用回路と、適切な減算(すなわち必要な縮減)を行うための専用回路が必要である。
【0037】
実際の乗算を回避する間接的方法によって実現される整数乗算の効率的な実施が、文献で知られている(たとえばK. Hwang,Computer Arithmetic; Principles,Architecture,and Design,Willey,New York,1979年、第5章)。このような方法は、適切に事前選択された数量を連続的に加算して乗算結果を求める。たとえば、値S=S+M*Aは(ただしMはm=2ビット長)、積M*Aを直接計算せずに、以下のように、事前記憶された3個の数量を加算するだけで求めることができる。累積器に加算する数量は、M=(0,0)、M=(0,1)、M=(1,0)、M=(1,1)という考えられる4通りの場合のうちの1つによって次のように決まる。
【0038】
M=(0,0)の場合、累積器Sには何も加算されない。
M=(0,1)の場合、累積器Sに値Aを加算する。
M=(1,0)の場合、累積器Sに値2*Aを加算する。
【0039】
M=(1,1)の場合、累積器Sに値3*A=A+2*Aを加算する。
したがって、適切な場合を特定し(ハードウェアの1:4マルチプレクサ)、それに応じて0、A、2*A、または3*Aのいずれかを累積器に加算することによって、1つの演算で和S=S+M*Aが得られる。A、2*A、および3*Aの追加の記憶は、それぞれに応じてハードウェア制御を設定する(これには手間がかかる)ことによって省くことができる。すなわち、2*Aの加算は、Aの記憶値をシフトさせてから累積器に供給することによって実現し、3*Aの加算は、値Aを加算し、シフトされたAの値を累積器に供給することによって実現することができる。
【0040】
したがって、この演算の最適化には、記憶と速度/ハードウェア要件との兼ね合いを図る必要がある。値A、2*A、3*Aの余分な記憶は、同じ演算を何度も繰り返す場合には有利である。たとえば、S=S+K*A(ただしKはkビット長)の計算は反復して行うことができる。(1+[k/m])=(1+[k/2])回の反復の各回で、Kの次のm=2ビットを走査し、Mの暫定値(Mのmビット部分)を定義し、その値を用いて前述の方法を使用する。ビット数mは、このような暫定値(Mの一部)のビット長を示し、したがって加算結果S=S+K*Aに対して行う必要がある右シフト数も定義する。類似の方法では、より大きなm値、より多くの記憶量またはハードウェア/制御を使用するが、反復回数は少ない(1+[k/m])。S=S+M*A+L*Bを計算するために累積器に値M*A+L*Bを加算する場合にも同じ方法を使用することができる。その場合、各反復回におけるmビットのMおよびLの走査で、加算する数量について22m通りの組合せが生じる。
【0041】
たとえば、m=2の場合、加算される数量の22*2=16通りの組合せは、0、A、2*A、3*A、B、2*B、3*B、A+B、A+2*B、A+3*B、2*A+B、2*(A+B)、2*A+3*B、3*A+B、3*A+2*B、3*(A+B)となる。記憶値(A+B)を使用して2(A+B)の加算および/または3(A+B)の加算を行うために余分のハードウェア/制御を使用しない限り、15個の数量の記憶が必要である。m=1の場合、22*1=4通りの組合せ、すなわち、0、A、B、A+Bがある。m=1で、4個の整数A、B、C、およびDの乗算および合計演算を行う場合を図1に示す。図1に示す装置は、3個のレジスタR0、R1、およびR2と、1:4マルチプレクサ(MUX)と、桁上げ保存加算器(CSA)とを使用して、A*B+C*D+Gの計算を行う。レジスタR0およびR2はそれぞれnビットで、レジスタR1はn+1ビットである。各レジスタR0、R1、およびR2は、MUXの入力In2、In3、およびIn1のうちの1つにそれぞれ接続され、MUXの入力In0には常に「0」値(nビット値)が供給される。
【0042】
マルチプレクサMUXは2つの制御入力C0およびC1を有し、制御入力の各状態について、対応する入力が選択され、MUXの出力(out)で出力される。A*B+C*D+Gの計算は、レジスタR0、R1、R2およびCSAに値D、B+D、B、およびGをそれぞれロードし、MUXの制御入力C0およびC1を介してそれぞれAおよびCのデータ・ビット(AIおよびCI(I=0,1,2,...,n−1))を順次供給することによって行われる。
【0043】
CSAは、n+2ビットであり、2ビットのオーバーフローが可能であり、それを使用して、MUXの出力outを介して取り出された、選択された入力(In0、In1、In2、またはIn3)の値が、CSAのその時点での内容に加算される。この加算の結果はCSAに格納された後、CSAの内容に対して行われる右シフトが適用される。偶数の2進値のビットを右にシフトすることは、その値を2で割る除算(前述のステップ1.3)に相当する。したがって、このシステムの演算の各サイクルで、以下の演算が行われる。
【0044】
1)In0、In1、In2、およびin3のそれぞれの値を選択
2)選択された値をCSAレジスタのその時点での内容に加算
3)CSAビットの右シフト。これによってCSAのLSB(すなわちCSA0)がCSA0出力に出力される。
【0045】
ステップ1およびステップ2を実施するために、AおよびCのビットAIおよびCI(I=0,1,2,...,n−1)が、LSBから先に順次、MUXの制御入力C0およびC1に供給される。したがって、MUXの出力out(I)は、反復Iのたびに以下の値のいずれかをとることができる。
【0046】
【数9】
【0047】
A*B+C*D+Gを計算するプロセスについて、以下の疑似コードを用いて詳述する。
【0048】
【数10】
【0049】
n回の反復後、CSAの内容(CSA(n-1))には計算結果のn+1個の最上位ビット(MSB)が格納され、反復中にさらに計算結果のn個のLSBがCSA0出力で得られる。CSAの内容は、並列出力バス(図示せず)を使用して出力するか、あるいは、MUXの制御入力をリセット(すなわちC0=C1=0に設定する)し、さらにn+1回の追加の反復を行ってCSA0出力に結果のn+1個のMSBを出力すること(直列手法)によって、出力することができる。直列手法の主な欠点は、時間がかかることである(CSAの内容を入手するのにn+1サイクルの追加を要する)。一方、並列手法を使用するとパフォーマンスは大幅に向上するが、ハードウェア手段の点でコストが高くつくと考えられる。
【0050】
特許出願WO98/50851号および米国特許出願第6185596号に記載されているように、モンゴメリ法を適用することによってこの装置を効率的に使用してモンゴメリ乗算が行われる。これらの特許出願では、事前計算済みの定数(J=N-1 mod2n)を使用して、各反復において、A*Bの乗算にモジュラスNを加える回数Y=(A*B*J)mod2nを計算する。この方法は、モンゴメリ・プロセスの各反復回後に、加算結果がモジュラス値Nを超えるか否かを検査する必要がある。その場合、結果は2*Nを超えない。したがって、そのような実施方法では、反復回ごとに結果を検査し、モジュラス値を超えた場合には結果からモジュラス値Nを減算するための専用ハードウェアを使用する。
【0051】
当技術分野で周知のようにモンゴメリ法を使用してモジュラ乗算を実施する方法は、主として、出力結果値をN未満の値に縮減する必要があるため、時間とハードウェアの両方の点で影響を受ける。さらに、縮減ステップは、(「if」文を介した)特定の入力に依存し、この実施方法をサイド・チャネル攻撃にさらされやすくする。したがって、モンゴメリ乗算法は、モジュラべき乗計算などのモジュラ算術演算の効率的なハードウェア実施を可能にはするが、そのような演算のハードウェア実施を改善する必要がある。これは、各モンゴメリ乗算後に繰り返される縮減を必要としない方法および装置を使用して達成することができる。
【発明の開示】
【発明が解決しようとする課題】
【0052】
本発明の目的は、中間計算結果および最終計算結果が既知の境界を超えず、べき乗計算プロセスに必要なシーケンスなど、修正版モンゴメリ乗算の連鎖シーケンス中に縮減を必要とせず、べき乗計算プロセスの最終結果が自動的に(0とNの間に)縮減される、モンゴメリ乗算の修正版を実行する方法および装置を提供することである。
【0053】
本発明の他の目的は、モンゴメリ乗算に基づくか否かを問わず、公開鍵暗号方式のハードウェア実施のために必要な基本演算を含めて、モジュラべき乗計算およびその他のモジュラ算術演算の効率的なハードウェア実施を可能にする方法および装置(本明細書ではPKI装置とも呼ぶ)を提供することである。
【0054】
本発明の他の目的は、右から左の実行、左から右の実行、m配列、スライディング・ウィンドウべき乗アルゴリズムなど、様々なモジュラべき乗アルゴリズムの効率的なハードウェア実施を可能にする方法および装置を提供することである。
【0055】
本発明のさらに他の目的は、非縮減および修正モンゴメリ乗算に基づく、タイミング攻撃に耐えられる安全なPKIのための方法および装置を提供することである。
【課題を解決するための手段】
【0056】
一態様では、本発明は、必要な反復回数が奇数モジュロ値Nのビット数nよりも多い、第1の整数値Aと第2の整数値Bとの非縮減および拡張モンゴメリ乗算を使用して乗算演算を含むモジュラ算術計算を行う方法であって、
a)n+2ビット値を格納し、その内容(S+X→S)にn+2ビット値(X)を加算し、その内容を2(S/2→S)で割ることができる累算装置(S)を設けるステップと、
b)所望の場合には、該装置の内容をゼロ値(「0」→S)に設定し、該装置において少なくともs(>n+1)回の反復を行い、各反復において第1の整数値Aの値(AI;0≦I≦s−1)から、その最下位ビット(A0)から開始して1ビットを順次選択するステップとを含み、
ステップb)が
b.1)該装置Sの内容に選択されたビットAIと第2の整数値Bとの積を加算する(S+AI*B→S)ステップと、
b.2)該装置の結果の内容に、その時点での最下位ビットS0とNとの積を加算する(S+S0*N→S)ステップと、
b.3)該装置の結果の内容を2で割る(S/2→S)ステップと、
b.4)反復のたびにその前の結果(S)を使用してステップb.1)ないしステップb.3)をさらにs−1回反復することによって非縮減および拡張モンゴメリ乗算結果を得るステップとを含む方法を対象とする。
【0057】
モジュロ値Nを格納する第1の記憶装置(R2)を設け、第2の整数Bの値を格納する第2の記憶装置(R0)を設け、モジュロNと第2の整数値Bとの和を格納する第3の記憶装置(R1)を設け、第1(R2)、第2(R0)、および第3(R1)の記憶装置からのそれぞれ第1(In1)、第2(In2)、および第3(In3)の入力を有し、追加のゼロ入力(In0)を有し、第1(C1)および第2(C0)の制御入力を受け取るアービトレーション回路であって、
その第1(C1)および第2(C0)の制御入力がゼロの場合は、追加のゼロ入力(In0)を選択し、
その第1の制御入力(C1)が1で、その第2の制御入力(C0)がゼロの場合は、その第2の入力(In2)を選択し、
その第1の制御入力(C1)がゼロで、その第2の制御入力(C0)が1の場合は、その第1の入力(In1)を選択し、
その第1の制御入力(C1)と第2の制御入力(C0)とが1の場合は、第3の入力(In3)を選択するように、
他の入力の1つをその出力として選択することができ、選択された入力が、累算装置の入力に接続されたアービトレーション回路の出力として供給されるアービトレーション回路とを設けることによって、ステップb.1)ないしステップb.3)を単一のステップに統合してモンゴメリ乗算結果を得ることができる。この計算は、第1の整数値Aのビット(A1;0≦I≦s)を、その最下位ビット(A0)から開始して順次に1ビットずつ、第1の制御入力(C1)に適用し、第1の整数値の選択されたビット(AI)の状態と、第2の整数値の最下位ビット(B0)の状態と、累算装置の最下位ビット(S0)の状態とに応じて第2の制御入力(C0)の状態(KI)を生成する回路を設けることによって行われる。
【0058】
第2の制御入力(C0)の状態(KI)は、第1の制御入力(C1)の状態と前記第2の整数値の最下位ビット(B0)の状態が1であって前記累算装置の最下位ビット(S0)の状態がゼロである場合か、前記第1の制御入力(C1)の状態と前記第2の整数値Bの最下位ビット(B0)の状態とが異なる状態であり、前記累算装置の最下位ビット(S0)の状態が1である場合に値1(KI=「1」)を生成し、それ以外の場合には、第2の制御入力(C0)の状態(KI)としてゼロ値(KI=「0」)を生成することによって生成することができる。
【0059】
第2の制御入力(C0)の状態は、論理ANDゲートと論理XORゲートとを含み、論理ANDゲートの入力が第1の制御入力(C1)の状態と第2の整数値Bの最下位ビット(B0)の状態とを受け取り、論理XORゲートの入力が論理ANDゲートからの出力と累算装置の最下位ビット(S0)の状態とを受け取り、前記論理XORゲートの出力が第2の制御入力(C0)の状態として使用される回路によって生成することができる。
【0060】
好ましくは、モンゴメリ乗算を行うために使用される反復回数sがn+2であり、それによってn+2回の反復が行われる拡張モンゴメリ乗算の結果を得る。
この方法は、最上位ビット位置への直列入力を有するとともに、内容の並列出力も可能なn+2ビットのシフト・レジスタを、第1(R2)、第2(R0)、および第3(R1)の記憶装置として使用し、第1の記憶装置(R2)にその最下位ビット位置(R20)からの直列出力を設けて、周期的ビット・ローテーションを行うことができるようにし、第2の記憶装置(R0)がその直列入力で累算装置の最下位ビット(S0)を受け取ることができるようにし、その内容をその最下位ビット(R30)から開始して順次に1ビットずつ(R3I; I=0,1,2,...,n+1)並列出力することができ、n+2ビットを格納することができ、その内容に対して周期的ビット・ローテーションを行うことができる第4の記憶装置(R3)を設け、直列入力と直列出力とを有し、n+2ビットの値を格納することができる第5の記憶装置(R4)を設け、その内容をその最下位ビットから開始して順次に1ビットずつ(R5I I=0,1,2,...,n+1)並列出力することができ、n+2ビットを格納することができる第6の記憶装置(R5)を設け、第5の記憶装置からの第1の入力(R4I)と、第2の制御入力の状態(KI)を生成する回路からの第2の入力とを有し、出力が第2の制御入力(C0)に接続された第1のアービトレーション装置(MX1)を設け、累算装置の最下位ビット(S0、および本明細書ではCSA0も指す)と等しい第1の入力と、回路の出力から受け取る第2の入力(KI)と、第5の記憶装置(R4)の直列出力に接続された第3の入力(R4I)とを有し、出力が第5の記憶装置(R4)の直列入力に接続された第2のアービトレーション装置(MX2)を設け、常にゼロ値(「0」)が供給される第1の入力と、第5の記憶装置の直列出力から受け取る第2の入力(R4I)とを有し、出力が累算装置の直列入力に接続された第3のアービトレーション装置(MX3)を設け、第6の記憶装置に接続された第1の入力(R5I)と第4の記憶装置の直列出力に接続された第2の入力(R3I)とを有し、出力が第1の制御入力(C1)に接続された第4のアービトレーション装置(MX4)を設け、n+2ビット値の直列加算を行うことができ、累算装置の最下位ビット位置からの第1の入力(S0)と、第1の記憶装置(R2)の直列出力からの第2の入力とを受け取り、出力が第3の記憶装置(R1)の直列入力に接続された、加算器を設けることによって、モジュラ算術演算を行うことができるようにすることをさらに含むことができる。
【0061】
好ましくは、累算装置は、各段が第1および第2のフリップフロップ装置と、3個の入力を有する全加算器装置とから成るn+2段の加算およびラッチ段から成り、第1段目の段からは第2のフリップフロップ装置が省かれている。各加算およびラッチ段では、全加算器の第1の入力が第1のフリップフロップ装置の出力に接続され、全加算器の第2の入力が後続の加算およびラッチ段の第2のフリップフロップ装置の出力に接続され、全加算器の第3の入力がアービトレーション装置のそれぞれのビット出力(MUXi 0≦i≦n+1)に接続されている。
【0062】
この方法は、さらに、(n+1)段目の加算およびラッチ段に第1および第2の半加算器装置と第3のフリップフロップ装置とを設け、第1のフリップフロップ装置の入力を第2の半加算器の和出力に接続し、第2のフリップフロップ装置の入力を第2の半加算器の桁上げ出力に接続し、フリップフロップ装置の出力を、(n+2)段目の加算およびラッチ段の全加算器の第2の入力に接続し、第2の半加算器の第1の入力を(n+1)段目の加算およびラッチ段の全加算器の桁上げ出力に接続し、その第2の入力を第1の半加算器の桁上げ出力に接続し、第1の半加算器の第1の入力を全加算器の和出力に接続し、第2の半加算器の第2の入力を第3のアービトレーション装置(MX3)の出力に接続し、第3のフリップフロップ装置の入力を第1の半加算器の和出力に接続し、その出力を(n−1)段目の加算およびラッチ段の全加算器の第2の入力に接続することによって、累算装置の直列入力を介して第3のアービトレーション装置(MX3)から出力を(n+1)段目の加算およびラッチ段の加算結果に加算することもできる。
【0063】
第2の制御入力(C0)の状態は、第2の記憶装置(R0)の最下位ビットと、第4のアービトレーション装置(MX4)の出力と、第1段目の加算およびラッチ段の全加算器の桁上げ出力と、第2段目の加算およびラッチ段の全加算器の和出力とを使用して判断することができる。これは好ましくは、第2の記憶装置(R0)の最下位ビットと第4のアービトレーション装置(MX4)の出力とをAND論理ゲートの入力に接続し、追加の半加算器と追加のフリップフロップ装置とを設け、半加算器の第1の入力を、第2段目の加算およびラッチ段の全加算器の和出力に接続し、その第2の入力を第1段目の加算およびラッチ段の全加算器の桁上げ出力に接続し、半加算器の和出力を追加のフリップフロップ装置の入力に接続し、AND論理ゲートの出力とフリップフロップ装置の出力とをXORゲートの入力に接続し、XORゲートの出力を使用して第2の制御入力(C0)の状態を判断することによって行われる。
【0064】
この方法は、第1(R2)、第2(R0)、および第3(R1)の記憶装置に、それぞれ、モジュラスNの値と、整数Bの値と、モジュラスと整数との和(N+B)の値とをロードし、第2の制御入力(C0)の状態(KI)を生成する回路の入力、第2の制御入力(C0)の状態(KI)を生成する回路の入力、ゼロ値(「0」)の入力、および第6の記憶装置(R5)の出力の入力をそれぞれ選択するように、第1(MX1)、第2(MX2)、第3(MX3)、および第4(MX4)のアービトレーション装置を設定し、第6の記憶装置(R5)の内容に第2の記憶装置(R0)の内容をロードし、累算装置の内容にゼロ値をロードし、各サイクルで第6の記憶装置(R5)の内容が1ビットずつ右にシフトされる非縮減および拡張モンゴメリ乗算を行い、累算装置において非縮減モンゴメリ自乗の結果を得ることによって、整数値Bの非縮減モンゴメリ自乗を行うことをさらに含むこともできる。
【0065】
また、この方法は、第1(R2)、第2(R0)、第3(R1)、および第4(R3)の記憶装置に、それぞれ、モジュラスNの値と、第2の整数(B)の値と、モジュラスと第2の整数との和(N+B)の値と、第1の整数(A)の値とをロードし、第2の制御入力(C0)の状態(KI)を生成する回路の入力、第2の制御入力(C0)の状態(KI)を生成する回路の入力、ゼロ値(「0」)の入力、および第4の記憶装置(R3)の出力の入力をそれぞれ選択するように第1(MX1)、第2(MX2)、第3(MX3)、および第4(MX4)のアービトレーション装置を設定し、累算装置の内容にゼロ値をロードし、各サイクルで第4の記憶装置(R3)の内容が右に1ビットずつシフトされる非縮減および拡張モンゴメリ乗算を行い、累算装置において非縮減モンゴメリ乗算の結果を得るステップとを行うことによって、第1(A)と第2(B)の整数値のモンゴメリ乗算を行うことも含むことができる。
【0066】
調整されたオペランド値A’=A*2s modNを事前計算し、ビット順序を逆転させ、最上位ビットem-1を削除して調整された値E’(e0,e1,...,em-2)2を得ることによって、指数E=(em-1,em-2,...,e1,e0)2の調整された値を構成し、第1、第2、第3、および第5の記憶装置の内容に、それぞれ、モジュラスNの値、調整されたオペランド(A’)の値、モジュラスと調整されたオペランドとの和(N+A’)の値、および調整された指数値E’をロードし、指数値Eのビット長mを求めて、
− 第5の記憶装置(R4)の内容を右シフトするステップと、
− 非縮減モンゴメリ自乗を行って累算装置において第3の記憶装置(R3)の内容の非縮減モンゴメリ自乗を得るステップと、
− 第3の記憶装置(R3)の内容に累算装置の内容をロードするステップと、
− 第3の記憶装置(R1)の内容に第1の記憶装置(R2)の内容と累算装置の内容との和をロードするステップとをm−1回行い、
第5の記憶装置の最下位ビット(R40)が「1」の場合、非縮減および拡張モンゴメリ乗算を行って第2の記憶装置(R0)の内容と第4の記憶装置(R3)の内容との非縮減モンゴメリ乗算結果を累算装置で得て、第2の記憶装置(R0)の内容に累算装置の内容をロードし、第3の記憶装置(R1)の内容に第1の記憶装置(R2)の内容と累算装置の内容との和をロードすることによって、モジュラべき乗AE modNの計算を行うことができる。
【0067】
上記のステップをm−1回反復した後、第2の記憶装置(R0)の内容に1を乗じる非縮減および拡張モンゴメリ乗算を行って累算装置で最終縮減結果を得ることにより、モジュラべき乗計算結果を得る。
【0068】
あるいは、調整されたオペランド値A’=A*2s modNを事前計算し、第1(R2)、第2(R0),第3(R1)、および第5(R4)の記憶装置に、モジュラスNの値、調整されたオペランド(A’)の値、モジュラスと調整されたオペランドとの和(N+A’)、および指数値Eをロードし、指数値値Eのビット長mを求め、フラグを「1」に設定して、
第5の記憶装置(R4)の内容を右シフトするステップと、
第5の記憶装置の最下位ビット(R40)が「1」の場合、フラグの状態を調べ、フラグが「1」でない場合は、非縮減および拡張モンゴメリ乗算を行って第2の記憶装置(R0)と第4の記憶装置(R3)の内容の非縮約および拡張モンゴメリ乗算結果を累算装置で得て、第4に記憶装置(R3)の内容に累算装置の内容をロードし、それ以外の場合は、第4の記憶装置(R3)の内容に第2の記憶装置(R0)の内容をロードし、フラグを「0」の状態にリセットするステップと、
拡張および非縮減モンゴメリ自乗を行って累算装置で第2の記憶装置(R0)の内容の拡張および非縮減モンゴメリ自乗を求めるステップと、
第2の記憶装置(R0)の内容に累算装置の内容をロードするステップと、
第3の記憶装置(R1)の内容に第1の記憶装置の内容と累算装置の内容との和をロードするステップとをm−2回行うことによって、モジュラべき乗AE modNを計算することもできる。
【0069】
上記のステップをm−2回行った後、拡張および非縮減モンゴメリ乗算を行って、累算装置で第2の記憶装置(R0)の内容と第4の記憶装置(R3)の内容との拡張および非縮減モンゴメリ乗算結果を求め、第2の記憶装置(R0)の内容に累算装置の内容をロードし、第3の記憶装置(R1)の内容に第1の記憶装置(R2)の内容と累算装置の内容との和をロードし、第2の記憶装置(R0)の内容に1を乗じる拡張および非縮減モンゴメリ乗算を行って累算装置で最終縮減結果を得るステップとを行う。
【0070】
第1(R2)、第2(R0)、第3(R1)、および第4(R3)の記憶装置に、それぞれ、モジュラス値(N)のn個の最下位ビット(N0)、第2の整数値(B)のn個の最下位ビット(B0)、モジュラス値(N)のn個の最下位ビットと第2の整数値(B)のn個の最下位ビット(B0)の和(B0+N0)、および第1の整数値(A)のn個の最下位ビット(A0)をロードするステップと、
第1(MX1)、第2(MX2)、第3(MX3)、および第4(MX4)のアービトレーション装置を、第2の制御入力(C0)の状態(KI)を生成する回路の入力、第2の制御入力(C0)の状態(KI)を生成する回路の入力、ゼロ値(「0」)、および第4の記憶装置(R3)の入力を選択するように設定し、必要であれば累算装置の内容をゼロにリセットするステップと、
モンゴメリ乗算を行い、その結果(S(I))を累算装置で得て、第2の制御入力のビット状態(KI 0≦1≦n−1)(K0)を第5のレジスタ(R4)で得るステップとを行うことによって、第1の整数値のn個の最下位ビット(A0)と第2の整数値のn個の最下位ビット(B0)のモンゴメリ乗算(MMUL(A0,B0)を計算し、
第1(R2)、第2(R0)、第3(R1)、および第4(R3)の記憶装置に、それぞれ、モジュラス値(N)のn個の最上位ビット(N1)、第2の整数値(B)のn個の最上位ビット(B1)、モジュラス値(N)のn個の最上位ビットと第2の整数値(B)のn個の最上位ビットとの和(B1+N1)および第1の整数値(A)のn個の最下位ビット(A0)をロードするステップと、
第1(MX1)、第2(MX2)、第3(MX3)、および第4(MX4)のアービトレーション装置を、第5のレジスタ(R4)の入力、累算装置の最下位ビット(S0)、ゼロ値(「0」)、および第4の記憶装置(R3)の入力を選択するように設定するステップと、
通常の乗算を行い、その結果(S(II))の最上位ビットを累算装置で、結果(R(4))の最下位ビットを第5の記憶装置で得るステップとを行うことによって行うステップとを行うことによって、第1の整数値のn個の最下位ビット(A0)と、第2の整数値のn個の最上位ビット(B1)と、モジュラス値のn個の最上位ビット(N1)と、第5のレジスタ(R4)で得たnビット値(K0)と、ステップa)で得た結果(S(I))とのA0*B1+N1*K0+S(I)の値を計算し、
第1(R2)、第2(R0)、第3(R1)、および第4(R3)の記憶装置に、それぞれモジュラス値(N)のn個の最下位ビット(N0)、第2の整数値(B)のn個の最下位ビット(B0)、モジュラス値(N)のn個の最下位ビットと第2の整数値(B)のn個の最下位ビット(B0)との和(B0+N0)、および第1の整数値(A)のn個の最上位ビット(A1)をロードするステップと、
累算装置(Sまた、本発明ではCSAも指す)の内容にステップb)で得た結果(R4(II))のn個の最下位ビットをロードし、第5の記憶装置(R4)の内容にステップb)で得た結果(S(II))のn個の最上位ビットをロードするステップと、
第1(MX1)、第2(MX2)、第3(MX3)、および第4(MX4)のアービトレーション装置を、第2の制御入力(C0)の状態(KI)を生成する回路の入力、第2の制御入力(C0)の状態(KI)を生成する回路の入力、第5の記憶装置(R4)からの入力、および第4の記憶装置(R3)の入力を選択するように設定するステップと、
モンゴメリ乗算を行い、その結果(S(III))を累算装置で得て、第2の制御入力の状態(KI 0≦I≦n−1)(K1)を第5のレジスタ(R4)で得るステップとを行うことによって、第1の整数値のn個の最上位ビット(A1)と、第2の整数値のn個の最下位ビット(B0)と、ステップb)で得た結果(R4(II),S(II))とのモンゴメリ乗算の加算の結果を計算し、
第1(R2)、第2(R0)、第3(R1)、および第4(R3)の記憶装置に、それぞれ、モジュラス値(N)のn個の最上位ビット(N1)、第2の整数値(B)のn個の最上位ビット(B1)、モジュラス値(N)のn個の最上位ビットと第2の整数値(B)のn個の最上ビットとの和(B1+N1)、および第1の整数値(A)n個の最上位ビット(A1)をロードするステップと、
第1(MX1)、第2(MX2)、第3(MX3)、および第4(MX4)のアービトレーション装置を、第5のレジスタ(R4)の入力、累算装置の最下位ビット(S0)、ゼロ値(「0」)、および第4の記憶装置(R3)の入力を選択するように設定するステップと、
モンゴメリ乗算を行い、結果(S(IV))の最上位ビットを累算装置で得、結果(R(IV))の最下位ビットを第5の記憶装置で得るステップとを行うことによって、第1の整数値のn個の最上位ビット(A1)と、第2の整数値のn個の最上位ビット(B1)と、モジュラス値のn個の最上位ビット(N1)と、第5のレジスタ(R4)で得たnビット値(K1)と、ステップc)で得た結果(S(III))とのA1*B1+N1*K1+S(III)を計算することによって、第1の整数と第2の整数とモジュラス(N)とが2×nビットである、第1(A=A1*2n+A0)および第2(B=B1*2n+B0)の整数値のモジュラ乗算を行うことができる。
【0071】
また、この方法は、第1
【0072】
【数11】
【0073】
と第2
【0074】
【数12】
【0075】
の整数値のモジュラ乗算を行うステップであって、第1の整数、第2の整数、およびモジュラス
【0076】
【数13】
【0077】
が2×nビットを超えてもよく、計算を第1および第2の整数の2×nビットの後続部分の乗算の中間結果を計算することによって行うことをさらに含むことができる。
他の態様では、本発明は、必要な反復回数(s)がモジュロ値(N)内のビット数(n)よりも多く、モンゴメリ乗算結果がモジュロ値の2倍(2×N)よりも小さい、第1(A)と第2(B)の整数値の拡張および非縮減モンゴメリ乗算を行う装置であって、
モジュロ値(N)を格納する第1の記憶装置(R2)と、
第1の整数値(A)を格納する第2の記憶装置(R0)と、
第1の整数値とモジュロとの和(A+N)を格納する第3の記憶装置(R1)と、
第1(R2)、第2(R0)、および第3(R1)の記憶装置からの第1(In1)、第2(In2)、および第3(In3)の入力を有し、ゼロ(「0」)である第4の入力を有し、第1(C1)および第2(C0)の制御入力を受け取り、それによって他の入力の1つをその出力として選択することができ、累算装置の入力に接続された、アービトレーション装置と、
第1の整数値の選択されたビット(AI)の状態と、第2の整数値の最下位ビット(B0)の状態と、累算装置の最下位ビット(S0)の状態とに応じて第2の制御入力(C0)の状態(KI)を生成する回路と、
n+2ビットの値を格納し、その内容にn+2ビットの値(X)を加算し(S+X→S)、その内容を2で割る(S/2→2)ことができる、累算装置(S)とを含む装置を対象とする。
【0078】
好ましくは、第2の制御入力の状態(KI)を生成するために使用される回路は、選択されたビット(AI)の状態と第2の整数値の最下位ビット(B0)の状態とが1で、累算装置の最下位ビット(S0)の状態がゼロの場合、または選択されたビット(AI)の状態と第2の整数値の最下位ビット(B0)の状態とが異なる状態であり、累算装置の最下位ビット(S0)の状態が1である場合に、値1を生成し、それ以外のすべての場合に回路がゼロ値を生成する。
【0079】
第1(R2)、第2(R0)、および第3(R1)の記憶装置は、それぞれの最上位ビット位置への直列入力を有するとともに、内容の並列出力も可能なn+2ビットのシフト・レジスタとすることができる。第1の記憶装置(R2)は、最下位ビット位置(R20)からの直列出力を有することができ、それによって周期的ビット・ローテーションを行うことができる。
【0080】
また、この装置は、モジュラ算術演算を行うことができるようにする手段をさらに含むことができ、この手段は、
第2の記憶装置(R0)の直列入力を累算装置(S)の最下位ビット(S0)に接続する手段と、
その内容をその最下位ビット(R30)から開始して順次に1ビットずつ(R3I I=0,1,2,...,n+1)直列出力することができ、n+2ビットを格納することができ、その内容に対して周期的ビット・ローテーションを行うことができる第4の記憶装置(R3)と、
直列入力と直列出力とを有し、n+2ビットの値を格納することができる第5の記憶装置(R4)と、
その内容をその最下位ビットから開始して順次に1ビットずつ(R5I I=0,1,2,...,n+1)直列出力することができ、n+2ビットを格納することができる第6の記憶装置(R5)と、
第5の記憶装置からの第1の入力(R4I)と、第2の制御入力の状態を生成する回路からの第2の入力(KI)とを有し、出力が第2の制御入力(C0)に接続された、第1のアービトレーション装置(MX1)と、
累算装置の最下位ビット(S0)と等しい第1の入力と、回路の出力(KI)から受け取る第2の入力と、第5の記憶装置(R4)の直列出力(R4I)に接続された第3の入力とを有し、出力が第5の記憶装置(R4)の直列入力に接続された、第2のアービトレーション装置(MX2)と、
常にゼロ値(「0」)が供給される第1の入力と、第5の記憶装置の直列出力(R4I)から受け取る第2の入力とを有し、出力が累算装置の直列入力に接続された、第3のアービトレーション装置(MX3)と、
第6の記憶装置の直列出力(R5I)に接続された第1の入力と、第4の記憶装置の直列出力(R3I)に接続された第2の入力とを有し、出力が第1の制御入力(C1)に接続された、第4のアービトレーション装置(MX4)と、
n+2ビット値の直列加算を行うことができ、累算装置の最下位ビット位置(S0)からの第1の入力と、第1の記憶装置(R2)の直接出力からの第2の入力とを受け取り、出力が第3の記憶装置(R1)の直列入力に接続された加算器とを含む。
【0081】
累算装置は、n+2段の加算およびラッチ段から成ることができ、各段が第1および第2のフリップフロップ装置と、3個の入力を有する全加算器装置とから成るn+2段の加算およびラッチ段から成り、第1段目の段からは第2のフリップフロップ装置が省かれており、累算装置は、
a)全加算器の第1の入力を第1のフリップフロップ装置の出力に接続する手段と、
b)全加算器の第2の入力を後続の加算およびラッチ段の第2のフリップフロップ装置の出力に接続する手段と、
c)全加算器の第3の入力をアービトレーション装置のそれぞれのビット出力(MUXi 0≦i≦n+1)に接続する手段とを含む。
【0082】
累算装置は、累算装置の直列入力を介して第3のアービトレーション装置(MX3)から出力を(n+1)段目の加算およびラッチ段の加算結果に加算する手段をさらに含むことができ、この手段は、
a)第1および第2の半加算器装置と第3のフリップフロップ装置と、
b)第1のフリップフロップ装置の入力を第2の半加算器の和出力に接続する手段と、
c)第2のフリップフロップ装置の入力を第2の半加算器の桁上げ出力に接続し、フリップフロップ装置の出力を、(n+2)段目の加算およびラッチ段の全加算器の第2の入力に接続する手段と、
d)第2の半加算器の第1の入力を(n+1)段目の加算およびラッチ段の全加算器の桁上げ出力に接続し、その第2の入力を第1の半加算器の桁上げ出力に接続する手段と、
e)第1の半加算器の第1の入力を全加算器の和出力に接続し、第2の半加算器の第2の入力を第3のアービトレーション装置(MX3)の出力に接続する手段と、
f)第3のフリップフロップ装置の入力を第1の半加算器の和出力に接続し、その出力を(n−1)段目の加算およびラッチ段の全加算器の第2の入力に接続する手段と含む。
【0083】
また、第2の記憶装置(R0)の最下位ビットと、第4のアービトレーション装置(MX4)の出力と、第1段目の加算およびラッチ段の全加算器の桁上げ出力と、第2段目の加算およびラッチ段の全加算器の和出力とを使用して第2の制御入力(C0)の状態を判断することができ、
a)第2の記憶装置(R0)の最下位ビットと第4のアービトレーション装置(MX4)の出力とをAND論理ゲートの入力に接続する手段と、
b)追加の半加算器と追加のフリップフロップ装置と、
c)半加算器の第1の入力を、第2段目の加算およびラッチ段の全加算器の和出力に接続し、その第2の入力を第1段目の加算およびラッチ段の全加算器の桁上げ出力に接続する手段と、
d)半加算器の和出力を追加のフリップフロップ装置の入力に接続する手段と、
e)AND論理ゲートの出力とフリップフロップ装置の出力とをXORゲートの入力に接続し、XORゲートの出力を使用して第2の制御入力(C0)の状態を判断する手段とを含む。
【発明を実施するための最良の形態】
【0084】
本発明は、ハードウェア手段の点で高速かつ効率的なモジュラ算術演算を行う方法および装置に関する。本発明の好ましい実施形態の中核にあるのは、修正(拡張)モンゴメリ法に基づく、2つの整数AおよびBモジュロN(以下A・B modN)のモジュラ乗算の計算である。
【0085】
修正(拡張)モンゴメリ乗算の定義:A、B≦2*Nであり、整数s≧nであるような、nビット長の奇数のモジュラスN、整数A、Bについて、NRMM(s)(A,B,N)=A*B*2-s mod(N+ε*N)によって非縮減および拡張モンゴメリ乗算(NRMM)を定義する。ただし、縮減された結果の場合はε=0であり、縮減されていない結果の場合はε=1である。以下、文脈(すなわちNおよびs)が分かっている場合、NRMM(s)(A,B,N)を示すのに略してNRMM(s)(A,B)を使用する。NRMM(s)(A,B)の計算は、縮減ステップ1.4を行わずに、ステップ1.1、1.2、および1.3をs(≧n)回反復することによって行う。以下、このような計算の結果を非縮減および拡張モンゴメリ乗算とも呼ぶ。非縮減および拡張モンゴメリ乗算によって得られた結果は必ずしも縮減されているわけではない(すなわちNRMM(s)(A,B,N)がモジュラスNよりも大きい場合がある)ことに留意することが重要である。
【0086】
NRMM(s)(A,B)を計算するプロセスを以下のステップで示す。
プロセス1:
入力:A、B、N、s、n(前提条件:Nはnビットの整数であり、A,B<2*Nで、Nは奇数であり、s≧nである)
出力:NRMM(s)(A,B)
【0087】
【数14】
【0088】
A、B<Nかつs=nである特別な場合は、最終縮減ステップが無視されるほとんどの用途で使用される、従来のモンゴメリ乗算である。本発明の方法によると、このプロセスは、縮減(ステップ1.4)を行わずに行い、本発明の好ましい実施形態では、s=n+2を使用し、入力は2*Nによって制限され、得られる結果も2*Nによって制限されるが、B<2*Nかつ、Aがn+1ビットを超えないことを条件とすれば十分である。
【0089】
本発明の方法は、以下の事実に基づく。すなわち、s=n+2回の反復を行う場合、nビット長のモジュラスNと(n+1)ビット長の入力値AおよびB(ただしA,B<2*N)で、NRMM(s)(A,B)の最終結果は2*Nを超えず、暫定累算結果(ステップ3.2)は6*Nを超えない。このことは、入力値と出力値が同じ上限(2*N)によって制限され、したがってオーバーフローの可能性がないこの拡張及び非縮減モンゴメリ乗算の連続的適用が可能になるため、極めて重要である。前述のように、べき乗計算プロセスAE modNは、モンゴメリ乗算とモンゴメリ自乗のシーケンスによって実施することができる。nビット長のオペランドA(A<N)を使用したMMUL(A,A)演算によって、Nより大きく2*Nより小さい非縮減結果が得られる。したがって、s=n+2回の非縮減モンゴメリ乗算によって、中間ステップにおける縮減の必要なしに、(n+2)ビット長の記憶レジスタと最大(n+3)ビットの結果を計算することができる累算器とを使用して、NRMM(s)の連続べき乗シーケンスを行うことができる。後述するように、本発明の方法によると、(n+2)ビットの累積器(CSA)の実施態様を使用することができる。さらに、s=n+2は、縮減なしのこのようなべき乗計算を保証する最低回数である。
【0090】
非縮減拡張モンゴメリ乗算の計算は、積A*BにK・Nの値(任意のK≧0)を加えることに暗黙的に基づいている。Kの値は、事前にはわからず、反復により構築される。本発明の好ましい実施形態では、後述するように、このプロセスの各反復において、整数Kのさらに他のビットKIを計算する。A*Bの積にモジュラス値Nを任意の回数加えることができ、同じ結果のモジュラスNとみなすことができる。すなわち、範囲[0,N)に縮減した場合、K*Nを加えた後の結果によって同じ剰余モジュロNが与えられる。Kの値は、A*B+K*Nが2sによって割り切れるように選定する。結果のLSBからs個のゼロを廃棄するために、(s回右にシフトして)結果のA*B+K*Nを2sで除算する。したがって、結果は実際にはs回の連続右シフト(RSHs)演算、RSHs(A*B+K*N)=(A*B+K*N)/2sの結果であり、RSHs(X)=X*2-sはXを右にs回シフトすることを示す。これらのシフトは各反復(ステップ3.3)ごとに行われる。
【0091】
本発明の方法により行われるNRMM(s)は、累積結果に値が加算されるs=n+2回の反復から成る。各反復で累積結果に加算される値は、ステップ3.2の暫定累積加算結果が偶数になるように選定する。したがって、累積結果の暫定値のLSBビットは常にゼロであり、1回の右シフトによって2で割り切ることができる(ステップ3.3)。
【0092】
具体的には、S=S+AI*Bの計算結果が奇数値の場合は常に、(奇数の)モジュラスNをSに加える。したがって、各反復において、以下の計算を行う。
【0093】
【数15】
【0094】
したがって、結果は常に2で割り切れ(すなわち右シフトによって)、剰余は出ない。
本発明の好ましい実施形態によると、従来のモンゴメリ乗算法の修正を使用して、完全にハードウェアによって実現可能なモジュラ算術演算の実施を容易にする。従来のモンゴメリ乗算を計算する従来技術の方法では、MMUL(A,B)=A*B*2-n modNの計算は、n回の反復プロセスで得られ、nはモジュラスNのビット数である。前述のように、この計算でn回を超える反復を行うことには大きな利点がある。本発明の好ましい実施形態では、s=n+2を用い、このタイプのモンゴメリ乗算には以下の論法が成り立つ。
【0095】
nビット長の入力値AおよびB(A,B<N)とnビット長のモジュラスNを使用し、s=n+2回の反復を行ってNRMM(s)(A,B)を計算した場合、Aのすべてのビットが走査され、最終結果はN+B<2*Nを超えず、暫定累積結果は2*(N+B)<4*Nを超えない。
【0096】
さらに、(n+1)ビット長の入力値AおよびB(ただしA、B<2*N)とnビット長のモジュラスNを使用し、s=n+2回の反復を行って非縮減および拡張NRMM(s)(A,B)を行った場合、Aのすべてのビットが走査され、最終結果は(N+B+N)/2*Nを超えず、暫定累積結果は2*(N+B)<6*Nを超えない。
【0097】
(n+1)ビット長の入力値A(A<2*N)とnビット長のモジュラスNを使用し、s=n+2回の反復を行ってNRMM(s)(A,1)を計算する場合、Aのすべてのビットが走査され、得られた最終結果が縮減、すなわちNより小さくなることに留意することが重要である。
【0098】
その結果、nビット長のモジュラスNと、2*Nによって制限された入力とを使用して非縮減モンゴメリ乗算の連鎖シーケンスを行った場合、出力は2*Nによって制限されたままであり、1を乗じる1回の(最終)拡張モンゴメリ乗算によって(ステップ1.4の縮減を実際に行わずに)、結果が[0,N)の範囲に縮減される。
【0099】
後者の結果は、実際の適用においてきわめて重要である。前述のように、モンゴメリ乗算とモンゴメリ自乗(MMUL(X,A)、MMUL(X,X))演算のシーケンスを使用してべき乗計算プロセスAE modN(A<N)を実施することができる。nビット長のオペランドX(X<N)を使用し、実際にn+1ビットのオペランドX<2*Nを使用しても、Nよりは大きく2*Nよりは小さい非縮減結果になる。s=n+2回のこの修正モンゴメリ乗算(非縮減)により、中間ステップにおける縮減の必要なしに、(n+2)ビット長の記憶レジスタと(n+3)ビット長の累算器(すなわち桁上げのための追加の1ビットを含む(n+2)ビット長の累算器)を使用して、NRMM(s)の連続べき乗計算シーケンスを行うことができる。さらに、s=n+2は、縮減なしのこのようなべき乗計算を保証する最小回数である。
【実施例3】
【0100】
以下の例では、修正モンゴメリ乗算を、指数AE modNの計算に使用する。ただし、A=212、E=240=(11110000)2(m=8)、およびN=249(実施例2と同様n=8)である。この修正モンゴメリ乗算は、s=n+2=10回の反復によって行われ、したがってA’=212*210 mod249=209の事前計算が必要である。
【0101】
表3(前提条件:A=212、E=240(11110000)2、N=249、およびT(I)=A’=209)
【0102】
【表3】
【0103】
表2では、前のステップT(I+1)で求めた値の後に、ステップ2.1のT(I+1) 2で得られた結果と、ステップ2.2のT(I)で得られた結果が示されている。最終結果は、T(0)=NRMM(s)(T(0),1)=241を計算することによって得られる。表に示すように、行った中間モンゴメリ乗算の結果は縮減されていない。反復I=6、5、4、および3で行ったステップ2.2の演算において、結果はNRMM(s)(T(I)、A’)>Nであり、反復回I=3におけるステップ2.1の演算では結果はNRMM(s)(T(I+1),T(I+1))>Nであった。前述のように、非縮減モンゴメリ乗算には制限が設けてあり、2*Nを超えない。表4に、上記の表4のステップI=3で行ったNRMM(s)(319,319)の計算の場合の修正モンゴメリ乗算の利点を例示する。
【0104】
表4:(前提条件:S=0、A=319=(100111111)2、B=319、およびN=249)
【0105】
【表4】
【0106】
得られた結果は、319*319*2-10 mod249=175であり、明らかにすべての暫定累積結果が6*Nによって制限されている。I=5の場合、S=S+S0*N=1056=(10000100000)2の暫定結果が得られ、これは11ビットの(n+3)であることに留意されたい。実際には、これは、非縮減モンゴメリ乗算を使用したこのような計算に必要な最大ビット長であり、したがって、CSAは最大n+3ビットの結果を計算することができなければならない。しかし、各演算においてCSAで行われる連続右シフトのため、CSAはn+2ビットCSAとして実施される。
【0107】
KIビットは、各反復で得られる部分結果S=S+AI*BのLSBである値S0をとる。この値(KI)は、直前の反復回の結果の最下位ビットと、他の既知の値によって完全に決まり、
【0108】
【数16】
【0109】
によって得られ、CSA’1(603)は、CSAから得られる出力である。図6を参照しながら詳述するように、ある種のハードウェアを追加することにより、CSAはCSA’1(603)出力を提供することができ、この出力を使用してKIビットの生成プロセスが高速化される。この実現は、ハードウェアで容易に実施可能である。本発明の好ましい実施形態によるKIの決定に基づく装置を、図2に示す。この装置では、AのAIビットを供給するために追加のシフト・レジスタR3を使用する。R3レジスタは、直列出力を有し、そのLSBにAの値を保持するsビットと、その左端の2つのMSB位置に、追加の2回の反復(s=n+2)を行うために使用する追加の2つの(ゼロ)ビットを有する。CSAは、s+2ビットであり、追加の記憶装置として機能し、したがって、中間ステップで得られる部分結果のために追加の記憶装置を設ける必要がない。
【0110】
本発明の好ましい実施形態では、KIの値は、AI、R00、およびCSA’1(603)の値から実現される。図2を参照すると、KIの値は、A1、R00、およびCSA’1を入力として受け取る適切な回路602(その可能な実施態様を図3に示す)を使用して実現される。ビットB0が、レジスタR0(R00)のLSBを受け取るラッチ装置200に入れられる。NRMM(s)(A,B)の計算を行うために、値B、B+N、N、およびAをそれぞれのレジスタR0、R1、R2、およびR3にロードし、CSAの内容をゼロ化することによってシステムを初期設定する。したがって、K0は、A0=B0=1の場合にのみ「1」となる。
【0111】
モンゴメリ乗算を行うときにNが奇数の場合、CSAの内容は常に偶数であり、それによって1回の右シフトによって2で割る除算が可能になり、剰余が出ないことに留意されたい。さらに、CSAのLSBは、CSA0出力で得られ、したがって、剰余がある場合(正規乗算)、その剰余はCSA0出力で得られる。
【0112】
図3に、KIビットを供給する回路602の可能な一実施態様を示す。図3の実施態様は、ANDゲート300と排他的OR(XOR)ゲート301を使用して実現され、ANDゲートの入力はビットAIおよびB0であり、XORゲートの入力はANDゲート300の出力とCSA’1603である。CSAからのCSA’1603出力によって、CSA LSBの期待値が得られ、したがってKIビットの実現が高速化されると共に簡略化される。
【0113】
以上で説明し例示したように、本発明の方法は、拡張および非縮減モンゴメリ乗算NRMM(s)(A,B)の高速で効率的な計算のために使用される。この場合、AおよびBは2*Nより小さく、Nは最大nビット(s≧n+2)である。後述するように、この装置に変更を加えて、モンゴメリ・インタリーブド・モジュラ乗算とも呼ばれるnビットを超える整数のモジュラ積計算を行えるようにすることができる。
【0114】
図4に、拡張非縮減モンゴメリ・モジュラ乗算に基づく算術演算を行う本発明の好ましい実施形態による装置を示す。この装置は、本明細書では公開鍵インターフェース(PKI)とも呼び、(それぞれがn+2ビットの)6個のレジスタR0、R1、R2、R3、R4、R5と、(n+2ビットの)桁上げ保存加算器CSAとに基づき、何らかの制御(図示せず)を備える。このPKI装置は、以下での述べるように、様々な算術演算とモジュラ算術演算を行うことができる。
【0115】
図4の装置には、追加のマルチプレクサMX1、MX2、MX3、およびMX4と、シフト・レジスタR4およびR5が組み込まれている。MUXの制御入力C1はMX4の出力に接続されている。MX4はレジスタR3の直列出力とR5の直列出力とのうちから選択するアービトレータとして機能する。レジスタR2、R3、およびR4は、直列入力と直列出力を有し、周期的ビット・ローテーションを行うことができる。他方のMUX制御入力C0は、MX1の出力に接続されている。MX1は、レジスタR4からの入力値と値KIを生成する回路からの入力値のいずれかを選択するアービトレータとして機能する。レジスタR4は、MX2の出力に接続された直列入力を有する。MX2はCSA0値の入力、R4の出力(R4の周期的ビット・ローテーションを行う際に有用)、またはKI602の値のいずれかを選択するアービトレータとして機能する。
【0116】
第3のマルチプレクサMX3は、CSA直列入力への入力を選択するとともに、「0値」とMX4の出力のいずれかを選択することもできる。MX3の出力は、CSAのn番目のビットに加えられ、それによって、後述するように各ステップでCSA(I+1)=(CSA(I)+out(I)+MX3(I)*2n)/2(ただし、out(I)およびMX3(I)はそれぞれMUXおよびMX3からの出力)の計算を行うことによってCSAの内容が設定される。レジスタR5は、より複雑な算術演算(すなわちべき乗計算)に関係する自乗演算を行うためにのみ使用されることに留意されたい。以下で示すように、自乗演算を行うためにレジスタR5にはレジスタR0の内容がロードされる。したがって、同じ装置をレジスタR5なしで実現し、多重化技法を使用してレジスタR0の後続ビットを読み取ることもできる。CSAの可能な実施形態を図6Aおよび図6Bに示す。
【0117】
図6Aおよび図6Bに示すCSAは、n個の全加算器(FA)のセットが直列接続された直列手法に基づく。図6Aに示すCSA600は、nビットCSAであり、各FAは3つの入力と、桁上げ(C)と和(S)の2つの出力を有し、各出力はフリップフロップ(FF)装置の入力である。各FAは、以下の入力を受け取る。すなわち、後続のFAのS出力を受け取るFFの出力と、それ自体のC出力を受け取るFFの出力と、MUX(MUXn-1,MUXn-2,...,MUX0)からの対応する入力である。このようにして、CSAの内容の右シフトと、MUX出力outの加算とが行われる。左端のFA装置610は、図6Bに示す他の2段611および612からの入力を受け取る。
【0118】
図6Bに示す追加の段611および612は、図6AのnビットCSA600を(n+2)ビットCSAに拡張するために使用される。図6Bの第n段611は、CSAの内容にMX3(I)*2nを加算するために使用される。第n段611によって4ビットの加算が行われるように図示されているが、実際にはこの段によって3ビットのみが合計されることを理解されたい。具体的には、モンゴメリ方式の計算を行うときは、MX3から受け取る入力は常にゼロ状態であり、インタリーブド乗算の一部である正規乗算を行うときは、第(n+1)段612から受け取る入力がゼロ状態である。
【0119】
システムのパフォーマンスを高速化するために、第1段のFAのC出力604と第2段のFAのS出力608が、半加算器(HA)607に接続され、HA607のS出力がFFに接続され、このFFから出力CSA’1603が、KIを決定するために使用される回路に供給される。HA607は、論理XORゲートまたは
【0120】
【数17】
【0121】
の演算(すなわち基底2モジュラ加算)を行うことが可能な任意の装置に置き換えることもできる。また、CSAの直列出力CSA0はFF装置を介して供給されるのではなく、第1段のFAのS出力から直接得られることにも留意されたい。
【0122】
以下に、本発明の好ましい実施形態による様々な算術演算の適用について述べる。これは限られた演算セットであるが、本発明の方法を使用する他の可能な演算を含むより広いセットの適用を限定するものではなく、例示のために示すに過ぎない。
【0123】
モンゴメリ自乗(NRSQR (s) )
以下のプロセスは、CSA=(B*B+K*N+CSA)・2sの計算のために使用され、したがって、整数値Bの非縮減および拡張モンゴメリ自乗NRMM(s)(B,B)を実現する。回数はs≧nであるが、最適な選定回数としてs=n+2を示す。
【0124】
入力:B、N、s(B→R0、B+N→R1、N→R2)
出力:NRSQR(s)=NRMM(s)(B,B)
【0125】
【数18】
【0126】
この計算のために、KI、KI,「0」、およびR5の入力をそれぞれ選択するようにMX1、MX2、MX3、およびMX4の制御入力を設定する。この計算の場合、MX2のための入力の選択は結果に影響を与えないことに留意されたい。この演算をインタリーブド乗算の一部として行う場合、MX3の制御入力は、R4入力を選択するように設定する。s回の反復を行った後、R4レジスタからKの値を得る。従来の並列/直列技法(図示せず)またはソフトウェアを使用して、R5の内容にレジスタR0の内容をロードすることができる(図5)。このNRSQRプロセスは、初期設定ステップでCSAの内容をゼロ化することによって、(B*B+K*N+CSA)/2sまたは(B*B+K*N)/2sを計算するためにも使用することができることを理解されたい。
【0127】
非縮減および拡張モンゴメリ乗算(NRMM (s) )
本発明の方法により、PKI装置によって実施される非縮減モンゴメリ乗算について説明する。以下のプロセスでは、縮減されていない結果CSA=(A*B+K*N+CSA)/2sを計算する。
【0128】
入力:A、B、N、s(A→R3、B→R0、B+N→R1、N→R2)
出力:NRMM(s)(A,B)
【0129】
【数19】
【0130】
MX1およびMX4の制御入力を、KIおよびR3の入力がそれぞれ選択されるように設定する。MX2およびMX3の制御入力を、単純NRMM(s)を行うときにKIおよび「0」の入力をそれぞれ選択するように、あるいは(図5に示す)インタリーブド乗算の一部としてKIおよびR4の入力をそれぞれ選択するように設定する。前述のように、sサイクルの計算が完了するとKの値がR4レジスタで得られる。当然ながら、このNRMM(s)プロセスは、初期設定ステップでCSAの内容をゼロ化することによって、(A*B+K*N)/2sを計算するために使用することもできる。
【0131】
1を乗じるモンゴメリ乗算(MMULBY1 (s) )
以下のプロセスは、本発明の方法により、PKI装置を使用し、任意の値BについてCSA=(B+K*N+CSA)/2sを計算するために使用される。前述のように、B<2*Nおよびs=n+2の場合、MMULBY1(s)(B)演算によって得られる結果は縮減される(B<2*Nおよびs=n+2の場合 MMULBY1(s)(B)<N)。
【0132】
入力:B、N、s(B→R0、B+N→R1、N→R2、1→R3)
出力:MMULBY1(s)(B)=NRMM(s)(B,1)
【0133】
【数20】
【0134】
MX1、MX3、およびMX4の制御入力を、KI、「0」、およびR3の入力をそれぞれ選択するように設定する(MX2の選択はこの演算には影響を与えない)。Kの値はR4レジスタで得られ、sサイクルの計算が終了すると最終結果がCSAで得られる。R3に値1(n+2ビット)をロードする代わりに、(図4に破線で示すように)MX4出力に最初のサイクルで「1」が出力され、残りのサイクルで「0」が出力されるように強制する外部制御を使用することもできることに留意されたい。前述のように、初期設定ステップでCSAの内容をゼロ化することによって(B+K*N)/2sの計算を行うことができる。
【0135】
正規乗算(RMUL)
本発明の方法により、PKI装置を使用して正規乗算を行う方法は様々ある。以下のプロセスは、CSA:R4=A*B+C*D+CSA(CSAの内容には前回行った演算の結果が保持されるか、またはCSAの内容を所望の値に設定することもできる)を計算する可能な1つの方法である。RMUL演算のMSBは、CSAで得られ、LSBはR4で得られる。
【0136】
入力:A、B、C、D、n(B→R0、B+D→R1、D→R2、A→R3、C→A4)
出力:RMUL(A,B,C,D)=A*B+C*D+CSA
【0137】
【数21】
【0138】
MX1、MX2、MX3、およびMX4の制御入力を、R4、CSA0、「0」、およびR3の入力をそれぞれ選択するように設定する。n回の反復を行った後、レジスタR4で結果のn個のLSBが得られ、CSAで結果のn個のMSBが得られる。
【0139】
モンゴメリ指数
PKIの指数計算への適用は、AE modN(一般性を失わずにA<N)を計算する前述の指数プロセスに基づく。PKI装置を使用してこの計算を行うには、事前計算値A’=A*2s modNが必要である。この特定のプロセスでは、指数E=(em-1,em-2,...,e0)の調整(打切り)値E’が必要であり、MSBem-1が削除され、ビット順序が逆転され、したがってE’=(e0,e1,...,em-2)2(mはE内のビット数)となる。
【0140】
プロセス2
入力:m、A’、N、E’(A’→R0、A’+N→R1、N→R2、A’→R3、E’→R4)
出力:CSA=AE modN(左から右の手法)
【0141】
【数22】
【0142】
上記のプロセスではループでモンゴメリ自乗と乗算のシーケンスを行う。プロセス2を使用したPKI装置の動作の詳細をフローチャートの形で図7Aに示す。この動作はステップ730および731で開始され、A’、E’、N、およびm−1の値がPKI装置に入力される。一連の動作(上記のステップ4.1ないしステップ4.3)を、ステップ732aおよび732bから始まるループで行い、レジスタR4の内容に対して右シフトを行い、CSAの内容をゼロ化し、R0の内容のNRMSQR(s)を行う。ステップ732Cで、CSAで得られたNRMSQR(s)の結果がレジスタR0にロードされ、CSAとレジスタR2の内容の加算結果がレジスタR1にロードされる。
【0143】
ステップ732dで、上記の指数プロセスのステップ4.3の処理が行われ、R4のLSBを検査し、それが「1」の場合、CSAの内容がゼロ化され、レジスタR0およびR3の内容のNRMM(s)が行われ、その結果がR0に格納されると共にR2の内容にも加算され、レジスタR1に格納される。処理はステップ732eに進み、ループ・インデックスiの値を1だけ減少させ、ステップ732fで、そのループ・インデックスiがゼロか否かを調べる。iがゼロ化されていない場合、ステップ732aに移行してこのプロセスをもう一度反復する。iがゼロの場合は、CSAの内容がゼロ化され、R0の内容に対してMMULBY1(s)演算を行う。MMULBY1(s)演算を行って2s因子を削除した後、CSAでべき乗計算(縮減)結果が得られる。
【0144】
図7Aに示すプロセスは、外部制御(図示せず)を使用して行われることを理解されたい。この制御は、プロセッサ/コントローラを使用してソフトウェアによって、または専用ハードウェアを付加することによって行うことができる。
【0145】
右から左に実行される2進べき乗計算、m配列べき乗計算、スライディング・ウィンドウべき乗計算など、その他のべき乗計算プロセスも同様にして実施することができる(「Handbook of Applied Cryptography」、Alfred J. Menezes,Paul C. van Oorschot、およびScott A. Vanstone、CRC Press、1996年10月)。
【0146】
PKI装置を使用した他のべき乗計算の例を、以下のプロセスで説明する。このプロセス(右から左の2進べき乗計算)では、直接、指数値を使用し、そのビットの調整は不要である。
【0147】
プロセス3
入力:m(>1)、A’、N、E(A’→R0、A’+N→R1、N→R2、A’→R3、E→R4)
出力:CSA=AE modN
【0148】
【数21】
【0149】
このプロセスのPKI動作を図7Bに示す。このプロセスは、ステップ750および751で開始され、値A’、E’、N、およびm−1がPKI装置に入力され、フラグが「1」に設定される。上記の指数プロセスのステップ5.1ないし5.4で行われる演算が、ステップ752aから開始され、レジスタR4の内容に対して右シフトが行われる。ステップ752bで、R4のLSBを調べ、「1」の場合はステップ752cでさらにフラグが「1」の状態か否かを判断する検査を行う。フラグの状態が「1」の場合、レジスタR3にレジスタR0の内容がロードされ、フラグの状態が「0」にリセットされる。ステップ752cでフラグの状態が「0」の場合、CSAの内容がゼロ化され、レジスタR0およびR3の内容に対してNRMM(s)演算を行い、その結果がCSAで得られ、R3レジスタにロードされる。動作は、ステップ752dに制御を渡して継続される。
【0150】
ステップ752bでR4レジスタのLSBの状態が「1」でない場合、処理はステップ752dに進み、CSAの内容がゼロ化され、R0の内容のNRSQR(s)演算が行われ、その結果がCSAで得られる。次に、NRSQR(s)の結果はレジスタR0にロードされ、レジスタR2の内容にも加算される。CSAとレジスタR2の内容の加算結果がレジスタR1に格納される。このプロセスはステップ752fに進み、ループ・インデックスiを1だけ減少させる。ステップ752eで、iがゼロか否かを調べる。iがゼロでない場合、制御はステップ752aに渡されてもう一度反復が行われる。iがゼロの場合は、CSAの内容がゼロ化され、R0およびR3の内容のNRMM(s)演算を行い、その結果がCSAで得られ、レジスタR0にロードされる。レジスタR2とCSAの内容の加算がレジスタR1に格納され、CSAの内容がゼロ化され、MMULBY1(s)が行われる。次に、最終(縮減)結果がCSAで得られる。
【0151】
前述のように、この動作の各ステップは外部制御を使用して行われる。
べき乗計算プロセスの様々な実施態様の選択に柔軟性をもたせることは、実際の適用において重要である。たとえば、右から左に実行されるべき乗計算プロセスによって、2つのPKI装置の並列使用が可能になる。
【0152】
また、本発明の方法は、特に従来のモンゴメリ乗算方法で行われる減算の検出に基づく攻撃に対して、PKI装置のセキュリティを大幅に向上させることを理解されたい。そのような攻撃方法では、行われた縮減演算を暴露することによってユーザの秘密(プライベート)鍵を計算する(W. Schindler「A Timing Attack against RSA with the Chinese Reminder Theorem」、第2回国際ワークショップ、米国マサチューセッツ州ウースター、2000年8月)。このような攻撃に対して現在使用されている一般的な方法は、追加の(ダミー)減算を行うことであり、これは当然ながらより多くの時間と電力を消費する。本発明の方法では減算は行わないため、そのような方法を使用して秘密鍵を暴くことは不可能である。
【0153】
前述のように、本発明の方法を使用して、並列稼働する2つのPKI装置を使用して右から左に実行されるべき乗プロセスを実施することができる。当業者ならわかるように、このような並列実施態様は、システムのセキュリティをさらに向上させる。そのような並列システムでいつどのような演算が行われるかを追跡し、特定するのは困難なため、敵対的作業はさらに難しくなる。
【0154】
モンゴメリ・インタリーブド乗算
図5で、モンゴメリ・インタリーブド乗算の異なるステップ(I、II、IIIおよびIV)のために各レジスタ(R0、R1、R2、R3、およびR4)にロードされる値と、各マルチプレクサ(MX1、MX2、MX3、およびMX4)の入力の選択について説明されている。各ステップで、レジスタにそれぞれの値がロードされ、それに対応する入力を供給するようにMUXの制御入力が設定され、それぞれの積を計算するs回の反復のプロセスが行われる。
【0155】
以下の説明では、A・B modNのモンゴメリ・インタリーブド・モジュラ乗算について説明する。ここで、A、B、およびNは2nビットの値である。各整数値A、B、およびNはnビットの部分値の対として扱われる。たとえば、A=A1*2n+A0の部分値は、A=(A1,A0)と表す。ただし、A1はAのn個のMSBを示し、A0はAのn個のLSBを示す。同様に、B=B1*2n+B0およびN=N1*2n+N0の部分値は、B=(B1,B0)およびN=(N1,N0)で示す。この実施形態に(ソフトウェアによって)変更を加え、任意の長さのA、B、およびNについてA・B modNの計算を可能にすることもできる。他の態様では、各整数は、各部分値がnビットのl個の部分値から成る。
【0156】
ステップIで、レジスタR0、R1、R2、およびR3にそれぞれB0、B0+N0、N0、およびA0をロードして(A0*B0+N0*K0)/2-nの計算を行う。さらに、MX1、MX2、MX3、およびMX4の制御入力を、それぞれKI、KI、「0」、R3の入力を選択するように設定する。結果(A0*B0+N0*K0)/2-n A0*B02-s modN0はCSAに格納されたままである。このステップではMX2はKI出力を選択するため、レジスタR4には次のステップの計算に必要なK0値のビットがロードされる。
【0157】
ステップIIで、正規乗算を行ってA0・B1+N1・K0+CSA(I)を計算する。ここでCSA(I)は前のステップであるステップIで得られた結果である。R0、R1、R2、およびR3レジスタにそれぞれ値B1、B1+N1、N1、およびA0がロードされ、MX1、MX2、MX3、およびMX4の制御入力が、それぞれR4、CSA0、「0」、R3の入力を選択するように設定される。R3ビットの右シフトは周期ビット・ローテーションであり、そのため実際にはR3にA0の値を再ロードする必要がないことに留意されたい。このステップでは、この装置を正規乗算の計算に使用するため、結果のn個のLSBがR4レジスタの直列入力に供給され、結果のn個のMSBはCSAに残る。
【0158】
次のステップであるステップIIIで、(A1*B0+N0*K1+R4*2n+CSA)/2-n modN0の計算を行う。このために、このステップの演算の前に、R4レジスタに格納されている値をCSAに格納し、CSAの内容をR4レジスタに格納する。さらに、レジスタR0、R1、R2、およびR3に、それぞれ値B0、N0+B0、N0、およびA1をロードし、MX1、MX2、MX3、およびMX4の制御入力を、それぞれKI、KI、R4、R3の入力を選択するように設定する。このステップの処理中、R4レジスタの内容にK1のビットKI 1がロードされる。このステップの結果は、最終ステップの計算のためにCSAに残される。
【0159】
最後のステップIVで、A1*B1+N1*K1+CSA(III)の正規乗算を行う。ここでCSA(III)は、ステップIIIで得られた結果である。レジスタR0、R1、R2、およびR3に、それぞれ値B1、B1+N1、N1、およびA1をロードし、MX1、MX2、MX3、およびMX4の制御入力が、それぞれR4、CSA0、「0」、R3の入力を選択するように設定される。このステップでは、結果のn個のLSBがR4レジスタにロードされ、結果のn個のMSB(n+1ビットの場合もある)がCSAで得られる。
【0160】
このプロセスの各ステップ(ステップIないしステップVI)の最終結果は、Nより大きい。したがって、縮減が必要な場合がある。必要な場合は、各ステップの後にソフトウェアによって縮減を行う。あるいは、拡張非縮減手法を使用してインタリーブド乗算の同じ方法を実施することができ、その場合、各ステップ後に得られた結果の縮減を行わなくても済む。
【0161】
さらに、インタリーブド乗算の暫定結果を記憶するソフトウェアを使用して、より大きな値の計算を行うこともできる。
以上の各例および説明は、例示のためのものであって、決して本発明を限定するものではないことは言うまでもない。当業者ならわかるように、本発明は、本発明の範囲から逸脱することなく、上述の技法とは異なる方法を使用して多様な方法で実施することができる。
【図面の簡単な説明】
【0162】
【図1】乗算および加算演算を行う従来技術の装置の概略を示すブロック図である。
【図2】非縮減および拡張モンゴメリ乗算を計算する本発明の好ましい実施形態の概略を示すブロック図である。
【図3】KIビットを生成する本発明の好ましい一実施形態を示す概略図である。
【図4】モンゴメリ乗算を使用してモジュラ算術演算を行う本発明の好ましい実施形態の概略を示すブロック図である。
【図5】本発明の好ましい実施形態による、インターリーブド・モンゴメリ乗算を計算するプロセスを示す概略図である。
【図6】図6Aは、本発明の方法によるCSA装置の可能な実施形態を示す略図である。 図6Bは、本発明の方法によるCSA装置の可能な実施形態を示す略図である。
【図7−A】PKI装置を使用してべき乗計算を行う方法を示すフローチャートである。
【図7−B】PKI装置を使用してべき乗計算を行う方法を示すフローチャートである。
Claims (23)
- 必要な反復回数が奇数モジュロ値Nのビット数nよりも多い、第1の整数値Aと第2の整数値Bとの非縮減および拡張モンゴメリ乗算を使用して乗算演算を含むモジュラ算術計算を行う方法であって、
a)n+2ビット値を格納し、その内容(S+X→S)にn+2ビット値(X)を加算し、その内容を2(S/2→S)で割ることができる累算装置(S)を設けるステップと、
b)所望の場合には、装置の内容をゼロ値(「0」→S)に設定し、前記装置において少なくともs(>n+1)回の反復を行い、各反復において前記第1の整数値Aの値(AI;0≦I≦s−1)から、その最下位ビット(A0)から開始して1ビットを順次選択するステップとを含み、
ステップb)が
b.1)前記装置Sの内容に選択された前記ビットAIと前記第2の整数値Bとの積を加算する(S+AI*B→S)ステップと、
b.2)前記装置の前記結果の内容に、その時点での最下位ビットS0とNとの積を加算する(S+S0*N→S)ステップと、
b.3)前記装置の前記結果の内容を2で割る(S/2→S)ステップと、
b.4)反復のたびにその前の結果(S)を使用してステップb.1)ないしステップb.3)をさらにs−1回反復することによって非縮減および拡張モンゴメリ乗算結果を得るステップとを含む方法。 - a)前記モジュロ値Nを格納する第1の記憶装置(R2)を設け、
b)前記第2の整数Bの値を格納する第2の記憶装置(R0)を設け、
c)前記モジュロNと前記第2の整数値Bとの和を格納する第3の記憶装置(R1)を設け、
d)前記第1(R2)、第2(R0)、および第3(R1)の記憶装置からのそれぞれ第1(In1)、第2(In2)、および第3(In3)の入力を有し、追加のゼロ入力(In0)を有し、第1(C1)および第2(C0)の制御入力を受け取るアービトレーション装置であって、
d.1)その第1(C1)および第2(C0)の制御入力がゼロの場合に、前記追加のゼロ入力(In0)を選択するステップと、
d.2)その第1の制御入力(C1)が1で、その第2の制御入力(C0)がゼロの場合に、その第2の入力(In2)を選択するステップと、
d.3)その第1の制御入力(C1)がゼロで、その第2の制御入力(C0)が1の場合に、その第1の入力(In1)を選択するステップと、
d.4)その第1の制御入力(C1)と第2の制御入力(C0)とが1の場合に、前記第3の入力(In3)を選択するステップとに従って、他の入力の1つをその出力として選択することができ、
選択された前記入力が、前記累算装置の入力に接続されたアービトレーション回路の出力として供給されるアービトレーション回路を設け、
e)前記第1の整数値Aのビット(A1;0≦I≦s)を、その最下位ビット(A0)から開始して順次に1ビットずつ、前記第1の制御入力(C1)に適用し、
f)前記第1の整数値の選択されたビット(AI)の状態と、前記第2の整数値の最下位ビット(B0)の状態と、前記累算装置の最下位ビット(S0)の状態とに応じて前記第2の制御入力(C0)の状態(KI)を生成する回路を設けることによって、ステップb.1)ないしステップb.3)を単一のステップに統合することにより前記モンゴメリ乗算結果が得られる、請求項1に記載の方法。 - 前記第2の制御入力(C0)の状態(KI)が、
a)
a.1)前記第1の制御入力(C1)の状態と前記第2の整数値の最下位ビット(B0)の状態が1であって前記累算装置の最下位ビット(S0)の状態がゼロである場合か、
a.2)前記第1の制御入力(C1)の状態と前記第2の整数値Bの最下位ビット(B0)の状態とが異なる状態であり、前記累算装置の最下位ビット(S0)の状態が1である場合に、値1(KI=「1」)を生成するステップと、
b)それ以外の場合にゼロ値(KI=「0」)を生成するステップとを行うことによって、前記第2の制御入力(C0)の状態(KI)が生成される、請求項2に記載の方法。 - 前記第2の制御入力(C0)の状態を生成するための使用される前記回路が、論理ANDゲートと論理XORゲートとを含み、前記論理ANDゲートの入力が前記第1の制御入力(C1)の状態と前記第2の整数値Bの最下位ビット(B0)の状態とを受け取り、前記論理XORゲートの入力が前記論理ANDゲートからの出力と前記累算装置の最下位ビット(S0)の状態とを受け取り、前記論理XORゲートの出力が前記第2の制御入力(C0)の状態として使用される、請求項3に記載の方法。
- 前記モンゴメリ乗算を行うために使用される反復回数sがn+2であり、それによってn+2回の反復が行われる拡張モンゴメリ乗算結果が得られる、請求項1または2に記載の方法。
- a)最上位ビット位置への直列入力を有するとともに、内容の並列出力も可能なn+2ビットのシフト・レジスタを、前記第1(R2)、第2(R0)、および第3(R1)の記憶装置として使用するステップと、
b)前記第1の記憶装置(R2)にその最下位ビット位置(R20)からの直列出力を設け、周期的ビット・ローテーションを行うことができるようにするステップと、
c)前記第2の記憶装置(R0)がその直列入力で前記累算装置の最下位ビット(S0)を受け取ることができるようにするステップと、
d)その内容をその最下位ビット(R30)から開始して順次に1ビットずつ(R3I; I=0,1,2,...,n+1)並列出力することができ、n+2ビットを格納することができ、その内容に対して周期的ビット・ローテーションを行うことができる第4の記憶装置(R3)を設けるステップと、
e)直列入力と直列出力とを有し、n+2ビットの値を格納することができる第5の記憶装置(R4)を設けるステップと、
f)その内容をその最下位ビットから開始して順次に1ビットずつ(R5I I=0,1,2,...,n+1)並列出力することができ、n+2ビットを格納することができる第6の記憶装置(R5)を設けるステップと、
g)前記第5の記憶装置からの第1の入力(R4I)と、前記第2の制御入力の状態(KI)を生成する前記回路からの第2の入力とを有し、出力が前記第2の制御入力(C0)に接続された第1のアービトレーション装置(MX1)を設けるステップと、
h)前記累算装置の最下位ビット(S0)と等しい第1の入力と、前記回路の出力から受け取る第2の入力(KI)と、前記第5の記憶装置(R4)の前記直列出力に接続された第3の入力(R4I)とを有し、出力が前記第5の記憶装置(R4)の前記直列入力に接続された第2のアービトレーション装置(MX2)を設けるステップと、
i)常にゼロ値(「0」)が供給される第1の入力と、前記第5の記憶装置の直列出力から受け取る第2の入力(R4I)とを有し、出力が前記累算装置の直列入力に接続された第3のアービトレーション装置(MX3)を設けるステップと、
j)前記第6の記憶装置の直列出力に接続された第1の入力(R5I)と前記第4の記憶装置の直列出力に接続された第2の入力(R3I)とを有し、出力が前記第1の制御入力(C1)に接続された第4のアービトレーション装置(MX4)を設けるステップと、
k)n+2ビット値の直列加算を行うことができ、前記累算装置の最下位ビット位置からの第1の入力(S0)と、前記第1の記憶装置(R2)の直列出力からの第2の入力とを受け取り、出力が前記第3の記憶装置(R1)の直列入力に接続された、加算器を設けるステップとを実行することによって、モジュラ算術演算を行うことができるようにするステップをさらに含む、請求項2に記載の方法。 - 前記累算装置が、各段が第1および第2のフリップフロップ装置と、3個の入力を有する全加算器装置とから成るn+2段の加算およびラッチ段から成り、第1段目の段からは前記第2のフリップフロップが省かれている方法であって、
a)前記全加算器の第1の入力を第1のフリップフロップ装置の出力に接続するステップと、
b)前記全加算器の第2の入力を後続の加算およびラッチ段の第2のフリップフロップ装置の出力に接続するステップと、
c)前記全加算器の第3の入力を前記アービトレーション装置のそれぞれのビット出力(MUXi 0≦i≦n+1)に接続するステップとを含む、請求項6に記載の方法。 - a)(n+1)段目の加算およびラッチ段に第1および第2の半加算器装置と第3のフリップフロップ装置とを設けるステップと、
b)前記第1のフリップフロップ装置の入力を前記第2の半加算器の和出力に接続するステップと、
c)前記第2のフリップフロップ装置の入力を前記第2の半加算器の桁上げ出力に接続し、前記フリップフロップ装置の出力を、(n+2)段目の加算およびラッチ段の前記全加算器の第2の入力に接続するステップと、
d)前記第2の半加算器の第1の入力を(n+1)段目の加算およびラッチ段の前記全加算器の桁上げ出力に接続し、その第2の入力を前記第1の半加算器の桁上げ出力に接続するステップと、
e)前記第1の半加算器の第1の入力を前記全加算器の和出力に接続し、前記第2の半加算器の第2の入力を前記第3のアービトレーション装置(MX3)の出力に接続するステップと、
f)前記第3のフリップフロップ装置の入力を前記第1の半加算器の和出力に接続し、その出力を(n−1)段目の加算およびラッチ段の前記全加算器の第2の入力に接続するステップとを行うことによって、前記累算装置の直列入力を介して前記第3のアービトレーション装置(MX3)から出力を(n+1)段目の加算およびラッチ段の加算結果に加算するステップをさらに含む、請求項7に記載の方法。 - 前記第2の制御入力(C0)の状態が、前記第2の記憶装置(R0)の最下位ビットと、前記第4のアービトレーション装置(MX4)の出力と、前記第1段目の加算およびラッチ段の前記全加算器の桁上げ出力と、第2段目の加算およびラッチ段の全加算器の和出力とを使用して判断され、前記方法が、
a)前記第2の記憶装置(R0)の最下位ビットと前記第4のアービトレーション装置(MX4)の出力とをAND論理ゲートの入力に接続するステップと、
b)追加の半加算器と追加のフリップフロップ装置とを設けるステップと、
c)前記半加算器の第1の入力を、前記第2段目の加算およびラッチ段の前記全加算器の和出力に接続し、その第2の入力を前記第1段目の加算およびラッチ段の前記全加算器の桁上げ出力に接続するステップと、
d)前記半加算器の和出力を前記追加のフリップフロップ装置の入力に接続するステップと、
e)前記AND論理ゲートの出力と前記フリップフロップ装置の出力とをXORゲートの入力に接続し、前記XORゲートの出力を使用して前記第2の制御入力(C0)の状態を判断するステップとを含む、請求項3および8に記載の方法。 - a)前記第1(R2)、第2(R0)、および第3(R1)の記憶装置に、それぞれ、前記モジュラスNの値と、前記整数Bの値と、前記モジュラスと前記整数との和(N+B)の値とをロードするステップと、
b)前記第2の制御入力(C0)の状態(KI)を生成する回路の入力、前記第2の制御入力(C0)の状態(KI)を生成する回路の入力、前記ゼロ値(「0」)の入力、および前記第6の記憶装置(R5)の出力の入力をそれぞれ選択するように、前記第1(MX1)、第2(MX2)、第3(MX3)、および第4(MX4)のアービトレーション装置を設定するステップと、
c)前記第6の記憶装置(R5)の内容に前記第2の記憶装置(R0)の内容をロードし、前記累算装置の内容にゼロ値をロードするステップと、
d)各サイクルで前記第6の記憶装置(R5)の内容が1ビットずつ右にシフトされる非縮減および拡張モンゴメリ乗算を行うステップと、
e)前記累算装置において非縮減モンゴメリ自乗の結果を得るステップとを行うことによって、整数値Bの非縮減モンゴメリ自乗を行うステップをさらに含む、請求項9に記載の方法。 - a)前記第1(R2)、第2(R0)、第3(R1)、および第4(R3)の記憶装置に、それぞれ、前記モジュラスNの値と、前記第2の整数(B)の値と、前記モジュラスと前記第2の整数との和(N+B)の値と、前記第1の整数(A)の値とをロードするステップと、
b)前記第2の制御入力(C0)の状態(KI)を生成する前記回路の入力、前記第2の制御入力(C0)の状態(KI)を生成する前記回路の入力、前記ゼロ値(「0」)の入力、および前記第4の記憶装置(R3)の出力の入力をそれぞれ選択するように、前記第1(MX1)、第2(MX2)、第3(MX3)、および第4(MX4)のアービトレーション装置を設定するステップと、
c)前記累算装置の内容にゼロ値をロードするステップと、
d)各サイクルで前記第4の記憶装置(R3)の内容が右に1ビットずつシフトされる非縮減および拡張モンゴメリ乗算を行うステップと、
e)前記累算装置において前記非縮減モンゴメリ乗算の結果を得るステップとを行うことによって、第1(A)と第2(B)の整数値のモンゴメリ乗算を行うステップをさらに含む、請求項9に記載の方法。 - モジュラべき乗計算AE modNを行うステップをさらに含み、モジュラべき乗計算は、
a)調整されたオペランド値A’=A*2s modNを事前計算するステップと、
b)ビット順序を逆転させ、最上位ビットem-1を削除して調整された値E’(e0,e1,...,em-2)2を得ることによって、指数E=(em-1,em-2,...,e1,e0)2の調整された値を構成するステップと、
c)前記第1、第2、第3、および第5の記憶装置の内容に、それぞれ、前記モジュラスNの値、調整された前記オペランド(A’)の値、前記モジュラスと前記調整されたオペランドとの和(N+A’)の値、および調整された前記指数値E’をロードし、前記指数値Eのビット長mを求め、
c.1)前記第5の記憶装置(R4)の内容を右シフトするステップと、
c.2)非縮減モンゴメリ自乗を行って前記累算装置において前記第3の記憶装置(R3)の内容の非縮減モンゴメリ自乗を得るステップと、
c.3)前記第3の記憶装置(R3)の内容に前記累算装置の内容をロードするステップと、
c.4)前記第3の記憶装置(R1)の内容に前記第1の記憶装置(R2)の内容と前記累算装置の内容の和をロードするステップと、
c.5)前記第5の記憶装置の最下位ビット(R40)が「1」の場合、非縮減および拡張モンゴメリ乗算を行って前記第2の記憶装置(R0)の内容と前記第4の記憶装置(R3)の内容との非縮減モンゴメリ乗算結果を前記累算装置で得て、前記第2の記憶装置(R0)の内容に前記累算装置の内容をロードし、前記第3の記憶装置(R1)の内容に前記第1の記憶装置(R2)の内容と前記累算装置の内容との和をロードするステップと、
c.6)ステップc.1)ないしステップc.5)をさらにm−2回反復するステップとを行うステップと、
d)前記第2の記憶装置(R0)の内容に1を乗じる縮減および拡張モンゴメリ乗算を行って前記累算装置で最終縮減結果を得るステップとを含む、請求項9に記載の方法。 - a)調整されたオペランド値A’=A*2s modNを事前計算するステップと、
b)第1(R2)、第2(R0),第3(R1)、および第5(R4)の記憶装置に、前記モジュラスNの値、調整された前記オペランド(A’)の値、前記モジュラスと調整された前記オペランドとの和(N+A’)、および前記指数値Eの内容をロードし、前記指数値値Eのビット長mを求め、フラグを「1」に設定して、
b.1)前記第5の記憶装置(R4)の内容を右シフトするステップと、
b.2)前記第5の記憶装置の最下位ビット(R40)が「1」の場合、前記フラグの状態を調べ、前記フラグが「1」でない場合は、非縮減および拡張モンゴメリ乗算を行って前記第2の記憶装置(R0)と前記第4の記憶装置(R3)の内容の非縮約および拡張モンゴメリ乗算結果を前記累算装置で得て、前記第4に記憶装置(R3)の内容に前記累算装置の内容をロードし、それ以外の場合は、前記第4の記憶装置(R3)の内容に前記第2の記憶装置(R0)の内容をロードし、前記フラグの状態を「0」にリセットするステップと、
b.3)拡張および非縮減モンゴメリ自乗を行って前記累算装置で前記第2の記憶装置(R0)の内容の拡張および非縮減モンゴメリ自乗を求めるステップと、
b.4)前記第2の記憶装置(R0)の内容に前記累算装置の内容をロードするステップと、
b.5)前記第3の記憶装置(R1)の内容に前記第1の記憶装置の内容と前記累算装置の内容との和をロードするステップと、
b.6)ステップb.1)ないしステップb.5)をm−1回反復するステップとを行うステップと、
c)拡張および非縮減モンゴメリ乗算を行って、前記累算装置で前記第2の記憶装置(R0)の内容と前記第4の記憶装置(R3)の内容との拡張および非縮減モンゴメリ乗算結果を求め、前記第2の記憶装置(R0)の内容に前記累算装置の内容をロードし、前記第3の記憶装置(R1)の内容に前記第1の記憶装置(R2)の内容と前記累算装置の内容との和をロードし、前記第2の記憶装置(R0)の内容に1を乗じる拡張および非縮減モンゴメリ乗算を行って前記累算装置で最終縮減結果を得るステップとを行うことによって、モジュラべき乗AE modNを行うステップをさらに含む、請求項9に記載の方法。 - a)
a.1)前記第1(R2)、第2(R0)、第3(R1)、および第4(R3)の記憶装置に、それぞれ、前記モジュラス値(N)のn個の最下位ビット(N0)、前記第2の整数値(B)のn個の最下位ビット(B0)、前記モジュラス値(N)のn個の最下位ビットと前記第2の整数値(B)のn個の最下位ビット(B0)の和(B0+N0)、および前記第1の整数値(A)のn個の最下位ビット(A0)をロードするステップと、
a.2)前記第1(MX1)、第2(MX2)、第3(MX3)、および第4(MX4)のアービトレーション装置を、前記第2の制御入力(C0)の状態(KI)を生成する前記回路の入力、前記第2の制御入力(C0)の状態(KI)を生成する回路の入力、ゼロ値(「0」)、および前記第4の記憶装置(R3)の入力を選択するように設定し、必要であれば前記累算装置の内容をゼロにリセットするステップと、
a.3)モンゴメリ乗算を行い、その結果を(S(I))を前記累算装置で得て、前記第2の制御入力のビット状態(KI 0≦1≦n−1)(K0)を第5のレジスタ(R4)で得るステップとを行うことによって、前記第1の整数値のn個の最下位ビット(A0)と前記第2の整数値のn個の最下位ビット(B0)のモンゴメリ乗算(MMUL(A0,B0)を計算するステップと、
b)
b.1)前記第1(R2)、第2(R0)、第3(R1)、および第4(R3)の記憶装置に、それぞれ、前記モジュラス値(N)のn個の最上位ビット(N1)、前記第2の整数値(B)のn個の最上位ビット(B1)、前記モジュラス値(N)のn個の最上位ビットと前記第2の整数値(B)のn個の最上位ビットとの和(B1+N1)、前記第1の整数値(A)のn個の最下位ビット(A0)をロードするステップと、
b.2)前記第1(MX1)、第2(MX2)、第3(MX3)、および第4(MX4)のアービトレーション装置を、前記第5のレジスタ(R4)の入力、前記累算装置の最下位ビット(S0)、ゼロ値(「0」)、および前記第4の記憶装置(R3)の入力を選択するように設定するステップと、
b.3)前記計算を行い、その結果(S(II))の最上位ビットを前記累算装置で、前記結果(R(4))の最下位ビットを前記第5の記憶装置で得るステップとを行うことによって、
前記第1の整数値のn個の最下位ビット(A0)と、前記第2の整数値のn個の最上位ビット(B1)と、前記モジュラス値のn個の最上位ビット(N1)と、前記第5のレジスタ(R4)で得たnビット値(K0)と、ステップa)で得た前記結果(S(I))とのA0*B1+N1*K0+S(I)の値を計算するステップと、
c)
c.1)前記第1(R2)、第2(R0)、第3(R1)、および第4(R3)の記憶装置に、それぞれ前記モジュラス値(N)のn個の最下位ビット(N0)、前記第2の整数値(B)のn個の最下位ビット(B0)、前記モジュラス値(N)のn個の最下位ビットと前記第2の整数値(B)のn個の最下位ビット(B0)との和(B0+N0)、および前記第1の整数値(A)のn個の最上位ビット(A1)をロードするステップと、
c.2)前記累算装置(S)の内容にステップb)で得た前記結果(R4(II))のn個の最下位ビットをロードし、前記第5の記憶装置(R4)の内容にステップb)で得た結果(S(II))のn個の最上位ビットをロードするステップと、
c.3)前記第1(MX1)、第2(MX2)、第3(MX3)、および第4(MX4)のアービトレーション装置を、前記第2の制御入力(C0)の状態(KI)を生成する前記回路の入力、前記第2の制御入力(C0)の状態(KI)を生成する前記回路の入力、前記第5の記憶装置(R4)からの入力、および前記第4の記憶装置(R3)の入力を選択するように設定するステップと、
c.4)モンゴメリ乗算を行い、その結果(S(III))を前記累算装置で得て、前記第2の制御入力ビットの状態(KI 0≦I≦n−1)(K1)を前記第5のレジスタ(R4)で得るステップとを行うことによって、前記第1の整数値のn個の最上位ビット(A1)と、前記第2の整数値のn個の最下位ビット(B0)と、ステップb)で得た結果(R4(II),S(II))とのモンゴメリ乗算の加算の結果を計算するステップと、
d)
d.1)第1(R2)、第2(R0)、第3(R1)、および第4(R3)の記憶装置に、それぞれ、前記モジュラス値(N)のn個の最上位ビット(N1)、前記第2の整数値(B)のn個の最上位ビット(B1)、前記モジュラス値(N)のn個の最上位ビットと前記第2の整数値(B)のn個の最上位置ビットとの和(B1+N1)、および前記第1の整数値(A)n個の最上位ビット(A1)をロードするステップと、
d.2)前記第1(MX1)、第2(MX2)、第3(MX3)、および第4(MX4)のアービトレーション装置を、前記第5のレジスタ(R4)の入力、前記累算装置の最下位ビット(S0)、前記ゼロ値(「0」)、および前記第4の記憶装置(R3)の入力を選択するように設定するステップと、
d.3)前記計算を行い、結果(S(IV))の最上位ビットを前記累算装置で得、前記結果(R(IV))の最下位ビットを前記第5の記憶装置で得るステップとを行うことによって前記第1の整数値のn個の最上位ビット(A1)と、前記第2の整数値のn個の最上位ビット(B1)と、前記モジュラス値のn個の最上位ビット(N1)と、前記第5のレジスタ(R4)で得たnビット値(K1)と、ステップc)で得た結果(S(III))とのA1*B1+N1*K1+S(III)を計算するステップとを行うことによって、第1の整数と第2の整数とモジュラス(N)とが2×nビットである、第1(A=A1*2n+A0)および第2(B=B1*2n+B0)の整数値のモジュラ乗算を行うステップをさらに含む、請求項9に記載の方法。 - 必要な反復回数(s)がモジュロ値(N)内のビット数(n)よりも多く、モンゴメリ乗算結果が前記モジュロ値の2倍(2×N)よりも小さい、第1(A)と第2(B)の整数値の拡張および非縮減モンゴメリ乗算を行う装置であって、
a)前記モジュロ値(N)を格納する第1の記憶装置(R2)と、
b)前記第1の整数値(A)を格納する第2の記憶装置(R0)と、
c)前記第1の整数値と前記モジュロとの和(A+N)を格納する第3の記憶装置(R1)と、
d)前記第1(R2)、第2(R0)、および第3(R1)の記憶装置からの第1(In1)、第2(In2)、および第3(In3)の入力を有し、ゼロ(「0」)である第4の入力を有し、第1(C1)および第2(C0)の制御入力を受け取り、それによって他の入力の1つをその出力として選択することができ、累算装置の入力に接続された、アービトレーション回路と、
e)前記第1の整数値の選択されたビット(AI)の状態と、前記第2の整数値の最下位ビット(B0)の状態と、前記累算装置の最下位ビット(S0)の状態とに応じて前記第2の制御入力(C0)の状態(KI)を生成する回路と、
f)n+2ビットの値を格納し、その内容にn+2ビットの値(X)を加算し(S+X→S)、その内容を2で割る(S/2→2)ことができる、累算装置(S)とを含む装置。 - 前記第2の制御入力の状態(KI)を生成するために使用される前記回路が、
選択された前記ビット(AI)の状態と前記第2の整数の最下位ビット(B0)の状態とが1で、前記累算装置の最下位ビット(S0)の状態がゼロの場合、または
選択された前記ビット(AI)の状態と前記第2の整数値の最下位ビット(B0)の状態とが異なる状態であり、前記累算装置の最下位ビット(S0)の状態が1である場合に、値1を生成し、
それ以外のすべての場合に前記回路がゼロ値を生成する、請求項16に記載の装置。 - 前記第1(R2)、第2(R0)、および第3(R1)の記憶装置が、それぞれの最上位ビット位置への直列入力を有するとともに、内容の並列出力も可能なn+2ビットのシフト・レジスタである、請求項17に記載の装置。
- 前記第1の記憶装置(R2)が、最下位ビット位置(R20)からの直列出力を有し、周期的ビット・ローテーションを行うことができる、請求項17に記載の装置。
- モジュラ算術演算を行うことができるようにする手段をさらに含み、前記手段は、
a)前記第2の記憶装置(R0)の前記直列入力を前記累算装置(S)の最下位ビット(S0)に接続する手段と、
b)その内容をその最下位ビット(R30)から開始して順次に1ビットずつ(R3I I=0,1,2,...,n+1)直列出力することができ、n+2ビットを格納することができ、その内容に対して周期的ビット・ローテーションを行うことができる第4の記憶装置(R3)と、
c)直列入力と直列出力とを有し、n+2ビットの値を格納することができる第5の記憶装置(R4)と、
d)その内容をその最下位ビットから開始して順次に1ビットずつ(R5I I=0,1,2,...,n+1)直列出力することができ、n+2ビットを格納することができる第6の記憶装置(R5)と、
e)前記第5の記憶装置からの第1の入力(R4I)と、前記第2の制御入力の状態を生成する前記回路からの第2の入力(KI)とを有し、出力が前記第2の制御入力(C0)に接続された、第1のアービトレーション装置(MX1)と、
f)前記累算装置の最下位ビット(S0)と等しい第1の入力と、前記回路の出力(KI)から受け取る第2の入力と、前記第5の記憶装置(R4)の直列出力(R4I)に接続された第3の入力とを有し、出力が前記第5の記憶装置(R4)の直列入力に接続された、第2のアービトレーション装置(MX2)と、
g)常にゼロ値(「0」)が供給される第1の入力と、前記第5の記憶装置の直列出力(R4I)から受け取る第2の入力とを有し、出力が前記累算装置の直列入力に接続された、第3のアービトレーション装置(MX3)と、
h)前記第6の記憶装置の直列出力(R5I)に接続された第1の入力と、前記第4の記憶装置の直列出力(R3I)に接続された第2の入力とを有し、出力が前記第1の制御入力(C1)に接続された、第4のアービトレーション装置(MX4)と、
i)n+2ビット値の直列加算を行うことができ、前記累算装置の最下位ビット位置(S0)からの第1の入力と、前記第1の記憶装置(R2)の直列出力からの第2の入力とを受け取り、出力が前記第3の記憶装置(R1)の直列入力に接続された加算器とを含む、請求項17、18、および19に記載の装置。 - 前記累算装置がn+2段の加算およびラッチ段から成り、前記累算装置が、各段が第1および第2のフリップフロップ装置と、3個の入力を有する全加算器装置とから成り、第1段目の段からは前記第2のフリップフロップ装置が省かれている装置であって、
a)前記全加算器の第1の入力を第1のフリップフロップ装置の出力に接続する手段と、
b)前記全加算器の第2の入力を後続の加算およびラッチ段の第2のフリップフロップ装置の出力に接続する手段と、
c)前記全加算器の第3の入力を前記アービトレーション装置のそれぞれのビット出力(MUXi 0≦i≦n+1)に接続する手段とを含む、請求項20に記載の装置。 - 前記累算装置の直列入力を介して前記第3のアービトレーション装置(MX3)から出力を(n+1)段目の加算およびラッチ段の加算結果に加算する手段をさらに含み、前記手段は、
a)第1および第2の半加算器装置と第3のフリップフロップ装置と、
b)前記第1のフリップフロップ装置の入力を前記第2の半加算器の和出力に接続する手段と、
c)前記第2のフリップフロップ装置の入力を前記第2の半加算器の桁上げ出力に接続し、前記フリップフロップ装置の出力を、(n+2)段目の加算およびラッチ段の前記全加算器の第2の入力に接続する手段と、
d)前記第2の半加算器の第1の入力を(n+1)段目の加算およびラッチ段の前記全加算器の桁上げ出力に接続し、その第2の入力を前記第1の半加算器の桁上げ出力に接続する手段と、
e)前記第1の半加算器の第1の入力を前記全加算器の和出力に接続し、前記第2の半加算器の第2の入力を前記第3のアービトレーション装置(MX3)の出力に接続する手段と、
f)前記第3のフリップフロップ装置の入力を前記第1の半加算器の和出力に接続し、その出力を(n−1)段目の加算およびラッチ段の前記全加算器の第2の入力に接続する手段と含む、請求項21に記載の装置。 - a)前記第2の記憶装置(R0)の最下位ビットと前記第4のアービトレーション装置(MX4)の出力とをAND論理ゲートの入力に接続する手段と、
b)追加の半加算器と追加のフリップフロップ装置と、
c)前記半加算器の第1の入力を、前記第2段目の加算およびラッチ段の前記全加算器の和出力に接続し、その第2の入力を前記第1段目の加算およびラッチ段の前記全加算器の桁上げ出力に接続する手段と、
d)前記半加算器の和出力を前記追加のフリップフロップ装置の入力に接続する手段と、
e)前記AND論理ゲートの出力と前記フリップフロップ装置の出力とをXORゲートの入力に接続し、前記XORゲートの出力を使用して前記第2の制御入力(C0)の状態を判断する手段とを含み、
前記第2の記憶装置(R0)の最下位ビットと、前記第4のアービトレーション装置(MX4)の出力と、前記第1段目の加算およびラッチ段の前記全加算器の桁上げ出力と、第2段目の加算およびラッチ段の全加算器の和出力とを使用して前記第2の制御入力(C0)の状態を判断する、請求項17および22に記載の装置。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
IL14395101A IL143951A0 (en) | 2001-06-21 | 2001-06-21 | A method and apparatus for carrying out efficiently arithmetic computations in hardware |
PCT/IL2002/000318 WO2003001362A2 (en) | 2001-06-21 | 2002-04-22 | A method and apparatus for carrying out efficiently arithmetic computations in hardware |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2004534266A true JP2004534266A (ja) | 2004-11-11 |
Family
ID=11075541
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003507688A Pending JP2004534266A (ja) | 2001-06-21 | 2002-04-22 | ハードウェアにおいて算術演算を効率的に行う方法および装置 |
Country Status (8)
Country | Link |
---|---|
US (1) | US20040167952A1 (ja) |
EP (1) | EP1421472B1 (ja) |
JP (1) | JP2004534266A (ja) |
AT (1) | ATE364867T1 (ja) |
AU (1) | AU2002256871A1 (ja) |
DE (1) | DE60220682D1 (ja) |
IL (1) | IL143951A0 (ja) |
WO (1) | WO2003001362A2 (ja) |
Families Citing this family (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2004226674A (ja) * | 2003-01-23 | 2004-08-12 | Renesas Technology Corp | 情報処理方法 |
JP4544870B2 (ja) * | 2004-01-26 | 2010-09-15 | 富士通セミコンダクター株式会社 | 演算回路装置 |
US20060140399A1 (en) * | 2004-12-28 | 2006-06-29 | Young David W | Pre-calculation mechanism for signature decryption |
ATE466329T1 (de) * | 2005-10-28 | 2010-05-15 | Telecom Italia Spa | Verfahren zur skalarmultiplikation in gruppen elliptischer kurven über binäre polynomische körper für nebenkanalattacken-beständige kryptosysteme |
JP5027422B2 (ja) * | 2006-02-09 | 2012-09-19 | ルネサスエレクトロニクス株式会社 | 剰余演算処理装置 |
US7805479B2 (en) * | 2006-03-28 | 2010-09-28 | Michael Andrew Moshier | Scalable, faster method and apparatus for montgomery multiplication |
US7912886B2 (en) * | 2006-12-14 | 2011-03-22 | Intel Corporation | Configurable exponent FIFO |
GB2451665B (en) | 2007-08-08 | 2012-09-26 | Cilag Gmbh Int | Injection device |
CA2701855C (en) * | 2007-11-02 | 2016-10-11 | Certicom Corp. | Signed montgomery arithmetic |
JP5097138B2 (ja) * | 2009-01-15 | 2012-12-12 | シャープ株式会社 | モンゴメリ乗算のための演算回路及び暗号回路 |
EP2629195B1 (en) * | 2010-01-28 | 2014-02-19 | Nds Limited | Exponentiation system |
FR2974202B1 (fr) | 2011-04-18 | 2013-04-12 | Inside Secure | Procede de multiplication de montgomery |
FR2974201B1 (fr) * | 2011-04-18 | 2013-04-12 | Inside Secure | Circuit de multiplication de montgomery |
US20130301826A1 (en) * | 2012-05-08 | 2013-11-14 | Intel Corporation | System, method, and program for protecting cryptographic algorithms from side-channel attacks |
US9535656B2 (en) | 2014-03-14 | 2017-01-03 | International Business Machines Corporation | Pipelined modular reduction and division |
KR102132261B1 (ko) | 2014-03-31 | 2020-08-06 | 삼성전자주식회사 | 비교 연산이 필요없이 최종 모듈러 감소를 하는 몽고메리 곱셈 방법 및 곱셈기 |
CN108242994B (zh) | 2016-12-26 | 2021-08-13 | 阿里巴巴集团控股有限公司 | 密钥的处理方法和装置 |
US10880275B2 (en) | 2017-01-20 | 2020-12-29 | Enveil, Inc. | Secure analytics using homomorphic and injective format-preserving encryption |
US10721057B2 (en) | 2017-01-20 | 2020-07-21 | Enveil, Inc. | Dynamic channels in secure queries and analytics |
US11507683B2 (en) | 2017-01-20 | 2022-11-22 | Enveil, Inc. | Query processing with adaptive risk decisioning |
US11196540B2 (en) | 2017-01-20 | 2021-12-07 | Enveil, Inc. | End-to-end secure operations from a natural language expression |
US11196541B2 (en) | 2017-01-20 | 2021-12-07 | Enveil, Inc. | Secure machine learning analytics using homomorphic encryption |
US11777729B2 (en) | 2017-01-20 | 2023-10-03 | Enveil, Inc. | Secure analytics using term generation and homomorphic encryption |
US10902133B2 (en) | 2018-10-25 | 2021-01-26 | Enveil, Inc. | Computational operations in enclave computing environments |
US10817262B2 (en) * | 2018-11-08 | 2020-10-27 | Enveil, Inc. | Reduced and pipelined hardware architecture for Montgomery Modular Multiplication |
CN111475135B (zh) * | 2019-01-23 | 2023-06-16 | 阿里巴巴集团控股有限公司 | 一种乘法器 |
US11508263B2 (en) | 2020-06-24 | 2022-11-22 | Western Digital Technologies, Inc. | Low complexity conversion to Montgomery domain |
US11468797B2 (en) | 2020-06-24 | 2022-10-11 | Western Digital Technologies, Inc. | Low complexity conversion to Montgomery domain |
US11601258B2 (en) | 2020-10-08 | 2023-03-07 | Enveil, Inc. | Selector derived encryption systems and methods |
WO2023043467A1 (en) * | 2021-09-20 | 2023-03-23 | Pqsecure Technologies, Llc | A method and architecture for performing modular addition and multiplication sequences |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6748410B1 (en) * | 1997-05-04 | 2004-06-08 | M-Systems Flash Disk Pioneers, Ltd. | Apparatus and method for modular multiplication and exponentiation based on montgomery multiplication |
JP3542278B2 (ja) * | 1998-06-25 | 2004-07-14 | 株式会社東芝 | モンゴメリ・リダクション装置及び記録媒体 |
JP4955182B2 (ja) * | 2000-05-15 | 2012-06-20 | サンディスク アイエル リミテッド | 整数の計算フィールド範囲の拡張 |
-
2001
- 2001-06-21 IL IL14395101A patent/IL143951A0/xx unknown
-
2002
- 2002-04-22 AU AU2002256871A patent/AU2002256871A1/en not_active Abandoned
- 2002-04-22 AT AT02726404T patent/ATE364867T1/de not_active IP Right Cessation
- 2002-04-22 JP JP2003507688A patent/JP2004534266A/ja active Pending
- 2002-04-22 EP EP02726404A patent/EP1421472B1/en not_active Expired - Lifetime
- 2002-04-22 DE DE60220682T patent/DE60220682D1/de not_active Expired - Lifetime
- 2002-04-22 WO PCT/IL2002/000318 patent/WO2003001362A2/en active IP Right Grant
- 2002-04-22 US US10/481,573 patent/US20040167952A1/en not_active Abandoned
Also Published As
Publication number | Publication date |
---|---|
EP1421472A2 (en) | 2004-05-26 |
AU2002256871A1 (en) | 2003-01-08 |
ATE364867T1 (de) | 2007-07-15 |
EP1421472B1 (en) | 2007-06-13 |
DE60220682D1 (de) | 2007-07-26 |
IL143951A0 (en) | 2003-09-17 |
US20040167952A1 (en) | 2004-08-26 |
WO2003001362A3 (en) | 2004-03-04 |
WO2003001362A2 (en) | 2003-01-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2004534266A (ja) | ハードウェアにおいて算術演算を効率的に行う方法および装置 | |
JP4870932B2 (ja) | 多重精度を支援する拡張型モンゴメリモジュラ掛け算器 | |
JP5866128B2 (ja) | 算術プロセッサ | |
JP3525209B2 (ja) | べき乗剰余演算回路及びべき乗剰余演算システム及びべき乗剰余演算のための演算方法 | |
JP2004501396A (ja) | 整数の計算フィールド範囲の拡張 | |
JP2004326112A (ja) | マルチプルモジュラス選択器、累算器、モンゴメリー掛け算器、マルチプルモジュラス発生方法、部分掛け発生方法、累算方法、掛け算方法、モジュラス選択器、およびブースレコーダ | |
JP4302640B2 (ja) | 被乗数のシフトを用いて乗算を計算するための装置およびその方法、上記装置を実行するためのプログラムコードを格納した記録媒体 | |
Savas et al. | Multiplier architectures for GF (p) and GF (2n) | |
US7240204B1 (en) | Scalable and unified multiplication methods and apparatus | |
JP3726966B2 (ja) | 乗算器及び暗号回路 | |
US6662201B1 (en) | Modular arithmetic apparatus and method having high-speed base conversion function | |
KR20220049212A (ko) | 모듈러 연산을 위한 워드 병렬 연산 방법 | |
KR100670780B1 (ko) | 유한체 GF(2^m)에서의 하이브리드 곱셈 연산 장치및 연산 방법 | |
JP3823107B2 (ja) | 有限体での基底変換方法及び基底変換装置 | |
US20020161810A1 (en) | Method and apparatus for multiplication and/or modular reduction processing | |
JP4223819B2 (ja) | べき乗剰余演算装置及びそのプログラム | |
Monfared et al. | A new multiplicative inverse architecture in normal basis using novel concurrent serial squaring and multiplication | |
KR100946256B1 (ko) | 다정도 캐리 세이브 가산기를 이용한 듀얼필드상의확장성있는 몽고매리 곱셈기 | |
KR20070062901A (ko) | 중국인 나머지 정리(crt)와 캐리 저장 가산 기반의모듈러 곱셈 장치 및 방법 | |
JP4850884B2 (ja) | べき乗剰余演算器 | |
JP3742293B2 (ja) | 剰余演算装置 | |
JP2003216034A (ja) | べき乗剰余演算器 | |
KR100761132B1 (ko) | Sha-1 연산 방법 및 장치 | |
JP3137599B2 (ja) | BのC乗のnを法とした剰余を計算する回路 | |
Okada et al. | Coprocessor over GF (2”) on an FPGA |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20050421 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20081017 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20090313 |