JPWO2007080652A1 - モンゴメリ法用乗算剰余計算装置 - Google Patents

モンゴメリ法用乗算剰余計算装置 Download PDF

Info

Publication number
JPWO2007080652A1
JPWO2007080652A1 JP2007553818A JP2007553818A JPWO2007080652A1 JP WO2007080652 A1 JPWO2007080652 A1 JP WO2007080652A1 JP 2007553818 A JP2007553818 A JP 2007553818A JP 2007553818 A JP2007553818 A JP 2007553818A JP WO2007080652 A1 JPWO2007080652 A1 JP WO2007080652A1
Authority
JP
Japan
Prior art keywords
digit
value
product
output
sum
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2007553818A
Other languages
English (en)
Other versions
JP4783382B2 (ja
Inventor
和快 古川
和快 古川
武仲 正彦
正彦 武仲
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Publication of JPWO2007080652A1 publication Critical patent/JPWO2007080652A1/ja
Application granted granted Critical
Publication of JP4783382B2 publication Critical patent/JP4783382B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/60Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers
    • G06F7/72Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers using residue arithmetic
    • G06F7/728Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers using residue arithmetic using Montgomery reduction

Landscapes

  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • General Engineering & Computer Science (AREA)
  • Complex Calculations (AREA)

Abstract

モンゴメリのアルゴリズムREDCによって、r進数のAとBについて、REDC(A×B)を計算する。プロセッサには、3入力2出力の積和回路が設けられているものを用いる。REDCをr進数の1桁ずつの演算に分解した場合の、A×Bにあたる部分を、3入力2出力の積和回路に行わせる。積和回路には、r進数で表されたAの1桁aiと、Bの1桁bjと、キャリー値c1とを入力し、ai×bj+c1を計算させ、結果のr進数2桁の上位桁をキャリー値c1とし、下位桁を後の計算に使用する。また、積和回路には、REDCのための法Nの1桁niと、所定の値mと、キャリー値c2を入力し、m×ni+c2を計算させ、上位桁をキャリー値c2とし、下位桁を後の計算に用いる。アルゴリズムが3入力2出力の積和計算で構成されているので、積和回路を有効利用して高速に処理できると共に、積和回路が2つ設けられている場合には、更に、演算を高速化できる。

Description

本発明は、例えば、公開鍵暗号系のRSA暗号処理において、モンゴメリのアルゴリズムを用いて乗算剰余計算を高速に行う乗算剰余計算装置に関する。
近年におけるコンピュータネットワークの発達により、データベースを検索する機会、電子メール,電子ニュース等の電子化された情報をネットワークを経由して送受する機会が急速に増加してきている。更に、これらを利用して、オンラインショッピング等のサービスも提供されつつある。しかし、それに伴って、ネットワーク上の電子化されたデータを盗聴する、改竄する、他人になりすましてサービスを無償で受ける等の問題も指摘されている。特に、無線を利用したネットワークにおいては、傍受が容易なために、これらの問題を防止する対策が望まれている。
これらの問題に対して暗号技術を応用した暗号化電子メール,利用者認証システムが提案され、種々のネットワークにも導入されつつある。
この意味で、コンピュータネットワークにおいては暗号化が必須の技術であるといえる。このような暗号技術の中の一つにディジタル署名即ち認証に適した公開鍵暗号方式がある。公開鍵暗号方式は、暗号化/復号に大量の演算処理が必要なために高速化が望まれており、様々な高速化アルゴリズムが発表されている。
暗号化方式は、大別すると秘密鍵暗号系と公開鍵暗号系との二つに分類できる。秘密鍵暗号系は、送信者と受信者とが同じ暗号鍵を持つことにより暗号通信を行う方式である。即ち、秘密鍵暗号系では、あるメッセージを秘密の暗号鍵に基づいて暗号化して相手に送り、受け手はこの暗号鍵を用いて暗号文を復号して元のメッセージに戻して情報を入手する。公開鍵暗号系は、送信者が公開されている受信者の公開鍵でメッセージを暗号化して送信し、受信者が自分の秘密鍵でその暗号化メッセージを復号することにより通信を行う方式である。
即ち、公開鍵暗号系では、公開鍵は暗号化のための鍵、秘密鍵は公開鍵により暗号化された暗号を復号するための鍵であり、公開鍵で暗号化した暗号は秘密鍵でのみ復号することができる。
秘密鍵暗号系では、個人が秘密に保管しなければならない鍵が通信相手の数だけ必要であり、必要な総鍵数はn人のネットワークの場合n(n−1)/2個である。また、初めて通信する相手に対しては、何らかの方法で秘密鍵の配送が必要であるという欠点がある。
この欠点を解消するために、大規模なネットワークでは、鍵管理センタを設置し、センタとの間の秘密鍵のみを保管し、暗号通信を行う場合は、センタから送信相手との秘密鍵を得る方法が用いられる。
一方、公開鍵暗号系では、個人が秘密に保管する鍵は自分の秘密鍵のみであり、必要な総秘密鍵数もn人のネットワークの場合n個である。
また、初めて通信する相手に対しては、公開鍵の配送を行えば良く、鍵管理センタを設置して、ユーザの公開鍵をn個公開簿に登録し、センタから送信相手の公開鍵を得る方法が用いられる。
この場合、センタは公開鍵の改竄を防ぐだけで、秘密に保管する必要がない。但し、公開鍵方式は秘密鍵方式に比べて鍵のビット数が大きいため保管に要するファイルサイズは大きくなる。また、認証の場合、秘密鍵暗号系では、例えば送信するメッセージを秘密鍵で圧縮変換し、送信文に付加して送り、受信側では同様に圧縮変換して比較する方式がとられている。
しかし、送受信が同じ鍵であるため、受信者は認証データを偽造することができる。これに対して、公開鍵暗号系では、秘密鍵で暗号化することができるのは本人だけであるので、偽造することはできない。公開鍵暗号系では、送信者はメッセージを圧縮変換して秘密鍵で暗号化し、公開鍵を送信文に付加して送り、受信者は送信者の公開鍵で付加されたデータを復号し、同様に圧縮変換したものと比較する方式がとられている。この場合、受信者は不正ができない。
このように認証系では公開鍵暗号系の技術は必要不可欠であるといえる。しかし、公開鍵暗号系には、暗号化/復号に大量の演算処理が必要であるという大きな欠点があるため、一般には、処理が速い秘密鍵暗号系をメッセージの暗号化に、公開鍵暗号系は認証用にというように組み合わせて用いられる場合が多い。
公開鍵暗号系の中で、現在最も有力なものが1977年にリヴェスト(Rivest),シャミア(Shamir)及びエイドルマン(Adlman)の三人によって発明されたRSA暗号である。
このRSA暗号の基本原理は次のようなものである。
(RSAの基本アルゴリズム)
暗号鍵(e,N)と対応する復号鍵(d,N)とにおいて、eとNとは公開鍵であり、dは秘密鍵である。
平文をM,暗号文をCとすると、暗号化Eと復号Dとのアルゴリズムは次のようにあらわされる。
C=E(M)=Me mod N
M=D(C)=Cd mod N
但し、d・e=1mod LCM{(p−1),(q−1)}
N=p・q
LCM:最小公倍数(lowest common multiple)
p,qは大きな素数
通常、e,d,M,Nなどは1024ビット程度の大きな整数が用いられているので、高速指数計算法を使用しても1回のRSA演算で平均1500回程度の多重精度乗算と剰余算とを行わなければならない。
特に剰余計算については、演算処理を高速化するために、近似法,剰余テーブル方式,モンゴメリのアルゴリズム等、多くの高速化手法が提案されている。
このような、RSA暗号に代表される公開鍵暗号系の多くで利用される、べき乗剰余アルゴリズムを高速に処理するためには、1回あたりの剰余アルゴリズムの高速化が要求される。
この剰余演算の高速化を実現する一方法であるモンゴメリのアルゴリズムについて説明する。モンゴメリのアルゴリズムについては、Modulo Multiplication Without Trial Division, Peter L. Montgomery, Mathematics of Computation, Volume 44, Number 170, April 1985 pp. 519〜528を参照されたい。
(モンゴメリのアルゴリズム)
モンゴメリのアルゴリズムは、剰余の法N(N>1)と、剰余の法Nと互いに素である基数R(R>N)とを用いると、被剰余数TからTR-1mod Nの計算が基数Rによる除算のみで行えることを利用して、Nによる除算を用いることなく剰余計算を行うアルゴリズムである。
以下において、N,N′,R,R-1及びTは整数であり、被剰余数Tは0≦T<R・N、R-1は剰余の法Nの上での基数Rの逆数であり、R・R-1−N・N′=1(0≦R-1<N,0≦N′<R)の関係を満たす。
更に、この基数Rに2のベキ乗数を使用した場合、基数Rによる除算をシフト操作に置き換えることができるため、T→TR-1mod Nの計算の高速処理が可能となる。
次に、アルゴリズム1として、T→TR-1mod NのアルゴリズムREDC(T)を示す。
但し、アルゴリズム1において(T+m・N)/Rは必ず割り切れることが証明されている。
(アルゴリズム1)
T→TR-1mod NのアルゴリズムY=REDC(T)は次のようにあらわされる。
M=(Tmod R)・N′mod R
Y=(T+M・N)/R
if Y≧N then Y=Y−N
if Y<N then return Y
1回のREDCでは、剰余Tmod NではなくTR-1mod Nが求められるだけである。
よって、剰余Tmod Nを求めるためには、次に示すようにREDC(T)と、予め求めておいたR2mod Nとの積で、再びREDCを行えば良い。
REDC(REDC(T)・(R2 mod N))
=(TR-1mod N)・(R2 mod N)・R-1mod N
=TR-1・R2 ・R-1mod N
=Tmod N
このようにして、剰余Tmod Nを求めることができる。
(REDCの多重精度計算への拡張)
次に、剰余の法Nまたは基数Rが多倍長即ち多重精度である場合について、REDCのアルゴリズムを拡張する。
剰余の法N,基数Rが多重精度である場合、REDCの(Tmod R)・N′及びM・Nの計算は、多重精度×多重精度の処理となり、汎用の計算機では非常に大きな処理量と処理時間とが必要となる。そこで、この部分を多重精度×単精度の処理で行えるように拡張したアルゴリズム2を示す。
(アルゴリズム2)
REDCを多重精度へ拡張したアルゴリズムは次に示すようになる。被剰余数T,パラメータN′,出力用変数Yが何れもr進数で、
T=(tg-1,tg-2,…,t0r
N=(ng-1 ,ng-2,…,n0r
Y=(yg ,yg-1 ,…,y0r
n’0
r=2k
R=rg
とあらわされる場合、次に示すj=0〜g−1の繰り返し処理によりTR-1modNを多重精度×単精度として、以下のアルゴリズムによって求めることができる。なお、ここで、( )は、r進数で表された数であることを示す。また、ここで単精度とはr進数1桁のこととし、同じ文字を使用した場合、基本的に大文字を多重精度、小文字を単精度、小文字の添字を多重精度での桁の位置とする。
Y=T
for j=0 to g−1
m=y0 ・n’0 mod r
Y=Y+m・N
Y=Y/r
next
if Y≧N then Y=Y−N
if Y<N then return Y
このようにして得られるTR-1mod Nと、上述したように予め求めておいたR2 mod Nとの積で再びREDCを行うことにより、Tmod Nを求めることができる。
(REDCの多重精度乗算剰余への拡張)
次に、REDCのアルゴリズムを乗算剰余演算に拡張する。
上記のアルゴリズムにおいて、入力Tは0≦T<R・Nを満たす値であるが、実際のRSA演算では、入力Tが整数A,B(0≦A,B<N)の乗算結果であることが多い。
その場合、整数A,Bの乗算も多重精度整数演算であるため、多重精度拡張REDCと同様の繰り返し計算が行われる。
この場合、乗算とREDCとを別々に繰り返し計算すると、繰り返し計算制御によるロスが2倍になってしまう。
そこで、乗算とREDCとを同一の繰り返しループで行えるように拡張したアルゴリズム3を示す。
(アルゴリズム3)
REDCを多重精度乗算剰余へ拡張したアルゴリズムREDC(A×B)は次に示すようになる。
乗算する2数A,B,パラメータN′,モンゴメリ乗算のパラメータn’0,出力用変数Yが何れもr進数で、
A=(ag-1 ,ag-2,…,a0r
B=(bg-1 ,bg-2,…,b0r
N=(ng-1 ,ng-2,…,n0r
Y=(yg ,yg-1,…,y0r
n’0
r=2k
R=rg
とあらわされる場合、次に示すj=0〜g−1の繰り返し処理により、ABR-1mod Nを多重精度×単精度の計算として求めることができる。

Y=0
for j=0 to g−1
Y=Y+A・bj
m=y0 ・n’0 mod r
Y=Y+m・N
Y=Y/r
next
if Y≧N then Y=Y−N
if Y<N then return Y
上記のアルゴリズム3においては、A、Nが多重精度で、b、n’が単精度であり、Aとbの乗算を行っているので、多重精度×単精度の計算として演算が行われている。
このようにして得られるABR-1mod Nと、上述したように予め求めておいたR2 mod Nとの積で再びREDCを行うことにより、ABmod Nを求めることができる。
(REDCの単精度×単精度処理への拡張)
アルゴリズム3では、多重精度のモンゴメリ乗算剰余を多重精度×単精度で実現可能としているが、この多重精度×単精度の計算部分をさらに単精度×単精度の計算を組み合わせて行えるよう拡張する。
この場合、A×bi の計算部分とm×Nの計算部分とが繰り返し計算となり、上述の場合と同様に2つの乗算を別々に繰り返し計算すると、繰り返し計算制御によるロスが2倍になってしまう。
そこで、2つの乗算を同一の繰り返しループで行えるようにすれば、ロスの低減が可能である。
2つの乗算を同一の繰り返しループで行えるように拡張したアルゴリズム4を示す。
(アルゴリズム4)
REDCを単精度×単精度へ拡張したアルゴリズムREDC(A×B)は次に示すようになる。
乗算する2数A,B,パラメータN′,モンゴメリ乗算のパラメータn’0,出力用変数Y,キャリー変数Cが何れもr進数で、
A=(ag-1 ,ag-2,…,a0 r
B=(bg-1 ,bg-2,…,b0r
N=(ng-1 ,ng-2,…,n0r
Y=(yg ,yg-1,…,y0r
C=(c1 ,c0r
n’0
r=2k
R=rg
とあらわされ、r進1桁の一時変数をtmp1,tmp2,tmp3,tmp4とする場合、次に示すi,jの繰り返し処理によりABR-1mod Nを単精度×単精度の計算で求めることができる。
Y=0
for j=0 to g−1 ……………………………
(tmp2,tmp1)r =y0 +a0・bj
m=tmp1・n’0 mod r
(tmp4,tmp1)r =tmp1+m・n0 コア前処理
(c1 ,c0r =tmp2+tmp4
for i=0 to g−1 ……………………………
(tmp3,tmp2,tmp1)r =yi+(c1 ,c0r +ai ・bj
(tmp4,yi-1r =tmp1+m・ni コア処理
(c1 ,c0 )r =tmp4+(tmp3,tmp2)r
next i ……………………………
(c1 ,c0r =(c1 ,c0r +yg
g-1 =c0 コア後処理
g =c1
next j ……………………………
if Y≧N then Y=Y−N 補正処理
if Y<N then return Y
ここで、( )r は、括弧内のr進数1桁の変数を多重精度として扱うことを示している。tmp1〜tmp4、c、cは、r進数で表された多重精度の数を複数のビットに列に分割し、それぞれを単精度の値として表したものである。たとえば、tmp1は、単精度の積和計算y+a・bの計算結果の下半分のビットで表される単精度の値であり、tmp2は、当該積和計算の計算結果の上半分のビットで表される単精度の値である。また、tmp3,c1 はr進数1桁で表現しているが、内容は1ビットの値である。
出力用変数Yについて、計算に使用する値がyi のとき、出力がyi-1 に格納されるのは、アルゴリズム3におけるY=Y/rの機能をこれにより実現しているためである。
また、便宜上、外側のループをjループ、内側のループをiループと呼び、jループの始めからiループまでをコア前処理、iループ内の処理をコア処理、iループの終わりからjループの終わりまでをコア後処理と呼ぶこととする。
図1は、上述したアルゴリズム4のコア処理を実行する乗算剰余計算装置の構成図である。
なお、以下のすべての説明において、kビットのkとは、単精度の値が表されるビット数であり、32ビットプロセッサの場合であれば、kは32となる。
図1に示す乗算剰余計算装置は、内部で乗算及び加算を行うα積和回路10及びβ積和回路11と、乗算する一方の数A:(ag-1,ag-2 ,…,a0)を保持するAレジスタ12と、乗算する一方の数B:(bg-1 ,bg-2,…,b0 )を保持するBレジスタ13と、剰余の法N:(ng-1 ,ng-2 ,…,n0 )を保持するNレジスタ14と、β積和回路11の出力の下位kビットを格納するYレジスタ15と、モンゴメリのパラータmを保持するmレジスタ16と、α積和回路10の出力の上位(k+1)ビット及びβ積和回路11の出力の上位kビットを加算するキャリー計算部としての加算回路17と、加算回路17の加算結果を格納するCレジスタ18と、jの値と0とを比較して出力を選択する選択回路19とを有する。
また、α積和回路10,β積和回路11の内部構成を図2A,Bに夫々示す。
α積和回路10は、Aレジスタ12及びBレジスタ13からの出力を乗算するkビット乗算器20と、kビット乗算器20の出力及び選択回路19(Yレジスタ15)の出力を加算する2kビット加算器21 と、2kビット加算器21の出力及びCレジスタ18の出力を加算する2k+1ビット加算器22とを有する。
β積和回路11は、Nレジスタ14及びmレジスタ16からの出力を乗算するkビット乗算器23と、kビット乗算器23の出力及びα積和回路10からの下位kビットの出力を加算する2kビット加算器24とを有する。
図3は、アルゴリズム4のコア処理の内容を示す説明図である。
α積和回路10内にて、Aレジスタ12の出力ai(kビット)とBレジスタ13の出力bj(kビット)とを乗算し、その乗算結果(2kビット;30)に、選択回路19(Yレジスタ15)の出力(kビット;31)とCレジスタ18の出力(k+1ビット;32)とを加算する。
なお、選択回路19は、jの値と0とを比較し、jの値が0である場合にはα積和回路10へ0を出力し、jの値が0でない場合にはYレジスタ15の格納値yiをα積和回路10へ出力する。
α積和回路10は、その演算結果(2k+1ビット;33)の上位(k+1)ビット(34)を加算回路17へ出力し、その下位kビット(35)をβ積和回路11へ出力する。
β積和回路11内にて、Nレジスタ14の出力ni(kビット)とmレジスタ16の出力(kビット)とを乗算し、その乗算結果(2kビット;36)にα積和回路10からの下位kビット出力(35)を加算する。
β積和回路11は、その演算結果(2kビット;37)の上位kビット(38)を加算回路17へ出力し、その下位kビット(39)をYレジスタ15へ出力する。Yレジスタ15は、そのkビットのデータを値yi-1 として格納する。
加算回路17は、α積和回路10からの出力(k+1ビット;34)とβ積和回路11からの出力(kビット;38)とを加算し、その加算結果(k+1ビット)をCレジスタ18へ出力する。Cレジスタ18は、これを格納する。
アルゴリズム4の変形例をアルゴリズム5として説明する。
(アルゴリズム5)
乗算する2数A,B,パラメータN,モンゴメリ乗算のパラメータn’0,出力用変数Yが何れもr進数で、
A=(ag-1 ,ag-2,…,a0r
B=(bg-1 ,bg-2,…,b0r
N=(ng-1 ,ng-2,…,n0r
Y=(yg ,yg-1,…,y0r
n’0
r=2k
R=rg
とあらわされ、r進数1桁の一時変数をtmp1,tmp2,tmp4,キャリー変数をc1,c2とする場合、次に示すi,jの繰り返し処理によりABR-1mod Nを単精度×単精度の計算として求めることができる。
Y=0
for j=0 to g−1 ……………………………
(tmp2,tmp1)r =y0 +a・b
m=tmp1・n’0 mod r
(tmp4,tmp1)r =tmp1+m・n0 コア前処理
(c2 ,c1r =tmp2+tmp4
for i=1 to g−1 ……………………………
(tmp2,tmp1)r =yi +c1+ai ・bj
(tmp4,yi-1 r =tmp1+m・ni コア処理
(c2 ,c1r =tmp4+tmp2+c2
next i ……………………………
(c2 ,c1r =(c2 ,c1r +yg
g-1 =c1 コア後処理
g =c2
next j ……………………………
if Y≧N then Y=Y−N 補正処理
if Y<N then return Y
ここで、( )r は、括弧内のr進数1桁の変数を多重精度として扱うことを示している。またキャリー変数c2 はr進数1桁で表現しているが、内容は1ビットの値である。
図4は、上述したアルゴリズム5のコア処理を実行する乗算剰余計算装置の構成図である。
図4に示す乗算剰余計算装置は、内部で乗算及び加算を行う第1積和回路10a及び第2積和回路11aと、乗算する一方の数A:(ag-1 ,ag-2 ,…,a0 )を保持する第1レジスタとしてのAレジスタ12と、乗算する一方の数B:(bg-1,bg-2 ,…,b0 )を保持する第2レジスタとしてのBレジスタ13と、第2積和回路11aの前回の下位kビット出力を保持し、次回の下位kビット出力を格納する第3レジスタとしてのYレジスタ15と、キャリー変数c1を保持する第4レジスタとしてのc1レジスタ18aと、剰余の法N:(ng-1 ,ng-2 ,…,n0)を保持する第5レジスタとしてのNレジスタ14と、モンゴメリアルゴリズムにおけるパラータmを保持する第6レジスタとしてのmレジスタ16と、キャリー変数c2を保持する第7レジスタとしてのc2レジスタ18bと、第1積和回路10aの上位kビット出力,第2積和回路11aの上位kビット出力及びc2レジスタ18bの出力を加算するキャリー計算部としての加算回路17aと、jの値と0とを比較してその出力を選択する選択回路19とを有する。
また、第1積和回路10a,第2積和回路11aの内部構成を図5A,Bに夫々示す。
第1積和回路10aは、kビット乗算器20と2kビット加算器21と2kビット加算器22aとを有する。kビット乗算器20は、Aレジスタ12及びBレジスタ13からの出力を乗算し、2kビット加算器21は、kビット乗算器20の出力と選択回路19(Yレジスタ15)の出力とを加算し、2kビット加算器22aは、2kビット加算器21の出力とc1レジスタ18aの出力とを加算する。
なお、図5Aに示す構成例では、乗算結果に選択回路19(Yレジスタ15)の出力を先に加算し、その後にc1レジスタ18aの出力を加算するようになっているが、これとは逆に、先にc1レジスタ18aの出力、その後に選択回路19(Yレジスタ15)の出力を加算するように構成しても良い。
第2積和回路11aは、Nレジスタ14及びmレジスタ16からの出力を乗算するkビット乗算器23と、kビット乗算器23の出力及び第1積和回路10aからの下位kビットの出力を加算する2kビット加算器24とを有する。
図6は、アルゴリズム5のコア処理の内容を示す説明図である。
第1積和回路10a内にて、Aレジスタ12の出力ai(kビット)とBレジスタ13の出力bj(kビット)とを乗算し、その乗算結果(2kビット;30)に、選択回路19(Yレジスタ15)の出力(kビット;31)とc1レジスタ18aの出力(kビット;32a)とを加算する。なお、選択回路19は、jの値と0とを比較し、jの値が0である場合には第1積和回路10aへ0を出力し、jの値が0でない場合にはYレジスタ15の格納値yiを第1積和回路10aへ出力する。第1積和回路10aは、その演算結果(2kビット;33)の上位kビット(34)を加算回路17aへ出力し、その下位kビット(35)を第2積和回路11aへ出力する。
第2積和回路11a内にて、Nレジスタ14の出力n(kビット)とmレジスタ16の出力(kビット)とを乗算し、その乗算結果(2kビット;36)に、第1積和回路10aからの出力下位kビット(35)を加算する。第2積和回路11aは、その演算結果(2kビット;37)の上位kビット(38)を加算回路17aへ出力し、その下位kビット(39)をYレジスタ15へ出力する。Yレジスタ15は、そのkビットのデータを値yi-1 として格納する。
加算回路17aは、第1積和回路10aからの出力(kビット;34)と第2積和回路11aからの出力(kビット;38)とc2レジスタ18bからの出力(1ビット;32b)とを加算する。そして、次回の演算用として、その加算結果(k+1ビット)の上位1ビットをc2レジスタ18bへ、その下位kビットをc1レジスタ18aへ夫々出力する。各c1レジスタ18a,c2レジスタ18bは、これを格納する。
アルゴリズム5を更に変形したアルゴリズムをアルゴリズム6として説明する。
(アルゴリズム6)
乗算する2数A,B,パラメータN,モンゴメリ乗算のパラメータn’0,出力用変数Yが何れもr進数で、
A=(ag-1 ,ag-2,…,a0 r
B=(bg-1 ,bg-2,…,b0r
N=(ng-1 ,ng-2,…,n0r
Y=(yg ,yg-1,…,y0r
n’0
r=2k
R=rg
とあらわされ、r進1桁の一時変数をtmp1,キャリー変数をc3,c4 とする場合、次に示すi,jの繰り返し処理によりABR-1mod Nを単精度×単精度の計算として求めることができる。
Y=0
for j=0 to g−1 ……………………………
(c3 ,tmp1)r=y0 +a0 ・bj
m=tmp1・n’0 mod r コア前処理
(c4 ,tmp1)r=tmp1+m・n0
for i=1 to g−1 ……………………………
(c3 ,tmp1)r=yi +c3 +ai ・bj
(c4 ,yi-1r =tmp1+m・ni +c4 コア処理
next i ……………………………
(c4 ,c3r =c3 +c4 +yg
g-1 =c3 コア後処理
g =c4
next j ……………………………
if Y≧N then Y=Y−N 補正処理
if Y<N then return Y
図7は、上述したアルゴリズム6のコア処理を実行する乗算剰余計算装置の構成図である。
図7に示す乗算剰余計算装置は、内部で乗算及び加算を行う第3積和回路10b及び第4積和回路11bと、図4に示すものと同様の第1レジスタとしてのAレジスタ12,第2レジスタとしてのBレジスタ13,第3レジスタとしてのYレジスタ15,第5レジスタとしてのNレジスタ14,第6レジスタとしてのmレジスタ16及び選択回路19と、キャリー変数c3を保持する第4レジスタとしてのc3レジスタ18cと、キャリー変数c4を保持する第7レジスタとしてのc4 レジスタ18dとを有する。
なお、第3積和回路10b及び第4積和回路11bの内部構成は、図5Aに示す第1積和回路10aの内部構成と同じであり、各積和回路10b及び11bは、kビット乗算器20と2kビット加算器21と2kビット加算器22aとから構成されている。
第3積和回路10bのkビット乗算器20は、Aレジスタ12及びBレジスタ13からの出力を乗算し、2kビット加算器21は、kビット乗算器20の出力と選択回路19(Yレジスタ15)の出力とを加算し、2kビット加算器22aは、2kビット加算器21の出力とc3 レジスタ18cの出力とを加算する。
なお、図5Aに示す構成例では、乗算結果に選択回路19(Yレジスタ15)の出力を先に加算し、その後にc3レジスタ18cの出力を加算するようになっているが、これとは逆に、先にc3レジスタ18cの出力、その後に選択回路19(Yレジスタ15)の出力を加算するように構成しても良い。
一方、第4積和回路11bのkビット乗算器20は、Nレジスタ14及びmレジスタ16からの出力を乗算し、2kビット加算器21は、kビット乗算器20の出力と第3積和回路10bからの下位kビットの出力とを加算し、2kビット加算器22aは、2kビット加算器21の出力とc4レジスタ18dの出力とを加算する。
なお、図5Aに示す構成例では、乗算結果に第3積和回路10bからの下位kビットの出力を先に加算し、その後にc4レジスタ18dの出力を加算するようになっているが、これとは逆に、先にc4 レジスタ18dの出力、その後に第3積和回路10bからの下位kビットの出力を加算するように構成しても良い。
図8は、アルゴリズム6のコア処理の内容を示す説明図である。
第3積和回路10b内にて、Aレジスタ12の出力ai (kビット)とBレジスタ13の出力bj(kビット)とを乗算し、その乗算結果(2kビット;30)に、選択回路19(Yレジスタ15)の出力(kビット;31)とc3レジスタ18cの出力(kビット;32c)とを加算する。
なお、選択回路19は、jの値と0とを比較し、jの値が0である場合には第3積和回路10bへ0を出力し、jの値が0でない場合にはYレジスタ15の格納値yiを第3積和回路10bへ出力する。
第3積和回路10bは、その演算結果(2kビット)の上位kビット(34)をc3レジスタ18cへ出力し、その下位kビット(35)を第4積和回路11bへ出力する。c3レジスタ18cは、このkビットを次回の演算用のキャリー変数として格納する。
第4積和回路11b内にて、Nレジスタ14の出力ni(kビット)とmレジスタ16の出力m(kビット)とを乗算し、その乗算結果(2kビット;36)に、第3積和回路10bからの下位kビット出力(35)と、cレジスタ18dのkビット出力(32d)を加算する。
第4積和回路11bは、その演算結果(2kビット;37)の上位kビット(38)をc4レジスタ18dへ出力し、その下位kビット(39)をYレジスタ15へ出力する。c4レジスタ18dは、このkビットを次回の演算用のキャリー変数として格納する。また、Yレジスタ15は、そのkビットのデータを値yi-1 として格納する。
図9は、モンゴメリ法による乗算剰余処理の一例を示すフローチャートの概観図である。
このフローチャートにおいて、jループが(アルゴリズム3)のループ処理に当たる。jループの内側では、A×bj 及びm×Nの多重精度×単精度の部分乗算を行っている。iループは、A×bj 及びm×Nの多重精度×単精度の計算を単精度×単精度の部分乗算で行っている部分である。iループの内部ではai ×bjとm×ni との部分乗算を行っている。
以下に、アルゴリズム6における、コア処理以外の処理も含めた全体の処理の流れの具体例について説明する。
以下の例では、N,A,Bのビット長を1024ビット、g=32、処理単位k=32、R=21024、r=232とする。
(コア前処理)
図10は、コア前処理を行う構成の一例を示す図である。
レジスタ41はモンゴメリ計算用のパラメータn’0 を保持する。乗算回路40は第3積和回路10bの出力とレジスタ41の出力とを乗算する。このコア前処理では、コア処理で使用するc3レジスタ18c,c4レジスタ18d及びmレジスタ16aの初期化を行っている。第3積和回路10bは、まず、Aレジスタ12,Bレジスタ13からの入力a0,bj を乗算し、その乗算結果とYレジスタ15からの入力y0 とを加算する。
なお、コア処理と同じ積和回路を使用する場合は、更にその結果と0とを加算する。
そして、結果の上位32ビットをc3レジスタ18cに格納し、下位32ビットを第4積和回路11bとパラメータmを計算するための乗算回路40とへ出力する。
乗算回路40は、第3積和回路10bの出力とレジスタ41の出力n’0 とを乗算し、その乗算結果の下位32ビットをmレジスタ16aに出力する。第4積和回路11bは、Nレジスタ14からの入力n0とmレジスタ16aの値とを乗算し、その乗算結果と第3積和回路10bからの出力とを加算する。
なお、コア処理と同じ積和回路を使用する場合は、更にその結果と0とを加算する。
そして、結果の上位32ビットをc4レジスタ29に格納する。下位32ビットは使用しない。
(コア処理)
図11は、iループ内部処理であるコア処理を行う構成の一例を示す図である。
Yレジスタ15は前回の処理結果の保持及び今回の処理結果の出力用レジスタである。選択回路19は、アルゴリズム3におけるY=0の処理に相当するものである。第3積和回路10bは、まず、Aレジスタ12,Bレジスタ13からの入力ai ,bjを乗算し、その乗算結果とYレジスタ15からの入力yiとを加算し、更にその加算結果とc3レジスタ18cの値とを加算する。そして、結果の上位32ビットをc3レジスタ18cに格納し、下位32ビットを第4積和回路11bへ出力する。
第4積和回路11bは、まず、Nレジスタ14からの入力ni とmレジスタ16aの値とを乗算し、その乗算結果と第3積和回路10bからの出力とを加算し、更にその加算結果とc4レジスタ18dの値とを加算する。そして、結果の上位32ビットをc4レジスタ18dに格納し、下位32ビットをYレジスタ15のyi-1に格納する。
アルゴリズム3のY=Y/rの処理は、i回目の計算結果をyi-1 に格納することで実現している。
(コア後処理)
図12は、コア後処理を行う構成の一例を示す図である。
加算回路45は、c3レジスタ18cの出力と、c4レジスタ18dの出力と、選択回路19の出力とを加算する。選択回路46は、加算回路45からのキャリー出力を0,1と比較し、0であれば0を、1であれば1を、Yレジスタ15へ出力する。このコア後処理では、コア処理終了後のキャリー変数c3 ,c4 の値の処理を行っている。
3レジスタ18c,c4レジスタ18dの値、及び、Yレジスタ15からの入力y32を加算回路45に入力し、その加算結果をYレジスタ15のy31に出力し、キャリーを処理単位である32ビットの値に変換してYレジスタ15のy32に出力する。ここで、出力からもわかるように、y32の値はYレジスタ15では32ビットとして扱われているが、実際は1ビットの値であるので、加算結果は32ビット+キャリーの範囲で収まる。
(積和回路の構成)
図13は、上述の構成例で用いた積和回路の構成の一例を示す図である。
ここでは、全ての処理単位を32ビットになるように構成している。
積和回路は、1個の32ビット乗算器51と、4個の32ビット加算器52,53,54,55とを有する。
A,Bの入力値は32ビット乗算器51で乗算され、上位32ビットと下位32ビットとの2つで出力される。32ビット加算器53は、32ビット乗算器51の出力の下位32ビットと入力Rの値とを加算し、その加算結果の出力32ビットを32ビット加算器55へ、キャリーを32ビット加算器52へそれぞれ出力する。32ビット加算器52は、32ビット乗算器51の出力上位32ビットと32ビット加算器53のキャリー出力とを加算し、その加算結果の出力32ビットを32ビット加算器54へ出力する。この加算ではキャリーが発生しないことが理論的に証明されている。32ビット加算器55は、32ビット加算器53の出力と入力Cの値とを加算し、その加算結果の出力32ビットを積和回路のL出力(下位32ビット)として出力し、キャリーは32ビット加算器54へ出力される。32ビット加算器54は、32ビット加算器52の出力と32ビット加算器55のキャリー出力とを加算し、その加算結果の出力32ビットを積和回路のH出力(上位32ビット)として出力する。この加算ではキャリーが発生しないことが理論的に証明されている。
上記したすべてのアルゴリズム及び回路は特許文献1に記載されている。
上述した従来の乗算剰余装置に使用した積和回路は、図13に示されるように、4入力2出力の積和回路であった。この積和回路は、2入力の乗算及びその結果と残る2入力との加算を行う。一般的なプロセッサには4入力2出力積和回路が搭載されておらず、図12の2つの積和回路を単純化できないという問題がある。また、通常、Pentium(登録商標)プロセッサにおいては、2入力2出力の乗算器しか搭載されていない。それでも、2入力2出力の乗算器と加算器を使って、上記4入力2出力の積和回路と同等の機能を実現する場合には、あまり性能劣化は問題にはならなかった。ところが、最近のItanium2プロセッサに代表されるプロセッサには、3入力2出力の積和回路が搭載されている。特に、Itanium2プロセッサには、3入力2出力の積和回路が2台搭載されている。しかし、上記従来の4入力2出力の積和演算を使用するアルゴリズムでは、このような3入力2出力の積和回路を搭載したプロセッサの能力を最大限生かすことはできない。
特開平11−212456号公報
本発明の課題は、モンゴメリ法に適した、3入力2出力の積和演算を用いた、効率の良い乗算剰余計算装置、及び、その方法を提供することである。
本発明のモンゴメリ法用乗算剰余計算装置は、ある値AとBの乗算をし、法Nによる剰余算を行って、結果Yを計算するモンゴメリ法用乗算剰余計算装置において、Aのある1桁の値と、Bのある1桁の値と、キャリー値との3値を入力とし、Aのある1桁の値とBのある1桁の値の乗算を行い、これにキャリー値を加算した結果を、自身の新たなキャリー値としての上位桁と、下位桁の2値に分けて出力する第1の積和計算手段と、Nのある1桁の値と、ある1桁の値mと、キャリー値との3値を入力とし、Nのある1桁の値とある値mとの乗算を行い、これにキャリー値を加算した結果を、自身の新たなキャリー値としての上位桁と、下位桁の2値に分けて出力する第2の積和計算手段と、第1の積和計算手段の出力の下位桁と、第2の積和計算手段の出力の下位桁と、変数Yのある1桁と、キャリー値とを加算した結果を、自身の新たなキャリー値としての上位桁と、下位桁の2値に分けて出力し、該下位桁を変数Yのある1桁に格納する加算手段とを備えることを特徴とする。
従来のアルゴリズム4のコア処理を実行する乗算剰余計算装置の構成図である 図1の場合の従来の積和回路の構成図(その1)である。 図1の場合の従来の積和回路の構成図(その2)である。 従来のアルゴリズム4のコア処理の内容を示す説明図である。 従来のアルゴリズム5のコア処理を実行する乗算剰余計算装置の構成図である。 図4の場合の従来の積和回路の構成図(その1)である。 図4の場合の従来の積和回路の構成図(その2)である。 従来のアルゴリズム5のコア処理の内容を示す説明図である。 従来のアルゴリズム6のコア処理を実行する乗算剰余計算装置の構成図である。 従来のアルゴリズム6のコア処理の内容を示す説明図である。 モンゴメリ法による乗算剰余処理の一例を示すフローチャートの概観図である。 コア前処理を行う構成の一例を示す図である。 iループ内部処理であるコア処理を行う構成の一例を示す図である。 コア後処理を行う構成の一例を示す図である。 従来の積和回路の構成の一例を示す図である。 本発明の実施形態のアルゴリズムのコア処理を実行する乗算剰余計算装置の構成図である。 本発明の実施形態のアルゴリズムにおけるコア前処理を行うための装置構成を示す図である。 本発明の実施形態のアルゴリズムにおけるコア後処理を行うための装置構成を示す図である。
本発明の実施形態においては、3入力2出力の積和回路を有効に使用した、モンゴメリ法の使用のための演算回路を提供する。
以下に、3入力2出力の積和回路に適した本発明の実施形態について説明する。
本発明の実施形態では、上記アルゴリズム6のコア処理部において、2つの3入力2出力積和回路を用いてアルゴリズムを実行する。本発明の実施形態のアルゴリズムを実行する演算回路においては、第1積和回路が出力する上位kビットはキャリー変数cとして第1積和回路に戻し、第2積和回路が出力する上位kビットはキャリー変数cとして第2積和回路に戻し、加算回路の出力結果である(k+2)ビットを上位2ビットと下位kビットとに分離し、上位2ビットをキャリー変数cとして加算回路に戻す。
この場合のアルゴリズムを以下に示す。
(アルゴリズム)
乗算する2数A,B,剰余の法N,モンゴメリ乗算のパラメータn’0,出力用変数Yが何れもr進数で、
A=(ag-1 ,ag-2,…,a0r
B=(bg-1 ,bg-2,…,b0r
N=(ng-1 ,ng-2,…,n0r
Y=(yg ,yg-1,…,y0r
n’0
r=2k
R=rg
とあらわされ、r進1桁の一時変数をtmp1,tmp2,キャリー変数をc1 ,c,cとする場合、次に示すi,jの繰り返し処理によりABR-1mod Nを単精度×単精度の計算として求めることができる。
Y=0
for j=0 to g−1 ……………………………
(c,tmp1)r =a0・bj +y0
m=tmp1・n’0 mod r
(c,tmp1)r =tmp1+m・n0 コア前処理
=0
for i=1 to g−1 ……………………………
(c,tmp1)r = ai ・bj+c
(c,tmp2 )r = m・ni+c コア処理
(c,yi-1r = tmp1+tmp2+c3+yi
next i ……………………………
(c2 ,c1 r =c1 +c2 +c+yg
g-1 =c1 コア後処理
g =c2
next j ……………………………
if Y≧N then Y=Y−N 補正処理
if Y<N then return Y
ここで、( )r は、括弧内のr進数1桁の変数を多重精度として扱うことを示している。またキャリー変数c2 はr進数1桁で表現しているが、内容は1ビットの値である。
図14は、本発明の実施形態のアルゴリズムのコア処理を実行する乗算剰余計算装置の構成図である。
図14に示す乗算剰余計算装置は、内部で乗算及び加算を行う積和回路60及び積和回路61と、加算回路62と、乗算する一方の数A:(ag-1 ,ag-2 ,…,a0 )を保持する第1レジスタとしてのAレジスタ63と、乗算する一方の数B:(bg-1,bg-2 ,…,b0 )を保持する第2レジスタとしてのBレジスタ64と、加算回路62の前回の演算結果の下位kビット出力を保持し、次回の演算の下位kビット出力を格納する第3レジスタとしてのYレジスタ65と、モンゴメリアルゴリズムにおけるパラータmを保持する第4レジスタとしてのmレジスタ66と、剰余の法N:(ng-1,ng-2 ,…,n0 )を保持する第5レジスタとしてのNレジスタ67と、キャリー変数c1を保持する第6レジスタとしてのc1レジスタ68と、キャリー変数c2を保持する第7レジスタとしてのc2レジスタ69と、キャリー変数cを保持する第8レジスタとしてのcレジスタ70と、jの値と0とを比較してその出力を選択する選択回路71とを有する。
なお、図14中、積和回路60、積和回路61のA,B,C,H,Lは全てkビットである。kビットのkとは、演算に使用するプロセッサが単精度の数を表現する場合に用いるビット数であり、32ビットプロセッサの場合には、kは32である。A×B+Cの積和結果2kビットを(H,L)と表現し、Hが上位kビット、Lが下位kビットとなる。図14中、加算回路62は、A,B,C,D,Lは全てkビット、Hのみ2ビット(ソフトウェアの場合にはHもkビット)。A+B+C+Dの加算結果(k+2)ビットを(H,L)と表現し、Hが上位2ビット(ソフトウェアの場合にはkビット)、Lが下位kビットとなる。なお、加算回路62は、4入力2出力の加算回路を用いなくても良い。すなわち、加算演算は、乗算演算に比べ、計算量が少ないので、モンゴメリ法による演算に要する時間や負荷に与える影響は少ない。したがって、たとえば、2入力2出力の加算回路を組み合わせて加算回路62としても、本発明のアルゴリズムの性能には大きな影響は与えない。よって、図14では、加算回路は4入力2出力加算回路を使っているが、その構成法はここでは規定しない。2入力2出力加算を3個使用すれば、加算回路62と同様の回路は実現可能であるし、キャリー付加算命令を使用する方法もあり、この加算は多種の構成法がある。
図14において、積和回路60は、Aの1桁とBの1桁と、キャリー1桁とを入力し、積和計算をし、答えを(H、L)として出力している。すなわち、積和回路60では、前述の本発明の実施形態のアルゴリズムのコア処理の内、(c,tmp1)r = ai ・bj+cを計算している。積和回路61は、1桁のmと、Nの1桁と、キャリー1桁を入力し、積和計算を行い、答えを(H、L)として出力している。すなわち、積和回路61では、前述の本発明の実施形態のアルゴリズムのコア処理の内、(c,tmp2 )r = m・ni+cを行っている。
加算回路62では、積和回路60の演算結果の下位kビットと積和回路61の演算結果の下位kビットと、Yの1桁と、キャリー1桁を入力し、演算結果の下位kビットをYに格納している。すなわち、加算回路62では、(c,yi-1r = tmp1+tmp2+c3+yiを行っている。
なお、積和回路60と61は、2つの3入力2出力の積和回路を用いて並列に行うのが好ましく、また、加算回路62の演算が行われている間に、積和回路60と61は、次回の演算を行っていることが好ましい。
更に、以下に、コア前処理とコア後処理を行う乗算剰余計算装置の構成を示すが、本発明の実施形態のアルゴリズムが、従来技術のアルゴリズム6の変形構成であるため、アルゴリズム6の場合とほぼ同じである。
図15は、本発明の実施形態のアルゴリズムにおけるコア前処理を行うための装置構成を示す図である。
レジスタ41はモンゴメリ計算用のパラメータn’0 を保持する。乗算回路40は積和回路60の出力とレジスタ41の出力とを乗算する。このコア前処理では、コア処理で使用するcレジスタ68,cレジスタ69、cレジスタ70及びmレジスタ66の初期化を行っている。積和回路60は、まず、Aレジスタ63,Bレジスタ64からの入力a0,bj を乗算し、その乗算結果とYレジスタ65からの入力yi とを加算する。
そして、結果の上位kビットをcレジスタ68に格納し、下位kビットを積和回路61とパラメータmを計算するための乗算回路40とへ出力する。
乗算回路40は、積和回路60の出力とレジスタ41の出力n’0 とを乗算し、その乗算結果の下位kビットをmレジスタ66に出力する。積和回路61は、Nレジスタ67からの入力n0とmレジスタ66の値とを乗算し、その乗算結果と積和回路60からの出力とを加算する。そして、結果の上位kビットをcレジスタ69に格納する。下位kビットは使用しない。
以上のコア前処理の演算装置においても、3入力2出力の積和回路を使っている。従来のアルゴリズム6の場合には、コア前処理で、コア処理のときに使用する積和回路と同じ積和回路を使用する場合には、4入力の内、1つを0としたが、本発明の実施形態においては、使用する積和回路が3入力2出力であるので、このような設定は不要である。
また、コア前処理においては、積和回路60の処理の後に、積和回路61の処理を行う必要があるため、コア処理のように、積和回路60と61を並列に実行することができない。したがって、3入力2出力の積和回路を2つ持っていても、コア前処理では、コア処理ほど効果は出ないが、それでも、3入力2出力の積和回路を有効に使うことはできる。
図16は、本発明の実施形態のアルゴリズムにおけるコア後処理を行うための装置構成を示す図である。
加算回路45は、cレジスタ68の出力と、cレジスタ69の出力と、cレジスタ70の出力と、選択回路19の出力とを加算する。選択回路46は、加算回路45からのキャリー出力を0,1と比較し、0であれば0を、1であれば1を、Yレジスタ65へ出力する。このコア後処理では、コア処理終了後のキャリー変数c,c ,cの値の処理を行っている。
レジスタ68,cレジスタ69,cレジスタ70の値、及び、Yレジスタ65からの入力yを加算回路45に入力し、その加算結果をYレジスタ15のyg−1に出力し、キャリーを処理単位であるkビットの値に変換してYレジスタ65のyに出力する。ここで、出力からもわかるように、yの値はYレジスタ65ではkビットとして扱われているが、実際は1ビットの値であるので、加算結果はkビット+キャリーの範囲で収まる。
以上の、本発明の実施形態によれば、3つの変数を入力とし、2つの出力で演算結果を返すような積和命令を持ち、同時に積和命令を2つ処理することの出来るItanium2プロセッサに代表されるプロセッサにおいて、従来法で構成したものに比べ、4倍の高速化を実現した。これは、積和回路61、62を並列化したこと、更に、この並列化により伝播遅延時間が短縮されたことによる。本発明の3入力2出力の積和演算回路は積和回路61、62を従来どおりに直列に接続したものにも適用できる。
以上、本発明によれば、3入力2出力の積和演算回路を有する演算装置に適したモンゴメリ法用乗算剰余計算装置を実現できる。同様に、同じような積和回路を持つDSPに実装する場合に高速化が可能であると期待できる。

Claims (16)

  1. ある値AとBの乗算をし、法Nによる剰余算を行って、結果Yを計算するモンゴメリ法用乗算剰余計算装置において、
    Aのある1桁の値と、Bのある1桁の値と、キャリー値との3値を入力とし、Aのある1桁の値とBのある1桁の値の乗算を行い、これにキャリー値を加算した結果を、自身の新たなキャリー値としての上位桁と、下位桁の2値に分けて出力する第1の積和計算手段と、
    Nのある1桁の値と、ある1桁の値mと、キャリー値との3値を入力とし、Nのある1桁の値とある値mとの乗算を行い、これにキャリー値を加算した結果を、自身の新たなキャリー値としての上位桁と、下位桁の2値に分けて出力する第2の積和計算手段と、
    第1の積和計算手段の出力の下位桁と、第2の積和計算手段の出力の下位桁と、変数Yのある1桁と、キャリー値とを加算した結果を、自身の新たなキャリー値としての上位桁と、下位桁の2値に分けて出力し、該下位桁を変数Yのある1桁に格納する加算手段と、
    を備えることを特徴とするモンゴメリ法用乗算剰余計算装置。
  2. 前記第1の積和計算手段の演算と、前記第2の積和計算手段の演算とは、並列に行われることを特徴とする請求項1に記載のモンゴメリ法用乗算剰余計算装置。
  3. 前記モンゴメリ法用乗算剰余計算装置は、公開鍵暗号方式の演算に使用されることを特徴とする請求項1に記載のモンゴメリ法用乗算剰余計算装置。
  4. 前記演算の入力及び出力の1桁の値は、プロセッサが単精度の数値を表す場合に用いられるビット数からなることを特徴とする請求項1に記載のモンゴメリ法用乗算剰余計算装置。
  5. 前記加算手段が演算を行っている間に、前記第1の積和計算手段と、前記第2の積和計算手段が次回の演算を行うことを特徴とする請求項1に記載のモンゴメリ法用乗算剰余計算装置。
  6. Aの最下位の1桁の値と、Bのある1桁の値と、結果を格納する変数Yの1桁とを入力とし、Aの最下位の1桁の値と、Bのある1桁の値とを乗算し、これに変数Yの1桁を加算した結果を、前記第1の積和計算手段へのキャリー値の初期値としての上位桁の値と、下位桁の2値として出力する第3の積和計算手段と、
    該第3の積和計算手段の出力の内の下位桁と、モンゴメリ法用のパラメータとを入力し、これらを乗算して出力する乗算手段と、
    該第3の積和計算手段の出力の内の下位桁と、該乗算手段の出力と、Nのある1桁の3値を入力として、Nのある1桁の値と該乗算手段の出力とを乗算し、これらに該第3の積和計算手段の出力の内の下位桁を加算し、加算結果の上位桁を前記第2の積和計算手段へのキャリー値の初期値として出力する第4の積和計算手段と、
    を更に備えることを特徴とする請求項1に記載のモンゴメリ法用乗算剰余計算装置。
  7. 前記第1の積和計算手段と、前記第2の積和計算手段と、前記加算手段のそれぞれの出力であるキャリー値と、前記加算手段の演算後の変数Yの最上位桁値を入力し、これらを加算した結果の上位桁を変数Yの最上位桁に、下位桁を変数Yの上位から2番目の桁に格納する第2の加算手段を更に備えることを特徴とする請求項1に記載のモンゴメリ法用乗算剰余計算装置。
  8. ある値AとBの乗算をし、法Nによる剰余算を行って、結果Yを計算するモンゴメリ法用乗算剰余計算方法において、
    (a)Aのある1桁の値と、Bのある1桁の値と、キャリー値との3値を入力とし、Aのある1桁の値とBのある1桁の値の乗算を行い、これにキャリー値を加算した結果を、自身の新たなキャリー値としての上位桁と、下位桁の2値に分けて出力し、
    (b)Nのある1桁の値と、ある1桁の値mと、キャリー値との3値を入力とし、Nのある1桁の値とある値mとの乗算を行い、これにキャリー値を加算した結果を、自身の新たなキャリー値としての上位桁と、下位桁の2値に分けて出力し、
    (c)ステップ(a)の出力の下位桁と、ステップ(b)の出力の下位桁と、変数Yのある1桁と、キャリー値とを加算した結果を、自身の新たなキャリー値としての上位桁と、下位桁の2値に分けて出力し、該下位桁を変数Yのある1桁に格納する、
    ことを特徴とするモンゴメリ法用乗算剰余計算方法。
  9. ある値AとBの乗算をし、法Nによる剰余算を行って、結果Yを計算するモンゴメリ法用乗算剰余計算方法をコンピュータに実現させるプログラムにおいて、
    (a)Aのある1桁の値と、Bのある1桁の値と、キャリー値との3値を入力とし、Aのある1桁の値とBのある1桁の値の乗算を行い、これにキャリー値を加算した結果を、自身の新たなキャリー値としての上位桁と、下位桁の2値に分けて出力し、
    (b)Nのある1桁の値と、ある1桁の値mと、キャリー値との3値を入力とし、Nのある1桁の値とある値mとの乗算を行い、これにキャリー値を加算した結果を、自身の新たなキャリー値としての上位桁と、下位桁の2値に分けて出力し、
    (c)ステップ(a)の出力の下位桁と、ステップ(b)の出力の下位桁と、変数Yのある1桁と、キャリー値とを加算した結果を、自身の新たなキャリー値としての上位桁と、下位桁の2値に分けて出力し、該下位桁を変数Yのある1桁に格納する、
    ことを特徴とするモンゴメリ法用乗算剰余計算方法をコンピュータに実行させるプログラム。
  10. モンゴメリのアルゴリズムを用いて、プロセッサの単精度(kビット)演算による乗算剰余計算を行う装置において、
    積和演算を行い、その演算結果を上位kビットと下位kビットとに分けて出力する第1積和回路と、
    積和演算を行いその演算結果を上位kビットと下位kビットとに分けて出力する第2積和回路と、
    加算演算を行いその演算結果を上位2ビットと下位kビットとに分けて出力する加算回路と、
    前記第1積和回路で乗算される2数を保持する第1及び第2レジスタと、
    前記加算回路の下位kビット出力を保持し、前記加算回路のその次の回のkビット入力を格納する第3レジスタと、
    モンゴメリのアルゴリズムにおけるパラメータの値を保持する第4レジスタと、
    剰余の法を保持する第5レジスタと、
    前記第1積和回路の上位kビット出力を保持し、同第1積和回路のその次の回の加算される入力となる数を格納する第6レジスタと、
    前記第2積和回路の上位kビット出力を保持し、同第2積和回路のその次の回の加算される入力となる数を格納する第7レジスタと、
    前記加算回路の上位2ビット出力を保持し、同加算回路のその次の回の入力となる数を格納する第8レジスタとを備え、
    前記第1積和回路は、前記第1及び第2レジスタに保持された2数の所定ビットの値を乗算し、その乗算結果に前記第6レジスタに保持された値を加算する演算を行い、前記第2積和回路は、前記第4レジスタに保持された値と前記第5レジスタに保持された数の所定ビットの値とを乗算し、その乗算結果に前記第7レジスタに保持された値を加算する演算を行い、前記加算回路は、前記第1積和回路の下位kビット出力と前記第2積和回路の下位kビット出力と前記第3レジスタに保持された所定ビットの値と前期第8レジスタに保持された値を加算する演算を行うように構成したことを特徴とするモンゴメリ法による乗算剰余計算装置。
  11. 前記第1積和回路は、前記第1及び第2レジスタに保持された2数の所定ビットの値を乗算し、その乗算結果に前記第6レジスタに保持された値を加算するように構成した請求項10に記載のモンゴメリ法による乗算剰余計算装置。
  12. 前記第2積和回路は、前記第4レジスタに保持された値と第5レジスタに保持された所定ビットの値を乗算し、その乗算結果に前記第7レジスタに保持された値を加算するように構成した請求項10に記載のモンゴメリ法による乗算剰余計算装置。
  13. 前記加算回路による演算中に、前記第1及び第2積和回路によりその次の回の演算を行うように構成した請求項10〜12の何れか一つに記載のモンゴメリ法による乗算剰余計算装置。
  14. 前記加算回路が演算を行う間、前記第1積和回路及び前記第2積和回路で次の回の演算を行うように、パイプライン処理すべく構成したことを特徴とする請求項10に記載のモンゴンメリ法による乗算剰余計算装置。
  15. 前記第1積和回路及び第2積和回路にあって、各自身の上位出力を各自身の次の回のキャリア入力とするようにした請求項10に記載のモンゴンメリ法による乗算剰余計算装置。
  16. 前記第1積和回路及び第2積和回路は、2つのkビットの数を乗算する手段と、その乗算結果に1つのkビットの数を加算する手段とを有する請求項10に記載のモンゴンメリ法による乗算剰余計算装置。
JP2007553818A 2006-01-13 2006-01-13 モンゴメリ法用乗算剰余計算装置 Expired - Fee Related JP4783382B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2006/300396 WO2007080652A1 (ja) 2006-01-13 2006-01-13 モンゴメリ法用乗算剰余計算装置

Publications (2)

Publication Number Publication Date
JPWO2007080652A1 true JPWO2007080652A1 (ja) 2009-06-11
JP4783382B2 JP4783382B2 (ja) 2011-09-28

Family

ID=38256068

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007553818A Expired - Fee Related JP4783382B2 (ja) 2006-01-13 2006-01-13 モンゴメリ法用乗算剰余計算装置

Country Status (4)

Country Link
US (1) US8352529B2 (ja)
EP (1) EP1975906B1 (ja)
JP (1) JP4783382B2 (ja)
WO (1) WO2007080652A1 (ja)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7765458B1 (en) * 2005-09-29 2010-07-27 Marvell International Ltd. Error pattern generation for trellis-based detection and/or decoding
US8321771B1 (en) 2008-10-13 2012-11-27 Marvell International Ltd. Modified trace-back using soft output viterbi algorithm (SOVA)
US8438208B2 (en) * 2009-06-19 2013-05-07 Oracle America, Inc. Processor and method for implementing instruction support for multiplication of large operands
EP2385461A1 (en) * 2010-04-30 2011-11-09 Certicom Corp. Method and apparatus for providing flexible bit-length moduli on a block Montgomery machine
US8626811B2 (en) 2010-04-30 2014-01-07 Certicom Corp. Method and apparatus for providing flexible bit-length moduli on a block Montgomery machine
US8555038B2 (en) 2010-05-28 2013-10-08 Oracle International Corporation Processor and method providing instruction support for instructions that utilize multiple register windows
US9513870B2 (en) * 2014-04-22 2016-12-06 Dialog Semiconductor (Uk) Limited Modulo9 and modulo7 operation on unsigned binary numbers
JP6863907B2 (ja) * 2018-01-05 2021-04-21 日本電信電話株式会社 演算回路
JP7114321B2 (ja) * 2018-04-26 2022-08-08 キヤノン株式会社 データ処理装置及びその方法
JP7286239B2 (ja) * 2019-02-28 2023-06-05 ルネサスエレクトロニクス株式会社 演算処理方法、演算処理装置、及び半導体装置

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3302043B2 (ja) 1992-05-18 2002-07-15 キヤノン株式会社 暗号通信方法及びそのシステム
JPH08265313A (ja) * 1995-03-27 1996-10-11 Toshiba Corp データスクランブル装置
ES2293677T3 (es) 1997-05-04 2008-03-16 Sandisk Il Ltd Aparato y metodo mejorados para la multiplicacion y exponenciacion modulares basadas en la multiplicacion de montgomery.
US6026421A (en) * 1997-11-26 2000-02-15 Atmel Corporation Apparatus for multiprecision integer arithmetic
JP3616897B2 (ja) 1998-01-27 2005-02-02 富士通株式会社 モンゴメリ法による乗算剰余計算装置
US7509486B1 (en) * 1999-07-08 2009-03-24 Broadcom Corporation Encryption processor for performing accelerated computations to establish secure network sessions connections
US6662201B1 (en) * 1999-11-01 2003-12-09 Kabushiki Kaisha Toshiba Modular arithmetic apparatus and method having high-speed base conversion function
JP3554525B2 (ja) * 2000-05-10 2004-08-18 株式会社東芝 モンゴメリ乗算装置及び方法
JP3540280B2 (ja) * 2001-01-19 2004-07-07 株式会社東芝 べき乗剰余演算方法、および、剰余演算方法
JP3904421B2 (ja) * 2001-10-04 2007-04-11 株式会社ルネサステクノロジ 剰余乗算演算装置
US7266577B2 (en) * 2002-05-20 2007-09-04 Kabushiki Kaisha Toshiba Modular multiplication apparatus, modular multiplication method, and modular exponentiation apparatus
JP2004258141A (ja) * 2003-02-24 2004-09-16 Fujitsu Ltd モンゴメリ乗算剰余の多倍長演算のための演算装置
JP4408712B2 (ja) 2004-01-26 2010-02-03 富士通マイクロエレクトロニクス株式会社 多倍長データ積和演算処理回路及びモンゴメリ積和剰余演算回路

Also Published As

Publication number Publication date
US20100023571A1 (en) 2010-01-28
WO2007080652A1 (ja) 2007-07-19
JP4783382B2 (ja) 2011-09-28
EP1975906A1 (en) 2008-10-01
EP1975906B1 (en) 2012-07-04
EP1975906A4 (en) 2011-06-15
US8352529B2 (en) 2013-01-08

Similar Documents

Publication Publication Date Title
JP4783382B2 (ja) モンゴメリ法用乗算剰余計算装置
US5499299A (en) Modular arithmetic operation system
Gutub et al. Hybrid crypto hardware utilizing symmetric-key and public-key cryptosystems
US20110161390A1 (en) Modular multiplication processing apparatus
KR100800468B1 (ko) 저전력 고속 동작을 위한 하드웨어 암호화/복호화 장치 및그 방법
US20090136025A1 (en) Method for scalarly multiplying points on an elliptic curve
US20020126838A1 (en) Modular exponentiation calculation apparatus and modular exponentiation calculation method
JP3616897B2 (ja) モンゴメリ法による乗算剰余計算装置
JP4177526B2 (ja) 乗算剰余演算方法および乗算剰余回路
JP3302043B2 (ja) 暗号通信方法及びそのシステム
Panjwani Scalable and parameterized hardware implementation of elliptic curve digital signature algorithm over prime fields
JP3797808B2 (ja) スカラー倍算方法およびその装置
JP3615405B2 (ja) 素体上楕円曲線上の点の演算方法およびその装置
JP2000137436A (ja) 素体上楕円曲線上の点の演算方法およびその装置
JP3591857B2 (ja) 擬似乱数生成方法及び装置、通信方法及び装置
Aswathy et al. Modified RSA public key algorithm
JP4502817B2 (ja) 楕円曲線スカラー倍計算方法および装置
US7403965B2 (en) Encryption/decryption system for calculating effective lower bits of a parameter for Montgomery modular multiplication
KR100406138B1 (ko) 엔티알유 암/복호화 장치
JP7406108B2 (ja) 暗号復号システム、暗号復号方法、及び暗号復号用プログラム
KR19990064878A (ko) 고속의 모듈라 멱승 연산기
JP2022117083A (ja) 演算システム、演算方法およびプログラム
JP2002139995A (ja) 公開鍵生成装置、暗号化装置および復号装置
WO2003030442A2 (en) Cisponentiation method, software, and device for exponentiation
JP3999554B2 (ja) 乗算剰余演算方法及び演算装置

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110412

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110610

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20110705

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20110708

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

Free format text: PAYMENT UNTIL: 20140715

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 4783382

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees