JP2004280036A - 剰余演算装置、剰余演算方法、及びべき乗剰余演算装置 - Google Patents
剰余演算装置、剰余演算方法、及びべき乗剰余演算装置 Download PDFInfo
- Publication number
- JP2004280036A JP2004280036A JP2003142242A JP2003142242A JP2004280036A JP 2004280036 A JP2004280036 A JP 2004280036A JP 2003142242 A JP2003142242 A JP 2003142242A JP 2003142242 A JP2003142242 A JP 2003142242A JP 2004280036 A JP2004280036 A JP 2004280036A
- Authority
- JP
- Japan
- Prior art keywords
- unit
- processing
- remainder
- arithmetic
- calculation
- 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
Abstract
【課題】回路規模あたりの処理性能が最適化されており、tの計算によって余分な遅延が発生しない剰余演算装置。
【解決手段】剰余演算装置14は、積和回路32を具備する複数の処理ユニット31で順次連続的に処理させてパイプライン処理を行い、このパイプライン処理を繰り返し実行する。例えば、N(0)t(2)の実行にあたり、N(1)t(1)とx(0)y(2)が間に合わないから、パイプライン処理とは別のt計算部40でN(1)t(1)+x(0)y(2)を前倒しで計算し、t(2)を前倒しで求める。このt(2)を用いて、N(0)t(2)の実行を行う。処理ユニット31の数が法Nのワード数より少ない場合には、各処理ユニット31で被演算子の連続する複数ワードの処理を均等に行う。
【選択図】 図5
【解決手段】剰余演算装置14は、積和回路32を具備する複数の処理ユニット31で順次連続的に処理させてパイプライン処理を行い、このパイプライン処理を繰り返し実行する。例えば、N(0)t(2)の実行にあたり、N(1)t(1)とx(0)y(2)が間に合わないから、パイプライン処理とは別のt計算部40でN(1)t(1)+x(0)y(2)を前倒しで計算し、t(2)を前倒しで求める。このt(2)を用いて、N(0)t(2)の実行を行う。処理ユニット31の数が法Nのワード数より少ない場合には、各処理ユニット31で被演算子の連続する複数ワードの処理を均等に行う。
【選択図】 図5
Description
【0001】
【発明の属する技術分野】
本発明は、パイプライン処理により大きな整数の演算を高速に計算する剰余演算装置、剰余演算方法、及びべき乗剰余演算装置に関する。
【0002】
【従来の技術】
RSA公開鍵暗号方式で用いられる“べき乗剰余演算”の実装方法として、Montgomeryによって提案されたモンゴメリ乗算と呼ばれる剰余付き乗算を繰り返し実行する方法が知られている(例えば、非特許文献1参照)。
【0003】
このモンゴメリ乗算は、剰余付き乗算を加算と乗算で代替して実行する手法であり、剰余乗算の効率的な実装が可能である。モンゴメリ乗算ではx・y mod Nを計算する代わりにx・y+N・tという演算を実行する。ここで、x,y,N,tは大きな整数である。
【0004】
モンゴメリ乗算の高速実装法の従来方式は、整数をバイナリ表現した下でモンゴメリ乗算を行う方式と、整数をRNS(Residue Number System:剰余系)表現した下でモンゴメリ乗算を行う方式に大きく分けることができる。
【0005】
バイナリ表現の下で行う方式では、x,y,N,tをそれぞれワード単位に分割し(例えば、xをrビットずつ下位からx(0),…,x(m−1)のmワードに分割する。y,N,tについても同様)、その下でワード単位の乗算を複数個の処理ユニットでパイプライン処理することでモンゴメリ乗算を行う。すなわち、x(i)y(j)およびN(i)t(j)の乗算とそれらの総和演算を桁合せや桁上がりを考慮しながらu個のユニットに割り振って実行する。その際、t(j)が演算途中結果に依存して決まる変数であることがモンゴメリ乗算のアルゴリズム上のポイントであり、ここに実装上の工夫が要求される(非特許文献2、非特許文献3、特許文献1参照)。
【0006】
非特許文献2では、x(i)y(j)+N(i)t(j)の演算をユニットiにおいて1クロックで実行する目的で、各ユニットが乗算器を2個有するものを開示している。しかし、t(j)の計算との兼ね合いから、2クロックに1回ずつ待ち状態が発生し、さらに、t(j)の計算のために余分な乗算が発生し、それがパイプライン処理による本計算に遅延を与える(クリティカルパスを長くする)結果となっている。
【0007】
特許文献1では、x(j)y(i+1)+N(j+1)t(i)の演算をユニットiにおいて1クロックで実行する目的で、非特許文献2と同様に各ユニットが乗算器を2個有するものを開示している。特許文献1によれば、非特許文献2のような待ち状態は発生しないアルゴリズムとなっているが、その代わりt(i)の計算用に3個目の乗算器を各ユニットが具備する。このt(i)の計算には、1つのユニットがモンゴメリ乗算で要する全クロック(このクロック数はワード長と同じオーダーを持つ)のうち1クロックしか要しないため、回路規模(乗算器の個数)あたりの処理性能が最適化されていないハードウェア構成となっている。さらに非特許文献2と同様に、t(i)の計算ために余分な乗算が発生し、それがパイプライン処理による本計算に遅延を与える結果となっている。
【0008】
また、非特許文献2、非特許文献3では、モンゴメリ乗算を高速に実行するために、法Nのワード数と同数もしくはそれ以上の処理ユニットを用いて演算を行っている。通常、RSA暗号では法Nのサイズとして1024ビットなどの大きな整数が用いられ、1ワード長rとしては32ビットなどの値を用いる。よって、非特許文献2、非特許文献3を実装する場合には、処理ユニット数も多くなり、それに伴いハードウェア規模も大きくなるという問題がある。現実にはある程度処理効率の低下を許容しても、ハードウェア規模を削減したいという要求も考えられる。つまり、ワード長以下の処理ユニット数でモンゴメリ乗算を行わねばならない。これは1処理ユニットに複数ワードの演算を割り振ることにより可能であるが、各ワード間には後述する桁上がりや累積計算などの依存関係が数多く存在するため、単純には減らした処理ユニット数に比例する以上の効率の低下が起こることが問題となる。
【0009】
整数をRNS表現した下でモンゴメリ乗算を行う方式については、各基底ごとの演算を複数の処理ユニットで並列に行う方式がある(非特許文献4参照)。非特許文献4に記載の方式では、各基底の演算を複数の処理ユニットに分散して処理させるが、基底ごとの演算の独立性が高いため、処理ユニット数を基底数以下に削減した場合でも、それに比例した効率の低下のみしか起こらないという利点を持つ。しかしながら、各処理ユニット内にROMを設けねばならず、回路規模が大きくなるという欠点があった。
【0010】
【特許文献1】
特開平5−324277号公報
【0011】
【非特許文献1】
ピー・エル・モンゴメリー(P. L. Montgomery)著、「モジュラー・マルチプリケーション・ウィズアウト・トライアル・ディビジョン(Modular multiplication without trial division)」Mathematics of Computation、Vol. 44、No. 170、pp. 519−521、April 1985
【0012】
【非特許文献2】
シー・デー・ウォルター(C. D. Walter)著、「アン・オーバービュー・オブ・モンゴメリーズ・マルチプリケーション・テクニック:ハウ・トゥ・メイク・イット・スモーラー・アンド・ファースター(An Overview of Montgomery’s Multiplication Technique: How to make it Smaller and Faster)」Proc. Workshop on Cryptographic Hardware and Embedded Systems、CHES ’99、LNCS、Vol. 1717、pp. 80−93、Springer−Verlag、1999
【0013】
【非特許文献3】
岩村等著、「べき乗剰余に適したモンゴメリ法による剰余乗算法とそれを実現するシストリアックアレー」、電子情報通信学会論文誌A、Vol. J76−A、No. 8、pp. 1214−1223、1993
【0014】
【非特許文献4】
川村等(S. Kawamura, M. Koike, F. Sano and A. Shimbo)著、「コックス・ロウアー・アーキテクチャ・フォオ・ファスト・パラレル・モンゴメリ・マルチプリケーション(Cox−Rower Architecture for Fast Parallel Montgomery Multiplication)」Advances in Cryptology−Eurocrypt 2000、LNCS 1807、pp523−538、2000
【0015】
【発明が解決しようとする課題】
上述したようにモンゴメリ乗算では、演算の途中結果を用いてtを計算しているが、このtの計算はパイプライン処理による本計算に遅延を与えないように実行されることが望ましい。しかしながら、上述した従来の技術では、そのようなアルゴリズムとハードウェア構成が実現されておらず、tの計算のために余分な遅延が生じるという問題が生じていた。
【0016】
非特許文献2では、tの計算のためにパイプライン処理による本計算に2クロックに1回ずつの待ち状態が生じ、また、特許文献1では、全ユニットにt計算用の余分な乗算器を要するために、何れも回路規模あたりの処理性能が最適化されていないアルゴリズムおよびハードウェア構成となっていた。
【0017】
また、モンゴメリ乗算の実装において、バイナリ表現を用いた方式では、Nのワード数と同数もしくはそれ以上の処理ユニットを具備した装置によりモンゴメリ乗算を実施しているが、現実の実装を考えた場合、ワード数と同数程度の処理ユニットを用意するのは難しいと考えられるため、処理速度の低下をある程度許容してもハードウェア規模を削減したいという要求がある。しかし、単純に処理ユニット数を減らしてモンゴメリ乗算を行おうとした場合には、削減した処理ユニット数に比例した以上の効率の低下が起こるという問題がある。
【0018】
これに対してRNS表現を用いた方式では、基底ごとの演算の独立性が高いため、処理ユニット数を基底数以下に減らした場合でもそれに比例した効率の低下のみしか起こらないが、処理ユニットあたりの回路規模が大きくなるという欠点がある。
【0019】
本発明は、上記問題点を鑑みなされたものであって、複数ユニットのパイプライン処理によるモンゴメリ乗算において、回路規模あたりの処理性能が最適化されており、かつ、tの計算によって余分な遅延が発生しない剰余演算装置、剰余演算方法、及びべき乗剰余演算装置を提供することを目的とする。
【0020】
また、本発明の他の目的は、複数ユニットのパイプライン処理によるモンゴメリ乗算において、処理ユニット数をワード数以下に減らした場合でも、減らした処理ユニット数に比例した速度の低下のみしか起こらず、回路規模あたりの処理速度で定義される装置の効率がユニット数によらず一定になり、RSA暗号の処理等に用いられるのに適した剰余演算装置、剰余演算方法、及びべき乗剰余演算装置を提供することである。
【0021】
【課題を解決するための手段】
本発明の一態様による剰余演算装置は、積和回路を有する複数の処理ユニットによるパイプライン処理を所定回実施し剰余を求める演算手段と、あるパイプライン処理の前に、該あるパイプライン処理の一つ前のパイプライン処理においてある処理ユニットの処理結果に対して所定の演算を施し、該あるパイプライン処理の開始時に、該所定の演算の演算結果を該あるパイプライン処理の初段の処理ユニットへ供給する計算手段と、を具備する。
【0022】
本発明の他の態様による剰余演算装置は、積和回路を有し、途中結果に依存した変数を用いてパイプライン処理を行い剰余を求める複数の処理ユニットと、積和回路を有し、前記変数を前記途中結果が求められる前に求める1個の計算部と、を具備する。
【0023】
本発明の他の態様によるべき乗剰余演算装置は、整数a,e,Nに基づいてべき乗剰余ae mod Nを求めるべき乗剰余演算装置において、積和回路を有する複数の処理ユニットによるパイプライン処理を所定回実施し剰余を求める基本演算手段と、あるパイプライン処理の前に、該あるパイプライン処理の一つ前のパイプライン処理においてある処理ユニットの処理結果に対して所定の演算を施し、該あるパイプライン処理の開始時に、該所定の演算の演算結果を該あるパイプライン処理の初段の処理ユニットへ供給する計算手段とを具備する剰余演算部と、前記パイプライン処理を所定回実施した後の前記剰余演算部の演算結果が整数Nより大きいか同じ場合には該演算結果から整数Nを減した値を、また該演算結果が整数Nより小さい場合には該演算結果を、前記べき乗剰余として出力する判定手段と、を具備する。
【0024】
本発明の他の態様によるべき乗剰余演算装置は、整数a,e,Nに基づいてべき乗剰余ae mod Nを求めるべき乗剰余演算装置において、積和回路を含む複数の処理ユニットによるパイプライン処理を所定回実施し剰余を求める基本演算手段と、剰余演算の法サイズと処理ユニット数に応じて前記基本演算手段を制御する制御手段とを具備する剰余演算部と、前記パイプライン処理を所定回実施した後の前記剰余演算部の演算結果が整数Nより大きいか同じ場合には該演算結果から整数Nを減した値を、また該演算結果が整数Nより小さい場合には該演算結果を、前記べき乗剰余として出力する判定手段と、を具備する。
【0025】
【発明の実施の形態】
以下、図面を参照して本発明による剰余演算装置、剰余演算方法、及びべき乗剰余演算装置の実施の形態を説明する。
【0026】
(第1の実施の形態)
図1は本発明の第1の実施の形態に係る“べき乗剰余”演算装置の構成を示す図である。
【0027】
RSA暗号など公開鍵暗号方式の多くでは、その処理過程において“べき乗剰余”演算b=ae mod N(b、a、eは整数)が用いられる。“べき乗剰余”演算b=ae mod Nは、剰余乗算の繰り返しにより実装される。また、剰余乗算の代替計算法としてはモンゴメリ乗算が知られている。モンゴメリ乗算は、整数x,y,N(x<N,y<N)の入力に対して、w=xyR−1 mod N、またはw=xyR−1 mod N+N(すなわちw<2N)を出力するものであり、w=(xy+N[xy(−N−1) mod R])/Rによって演算される。Rはモンゴメリ定数と呼ばれ、R>N、gcd(R,N)=1を満たす任意の整数である。gcdは最大公約数を示す。一般には、Rは上式の剰余算と除算が簡単になるように選ばれるものであり、二進数表現ではRを2の“べき乗”にとることで、剰余算を上位ビットの切り捨て、除算をシフト演算で実現する。
【0028】
モンゴメリ乗算を繰り返し用いて“べき乗剰余”演算を行う方法については、バイナリ法やウィンドウ法などの手法が知られている。ここでは一例として、バイナリ法による“べき乗剰余”演算b=ae mod Nのアルゴリズムを示す。
【0029】
バイナリ法による“べき乗剰余”演算アルゴリズム
gは指数eのビット長、eiはeのi番目のビットの値を表す。ただし、最上位ビットegは1とする。MM(x,y,N)はモンゴメリ乗算(xy+N[xy(−N−1) mod R])/Rを示している。
【0030】
図1は、上記で説明したバイナリ法による“べき乗剰余”演算アルゴリズムを実行する“べき乗剰余”演算装置の機能ブロック構成を示す。
【0031】
入出力部11は、“べき乗剰余”演算装置1の外部、例えばパーソナルコンピュータ本体とのデータの入出力を行うインタフェースであって、外部からa、e、Nを入力し、また外部へそれらの入力に対する演算結果bを出力する。
【0032】
制御部12は、“べき乗剰余”演算装置1の全体の制御を司るものであり、バイナリ法による“べき乗剰余”演算アルゴリズムに基づいて、装置1内の個々の部分を制御する。制御部12は、入出力部11からの入力Nを格納するN用レジスタ21と、入出力部11からの入力Nとこの“べき乗剰余”演算装置1のワード幅rビット(装置固有値)とに基づいて、モンゴメリ定数Rを算出するR算出部22とを具備する。ワード幅r(ビット)はR算出部22に格納される。制御部12は、入出力部11から入力された指数eを格納するe用レジスタ23と、入力された指数eのビット長gを求めて、ビット長gから1減算した値をiの初期値として出力するビット長算出部24と、ビット長算出部24からの初期値iを1づつカウントダウンし、e用レジスタ23に格納されるeを参照し、i番目のビットが1(ei=1)であるか否かを判定するei判定部25とを具備する。
【0033】
制御部12は、後述の予備演算部13からのa’を格納するa’用レジスタ26と、a’を初期値とし、後述の剰余演算装置14で演算されたb’を更新するように格納するb’用レジスタ27と、ei判定部25の結果に基づき、a’用レジスタ26、またはb’用レジスタ27に格納されるa’、またはb’を選択的に剰余演算装置14へ出力するセレクタ28とを具備する。制御部12は、剰余演算装置14で計算されたMM(b’,1,N)の演算結果がb’用レジスタ27に格納されると、演算結果b’とN用レジスタ21に格納されるNとの大小関係を判定し、b’≧Nと判定した際にはb’からNを減算した値を演算結果bとし、b≧Nでないと判定した際にはb’をbとし、入出力部11へ出力するb判定部29を具備する。
【0034】
予備演算部13は、剰余算を行うものであって、入出力部11からのaと、N用レジスタ21からのNと、R算出部22で演算されたモンゴメリ定数Rとによって剰余算a’=aR mod Nを行い、a’を求める。
【0035】
剰余演算装置14は、N用レジスタ21からのNとb’用レジスタ27からのb’とを入力し、積和演算を繰り返し用いて新たなb’(=MM(b’,b’,N))を求める。剰余演算装置14は、ei=1のとき、N用レジスタ21からのNとb’用レジスタ27からのb’とa’用レジスタ26からのa’とを入力し、積和演算を繰り返し用いて新たなb’(=MM(b’,a’,N))を求める。更に、剰余演算装置14は、N用レジスタ21からのNとb’用レジスタ27からのb’とを入力し、積和演算を繰り返し用いて新たなb’(=MM(b’,1,N))を求める。求められた新たなb’は、b’用レジスタ27へ出力され、b’用レジスタ27は更新される。なお、本実施の形態では、モンゴメリ乗算におけるモンゴメリ定数Rに関する演算を下位(n+1)ワード(後述するようにnは法Nのワード数である)の切り捨てとして実現するため、データR自体を剰余演算装置14で取り扱う必要がなく、図1では剰余演算装置14へのRの入力の明示は省略した。剰余演算装置14の内部の詳細な説明は後述する。
【0036】
Ninv演算部15は、N用レジスタ21からのNと、R算出部22と同様にNinv演算部15の内部に備える“べき乗剰余”演算装置1のワード幅r(ビット)(装置固有値)とによって、剰余算−N−1 mod 2r、または−N(0)−1mod 2rを行い、Ninvを求める。
【0037】
本実施の形態の“べき乗剰余”演算装置1は以上のように構成したが、これに限るものではない。例えば、“べき乗剰余”演算装置1の外部でeのビット長を算出して“べき乗剰余”演算装置1へ与えるようにすれば、ビット長算出部24の代わりに−1を行う減算部を持てば良い。また、“べき乗剰余”演算装置1の外部でモンゴメリ定数Rを算出して“べき乗剰余”演算装置1へ与えるようにすれば、R算出部22の代わりにRを格納するR用レジスタを持てば良い。さらに、ウィンドウ法を適用した場合には、別構成の“べき乗剰余”演算装置となることは当然であり、要は、剰余演算装置14へ適切な変数を与えるような構成であれば、いずれの構成であっても良い。
【0038】
次に、本実施の形態の剰余演算装置14について詳細に説明する。モンゴメリ乗算を行う剰余演算装置14の機能ブロックの構成について説明する前に、幾つかの補足説明を行う。
【0039】
まず、整数の基数表現について説明する。整数xは、基数を2rとした場合、次式のように表現できる。
【0040】
x=x(0)+x(1)・2r+x(2)・22r+ … +x(m−1)・2( m−1 ) r
mは1ワードをrビットとした場合のxのワード長であり、x(i)がi番目のワードであり、x(0)を最下位ワード、x(m−1)を最上位ワードとしている。つまり、整数xは、(x(0),x(1),x(2),…,x(m−1))として扱うことができる。なお、整数y,N,wなどの他の整数も同様にして扱うことができる。以下で説明する剰余演算装置14の基本演算ビット幅は、この基数表現による1ワードのビット幅rに一致する。
【0041】
次に、モンゴメリ定数は、R≧4Nを満たすものを採用する。入力x(<2N),y(<2N)に対するモンゴメリ乗算の出力がw(<2N)となる。よって、モンゴメリ乗算を繰り返し実行する際に、得られた演算結果wをそのまま次のモンゴメリ乗算の入力データx,yとして用いることが可能になる。本実施の形態におけるモンゴメリ乗算の変数に対する条件は以下のとおりである。
【0042】
法N:nワード(ワード幅はrビット)、gcd(R,N)=1より奇数
モンゴメリ定数:R=2(n+1)r (r≧2)
入力データ:x(<2N),y(<2N)
出力データ:w<2N
先で説明したモンゴメリ乗算w=(xy+N[xy(−N−1) mod R])/Rは、t=xy(−N−1) mod Rとおくことにより、モンゴメリ乗算w=(xy+Nt)/Rを実行すると表現できる。基数表現に基づくモンゴメリ乗算は、次のアルゴリズムで演算される。
【0043】
モンゴメリ乗算アルゴリズム
w=0
for j=0,…,n
w=w+xy(j)
t(j)=w(0)Ninv mod 2r
w=(w+Nt(j))/2r
next j
Ninvは、次式によって事前に計算される値である。
【0044】
Ninv=−N−1 mod 2r=−N(0)−1 mod 2r (1)
上記のモンゴメリ乗算アルゴリズムは、図2のような単純な積算と加算の繰り返し処理を行うこととなる。つまり、ループjでは、xy(j)、Nt(j)を求めて、ループj−1までに求まった全てのxy(k)、Nt(k)(k=0,…j−1)の総和を求める処理を行って(図示していないが、2rで除す)いる。なお、xy(j)、Nt(j)の組が昇順に左へシフトしているのは、基数表現によるためである。
【0045】
ところで、上記モンゴメリ乗算アルゴリズムをハードウェアで並列実装するにあたっては、さらにワード単位の乗算に分割して、各単位ごとに演算し実行することとなる。この分割実行するモンゴメリ乗算アルゴリズムは、分割数をuとすると、図3のような処理となる。このとき、各分割単位(図3の各セル)で演算した結果、桁上がり(キャリー:図3の矢印)が生じるため、同じ行(jが同じもの)の各単位の乗算は同時に処理することができない。つまり、下位の単位から、上位の単位へ順次演算する必要が生じる。
【0046】
そこで、剰余演算装置14では、u個の処理単位ユニット(以下、単にユニットと称し、ユニット0〜ユニットu−1と書く)を用意し、下位の単位から上位の単位へ順次ユニット間をシフトしながら処理を行う。これを、ここではパイプライン処理と呼ぶ。このパイプライン処理によるモンゴメリ乗算アルゴリズムの処理は、図4のような処理となり、各パイプライン処理内では、遅延なく順次演算可能となる。
【0047】
なお、各パイプライン処理内の最上位の桁上がりは、次パイプライン処理の最終段に影響を与えるが、次パイプライン処理の最終段は、桁上がり時の次タイミングで行うものであるから、タイミング上の問題は生じない。
【0048】
しかし、各パイプライン処理間では、前のパイプライン処理で演算された演算結果の一部を用いてt(j)を得るが、そのt(j)を得るために必要な所定演算(後述)が間に合わないため、遅延が生じる。
【0049】
そこで、本実施の形態の剰余演算装置14は、t(j)を前倒しで求める処理を別に設けるようにし、パイプライン間での遅延を無くなるようにした。
【0050】
図5は、この前倒し処理を設けた本実施の形態の剰余演算装置14の機能ブロックを示す。
【0051】
剰余演算装置14は、それぞれが1個の積和回路32を有するu個のパイプライン処理単位ユニット31からなる基本演算部30と、1個の積和回路41を有する1個のt計算部40と、u−1番目のユニット31で生じた桁上がりを処理するキャリー部50とから構成される。このように構成された剰余演算装置14は、b’、a’/b’、Nを入力し、新たなb’を求めて出力する。または、b’、Nを入力し、新たなb’を求めて出力する。なお、特に図示しないが、u個のパイプライン処理単位ユニット31には、適宜RAM、ROMを個別に具備してもよいし、基本演算部30で一括して具備してもよい。また、特に図示しないが、t計算部40は、RAM、ROMを基本演算部30と共用してもよいし、基本演算部30とは別に具備してもよい。また、後述するが、キャリー部50は、パイプライン処理単位ユニット31を代わりに設けて、代用しても良い。
【0052】
r、n、uの具体的な値としては、例えば鍵長1024ビットのRSA処理を演算ビット幅32の回路で実行する場合、本実施の形態によればr=32、n=32、u(=n+1)=33となる。
【0053】
次に、各ユニット31及びt計算部40の構成を説明する前に、本実施の形態で適用のモンゴメリ乗算アルゴリズムについて説明する。
【0054】
本実施の形態では、ユニット数uとnの関係がu=n+1の場合を説明する。このu(=n+1)は、nに対して最大のパフォーマンスを実現する最小のユニット数である。なおt計算部40のアルゴリズム上、u≧2とする。
【0055】
第1の実施の形態で適用のモンゴメリ乗算アルゴリズム
ユニットiの処理
上記において、C||M=<右辺>という表記は、右辺の演算結果のビット長がr+r’である場合に、右辺演算結果の下位rビットをMとし、上位r’ビットをCとすることを表す。すなわち、Mはその演算を行っている桁の総和を、Cは桁上がり(キャリー)を意味する。上記アルゴリズムでは、キャリーの最大ビット長はrであり、上位rビットをCとする。また、L(A)はAの下位rビットを表す。
【0056】
n=3、u(=n+1)=4の場合について、第1の実施の形態で適用のモンゴメリ乗算アルゴリズムによるパイプライン処理の流れの具体例を図6に示す。
同図は、ワード単位の乗算がどのユニットのどのクロックで実行されるかを示している。また、実線の矢印は計算された総和(M(x(i)y(j))、またはM(N(i)t(j)))をどのユニットに入力するかを示し、点線の矢印はキャリー(C(x(i)y(j))、またはC(N(i)t(j)))をどのユニットに入力するかを示している。図6にはt計算部での処理も合わせて示す。
【0057】
以下、第1の実施の形態で適用のモンゴメリ乗算アルゴリズムについて詳しく説明する。
【0058】
まず、ユニットiの処理では、ステップ1のC(x(i)y(j))、M(x(i)y(j))をクロックi+2j時に計算し、ステップ2のC(N(i)t(j))、M(N(i)t(j))をクロックi+2j+1時に計算する。その際、ステップ1の入力データは、C(x(i−1)y(j))が1クロック前にユニットi−1で計算され、M(N(i+1)t(j−1))が同クロック時にユニットi+1で計算される。ステップ2については、C(N(i−1)t(j))が1クロック前にユニットi−1で計算され、M(x(i)y(j))が1クロック前にユニットiで計算される。ステップ2では、t(j)も演算過程の途中結果に依存して決まるデータであり、その演算処理がt計算部の処理に従って次のように行われる。
【0059】
t計算部の処理では、クロック2j−1でステップ1のv(j)を計算し、クロック2jでステップ2のt(j)を計算する。このような2段階の処理を行う理由は次の通りである。t(j)を用いた乗算がパイプライン処理で初めて実行されるのは、クロック2j+1のユニット0においてである(図6参照)。これに間に合うように、(a)1クロック前のクロック2jでt(j)の計算が完了すること、かつ、(b)1クロック内の遅延(クリティカルパス)をパイプライン処理による本計算の最長パス以下である乗算器1個+加算器1個に抑えること、を考える。その際、演算途中結果に対するt(j)の依存性を次のように考慮しなければならない。
【0060】
前述の第1の実施の形態で適用のモンゴメリ乗算アルゴリズムによれば、t(j)はw(0)から計算される。w(0)は中間結果wの最下位ワードであり、t(j)の計算に用いるw(0)は次式で与えられる。
【0061】
w(0)=L([z(0)+ … +z(j−1)+x(0)y(j)]/2jr)
なお、z(h)=[x(0)y(h)+N(0)t(h)]2hr+ … +[x(h’)y(h)+N(h’)t(h)]2(h+h ’ )r
ここで、h=0,…,j−1、h’=j−hである。例としてn=3の場合を図7に示す。例えば、t(2)の計算に用いる上記w(0)は、図上の太線で囲った各乗算の桁合せと桁上がりを考慮した総和で与えられる。すなわちt(j)を計算するには、それ以前に上式に含まれる乗算とそれらの総和演算が実行されている必要がある。
【0062】
上記の依存性によれば、t(j)の計算に必要な乗算の内、パイプライン処理の最も遅いクロックで実行される演算はN(1)t(j−1)とx(0)y(j)である(図6参照)。これらはそれぞれユニット1とユニット0で演算されるが、そのタイミングがクロック2jであるため、t計算部40で利用しようとした場合は、上記の条件(a)、(b)を満たすことができない。
【0063】
この問題を解決するため、本実施の形態によるt計算部の処理では、この二つの乗算をt計算部40で前倒し計算する。その際、前倒し計算をステップ1としてステップ2の1クロック前に実行することで、条件(a)、(b)を同時に満たすことを可能にする。N(1)t(j−1)とx(0)y(j)以外にt(j)の計算で必要となる乗算はクロック2j−1までに全て計算済みであり、それらはC(N(0)t(j−1))およびM(x(1)y(j−1))としてそれぞれユニット0とユニット1のクロック2j−1に得られる。よって、クロック2jにそれら演算結果をユニット0とユニット1から受け取ることで、ステップ2を問題なく実行することが可能である。
【0064】
この第1の実施の形態ではユニット数uをu=n+1としている。よって最上位のユニットnに対してはキャリーC(x(n)y(j))とC(N(n)t(j))を渡すべきユニットが存在せず、それらキャリーの処理を行う必要がある。それを上記キャリー部の処理において行う。まず、ステップ1をクロックn+2j+1で実行し、1クロック前に計算されたC(x(n)y(j))をユニットnから受け取ってM(x(n+1)y(j))とする。次に、ステップ2をクロックn+2j+2で実行し、1クロック前に計算されたC(N(n)t(j))をユニットnから受け取りM(x(n+1)y(j))との加算を行ってM(N(n+1)t(j))を得る。このM(N(n+1)t(j))は同クロック中にユニットnに入力され、ユニットiの処理におけるステップ1の入力データとして用いられる。
【0065】
第1の実施の形態で適用のモンゴメリ乗算アルゴリズムの実行により、モンゴメリ乗算の演算結果w(<2N)として、w(i)=M(N(i+1)t(n))(i=0,…,n)を得る。
【0066】
パイプライン処理では、第1のユニットの処理が終わればそれ以外のユニットの処理が終わっていなくても次の処理を開始することができる。本実施の形態では、一つのユニットがモンゴメリ乗算の実行に要するクロック数をパイプライン周期と呼ぶ。よって、“べき乗剰余”演算の処理時間はこのパイプライン周期に比例して決まる。第1の実施の形態に適用のモンゴメリ乗算アルゴリズムによるパイプライン周期は2(n+1)+εである。ここでεはnと比較して十分小さい値であり、第1の実施の形態の場合、ε=2である。
【0067】
以下、上記で説明したアルゴリズムを適用した剰余演算装置14の構成及び動作について詳細に説明する。
【0068】
図8は、各ユニットi(31)の構成及びその処理動作を示す。
【0069】
本実施の形態の各ユニットi(31)は、クロックに応じて2種類の処理動作が存在するため、それぞれを図8の(a)と(b)とに分けて示す。点線はそのパスがそのクロックでは選択されていないことを表す。各ユニットiは3つのレジスタR1、R2、R3、セレクタSEL、乗算器34、加算器35からなる。
【0070】
図8の(a)は、クロックi+2j時の処理動作を示す。これはユニットiの処理のステップ1に対応する。ユニットiには、y(j)とC(x(i−1)y(j))がユニットi−1から、M(N(i+1)t(j−1))がユニットi+1から入力される。x(i)は各ユニットが有するレジスタやRAMに分散して保存しておく方式でもよいし、x(i)(i=0,…n)を装置全体で一括して保存しておく方式でもよい。クロックi+2jのユニットiでは、x(i)y(j)+C(x(i−1)y(j))+M(N(i+1)t(j−1))を演算し、下位rビットをM(x(i)y(j))としてレジスタR1に保存し、残り上位をC(x(i)y(j))としてレジスタR2に保存する。さらにレジスタR3にy(j)を保存する。ユニットiからは、1クロック前のクロックi+2j−1にレジスタR2に保存されたC(N(i)t(j−1))とR3に保存されたt(j−1)が出力され、ユニットi+1に入力される。
【0071】
図8の(b)は、クロックi+2j+1時の処理動作を示す。これはユニットiの処理のステップ2に対応する。ユニットiにはt(j)とC(N(i−1)t(j))がユニットi−1から入力される。N(i)はx(i)と同様に各ユニットが有するレジスタやRAMに分散して保存しておく方式でもよいし、N(i)(i=0,…,n)を装置全体で一括して保存しておく方式でもよい。クロックi+2j+1のユニットiでは、N(i)t(j)+C(N(i−1)t(j))+M(x(i)y(j))を演算する。その際、M(x(i)y(j))はクロックi+2jにレジスタR1に保存された値である。そして、下位rビットをM(N(i)t(j))としてユニットi−1へ入力し、残り上位をC(N(i)t(j))としてレジスタR2に保存する。レジスタR3にはt(j)を保存する。ユニットiからの出力は、積和結果のM(N(i)t(j))と、クロックi+2jにレジスタR2に保存されたC(x(i)y(j))およびR3に保存されたy(j)であり、ユニットi−1、またはユニットi+1へ入力される。
【0072】
y(j)とt(j)は1クロック毎に交互に使用されるため、図8の(a)、(b)にはレジスタR3を共有する構成を示したが、y(j)とt(j)それぞれに対してレジスタと配線を設ける方式でもよい。また、図8の(a)、(b)のように乗算器からの出力を全て加算器へ入力する構成ではなく、加算器への入力は下位rビットのみとし、残りの上位をC’(x(i)y(j))(下段の処理動作ではC’(N(i)t(j))として新たに設けたレジスタR2’に保存し、それをユニットi+1の加算器へ入力する構成を採用してもよい。この場合、加算器への入力が1本増えるものの、加算器のビット幅を小さくすることが可能である。
【0073】
次に、t計算部40の構成と処理動作を図9を参照して説明する。同図にはt計算部40と基本演算部30との接続も合わせて示す。t計算部40は3つのレジスタRt1、Rt2、Rt3、3つの乗算器42、43、46、2つの加算器44、45からなる。先ず、t計算部40へは、クロック2j−1でx(0),N(1),y(j)が入力される。x(0)とN(1)は必ずしもt計算部用に新たに保有する必要はなく、上述のユニット用に保有されたデータを共用することも可能である。またy(i)(i=0,…,n)は、x(i)やN(i)と同様に各ユニットが有するレジスタやRAMに分散して保存する方式でもよいし、装置全体で一括して保存する方式でもよい。
【0074】
以上の入力データを用いて、クロック2j−1のt計算部ではv(j)=L(N(1)t(j−1)+x(0)y(j))を計算し、レジスタRt1に保存する。ここで、t(j−1)はクロック2j−2でレジスタRt2に保存された値である。次に、クロック2jではt(j)=NinvL(v(j)+C(N(0)t(j−1))+M(x(1)y(j−1)))を計算し、レジスタRt2に保存する。ここで、C(N(0)t(j−1))はクロック2j−1にユニット0のレジスタR2に保存された値であり、M(x(1)y(j−1))はクロック2j−1にユニット1のレジスタR1に保存された値である。
【0075】
Ninvは、前記した式(1)に従って、Ninv演算部15で事前に計算され、レジスタ、またはRAMに保存されている値である。t計算部40でクロック2jにt(j)が計算されると、続くクロック2j+1でt(j)がユニット0に入力され、ユニットiの処理に使用される。なお、各ユニットではy(j)とt(j)が1クロック毎に交互に使用されるため、図9にはy(j)とt(j)をセレクタで切り替えて交互にユニット0(31)に入力する構成を示したが、y(j)とt(j)を独立に入力する構成でもよい。
【0076】
最後に、キャリー部の処理の構成と処理動作を図10を参照して説明する。
【0077】
キャリー部50は、1個の加算器51、1個のレジスタRC、1個のセレクタSELから構成される。図10の(a)に示すように、クロックn+2j+1で、ユニットu−1からのC(x(n)y(j))をレジスタRCへ書き込み、図10の(b)に示すように、クロックn+2j+2で、レジスタRの値M(x(n+1)y(j))にユニットu−1からのC(N(n)t(j))を加算し、M(N(n+1)t(j))をユニットu−1へ供給する。
【0078】
キャリー部50は、基本演算部30の各ユニットと比較して小さな回路規模であり、演算ビット幅も各ユニット31のrより小さくでき、その処理動作もユニットiの処理に従って定まる単純な処理(ユニットiの処理の一部)である。ここでは、u個のユニットとは別にキャリー部50を設けたが、これに代え、最上位のユニットu−1に組み込む方式でもよい。また、ユニット数を1つ増やしてu=n+2とし、最上位のユニットn+1においてキャリー部の処理を行う方式を採用してもよい。
【0079】
以上のように構成され、動作する本実施の形態によるハードウェア構成のクリティカルパスについて、図8を参照して説明する。
【0080】
クリティカルパスは、ユニットiのクロックi+2j+1において乗算器と加算器を経た演算結果M(N(i)t(j))がユニットi−1へ入力され、それがユニットi−1で同クロック(i−1)+2j+2に加算器を経てレジスタR1へ保存されるまでのパスとなる。すなわち、本実施の形態によるモンゴメリ乗算のクリティカルパスは、(乗算器1個+加算器2個)である。一方、t計算による最長パスは(乗算器1個+加算器1個)であり、本実施の形態によるモンゴメリ乗算では、t計算による遅延は発生することなく、クリティカルパスが基本演算部30における本計算で決まる。
【0081】
本実施の形態のハードウェア規模を乗算器の個数で見積ると、基本演算部30が乗算器(1×u)個、t計算部40が乗算器3個である。なお、乗算器は、加算器、レジスタ、セレクタ等と比較してその回路規模が格段に大きいため、このような見積りは妥当といえる。
【0082】
本実施の形態の剰余演算装置14は、回路規模あたりの処理性能では、従来の技術で説明した非特許文献2(ウォルター等)による技術と比較し、“べき乗剰余”演算の単独処理において約2倍の効率化が可能である。さらに、クリティカルパスも乗算器1個分短いため(加算器よりも乗算器による遅延の影響が大きい故に)、より高い動作周波数での処理が可能になる。
【0083】
同様に、本実施の形態の剰余演算装置14は、回路規模あたりの処理性能では、従来の技術で説明した特許文献1による技術と比較し、“べき乗剰余”演算の単独処理において約3倍の効率化が可能になる。また、クリティカルパスについても、乗算器が1個分短いため、より高い動作周波数での処理が可能である。
【0084】
以上説明してきたように、第1の実施の形態によれば、パイプライン周期の全クロックの間、各ユニットの全ての乗算器が待ち状態を作ることなく毎クロック動作しており、回路規模(基本演算部の乗算器の個数)あたりの処理性能が最適化されていることがわかる。装置全体でのクリティカルパスがパイプライン処理による本計算で決まり、t計算による余分な遅延が生じないアルゴリズムおよびハードウェア構成が実現されている。
【0085】
以下、本発明による“べき乗剰余”演算装置の他の実施の形態を説明する。他の実施の形態の説明において第1の実施の形態と同一部分は同一参照数字を付してその詳細な説明は省略する。
【0086】
(第2の実施の形態)
第2の実施の形態のブロック図は第1の実施の形態のブロック図と同一であるので、図示は省略する。
【0087】
第2の実施の形態では、短い法Nによるモンゴメリ乗算を第1の実施の形態の構成を用いて行う場合の処理を説明する。すなわちユニット数uがu>n+1(u≧2)である。
【0088】
この場合、下位n+2個のユニットをモンゴメリ乗算で使用し、第1の実施の形態で適用のモンゴメリ乗算アルゴリズムのキャリー部の処理をユニットn+1で行うことで、第1の実施の形態に記載のモンゴメリ乗算を実行することが可能である。その際、パイプライン周期も第1の実施の形態と同じ2(n+1)+εとなる。
【0089】
(第3の実施の形態)
第3の実施の形態では、長い法N、すなわちユニット数uがu<n+1(u≧2)の場合のモンゴメリ乗算を第1の実施の形態の図5と同等の構成を用いて行う場合の処理を説明する。なお、第3の実施の形態の各ユニットi(31)、t計算部40、及びキャリー部50の内部構成は、第1の実施の形態のそれらと若干構成を異にしているが、図5上では、差がないため、同一参照数字のままで説明を進める。
【0090】
第3の実施の形態で適用のモンゴメリ乗算アルゴリズム
ユニットiの処理
t計算部の処理
キャリー部の処理
上記アルゴリズムにおいて、pは(n+1)/u以上の最小の整数、D=u(p−1)+2である。
【0091】
第3の実施の形態に適用のモンゴメリ乗算アルゴリズムによるパイプライン処理の流れを、n=5、u=3の場合のj=1までの処理について、図11に示す。第3の実施の形態によるu<n+1の場合、ユニットiの処理において、kに関する繰り返し処理が必要となり、それに伴って待ち状態が挿入される。ステップ2のM(N(I)t(j))を同クロックでユニットi−1へ渡すことができないため、それらを一旦レジスタ、またはRAMへ保存し、必要に応じて読み出しを行う。t計算部の処理とキャリー部の処理でも、ユニットiの処理に同期して待ち状態が発生する。なお、第3の実施の形態に適用のモンゴメリ乗算アルゴリズムによるパイプライン周期はD(n+1)である。
【0092】
図12は、第3の実施の形態によるユニットi(31)のハードウェア構成を示す。第1の実施の形態の図8からの変更点は、レジスタR1がp個のレジスタR1(k)(k=0,…,p−1)に置き換えられている点である。クロックI+Djでは、(a)に示すように、ユニットi+1のレジスタR1(k)からM(N(I+1)t(j−1))を読み出して演算処理を行う。これに伴い、クロックI+Dj+1では、(b)に示すように、M(N(I)t(j))をレジスタR1(k)へ保存する。
【0093】
p個のレジスタR1(k)はRAMで構成してもよい。さらに、該レジスタ、またはRAMをユニット毎に設けるのではなく、基本演算部30で一括して設ける方式でもよい。なお、kに関する繰り返し処理を実行するために、最下位ユニット0は出力M(N(I)t(j))(I=i+uk,i=0,k=1,…,p−1)を最上位ユニットu−1へ入力し、最上位ユニットu−1は出力y(j)、t(j)、C(x(I)y(j))、C(N(I)t(j))(I=i+uk,i=u−1,k=0,…,p−2)を最下位ユニット0へ入力する。
【0094】
t計算部40のハードウェア構成を図13に示す。第1の実施の形態の図9からの変更は、v(j)の計算が1個の乗算器46で構成される点と、基本演算部30からの入力として、ユニット1のレジスタR1(0)からM(N(1)t(j−1))がt計算部40の加算器45へ入力される点である。また、kに関する繰り返し処理を実行するために、最下位ユニットから最上位ユニットへ、最上位ユニットから最下位ユニットへ変数を渡すための配線が付加される。なお、t(j)の計算タイミングであるクロックDjよりも2クロック以上前にM(N(1)t(j−1))の計算は終了しているため、予めM(N(1)t(j−1))をクロックDj以前にt計算部のレジスタ、またはRAMへ取り込む方式を採用してもよい。
【0095】
キャリー部50の処理について説明する。第1の実施の形態によるキャリー部の処理との違いは、クロックn+Dj+2のステップ2で加算結果M(N(n+1)t(j))を図10のレジスタRへ書き込む点である。この書き込まれたデータは、クロックn+D(j+1)で最上位ユニットu−1へ供給される。uとnの関係について補足説明する。uがn+1の約数である場合、キャリー部の処理用の回路が必要であり、第1の実施の形態と同様にu個のユニットとは別に回路を設ける方式でもよいし、最上位のユニットu−1の内部に組み込む方式を採用してもよい。uがn+1の約数でない場合は、キャリー部の処理に使用できるユニットが存在するため、第2の実施の形態と同様にユニットn+1−u(p−1)でキャリー部の処理を行うことで、第3の実施の形態で適用のモンゴメリ乗算アルゴリズムを実行することが可能である。
【0096】
以上のように構成すれば、第1の実施の形態に記載のモンゴメリ乗算をユニット数u(<n+1)の構成においても実行することができる。
【0097】
(第4の実施の形態)
第4の実施の形態では、第1の実施の形態によるモンゴメリ乗算の変形例を説明する。ユニット数は第1の実施の形態と同様にu=n+1であるが、u≧3である点が異なっている。なお、第4の実施の形態の各ユニットi、t計算部及びキャリー部の内部構成は、第1の実施の形態のそれらと若干構成を異にしているが、特に図5上では差がないため、同一符号(番号)のままで説明を進める。
【0098】
第4の実施の形態で適用のモンゴメリ乗算アルゴリズム
ユニットiの処理
t計算部の処理
キャリー部の処理
第4の実施の形態で適用のモンゴメリ乗算アルゴリズムによるパイプライン処理の流れを、n=3、u(=n+1)=4の場合について図14に示す。第1の実施の形態で適用のモンゴメリ乗算アルゴリズムとの違いは、以下で説明するように総和M(x(i)y(j))、M(N(i)t(j))の処理の仕方である。
【0099】
第4の実施の形態によるユニットi(31)のハードウェア構成を図15に示す。第1の実施の形態の図8からの変更点は、M(x(i)y(j))およびM(N(i)t(j))を次クロックで下位ユニットへ入力するために、ユニットiのレジスタR1がユニットi−1の加算器へ接続される点である。
【0100】
また、ユニットiの処理のステップ2がi,jに応じて次のように条件分岐する。ユニット0のj=0,…,nおよび全ユニットのj=nでは、図16におけるセレクタの下のポートが選択され、t計算部40ではレジスタR1の値(M(x(1)y(j−1)))も加算される。それ以外の処理では、セレクタの上のポートが選択され、t計算部40ではレジスタR1からの加算は行われない。
【0101】
同様に、キャリー部の処理においても、j=nか否かでステップ2が上記のように条件分岐する。
【0102】
次に、t計算部40のハードウェア構成を図16に示す。第1の実施の形態の図9からの変更点は、基本演算部30から加算器45への入力がユニット0、ユニット1、ユニット2からの3つの信号になった点である。
【0103】
キャリー部50については、第1の実施の形態による図10と同様のハードウェア構成によって、上記キャリー部の処理を実行することが可能である。
【0104】
第4の実施の形態によるクリティカルパスは、ユニットiのレジスタR1の接続が変更されたことに伴い、第1の実施の形態よりも加算器が1個減り、(乗算器1個+加算器1個)である。ただし、ユニットiの加算器やt計算部の下側の加算器への入力パスが1本増えるため、クリティカルパスの差は加算器の内部構成に依存すると考えられる。また、ハードウェア規模は第1の実施の形態と同様に、基本演算部が乗算器(2×u)個、t計算部が乗算器2個である。
【0105】
(第5の実施の形態)
第5の実施の形態では、短い法Nによるモンゴメリ乗算を第4の実施の形態の構成を用いて行う場合の処理を説明する。すなわちユニット数uがu>n+1(u≧3)である。
【0106】
この場合、下位n+2個のユニットをモンゴメリ乗算で使用し、第4の実施の形態で適用のモンゴメリ乗算アルゴリズムのキャリー部の処理をユニットn+1で行うことで、第4の実施の形態に記載のモンゴメリ乗算を実行することが可能である。その際、パイプライン周期も第4の実施の形態と同じ2(n+1)+εとなる。
【0107】
(第6の実施の形態)
第6の実施の形態では、長い法Nによるモンゴメリ乗算を第4の実施の形態の構成を用いて行う場合の処理を説明する。すなわちユニット数uがu<n+1(u≧3)である。
【0108】
第6の実施の形態で適用のモンゴメリ乗算アルゴリズム
ユニットiの処理
t計算部の処理
キャリー部の処理
第3の実施の形態と同様に、pは(n+1)/u以上の最小の整数、D=u(p−1)+2である。
【0109】
第6の実施の形態で適用のモンゴメリ乗算アルゴリズムによるパイプライン処理の流れを、n=5、u=3の場合のj=1までの処理について図17に示す。第6の実施の形態では第3の実施の形態と同様に、ユニットiの処理においてkに関する繰り返し処理が必要となり、それに伴って待ち状態が挿入される。t計算部の処理とキャリー部の処理でも、ユニットiの処理に同期して待ち状態が発生する。第3の実施の形態と同様に、第6の実施の形態で適用のモンゴメリ乗算アルゴリズムのパイプライン周期はD(n+1)である。
【0110】
第6の実施の形態によるユニットi(31)のハードウェア構成では、第4の実施の形態の図15におけるレジスタR1を2p個用意し、クロックI+DjでM(x(I)y(j))をレジスタR1(1,k)へ、クロックI+Dj+1でM(N(I)t(j))をレジスタR1(2,k)へ書き込む。書き込まれた値はそれぞれクロックI+D(j+1)−1とクロックI+D(j+1)でユニットi−1へ入力され、ユニットiの処理で使用される。レジスタR1(1,k)、R1(2,k)(k=0,…,p−1)はRAMで構成してもよい。さらに、該レジスタ、またはRAMをユニット毎に設けるのではなく、基本演算部30で一括して設ける方式でもよい。なお、kに関する繰り返し処理を実行するために、最下位ユニット0は出力M(x(I)y(j))、M(N(I)t(j))(I=i+uk,i=0,k=1,…,p−1)を最上位ユニットu−1へ入力し、最上位ユニットu−1は出力y(j)、t(j)、C(x(I)y(j))、C(N(I)t(j))(I=i+uk,i=u−1,k=0,…,p−2)を最下位ユニット0へ入力する。
【0111】
第6の実施の形態によるt計算部40のハードウェア構成は、第3の実施の形態の図13とほぼ同じ構成となる。第3の実施の形態との違いは、基本演算部からの入力として、ユニット1のレジスタR1(1,0)からM(x(1)y(j−1))が、同じくユニット1のレジスタR1(2,0)からM(N(1)t(j−1))がt計算部40の加算器へ入力される点である。第3の実施の形態と同様に、予めM(x(1)y(j−1))とM(N(1)t(j−1))をクロックDj以前にt計算部40のレジスタ、またはRAMへ取り込む方式を採用してもよい。
【0112】
キャリー部の処理については、第1の実施の形態の図10におけるレジスタRを2個用意し(レジスタR(1)とR(2))、クロックn+Dj+1でステップ1を実行してM(x(n+1)y(j))をR(1)に書き込み、クロックn+Dj+2でステップ2を実行してM(N(n+1)t(j))をR(2)に書き込む。これら書き込まれたデータは、クロックn+D(j+1)にレジスタR(1)の値が最上位ユニットu−1へ供給され、クロックn+D(j+1)+1にレジスタR(2)の値が同じくユニットu−1へ供給される。なお、uがn+1の約数である場合とそうでない場合の取り扱いについては、第3の実施の形態と同様の方式を採用することが可能である。
【0113】
以上のように構成すれば、第4の実施の形態に記載のモンゴメリ乗算をユニット数u<n+1の構成において実行することができる。
【0114】
以上詳細に説明してきた第1乃至第6の実施の形態によれば、各条件に応じ回路規模あたりの処理性能が最適化され、tの計算によって余分な遅延が発生しない、モンゴメリ乗算のアルゴリズムとハードウェア構成を提供することができる。
【0115】
第1乃至第6の実施の形態は、回路規模あたりの処理性能として従来技術と比較し、“べき乗剰余”演算の単独処理において約2倍から3倍を達成できる。また、クリティカルパスが乗算器1個分短くなっているため、従来技術よりも高い動作周波数での処理が可能である。
【0116】
上述した実施の形態はt計算部40を基本演算部30から独立させ、演算過程の途中結果に依存するt(j)を前倒しで求めているので、パイプライン処理の効率を高めているが、被演算子の連続した数ワードずつを各処理ユニットの負荷が均等化するように剰余演算の法サイズと処理ユニット数に応じて下位ユニットから割り振ることによりパイプライン処理の効率を高める実施の形態を以下に説明する。
【0117】
(第7の実施の形態)
第7の実施の形態の全体構成は図1に示した第1の実施の形態の構成と同じである。
【0118】
第7の実施の形態の剰余演算装置140の詳細を図18に示す。剰余演算装置140は、入力x、y、N、Ninvに対してw=MM(x,y,N)を出力する。高速処理を実現するため、u個の処理ユニット(以下、単にユニットと称し、ユニット0,ユニット1,…,ユニットu−1と書く)によるパイプライン処理を行う。第7の実施の形態では、ユニット数uがu=n+2の場合を扱い、1ユニットが1ワードの演算を受け持つものとする。後述するように、1ユニットが1ワードの演算を受け持つ場合には、法Nのワード数nに対してユニット数uはu=n+2で十分である。
【0119】
剰余演算装置140は図18に示すように剰余演算制御部130と基本演算部131とを具備し、基本演算部131はu個のユニット141が互いに接続された構成となっている。剰余演算制御部130は入力に応じて基本演算部131を制御する役割を持つ。制御の内容については後に説明する。
【0120】
各ユニット141は、図19に示すような積和回路となっており、ユニットi−1のA、B,C,Dに対してユニットiのa、b、c、dがそれぞれ接続されている。ただし、ユニット0はそれより下位のユニットが存在しないので、図20の構成とする。また、最上位のユニットであるユニットu−1はそれより上位のユニットが存在しないので図21の構成とする。図20、図21のユニットはともに図19のユニットに含まれる構成となっており、図19のユニットを用いて構成可能である。
【0121】
各ユニット141は、1つの2入力乗算器143と1つの4入力加算器144、rビットの演算値を格納できるレジスタR1,R2,R3,R4,R5,R6,R7、2ビットの演算値を格納できるレジスタr1,r2、複数の演算値を格納できるRAM1,RAM2もしくはそれに代わるものから構成されている。図19、図20、図21に示したユニットの構成は、第7の実施の形態を実現するためには冗長であるが、同じ構成により第8の実施の形態、第9の実施の形態も実現できるため、この構成を用いるものとする。
【0122】
ここで、剰余演算装置140の動作について説明する。まず、簡単のために法Nのサイズn=2について、モンゴメリ乗算w=(xy+Nt)/Rの演算について順を追って示す。図22はxyを計算する手順を示したものであり、xy(0)、xy(1)、xy(2)の総和、つまり縦方向に加えたものがxyとなることを示している。その際、x(i)y(j)には、x(i−1)y(j)からの桁上がりが加えられていることに注意する。同様にして、Ntの計算手順を示したのが図23であり、Nt(0)、Nt(1)、Nt(2)の総和がNtとなる。ここで、前述した変数に対する条件より、xy(0)、xy(1)は高々3r+1ビット、xy(2)は2r+2ビットとなる。また、Ntについては、Nt(0)、Nt(1)、Nt(2)はそれぞれ高々3rビットとなる。更に、xy+Ntは図24のように5r+1ビットとなり、その下位3rビットはモンゴメリ乗算の性質より必ず0なり、上位2r+1ビットがwとなる。一般には、ワード数nの場合には下記のようになる。
【0123】
xy(j):0≦j<n の場合には、高々(n+1)r+1ビット
j=nの場合には、高々nr+2ビット
Nt(j):高々(n+1)rビット
xy+Nt:高々(2n+1)r+1ビット、ただし下位(n+1)rビットは0、上位nr+1ビットはw
これらより、被演算子および演算結果の最大長は(n+1)r+1ビットで、1ワードをrビットとすると、n+2ワードの演算を扱うことができるユニットを備えれば十分である。第1乃至第6の実施の形態では、n+2ワード目は高々1ビットの演算しか扱わないのでこれをキャリー部で扱っていたため、u=n+1がnに対して最大のパフォーマンスを実現する最小のユニット数であるとしていたが、第7乃至第10の実施の形態では第1乃至第6の実施の形態でキャリー部が行っていた処理も1つのユニットが行うものとし、u=n+2がnに対して最大のパフォーマンスを実現する最小のユニット数であるとする。(第1乃至第6の実施の形態と同様にn+2ワード目をキャリー部で扱うとしても良い。)
剰余演算装置140の目的は、図24に示した計算を効率的に行うことである。図24における1ワードを1ユニットで行うことを考え、各ユニットへの処理の割り振りを考えたものが図25である。図25では、列がユニット、行が演算ステップを表しており、図24におけるx(i−1)y(j)からx(i)y(j)への桁上がりとN(i−1)t(j)からN(i)t(j)への桁上がりを点線の矢印で、図24における縦方向の累積計算を実線の矢印で示してある。ここで、ステップは必ずしもクロックに対応しているものではない。ユニットiではx(i)y(j)、N(i)t(j)をj=0,1,…,nについて順次計算する。x(i)y(j)がx(i−1)y(j)より後のステップで処理されているのは、x(i−1)y(j)の計算により得られた桁上がり値をx(i)y(j)に加える必要があるためである。これはN(i)t(j)についてでも同様である。また、ユニット0ではx(i)y(j)、N(i)t(j)に加えてt(j)を計算する。t(j)はモンゴメリ乗算アルゴリズムで示したようにt(j)=w(0)Ninv mod 2rにより計算される。これらをまとめるとユニットiの処理は下記のように書ける。
【0124】
第7の実施の形態におけるユニットiの処理アルゴリズム
ここで、ユニットiの処理ステップについて詳しく述べる。まず、ユニットiではx(i)y(j)を計算する。その際、下位ワードからの桁上がりC(x(i−1)y(j))とこれまでの累積値M(N(i+1)t(j−1))が加えられる。この結果の下位rビットがM(x(i)y(j))であり、それより上位部分がC(x(i)y(j))となる。
【0125】
次のステップでは、N(i)t(j)を計算する。その際、下位ワードからの桁上がりC(N(i−1)t(j))とこれまでの累積値M(x(i)y(j))が加えられる。この結果の下位rビットがM(N(i)t(j))、それより上位がC(N(i)t(j))となる。以後、x(i)y(j+1)、N(i)t(j+1)、x(i)y(j+2)とj=nまで順次計算を行う。
【0126】
また、ユニット0においては上記のx(i)y(j)とN(i)t(j)の計算の間に、これまでの累積値M(x(i)y(j))を用いてt(j)を計算する。このt(j)の値は、ユニット0のみで計算すればよく、後のステップではユニット0からユニット1へ、ユニット1からユニット2へというように順次伝達されていく。
【0127】
以上、処理の概略を述べたが、図18の剰余演算装置140では下記のような処理が行われる。まず、剰余演算制御部130に入力されたx、Nはそれぞれワードごとに区切られ、x(i)、N(i)がユニットiのRAM1に格納され、演算の適切なタイミングで各ユニットのレジスタR1やR2に読み出される。また、yについても同様にしてワードごとに区切られ、ユニット0のRAM1のみに格納される。y(j)はステップの進行に伴い、ユニット0からユニット1へ、ユニット1からユニット2へと、順次ユニットuまで各ユニットの配線A,aを通して送られる。ユニット0のRAM1にはNinvも格納されている。
【0128】
先に述べたように、ユニットiの動作は大きく分けて2つの動作に分けることができる。1つはx(i)y(j)を計算する式(31)のステップであり、もう一つはN(i)t(j)を計算する式(33)のステップである。
【0129】
式(31)のx(i)y(j)を計算するステップでは、準備としてレジスタR1にはRAM1よりx(i)が読み出されている。また、先に述べたようにy(j)はユニットi−1より配線aを通じてレジスタR2に格納されている。その他に、下位ワードから桁上がり値C(x(i−1)y(j))がレジスタR7、r2(R7にある桁上がり値とr2にある桁上がり値を加えたものがC(x(i−1)y(j))である)に、累積値M(N(i+1)t(j−1))がレジスタR5に格納されている。
【0130】
これらの下で、ユニットiでは式(31)のx(i)y(j)の演算を行う。処理後、累積値M(x(i)y(j))はレジスタR3に格納され、桁上がりC(x(i)y(j))はユニットi+1のレジスタR7、r2に分割して格納され、それぞれ次のステップで使用される。ここで、C(x(i)y(j))は、乗算器で生じた桁上がりと加算器で生じた桁上がりを加えたものであり、乗算器の桁上がりをR7に、加算器の桁上がりをr2に格納する。
【0131】
次に式(33)のN(i)t(j)を計算するステップでは、準備としてレジスタR1にはRAM1よりN(i)が読み出されている。また、先に述べたようにt(j)はユニットi−1より配線aを通じてレジスタR2に格納されている。その他に、下位ワードから桁上がり値C(N(i−1)t(j))がレジスタR7、r2(R7にある桁上がり値とr2にある桁上がり値を加えたものがC(N(i−1)t(j))である)に、累積値M(x(i)y(j))がレジスタR5に格納されている。
【0132】
これらの下で、ユニットiでは式(33)のN(i)t(j)の演算を行う。処理後、累積値M(N(i)t(j))はユニットi−1のレジスタR5に格納され、桁上がり値C(N(i)t(j))はユニットi+1のレジスタR7、r2に分割して格納され、それぞれ次のステップで使用される。C(x(i)y(j))と同様に、C(N(i)t(j))は乗算器で生じた桁上がりと加算器で生じた桁上がりを加えたものであり、乗算器の桁上がりをR7に、加算器の桁上がりをr2に格納する。
【0133】
また、ユニット0では、x(i)y(j)、N(i)t(j)の演算に加えて、式(32)のt(j)の計算も行う。これは、累積値M(x(0)y(j))をレジスタR2に、RAM1からNinvを読み出しレジスタR1に格納しておき、これを用いてt(j)=M(x(0)y(j))Ninv mod 2rと計算される。ここで計算されたt(j)は、各ユニットの配線A、aを通して順次上位ユニットへ送られ、それぞれのユニットで使用される。
【0134】
このようにしてj=0,1,…,nと演算を行い、j=nの処理が終了した時点でのユニット0からユニットu−2のレジスタR5に保存されているM(N(i)t(j))のn+1ワードが、モンゴメリ乗算の結果w(0),w(1),…,w(n)として出力される。
【0135】
第7の実施の形態は、ユニット数uをu<n+2と減らした場合にも、減らしたユニット数に比例した効率の低下のみしか起こらない“べき乗剰余”演算装置を提案するための基本形態となっており、u<n+2の場合の処理方法については第9の実施の形態で示すものとする。
【0136】
(第8の実施の形態)
第8の実施の形態では、ユニット数u>n+2の場合のモンゴメリ乗算を第7の実施の形態の図18と同じ構成を用いて場合の処理を説明する。この場合、第2の実施の形態、第5の実施の形態と同様に、下位n+2個のユニットをモンゴメリ乗算で使用し、n+2を超えるユニットは演算には用いないとすれば、第7の実施の形態に記載の方法によりモンゴメリ乗算を実行することが可能である。
【0137】
(第9の実施の形態)
第9の実施の形態では、ユニット数uが法Nのワード数よりも少ない、つまりu<n+2の場合のモンゴメリ乗算を第7の実施の形態、第8の実施の形態の図18と同じ構成を用いて行う場合の処理を説明する。この場合、ワード数よりユニット数が少なくなるため、1ユニットで複数ワードの演算を実施しなければならない。この各ユニットへの演算の割り振りは、剰余演算制御部130が入力された法Nのワード数nと剰余演算装置140のユニット数uにより各ユニットへの付加が均等化するようにに連続したsワードを割り振り、それに基づき剰余演算装置140の動作を制御する。剰余演算制御部130によるユニットへの演算の割り振りは、各ユニットの付加が均等であれば良く具体的には定める必要はないが、その一例としては、
s=[(n+2)/u]以上の最小の整数
とし、ユニット0からsワードずつをn+2ワードに達するまで順次各ユニットに割り振るような方法が考えられる。例えば、ユニット0からユニット3の4つのユニット(u=4)で8ワード(n=8)の演算を行うのであれば、ユニット0には1から3ワード目を、ユニット1には4から6ワード目を、ユニット2には7から9ワード目を、最後にユニット3には10ワード目を割り振るなどである。他の割り振り方としては、ユニット0、ユニット1にはそれぞれ3ワードずつを、ユニット2、ユニット3にはそれぞれ2ワードを割り振るとしても良い。
【0138】
まず、具体的な処理方法の説明に入る前に、簡単のため第7の実施の形態の説明で用いた例について、ユニット数u=2で実行する場合の処理について説明する。第7の実施の形態では図25のように演算を処理していたが、それに対応したものが図26である。図26では、図25と同じく列がユニット、行がステップを表しており、桁上がりを点線の矢印で、累積値を実践の矢印で表している。例では、n=2、u=2であるから、ユニット0ではx(0),y(1),N(0),N(1)、ユニット1ではx(2),N(2)と桁上がりワードというように、各ユニットが連続した2ワードの演算を受け持っている。ここで、注意しなければならないのは、第7の実施の形態と異なり第9の実施の形態では各ユニット内で連続したsワード(この例では2ワード)の演算を行うため、桁上がりと累積値の処理について桁合わせをする必要があることである。
【0139】
第9の実施の形態におけるユニットiの処理を一般的に記述すると下記のように書ける。
【0140】
第9の実施の形態におけるユニットiの処理アルゴリズム
つまり、ユニットiでは、j=0,1,…,nのそれぞれについて、x(si+k)y(j)をk=0,1,…,s−1について順次処理し、N(si+k)t(j)についてもk=0,1,…,s−1について順次処理する。ユニットiでx(si+s−1)y(j)の処理が終わった後、ユニットi+1でx(s(i+1))y(j)の処理を、同じくユニットiでN(si+s−1)t(j)の処理が終わった後、ユニットi+1でN(s(i+1))t(j)の処理を開始する。これに加えてユニット0では、式(35)のt(j)の計算も行う。以上により、u≧n+2の場合と同じ処理を、より少ないユニット数で実現することができる。
【0141】
ここで、上記の処理の剰余演算装置140での実装方法について述べる。ユニット内の要素の役割は基本的に第7の実施の形態と同じである。ただし、第7の実施の形態と異なり第9の実施の形態では各ユニット内で連続したsワードの演算を行うため、桁上がりCと累積値Mについて桁合わせをする必要があり、その点が大きく異なる。これは、計算されたC、Mの値をRAMもしくはそれに代わるものに保存しておき、適切なタイミングで演算部に供給することにより実現される。このタイミングを制御するのも剰余演算制御部130である。
【0142】
まず、剰余演算制御部130に入力されたx、Nは、それぞれワードごとに区切られて、ユニットiのRAM1にx(si+k)、N(si+k)(k=0,1,…,s−1)が保存され、演算の適切なタイミングでそれぞれのユニットのレジスタR1やR2に提供される。また、yについてもワードごとに区切られ、ユニット0のRAM1に格納される。y(j)はステップの進行に伴い、ユニット0からユニット1へ、ユニット1からユニット2へ、と順次ユニットuまで各ユニットの配線A、aを通して送られる。ユニット0には外部で計算されたNinvも格納されているものとする。
【0143】
ユニットiの動作は大きく分けて2つの動作に分けることができる。1つはx(si+k)y(j)(k=0,1,…,s−1)を計算する式(34)のステップであり、もう一つはN(si+k)t(j)(k=0,1,…,s−1)を計算する式(36)のステップである。
【0144】
式(34)のx(si+k)y(j)(k=0,1,…,s−1)を計算するステップでは、必要な際にRAM1よりレジスタR1にx(si+k)(k=0,1,…,s−1)が順次読み出される。また、先に述べたようにy(j)はユニットi−1より配線aを通じてレジスタR2に格納されているものとする。
【0145】
まず、x(si)y(j)、つまりk=0について計算する。式(34)のC(x(si−1)y(j))は下位ワードからの桁上がり値であり、ユニットi−1からレジスタR7、r2(R7にある桁上がり値とr2にある桁上がり値を加えたものがC(x(si−1)y(j))である)に送られている。また、M(N(si+1)t(j−1))は上位ワードからの累積値であり、これはRAM2から読み出されレジスタR4に格納されている。この下で、式(34)を計算し、その際の累積値M(x(si)y(j))はレジスタR3に格納されRAM2へ、桁上がりC(x(si)y(j))はレジスタR6、r1に格納され、x(si+1)y(j)を計算する際に使用される。ここで、C(x(si)y(j))は、乗算器で生じた桁上がりと加算器で生じた桁上がりを加えたものであり、乗算器の桁上がりをR6に、加算器の桁上がりをr1に格納する。
【0146】
以後、同様にしてx(si+1)y(j),x(si+2)y(j),…,x(si+s−1)y(j)の計算を行うが、x(si+s−1)y(j)では累積値M(N(s(i+1))t(j−1))が加えられなければならないが、これは後にN(si+k)t(j)のステップで述べるように既にレジスタR5に格納されており、これを加える。また、桁上がり値C(x(si+s−1)y(j))はユニットi+1のx(s(i+1))y(j)を計算する際に利用されるので、配線B、bを通してユニットi+1のレジスタR7、r2に送られる。
【0147】
次に、式(36)のN(si+k)t(j)(k=0,1,…,s−1)を計算するステップでは、必要な際にRAM1よりレジスタR1にN(si+k)(k=0,1,…,s−1)が順次読み出される。また、先に述べたようにt(j)はユニットi−1より配線aを通じてレジスタR2に格納されているものとする。
【0148】
まず、N(si)t(j)、つまりk=0について計算する。式(36)のC(N(i−1)t(j))は下位ワードからの桁上がり値であり、ユニットi−1からレジスタR7、r2(R7にある桁上がり値とr2にある桁上がり値を加えたものがC(N(i−1)t(j))である)に送られている。また、累積値M(x(si)y(j))はRAM2から読み出されレジスタR4に格納されている。この下で、式(36)を計算し、その際の累積値M(N(si)t(j))はユニットi−1のレジスタR5に格納され、桁上がり値C(N(si)t(j))はレジスタR6、r1に格納され、N(si+1)t(j)を計算する際に使用される。ここで、C(N(si)t(j))は、乗算器で生じた桁上がりと加算器で生じた桁上がりを加えたものであり、乗算器の桁上がりをR6に、加算器の桁上がりをr1に格納する。
【0149】
以後、同様にしてN(si+1)t(j),N(si+2)t(j),…,N(si+s−1)t(j)の計算を行うが、k=0の場合とは異なり、累積値M(N(si+k)t(j))はユニットiのレジスタR3に格納されRAM2へ送られる。また、N(si+s−1)t(j)では桁上がり値C(N(si+s−1)t(j))はユニットi+1のN(s(i+1))t(j)を計算する際に利用されるので、配線B、bを通してユニットi+1のレジスタR7、r2に送られる。
【0150】
また、上記x(si+k)y(j)、N(si+k)t(j)の計算以外に、ユニット0では式(35)のt(j)の計算も行う。これは、累積値M(x(0)y(j))をレジスタR2に、RAM1からNinvを読み出しレジスタR1に格納しておき、これを用いて計算される。ここで計算されたt(j)は、配線A、aを通して順次上位ユニットへ送られる。
【0151】
以後、u個のユニットそれぞれでj=nまでx(si+k)y(j)(k=0,1,…,s−1)とN(si+k)t(j)(k=0,1,…,s−1)の計算を繰り返すことによりモンゴメリ乗算を行う。
【0152】
第7の実施の形態ではu=n+2の場合について、第8の実施の形態ではu>n+2の場合について、第9の実施の形態ではu<n+2の場合について述べた。第7の実施の形態は、第9の実施の形態においてs=1としたものと等しい。よって、図18、図19、図20、図21に示した構成で、剰余演算制御部130による制御を変えることで第7の実施の形態、第8の実施の形態、第9の実施の形態の演算を実行できる剰余演算装置を構成でき、同じ剰余演算装置を用いて様々な法サイズの演算を効率良く実行できることが分かる。また、同じ法サイズの演算を、演算に用いるユニット数によらず効率よく処理できるため、スケーラビリティに優れた方式となっていることが分かる。
【0153】
このような構成にすることで、ユニット数とべき乗剰余算の相対処理速度の関係は、図27に示したようになる。図27は、法Nのサイズを512ビット、1024ビット、2048ビットとした際の、剰余演算装置の処理ユニット数とべき乗剰余算の相対処理速度を示したものである。u≦n+2の場合にはユニット数に比例した効率が得られることが分かり、回路規模あたりの処理速度で定義できる装置の効率がユニット数によらず一定になっていることが分かる。
【0154】
また、回路規模については、各ユニットは乗算器1個、加算器1個とレジスタなどから構成されるため、非特許文献4に比べて十分小さくすることが可能である。
【0155】
(第10の実施の形態)
次に、被演算子の連続した数ワードずつを各処理ユニットの負荷が均等化するように剰余演算の法サイズと処理ユニット数に応じて下位ユニットから割り振ることによりパイプライン処理の効率を高めた第7乃至第9の実施の形態において、第1乃至第6の実施の形態のt計算の前倒し処理を組み合わせる実施の形態を説明する。一例として、第9の実施の形態においてt計算部を独立させたものを第10の実施の形態として図29を参照して説明する。
【0156】
第10の実施の形態では、ユニット数uが法Nのワード数よりも少ない、つまりu<n+2の場合について述べる。第10の実施の形態では図29のように演算を処理する。例では、n=2、u=2であるから、ユニット0ではx(0),x(1),N(0),N(1)、ユニット1ではx(2),N(2)と桁上がりワードというように、各ユニットが連続した2ワードの演算を受け持ち、x(i)y(j)を計算するステップとN(i)t(j)を計算するステップを処理する。また、t計算部はユニット0からの入力M(x(i)y(j))に基づきt(j)の計算を行う。この際、各ユニットが受け持つワード数sが2ワード以上であれば、t計算部における前倒し計算は必要ない。sが1の場合には、第1の実施の形態と同様に前倒し計算をする必要がある。
【0157】
図26に示した第9の実施の形態においては、t計算をユニット0において計算していたが(ステップ3、8、…)、図29に示す第10の実施の形態では、ステップ2、6、…で処理ユニットでの処理と並列にt計算部でt計算も行っているので、さらなる高速化が達成される。図示していないが、第7、第8、第9の実施の形態も図29に示すように変形することができる。
【0158】
このように、第7乃至第10の実施の形態では、剰余演算装置のユニット数が法Nのワード数より少ない場合でも、そのユニット数において最適な処理性能が得られ、またモンゴメリ乗算の制御を変えるのみでユニットごとのモジュール性が高く柔軟性の高い方式となっているため、ユニットをモジュールとして用いて様々な法サイズに対応可能な柔軟な構成を持つ剰余演算装置が構成可能である。
【0159】
(第11の実施の形態)
第11の実施の形態では、1つの剰余演算装置で同時に複数の演算を行う方式について述べる。第7、第8、第9の実施の形態では、1つの剰余演算装置で1つの剰余乗算を行う場合について説明したが、図19、図20、図21に示したユニットの構成はモジュール性の高い構成となっており、1つの基本演算部131が持つu個のユニットを連続したユニットの集合に分けて使用することにより複数のモンゴメリ乗算を並行して行うことが可能である。この際の制御は、剰余演算制御部130が行う。
【0160】
例として、8個のユニットを具備する基本演算部131を持つ剰余演算装置140について考える。このとき、例えば法Nとして30ワードの値についてxyR−1 mod Nが入力された際には、1ユニットが4ワードを担当することになる。
【0161】
ここで、この剰余演算装置に、30ワードの法Nによるモンゴメリ乗算xyR−1 mod Nと、14ワードの法N’によるモンゴメリ乗算abR’−1 mod N’が入力された場合を考える。その場合、一つの実装方式としてはxyR−1 mod Nの計算が終わった後にabR’−1 mod N’を計算する方式が考えられる。
【0162】
第11の実施の形態では、これを1つの剰余演算装置を2つの部分に分けて利用することで行う。例えば、ユニット0からユニット3でxyR−1 mod Nの計算を行い、ユニット4からユニット7でabR’−1 mod N’の計算を行う。つまり、ユニット0からユニット3では各ユニットがそれぞれ8ワードの演算を、ユニット4からユニット7では各ユニットがそれぞれ4ワードの演算を受け持つこととなる。これを、図示したのが図28であり、この場合ユニット3からユニット4への情報の伝達は発生しない。
【0163】
この複数のモンゴメリ乗算を行う際の演算の制御も剰余演算制御部130が行い、ユニット0からユニット3と、ユニット4からユニット7を独立に動作させることで、複数のモンゴメリ乗算を並列に実行することができる。
【0164】
本発明は上述した実施の形態に限定されず、種々変形して実施可能である。例えば、本願発明は上記各実施の形態に限定されるものではなく、実施段階ではその趣旨を逸脱しない範囲で種々に変形することが可能である。また、各実施の形態は可能な限り適宜組み合わせて実施してもよく、その場合組合わせた効果が得られる。さらに、上記実施の形態には種々の段階の発明が含まれており、開示される複数の構成要件における適宜な組合わせにより種々の発明が抽出され得る。例えば、実施の形態に示される全構成要件から幾つかの構成要件が削除されても、発明が解決しようとする課題の欄で述べた課題の少なくとも1つが解決でき、発明の効果の欄で述べられている効果の少なくとも1つが得られる場合には、この構成要件が削除された構成が発明として抽出され得る。
【0165】
また、本発明は、コンピュータに所定の手段を実行させるための、コンピュータを所定の手段として機能させるための、あるいはコンピュータに所定の機能を実現させるためのプログラムを記録したコンピュータ読取り可能な記録媒体としても実施することもできる。
【0166】
【発明の効果】
以上説明したように本発明によれば、下記のような作用効果を奏する剰余演算装置、剰余演算方法、及びべき乗剰余演算装置を提供することができる。
【0167】
複数ユニットのパイプライン処理によるモンゴメリ乗算において、回路規模あたりの処理性能が最適化されており、かつ、tの計算によって余分な遅延が発生しない。
【0168】
クリティカルパスの短縮により、高い動作周波数での処理が可能である。
【0169】
整数のバイナリ表現の下で複数処理ユニットのパイプライン処理でモンゴメリ乗算を行う場合に、処理ユニット数をワード数以下に減らした場合でも、減らした処理ユニット数に比例した速度の低下のみしか起こらず、回路規模あたりの処理速度で定義される装置の効率が最適化されるため、RSA暗号の処理等に用いられるのに適する。
【図面の簡単な説明】
【図1】本発明の第1の実施の形態に係る“べき乗剰余”演算装置1の機能ブロックを示す図。
【図2】モンゴメリ乗算アルゴリズムの処理を示す図。
【図3】図2をワード単位に分割した場合の処理を示す図。
【図4】図3をパイプラインで扱う場合の処理を示す図。
【図5】第1の実施の形態に係る剰余演算装置14の機能ブロックを示す図。
【図6】第1の実施の形態に係るパイプライン処理の流れを示す図。
【図7】モンゴメリ乗算における変数tの演算途中結果依存性を示す図。
【図8】第1の実施の形態に係る処理ユニット31の構成及び処理動作を示す図。
【図9】第1の実施の形態に係るt計算部40の構成及び処理動作を示す図。
【図10】第1の実施の形態に係るキャリー部50の構成及び処理動作を示す図。
【図11】第3の実施の形態に係るパイプライン処理の流れを示す図。
【図12】第3の実施の形態に係る処理ユニット31の構成を示す図。
【図13】第3の実施の形態に係るt計算部の構成を示す図。
【図14】第4の実施の形態に係るパイプライン処理の流れを示す図。
【図15】第4の実施の形態に係る処理ユニット31の構成を示す図。
【図16】第4の実施の形態に係るt計算部40の構成を示す図。
【図17】第6の実施の形態に係るパイプライン処理の流れを示す図。
【図18】本発明の第7の実施の形態に係る剰余演算装置の構成を示す図。
【図19】第7の実施の形態に係る処理ユニット141の構成を示す図。
【図20】第7の実施の形態に係る最下位の処理ユニット141の構成を示す図。
【図21】第7の実施の形態に係る最上位の処理ユニット141の構成を示す図。
【図22】第7の実施の形態に係るモンゴメリ乗算における変数xと変数yの乗算手順を示す図。
【図23】第7の実施の形態に係るモンゴメリ乗算における変数Nと変数tの乗算手順を示す図。
【図24】第7の実施の形態に係るモンゴメリ乗算におけるxy+Ntの計算手順を示す図。
【図25】第7の実施の形態に係るxy+Ntの計算手順を示す図。
【図26】本発明の第9の実施の形態に係るxy+Ntの計算手順を示す図。
【図27】第9の実施の形態における処理ユニット数と法サイズによる相対処理速度の比較を示す図。
【図28】本発明の第11の実施の形態に係る剰余乗算装置を示す図。
【図29】本発明の第10の実施の形態に係るxy+Ntの計算手順を示す図。
【符号の説明】
1…べき乗剰余演算装置、11…入出力部、12…制御部、13…剰余演算部、14…剰余演算装置、15…Ninv演算部、21…N用レジスタ、22…R算出部、23…e用レジスタ、24…ビット長算出部、25…ei判定部、26…a’用レジスタ、27…b’用レジスタ、28…セレクタ、29…b判定部、30…基本演算部、31…パイプライン処理単位ユニット、32…積和回路、40…t計算部、41…積和回路、50…キャリー部、
【発明の属する技術分野】
本発明は、パイプライン処理により大きな整数の演算を高速に計算する剰余演算装置、剰余演算方法、及びべき乗剰余演算装置に関する。
【0002】
【従来の技術】
RSA公開鍵暗号方式で用いられる“べき乗剰余演算”の実装方法として、Montgomeryによって提案されたモンゴメリ乗算と呼ばれる剰余付き乗算を繰り返し実行する方法が知られている(例えば、非特許文献1参照)。
【0003】
このモンゴメリ乗算は、剰余付き乗算を加算と乗算で代替して実行する手法であり、剰余乗算の効率的な実装が可能である。モンゴメリ乗算ではx・y mod Nを計算する代わりにx・y+N・tという演算を実行する。ここで、x,y,N,tは大きな整数である。
【0004】
モンゴメリ乗算の高速実装法の従来方式は、整数をバイナリ表現した下でモンゴメリ乗算を行う方式と、整数をRNS(Residue Number System:剰余系)表現した下でモンゴメリ乗算を行う方式に大きく分けることができる。
【0005】
バイナリ表現の下で行う方式では、x,y,N,tをそれぞれワード単位に分割し(例えば、xをrビットずつ下位からx(0),…,x(m−1)のmワードに分割する。y,N,tについても同様)、その下でワード単位の乗算を複数個の処理ユニットでパイプライン処理することでモンゴメリ乗算を行う。すなわち、x(i)y(j)およびN(i)t(j)の乗算とそれらの総和演算を桁合せや桁上がりを考慮しながらu個のユニットに割り振って実行する。その際、t(j)が演算途中結果に依存して決まる変数であることがモンゴメリ乗算のアルゴリズム上のポイントであり、ここに実装上の工夫が要求される(非特許文献2、非特許文献3、特許文献1参照)。
【0006】
非特許文献2では、x(i)y(j)+N(i)t(j)の演算をユニットiにおいて1クロックで実行する目的で、各ユニットが乗算器を2個有するものを開示している。しかし、t(j)の計算との兼ね合いから、2クロックに1回ずつ待ち状態が発生し、さらに、t(j)の計算のために余分な乗算が発生し、それがパイプライン処理による本計算に遅延を与える(クリティカルパスを長くする)結果となっている。
【0007】
特許文献1では、x(j)y(i+1)+N(j+1)t(i)の演算をユニットiにおいて1クロックで実行する目的で、非特許文献2と同様に各ユニットが乗算器を2個有するものを開示している。特許文献1によれば、非特許文献2のような待ち状態は発生しないアルゴリズムとなっているが、その代わりt(i)の計算用に3個目の乗算器を各ユニットが具備する。このt(i)の計算には、1つのユニットがモンゴメリ乗算で要する全クロック(このクロック数はワード長と同じオーダーを持つ)のうち1クロックしか要しないため、回路規模(乗算器の個数)あたりの処理性能が最適化されていないハードウェア構成となっている。さらに非特許文献2と同様に、t(i)の計算ために余分な乗算が発生し、それがパイプライン処理による本計算に遅延を与える結果となっている。
【0008】
また、非特許文献2、非特許文献3では、モンゴメリ乗算を高速に実行するために、法Nのワード数と同数もしくはそれ以上の処理ユニットを用いて演算を行っている。通常、RSA暗号では法Nのサイズとして1024ビットなどの大きな整数が用いられ、1ワード長rとしては32ビットなどの値を用いる。よって、非特許文献2、非特許文献3を実装する場合には、処理ユニット数も多くなり、それに伴いハードウェア規模も大きくなるという問題がある。現実にはある程度処理効率の低下を許容しても、ハードウェア規模を削減したいという要求も考えられる。つまり、ワード長以下の処理ユニット数でモンゴメリ乗算を行わねばならない。これは1処理ユニットに複数ワードの演算を割り振ることにより可能であるが、各ワード間には後述する桁上がりや累積計算などの依存関係が数多く存在するため、単純には減らした処理ユニット数に比例する以上の効率の低下が起こることが問題となる。
【0009】
整数をRNS表現した下でモンゴメリ乗算を行う方式については、各基底ごとの演算を複数の処理ユニットで並列に行う方式がある(非特許文献4参照)。非特許文献4に記載の方式では、各基底の演算を複数の処理ユニットに分散して処理させるが、基底ごとの演算の独立性が高いため、処理ユニット数を基底数以下に削減した場合でも、それに比例した効率の低下のみしか起こらないという利点を持つ。しかしながら、各処理ユニット内にROMを設けねばならず、回路規模が大きくなるという欠点があった。
【0010】
【特許文献1】
特開平5−324277号公報
【0011】
【非特許文献1】
ピー・エル・モンゴメリー(P. L. Montgomery)著、「モジュラー・マルチプリケーション・ウィズアウト・トライアル・ディビジョン(Modular multiplication without trial division)」Mathematics of Computation、Vol. 44、No. 170、pp. 519−521、April 1985
【0012】
【非特許文献2】
シー・デー・ウォルター(C. D. Walter)著、「アン・オーバービュー・オブ・モンゴメリーズ・マルチプリケーション・テクニック:ハウ・トゥ・メイク・イット・スモーラー・アンド・ファースター(An Overview of Montgomery’s Multiplication Technique: How to make it Smaller and Faster)」Proc. Workshop on Cryptographic Hardware and Embedded Systems、CHES ’99、LNCS、Vol. 1717、pp. 80−93、Springer−Verlag、1999
【0013】
【非特許文献3】
岩村等著、「べき乗剰余に適したモンゴメリ法による剰余乗算法とそれを実現するシストリアックアレー」、電子情報通信学会論文誌A、Vol. J76−A、No. 8、pp. 1214−1223、1993
【0014】
【非特許文献4】
川村等(S. Kawamura, M. Koike, F. Sano and A. Shimbo)著、「コックス・ロウアー・アーキテクチャ・フォオ・ファスト・パラレル・モンゴメリ・マルチプリケーション(Cox−Rower Architecture for Fast Parallel Montgomery Multiplication)」Advances in Cryptology−Eurocrypt 2000、LNCS 1807、pp523−538、2000
【0015】
【発明が解決しようとする課題】
上述したようにモンゴメリ乗算では、演算の途中結果を用いてtを計算しているが、このtの計算はパイプライン処理による本計算に遅延を与えないように実行されることが望ましい。しかしながら、上述した従来の技術では、そのようなアルゴリズムとハードウェア構成が実現されておらず、tの計算のために余分な遅延が生じるという問題が生じていた。
【0016】
非特許文献2では、tの計算のためにパイプライン処理による本計算に2クロックに1回ずつの待ち状態が生じ、また、特許文献1では、全ユニットにt計算用の余分な乗算器を要するために、何れも回路規模あたりの処理性能が最適化されていないアルゴリズムおよびハードウェア構成となっていた。
【0017】
また、モンゴメリ乗算の実装において、バイナリ表現を用いた方式では、Nのワード数と同数もしくはそれ以上の処理ユニットを具備した装置によりモンゴメリ乗算を実施しているが、現実の実装を考えた場合、ワード数と同数程度の処理ユニットを用意するのは難しいと考えられるため、処理速度の低下をある程度許容してもハードウェア規模を削減したいという要求がある。しかし、単純に処理ユニット数を減らしてモンゴメリ乗算を行おうとした場合には、削減した処理ユニット数に比例した以上の効率の低下が起こるという問題がある。
【0018】
これに対してRNS表現を用いた方式では、基底ごとの演算の独立性が高いため、処理ユニット数を基底数以下に減らした場合でもそれに比例した効率の低下のみしか起こらないが、処理ユニットあたりの回路規模が大きくなるという欠点がある。
【0019】
本発明は、上記問題点を鑑みなされたものであって、複数ユニットのパイプライン処理によるモンゴメリ乗算において、回路規模あたりの処理性能が最適化されており、かつ、tの計算によって余分な遅延が発生しない剰余演算装置、剰余演算方法、及びべき乗剰余演算装置を提供することを目的とする。
【0020】
また、本発明の他の目的は、複数ユニットのパイプライン処理によるモンゴメリ乗算において、処理ユニット数をワード数以下に減らした場合でも、減らした処理ユニット数に比例した速度の低下のみしか起こらず、回路規模あたりの処理速度で定義される装置の効率がユニット数によらず一定になり、RSA暗号の処理等に用いられるのに適した剰余演算装置、剰余演算方法、及びべき乗剰余演算装置を提供することである。
【0021】
【課題を解決するための手段】
本発明の一態様による剰余演算装置は、積和回路を有する複数の処理ユニットによるパイプライン処理を所定回実施し剰余を求める演算手段と、あるパイプライン処理の前に、該あるパイプライン処理の一つ前のパイプライン処理においてある処理ユニットの処理結果に対して所定の演算を施し、該あるパイプライン処理の開始時に、該所定の演算の演算結果を該あるパイプライン処理の初段の処理ユニットへ供給する計算手段と、を具備する。
【0022】
本発明の他の態様による剰余演算装置は、積和回路を有し、途中結果に依存した変数を用いてパイプライン処理を行い剰余を求める複数の処理ユニットと、積和回路を有し、前記変数を前記途中結果が求められる前に求める1個の計算部と、を具備する。
【0023】
本発明の他の態様によるべき乗剰余演算装置は、整数a,e,Nに基づいてべき乗剰余ae mod Nを求めるべき乗剰余演算装置において、積和回路を有する複数の処理ユニットによるパイプライン処理を所定回実施し剰余を求める基本演算手段と、あるパイプライン処理の前に、該あるパイプライン処理の一つ前のパイプライン処理においてある処理ユニットの処理結果に対して所定の演算を施し、該あるパイプライン処理の開始時に、該所定の演算の演算結果を該あるパイプライン処理の初段の処理ユニットへ供給する計算手段とを具備する剰余演算部と、前記パイプライン処理を所定回実施した後の前記剰余演算部の演算結果が整数Nより大きいか同じ場合には該演算結果から整数Nを減した値を、また該演算結果が整数Nより小さい場合には該演算結果を、前記べき乗剰余として出力する判定手段と、を具備する。
【0024】
本発明の他の態様によるべき乗剰余演算装置は、整数a,e,Nに基づいてべき乗剰余ae mod Nを求めるべき乗剰余演算装置において、積和回路を含む複数の処理ユニットによるパイプライン処理を所定回実施し剰余を求める基本演算手段と、剰余演算の法サイズと処理ユニット数に応じて前記基本演算手段を制御する制御手段とを具備する剰余演算部と、前記パイプライン処理を所定回実施した後の前記剰余演算部の演算結果が整数Nより大きいか同じ場合には該演算結果から整数Nを減した値を、また該演算結果が整数Nより小さい場合には該演算結果を、前記べき乗剰余として出力する判定手段と、を具備する。
【0025】
【発明の実施の形態】
以下、図面を参照して本発明による剰余演算装置、剰余演算方法、及びべき乗剰余演算装置の実施の形態を説明する。
【0026】
(第1の実施の形態)
図1は本発明の第1の実施の形態に係る“べき乗剰余”演算装置の構成を示す図である。
【0027】
RSA暗号など公開鍵暗号方式の多くでは、その処理過程において“べき乗剰余”演算b=ae mod N(b、a、eは整数)が用いられる。“べき乗剰余”演算b=ae mod Nは、剰余乗算の繰り返しにより実装される。また、剰余乗算の代替計算法としてはモンゴメリ乗算が知られている。モンゴメリ乗算は、整数x,y,N(x<N,y<N)の入力に対して、w=xyR−1 mod N、またはw=xyR−1 mod N+N(すなわちw<2N)を出力するものであり、w=(xy+N[xy(−N−1) mod R])/Rによって演算される。Rはモンゴメリ定数と呼ばれ、R>N、gcd(R,N)=1を満たす任意の整数である。gcdは最大公約数を示す。一般には、Rは上式の剰余算と除算が簡単になるように選ばれるものであり、二進数表現ではRを2の“べき乗”にとることで、剰余算を上位ビットの切り捨て、除算をシフト演算で実現する。
【0028】
モンゴメリ乗算を繰り返し用いて“べき乗剰余”演算を行う方法については、バイナリ法やウィンドウ法などの手法が知られている。ここでは一例として、バイナリ法による“べき乗剰余”演算b=ae mod Nのアルゴリズムを示す。
【0029】
バイナリ法による“べき乗剰余”演算アルゴリズム
gは指数eのビット長、eiはeのi番目のビットの値を表す。ただし、最上位ビットegは1とする。MM(x,y,N)はモンゴメリ乗算(xy+N[xy(−N−1) mod R])/Rを示している。
【0030】
図1は、上記で説明したバイナリ法による“べき乗剰余”演算アルゴリズムを実行する“べき乗剰余”演算装置の機能ブロック構成を示す。
【0031】
入出力部11は、“べき乗剰余”演算装置1の外部、例えばパーソナルコンピュータ本体とのデータの入出力を行うインタフェースであって、外部からa、e、Nを入力し、また外部へそれらの入力に対する演算結果bを出力する。
【0032】
制御部12は、“べき乗剰余”演算装置1の全体の制御を司るものであり、バイナリ法による“べき乗剰余”演算アルゴリズムに基づいて、装置1内の個々の部分を制御する。制御部12は、入出力部11からの入力Nを格納するN用レジスタ21と、入出力部11からの入力Nとこの“べき乗剰余”演算装置1のワード幅rビット(装置固有値)とに基づいて、モンゴメリ定数Rを算出するR算出部22とを具備する。ワード幅r(ビット)はR算出部22に格納される。制御部12は、入出力部11から入力された指数eを格納するe用レジスタ23と、入力された指数eのビット長gを求めて、ビット長gから1減算した値をiの初期値として出力するビット長算出部24と、ビット長算出部24からの初期値iを1づつカウントダウンし、e用レジスタ23に格納されるeを参照し、i番目のビットが1(ei=1)であるか否かを判定するei判定部25とを具備する。
【0033】
制御部12は、後述の予備演算部13からのa’を格納するa’用レジスタ26と、a’を初期値とし、後述の剰余演算装置14で演算されたb’を更新するように格納するb’用レジスタ27と、ei判定部25の結果に基づき、a’用レジスタ26、またはb’用レジスタ27に格納されるa’、またはb’を選択的に剰余演算装置14へ出力するセレクタ28とを具備する。制御部12は、剰余演算装置14で計算されたMM(b’,1,N)の演算結果がb’用レジスタ27に格納されると、演算結果b’とN用レジスタ21に格納されるNとの大小関係を判定し、b’≧Nと判定した際にはb’からNを減算した値を演算結果bとし、b≧Nでないと判定した際にはb’をbとし、入出力部11へ出力するb判定部29を具備する。
【0034】
予備演算部13は、剰余算を行うものであって、入出力部11からのaと、N用レジスタ21からのNと、R算出部22で演算されたモンゴメリ定数Rとによって剰余算a’=aR mod Nを行い、a’を求める。
【0035】
剰余演算装置14は、N用レジスタ21からのNとb’用レジスタ27からのb’とを入力し、積和演算を繰り返し用いて新たなb’(=MM(b’,b’,N))を求める。剰余演算装置14は、ei=1のとき、N用レジスタ21からのNとb’用レジスタ27からのb’とa’用レジスタ26からのa’とを入力し、積和演算を繰り返し用いて新たなb’(=MM(b’,a’,N))を求める。更に、剰余演算装置14は、N用レジスタ21からのNとb’用レジスタ27からのb’とを入力し、積和演算を繰り返し用いて新たなb’(=MM(b’,1,N))を求める。求められた新たなb’は、b’用レジスタ27へ出力され、b’用レジスタ27は更新される。なお、本実施の形態では、モンゴメリ乗算におけるモンゴメリ定数Rに関する演算を下位(n+1)ワード(後述するようにnは法Nのワード数である)の切り捨てとして実現するため、データR自体を剰余演算装置14で取り扱う必要がなく、図1では剰余演算装置14へのRの入力の明示は省略した。剰余演算装置14の内部の詳細な説明は後述する。
【0036】
Ninv演算部15は、N用レジスタ21からのNと、R算出部22と同様にNinv演算部15の内部に備える“べき乗剰余”演算装置1のワード幅r(ビット)(装置固有値)とによって、剰余算−N−1 mod 2r、または−N(0)−1mod 2rを行い、Ninvを求める。
【0037】
本実施の形態の“べき乗剰余”演算装置1は以上のように構成したが、これに限るものではない。例えば、“べき乗剰余”演算装置1の外部でeのビット長を算出して“べき乗剰余”演算装置1へ与えるようにすれば、ビット長算出部24の代わりに−1を行う減算部を持てば良い。また、“べき乗剰余”演算装置1の外部でモンゴメリ定数Rを算出して“べき乗剰余”演算装置1へ与えるようにすれば、R算出部22の代わりにRを格納するR用レジスタを持てば良い。さらに、ウィンドウ法を適用した場合には、別構成の“べき乗剰余”演算装置となることは当然であり、要は、剰余演算装置14へ適切な変数を与えるような構成であれば、いずれの構成であっても良い。
【0038】
次に、本実施の形態の剰余演算装置14について詳細に説明する。モンゴメリ乗算を行う剰余演算装置14の機能ブロックの構成について説明する前に、幾つかの補足説明を行う。
【0039】
まず、整数の基数表現について説明する。整数xは、基数を2rとした場合、次式のように表現できる。
【0040】
x=x(0)+x(1)・2r+x(2)・22r+ … +x(m−1)・2( m−1 ) r
mは1ワードをrビットとした場合のxのワード長であり、x(i)がi番目のワードであり、x(0)を最下位ワード、x(m−1)を最上位ワードとしている。つまり、整数xは、(x(0),x(1),x(2),…,x(m−1))として扱うことができる。なお、整数y,N,wなどの他の整数も同様にして扱うことができる。以下で説明する剰余演算装置14の基本演算ビット幅は、この基数表現による1ワードのビット幅rに一致する。
【0041】
次に、モンゴメリ定数は、R≧4Nを満たすものを採用する。入力x(<2N),y(<2N)に対するモンゴメリ乗算の出力がw(<2N)となる。よって、モンゴメリ乗算を繰り返し実行する際に、得られた演算結果wをそのまま次のモンゴメリ乗算の入力データx,yとして用いることが可能になる。本実施の形態におけるモンゴメリ乗算の変数に対する条件は以下のとおりである。
【0042】
法N:nワード(ワード幅はrビット)、gcd(R,N)=1より奇数
モンゴメリ定数:R=2(n+1)r (r≧2)
入力データ:x(<2N),y(<2N)
出力データ:w<2N
先で説明したモンゴメリ乗算w=(xy+N[xy(−N−1) mod R])/Rは、t=xy(−N−1) mod Rとおくことにより、モンゴメリ乗算w=(xy+Nt)/Rを実行すると表現できる。基数表現に基づくモンゴメリ乗算は、次のアルゴリズムで演算される。
【0043】
モンゴメリ乗算アルゴリズム
w=0
for j=0,…,n
w=w+xy(j)
t(j)=w(0)Ninv mod 2r
w=(w+Nt(j))/2r
next j
Ninvは、次式によって事前に計算される値である。
【0044】
Ninv=−N−1 mod 2r=−N(0)−1 mod 2r (1)
上記のモンゴメリ乗算アルゴリズムは、図2のような単純な積算と加算の繰り返し処理を行うこととなる。つまり、ループjでは、xy(j)、Nt(j)を求めて、ループj−1までに求まった全てのxy(k)、Nt(k)(k=0,…j−1)の総和を求める処理を行って(図示していないが、2rで除す)いる。なお、xy(j)、Nt(j)の組が昇順に左へシフトしているのは、基数表現によるためである。
【0045】
ところで、上記モンゴメリ乗算アルゴリズムをハードウェアで並列実装するにあたっては、さらにワード単位の乗算に分割して、各単位ごとに演算し実行することとなる。この分割実行するモンゴメリ乗算アルゴリズムは、分割数をuとすると、図3のような処理となる。このとき、各分割単位(図3の各セル)で演算した結果、桁上がり(キャリー:図3の矢印)が生じるため、同じ行(jが同じもの)の各単位の乗算は同時に処理することができない。つまり、下位の単位から、上位の単位へ順次演算する必要が生じる。
【0046】
そこで、剰余演算装置14では、u個の処理単位ユニット(以下、単にユニットと称し、ユニット0〜ユニットu−1と書く)を用意し、下位の単位から上位の単位へ順次ユニット間をシフトしながら処理を行う。これを、ここではパイプライン処理と呼ぶ。このパイプライン処理によるモンゴメリ乗算アルゴリズムの処理は、図4のような処理となり、各パイプライン処理内では、遅延なく順次演算可能となる。
【0047】
なお、各パイプライン処理内の最上位の桁上がりは、次パイプライン処理の最終段に影響を与えるが、次パイプライン処理の最終段は、桁上がり時の次タイミングで行うものであるから、タイミング上の問題は生じない。
【0048】
しかし、各パイプライン処理間では、前のパイプライン処理で演算された演算結果の一部を用いてt(j)を得るが、そのt(j)を得るために必要な所定演算(後述)が間に合わないため、遅延が生じる。
【0049】
そこで、本実施の形態の剰余演算装置14は、t(j)を前倒しで求める処理を別に設けるようにし、パイプライン間での遅延を無くなるようにした。
【0050】
図5は、この前倒し処理を設けた本実施の形態の剰余演算装置14の機能ブロックを示す。
【0051】
剰余演算装置14は、それぞれが1個の積和回路32を有するu個のパイプライン処理単位ユニット31からなる基本演算部30と、1個の積和回路41を有する1個のt計算部40と、u−1番目のユニット31で生じた桁上がりを処理するキャリー部50とから構成される。このように構成された剰余演算装置14は、b’、a’/b’、Nを入力し、新たなb’を求めて出力する。または、b’、Nを入力し、新たなb’を求めて出力する。なお、特に図示しないが、u個のパイプライン処理単位ユニット31には、適宜RAM、ROMを個別に具備してもよいし、基本演算部30で一括して具備してもよい。また、特に図示しないが、t計算部40は、RAM、ROMを基本演算部30と共用してもよいし、基本演算部30とは別に具備してもよい。また、後述するが、キャリー部50は、パイプライン処理単位ユニット31を代わりに設けて、代用しても良い。
【0052】
r、n、uの具体的な値としては、例えば鍵長1024ビットのRSA処理を演算ビット幅32の回路で実行する場合、本実施の形態によればr=32、n=32、u(=n+1)=33となる。
【0053】
次に、各ユニット31及びt計算部40の構成を説明する前に、本実施の形態で適用のモンゴメリ乗算アルゴリズムについて説明する。
【0054】
本実施の形態では、ユニット数uとnの関係がu=n+1の場合を説明する。このu(=n+1)は、nに対して最大のパフォーマンスを実現する最小のユニット数である。なおt計算部40のアルゴリズム上、u≧2とする。
【0055】
第1の実施の形態で適用のモンゴメリ乗算アルゴリズム
ユニットiの処理
上記において、C||M=<右辺>という表記は、右辺の演算結果のビット長がr+r’である場合に、右辺演算結果の下位rビットをMとし、上位r’ビットをCとすることを表す。すなわち、Mはその演算を行っている桁の総和を、Cは桁上がり(キャリー)を意味する。上記アルゴリズムでは、キャリーの最大ビット長はrであり、上位rビットをCとする。また、L(A)はAの下位rビットを表す。
【0056】
n=3、u(=n+1)=4の場合について、第1の実施の形態で適用のモンゴメリ乗算アルゴリズムによるパイプライン処理の流れの具体例を図6に示す。
同図は、ワード単位の乗算がどのユニットのどのクロックで実行されるかを示している。また、実線の矢印は計算された総和(M(x(i)y(j))、またはM(N(i)t(j)))をどのユニットに入力するかを示し、点線の矢印はキャリー(C(x(i)y(j))、またはC(N(i)t(j)))をどのユニットに入力するかを示している。図6にはt計算部での処理も合わせて示す。
【0057】
以下、第1の実施の形態で適用のモンゴメリ乗算アルゴリズムについて詳しく説明する。
【0058】
まず、ユニットiの処理では、ステップ1のC(x(i)y(j))、M(x(i)y(j))をクロックi+2j時に計算し、ステップ2のC(N(i)t(j))、M(N(i)t(j))をクロックi+2j+1時に計算する。その際、ステップ1の入力データは、C(x(i−1)y(j))が1クロック前にユニットi−1で計算され、M(N(i+1)t(j−1))が同クロック時にユニットi+1で計算される。ステップ2については、C(N(i−1)t(j))が1クロック前にユニットi−1で計算され、M(x(i)y(j))が1クロック前にユニットiで計算される。ステップ2では、t(j)も演算過程の途中結果に依存して決まるデータであり、その演算処理がt計算部の処理に従って次のように行われる。
【0059】
t計算部の処理では、クロック2j−1でステップ1のv(j)を計算し、クロック2jでステップ2のt(j)を計算する。このような2段階の処理を行う理由は次の通りである。t(j)を用いた乗算がパイプライン処理で初めて実行されるのは、クロック2j+1のユニット0においてである(図6参照)。これに間に合うように、(a)1クロック前のクロック2jでt(j)の計算が完了すること、かつ、(b)1クロック内の遅延(クリティカルパス)をパイプライン処理による本計算の最長パス以下である乗算器1個+加算器1個に抑えること、を考える。その際、演算途中結果に対するt(j)の依存性を次のように考慮しなければならない。
【0060】
前述の第1の実施の形態で適用のモンゴメリ乗算アルゴリズムによれば、t(j)はw(0)から計算される。w(0)は中間結果wの最下位ワードであり、t(j)の計算に用いるw(0)は次式で与えられる。
【0061】
w(0)=L([z(0)+ … +z(j−1)+x(0)y(j)]/2jr)
なお、z(h)=[x(0)y(h)+N(0)t(h)]2hr+ … +[x(h’)y(h)+N(h’)t(h)]2(h+h ’ )r
ここで、h=0,…,j−1、h’=j−hである。例としてn=3の場合を図7に示す。例えば、t(2)の計算に用いる上記w(0)は、図上の太線で囲った各乗算の桁合せと桁上がりを考慮した総和で与えられる。すなわちt(j)を計算するには、それ以前に上式に含まれる乗算とそれらの総和演算が実行されている必要がある。
【0062】
上記の依存性によれば、t(j)の計算に必要な乗算の内、パイプライン処理の最も遅いクロックで実行される演算はN(1)t(j−1)とx(0)y(j)である(図6参照)。これらはそれぞれユニット1とユニット0で演算されるが、そのタイミングがクロック2jであるため、t計算部40で利用しようとした場合は、上記の条件(a)、(b)を満たすことができない。
【0063】
この問題を解決するため、本実施の形態によるt計算部の処理では、この二つの乗算をt計算部40で前倒し計算する。その際、前倒し計算をステップ1としてステップ2の1クロック前に実行することで、条件(a)、(b)を同時に満たすことを可能にする。N(1)t(j−1)とx(0)y(j)以外にt(j)の計算で必要となる乗算はクロック2j−1までに全て計算済みであり、それらはC(N(0)t(j−1))およびM(x(1)y(j−1))としてそれぞれユニット0とユニット1のクロック2j−1に得られる。よって、クロック2jにそれら演算結果をユニット0とユニット1から受け取ることで、ステップ2を問題なく実行することが可能である。
【0064】
この第1の実施の形態ではユニット数uをu=n+1としている。よって最上位のユニットnに対してはキャリーC(x(n)y(j))とC(N(n)t(j))を渡すべきユニットが存在せず、それらキャリーの処理を行う必要がある。それを上記キャリー部の処理において行う。まず、ステップ1をクロックn+2j+1で実行し、1クロック前に計算されたC(x(n)y(j))をユニットnから受け取ってM(x(n+1)y(j))とする。次に、ステップ2をクロックn+2j+2で実行し、1クロック前に計算されたC(N(n)t(j))をユニットnから受け取りM(x(n+1)y(j))との加算を行ってM(N(n+1)t(j))を得る。このM(N(n+1)t(j))は同クロック中にユニットnに入力され、ユニットiの処理におけるステップ1の入力データとして用いられる。
【0065】
第1の実施の形態で適用のモンゴメリ乗算アルゴリズムの実行により、モンゴメリ乗算の演算結果w(<2N)として、w(i)=M(N(i+1)t(n))(i=0,…,n)を得る。
【0066】
パイプライン処理では、第1のユニットの処理が終わればそれ以外のユニットの処理が終わっていなくても次の処理を開始することができる。本実施の形態では、一つのユニットがモンゴメリ乗算の実行に要するクロック数をパイプライン周期と呼ぶ。よって、“べき乗剰余”演算の処理時間はこのパイプライン周期に比例して決まる。第1の実施の形態に適用のモンゴメリ乗算アルゴリズムによるパイプライン周期は2(n+1)+εである。ここでεはnと比較して十分小さい値であり、第1の実施の形態の場合、ε=2である。
【0067】
以下、上記で説明したアルゴリズムを適用した剰余演算装置14の構成及び動作について詳細に説明する。
【0068】
図8は、各ユニットi(31)の構成及びその処理動作を示す。
【0069】
本実施の形態の各ユニットi(31)は、クロックに応じて2種類の処理動作が存在するため、それぞれを図8の(a)と(b)とに分けて示す。点線はそのパスがそのクロックでは選択されていないことを表す。各ユニットiは3つのレジスタR1、R2、R3、セレクタSEL、乗算器34、加算器35からなる。
【0070】
図8の(a)は、クロックi+2j時の処理動作を示す。これはユニットiの処理のステップ1に対応する。ユニットiには、y(j)とC(x(i−1)y(j))がユニットi−1から、M(N(i+1)t(j−1))がユニットi+1から入力される。x(i)は各ユニットが有するレジスタやRAMに分散して保存しておく方式でもよいし、x(i)(i=0,…n)を装置全体で一括して保存しておく方式でもよい。クロックi+2jのユニットiでは、x(i)y(j)+C(x(i−1)y(j))+M(N(i+1)t(j−1))を演算し、下位rビットをM(x(i)y(j))としてレジスタR1に保存し、残り上位をC(x(i)y(j))としてレジスタR2に保存する。さらにレジスタR3にy(j)を保存する。ユニットiからは、1クロック前のクロックi+2j−1にレジスタR2に保存されたC(N(i)t(j−1))とR3に保存されたt(j−1)が出力され、ユニットi+1に入力される。
【0071】
図8の(b)は、クロックi+2j+1時の処理動作を示す。これはユニットiの処理のステップ2に対応する。ユニットiにはt(j)とC(N(i−1)t(j))がユニットi−1から入力される。N(i)はx(i)と同様に各ユニットが有するレジスタやRAMに分散して保存しておく方式でもよいし、N(i)(i=0,…,n)を装置全体で一括して保存しておく方式でもよい。クロックi+2j+1のユニットiでは、N(i)t(j)+C(N(i−1)t(j))+M(x(i)y(j))を演算する。その際、M(x(i)y(j))はクロックi+2jにレジスタR1に保存された値である。そして、下位rビットをM(N(i)t(j))としてユニットi−1へ入力し、残り上位をC(N(i)t(j))としてレジスタR2に保存する。レジスタR3にはt(j)を保存する。ユニットiからの出力は、積和結果のM(N(i)t(j))と、クロックi+2jにレジスタR2に保存されたC(x(i)y(j))およびR3に保存されたy(j)であり、ユニットi−1、またはユニットi+1へ入力される。
【0072】
y(j)とt(j)は1クロック毎に交互に使用されるため、図8の(a)、(b)にはレジスタR3を共有する構成を示したが、y(j)とt(j)それぞれに対してレジスタと配線を設ける方式でもよい。また、図8の(a)、(b)のように乗算器からの出力を全て加算器へ入力する構成ではなく、加算器への入力は下位rビットのみとし、残りの上位をC’(x(i)y(j))(下段の処理動作ではC’(N(i)t(j))として新たに設けたレジスタR2’に保存し、それをユニットi+1の加算器へ入力する構成を採用してもよい。この場合、加算器への入力が1本増えるものの、加算器のビット幅を小さくすることが可能である。
【0073】
次に、t計算部40の構成と処理動作を図9を参照して説明する。同図にはt計算部40と基本演算部30との接続も合わせて示す。t計算部40は3つのレジスタRt1、Rt2、Rt3、3つの乗算器42、43、46、2つの加算器44、45からなる。先ず、t計算部40へは、クロック2j−1でx(0),N(1),y(j)が入力される。x(0)とN(1)は必ずしもt計算部用に新たに保有する必要はなく、上述のユニット用に保有されたデータを共用することも可能である。またy(i)(i=0,…,n)は、x(i)やN(i)と同様に各ユニットが有するレジスタやRAMに分散して保存する方式でもよいし、装置全体で一括して保存する方式でもよい。
【0074】
以上の入力データを用いて、クロック2j−1のt計算部ではv(j)=L(N(1)t(j−1)+x(0)y(j))を計算し、レジスタRt1に保存する。ここで、t(j−1)はクロック2j−2でレジスタRt2に保存された値である。次に、クロック2jではt(j)=NinvL(v(j)+C(N(0)t(j−1))+M(x(1)y(j−1)))を計算し、レジスタRt2に保存する。ここで、C(N(0)t(j−1))はクロック2j−1にユニット0のレジスタR2に保存された値であり、M(x(1)y(j−1))はクロック2j−1にユニット1のレジスタR1に保存された値である。
【0075】
Ninvは、前記した式(1)に従って、Ninv演算部15で事前に計算され、レジスタ、またはRAMに保存されている値である。t計算部40でクロック2jにt(j)が計算されると、続くクロック2j+1でt(j)がユニット0に入力され、ユニットiの処理に使用される。なお、各ユニットではy(j)とt(j)が1クロック毎に交互に使用されるため、図9にはy(j)とt(j)をセレクタで切り替えて交互にユニット0(31)に入力する構成を示したが、y(j)とt(j)を独立に入力する構成でもよい。
【0076】
最後に、キャリー部の処理の構成と処理動作を図10を参照して説明する。
【0077】
キャリー部50は、1個の加算器51、1個のレジスタRC、1個のセレクタSELから構成される。図10の(a)に示すように、クロックn+2j+1で、ユニットu−1からのC(x(n)y(j))をレジスタRCへ書き込み、図10の(b)に示すように、クロックn+2j+2で、レジスタRの値M(x(n+1)y(j))にユニットu−1からのC(N(n)t(j))を加算し、M(N(n+1)t(j))をユニットu−1へ供給する。
【0078】
キャリー部50は、基本演算部30の各ユニットと比較して小さな回路規模であり、演算ビット幅も各ユニット31のrより小さくでき、その処理動作もユニットiの処理に従って定まる単純な処理(ユニットiの処理の一部)である。ここでは、u個のユニットとは別にキャリー部50を設けたが、これに代え、最上位のユニットu−1に組み込む方式でもよい。また、ユニット数を1つ増やしてu=n+2とし、最上位のユニットn+1においてキャリー部の処理を行う方式を採用してもよい。
【0079】
以上のように構成され、動作する本実施の形態によるハードウェア構成のクリティカルパスについて、図8を参照して説明する。
【0080】
クリティカルパスは、ユニットiのクロックi+2j+1において乗算器と加算器を経た演算結果M(N(i)t(j))がユニットi−1へ入力され、それがユニットi−1で同クロック(i−1)+2j+2に加算器を経てレジスタR1へ保存されるまでのパスとなる。すなわち、本実施の形態によるモンゴメリ乗算のクリティカルパスは、(乗算器1個+加算器2個)である。一方、t計算による最長パスは(乗算器1個+加算器1個)であり、本実施の形態によるモンゴメリ乗算では、t計算による遅延は発生することなく、クリティカルパスが基本演算部30における本計算で決まる。
【0081】
本実施の形態のハードウェア規模を乗算器の個数で見積ると、基本演算部30が乗算器(1×u)個、t計算部40が乗算器3個である。なお、乗算器は、加算器、レジスタ、セレクタ等と比較してその回路規模が格段に大きいため、このような見積りは妥当といえる。
【0082】
本実施の形態の剰余演算装置14は、回路規模あたりの処理性能では、従来の技術で説明した非特許文献2(ウォルター等)による技術と比較し、“べき乗剰余”演算の単独処理において約2倍の効率化が可能である。さらに、クリティカルパスも乗算器1個分短いため(加算器よりも乗算器による遅延の影響が大きい故に)、より高い動作周波数での処理が可能になる。
【0083】
同様に、本実施の形態の剰余演算装置14は、回路規模あたりの処理性能では、従来の技術で説明した特許文献1による技術と比較し、“べき乗剰余”演算の単独処理において約3倍の効率化が可能になる。また、クリティカルパスについても、乗算器が1個分短いため、より高い動作周波数での処理が可能である。
【0084】
以上説明してきたように、第1の実施の形態によれば、パイプライン周期の全クロックの間、各ユニットの全ての乗算器が待ち状態を作ることなく毎クロック動作しており、回路規模(基本演算部の乗算器の個数)あたりの処理性能が最適化されていることがわかる。装置全体でのクリティカルパスがパイプライン処理による本計算で決まり、t計算による余分な遅延が生じないアルゴリズムおよびハードウェア構成が実現されている。
【0085】
以下、本発明による“べき乗剰余”演算装置の他の実施の形態を説明する。他の実施の形態の説明において第1の実施の形態と同一部分は同一参照数字を付してその詳細な説明は省略する。
【0086】
(第2の実施の形態)
第2の実施の形態のブロック図は第1の実施の形態のブロック図と同一であるので、図示は省略する。
【0087】
第2の実施の形態では、短い法Nによるモンゴメリ乗算を第1の実施の形態の構成を用いて行う場合の処理を説明する。すなわちユニット数uがu>n+1(u≧2)である。
【0088】
この場合、下位n+2個のユニットをモンゴメリ乗算で使用し、第1の実施の形態で適用のモンゴメリ乗算アルゴリズムのキャリー部の処理をユニットn+1で行うことで、第1の実施の形態に記載のモンゴメリ乗算を実行することが可能である。その際、パイプライン周期も第1の実施の形態と同じ2(n+1)+εとなる。
【0089】
(第3の実施の形態)
第3の実施の形態では、長い法N、すなわちユニット数uがu<n+1(u≧2)の場合のモンゴメリ乗算を第1の実施の形態の図5と同等の構成を用いて行う場合の処理を説明する。なお、第3の実施の形態の各ユニットi(31)、t計算部40、及びキャリー部50の内部構成は、第1の実施の形態のそれらと若干構成を異にしているが、図5上では、差がないため、同一参照数字のままで説明を進める。
【0090】
第3の実施の形態で適用のモンゴメリ乗算アルゴリズム
ユニットiの処理
t計算部の処理
キャリー部の処理
上記アルゴリズムにおいて、pは(n+1)/u以上の最小の整数、D=u(p−1)+2である。
【0091】
第3の実施の形態に適用のモンゴメリ乗算アルゴリズムによるパイプライン処理の流れを、n=5、u=3の場合のj=1までの処理について、図11に示す。第3の実施の形態によるu<n+1の場合、ユニットiの処理において、kに関する繰り返し処理が必要となり、それに伴って待ち状態が挿入される。ステップ2のM(N(I)t(j))を同クロックでユニットi−1へ渡すことができないため、それらを一旦レジスタ、またはRAMへ保存し、必要に応じて読み出しを行う。t計算部の処理とキャリー部の処理でも、ユニットiの処理に同期して待ち状態が発生する。なお、第3の実施の形態に適用のモンゴメリ乗算アルゴリズムによるパイプライン周期はD(n+1)である。
【0092】
図12は、第3の実施の形態によるユニットi(31)のハードウェア構成を示す。第1の実施の形態の図8からの変更点は、レジスタR1がp個のレジスタR1(k)(k=0,…,p−1)に置き換えられている点である。クロックI+Djでは、(a)に示すように、ユニットi+1のレジスタR1(k)からM(N(I+1)t(j−1))を読み出して演算処理を行う。これに伴い、クロックI+Dj+1では、(b)に示すように、M(N(I)t(j))をレジスタR1(k)へ保存する。
【0093】
p個のレジスタR1(k)はRAMで構成してもよい。さらに、該レジスタ、またはRAMをユニット毎に設けるのではなく、基本演算部30で一括して設ける方式でもよい。なお、kに関する繰り返し処理を実行するために、最下位ユニット0は出力M(N(I)t(j))(I=i+uk,i=0,k=1,…,p−1)を最上位ユニットu−1へ入力し、最上位ユニットu−1は出力y(j)、t(j)、C(x(I)y(j))、C(N(I)t(j))(I=i+uk,i=u−1,k=0,…,p−2)を最下位ユニット0へ入力する。
【0094】
t計算部40のハードウェア構成を図13に示す。第1の実施の形態の図9からの変更は、v(j)の計算が1個の乗算器46で構成される点と、基本演算部30からの入力として、ユニット1のレジスタR1(0)からM(N(1)t(j−1))がt計算部40の加算器45へ入力される点である。また、kに関する繰り返し処理を実行するために、最下位ユニットから最上位ユニットへ、最上位ユニットから最下位ユニットへ変数を渡すための配線が付加される。なお、t(j)の計算タイミングであるクロックDjよりも2クロック以上前にM(N(1)t(j−1))の計算は終了しているため、予めM(N(1)t(j−1))をクロックDj以前にt計算部のレジスタ、またはRAMへ取り込む方式を採用してもよい。
【0095】
キャリー部50の処理について説明する。第1の実施の形態によるキャリー部の処理との違いは、クロックn+Dj+2のステップ2で加算結果M(N(n+1)t(j))を図10のレジスタRへ書き込む点である。この書き込まれたデータは、クロックn+D(j+1)で最上位ユニットu−1へ供給される。uとnの関係について補足説明する。uがn+1の約数である場合、キャリー部の処理用の回路が必要であり、第1の実施の形態と同様にu個のユニットとは別に回路を設ける方式でもよいし、最上位のユニットu−1の内部に組み込む方式を採用してもよい。uがn+1の約数でない場合は、キャリー部の処理に使用できるユニットが存在するため、第2の実施の形態と同様にユニットn+1−u(p−1)でキャリー部の処理を行うことで、第3の実施の形態で適用のモンゴメリ乗算アルゴリズムを実行することが可能である。
【0096】
以上のように構成すれば、第1の実施の形態に記載のモンゴメリ乗算をユニット数u(<n+1)の構成においても実行することができる。
【0097】
(第4の実施の形態)
第4の実施の形態では、第1の実施の形態によるモンゴメリ乗算の変形例を説明する。ユニット数は第1の実施の形態と同様にu=n+1であるが、u≧3である点が異なっている。なお、第4の実施の形態の各ユニットi、t計算部及びキャリー部の内部構成は、第1の実施の形態のそれらと若干構成を異にしているが、特に図5上では差がないため、同一符号(番号)のままで説明を進める。
【0098】
第4の実施の形態で適用のモンゴメリ乗算アルゴリズム
ユニットiの処理
t計算部の処理
キャリー部の処理
第4の実施の形態で適用のモンゴメリ乗算アルゴリズムによるパイプライン処理の流れを、n=3、u(=n+1)=4の場合について図14に示す。第1の実施の形態で適用のモンゴメリ乗算アルゴリズムとの違いは、以下で説明するように総和M(x(i)y(j))、M(N(i)t(j))の処理の仕方である。
【0099】
第4の実施の形態によるユニットi(31)のハードウェア構成を図15に示す。第1の実施の形態の図8からの変更点は、M(x(i)y(j))およびM(N(i)t(j))を次クロックで下位ユニットへ入力するために、ユニットiのレジスタR1がユニットi−1の加算器へ接続される点である。
【0100】
また、ユニットiの処理のステップ2がi,jに応じて次のように条件分岐する。ユニット0のj=0,…,nおよび全ユニットのj=nでは、図16におけるセレクタの下のポートが選択され、t計算部40ではレジスタR1の値(M(x(1)y(j−1)))も加算される。それ以外の処理では、セレクタの上のポートが選択され、t計算部40ではレジスタR1からの加算は行われない。
【0101】
同様に、キャリー部の処理においても、j=nか否かでステップ2が上記のように条件分岐する。
【0102】
次に、t計算部40のハードウェア構成を図16に示す。第1の実施の形態の図9からの変更点は、基本演算部30から加算器45への入力がユニット0、ユニット1、ユニット2からの3つの信号になった点である。
【0103】
キャリー部50については、第1の実施の形態による図10と同様のハードウェア構成によって、上記キャリー部の処理を実行することが可能である。
【0104】
第4の実施の形態によるクリティカルパスは、ユニットiのレジスタR1の接続が変更されたことに伴い、第1の実施の形態よりも加算器が1個減り、(乗算器1個+加算器1個)である。ただし、ユニットiの加算器やt計算部の下側の加算器への入力パスが1本増えるため、クリティカルパスの差は加算器の内部構成に依存すると考えられる。また、ハードウェア規模は第1の実施の形態と同様に、基本演算部が乗算器(2×u)個、t計算部が乗算器2個である。
【0105】
(第5の実施の形態)
第5の実施の形態では、短い法Nによるモンゴメリ乗算を第4の実施の形態の構成を用いて行う場合の処理を説明する。すなわちユニット数uがu>n+1(u≧3)である。
【0106】
この場合、下位n+2個のユニットをモンゴメリ乗算で使用し、第4の実施の形態で適用のモンゴメリ乗算アルゴリズムのキャリー部の処理をユニットn+1で行うことで、第4の実施の形態に記載のモンゴメリ乗算を実行することが可能である。その際、パイプライン周期も第4の実施の形態と同じ2(n+1)+εとなる。
【0107】
(第6の実施の形態)
第6の実施の形態では、長い法Nによるモンゴメリ乗算を第4の実施の形態の構成を用いて行う場合の処理を説明する。すなわちユニット数uがu<n+1(u≧3)である。
【0108】
第6の実施の形態で適用のモンゴメリ乗算アルゴリズム
ユニットiの処理
t計算部の処理
キャリー部の処理
第3の実施の形態と同様に、pは(n+1)/u以上の最小の整数、D=u(p−1)+2である。
【0109】
第6の実施の形態で適用のモンゴメリ乗算アルゴリズムによるパイプライン処理の流れを、n=5、u=3の場合のj=1までの処理について図17に示す。第6の実施の形態では第3の実施の形態と同様に、ユニットiの処理においてkに関する繰り返し処理が必要となり、それに伴って待ち状態が挿入される。t計算部の処理とキャリー部の処理でも、ユニットiの処理に同期して待ち状態が発生する。第3の実施の形態と同様に、第6の実施の形態で適用のモンゴメリ乗算アルゴリズムのパイプライン周期はD(n+1)である。
【0110】
第6の実施の形態によるユニットi(31)のハードウェア構成では、第4の実施の形態の図15におけるレジスタR1を2p個用意し、クロックI+DjでM(x(I)y(j))をレジスタR1(1,k)へ、クロックI+Dj+1でM(N(I)t(j))をレジスタR1(2,k)へ書き込む。書き込まれた値はそれぞれクロックI+D(j+1)−1とクロックI+D(j+1)でユニットi−1へ入力され、ユニットiの処理で使用される。レジスタR1(1,k)、R1(2,k)(k=0,…,p−1)はRAMで構成してもよい。さらに、該レジスタ、またはRAMをユニット毎に設けるのではなく、基本演算部30で一括して設ける方式でもよい。なお、kに関する繰り返し処理を実行するために、最下位ユニット0は出力M(x(I)y(j))、M(N(I)t(j))(I=i+uk,i=0,k=1,…,p−1)を最上位ユニットu−1へ入力し、最上位ユニットu−1は出力y(j)、t(j)、C(x(I)y(j))、C(N(I)t(j))(I=i+uk,i=u−1,k=0,…,p−2)を最下位ユニット0へ入力する。
【0111】
第6の実施の形態によるt計算部40のハードウェア構成は、第3の実施の形態の図13とほぼ同じ構成となる。第3の実施の形態との違いは、基本演算部からの入力として、ユニット1のレジスタR1(1,0)からM(x(1)y(j−1))が、同じくユニット1のレジスタR1(2,0)からM(N(1)t(j−1))がt計算部40の加算器へ入力される点である。第3の実施の形態と同様に、予めM(x(1)y(j−1))とM(N(1)t(j−1))をクロックDj以前にt計算部40のレジスタ、またはRAMへ取り込む方式を採用してもよい。
【0112】
キャリー部の処理については、第1の実施の形態の図10におけるレジスタRを2個用意し(レジスタR(1)とR(2))、クロックn+Dj+1でステップ1を実行してM(x(n+1)y(j))をR(1)に書き込み、クロックn+Dj+2でステップ2を実行してM(N(n+1)t(j))をR(2)に書き込む。これら書き込まれたデータは、クロックn+D(j+1)にレジスタR(1)の値が最上位ユニットu−1へ供給され、クロックn+D(j+1)+1にレジスタR(2)の値が同じくユニットu−1へ供給される。なお、uがn+1の約数である場合とそうでない場合の取り扱いについては、第3の実施の形態と同様の方式を採用することが可能である。
【0113】
以上のように構成すれば、第4の実施の形態に記載のモンゴメリ乗算をユニット数u<n+1の構成において実行することができる。
【0114】
以上詳細に説明してきた第1乃至第6の実施の形態によれば、各条件に応じ回路規模あたりの処理性能が最適化され、tの計算によって余分な遅延が発生しない、モンゴメリ乗算のアルゴリズムとハードウェア構成を提供することができる。
【0115】
第1乃至第6の実施の形態は、回路規模あたりの処理性能として従来技術と比較し、“べき乗剰余”演算の単独処理において約2倍から3倍を達成できる。また、クリティカルパスが乗算器1個分短くなっているため、従来技術よりも高い動作周波数での処理が可能である。
【0116】
上述した実施の形態はt計算部40を基本演算部30から独立させ、演算過程の途中結果に依存するt(j)を前倒しで求めているので、パイプライン処理の効率を高めているが、被演算子の連続した数ワードずつを各処理ユニットの負荷が均等化するように剰余演算の法サイズと処理ユニット数に応じて下位ユニットから割り振ることによりパイプライン処理の効率を高める実施の形態を以下に説明する。
【0117】
(第7の実施の形態)
第7の実施の形態の全体構成は図1に示した第1の実施の形態の構成と同じである。
【0118】
第7の実施の形態の剰余演算装置140の詳細を図18に示す。剰余演算装置140は、入力x、y、N、Ninvに対してw=MM(x,y,N)を出力する。高速処理を実現するため、u個の処理ユニット(以下、単にユニットと称し、ユニット0,ユニット1,…,ユニットu−1と書く)によるパイプライン処理を行う。第7の実施の形態では、ユニット数uがu=n+2の場合を扱い、1ユニットが1ワードの演算を受け持つものとする。後述するように、1ユニットが1ワードの演算を受け持つ場合には、法Nのワード数nに対してユニット数uはu=n+2で十分である。
【0119】
剰余演算装置140は図18に示すように剰余演算制御部130と基本演算部131とを具備し、基本演算部131はu個のユニット141が互いに接続された構成となっている。剰余演算制御部130は入力に応じて基本演算部131を制御する役割を持つ。制御の内容については後に説明する。
【0120】
各ユニット141は、図19に示すような積和回路となっており、ユニットi−1のA、B,C,Dに対してユニットiのa、b、c、dがそれぞれ接続されている。ただし、ユニット0はそれより下位のユニットが存在しないので、図20の構成とする。また、最上位のユニットであるユニットu−1はそれより上位のユニットが存在しないので図21の構成とする。図20、図21のユニットはともに図19のユニットに含まれる構成となっており、図19のユニットを用いて構成可能である。
【0121】
各ユニット141は、1つの2入力乗算器143と1つの4入力加算器144、rビットの演算値を格納できるレジスタR1,R2,R3,R4,R5,R6,R7、2ビットの演算値を格納できるレジスタr1,r2、複数の演算値を格納できるRAM1,RAM2もしくはそれに代わるものから構成されている。図19、図20、図21に示したユニットの構成は、第7の実施の形態を実現するためには冗長であるが、同じ構成により第8の実施の形態、第9の実施の形態も実現できるため、この構成を用いるものとする。
【0122】
ここで、剰余演算装置140の動作について説明する。まず、簡単のために法Nのサイズn=2について、モンゴメリ乗算w=(xy+Nt)/Rの演算について順を追って示す。図22はxyを計算する手順を示したものであり、xy(0)、xy(1)、xy(2)の総和、つまり縦方向に加えたものがxyとなることを示している。その際、x(i)y(j)には、x(i−1)y(j)からの桁上がりが加えられていることに注意する。同様にして、Ntの計算手順を示したのが図23であり、Nt(0)、Nt(1)、Nt(2)の総和がNtとなる。ここで、前述した変数に対する条件より、xy(0)、xy(1)は高々3r+1ビット、xy(2)は2r+2ビットとなる。また、Ntについては、Nt(0)、Nt(1)、Nt(2)はそれぞれ高々3rビットとなる。更に、xy+Ntは図24のように5r+1ビットとなり、その下位3rビットはモンゴメリ乗算の性質より必ず0なり、上位2r+1ビットがwとなる。一般には、ワード数nの場合には下記のようになる。
【0123】
xy(j):0≦j<n の場合には、高々(n+1)r+1ビット
j=nの場合には、高々nr+2ビット
Nt(j):高々(n+1)rビット
xy+Nt:高々(2n+1)r+1ビット、ただし下位(n+1)rビットは0、上位nr+1ビットはw
これらより、被演算子および演算結果の最大長は(n+1)r+1ビットで、1ワードをrビットとすると、n+2ワードの演算を扱うことができるユニットを備えれば十分である。第1乃至第6の実施の形態では、n+2ワード目は高々1ビットの演算しか扱わないのでこれをキャリー部で扱っていたため、u=n+1がnに対して最大のパフォーマンスを実現する最小のユニット数であるとしていたが、第7乃至第10の実施の形態では第1乃至第6の実施の形態でキャリー部が行っていた処理も1つのユニットが行うものとし、u=n+2がnに対して最大のパフォーマンスを実現する最小のユニット数であるとする。(第1乃至第6の実施の形態と同様にn+2ワード目をキャリー部で扱うとしても良い。)
剰余演算装置140の目的は、図24に示した計算を効率的に行うことである。図24における1ワードを1ユニットで行うことを考え、各ユニットへの処理の割り振りを考えたものが図25である。図25では、列がユニット、行が演算ステップを表しており、図24におけるx(i−1)y(j)からx(i)y(j)への桁上がりとN(i−1)t(j)からN(i)t(j)への桁上がりを点線の矢印で、図24における縦方向の累積計算を実線の矢印で示してある。ここで、ステップは必ずしもクロックに対応しているものではない。ユニットiではx(i)y(j)、N(i)t(j)をj=0,1,…,nについて順次計算する。x(i)y(j)がx(i−1)y(j)より後のステップで処理されているのは、x(i−1)y(j)の計算により得られた桁上がり値をx(i)y(j)に加える必要があるためである。これはN(i)t(j)についてでも同様である。また、ユニット0ではx(i)y(j)、N(i)t(j)に加えてt(j)を計算する。t(j)はモンゴメリ乗算アルゴリズムで示したようにt(j)=w(0)Ninv mod 2rにより計算される。これらをまとめるとユニットiの処理は下記のように書ける。
【0124】
第7の実施の形態におけるユニットiの処理アルゴリズム
ここで、ユニットiの処理ステップについて詳しく述べる。まず、ユニットiではx(i)y(j)を計算する。その際、下位ワードからの桁上がりC(x(i−1)y(j))とこれまでの累積値M(N(i+1)t(j−1))が加えられる。この結果の下位rビットがM(x(i)y(j))であり、それより上位部分がC(x(i)y(j))となる。
【0125】
次のステップでは、N(i)t(j)を計算する。その際、下位ワードからの桁上がりC(N(i−1)t(j))とこれまでの累積値M(x(i)y(j))が加えられる。この結果の下位rビットがM(N(i)t(j))、それより上位がC(N(i)t(j))となる。以後、x(i)y(j+1)、N(i)t(j+1)、x(i)y(j+2)とj=nまで順次計算を行う。
【0126】
また、ユニット0においては上記のx(i)y(j)とN(i)t(j)の計算の間に、これまでの累積値M(x(i)y(j))を用いてt(j)を計算する。このt(j)の値は、ユニット0のみで計算すればよく、後のステップではユニット0からユニット1へ、ユニット1からユニット2へというように順次伝達されていく。
【0127】
以上、処理の概略を述べたが、図18の剰余演算装置140では下記のような処理が行われる。まず、剰余演算制御部130に入力されたx、Nはそれぞれワードごとに区切られ、x(i)、N(i)がユニットiのRAM1に格納され、演算の適切なタイミングで各ユニットのレジスタR1やR2に読み出される。また、yについても同様にしてワードごとに区切られ、ユニット0のRAM1のみに格納される。y(j)はステップの進行に伴い、ユニット0からユニット1へ、ユニット1からユニット2へと、順次ユニットuまで各ユニットの配線A,aを通して送られる。ユニット0のRAM1にはNinvも格納されている。
【0128】
先に述べたように、ユニットiの動作は大きく分けて2つの動作に分けることができる。1つはx(i)y(j)を計算する式(31)のステップであり、もう一つはN(i)t(j)を計算する式(33)のステップである。
【0129】
式(31)のx(i)y(j)を計算するステップでは、準備としてレジスタR1にはRAM1よりx(i)が読み出されている。また、先に述べたようにy(j)はユニットi−1より配線aを通じてレジスタR2に格納されている。その他に、下位ワードから桁上がり値C(x(i−1)y(j))がレジスタR7、r2(R7にある桁上がり値とr2にある桁上がり値を加えたものがC(x(i−1)y(j))である)に、累積値M(N(i+1)t(j−1))がレジスタR5に格納されている。
【0130】
これらの下で、ユニットiでは式(31)のx(i)y(j)の演算を行う。処理後、累積値M(x(i)y(j))はレジスタR3に格納され、桁上がりC(x(i)y(j))はユニットi+1のレジスタR7、r2に分割して格納され、それぞれ次のステップで使用される。ここで、C(x(i)y(j))は、乗算器で生じた桁上がりと加算器で生じた桁上がりを加えたものであり、乗算器の桁上がりをR7に、加算器の桁上がりをr2に格納する。
【0131】
次に式(33)のN(i)t(j)を計算するステップでは、準備としてレジスタR1にはRAM1よりN(i)が読み出されている。また、先に述べたようにt(j)はユニットi−1より配線aを通じてレジスタR2に格納されている。その他に、下位ワードから桁上がり値C(N(i−1)t(j))がレジスタR7、r2(R7にある桁上がり値とr2にある桁上がり値を加えたものがC(N(i−1)t(j))である)に、累積値M(x(i)y(j))がレジスタR5に格納されている。
【0132】
これらの下で、ユニットiでは式(33)のN(i)t(j)の演算を行う。処理後、累積値M(N(i)t(j))はユニットi−1のレジスタR5に格納され、桁上がり値C(N(i)t(j))はユニットi+1のレジスタR7、r2に分割して格納され、それぞれ次のステップで使用される。C(x(i)y(j))と同様に、C(N(i)t(j))は乗算器で生じた桁上がりと加算器で生じた桁上がりを加えたものであり、乗算器の桁上がりをR7に、加算器の桁上がりをr2に格納する。
【0133】
また、ユニット0では、x(i)y(j)、N(i)t(j)の演算に加えて、式(32)のt(j)の計算も行う。これは、累積値M(x(0)y(j))をレジスタR2に、RAM1からNinvを読み出しレジスタR1に格納しておき、これを用いてt(j)=M(x(0)y(j))Ninv mod 2rと計算される。ここで計算されたt(j)は、各ユニットの配線A、aを通して順次上位ユニットへ送られ、それぞれのユニットで使用される。
【0134】
このようにしてj=0,1,…,nと演算を行い、j=nの処理が終了した時点でのユニット0からユニットu−2のレジスタR5に保存されているM(N(i)t(j))のn+1ワードが、モンゴメリ乗算の結果w(0),w(1),…,w(n)として出力される。
【0135】
第7の実施の形態は、ユニット数uをu<n+2と減らした場合にも、減らしたユニット数に比例した効率の低下のみしか起こらない“べき乗剰余”演算装置を提案するための基本形態となっており、u<n+2の場合の処理方法については第9の実施の形態で示すものとする。
【0136】
(第8の実施の形態)
第8の実施の形態では、ユニット数u>n+2の場合のモンゴメリ乗算を第7の実施の形態の図18と同じ構成を用いて場合の処理を説明する。この場合、第2の実施の形態、第5の実施の形態と同様に、下位n+2個のユニットをモンゴメリ乗算で使用し、n+2を超えるユニットは演算には用いないとすれば、第7の実施の形態に記載の方法によりモンゴメリ乗算を実行することが可能である。
【0137】
(第9の実施の形態)
第9の実施の形態では、ユニット数uが法Nのワード数よりも少ない、つまりu<n+2の場合のモンゴメリ乗算を第7の実施の形態、第8の実施の形態の図18と同じ構成を用いて行う場合の処理を説明する。この場合、ワード数よりユニット数が少なくなるため、1ユニットで複数ワードの演算を実施しなければならない。この各ユニットへの演算の割り振りは、剰余演算制御部130が入力された法Nのワード数nと剰余演算装置140のユニット数uにより各ユニットへの付加が均等化するようにに連続したsワードを割り振り、それに基づき剰余演算装置140の動作を制御する。剰余演算制御部130によるユニットへの演算の割り振りは、各ユニットの付加が均等であれば良く具体的には定める必要はないが、その一例としては、
s=[(n+2)/u]以上の最小の整数
とし、ユニット0からsワードずつをn+2ワードに達するまで順次各ユニットに割り振るような方法が考えられる。例えば、ユニット0からユニット3の4つのユニット(u=4)で8ワード(n=8)の演算を行うのであれば、ユニット0には1から3ワード目を、ユニット1には4から6ワード目を、ユニット2には7から9ワード目を、最後にユニット3には10ワード目を割り振るなどである。他の割り振り方としては、ユニット0、ユニット1にはそれぞれ3ワードずつを、ユニット2、ユニット3にはそれぞれ2ワードを割り振るとしても良い。
【0138】
まず、具体的な処理方法の説明に入る前に、簡単のため第7の実施の形態の説明で用いた例について、ユニット数u=2で実行する場合の処理について説明する。第7の実施の形態では図25のように演算を処理していたが、それに対応したものが図26である。図26では、図25と同じく列がユニット、行がステップを表しており、桁上がりを点線の矢印で、累積値を実践の矢印で表している。例では、n=2、u=2であるから、ユニット0ではx(0),y(1),N(0),N(1)、ユニット1ではx(2),N(2)と桁上がりワードというように、各ユニットが連続した2ワードの演算を受け持っている。ここで、注意しなければならないのは、第7の実施の形態と異なり第9の実施の形態では各ユニット内で連続したsワード(この例では2ワード)の演算を行うため、桁上がりと累積値の処理について桁合わせをする必要があることである。
【0139】
第9の実施の形態におけるユニットiの処理を一般的に記述すると下記のように書ける。
【0140】
第9の実施の形態におけるユニットiの処理アルゴリズム
つまり、ユニットiでは、j=0,1,…,nのそれぞれについて、x(si+k)y(j)をk=0,1,…,s−1について順次処理し、N(si+k)t(j)についてもk=0,1,…,s−1について順次処理する。ユニットiでx(si+s−1)y(j)の処理が終わった後、ユニットi+1でx(s(i+1))y(j)の処理を、同じくユニットiでN(si+s−1)t(j)の処理が終わった後、ユニットi+1でN(s(i+1))t(j)の処理を開始する。これに加えてユニット0では、式(35)のt(j)の計算も行う。以上により、u≧n+2の場合と同じ処理を、より少ないユニット数で実現することができる。
【0141】
ここで、上記の処理の剰余演算装置140での実装方法について述べる。ユニット内の要素の役割は基本的に第7の実施の形態と同じである。ただし、第7の実施の形態と異なり第9の実施の形態では各ユニット内で連続したsワードの演算を行うため、桁上がりCと累積値Mについて桁合わせをする必要があり、その点が大きく異なる。これは、計算されたC、Mの値をRAMもしくはそれに代わるものに保存しておき、適切なタイミングで演算部に供給することにより実現される。このタイミングを制御するのも剰余演算制御部130である。
【0142】
まず、剰余演算制御部130に入力されたx、Nは、それぞれワードごとに区切られて、ユニットiのRAM1にx(si+k)、N(si+k)(k=0,1,…,s−1)が保存され、演算の適切なタイミングでそれぞれのユニットのレジスタR1やR2に提供される。また、yについてもワードごとに区切られ、ユニット0のRAM1に格納される。y(j)はステップの進行に伴い、ユニット0からユニット1へ、ユニット1からユニット2へ、と順次ユニットuまで各ユニットの配線A、aを通して送られる。ユニット0には外部で計算されたNinvも格納されているものとする。
【0143】
ユニットiの動作は大きく分けて2つの動作に分けることができる。1つはx(si+k)y(j)(k=0,1,…,s−1)を計算する式(34)のステップであり、もう一つはN(si+k)t(j)(k=0,1,…,s−1)を計算する式(36)のステップである。
【0144】
式(34)のx(si+k)y(j)(k=0,1,…,s−1)を計算するステップでは、必要な際にRAM1よりレジスタR1にx(si+k)(k=0,1,…,s−1)が順次読み出される。また、先に述べたようにy(j)はユニットi−1より配線aを通じてレジスタR2に格納されているものとする。
【0145】
まず、x(si)y(j)、つまりk=0について計算する。式(34)のC(x(si−1)y(j))は下位ワードからの桁上がり値であり、ユニットi−1からレジスタR7、r2(R7にある桁上がり値とr2にある桁上がり値を加えたものがC(x(si−1)y(j))である)に送られている。また、M(N(si+1)t(j−1))は上位ワードからの累積値であり、これはRAM2から読み出されレジスタR4に格納されている。この下で、式(34)を計算し、その際の累積値M(x(si)y(j))はレジスタR3に格納されRAM2へ、桁上がりC(x(si)y(j))はレジスタR6、r1に格納され、x(si+1)y(j)を計算する際に使用される。ここで、C(x(si)y(j))は、乗算器で生じた桁上がりと加算器で生じた桁上がりを加えたものであり、乗算器の桁上がりをR6に、加算器の桁上がりをr1に格納する。
【0146】
以後、同様にしてx(si+1)y(j),x(si+2)y(j),…,x(si+s−1)y(j)の計算を行うが、x(si+s−1)y(j)では累積値M(N(s(i+1))t(j−1))が加えられなければならないが、これは後にN(si+k)t(j)のステップで述べるように既にレジスタR5に格納されており、これを加える。また、桁上がり値C(x(si+s−1)y(j))はユニットi+1のx(s(i+1))y(j)を計算する際に利用されるので、配線B、bを通してユニットi+1のレジスタR7、r2に送られる。
【0147】
次に、式(36)のN(si+k)t(j)(k=0,1,…,s−1)を計算するステップでは、必要な際にRAM1よりレジスタR1にN(si+k)(k=0,1,…,s−1)が順次読み出される。また、先に述べたようにt(j)はユニットi−1より配線aを通じてレジスタR2に格納されているものとする。
【0148】
まず、N(si)t(j)、つまりk=0について計算する。式(36)のC(N(i−1)t(j))は下位ワードからの桁上がり値であり、ユニットi−1からレジスタR7、r2(R7にある桁上がり値とr2にある桁上がり値を加えたものがC(N(i−1)t(j))である)に送られている。また、累積値M(x(si)y(j))はRAM2から読み出されレジスタR4に格納されている。この下で、式(36)を計算し、その際の累積値M(N(si)t(j))はユニットi−1のレジスタR5に格納され、桁上がり値C(N(si)t(j))はレジスタR6、r1に格納され、N(si+1)t(j)を計算する際に使用される。ここで、C(N(si)t(j))は、乗算器で生じた桁上がりと加算器で生じた桁上がりを加えたものであり、乗算器の桁上がりをR6に、加算器の桁上がりをr1に格納する。
【0149】
以後、同様にしてN(si+1)t(j),N(si+2)t(j),…,N(si+s−1)t(j)の計算を行うが、k=0の場合とは異なり、累積値M(N(si+k)t(j))はユニットiのレジスタR3に格納されRAM2へ送られる。また、N(si+s−1)t(j)では桁上がり値C(N(si+s−1)t(j))はユニットi+1のN(s(i+1))t(j)を計算する際に利用されるので、配線B、bを通してユニットi+1のレジスタR7、r2に送られる。
【0150】
また、上記x(si+k)y(j)、N(si+k)t(j)の計算以外に、ユニット0では式(35)のt(j)の計算も行う。これは、累積値M(x(0)y(j))をレジスタR2に、RAM1からNinvを読み出しレジスタR1に格納しておき、これを用いて計算される。ここで計算されたt(j)は、配線A、aを通して順次上位ユニットへ送られる。
【0151】
以後、u個のユニットそれぞれでj=nまでx(si+k)y(j)(k=0,1,…,s−1)とN(si+k)t(j)(k=0,1,…,s−1)の計算を繰り返すことによりモンゴメリ乗算を行う。
【0152】
第7の実施の形態ではu=n+2の場合について、第8の実施の形態ではu>n+2の場合について、第9の実施の形態ではu<n+2の場合について述べた。第7の実施の形態は、第9の実施の形態においてs=1としたものと等しい。よって、図18、図19、図20、図21に示した構成で、剰余演算制御部130による制御を変えることで第7の実施の形態、第8の実施の形態、第9の実施の形態の演算を実行できる剰余演算装置を構成でき、同じ剰余演算装置を用いて様々な法サイズの演算を効率良く実行できることが分かる。また、同じ法サイズの演算を、演算に用いるユニット数によらず効率よく処理できるため、スケーラビリティに優れた方式となっていることが分かる。
【0153】
このような構成にすることで、ユニット数とべき乗剰余算の相対処理速度の関係は、図27に示したようになる。図27は、法Nのサイズを512ビット、1024ビット、2048ビットとした際の、剰余演算装置の処理ユニット数とべき乗剰余算の相対処理速度を示したものである。u≦n+2の場合にはユニット数に比例した効率が得られることが分かり、回路規模あたりの処理速度で定義できる装置の効率がユニット数によらず一定になっていることが分かる。
【0154】
また、回路規模については、各ユニットは乗算器1個、加算器1個とレジスタなどから構成されるため、非特許文献4に比べて十分小さくすることが可能である。
【0155】
(第10の実施の形態)
次に、被演算子の連続した数ワードずつを各処理ユニットの負荷が均等化するように剰余演算の法サイズと処理ユニット数に応じて下位ユニットから割り振ることによりパイプライン処理の効率を高めた第7乃至第9の実施の形態において、第1乃至第6の実施の形態のt計算の前倒し処理を組み合わせる実施の形態を説明する。一例として、第9の実施の形態においてt計算部を独立させたものを第10の実施の形態として図29を参照して説明する。
【0156】
第10の実施の形態では、ユニット数uが法Nのワード数よりも少ない、つまりu<n+2の場合について述べる。第10の実施の形態では図29のように演算を処理する。例では、n=2、u=2であるから、ユニット0ではx(0),x(1),N(0),N(1)、ユニット1ではx(2),N(2)と桁上がりワードというように、各ユニットが連続した2ワードの演算を受け持ち、x(i)y(j)を計算するステップとN(i)t(j)を計算するステップを処理する。また、t計算部はユニット0からの入力M(x(i)y(j))に基づきt(j)の計算を行う。この際、各ユニットが受け持つワード数sが2ワード以上であれば、t計算部における前倒し計算は必要ない。sが1の場合には、第1の実施の形態と同様に前倒し計算をする必要がある。
【0157】
図26に示した第9の実施の形態においては、t計算をユニット0において計算していたが(ステップ3、8、…)、図29に示す第10の実施の形態では、ステップ2、6、…で処理ユニットでの処理と並列にt計算部でt計算も行っているので、さらなる高速化が達成される。図示していないが、第7、第8、第9の実施の形態も図29に示すように変形することができる。
【0158】
このように、第7乃至第10の実施の形態では、剰余演算装置のユニット数が法Nのワード数より少ない場合でも、そのユニット数において最適な処理性能が得られ、またモンゴメリ乗算の制御を変えるのみでユニットごとのモジュール性が高く柔軟性の高い方式となっているため、ユニットをモジュールとして用いて様々な法サイズに対応可能な柔軟な構成を持つ剰余演算装置が構成可能である。
【0159】
(第11の実施の形態)
第11の実施の形態では、1つの剰余演算装置で同時に複数の演算を行う方式について述べる。第7、第8、第9の実施の形態では、1つの剰余演算装置で1つの剰余乗算を行う場合について説明したが、図19、図20、図21に示したユニットの構成はモジュール性の高い構成となっており、1つの基本演算部131が持つu個のユニットを連続したユニットの集合に分けて使用することにより複数のモンゴメリ乗算を並行して行うことが可能である。この際の制御は、剰余演算制御部130が行う。
【0160】
例として、8個のユニットを具備する基本演算部131を持つ剰余演算装置140について考える。このとき、例えば法Nとして30ワードの値についてxyR−1 mod Nが入力された際には、1ユニットが4ワードを担当することになる。
【0161】
ここで、この剰余演算装置に、30ワードの法Nによるモンゴメリ乗算xyR−1 mod Nと、14ワードの法N’によるモンゴメリ乗算abR’−1 mod N’が入力された場合を考える。その場合、一つの実装方式としてはxyR−1 mod Nの計算が終わった後にabR’−1 mod N’を計算する方式が考えられる。
【0162】
第11の実施の形態では、これを1つの剰余演算装置を2つの部分に分けて利用することで行う。例えば、ユニット0からユニット3でxyR−1 mod Nの計算を行い、ユニット4からユニット7でabR’−1 mod N’の計算を行う。つまり、ユニット0からユニット3では各ユニットがそれぞれ8ワードの演算を、ユニット4からユニット7では各ユニットがそれぞれ4ワードの演算を受け持つこととなる。これを、図示したのが図28であり、この場合ユニット3からユニット4への情報の伝達は発生しない。
【0163】
この複数のモンゴメリ乗算を行う際の演算の制御も剰余演算制御部130が行い、ユニット0からユニット3と、ユニット4からユニット7を独立に動作させることで、複数のモンゴメリ乗算を並列に実行することができる。
【0164】
本発明は上述した実施の形態に限定されず、種々変形して実施可能である。例えば、本願発明は上記各実施の形態に限定されるものではなく、実施段階ではその趣旨を逸脱しない範囲で種々に変形することが可能である。また、各実施の形態は可能な限り適宜組み合わせて実施してもよく、その場合組合わせた効果が得られる。さらに、上記実施の形態には種々の段階の発明が含まれており、開示される複数の構成要件における適宜な組合わせにより種々の発明が抽出され得る。例えば、実施の形態に示される全構成要件から幾つかの構成要件が削除されても、発明が解決しようとする課題の欄で述べた課題の少なくとも1つが解決でき、発明の効果の欄で述べられている効果の少なくとも1つが得られる場合には、この構成要件が削除された構成が発明として抽出され得る。
【0165】
また、本発明は、コンピュータに所定の手段を実行させるための、コンピュータを所定の手段として機能させるための、あるいはコンピュータに所定の機能を実現させるためのプログラムを記録したコンピュータ読取り可能な記録媒体としても実施することもできる。
【0166】
【発明の効果】
以上説明したように本発明によれば、下記のような作用効果を奏する剰余演算装置、剰余演算方法、及びべき乗剰余演算装置を提供することができる。
【0167】
複数ユニットのパイプライン処理によるモンゴメリ乗算において、回路規模あたりの処理性能が最適化されており、かつ、tの計算によって余分な遅延が発生しない。
【0168】
クリティカルパスの短縮により、高い動作周波数での処理が可能である。
【0169】
整数のバイナリ表現の下で複数処理ユニットのパイプライン処理でモンゴメリ乗算を行う場合に、処理ユニット数をワード数以下に減らした場合でも、減らした処理ユニット数に比例した速度の低下のみしか起こらず、回路規模あたりの処理速度で定義される装置の効率が最適化されるため、RSA暗号の処理等に用いられるのに適する。
【図面の簡単な説明】
【図1】本発明の第1の実施の形態に係る“べき乗剰余”演算装置1の機能ブロックを示す図。
【図2】モンゴメリ乗算アルゴリズムの処理を示す図。
【図3】図2をワード単位に分割した場合の処理を示す図。
【図4】図3をパイプラインで扱う場合の処理を示す図。
【図5】第1の実施の形態に係る剰余演算装置14の機能ブロックを示す図。
【図6】第1の実施の形態に係るパイプライン処理の流れを示す図。
【図7】モンゴメリ乗算における変数tの演算途中結果依存性を示す図。
【図8】第1の実施の形態に係る処理ユニット31の構成及び処理動作を示す図。
【図9】第1の実施の形態に係るt計算部40の構成及び処理動作を示す図。
【図10】第1の実施の形態に係るキャリー部50の構成及び処理動作を示す図。
【図11】第3の実施の形態に係るパイプライン処理の流れを示す図。
【図12】第3の実施の形態に係る処理ユニット31の構成を示す図。
【図13】第3の実施の形態に係るt計算部の構成を示す図。
【図14】第4の実施の形態に係るパイプライン処理の流れを示す図。
【図15】第4の実施の形態に係る処理ユニット31の構成を示す図。
【図16】第4の実施の形態に係るt計算部40の構成を示す図。
【図17】第6の実施の形態に係るパイプライン処理の流れを示す図。
【図18】本発明の第7の実施の形態に係る剰余演算装置の構成を示す図。
【図19】第7の実施の形態に係る処理ユニット141の構成を示す図。
【図20】第7の実施の形態に係る最下位の処理ユニット141の構成を示す図。
【図21】第7の実施の形態に係る最上位の処理ユニット141の構成を示す図。
【図22】第7の実施の形態に係るモンゴメリ乗算における変数xと変数yの乗算手順を示す図。
【図23】第7の実施の形態に係るモンゴメリ乗算における変数Nと変数tの乗算手順を示す図。
【図24】第7の実施の形態に係るモンゴメリ乗算におけるxy+Ntの計算手順を示す図。
【図25】第7の実施の形態に係るxy+Ntの計算手順を示す図。
【図26】本発明の第9の実施の形態に係るxy+Ntの計算手順を示す図。
【図27】第9の実施の形態における処理ユニット数と法サイズによる相対処理速度の比較を示す図。
【図28】本発明の第11の実施の形態に係る剰余乗算装置を示す図。
【図29】本発明の第10の実施の形態に係るxy+Ntの計算手順を示す図。
【符号の説明】
1…べき乗剰余演算装置、11…入出力部、12…制御部、13…剰余演算部、14…剰余演算装置、15…Ninv演算部、21…N用レジスタ、22…R算出部、23…e用レジスタ、24…ビット長算出部、25…ei判定部、26…a’用レジスタ、27…b’用レジスタ、28…セレクタ、29…b判定部、30…基本演算部、31…パイプライン処理単位ユニット、32…積和回路、40…t計算部、41…積和回路、50…キャリー部、
Claims (14)
- 積和回路を有する複数の処理ユニットによるパイプライン処理を所定回実施し剰余を求める演算手段と、
あるパイプライン処理の前に、該あるパイプライン処理の一つ前のパイプライン処理においてある処理ユニットの処理結果に対して所定の演算を施し、該あるパイプライン処理の開始時に、該所定の演算の演算結果を該あるパイプライン処理の初段の処理ユニットへ供給する計算手段と、
を具備する剰余演算装置。 - 前記各処理ユニットは剰余演算における2種類の処理を1回ずつ交互に実行する1個の乗算器を具備する請求項1記載の剰余演算装置。
- 積和回路を有し、途中結果に依存した変数を用いてパイプライン処理を行い剰余を求める複数の処理ユニットと、
積和回路を有し、前記変数を前記途中結果が求められる前に求める1個の計算部と、
を具備する剰余演算装置。 - 前記各処理ユニットは剰余演算における2種類の処理を1回ずつ交互に実行する1個の乗算器を具備する請求項3記載の剰余演算装置。
- 前記計算部は剰余演算の最小動作周期である2クロックのうち、第1クロック目で前記変数の計算を行い、第2クロック目で前記変数を出力する請求項2または請求項3に記載の剰余演算装置。
- 整数a,e,Nに基づいてべき乗剰余ae mod Nを求めるべき乗剰余演算装置において、
積和回路を有する複数の処理ユニットによるパイプライン処理を所定回実施し剰余を求める基本演算手段と、あるパイプライン処理の前に、該あるパイプライン処理の一つ前のパイプライン処理においてある処理ユニットの処理結果に対して所定の演算を施し、該あるパイプライン処理の開始時に、該所定の演算の演算結果を該あるパイプライン処理の初段の処理ユニットへ供給する計算手段とを具備する剰余演算部と、
前記パイプライン処理を所定回実施した後の前記剰余演算部の演算結果が整数Nより大きいか同じ場合には該演算結果から整数Nを減した値を、また該演算結果が整数Nより小さい場合には該演算結果を、前記べき乗剰余として出力する判定手段と、
を具備するべき乗剰余演算装置。 - 積和回路を有する複数の処理ユニットによるパイプライン処理を所定回実施し剰余を求め、
あるパイプライン処理の前に、該あるパイプライン処理の一つ前のパイプライン処理においてある処理ユニットの処理結果に対して所定の演算を施し、該あるパイプライン処理の開始時に、該所定の演算の演算結果を該あるパイプライン処理の初段の処理ユニットへ供給する剰余演算方法。 - 積和回路を有する複数の処理ユニットに、途中結果に依存した変数を用いてパイプライン処理を行わせ剰余を求めさせ、
積和回路を有する1個の計算部に、前記変数を前記途中結果が求められる前に求めさせる剰余演算方法。 - 積和回路を有する複数の処理ユニットによるパイプライン処理を所定回実施し剰余を求める基本演算手段と、
剰余演算の法サイズと処理ユニット数に応じて前記基本演算手段を制御する制御手段と、
を具備する剰余演算装置。 - 前記各処理ユニットは剰余演算における2種類の処理を前記法サイズと処理ユニット数に応じた回数ずつ交互に実行する1個の乗算器を具備する請求項9載の剰余演算装置。
- 前記制御手段は、前記法サイズと処理ユニット数に応じて、前記各処理ユニットの負荷が均等化するように被演算子の連続した数ワードずつを下位ユニットから割り振り、パイプライン処理中は前記基本演算手段の前記処理ユニットに演算の桁が合うよう被演算子を供給し演算を行わせる請求項9記載の剰余演算装置。
- 整数a,e,Nに基づいてべき乗剰余ae mod Nを求めるべき乗剰余演算装置において、
積和回路を含む複数の処理ユニットによるパイプライン処理を所定回実施し剰余を求める基本演算手段と、剰余演算の法サイズと処理ユニット数に応じて前記基本演算手段を制御する制御手段とを具備する剰余演算部と、
前記パイプライン処理を所定回実施した後の前記剰余演算部の演算結果が整数Nより大きいか同じ場合には該演算結果から整数Nを減した値を、また該演算結果が整数Nより小さい場合には該演算結果を、前記べき乗剰余として出力する判定手段と、
を具備するべき乗剰余演算装置。 - 積和回路を有する複数の処理ユニットにパイプライン処理を所定回実施させ剰余を求めさせ、
剰余演算の法サイズと処理ユニット数に応じて前記各処理ユニットの負荷が均等化するように被演算子の連続した数ワードずつを下位ユニットから割り振り、
各処理ユニットは剰余演算における2種類の処理を前記法サイズと処理ユニット数に応じた回数ずつ交互に実行する剰余演算方法。 - 積和回路を有する複数の処理ユニットにパイプライン処理を所定回実施させ剰余を求めさせ、
剰余演算の法サイズと処理ユニット数に応じて前記各処理ユニットの負荷が均等化するように被演算子の連続した数ワードずつを下位ユニットから割り振り、
パイプライン処理中は前記処理ユニットに演算の桁が合うよう被演算子を供給する剰余演算方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003142242A JP2004280036A (ja) | 2002-05-20 | 2003-05-20 | 剰余演算装置、剰余演算方法、及びべき乗剰余演算装置 |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002144154 | 2002-05-20 | ||
JP2003016296 | 2003-01-24 | ||
JP2003142242A JP2004280036A (ja) | 2002-05-20 | 2003-05-20 | 剰余演算装置、剰余演算方法、及びべき乗剰余演算装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2004280036A true JP2004280036A (ja) | 2004-10-07 |
Family
ID=33303625
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003142242A Pending JP2004280036A (ja) | 2002-05-20 | 2003-05-20 | 剰余演算装置、剰余演算方法、及びべき乗剰余演算装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2004280036A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008535011A (ja) * | 2005-04-01 | 2008-08-28 | テールズ | モンゴメリーのモジュラー乗算を実行する方法及びそのための装置 |
-
2003
- 2003-05-20 JP JP2003142242A patent/JP2004280036A/ja active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008535011A (ja) * | 2005-04-01 | 2008-08-28 | テールズ | モンゴメリーのモジュラー乗算を実行する方法及びそのための装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Yang et al. | A new RSA cryptosystem hardware design based on Montgomery's algorithm | |
Walter | Systolic modular multiplication | |
Kwon et al. | Two implementation methods of a 1024-bit RSA cryptoprocessor based on modified Montgomery algorithm | |
JP4201980B2 (ja) | マルチプレシジョン整数演算用の装置 | |
JP2004501396A (ja) | 整数の計算フィールド範囲の拡張 | |
US6209016B1 (en) | Co-processor for performing modular multiplication | |
CN100435090C (zh) | 可扩展高基蒙哥马利模乘算法及其电路结构 | |
US7805479B2 (en) | Scalable, faster method and apparatus for montgomery multiplication | |
US20040267855A1 (en) | Method and apparatus for implementing processor instructions for accelerating public-key cryptography | |
EP1471420A2 (en) | Montgomery modular multiplier and method thereof using carry save addition | |
US8078661B2 (en) | Multiple-word multiplication-accumulation circuit and montgomery modular multiplication-accumulation circuit | |
KR100591761B1 (ko) | 몽고메리 모듈러 곱셈기 및 캐리 저장 가산을 이용한몽고메리 모듈러 곱셈 방법 | |
EP0502782A2 (en) | Microcircuit for the implementation of RSA algorithm and ordinary and modular arithmetic, in particular exponentiation, with large operands | |
US7240204B1 (en) | Scalable and unified multiplication methods and apparatus | |
US7266577B2 (en) | Modular multiplication apparatus, modular multiplication method, and modular exponentiation apparatus | |
Liu et al. | A regular parallel RSA processor | |
KR100950117B1 (ko) | 유사한 효율을 갖는 무작위 키 비트 길이 암호화 조작의 프로세싱을 위한 장치 및 방법 | |
Kelley et al. | Parallelized very high radix scalable Montgomery multipliers | |
US7607165B2 (en) | Method and apparatus for multiplication and/or modular reduction processing | |
KR20080050226A (ko) | 모듈러 곱셈 장치 및 설계 방법 | |
Wang et al. | New VLSI architectures of RSA public-key cryptosystem | |
Walter | Improved linear systolic array for fast modular exponentiation | |
Huai et al. | Efficient architecture for long integer modular multiplication over Solinas prime | |
Tenca et al. | A design framework for scalable and unified multipliers in GF (p) and GF (2m) | |
KR100481586B1 (ko) | 모듈러 곱셈 장치 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20040902 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20070731 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20071001 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20080311 |