説明

乗算剰余演算器及び情報処理装置

【課題】 回路規模を増大させることなく、演算時間を短縮できる乗算剰余演算器及び情報処理装置を提供する。
【解決手段】 S=S+A×B+u×Nを算出するための乗算剰余演算器であって、複数のビット数q単位で供給される乗数B、Nの値をBooth法に基づいて変換し、該変換後のBに対応する被乗数Aの整数倍の値を選択して出力し、該変換後のNに対応する被乗数uの整数倍の値を選択して出力する論理回路と、論理回路から順次出力される値を用いてA×B+u×Nの演算を実行する桁上げ保存加算器と、桁上げ保存加算器からビット数q単位で出力されるA×B+u×Nの演算結果とビット数q単位で供給される過去の該演算結果とを加算し、該加算結果を乗算剰余演算結果Sとして出力する加算器とを有する構成とする。

【発明の詳細な説明】
【技術分野】
【0001】
本発明はべき乗剰余演算を効率よく処理するための乗算剰余演算器及びそれを備えた情報処理装置に関する。
【背景技術】
【0002】
近年、パーソナルコンピュータやPDA(Personal Digital(Data) Assistants)あるいは携帯電話機等の各種情報処理装置の処理能力が飛躍的に向上し、さらに各種記録メディアの大容量化や通信インフラストラクチャーの整備が進んだことで、個人情報や企業情報等がネットワークや無線手段を介して送受信される機会が増大している。そのため、それらの情報を秘匿化し第三者への漏洩を防ぐ技術が益々重要になってきている。
【0003】
送受信データを秘匿化するための一般的な手法としては、データを送受信する端末装置どうしが共通の鍵を用いて該データの暗号化と復号を行う共通鍵暗号方式がよく知られている。さらに、近年ではBtoB、BtoC等の電子商取引の拡大に伴ってPKI(Public Key Infrastructure)技術が注目されている。
【0004】
PKIの基本技術である公開鍵暗号方式は、公開鍵を用いて送信データを暗号化し、該公開鍵とペアとなる公開することのない秘密鍵を用いて受信データを復号する方式である。この公開鍵暗号方式は、送信側と受信側で異なる鍵を用い、かつ秘密鍵を通信相手に通知する必要が無いため、上述した共通鍵暗号方式に比べて秘匿化性能が向上する。
【0005】
公開鍵暗号方式では、現在、RSA(Rivest, Shamir Adleman)暗号が主として用いられている(例えば、非特許文献1参照)。RSA暗号は、任意の2つの素数を乗算した値Nの素因数分解の困難性とNを法とする数の世界の性質とを利用する暗号化方式であり、暗号化及び復号化のためにべき乗剰余演算(MdmodN)を実行する。
【0006】
べき乗剰余演算は、通常、以下に示す乗算剰余演算の繰り返し処理に置き換えて実行される。
【0007】
例えば、d=19とするとき、C=MdmodNは、
d=19=1+2×(1+2×(0+2×(0+2×1)))により、
C=M19modN
=M1+2×(1+2×(0+2×(0+2×1)))modN
=(((((M120202121modN
=(((M222M)2MmodN
となる。このようにdを分解すれば、Mを単純にd回掛けるよりも演算回数を低減できるため、演算時間を短縮できる。なお、dの分解方法については様々な方法が知られており、上記はその一例を示している。
【0008】
しかしながら、このような乗算剰余演算も、乗算によって演算桁数が倍になり、さらにその乗算結果をNで除算するため、ハードウェアまたはソフトウェアのいずれを利用しても効率よく処理するのが非常に困難な演算である。そのため、乗算剰余演算を効率化するための様々な手法が検討され、代表的な例としてモンゴメリ(Montgomery)法と呼ばれるアルゴリズムを応用した演算方法が知られている(例えば、特許文献1参照)。
【0009】
モンゴメリ法を応用すると、除算を実質的に行わずに乗算と加減算で上記乗算剰余演算が実現可能であり、乗算剰余演算P(AB)N=AB・r-nmodN=Sは、例えば、以下の(1)〜(8)で示す手順で求めることができる。但し、0≦N<rn、Nは奇数(Nとrは互いに素である)、0≦A<N、0≦B<N、A=An-1n-2…A0(例えばA=A3210=1234)である。
(1)v=−N-1modr
(2)S=0
(3)for i=0 to n−1 {
(4) S=S+Ai・B
(5) u=S・vmodr
(6) S=S+u・N
(7) S=S/r
(8)}
乗算剰余演算は、上記アルゴリズムからS=S+Ai×B+u×N(i=0〜n−1)の繰り返し演算処理に置き換え可能であり、この処理を実現するための回路である乗算剰余演算器は、例えば図7に示すような構成になる。
【0010】
図7は従来の乗算剰余演算器の構成を示すブロック図である。
【0011】
図7に示すように、従来の乗算剰余演算器は、被乗数である上記Aの値を保持する第1のラッチ回路51と、被乗数である上記uの値を保持する第2のラッチ回路52と、A+uの値を保持する第3のラッチ回路53と、1ビット毎に供給される乗数B、Nの値に応じて被乗数A、u、A+u、または0H(全ビット0)を選択し出力するセレクタ57と、セレクタ57から出力される値を用いてA×B+u×Nの演算を行う周知の桁上げ保存加算器(Carry Save Adder:以下、CSAと称す)56と、CSA56から出力される乗算剰余演算結果Sと外部で保持された算出済みの乗算剰余演算結果Sとを加算し、該加算結果を乗算剰余演算結果Sとして出力する加算器59とを有する構成である。なお、A、u、及びA+uの各値は、例えば不図示の制御部により第1のラッチ回路51〜第3のラッチ回路53に供給され、乗数B、N、及び0Hの各値は、例えば不図示の制御部によりセレクタ57に供給される。
【0012】
図7に示す乗算剰余演算器では、乗算剰余演算器の処理ビット長(例えば、512bit)の乗数B、Nがそれぞれ1ビット単位でセレクタ57に供給される。また、被乗数A、u、A+uは、CSA56の処理ビット長(図7ではmビット)に対応して、該ビット長単位でラッチ回路に格納され、CSA56に供給される。したがって、例えば乗算剰余演算器の処理ビット長が512bitであり、CSA56の処理ビット長が128bitの場合、図7に示す構成では、被乗数A、u、A+uの選択処理を512回繰り返すことでA(128bit)×B(512bit)+u(128bit)×N(512bit)の演算が完了し、さらにA(128bit)×B(512bit)+u(128bit)×N(512bit)の演算を4回繰り返すことで、A(512bit)×B(512bit)+u(512bit)×N(512bit)の演算処理が完了することになる。
【0013】
セレクタ57は、1ビットづつ供給される乗数B、Nの値に応じて、第1のラッチ回路51〜第3のラッチ回路53から供給される被乗数A、u、A+u、または0Hを選択しCSA56に供給する。CSA56は、セレクタ57から順次供給される被乗数A、u、A+uまたは0Hをシフト加算することでA×B+u×Nを算出し、その中間演算結果を保持しつつ乗算剰余演算結果Sを1ビット単位で出力する。
【非特許文献1】三谷政昭著、「やり直しのための工業数学」、第5版、CQ出版社、2003年2月1日、p.115−122
【特許文献1】特表2001−527673号公報
【発明の開示】
【発明が解決しようとする課題】
【0014】
現在、公開鍵暗号方式では、上記べき乗剰余演算のC、M、N、dに1024ビットの数値を用いたRSA暗号が広く利用され、さらにビット数が増えることも予想される。そのため、暗号化及び復号化に膨大な量の乗算剰余演算を実行しなければならない。公開鍵暗号方式は、暗号化及び復号化に要する処理時間が共通鍵暗号方式に比べて長いことが問題であり、乗算剰余演算に要する演算時間の短縮が重要な課題となっている。
【0015】
図7に示した従来の乗算剰余演算器では、例えば被乗数を保持するラッチ回路やCSAの処理ビット長を拡張して一度に処理できるビット数を増やせば、繰り返し処理回数が低減するため演算時間が短縮する。しかしながら、CSAの処理ビット長を拡張すると、CSA内部の中間演算結果を保持するレジスタ、被乗数を保存するためのラッチ回路、及びセレクタ回路のビット長が増えるため、乗算剰余演算器の回路規模が増大してしまう問題がある。
【0016】
市場では、携帯電話機、PDA、パーソナルコンピュータやサーバ装置等の情報処理装置の普及に伴い、処理性能が高く、かつ低コストな製品が求められている。したがって、このような要求を満たすためには、乗算剰余演算に要する演算時間を短縮すると共に、回路規模の削減を実現できる乗算剰余演算器が必須となる。
【0017】
本発明は上記したような従来の技術が有する問題点を解決するためになされたものであり、演算時間をより短縮できる乗算剰余演算器及び情報処理装置を提供することを目的とする。
【0018】
また、本発明のさらなる目的は、回路規模を増大させることなく演算時間を短縮できる乗算剰余演算器及び情報処理装置を提供することにある。
【課題を解決するための手段】
【0019】
上記目的を達成するため本発明の乗算剰余演算器は、被乗数をA、uとし、乗数をB、Nとし、乗算剰余演算結果をSとしたとき、S=S+A×B+u×Nを算出するための乗算剰余演算器であって、
Booth法に基づいて変換された複数のビット数q単位で供給される前記乗数Bの値に対応する前記被乗数Aの整数倍の値を選択して出力し、前記Booth法に基づいて変換された複数のビット数q単位で供給される前記乗数Nの値に対応する前記被乗数uの整数倍の値を選択して出力する論理回路と、
前記論理回路から順次出力される値を用いてA×B+u×Nの演算を実行する桁上げ保存加算器と、
前記桁上げ保存加算器から前記ビット数q単位で出力される前記A×B+u×Nの演算結果と、前記ビット数q単位で供給される過去の該演算結果とを加算し、該加算結果を前記乗算剰余演算結果Sとして出力する加算器と、
を有する構成である。
【0020】
または、被乗数をA、uとし、乗数をB、Nとし、乗算剰余演算結果をSとしたとき、S=S+A×B+u×Nを算出するための乗算剰余演算器であって、
複数のビット数q+1単位で供給される乗数Bの値をBooth法に基づいて変換し、該変換後の値に対応する前記被乗数Aの整数倍の値を選択して出力し、前記ビット数q+1単位で供給される前記乗数Nの値をBooth法に基づいて変換し、該変換後の値に対応する前記被乗数uの整数倍の値を選択して出力する論理回路と、
前記論理回路から順次出力される値を用いてA×B+u×Nの演算を実行する桁上げ保存加算器と、
前記桁上げ保存加算器から前記ビット数q単位で出力される前記A×B+u×Nの演算結果と、前記ビット数q単位で供給される過去の該演算結果とを加算し、該加算結果を前記乗算剰余演算結果Sとして出力する加算器と、
を有する構成である。
【0021】
一方、本発明の情報処理装置は、上記乗算剰余演算器と、
前記被乗数Aを保持し、前記セレクタに供給する第1の記憶素子と、
前記被乗数uを保持し、前記セレクタに供給する第2の記憶素子と、
前記加算器から出力される前記乗算剰余演算結果Sを保持し、前記ビット数q単位で該乗算剰余演算結果Sを前記加算器に供給する第3の記憶素子と、
をさらに有する構成である。
【0022】
上記のように構成された乗算剰余演算器及び情報処理装置では、Booth法に基づいて乗数を変換し、該変換後の値に対応する被乗数の整数倍の値を選択してCSAに供給するため、CSAの処理ビット長を短縮できる。
【0023】
また、本発明の乗算剰余演算器及び情報処理装置は、予め算出された、前記被乗数A、前記乗数B、前記乗数N、及び前記乗算剰余演算結果Sの値に対する前記被乗数uの値の関係が格納されるu生成部をさらに有し、
制御部により、前記S=S+A×B+u×Nの演算時に前記u生成部を参照することで前記被乗数uの値を決定する構成である。ここで、前記ビット数qは2または4であることが望ましい。
【0024】
上記のような乗算剰余演算器は、ビット数qを2または4とすることで、u生成部の回路規模の増大を抑制できる。
【発明の効果】
【0025】
本発明の乗算剰余演算器及び情報処理装置は、CSAの処理ビット長を短縮できるため、従来の乗算剰余演算器よりも演算時間を短縮できる。
【0026】
また、CSAの処理ビット長を短縮することで、CSAが備えるフリップフロップ数が低減するため、乗算剰余演算器の回路規模が低減する。特に、ビット数qを2または4とすれば、u生成部の回路規模が増大することがないため、回路規模を増大させることなく演算時間を短縮できる。
【発明を実施するための最良の形態】
【0027】
次に本発明について図面を参照して説明する。
【0028】
まず、本発明の乗算剰余演算器で利用するBooth法について簡単に説明する。
【0029】
Booth法とは、2の補数表現を利用することで乗算の演算回数を低減する手法である。例えば、A×011111の演算を行う場合、通常、A×011111=A×010000+A×001000+A×000100+A×000010+A×000001を実行するため、5回の演算処理が必要である。しかしながら、上記2の補数表現を利用すると、乗数である011111を10000−1で表すことができるため、A×011111=A×10000−1=A×100000−A×000001となり、2回の演算処理で済む。
【0030】
Booth法では、A×Bを計算する際に、例えば乗数Bを2bit + 重複1bit = 3bit毎に分割し、該分割した乗数Bによる部分積を繰り返し実行する。分割した3bitに対応する部分積の値は表1のようになる。なお、図1はBooth法により乗数011111を2ビット毎に(上記重複1bitを加えると3ビット)変換する際の具体例を示している。
【0031】
【表1】

【0032】
乗数を2ビット毎に変換する場合、変換対象である乗数は0、1、2、3のいずれかの値となる(基数4)。一方、Booth法による変換後の乗数は、表1に示したように0、+1、−1、+2、−2のいずれかの値となる。
【0033】
したがって、変換前の乗数(2bit)を用いて乗算を行う場合、乗算結果に対応する値として被乗数の0〜3倍の値をそれぞれ用意する必要がある。例えば、被乗数をA、乗数をBとすると、乗数Bが0(0,0)の場合は0、乗数Bが1(0,1)の場合は1A、乗数Bが2(1,0)の場合は2A、乗数Bが3(1,1)の場合は3AをCSAへ供給するため、これらの値を予め用意する必要がある。ここで、0及び1Aは演算処理を必要としない値であり、2Aは、2進数である1Aの値を1ビットずつシフトし、最下位ビットに0をセットすればよいため、実質的に演算処理を必要としない値である。しかしながら、3Aは、1A+2Aの値を事前に計算するか、または1A及び2Aの2つの値をCSAへそれぞれ供給する必要がある。
【0034】
このような処理でも、被乗数に対して乗数を2bit毎に乗算するため、従来の乗算剰余演算器のように被乗数に対して乗数を1bit毎に乗算する構成(図7参照)に比べて処理時間を短縮できる。しかしながら、1A+2Aを事前に計算しておく場合は、そのための加算器が必要になるため回路規模が増大する。一方、1A及び2Aの2つの値をCSAへ供給する場合は、CSAへの入力データ数が増大するため、CSAの回路規模が増大してしまう。
【0035】
これに対して、Booth法を用いて乗数を変換すると、0、±1、±2倍の被乗数、すなわち、0、±1A、±2AのいずれかをCSAへ供給すればよい。このとき、0、1A、2Aの値は、上述したように実質的な演算処理を必要としないため容易に得ることができる。但し、−1A(−2A)の値は、1A(2A)の値を反転し、1を足すことで表現するため、負の数であることを示すサインビット(1bit)が必要となる。
【0036】
本発明の乗算剰余演算器は、乗数B、Nのビット列を、所定のビット数毎にBooth法を用いて変換し、変換後の乗数B、Nの値に対応する被乗数A、uの整数倍の値(0、±1、±2)を用いてCSAによりA×B+u×Nの演算処理を行う構成である。
【0037】
図2は本発明の乗算剰余演算器の一構成例を示すブロック図である。
【0038】
図2に示すように、本発明の乗算剰余演算器は、被乗数Aの値を保持する第1のラッチ回路1と、被乗数uの値を保持する第2のラッチ回路2と、複数ビット(図2では3bit)毎に供給される乗数Bの値に対応する被乗数Aの整数倍の値(0、±1A、±2A)を選択して出力する第1の論理回路(logic1)4と、複数ビット(図2では3bit)毎に供給される乗数Nの値に対応する被乗数uの整数倍の値(0、±1u、±2u)を選択して出力する第2の論理回路(logic2)5と、第1の論理回路4及び第2の論理回路5から供給される値を用いてA×B+u×Nの演算を実行する周知のCSA6と、CSA6から複数ビット(図2では2bit)単位で出力される乗算剰余演算結果Sを保持し、複数ビット(図2では2bit)単位で出力する第1のシフトレジスタ8と、CSA6から出力されるA×B+u×Nの演算結果と第1のシフトレジスタ8の出力とを加算し、加算結果を乗算剰余演算結果Sとして第1のシフトレジスタ8に再び格納する加算器9と、被乗数uの値を生成するためのテーブルが格納されるu生成部10と、被乗数A、uの値を第1のラッチ回路1及び第2のラッチ回路2に供給し、乗数B、Nの値を第1及び第2の論理回路4、5に供給すると共に、CSA6、第1のシフトレジスタ8及びu生成部10の動作を制御する制御部11とを有する構成である。
【0039】
本発明の乗算剰余演算器は、制御部11による被乗数A、uのラッチ回路へのセット、及び乗数B、Nの第1の論理回路4及び第2の論理回路5へのセットを契機に、外部から供給される所定周波数のクロック(CK)にしたがって動作する回路であり、制御部11は、例えばプログラムにしたがって動作するCPU、DSPあるいは論理回路等によって実現される。
【0040】
このような構成において、本発明の乗算剰余演算器では、被乗数A、uが、例えばCSA6の処理ビット長に対応して複数に分割され、制御部11により該分割単位で第1及び第2のラッチ回路1、2に格納される。また、第1のラッチ回路1から第1の論理回路4へはCSA6の処理ビット長に対応してnビット単位で被乗数Aが供給され、第2のラッチ回路2から第2の論理回路5へはCSA6の処理ビット長に対応してnビット単位で被乗数uが供給される。一方、乗数B、Nは、例えば制御部11から3bit単位で第1及び第2の論理回路4、5に供給される。
【0041】
なお、乗数B、Nは、例えばシフトレジスタやRAM等のように、格納されたデータを複数ビット単位で出力できる記憶素子に一旦格納し、該記憶素子から所定の複数ビット単位で第1及び第2の論理回路4、5へ供給してもよい。その場合、記憶素子には、制御部11により乗算剰余演算器の処理ビット長単位、あるいはそれを複数ビット長毎に分割した分割単位で乗数B、Nが格納される。
【0042】
また、図2では、乗数B、Nを3bit(2bit+重複1bit)単位で第1及び第2の論理回路4、5に供給する例を示しているが、乗数B、Nの供給単位は4bit以上であってもよい。例えば、基数が16の場合、乗数B、Nは5bit(4bit+重複1bit)単位で第1及び第2の論理回路4、5に供給される。
【0043】
第1の論理回路4は、第1のラッチ回路1から供給される被乗数Aの値を用いて±1A、±2Aを生成し、3bit毎に供給される乗数BをBooth法に基づいて変換し、該変換結果に対応する0、±1A、±2Aのいずれかを選択し、選択結果をn+4ビット単位でCSA6へ供給する。また、第2の論理回路5は、第2のラッチ回路2から供給される被乗数uの値を用いて±1u、±2uを生成し、3bit毎に供給される乗数NをBooth法に基づいて変換し、該変換結果に対応する0、±1u、±2uのいずれかを選択し、選択結果をn+4ビット単位でCSA6へ供給する。図2では2つの論理回路を用いて0、±1A、±2A、または0、±1u、±2を選択する例を示しているが、乗数B、Nの値に対応する0、±1A、±2A、または0、±1u、±2を選択できれば、論理回路の数はいくつであってもよい。また、図2では第1の論理回路4及び第2の論理回路5により3bit毎に供給される乗数BをBooth法に基づいて変換する例を示しているが、制御部11により変換後の値を第1の論理回路4及び第2の論理回路5に供給する構成であってもよい。その場合、第1の論理回路4には2bit毎に乗数Bが供給され、第2の論理回路5には2bit毎に乗数Nが供給される。
【0044】
第1の論理回路4及び第2の論理回路5から出力される被乗数の選択値がn+4ビット単位となる理由は以下による。
【0045】
例えば、最初の演算において乗数B、Nの値により2A、2uが選択された場合、CSA6による演算結果Sは、
S=2A[n:0]+2u[n:0]
となる。
【0046】
このとき、(n+1bit)+(n+1bit)より、演算結果Sの桁数は(n+2bit)となる。
【0047】
この演算結果Sのうち、下位2ビットがCSA6から出力され、残りのnビットはCSA6に保存されて次の演算で加算される。
【0048】
続いて、次の演算において乗数B、Nの値により再び2A、2uが選択されると、CSA6による演算結果Sは、
S=2A[n:0]+2u[n:0]+S[n-1:0]
となる。
【0049】
このとき、演算結果Sの桁数は(n+1bit)+(n+1bit)+(nbit)より(n+3bit)となる。
【0050】
この演算結果Sのうち、下位2ビットがCSA6から出力され、残りのn+1ビットはCSA6に保存されて次の演算で加算される。
【0051】
さらに、次の演算において乗数B、Nの値により再び2A、2uが選択されると、CSA6による演算結果Sは、
S=2A[n:0]+2u[n:0]+S[n:0]
となる。
【0052】
このとき、演算結果Sの桁数は(n+1bit)+(n+1bit)+(n+1bit)より(n+3bit)となる。
【0053】
この演算結果Sのうち、下位2ビットがCSA6から出力され、残りのn+1ビットはCSA6に保存されて次の演算で加算される。以下、同様の演算処理が繰り返され、演算の終了毎に下位2ビットが出力され、n+1ビットがCSA6で保存されて次の演算で利用される。このとき、演算結果Sの桁数は(n+1bit)+(n+1bit)+(n+1bit)であり、必ず(n+3bit)内に収まる。
【0054】
したがって、最大値である2A、2uが加算される場合を考慮しても演算結果Sの桁数は最大でもn+3ビットとなる。但し、負の最大値(−2A、−2u)が繰り返し選択される場合を考慮すると、負の数であることを示すサインビット(1bit)が必要となるため、演算結果Sの桁数は合計でn+4ビットになる。よって、第1の論理回路4及び第2の論理回路5からCSA6に供給する被乗数の選択値も演算結果Sの桁数に合わせて最大でn+4ビットとなる。
【0055】
CSA6は、各論理回路から順次供給される値をシフト加算することでA×B、及びu×Nをそれぞれ算出し、それらの加算結果Sを出力する。本発明の乗算剰余演算器が備えるCSA6は、第1及び第2の論理回路4、5から最大でn+4ビットのデータが供給されるため、このビット拡張に対応する分だけ従来の乗算剰余演算器が備えるCSAよりも処理ビット長が拡張される。CSA6は、桁上げ(carry)出力及び加算結果(sum)出力が格納されるシフトレジスタをそれぞれ備え、該シフトレジスタを用いて中間演算結果を保持しつつ演算結果Sを複数ビット単位(図2では2bit)で出力する。CSA6から出力された演算結果Sは、第1のシフトレジスタ8の出力(過去の乗算剰余演算結果S)と複数ビット単位で加算され、加算結果は第1のシフトレジスタ8に再び格納される。
【0056】
なお、図2に示した第1のラッチ回路1、第2のラッチ回路2、第1のシフトレジスタ8及びu生成部10は、乗算剰余演算器の内部に備えている必要はなく、乗算剰余演算器を利用する情報処理装置に備えていてもよい。同様に、乗数B、Nの値を一時的に保持する記憶素子を備えている場合、該記憶素子は乗算剰余演算器の内部に備えている必要はなく、乗算剰余演算器を利用する情報処理装置に備えていてもよい。さらに、制御部11も乗算剰余演算器の内部に備えている必要はなく、乗算剰余演算器を利用する情報処理装置が備える処理装置(CPU)によって実現してもよい。すなわち、乗算剰余演算器は、図2の点線内の構成要素のみを備えていればよい。
【0057】
また、被乗数A、uは、ラッチ回路に格納する必要はなく、例えばシフトレジスタやRAM等のようにデータを一時的に保持できる記憶素子であればどのようなものを用いてもよい。
【0058】
図3に示すように、本発明の情報処理装置は、例えばパーソナルコンピュータやサーバ装置等のコンピュータシステムであり、プログラムにしたがって所定の処理を実行する処理装置20と、処理装置20に対してコマンドや情報等を入力するための入力装置30と、処理装置20の処理結果をモニタするための出力装置40とを有する構成である。
【0059】
処理装置20は、CPU21と、CPU21の処理に必要な情報を一時的に記憶する主記憶装置22と、CPU21に上記制御部11の処理を実行させるプログラムが記録された記録媒体23と、処理に必要なデータ等を蓄積するデータ蓄積装置24と、主記憶装置22、記録媒体23、及びデータ蓄積装置24とのデータ転送を制御するメモリ制御インタフェース部25と、入力装置30及び出力装置40とのインタフェース装置であるI/Oインタフェース部26と、図1に示した乗算剰余演算器27と、ネットワーク等との通信を制御するインタフェースである通信制御装置28とを備え、それらがバス29等を介して接続された構成である。なお、処理装置20には、乗算剰余演算器27の構成に応じて、被乗数A、uを保持するラッチ回路、及び乗数B、N、及び演算結果Sを保持するシフトレジスタ等を備えていてもよい。
【0060】
処理装置20は、記録媒体23に記録されたプログラムにしたがってCPU21により上記制御部11の処理を実行し、乗算剰余演算器27を用いてS=S+Ai×B+u×Nの演算を実行する。なお、記録媒体23は、磁気ディスク、半導体メモリ、光ディスクあるいはその他の記録媒体であってもよい。
【0061】
次に、本発明の乗算剰余演算器の動作について図面を用いて具体的に説明する。
【0062】
以下では、A、u、B、Nがそれぞれ512bitであり、処理ビット長が64bitのCSA6を用い、乗数B、Nが3bit単位で第1の論理回路4及び第2の論理回路5へ供給され、第1のシフトレジスタ8が2bit単位で乗算剰余演算結果Sを入出力する場合を例にして説明する。また、第1及び第2のラッチ回路1、2には被乗数A、uがCSA6の処理ビット長に合わせて64bit単位で格納されるものとする。
【0063】
処理ビット長が64bitのCSA6を用い、乗数B、Nを3bit単位で出力する場合、A、u、B、Nがそれぞれ512bitの乗算剰余演算(512bit×512bit×2-512 mod 512bit)は、64bit×512bit×2-64 mod 512bit(A×B×2-64 mod N)の演算を繰り返し実行すればよい。
【0064】
本発明の乗算剰余演算器では、モンゴメリ法による乗算剰余演算の特徴である、下位ビットが0になることを利用して(ここでは、下位64bitが0H)、上記S、A、B、Nの値に対応するuを予め算出し、u生成部10にテーブル形式で格納しておく。
【0065】
例えば、乗数を2bit(重複1bitを除く)単位で出力する場合、uの値を以下のようにして求める(但し、Nは奇数)。
【0066】
N[1:0]=01,(S+AiB)[1:0]=00のとき、
S=S+AiB+uN=00となるuは、u[1:0]=00
N[1:0]=01,(S+AiB)[1:0]=01のとき、
S=S+AiB+uN=00となるuは、u[1:0]=11
N[1:0]=01,(S+AiB)[1:0]=10のとき、
S=S+AiB+uN=00となるuは、u[1:0]=10
N[1:0]=01,(S+AiB)[1:0]=11のとき、
S=S+AiB+uN=00となるuは、u[1:0]=01
N[1:0]=11,(S+AiB)[1:0]=00のとき、
S=S+AiB+uN=00となるuは、u[1:0]=00
N[1:0]=11,(S+AiB)[1:0]=01のとき、
S=S+AiB+uN=00となるuは、u[1:0]=01
N[1:0]=11,(S+AiB)[1:0]=10のとき、
S=S+AiB+uN=00となるuは、u[1:0]=10
N[1:0]=11,(S+AiB)[1:0]=11のとき、
S=S+AiB+uN=00となるuは、u[1:0]=11
以上をまとめると、表2のようになる。
【0067】
【表2】

【0068】
ここで、A、B、Nはいずれも既知の値であり、Sは0H(演算開始時)または直前の64bit×512bit×2-64 mod 512bitの演算結果を用いるため既知である。なお、Nは奇数であるため、N[1:0]=01または11で固定である。したがって、A、B、及びSの各値を基に算出した被乗数uの値をテーブル形式でu生成部10に格納しておき、制御部11は該テーブルを参照して被乗数uの値を決定する。
【0069】
本発明の乗算剰余演算器では、まず、制御部11により、第1のラッチ回路1に被乗数A(512bit)の最下位64bitのデータをセットし、乗数B(512bit)のデータを第1の論理回路4へ供給し、乗数N(512bit)のデータを第2の論理回路5へ供給する。
【0070】
続いて、制御部11は、64bitの被乗数A、64bitの乗数B、64bitの乗数Nからu生成部10に格納されたテーブルを参照してu(64bit分)の値を求め、第2のラッチ回路2に格納する。
【0071】
制御部11による第1のラッチ回路1、第2のラッチ回路2、第1の論理回路4及び第2の論理回路5に対する被乗数または乗数のセットが完了すると、乗算剰余演算器はS=S+A×B+u×Nの演算を開始する。
【0072】
乗算剰余演算器は、まず、第1の論理回路4にて、3bitの乗数Bの値からBooth法による変換を行い、該変換後の値に対応する0、+1A(64+4bit)、−1A(64+4bit)、+2A(64+4bit)または−2A(64+4bit)を選択しCSA6へ供給する。同様に、乗算剰余演算器は、第2の論理回路5にて、3bitの乗数Nの値からBooth法による変換を行い、該変換後の値に対応する0、+1u(64+4bit)、−1u(64+4bit)、+2u(64+4bit)または−2u(64+4bit)を選択しCSA6へ供給する。
【0073】
CSA6は、第1の論理回路4及び第2の論理回路5から順次供給される値を、桁合わせを実行しつつ加算することでA×B、及びu×Nを算出し、それらの加算結果(乗算剰余演算結果)Sを2bit単位で出力する。CSA6から出力された演算結果は、第1のシフトレジスタ8の出力と2bit単位で加算器9にて加算され、加算後の値が第1のシフトレジスタ8に再び格納される。以上の処理を乗数B、Nの全てのビットデータに対して繰り返し実行することで、64bit×512bit×2-64 mod 512bitの演算が終了する。但し、この段階ではCSA6の内部に部分積の演算結果の上位64bitが残っているため、このデータを制御部11の指示により第1のシフトレジスタ8に格納する。その結果、該記憶素子に64bit×512bit×2-64 mod 512bitの演算結果Sが格納される。
【0074】
乗算剰余演算器は、64bit×512bit×2-64 mod 512bitの演算が完了すると、制御部11により第1のラッチ回路1に被乗数A(512bit)の次の下位64bitのデータ(最下位から65bit目〜128bit目のデータ)をセットし、上記と同様にu生成部10のテーブルを参照して被乗数uの値を求め、求めた値を第2のラッチ回路2に格納した後、再び64bit×512bit×2-64 mod 512bitの演算を開始する。
【0075】
以降、第1のラッチ回路1に格納される被乗数A(512bit)の全てのビットデータに対して同様の処理を繰り返し実行する。すなわち、上記64bit×512bit×2-64 mod 512bitの演算を8回繰り返す。その結果、本発明の乗算剰余演算器による512bit×512bit×2-512 mod 512bitの演算が終了する。
【0076】
次に、本発明の乗算剰余演算器の効果について図面を用いて説明する。
【0077】
図4は乗数を1bit単位で出力する従来の乗算剰余演算器のレイアウト面積及びBooth法を採用する本発明の乗算剰余演算器のレイアウト面積を示すグラフである。また、図5は乗数を1bit単位で出力する従来の乗算剰余演算器の処理クロック数及びBooth法を採用する本発明の乗算剰余演算器の処理クロック数を示すグラフである。
【0078】
また、図6は乗数を1bit単位で出力する従来の乗算剰余演算器及びBooth法を採用する本発明の乗算剰余演算器の処理クロック数に対するレイアウト面積をそれぞれ示すグラフである。
【0079】
図4及び図5に示す「1bit」とは乗数を1bit単位で出力する従来の乗算剰余演算器の構成を示し、「Booth 2bit」とはBooth法による変換後の乗数を用いる(基数4)本発明の乗算剰余演算器の構成を示している。また、図4及び図5に示すグラフの横軸(処理性能)は、表3に示すように乗算剰余演算器の処理ビット長(32bit、64bit、128bit、256bit)に対応する、従来の乗算剰余演算器が備えるCSAの処理ビット長と本発明の乗算剰余演算器が備えるCSAの処理ビット長とを示している。本発明の乗算剰余演算器は、乗数を2bit単位で被乗数に掛けるため、処理性能を比較する際には、表3に示すように乗数を1bit単位で被乗数に掛ける従来の乗算剰余演算器に対してCSAの処理ビット長を1/2にしている。なお、表3の各エントリは(CSAの処理ビット長)*(出力ビット数)を示している。
【0080】
【表3】

【0081】
図4から分かるように、乗算剰余演算器としての処理ビット長が同じである場合、本発明の乗算剰余演算器は、乗数を複数ビット単位で処理できるため、乗数を1bit単位で処理する従来の乗算剰余演算器に比べて回路のレイアウト面積が低減する。これはBooth 2bitとすることでCSA6の処理ビット長を従来の半分にできるためである。
【0082】
例えば、乗算剰余演算器の処理ビット長を128bitとした場合、従来の乗算剰余演算器では、CSAで加算結果(sum)の値と桁上げ(carry)の値をそれぞれ128個ずつ保持する必要があるため、256個のフリップフロップ(Data-F/F)が必要になる。
【0083】
それに対して、Booth 2bitを採用する本発明の乗算剰余演算器が備えるCSA6では、処理ビット長が従来の半分の64bitで済むため、加算結果(sum)の値と桁上げ(carry)の値を保持するフリップフロップも128個で済む。すなわち、Booth法を採用することで複数ビット単位で乗数を処理するため、CSA6が備えるフリップフロップの数が大きく削減され、回路規模を低減できる。また、CSA6の処理ビット長が短縮することで第1及び第2のラッチ回路や論理回路(従来の構成ではセレクタに相当)のビット長も短縮されるため、乗算剰余演算器としての回路規模が低減する。但し、上述したようにBooth法を採用することでCSAの処理ビット長を拡張する必要があり(基数4の場合、4bit)、さらに第1の論理回路4及び第2の論理回路5による回路規模の増大もあるため、本発明の乗算剰余演算器のレイアウト面積は従来の1/2よりも大きくなる。
【0084】
一方、図5から分かるように、乗算剰余演算器の処理ビット長が同じである場合、本発明の乗算剰余演算器は、乗数を複数ビット単位で処理するため、乗数を1bit単位で処理する従来の乗算剰余演算器に比べて処理クロック数が少なくなる。これは上述したCSA6内に残る部分積の演算結果を出力する処理時間の差から生じる結果である。
【0085】
本発明の乗算剰余演算器では、上述したようにCSA6の処理ビット長を従来の半分にできるが(基数4の場合)、被乗数を分割して処理するため、乗算剰余演算を複数回繰り返すことになる。そのため、本発明の乗算剰余演算器では、従来の乗算剰余演算器よりも繰り返し演算の回数が増え、CSA6内に残る部分積の演算結果を出力する回数も増えてしまう。
【0086】
しかしながら、本発明の乗算剰余演算器では、CSA6の処理ビット長を短縮できることから、CSA6内に残る演算結果を出力する処理時間も従来の1/2となる(基数4の場合)。そのため、僅かではあるが、1つのA、u、B、Nに対する乗算剰余演算の処理時間は従来よりも低減する。
【0087】
本発明の乗算剰余演算器は、処理時間の大幅な低減は実現できないが、多数の数字の配列に対して大きな値のべき乗剰余演算を行うRSAによる暗号化及び復号に本発明の乗算剰余演算器を用いる場合は、この僅かな処理時間の向上が非常に有益となる。
【0088】
図6に示すように、Booth法を採用する本発明の乗算剰余演算器は、乗数を1bit単位で出力する従来の乗算剰余演算器に比べて、回路規模が少なく、かつ高速な処理を実現できることが分かる。
【0089】
なお、参考までに、Booth法を採用する本発明の乗算剰余演算器の基数を増やした場合の回路規模の増大量を表4及び表5に示す。本発明の乗算剰余演算器では、基数が16の場合、乗数B、Nは4bit毎に処理されるため、CSA6のビット幅が同じ場合、処理性能は従来の乗算剰余演算器の4倍になる。なお、表4及び表5の各エントリ内の数字の単位は[mm2]である。
【0090】
【表4】

【0091】
表4に示すように、Booth法を採用する本発明の乗算剰余演算器は、基数4、16共にほぼ同じ回路規模で構成され、従来の乗算剰余演算器と比較してレイアウト面積が約30%削減されることが分かる。
【0092】
【表5】

【0093】
表5に示すように、Booth法を採用する本発明の乗算剰余演算器は、従来の乗算剰余演算器に比べて、基数4の場合、処理速度は約2倍になるがレイアウト面積は1.3倍程度で済む。また、基数16の場合、処理速度は約4倍になるがレイアウト面積は2.6倍程度で済む。
【0094】
ところで、被乗数uは、乗数B、Nの出力ビット数をqとすると、上記モンゴメリ法を応用したアルゴリズムの(1)、(5)から以下の式で算出できる。
【0095】
v=−N-1mod2q
u=Svmod2q
ここで、vは演算開始時に一度だけ計算する値である。なお、rに代えて2qとしているのはrを2進数で表したためである。
【0096】
q=1となる従来の乗算剰余演算器では、Nが奇数であることからv=1となるため、u=Smod2=S[0]となり、被乗数uはSの下位ビットに等しくなる。したがって、被乗数uを実施的に計算する必要はない。
【0097】
しかしながら、q>1となる本発明の乗算剰余演算器では、u=S[0]が成立しないため、上記2つの演算が必要になる。但し、qの値が小さい場合(例えば、q=2、4)は、v、uも2bitまたは4bitであり、その演算に必要なN、Sも2bitまたは4bitである。そのため、本発明ではA、B、S、Nの値から予めuの値を算出してテーブルを作成しておき、該テーブルを参照することで第2のラッチ回路2に格納するuを決定している。
【0098】
Booth法による乗数の変換に用いる基数の値を大きくしqの値を増やせば、CSA6の処理ビット長をさらに短縮できるため、乗算剰余演算の処理時間をさらに短縮することができる。
【0099】
しかしながら、q>4の場合、すなわち乗数B、Nを8ビット以上で出力する(基数64以上)構成では、被乗数uをテーブル内から選択するために必要な、例えばデコーダ等の回路規模が増大するため、記憶素子を含むu生成部10の回路規模が増大し、上述したCSA6の処理ビット長を短縮することによる乗算剰余演算器の回路規模の低減効果を相殺してしまう。
【0100】
表6にqの値に対するu生成部10のレイアウト面積(単位:mm2)を示し、表7にqの値に対するCSAとu生成部とを含む総レイアウト面積(単位:mm2)を示す。
【0101】
【表6】

【0102】
【表7】

【0103】
表6及び表7から分かるように、例えばCSAの処理ビット長を256bitとしたとき、q=1のときの総レイアウト面積に対して、CSAの処理ビット長を128bitにできるq=2の場合(基数4)及びCSAの処理ビット長を64bitにできるq=4の場合(基数16)の総レイアウト面積は低減する。しかしながら、q=8(基数64)にすると総レイアウト面積が増大してしまう。
【0104】
したがって、本発明の乗算剰余演算器では、qの値が2または4であることが回路規模の増大を抑制しつつ演算時間を短縮できるために望ましい。但し、回路規模よりも演算時間の向上を優先する場合は、qの値を8以上に設定してもよい。その場合、qの値はu生成部10のレイアウト面積の増大を考慮しつつ最適な値を選択すればよい。
【図面の簡単な説明】
【0105】
【図1】Booth法による乗数の具体的な変換例を示す模式図である。
【図2】本発明の乗算剰余演算器の一構成例を示すブロック図である。
【図3】本発明の情報処理装置の一構成例を示すブロック図である。
【図4】本発明の乗算剰余演算器のレイアウト面積を示すグラフである。
【図5】本発明の乗算剰余演算器の処理クロック数を示すグラフである。
【図6】本発明の乗算剰余演算器の処理クロック数に対するレイアウト面積の関係を示すグラフである。
【図7】従来の乗算剰余演算器の構成を示すブロック図である。
【符号の説明】
【0106】
1 第1のラッチ回路
2 第2のラッチ回路
4 第1の論理回路
5 第2の論理回路
6 CSA
8 第1のシフトレジスタ
9 加算器
10 u生成部
11 制御部
20 処理装置
21 CPU
22 主記憶装置
23 記録媒体
24 データ蓄積装置
25 メモリ制御インタフェース部
26 I/Oインタフェース部
27 乗算剰余演算器
28 通信制御装置
29 バス
30 入力装置
40 出力装置

【特許請求の範囲】
【請求項1】
被乗数をA、uとし、乗数をB、Nとし、乗算剰余演算結果をSとしたとき、S=S+A×B+u×Nを算出するための乗算剰余演算器であって、
Booth法に基づいて変換された複数のビット数q単位で供給される前記乗数Bの値に対応する前記被乗数Aの整数倍の値を選択して出力し、前記Booth法に基づいて変換された複数のビット数q単位で供給される前記乗数Nの値に対応する前記被乗数uの整数倍の値を選択して出力する論理回路と、
前記論理回路から順次出力される値を用いてA×B+u×Nの演算を実行する桁上げ保存加算器と、
前記桁上げ保存加算器から前記ビット数q単位で出力される前記A×B+u×Nの演算結果と、前記ビット数q単位で供給される過去の該演算結果とを加算し、該加算結果を前記乗算剰余演算結果Sとして出力する加算器と、
を有する乗算剰余演算器。
【請求項2】
前記被乗数Aを保持し、前記セレクタに供給する第1の記憶素子と、
前記被乗数uを保持し、前記セレクタに供給する第2の記憶素子と、
前記加算器から出力される前記乗算剰余演算結果Sを保持し、前記ビット数q単位で該乗算剰余演算結果Sを前記加算器に供給する第3の記憶素子と、
をさらに有する請求項1記載の乗算剰余演算器。
【請求項3】
前記Booth法に基づいて変換した変換後の乗数B及び乗数Nを前記論理回路に供給すると共に、前記桁上げ保存加算器の動作を制御する制御部をさらに有する請求項1または2記載の乗算剰余演算器。
【請求項4】
前記制御部は、
前記第1の記憶素子に前記被乗数Aをセットし、
前記第2の記憶素子に前記被乗数uをセットする請求項3記載の乗算剰余演算器。
【請求項5】
予め算出された、前記被乗数A、前記乗数B、前記乗数N、及び前記乗算剰余演算結果Sの値に対する前記被乗数uの値の関係が格納されるu生成部をさらに有し、
前記制御部は、
前記S=S+A×B+u×Nの演算時に前記u生成部を参照することで前記被乗数uの値を決定する請求項3または4記載の乗算剰余演算器。
【請求項6】
被乗数をA、uとし、乗数をB、Nとし、乗算剰余演算結果をSとしたとき、S=S+A×B+u×Nを算出するための乗算剰余演算器であって、
複数のビット数q+1単位で供給される乗数Bの値をBooth法に基づいて変換し、該変換後の値に対応する前記被乗数Aの整数倍の値を選択して出力し、前記ビット数q+1単位で供給される前記乗数Nの値をBooth法に基づいて変換し、該変換後の値に対応する前記被乗数uの整数倍の値を選択して出力する論理回路と、
前記論理回路から順次出力される値を用いてA×B+u×Nの演算を実行する桁上げ保存加算器と、
前記桁上げ保存加算器から前記ビット数q単位で出力される前記A×B+u×Nの演算結果と、前記ビット数q単位で供給される過去の該演算結果とを加算し、該加算結果を前記乗算剰余演算結果Sとして出力する加算器と、
を有する乗算剰余演算器。
【請求項7】
前記被乗数Aを保持し、前記セレクタに供給する第1の記憶素子と、
前記被乗数uを保持し、前記セレクタに供給する第2の記憶素子と、
前記加算器から出力される前記乗算剰余演算結果Sを保持し、前記ビット数q単位で該乗算剰余演算結果Sを前記加算器に供給する第3の記憶素子と、
をさらに有する請求項6記載の乗算剰余演算器。
【請求項8】
前記桁上げ保存加算器の動作を制御する制御部をさらに有する請求項5記載の乗算剰余演算器。
【請求項9】
前記制御部は、
前記第1の記憶素子に前記被乗数Aをセットし、
前記第2の記憶素子に前記被乗数uをセットし、
前記論理回路に前記乗数B及び前記乗数Nを供給する請求項8記載の乗算剰余演算器。
【請求項10】
予め算出された、前記被乗数A、前記乗数B、前記乗数N、及び前記乗算剰余演算結果Sの値に対する前記被乗数uの値の関係が格納されるu生成部をさらに有し、
前記制御部は、
前記S=S+A×B+u×Nの演算時に前記u生成部を参照することで前記被乗数uの値を決定する請求項8または9記載の乗算剰余演算器。
【請求項11】
前記ビット数qは2である請求項1乃至10のいずれか1項記載の乗算剰余演算器。
【請求項12】
前記ビット数qは4である請求項1乃至10のいずれか1項記載の乗算剰余演算器。
【請求項13】
請求項1に記載の乗算剰余演算器と、
前記被乗数Aを保持し、前記セレクタに供給する第1の記憶素子と、
前記被乗数uを保持し、前記セレクタに供給する第2の記憶素子と、
前記加算器から出力される前記乗算剰余演算結果Sを保持し、前記ビット数q単位で該乗算剰余演算結果Sを前記加算器に供給する第3の記憶素子と、
を有する情報処理装置。
【請求項14】
前記Booth法に基づいて変換した変換後の乗数B及び乗数Nを前記論理回路に供給すると共に、前記桁上げ保存加算器の動作を制御する制御部をさらに有する請求項13記載の情報処理装置。
【請求項15】
前記制御部は、
前記第1の記憶素子に前記被乗数Aをセットし、
前記第2の記憶素子に前記被乗数uをセットする請求項14記載の情報処理装置。
【請求項16】
予め算出された、前記被乗数A、前記乗数B、前記乗数N、及び前記乗算剰余演算結果Sの値に対する前記被乗数uの値の関係が格納されるu生成部をさらに有し、
前記制御部は、
前記S=S+A×B+u×Nの演算時に前記u生成部を参照することで前記被乗数uの値を決定する請求項14または15記載の情報処理装置。
【請求項17】
請求項6記載の乗算剰余演算器と、
前記被乗数Aを保持し、前記セレクタに供給する第1の記憶素子と、
前記被乗数uを保持し、前記セレクタに供給する第2の記憶素子と、
前記加算器から出力される前記乗算剰余演算結果Sを保持し、前記ビット数q単位で該乗算剰余演算結果Sを前記加算器に供給する第3の記憶素子と、
を有する情報処理装置。
【請求項18】
前記桁上げ保存加算器の動作を制御する制御部をさらに有する請求項17記載の情報処理装置。
【請求項19】
前記制御部は、
前記第1の記憶素子に前記被乗数Aをセットし、
前記第2の記憶素子に前記被乗数uをセットし、
前記論理回路に前記乗数B及び前記乗数Nを供給する請求項18記載の情報処理装置。
【請求項20】
予め算出された、前記被乗数A、前記乗数B、前記乗数N、及び前記乗算剰余演算結果Sの値に対する前記被乗数uの値の関係が格納されるu生成部をさらに有し、
前記制御部は、
前記S=S+A×B+u×Nの演算時に前記u生成部を参照することで前記被乗数uの値を決定する請求項18または19記載の情報処理装置。
【請求項21】
前記ビット数qは2である請求項13乃至20のいずれか1項記載の情報処理装置。
【請求項22】
前記ビット数qは4である請求項13乃至20のいずれか1項記載の情報処理装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate


【公開番号】特開2006−23648(P2006−23648A)
【公開日】平成18年1月26日(2006.1.26)
【国際特許分類】
【出願番号】特願2004−203436(P2004−203436)
【出願日】平成16年7月9日(2004.7.9)
【出願人】(000232036)NECマイクロシステム株式会社 (72)
【出願人】(899000068)学校法人早稲田大学 (602)
【Fターム(参考)】