JP2002007112A - 剰余演算計算方法および剰余演算計算装置 - Google Patents

剰余演算計算方法および剰余演算計算装置

Info

Publication number
JP2002007112A
JP2002007112A JP2000185198A JP2000185198A JP2002007112A JP 2002007112 A JP2002007112 A JP 2002007112A JP 2000185198 A JP2000185198 A JP 2000185198A JP 2000185198 A JP2000185198 A JP 2000185198A JP 2002007112 A JP2002007112 A JP 2002007112A
Authority
JP
Japan
Prior art keywords
multiplication
remainder
bits
calculation
value
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.)
Abandoned
Application number
JP2000185198A
Other languages
English (en)
Inventor
Hisaaki Sato
弥章 佐藤
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.)
Sony Corp
Original Assignee
Sony Corp
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 Sony Corp filed Critical Sony Corp
Priority to JP2000185198A priority Critical patent/JP2002007112A/ja
Publication of JP2002007112A publication Critical patent/JP2002007112A/ja
Abandoned legal-status Critical Current

Links

Abstract

(57)【要約】 【課題】 長いビット長の剰余演算をより高速で行なう
ことが可能な剰余演算計算装置の実現を課題とする。 【解決手段】 剰余演算を行う剰余演算計算装置におい
て、演算の中間結果において冗長表現の除算値を生成す
る計算手段を設ける。さらに、冗長剰余乗算ループはR
AM1〜7、レジスタ8〜20、乗算器21〜23、加
算器24〜26を組み合わせた回路により並列演算が可
能になる。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、剰余演算計算方法
および剰余演算計算装置に関し、特に長いビット長の剰
余演算を高速で演算可能な剰余演算計算方法および剰余
演算計算装置に関する。
【0002】
【従来の技術】長いビット長の剰余乗算・除算を実現す
る方法としては、モンゴメリ法が用いられることが多
い。モンゴメリのアルゴリズムは、剰余の法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の計算が高速に処理でき
る。
【0003】しかし、この計算方法を用いた場合、除算
を行う必要は無いものの、一回の単位剰余乗算あたりに
3回の算術的乗算が必要である。また、モンゴメリ法で
は、その計算の準備段階でユークリッドの互除法を用い
て“整数一次結合”の数式を準備しておく必要があり、
この部分で多倍長の除算が必要となる。(“整数一次結
合”については、“数論アルゴリズムと楕円暗号理論入
門”(ISBN4_431_70727_1のP20に
示されている。) モンゴメリ法を用いて剰余べき乗演算を行った場合、単
位乗算がビット長の1+f(e)倍必要である。ここで
f(e)はべき乗演算がMe である場合に2進数で示さ
れるeの各桁のうち“1”である桁数を示す関数であ
る。このため、合計の乗算回数はビット長をbitle
nで表すと、 3*bitlen*(1+f(e)) =3*bitlen+3*f(e)*bitlen となる。本発明を用いた場合、演算器の大きさはやや大
きくなるものの、演算量は 2*bitlen+f(e)*bitlen+α となる。詳細な計算量の算出は後述する詳細説明で述べ
る。また、計算過程を並列化することが可能であり、並
列化によってスピード重視型のLSIを作成した場合計
算速度を3〜6倍程度にすることが可能である。
【0004】
【発明が解決しようとする課題】上述のごとく、従来の
モンゴメリ法を用いた剰余演算計算方法および剰余演算
計算装置においては、除算を行う必要は無いものの、一
回の単位剰余乗算あたりに3回の算術的乗算が必要であ
り、このために演算の高速化に限界があった。本発明
は、比較的簡単な構成でこの問題を解決して、長いビッ
ト長の剰余演算をより高速に行なうことが可能な剰余演
算計算方法および剰余演算計算装置の実現を課題とす
る。
【0005】
【課題を解決するための手段】上記課題を達成するた
め、本発明は、剰余演算を行う計算方法において、演算
の中間結果で冗長表現の除算値を生成する計算過程をと
ることを特徴とする。また、ビット数の長い剰余乗算V
r=Va*Vb(mod p)(Vr:N+Mビット、
Va:Nビット、Vb:Mビット)を行う計算方法にお
いて、VaをN=N1(bit/Word)*N2(W
ord)、VbをM=M1(bit/Word)*M2
(Word)に分割して扱い、乗算をN1、M1ビット
の部分乗算を用いた乗加算で実現する場合に、Va*2
M1*n(mod p)を満足する冗長表現の値を用いて行
うことを特徴とする。
【0006】さらに、剰余演算を行う剰余演算計算装置
において、演算の中間結果で冗長表現の除算値を生成す
る計算手段を有することを特徴とする。さらに、ビット
数の長い剰余乗算Vr=Va*Vb(mod p)(V
r:N+Mビット、Va:Nビット、Vb:Mビット)
を行う剰余演算計算装置において、VaをN=N1(b
it/Word)*N2(Word)、VbをM=M1
(bit/Word)*M2(Word)に分割して扱
い、乗算をN1、M1ビットの部分乗算を用いた乗加算
で実現する計算手段と、Va*2M1*n(modp)を満
足する冗長表現の値を用いて行う計算手段とを具備する
ことを特徴とする。これらにより、演算の中間過程で冗
長表現を許容して、高速な剰余演算が可能な剰余演算計
算方法および剰余演算計算装置を実現することができ
る。
【0007】
【発明の実施の形態】以下、本発明にかかる計算方法お
よび計算装置を添付図面を参照にして詳細に説明する。
【0008】以後の表記では、ハードウェア記述言語で
あるVerilogにおける数値の表記方法を説明のた
めに使用する。すなわち、 1)nビットの値Vを示す場合は、V[n−1:0]と
記す。すなわち、n−1がMSBで0がLSBである。 2)数値の途中の1ビットを示す場合はV[i]と記述
する。 3)数値の途中の数ビット(j)を示す場合はV[i:
j]と記述する。 4)数値の分割・連結には{}を用いて記述する。すな
わち、 Vt[i+j−1:0]={V1[i−1:0],V2
[j−1:0]} は、V1、V2の値を連結してVtに代入することを示
す。
【0009】今、計算結果を求めたい乗算を (式1)
【0010】Vr[N+M−1:0]=Va[N−1:
0]*Vb[M−1:0] とする。また、 (式2)
【0011】N=n1*n2 M=m1*m2 に因数分解できるものとする。すると、Vbは以下の式
のように、要素Vb0、Vb1、Vb2、…Vb(m2
−1)に分解することができる。 (式3)
【0012】Vb[M−1:0]={Vb(m2−1)
[M−1:M−m1],… Vb2[3*m1−1:2*m1], Vb1[2*m1−1:m1],Vb0[m1−1:
0]} 式(1)の乗算の右辺に(式3)を用いて、 (式4・1)
【0013】Va*Vb[M−1:0]=Va[N−
1:0] *{Vb(m2−1)[M−1:M−m1],… Vb2[3*m1−1:2*m1], Vb1[2*m1−1:m1],Vb0[m1−1:
0]} と変形することができる。これは、 (式4・2)
【0014】Va*Vb[M−1:0]=Va*Vb0
+Va*Vb1*(2^m1)+Va*Vb2*(2^
(2*m1))…+Va*Vb(m2−1)*(2^
(M−m1)) である。ところで、実際には計算したい値は、「算術乗
算」ではなく「剰余乗算」である。 (式5)
【0015】Va0’=Va(mod p) Va1’=Va*(2^m1)(mod p) Va2’=Va*(2^(2*m1))(mod p) Va3’=Va*(2^(3*m1))(mod p) : : Va(m2−1)’=Va(m1−1)*(2^(M−
m1))(mod p) が成立すると、 (式6)
【0016】 Va*Vb(mod p) =Va*Vb0+Va*Vb1*(2^m1) +Va*Vb2*(2^(2*m1))+…… +Va*Vb(m2−1)*(2^(M−m1))(mod p) =Va0’*Vb0+Va1’*Vb1+Va2’*Vb2+…… +Va(m2−1)’*Vb(m2−1)(mod p) が成り立つ。
【0017】上に示すVa0’、Va1’、…Va(m
2−1)’は、pを法としてVa、Va*(2^n)、
…Va*(2^(M−m1))に合同な値である。(こ
の記述は、“数論アルゴリズムと楕円暗号理論入門”
(ISBN4_431_70727_1)のP25から
説明されている“合同式”に記述されている。)数学的
に上記の関係が成り立つことは明白であるが、実際のハ
ードウェアを設計する場合は演算長に注意する必要があ
る。本案では、Va0’、Va1’、…Va(m2−
1)’の値については値を取りうる範囲として0以上p
*k未満の範囲の値とする。(ただし、kは正の小さな
整数。)
【0018】通常、剰余の値を用いる場合、値の取りう
る範囲は0以上p未満とすることが多いが、このような
正確な値を計算するためには多くの計算量を必要とす
る。本案では取りうる値に対しての制限をゆるめ、冗長
な値の使用を容認することにより、剰余数Va0’、V
a1’、…Va(m2−1)’をより少ない計算量で求
めることを特徴とする。(この特徴により、“冗長表
現”という一文が挿入されている。) これより後しばらくは、上に示す値を計算する方法につ
いて記述する。(式5)により、
【0019】 Va0’=Va(mod p) Va1’=Va*(2^n)(mod p) Va2’=Va*(2^(2*n))(mod p) Va3’=Va*(2^(3*n))(mod p) ……… Va(m1)’=Va(m−1)*(2^(N−n))
(mod p) である。(ただし、0≦Va0’、Va1’、…Va
(m−1)’<p*k)これは、 (式7)
【0020】Va0’=Va(mod p) Va1’=Va0’*(2^n)(mod p) Va2’=Va1’*(2^n)(mod p) Va3’=Va2’*(2^n)(mod p) ……… Va(m−1)’=Va(m−2)’*(2^n)(m
od p) が成り立つ。つまり、値の範囲が0以上p*k未満のV
a(t−1)’の値が用意され、その値に対して前記範
囲内の値Vat’を計算する方法を提示することが出来
れば、順次Vat’を計算できることになる。 (式8)
【0021】tmp0=Va0’*(2^n) として (式9)
【0022】Va1’=tmp0−[tmp0/p]*
p (但しこの式の[]は除算の後の小数点以下切り捨てを
意味する)である。Vat’の値の範囲は0以上p*k
未満であるため、(式9)のtmp0/pの解は近似計
算値であっても構わない。この近似除算に対する制限と
しては、値の範囲の制限から正確な値に対して0〜k−
1のオフセットまでを許すというものである。
【0023】tmp0,pのビット長は(式10)のよ
うになっているはずである。(但し、bk=log2
(k)を切り上げた値) (式10)
【0024】tmp0=tmp0[N+n+bk−1:
0] P=P[N−1:0] 以下、近似値計算の算出手段について述べる上記の値そ
のままを使用すると、冗長になるため、全く違う変数を
以下では便宜的に使用する。除算を (式11)
【0025】d=x/y とする。ただしx=x[α+β+γ−1:0]、y=x
[β+γ−1:0]とすると、
【0026】d=d[α−1:0] 上記の除算そのものを行う場合、ビット数が長いため計
算することが困難である。そこで、 (式12)
【0027】f(x[α+β+γ−1:γ])/g(x
[β+γ−1:γ]) のような計算式で求めることが望ましい。この値は、図
1に示すようなx、yのLSB側γビット分以外の値を
表す。関数f()、g()の処理に必要な計算量が多い
ことは望ましくない。近似値自身の制限としては、次の
ようになることが望ましい。 (式12)
【0028】x/y≦f(x[α+β+γ−1:γ])
/g(y[β+γ−1:γ]) この式を単純に実現する式が以下に示す式である。 (式13)
【0029】f(x[α+β+γ−1:γ])/g(y
[β+γ−1:γ])=x[α+β+γ−1:γ]/
(y[β+γ−1:γ]+1) (式12)の条件が満足されているかを確認するため
に、(式13)とx/yの差を計算する。 (式14)
【0030】 x/y−x[α+β+γ−1:γ]/(y[β+γ−1:γ]+1) =x[α+β+γ−1:0]/y[β+γ−1:0] −x[α+β+γ−1:γ]/(y[β+γ−1:γ]+1) ={x[α+β+γ−1:γ],x[γ−1:0]} /{y[β+γ−1:γ],y[γ−1:0]} −x[α+β+γ−1:γ]/(y[β+γ−1:γ]+1) =(x[α+β+γ−1:γ]*(2^γ)+x[γ−1:0]) /(y[β+γ−1:γ]*(2^γ)+y[γ−1:0]) −x[α+β+γ−1:γ]/(y[β+γ−1:γ]+1) ここで、
【0031】xH=x[α+β+γ−1:γ」 xL=x[γ−1:0] yH=y[β+γ−1:γ] yL=y[γ−1:0] として
【0032】 =(xH*(2^γ)+xL)/(yH*(2^γ)+yL) −xH/(yH+1) =((xH*(2^γ)+xL)*(yH+1) −xH*(yH*(2^γ)+yL)) /((yH*(2^γ)+yL)*(yH+1)) =((xH*yH*(2^γ)+xH*(2^γ)+xL*yH+xL) −(xH*yH*(2^γ)+xH*yL)) /((yH*(2^γ)+yL)*(yH+1)) =(xH*(2^γ)−xH*yL+xL*yH+xL) /((yH*(2^γ)+yL)*(yH+1)) =(xH*((2^γ)−yL)+xL*(yH+1)) /((yH*(2^γ)+yL)*(yH+1)) =(xH*((2^γ)−yL)) /((yH*(2^γ)+yL)*(yH+1)) +xL/(yH*(2^γ)+yL) となる。ここで(2^γ)−yL>0であるため、1項
目、2項目の双方とも正である。ゆえに(式13)を満
足していると確認できる。
【0033】どの程度の誤差が期待値として算出される
かも、上記の式から確認することが可能である。以下に
1項目、2項目について各々算出する。 (式15)
【0034】(xH*((2^γ)−yL))/((y
H*(2^γ)+yL)*(yH+1)) については、((2^γ)−yL)の大きさと、xH/
((yH*(2^γ)+yL)*(yH+1))の部分
の比率が問題となる。 (式16)
【0035】xL/(yH*(2^γ)+yL) この式については、大きな値になることがないため、誤
差の支配的要素ではない。誤差の値がある一定以上大き
いことは好ましくない。以上の(式8)、(式9)、
(式10)で用いているk、bk(=log2(k))
を各々4、2とすると、β≧αでない限りこの制限を満
足できないことが計算できる。この場合、除算で求める
係数は2*(n+bk)ビットの値を(n+bk)ビッ
トの値で割ることで算出される。
【0036】近似式として(式13)を使用する場合
に、yの係数が固定であることを利用して、予め計算を
しておいた値を利用することにより、除算の換わりに乗
算を用いることが可能である。 (式13)
【0037】f(x[α+β+γ−1:γ])/g(y
[β+γ−1:γ])=x[α+β+γ−1:γ]/
(y[β+γ−1:γ]+1) (式17)
【0038】ydiv=(2^(α+β))/(y[β
+γ−1:γ]+1) を予め計算しておいた後に (式18)
【0039】d’=(x[α+β+γ−1:γ]*yd
iv)/(2^(α+β)) という計算を順次利用することが可能である。この場合
でも、β≧αとすることにより最終的な誤差は2bit
以内(+3を最大とする誤差)となる。以上で、近似計
算の算出手段についての説明を終了する。以上に述べた
方法により、(式5)、(式6)、(式7)で説明した
Va0’〜Va(m2−1)’を計算することが出来る
ようになった。この値を用いて、剰余乗算を行うと(式
5)より
【0040】Va0’=Va(mod p) Va1’=Va*(2^m1)(mod p) Va2’=Va*(2^(2*m1))(mod p) Va3’=Va*(2^(3*m1))(mod p) …… Va(m2−1)’=Va(m2−1)*(2^(M−
m1))(mod p) 但し、k=4と上で定義したために0≦Vat’<4*
pである。この場合、(式6)の答のVa*Vb(mo
d p)は (式6)
【0041】 Va*Vb(mod p) =Va*Vb0+Va*Vb1*(2^m1) +Va*Vb2*(2^(2*m1))+…… +Va*Vb(m2−1)*(2^(M−m1))(mod p) =Va0’*Vb0+Va1’*Vb1+Va2’*Vb2+…… +Va(m2−1)’*Vb(m2−1)(mod p) ここで、0≦Vat’*Vbt<4*p*(2^m1)
であるため、 (式20)
【0042】0≦Vr=Va*Vb<4*m2*p*
(2^m1) となる。この値を、再度0≦Va*Vb<4*p以内に
するためには、ここまでに述べた近似値を使う方法を複
数回適用する方法や、事前に求めてある2^(N+n)
(mod p)を用いる方法がある。これは、
【0043】Vr=Vr[log2(4)+1og2
(m*p)+n−1:0]=Vr[log2(m)+N
+n+1:0] であるため、最初はN+nビット以上の部分を丸めるた
めに2^(N+n)(mod p)を計算すると良いた
めである。近似値を求める計算にもある程度の演算が必
要であるため、それを削除することが可能になる。計算
量を少なく保つためには、以下に述べる(式21)に示
される値のVr[l2m+N+n+1:N+n]がnビ
ット以内に収まっていることが望ましいことが予測され
る。 (式21)
【0044】log2(m)=l2mとして Vr[l2m+N+n+1:0]={Vr[l2m+N
+n+1:N+n],Vr[N+n−1:0]}=Vr
[l2m+N+n+1:N+n]*(2^(N+n))
+Vr[N+n−1:0] (式21−1)
【0045】Vr[l2m+N+n+1:0]=Vr
[l2m+N+n+1:N+n]*(2^(N+n)
(mod p))+Vr[N+n−1:0] この(式21−1)まで変形すると、Vr[l2m+N
+n+1:N+n]がnビット未満と仮定して、ビット
長はN+n+1ビット以下になる。この後に先に述べた
近似値を使用した丸め演算を行うことでN+2ビット以
下にできる。
【0046】図2(a)〜図2(d)にそって、この間
の数値のビット長の推移と最終的に冗長表現を許す形で
の丸め演算を適用すると、N+2ビット以下となること
を説明する。冗長表現を許容する形で、部分積を加算し
た結果の値(Vr)のビット長を図2(a)に示す。さ
らに、図2(b)にビット長を示すような定数2N+n
(mod p)を用意しておく。VrのLSB側N+n
ビット部分よりも上の部分(VrH)とこの定数を乗じ
た値、VrH*2N+n (mod p)のビット長は図2
(c)のようになる。この乗じた値とLSB側の値の和
のビット長(最大でもN+n+1ビット)を図2(d)
に示す。この値に対して、冗長表現を許す形での丸め演
算を再度適用すると、N+2ビット以下の値になる。以
上で、乗算についての説明を終了する。
【0047】以後では、べき乗についての説明を行う求
めるべき値を
【0048】Me (mod p)とする。ただしM=M
[N−1:0]、e=e[N−1:0]、p=p[N−
1:0]とする。べき乗の部分を単純に展開した全体の
式を示す。ただしMk=Mk[N−1:0]、Me=M
e[N−1:0]
【0049】 冗長表現を許容した場合の計算式は
【0050】Mk=Mk[N+1:0] Mk’=Mk’[N+1:0] Me=Me[N+1:0] Mkn=Mk’[N+n1+l2n2+1:0] Men=Men[N+n1+l2n2+1:0] d=d[n1+1:0] (n1+2bits va
lue) ph=ph[n1+1:0] =(1<<(2*(nl+2)))/p[N−1:N−
n1−3] np=np[N−1:0] =(1<<(N+n1))(mod p) //値の初期化
【0051】Mk=M Me=e[0]?M:1 ph=(1<<(2*(n1+2)))/p[N−1:
N−n1−3] np=(1<<(N+n1))(mod p) //べき乗ループ
【0052】
【0053】 for(j=0;j<N+1;j=j+n1) { d=(Mk’[N+1:N−n1]*ph)>>(n1+2) Mkn=Mkn+Mk’*Mk[j+n1−1:j] if(e[k]) Men=Men+Mk’*Me[j+n1−1:j] Mk’=(Mk’<<n1)−p*d } //上位、冗長部分の剰余演算 //上位の部分の剰余計算
【0054】 Mkn=Mkn[N+n1−1:0] +Mkn[N+n1+l2n2+1:0]*np if(e[k]) Men=Men[N+n1−1:0] +Men[N+n1+l2n2+1:0]*np //下位の部分は冗長剰余演算を適用
【0055】 d=(Mkn[N+n1+1:N]*ph)>>(n1+2) Mk=Mkn−p*d if(e[k]) { d=(Men[N+n1+1:N]*ph)>>(n1+2) Me=Men−p*d } }
【0056】冗長剰余乗算ループの部分を単位演算に更
に展開する。 (元の数式)
【0057】 for(j=0;j<N+1;j=j+n1) { d=(Mk’[N+n1+1:N]*ph)>>(n1+1) Mkn=Mkn+Mk’*Mk[j+n1−1:j] if(e[k]) Men=Men+Mk’*Me[j+n1−1:j] Mk’=(Mk’<<n1)−p*d } (展開後)
【0058】 for(j=0;j<N+1;j=j+n1) { d=(((Mk’[N+1:N]*ph)<<n1) +((Mk’[N−1:N−n1]*ph)))>>(n1+1) //乗加算 2回 for(i=0;i<N1+1;i=i+nl) //乗加算 N2+1回(#1) Mkn[i+2*n1−1:i] =Mkn[i+2*n1−1:i] +Mk’[i+n1−1:i]*Mk[j+n1−1:j] if(e[k]) for(i=0;i<N1+1;i=i+n1) //乗加算 N2+1回(#2) Men[i+2*n1−1:i] =Men[i+2*n1−1:i] +Mk’[i+n1−1:i]*Me[j+n1−1:j] for(i=0;i<N1+1;i=i+n1) //乗加算 N2+1回(#3) Mk’[i+2*n1−1:i] =Mk’[i+n1−1:i−n1]−p[i+n1−1:i]*d } (内部ループをまとめる)
【0059】 for(j=0;j<N+1;j=j+n1) { d=(((Mk’[N+1:N]*ph)<<n1) +((Mk’[N−1:N−n1]*ph)))>>(n1+1) //乗加算 2回 for(i=0;i<N1+1;i=i+n1) //乗加算 N2+1回(#1) { Mkn[i+2*n1−1:i] =Mkn[i+2*n1−1:i] +Mk’[i+n1−1:i]*Mk[j+n1−1:j] //#1 if(e[k]) Men[i+2*n1−1:i] =Men[i+2*n1−1:i] +Mk’[i+n1−1:i]*Me[j+n1−1:j] //#2 Mk’[i+2*n1−1:i] =Mk’[i+n1−1:i−n1]−p[i+n1−1:i]*d //#3 } }
【0060】 (展開後) //上位、冗長部分の剰余演算 //上位の部分の剰余計算
【0061】 for(i=0;i<N1+1;i=i+n1) //乗加算 N2+1回(#4) Mkn[i+2*n1−1:i] =Mkn[i+2*n1−1:i]+ Mkn[N+n1+l2n2+1:0]*np[i+n1−1:i] if(e[k]) for(i=0;i<N1+1;i=i+n1) //乗加算 N2+1回(#5) Men[i+2*n1−1:i] =Men[i+2*n1−1:i]+ Men[N+n1+l2n2+1:0]*np[i+n1−1:i] //下位の部分は冗長剰余演算を適用
【0062】 d=(Mkn[N+n1+1:N−n1]*ph)>>(2*n1+1) //乗算 2回 for(i=0;i<N1+1;i=i+n1) //乗加算 N2+1回(#6) Mk[i+2*n1−1:i] =Mkn[i+2*n1−1:i]−p[i+n1−1:i]*d if(e[k]) { d=(Men[N+n1+1:N−n1]*ph)>>(2*n1+1) //乗算 2回 for(i=0;i<N1+1;i=i+n1) //乗加算 N2+1回(#7) Me[i+2*n1−1:i] =Men[i+2*n1−1:i]−p[i+n1−1:i]*d } となる。
【0063】ここで、#1、#2、#3と#4、#5と
#6、#7では計算結果に依存性が無いため独立した演
算装置(乗加算器)を配置することが可能である。さら
に、#1、#2、#3では同一の値Mk’に対する演算
処理を行っているため、データを一つのメモリに配置
し、シングルポートで読んだ値を並列演算器に送ること
が可能である。
【0064】例として、#1、#2、#3を並列実行さ
せるハードウェアの例を図3のブロック図に示した。図
3において、符号1〜符号7はRAM、符号8〜符号2
0はレジスタ、符号21〜符号23は乗算器、符号24
〜符号26は加算器である。また、このハードウェアに
対して、上記の“内部ループをまとめた”動作の処理内
容を図4の動作チャートに示す。この例では、チャート
を簡便に記述する都合上、Nが4Wordで実装可能な
例について示している。全体のビット長や、動作チャー
トで扱っている値について列挙する。
【0065】N:全体のビット長:64bit n1:1Wordのビット長:16bit n2:最終的な解のワード長:4Word*N(=64
bit)=n1(16bit/word)*n2(4w
ord) Mk:66bit(=64+2bit) 表記上はWord単位で位置を表現する。(下の式の右
の項) (ビットポジション)Mk[15:0]=(ワードポジ
ション)Mk[0] (ビットポジション)Mk[31:16]=(ワードポ
ジション)Mk[1] (ビットポジション)Mk[47:32]=(ワードポ
ジション)Mk[2] (ビットポジション)Mk[63:48]=(ワードポ
ジション)Mk[3] (ビットポジション)Mk[65:64]=(ワードポ
ジション)Mk[4] Mk’:66bit表現はMkと同じ Me:66bit表現はMkと同じ Mkn:84bit程度、表現はMkと同じ(Mkn
[0」〜Mkn[5]) Men:84bit程度、表現はMknと同じ d:18bit、単一データで処理 ph:18bit、単一データで処理 np:64bit、表現はMknと同じ(np[0]〜
np[3])
【0066】図4のチャートに示した例では、最も内側
のループの部分のみを示している。最も長い演算は、A
dder2の6回の加算であるが、値を伝送させる都合
などにより合計10サイクルを必要としている。本来、
このループを更に5回まわす必要があるが、各々の演算
装置を占有している期間からパイプラインの動作をオー
バラップさせ、実際に必要とするクロック数を削滅する
ことが可能である。
【0067】ここで、従来例(モンゴメリ法)と本案に
ついて計算量を試算する。(実際には、全体をパイプラ
イン動作させる都合上、結果は多少異なる値となるが誤
差の範囲内である。) M、e、pの大きさを2048ビット、単位演算の長さ
(n1)を32ビットとすると、メモリ上には64wo
rdの長さ(n2)となる(2048=32*64)。
【0068】モンゴメリ法では、単位演算を3*n22
*n1*n2*(1+f(e))必要とする。これは、
3*64*64*2048*(1+f(e))=251
65824*(1+f(e))≒25.17*E6*
(1+f(e))である。本案では、(2*(n2+
1)2 +3*(n2+1))+((n2+1)2 +3*
(n2+1))f(e)=17704960+9052
160*f(e)≒17.70*E6+9.05*f
(e)となり、モンゴメリ法は本案と単純な計算量で比
較して約1.42〜1.84倍の計算量を必要とする。
また、モンゴメリ法では演算手順の途中の値が次の値に
影響を与えるため、演算器を並列に配置することは困難
であるが、本案では前ぺージで示す通り単位演算を並列
化させることが可能である。演算器を3つ並列に動作さ
せた場合、演算時間は9062400程度になり、並列
化困難なモンゴメリ法と比較した場合2.7〜5.4倍
の演算速度を得ることが可能である。
【0069】本案では、冗長形式のデータを扱う都合
上、乗算器の大きさをn1*(n1+2)としなくては
ならないが、モンゴメリ法で必要とするn1*n1の乗
算器と比較した場合回路1の増加は(34−2)/32
≒6%強となる。このデメリットと比較した場合でも、
必要とする単位演算の回数の違いや並列化可能な特徴に
よるメリットは大きいものである。
【0070】
【発明の効果】以上説明したように本発明の請求項1の
発明は、剰余演算を行う計算方法において、演算の中間
結果で冗長表現の除算値を生成する計算過程をとること
を特徴とする。このように演算の中間過程で冗長表現を
許すことによって、ビット数の長い剰余演算を高速化す
ることが可能な剰余演算計算方法を実現することができ
る。
【0071】本発明の請求項2の発明は、ビット数の長
い剰余乗算Vr=Va*Vb(mod p)(Vr:N
+Mビット、Va:Nビット、Vb:Mビット)を行う
際に、VaをN=N1(bit/Word)*N2(W
ord)、VbをM=M1(bit/Word)*M2
(Word)に分割して扱い、乗算をN1、M1ビット
の部分乗算を用いた乗加算で実現する場合に、Va*2
M1*n(mod p)を満足する冗長表現の値を前記冗長
表現の除算値を生成する計算過程を用いて行うことを特
徴とする。これにより、ビット数の長い剰余乗算を高速
化することが可能な剰余演算計算方法を実現することが
できる。
【0072】本発明の請求項3の発明は、剰余乗算の単
位演算に必要な、冗長表現の値を算出するための計算過
程を有することを特徴とする。これにより、剰余乗算の
単位演算を高速化し、並列演算を用いてビット数の長い
剰余乗算を一層高速化することが可能な剰余演算計算方
法を実現することができる。
【0073】本発明の請求項4の発明は、請求項2に記
載の剰余乗算の計算方法を用いて剰余べき演算を実現す
ることを特徴とする。これにより、ビット数の長い剰余
べき演算を高速化することが可能な剰余演算計算方法を
実現することができる。
【0074】本発明の請求項5の発明は、ビット数の長
い剰余乗算Vr=Va*Vb(mod p)(Vr:N
+Mビット、Va:Nビット、Vb:Mビット)を行う
計算方法において、VaをN=N1(bit/Wor
d)*N2(Word)、VbをM=M1(bit/W
ord)*M2(Word)に分割して扱い、乗算をN
1、M1ビットの部分乗算を用いた乗加算で実現する場
合に、Va*2M1*n(mod p)を満足する冗長表現
の値を用いて行うことを特徴とする。これにより、ビッ
ト数の長い剰余乗算を高速化することが可能な剰余演算
計算方法を実現することができる。
【0075】本発明の請求項6の発明は、請求項5に記
載の剰余乗算の計算方法を用いて剰余べき演算を実現す
ることを特徴とする。これにより、ビット数の長い剰余
べき演算を高速化することが可能な剰余演算計算方法を
実現することができる。
【0076】本発明の請求項7の発明は、剰余演算を行
う剰余演算計算装置において、演算の中間結果において
冗長表現の除算値を生成する計算手段を有することを特
徴とする。このように演算の中間過程で冗長表現を許す
ことによって、ビット数の長い剰余演算を高速化するこ
とが可能な剰余演算計算装置を実現することができる。
【0077】本発明の請求項8の発明は、ビット数の長
い剰余乗算Vr=Va*Vb(mod p)(Vr:N
+Mビット、Va:Nビット、Vb:Mビット)を行う
剰余演算計算装置において、VaをN=N1(bit/
Word)*N2(Word)、VbをM=M1(bi
t/Word)*M2(Word)に分割して扱い、乗
算をN1、M1ビットの部分乗算を用いた乗加算で実現
する計算手段と、Va*2M1*n(mod p)を満足す
る冗長表現の値を計算する際に用いられる請求項7に記
載の前記冗長表現の除算値を生成する計算手段とを具備
することを特徴とする。これにより、ビット数の長い剰
余乗算を高速化することが可能な剰余演算計算装置を実
現することができる。
【0078】本発明の請求項9の発明は、剰余演算計算
装置が、剰余乗算の単位演算に必要な、冗長表現の値を
算出するための計算手段を有することを特徴とする。こ
れにより、剰余乗算の単位演算を高速化し、並列演算を
用いてビット数の長い剰余乗算を一層高速化することが
可能な剰余演算計算装置を実現することができる。
【0079】本発明の請求項10の発明は、剰余演算計
算装置において、請求項8に記載の剰余乗算の計算手段
を用いて剰余べき演算を実現することを特徴とする。こ
れにより、ビット数の長い剰余べき演算を高速化するこ
とが可能な剰余演算計算装置を実現することができる。
【0080】本発明の請求項11の発明は、ビット数の
長い剰余乗算Vr=Va*Vb(mod p)(Vr:
N+Mビット、Va:Nビット、Vb:Mビット)を行
う剰余演算計算装置において、VaをN=N1(bit
/Word)*N2(Word)、VbをM=M1(b
it/Word)*M2(Word)に分割して扱い、
乗算をN1、M1ビットの部分乗算を用いた乗加算で実
現する計算手段と、Va*2M1*n(mod p)を満足
する冗長表現の値を用いて行う計算手段とを具備するこ
とを特徴とする。これにより、ビット数の長い剰余乗算
を高速化することが可能な剰余演算計算装置を実現する
ことができる。
【0081】本発明の請求項12の発明は、剰余演算計
算装置において、請求項11に記載の剰余乗算の計算手
段を用いて剰余べき演算を実現することを特徴とする。
これにより、ビット数の長い剰余べき演算を高速化する
ことが可能な剰余演算計算装置を実現することができ
る。
【図面の簡単な説明】
【図1】本発明での除算の近似計算における主要ビット
数を示す説明図。
【図2】本発明での近似値を用いた乗算の丸め計算にお
ける主要ビット数の変化を示す説明図。
【図3】本発明での冗長剰余演算ループ中の並列演算の
ハードウェアの例を示すブロック図。
【図4】図3のハードウェアにおいての内部ループをま
とめた動作の処理内容を示す図表。
【符号の説明】
1〜7…RAM、8〜20…レジスタ、21〜23…乗
算器、24〜26…加算器。

Claims (12)

    【特許請求の範囲】
  1. 【請求項1】 剰余演算を行う計算方法において、演算
    の中間結果で冗長表現の除算値を生成する計算過程をと
    ることを特徴とする剰余演算計算方法。
  2. 【請求項2】 ビット数の長い剰余乗算Vr=Va*V
    b(mod p)(Vr:N+Mビット、Va:Nビッ
    ト、Vb:Mビット)を行う際に、 VaをN=N1(bit/Word)*N2(Wor
    d)、VbをM=M1(bit/Word)*M2(W
    ord)に分割して扱い、乗算をN1、M1ビットの部
    分乗算を用いた乗加算で実現する場合に、Va*2M1*n
    (mod p)を満足する冗長表現の値を前記冗長表現
    の除算値を生成する計算過程を用いて行うことを特徴と
    する請求項1に記載の剰余演算計算方法。
  3. 【請求項3】 剰余乗算の単位演算に必要な、冗長表現
    の値を算出するための計算過程を有することを特徴とす
    る請求項1に記載の剰余演算計算方法。
  4. 【請求項4】 請求項2に記載の剰余乗算の計算方法を
    用いて剰余べき演算を実現することを特徴とする剰余演
    算計算方法。
  5. 【請求項5】 ビット数の長い剰余乗算Vr=Va*V
    b(mod p)(Vr:N+Mビット、Va:Nビッ
    ト、Vb:Mビット)を行う計算方法において、 VaをN=N1(bit/Word)*N2(Wor
    d)、VbをM=M1(bit/Word)*M2(W
    ord)に分割して扱い、乗算をN1、M1ビットの部
    分乗算を用いた乗加算で実現する場合に、Va*2M1*n
    (mod p)を満足する冗長表現の値を用いて行うこ
    とを特徴とする剰余乗算計算方法。
  6. 【請求項6】 請求項5に記載の剰余乗算の計算方法を
    用いて剰余べき演算を実現することを特徴とする剰余演
    算計算方法。
  7. 【請求項7】 剰余演算を行う剰余演算計算装置におい
    て、演算の中間結果で冗長表現の除算値を生成する計算
    手段を有することを特徴とする剰余演算計算装置。
  8. 【請求項8】 ビット数の長い剰余乗算Vr=Va*V
    b(mod p)(Vr:N+Mビット、Va:Nビッ
    ト、Vb:Mビット)を行う剰余演算計算装置におい
    て、 VaをN=N1(bit/Word)*N2(Wor
    d)、VbをM=M1(bit/Word)*M2(W
    ord)に分割して扱い、乗算をN1、M1ビットの部
    分乗算を用いた乗加算で実現する計算手段と、 Va*2M1*n(mod p)を満足する冗長表現の値を
    計算する際に用いられる請求項7に記載の前記冗長表現
    の除算値を生成する計算手段とを具備することを特徴と
    する剰余演算計算装置。
  9. 【請求項9】 剰余乗算の単位演算に必要な、冗長表現
    の値を算出するための計算手段を有することを特徴とす
    る請求項7に記載の剰余演算計算装置。
  10. 【請求項10】 請求項8に記載の剰余乗算の計算手段
    を用いて剰余べき演算を実現することを特徴とする剰余
    演算計算装置。
  11. 【請求項11】 ビット数の長い剰余乗算Vr=Va*
    Vb(mod p)(Vr:N+Mビット、Va:Nビ
    ット、Vb:Mビット)を行う剰余演算計算装置におい
    て、 VaをN=N1(bit/Word)*N2(Wor
    d)、VbをM=M1(bit/Word)*M2(W
    ord)に分割して扱い、乗算をN1、M1ビットの部
    分乗算を用いた乗加算で実現する計算手段と、 Va*2M1*n(mod p)を満足する冗長表現の値を
    用いて行う計算手段とを具備することを特徴とする剰余
    演算計算装置。
  12. 【請求項12】 請求項11に記載の剰余乗算の計算手
    段を用いて剰余べき演算を実現することを特徴とする剰
    余演算計算装置。
JP2000185198A 2000-06-20 2000-06-20 剰余演算計算方法および剰余演算計算装置 Abandoned JP2002007112A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2000185198A JP2002007112A (ja) 2000-06-20 2000-06-20 剰余演算計算方法および剰余演算計算装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2000185198A JP2002007112A (ja) 2000-06-20 2000-06-20 剰余演算計算方法および剰余演算計算装置

Publications (1)

Publication Number Publication Date
JP2002007112A true JP2002007112A (ja) 2002-01-11

Family

ID=18685551

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2000185198A Abandoned JP2002007112A (ja) 2000-06-20 2000-06-20 剰余演算計算方法および剰余演算計算装置

Country Status (1)

Country Link
JP (1) JP2002007112A (ja)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2005013243A1 (ja) * 2003-07-31 2005-02-10 Fujitsu Limited モンゴメリ乗算剰余における変換パラメータの計算装置、方法およびそのプログラム
JP2005122141A (ja) * 2003-10-15 2005-05-12 Microsoft Corp モンゴメリ乗算におけるsimd命令の使用
US7111032B2 (en) 2002-03-19 2006-09-19 Oki Electric Industry Co., Ltd. Residue computing device
US7472154B2 (en) 2002-11-11 2008-12-30 Oki Electric Industry Co., Ltd. Multiplication remainder calculator
JP2010091913A (ja) * 2008-10-10 2010-04-22 Renesas Technology Corp データ処理装置
JP2010164721A (ja) * 2009-01-15 2010-07-29 Sharp Corp モンゴメリ乗算のための演算回路及び暗号回路
CN113761822A (zh) * 2020-06-04 2021-12-07 熵码科技股份有限公司 采用迭代计算的模数运算电路

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7111032B2 (en) 2002-03-19 2006-09-19 Oki Electric Industry Co., Ltd. Residue computing device
US7472154B2 (en) 2002-11-11 2008-12-30 Oki Electric Industry Co., Ltd. Multiplication remainder calculator
WO2005013243A1 (ja) * 2003-07-31 2005-02-10 Fujitsu Limited モンゴメリ乗算剰余における変換パラメータの計算装置、方法およびそのプログラム
JPWO2005013243A1 (ja) * 2003-07-31 2006-09-28 富士通株式会社 モンゴメリ乗算剰余における変換パラメータの計算装置、方法およびそのプログラム
US7792893B2 (en) 2003-07-31 2010-09-07 Fujitsu Limited Device and method for calculating conversion parameter of montgomery modular multiplication and program therefor
JP4616169B2 (ja) * 2003-07-31 2011-01-19 富士通株式会社 モンゴメリ乗算剰余における変換パラメータの計算装置、方法およびそのプログラム
JP2005122141A (ja) * 2003-10-15 2005-05-12 Microsoft Corp モンゴメリ乗算におけるsimd命令の使用
JP4662744B2 (ja) * 2003-10-15 2011-03-30 マイクロソフト コーポレーション モンゴメリ乗算におけるsimd命令の使用
JP2010091913A (ja) * 2008-10-10 2010-04-22 Renesas Technology Corp データ処理装置
JP2010164721A (ja) * 2009-01-15 2010-07-29 Sharp Corp モンゴメリ乗算のための演算回路及び暗号回路
CN113761822A (zh) * 2020-06-04 2021-12-07 熵码科技股份有限公司 采用迭代计算的模数运算电路

Similar Documents

Publication Publication Date Title
Okada et al. Implementation of Elliptic Curve Cryptographic Coprocessor over GF (2 m) on an FPGA
US6760742B1 (en) Multi-dimensional galois field multiplier
US7904498B2 (en) Modular multiplication processing apparatus
Ding et al. High-speed ECC processor over NIST prime fields applied with Toom–Cook multiplication
JP2004534266A (ja) ハードウェアにおいて算術演算を効率的に行う方法および装置
JP2011520404A (ja) プログラム可能なプロセッサにおける随意選択的なガロア域計算の実行
JP2002007112A (ja) 剰余演算計算方法および剰余演算計算装置
US7480691B2 (en) Arithmetic device for multiple precision arithmetic for Montgomery multiplication residue arithmetic
US6957243B2 (en) Block-serial finite field multipliers
KR100322739B1 (ko) 유한체연산방법및그장치
Hasan Double-basis multiplicative inversion over GF (2/sup m/)
JP2004519017A (ja) 係数乗算するための方法および装置
US6662201B1 (en) Modular arithmetic apparatus and method having high-speed base conversion function
JP2004227344A (ja) 乗算器及び暗号回路
JP2001051832A (ja) 乗算剰余演算方法および乗算剰余回路
JP3823107B2 (ja) 有限体での基底変換方法及び基底変換装置
JP2001034167A (ja) 演算装置及び暗号処理装置
Sandoval et al. Novel algorithms and hardware architectures for montgomery multiplication over GF (p)
JP2004227248A (ja) 演算装置及び演算方法
WO2003096182A1 (en) “emod” a fast modulus calculation for computer systems
Pinckney et al. Public key cryptography
KR100438456B1 (ko) 유한필드상의 디지트 시리얼 시스톨릭 곱셈기
Lórencz et al. Subtraction-free almost Montgomery inverse algorithm
KR100395511B1 (ko) 유한체 상에서의 병렬 입출력 승산기의 설계 방법
Kiran et al. A Scalable Approach to Performing Multiplication and Matrix Dot-Products in Unary

Legal Events

Date Code Title Description
RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20061005

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20061212

A762 Written abandonment of application

Free format text: JAPANESE INTERMEDIATE CODE: A762

Effective date: 20080227