JPWO2011036746A1 - 演算装置 - Google Patents
演算装置 Download PDFInfo
- Publication number
- JPWO2011036746A1 JPWO2011036746A1 JP2011532825A JP2011532825A JPWO2011036746A1 JP WO2011036746 A1 JPWO2011036746 A1 JP WO2011036746A1 JP 2011532825 A JP2011532825 A JP 2011532825A JP 2011532825 A JP2011532825 A JP 2011532825A JP WO2011036746 A1 JPWO2011036746 A1 JP WO2011036746A1
- Authority
- JP
- Japan
- Prior art keywords
- integer
- bits
- shift amount
- bit
- intermediate result
- 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
Links
- 238000004364 calculation method Methods 0.000 claims abstract description 79
- 238000006243 chemical reaction Methods 0.000 claims abstract description 9
- 238000000034 method Methods 0.000 abstract description 36
- 238000012545 processing Methods 0.000 description 24
- 238000012937 correction Methods 0.000 description 9
- 230000006870 function Effects 0.000 description 8
- 238000010586 diagram Methods 0.000 description 7
- 238000007792 addition Methods 0.000 description 6
- 238000004422 calculation algorithm Methods 0.000 description 4
- 239000000470 constituent Substances 0.000 description 3
- 230000003252 repetitive effect Effects 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 230000014509 gene expression Effects 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/60—Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers
- G06F7/72—Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers using residue arithmetic
- G06F7/728—Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers using residue arithmetic using Montgomery reduction
Landscapes
- Physics & Mathematics (AREA)
- 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)
- Executing Machine-Instructions (AREA)
Abstract
ZDN法と同程度のステップ数で任意のビット数の入力に対してモンゴメリ乗算を実行する。整数xを冗長2進表現に変換する変換部102と、演算の中間結果の下位ビットから上位ビットに向けて連続する0の個数である第1シフト量を算出する第1シフト量算出部103aと、冗長2進表現の整数xの下位ビットから上位ビットに向けて連続する0の個数をカウントし、カウントした個数に基づいて第2シフト量を算出する第2シフト量算出部103bと、第1シフト量だけビットシフトした中間結果と、第2シフト量だけビットシフトした整数yと、整数pと、を加減算した中間結果を算出し、算出した中間結果を第1シフト量算出部103aに送出する加減算部104bと、第1シフト量の合計が整数pのビット数と一致したときの中間結果をモンゴメリ乗算結果zとして出力する出力部107とを備える。
Description
本発明は、演算装置に関する。
整数同士の演算結果の剰余を取った結果を利用する有限体上の演算は、誤り訂正符号や暗号といった様々な分野に応用可能な基本技術として利用されている。応用分野が広いこともあって、乗算や剰余算を行う回路の高速化、小型化および省電力化などを実現するための多数の研究が行われている。剰余乗算とは、整数同士を掛けた結果を別の整数で割った余りを計算する演算である。剰余乗算を高速に実行するアルゴリズムとしては、例えばモンゴメリ乗算が知られている。
モンゴメリ乗算を使用する場合、予め演算の対象となる有限体上の数をモンゴメリ空間上の数に写像しておいてから、モンゴメリ乗算を行い、その結果を有限体上の数に逆写像することで本来求めたかった結果を求めることができる。変換と逆変換の手間が必要なので、モンゴメリ乗算を1回の剰余乗算に対して使用するのはコストが大きくなるが、べき乗剰余演算のように連続して複数回の剰余乗算を行うために使用するのに向いている。
モンゴメリ乗算の実現方法は大まかに2種類の実現方法がある。1つ目はワード乗算器を使用する実現方法である。1ワードを例えば32ビットとすると、32ビット×32ビットの乗算結果64ビットを求めることのできる32ビット乗算器を用いる方法である。この場合、法のワード数をMとすると2×M^2+M回の乗算が必要になることが知られている。乗算器が1つだとすると、1回のモンゴメリ乗算に2×M^2+Mクロックが必要になる。
もう1つの実現方法は、長い桁数の加算器を使う方法である。法が1024ビットだとすると1024ビット+1024ビットの結果を求めることのできる加算器を用いる。法のビット数をmすると2×m回の加算が必要になる。加算器が1つだとするとモンゴメリ乗算1回あたり2×mクロックが必要になる。
例えば、ワードベースのモンゴメリ乗算で32ビット×32ビット乗算器を使うと、法が1024ビットの場合M=32ワードとなり、2080クロックが必要となる。一方、加算器を使ったモンゴメリ乗算では、法が1024ビットの場合、2048クロックが必要となる。法が2048ビットの場合は、M=64ワードとなり、ワードベースのモンゴメリ乗算では8256クロックが必要となり、加算器を使ったモンゴメリ乗算では4096クロックが必要となる。
また、乗算を高速する方法として、NAF(Non−Adjacent Form、非特許文献1参照)などの冗長2進表現を使う方法が知られている。この方法では、乗数を冗長2進表現すると平均的に含まれる0の個数が増加することを利用して乗算が高速化される。
また、乗算だけでなく、剰余乗算も冗長2進表現を使って高速化する方法としてZDN法が知られている(例えば、非特許文献2)。ZDN法では、法のビット数をmとした場合、理想的にはm/3クロック(ステップ)で剰余乗算を計算することができる。例えば、法のビット数が1024ビットであるとすると、理想的には342ステップで剰余乗算を計算できることになる。
D. Hankerson, A. Menezes, S. Vanstone, "Guide to Elliptic Curve Cryptography",Springer, 2004, p.98.
H. Sedlak, "The RSA cryptography processor", Proceedings of EUROCRYPT ’87 (Amsterdam) (D.Chaum and W. L. Price, eds.), LNCS, vol. 304, Springer-Verlag, Berlin, 1988, pp. 95-105.
しかしながら、ZDN法は、演算処理を上位ビットから逐次的に行う方法である。すなわち、ZDN法は、いわゆるleft to rightの処理(L−R処理)である。一般的にL−R処理の場合、処理ビット数の変更が容易にできない点が問題となる。例えば1024ビットを処理する場合と、512ビットを処理する場合とでは、最上位ビットの位置が変わる。このため、処理をいずれのビットから開始するのかに対応して複数の回路が必要となる問題がある。したがって、現状ではZDN法を実現するには、処理ビット数を固定長にするのが現実的な解である。このように、ZDN法は、最上位ビットから処理するアルゴリズムなので、処理ビット数を自由に変更できないという問題があった。
一方、上述のように、従来のモンゴメリ乗算では、2×M^2+Mクロックまたは2×mクロックが必要となり、ZDN法と比較して実行速度が遅いという問題があった。
本発明は、上記に鑑みてなされたものであって、ZDN法と同程度のステップ数で、任意のビット数の入力に対してモンゴメリ乗算を実行できる演算装置を提供することを目的とする。
本発明は、整数xと整数yとの積の整数pを法とするモンゴメリ乗算結果zを演算する演算装置であって、前記整数xを冗長2進表現に変換する変換部と、前記モンゴメリ乗算結果zの演算の中間結果の下位ビットから上位ビットに向けて連続する0の個数をカウントし、カウントした個数に基づいて第1シフト量を算出する第1シフト量算出部と、冗長2進表現の前記整数xの下位ビットから上位ビットに向けて連続する0の個数をカウントし、カウントした個数に基づいて第2シフト量を算出する第2シフト量算出部と、前記第1シフト量だけビットシフトした前記中間結果と、前記第2シフト量だけビットシフトした前記整数yと、前記整数pと、を加減算した前記中間結果を算出し、算出した前記中間結果を前記第1シフト量算出部に送出する加減算部と、前記第1シフト量の合計が前記整数pのビット数と一致したときの前記中間結果を前記モンゴメリ乗算結果zとして出力する出力部と、を備えることを特徴とする。
本発明によれば、ZDN法と同程度のステップ数で、任意のビット数の入力に対してモンゴメリ乗算を実行できるという効果を奏する。
以下に添付図面を参照して、この発明にかかる演算装置の好適な実施の形態を詳細に説明する。
本実施の形態にかかる演算装置は、入力された整数x、整数y、および整数pを用いて整数xと整数yの整数pを法とするモンゴメリ乗算結果z(以下、乗算結果zという)を求める。このとき、整数xの下位ビットから逐次冗長2進表現に変換しながら、演算を繰り返し実行し、所定の終了条件を満たしたときの演算結果を乗算結果zとして出力する。なお、以下では、繰り返し実行される演算の結果を中間結果といい、最終的に出力される結果を乗算結果という。中間結果および乗算結果のいずれも、乗算結果zを格納するための所定のレジスタに記憶される。このため、以下では、中間結果および乗算結果のいずれもzと表記する場合がある。
図1は、本実施の形態にかかる演算装置100の構成の一例を示すブロック図である。図1に示すように、演算装置100は、入力部101と、変換部102と、第1演算部103と、第2演算部104と、判定部105と、補正部106と、出力部107と、記憶部108とを備えている。
入力部101は、演算に用いる各種データ(入力値)の入力を受付ける。例えば、入力部101は、モンゴメリ乗算に用いる整数x、整数y、および整数pの入力を受付ける。
変換部102は、整数を冗長2進表現に変換する。例えば、変換部102は、入力された整数xを冗長2進表現に変換する。
第1演算部103は、中間結果zのシフト量zsft(第1シフト量)、整数yのシフト量ysft(第2シフト量)、および、ビットシフトした整数yおよび整数pを加算するか減算するかなどを決定するための情報(ysgn、psgn)を算出する。第1演算部103は、第1シフト量算出部103aと、第2シフト量算出部103bとを備えている。
第1シフト量算出部103aは、中間結果zの下位ビットから上位ビットに向けて連続する0の個数をカウントし、この個数をzsftとして算出する。具体的には、第1シフト量算出部103aは、中間結果zの最下位ビットから上位ビットに向けて、中間結果zが算出されるごとに変更されるビット数のビットまでの間で、値が連続して0となっているビットの個数であるzsftを算出する。中間結果zが算出されるごとに変更されるビット数とは、その時点でのxの処理済みビット数と、zの処理済みビット数との差分に相当する。すなわち、第1シフト量算出部103aは、中間結果zの下位ビットから上位ビットに向けて連続する0の個数であって、中間結果zの処理済ビット数との和がxの処理済ビット数を超えないような値をzsftとして算出する。
第2シフト量算出部103bは、冗長2進表現で表された整数xの下位ビットから上位ビットに向けて連続する0の個数をカウントし、当該個数からysftを算出する。具体的には、第2シフト量算出部103bは、冗長2進表現で表された整数xに含まれるビットのうち、連続する0の個数のカウントの対象となったビットを表す処理済みビットと、処理済みビットの1つ上位のビット(値は0以外)とを除くビットを対象として、下位ビットから上位ビットに向けて連続する0の個数をカウントする。そして、第2シフト量算出部103bは、カウントした個数、整数xの処理済みビット数、中間結果zの処理済みビット数、およびzsftを用いて、ysftを算出する。
なお、第1演算部103によるzsft、ysft、ysgn、およびpsgnの算出方法の詳細は後述する。
第2演算部104は、第1演算部103により演算されたzsft、ysft、ysgn、およびpsgnをもとに、中間結果zおよび整数yのシフト演算、および、シフト演算結果等の加減算を実行する。第2演算部104は、シフト演算部104aと、加減算部104bとを備えている。
シフト演算部104aは、zsftの分だけ中間結果zを右シフトする。また、シフト演算部104aは、ysftの分だけ整数yを左シフトする。
加減算部104bは、シフト演算された中間結果zと、シフト演算された整数yと、整数pとを入力し、中間結果zに対して、ysgnおよびpsgnに応じて整数yおよび整数pの加算または減算を実行する。
判定部105は、繰り返し実行される演算の終了を判定する。具体的には、判定部105は、中間結果zの処理済みビット数が、整数pのビット数を超えた場合に、演算を終了すると判定する。
補正部106は、終了すると判定されたときの中間結果である乗算結果zを補正する。具体的には、補正部106は、乗算結果zが0より小さい場合に、乗算結果zに整数pを加算して乗算結果zを補正する。また、補正部106は、乗算結果zが整数p以上の場合に、乗算結果zから整数pを減算して乗算結果zを補正する。
出力部107は、演算を終了すると判定されたときの中間結果である乗算結果zを出力する。補正部106により補正された場合は、出力部107は、補正後の乗算結果zを出力する。
記憶部108は、演算に用いる各種データ(入力値、中間結果等)を記憶する。なお、記憶部108は、HDD(Hard Disk Drive)、光ディスク、メモリカード、RAM(Random Access Memory)などの一般的に利用されているあらゆる記憶媒体により構成することができる。
次に、演算装置100の回路構成について図2を用いて説明する。図2は、演算装置100の回路構成例を示す図である。なお、図2は、主に図1の第1演算部103、第2演算部104および記憶部108に対応する回路の構成例を示している。
図2に示すように、演算装置100は、エンコーダ201と、右シフト演算器202と、左シフト演算器203と、3入力加減算器204と、レジスタ211、212、213、214とを備えている。
レジスタ211、212、213、および214は、それぞれ中間結果z(乗算結果z)、整数y、整数p、および整数xを格納する。レジスタ211〜214は、例えば多倍長整数で表された各整数を格納する。レジスタ211の出力は、右シフト演算器202の入力である。レジスタ212の出力は、左シフト演算器203の入力である。
右シフト演算器202は、入力された中間結果zを右へzsftビット右シフトして出力する。左シフト演算器203は、入力された整数yを左へysftビット左シフトして出力する。
3入力加減算器204は、右シフト演算器202の出力(中間結果z)に対して、ysgnと左シフト演算器203の出力(整数y)との積を加算し、さらに、psgnとレジスタ213の出力(整数p)との積を加算する。すなわち、3入力加減算器204は、中間結果zに対して、ysgnが1のときは整数yを加算し、ysgnが−1のときは整数yを減算し、ysgnが0のときは整数yの加算も減算も行わない。また、3入力加減算器204は、中間結果zと整数yとの加減算結果に対して、psgnが1のときは整数pを加算し、psgnが−1のときは整数pを減算し、psgnが0のときは整数pの加算も減算も行わない。
エンコーダ201は、中間結果z、整数x、整数p、および演算で用いるその他の変数の状態から、zsft、ysft、ysgn、およびpsgnを決定して出力する。エンコーダ201によるこれらの値の決定方法の詳細は後述する。
なお、図2のレジスタ211、212、213、214が、図1の記憶部108に対応する。また、図2のエンコーダ201が、図1の第1演算部103に対応する。また、図2の右シフト演算器202および左シフト演算器203が、図1のシフト演算部104aに対応する。また、図2の3入力加減算器204が、図1の加減算部104bに対応する。
次に、このように構成された本実施の形態にかかる演算装置100による演算処理について図3を用いて説明する。図3は、本実施の形態における演算処理の全体の流れを示すフローチャートである。
まず、入力部101が、演算に用いる入力値である整数x、整数y、および整数pの入力を受付ける(ステップS301)。
次に、変換部102が、整数xを冗長2進表現に変換する(ステップS302)。なお、図3では、入力された整数xを繰り返し演算(ステップS303〜ステップS305)の前に冗長2進表現に変換しているが、繰り返し演算の中で逐次整数xを冗長2進表現に変換するように構成してもよい。
次に、第1演算部103が、ysftおよびzsftを算出するシフト量演算処理を実行する(ステップS303)。シフト量演算処理の詳細は後述する。次に、第2演算部104が、算出されたシフト量に応じて中間結果zおよび整数yをシフトし、シフトした結果を用いて新たな中間結果zを演算する(ステップS304)。具体的には、第2演算部104は、以下の(1)式によって中間結果zを算出する。なお、「>>」および「<<」はそれぞれ右シフト演算および左シフト演算を表す。
z=(z>>zsft)+ysgn×(y<<ysft)+psgn×p・・・(1)
z=(z>>zsft)+ysgn×(y<<ysft)+psgn×p・・・(1)
次に、判定部105が、zの処理済みビット数が整数pのビット数より大きいか否かを判定する(ステップS305)。zの処理済みビット数が整数pのビット数以下の場合(ステップS305:No)、ステップS303に戻り処理が繰り返される。すなわち、ステップS304で算出された中間結果zを用いて、シフト量演算処理(ステップS303)および新たな中間結果zの算出処理(ステップS304)が繰り返し実行される。
zの処理済みビット数が整数pのビット数より大きい場合(ステップS305:Yes)、補正部106が、必要に応じて乗算結果z(この時点でのレジスタ211の値)を補正する(ステップS306)。そして、出力部107が、乗算結果zをモンゴメリ乗算の結果として出力し(ステップS307)、演算処理を終了する。
次に、ステップS303のシフト量演算処理の詳細について図4を用いて説明する。図4は、シフト量演算処理の一例を示すフローチャートである。
まず、第1演算部103は、連続する0を探索する範囲を表すzextを、以下の(2)式により算出する(ステップS401)。
zext=min(xcnt,size)−zcnt ・・・(2)
zext=min(xcnt,size)−zcnt ・・・(2)
なお、xcntは、整数xのうち、前のステップ(前の繰り返し演算)までに処理された処理済みビット数の合計を表す。また、zcntは、前のステップまでのzsftの合計を表す。また、sizeは、入力された整数pのサイズを表す。また、min(a,b)は、aおよびbの最小値を返す関数を表す。
次に、第1シフト量算出部103aが、以下の(3)式によりzsftを算出する(ステップS402)。なお、関数zerocount(a,b,c)は、aの下位からbビット以上かつcビット未満の部分ビット列で、下位ビットから上位ビットに向けて値が連続して0となっているビットの個数を返す関数を表す。この関数の詳細については後述する。
zsft=zerocount(z,0,zext) ・・・(3)
zsft=zerocount(z,0,zext) ・・・(3)
次に、第1演算部103は、zsftがzextと一致するか否かを判定する(ステップS403)。zsftとzextとが一致する場合(ステップS403:Yes)、第1演算部103は、psgnを0に設定する(ステップS404)。zsftとzextとが一致しない場合(ステップS403:No)、第1演算部103は、中間結果zの下位からzsft+1ビット目の値と、整数pの下位1ビット目の値とが一致するか否かを判定する(ステップS405)。なお、図4のa{b}は、aの下位からbビット目の値を表す。
中間結果zの下位からzsft+1ビット目の値と、整数pの下位1ビット目の値とが一致する場合(ステップS405:Yes)、第1演算部103は、psgnを−1に設定する(ステップS406)。中間結果zの下位からzsft+1ビット目の値と、整数pの下位1ビット目の値とが一致しない場合(ステップS405:No)、第1演算部103は、psgnを+1に設定する(ステップS407)。
次に、第1演算部103は、冗長2進表現で表された整数xの下位ビットから上位ビットに向けて連続する0の個数を表すxsftを以下の(4)式により算出する(ステップS408)。
xsft=zerocount(x,xcnt,size+1) ・・・(4)
xsft=zerocount(x,xcnt,size+1) ・・・(4)
次に、第1演算部103は、xcntとxsftとの和が、sizeより大きいか否かを判定する(ステップS409)。xcntとxsftとの和がsizeより大きい場合(ステップS409:Yes)、第1演算部103は、ysgnを0に設定する(ステップS410)。xcntとxsftとの和がsize以下の場合(ステップS409:No)、第1演算部103は、ysgnを以下の(5)式により算出する(ステップS411)。
ysgn=x{xcnt+xsft} ・・・(5)
ysgn=x{xcnt+xsft} ・・・(5)
次に、第2シフト量算出部103bが、以下の(6)式によりysftを算出する(ステップS412)。
ysft=xcnt+xsft−zcnt−zsft ・・・(6)
ysft=xcnt+xsft−zcnt−zsft ・・・(6)
次に、第1演算部103が、以下の(7)式によりxcntを算出する(ステップS413)。また、第1演算部103が、以下の(8)式によりzcntを算出する(ステップS414)。
xcnt=xcnt+xsft+1 ・・・(7)
zcnt=zcnt+zsft ・・・(8)
xcnt=xcnt+xsft+1 ・・・(7)
zcnt=zcnt+zsft ・・・(8)
次に、ステップS402およびステップS408で用いられる関数zerocountの処理の詳細について図5を用いて説明する。図5は、関数zerocountの処理の一例を示すフローチャートである。図5は、x,a,bが引数として入力された場合(zerocount(x,a,b))を例に説明する。
まず、カウンタcntが0に初期化される(ステップS501)。次に、変数iが、入力値aに設定される(ステップS502)。次に、変数iが入力値bより小さいか否かが判定される(ステップS503)。変数iが入力値bより小さい場合(ステップS503:Yes)、入力値xの下位からiビット目の値が0であるか否かが判定される(ステップS504)。
入力値xの下位からiビット目の値が0である場合(ステップS504:Yes)、iおよびcntにそれぞれ1が加算される(ステップS505、ステップS506)。そして、ステップS503に戻り処理が繰り返される。
ステップS503で変数iが入力値b以上と判定された場合(ステップS503:No)、または、ステップS504で入力値xの下位からiビット目の値が0でないと判定された場合(ステップS504:No)、その時点でのcntが関数の出力値として出力される(ステップS507)。
次に、このように構成された演算装置100により演算処理の具体例について説明する。以下では、「f2×d5 mod fb」を計算する例を示す。すなわち、整数x=f2、整数y=d5、および整数p=fbが入力された場合の演算例を示す。なお、整数x、y、およびpは、いずれも16進数で表されている。
図6は、整数x(=f2)の冗長2進表現を使用する手順の例を示す図である。なお、図6では、下線が付された1が「−1」を意味する。冗長2進表現は色々な種類が存在する。ここでは、冗長2進表現としてNAFを用いた例を説明する。なお、NAF以外の冗長2進表現を使っても同様の手順で本実施の形態の演算処理を実現できる。
f2をNAF形式に変換すると、「1,0,0,0,−1,0,0,1,0」と表される。なお、16進数のf2は10進数で表すと242である。NAF形式の「1,0,0,0,−1,0,0,1,0」は、256−16+2=242を表すため、「1,0,0,0,−1,0,0,1,0」がf2の別の表現であることがわかる。
「1,0,0,0,−1,0,0,1,0」を下位から順に見ていくと、1個の0の後に1が存在し、続いて2個の0の後に−1が存在し、続いて3個の0の後に1が存在する。なお、その後は0が続き1は存在しないと考える。
モンゴメリ乗算の各ステップ(繰り返し演算)では、0の連続した個数と、その次に存在する0でない値がペアにして使用される。すなわち、図6の例では、ステップ1(最初の繰り返し演算)では、1個の0と、その後の1とが使用される。また、次のステップ2では、2個の0と、その後の−1とが使用される。さらに次のステップ3では、3個の0と、その後の1とが使用される。なお、ステップ4以降では、1が存在せず、0が無限個続いていると考える。
エンコーダ201は、各ステップで、連続した0の個数をxsftとし、その後に続く1または−1をysgnとする。また、エンコーダ201は、整数xの冗長2進表現のビットのうち、それまでのステップで使用したビット数(処理済みビット数)を記録しておく。なお、エンコーダ201は、各ステップで、連続した0の個数+1個の桁(ビット)を消費(使用)する。
図6の例では、まず、ステップ1で1個の0とその後の1とが使用される。すなわちステップ1では2個のビットが消費される。そして、これまでの処理済みビット数の合計は2個となる。ステップ2では、2個の0とその後の−1とが使用される。すなわちステップ2では3個のビットが消費される。そして、処理済みビット数の合計は5個となる。また、ステップ3では、3個の0とその後の1とが使用される。すなわちステップ3では4個のビットが消費される。そして、処理済みビット数の合計は9個となる。
エンコーダ201は、0の連続した個数をxsftとし、その後の非0(0以外の値)の値をysgnとし、前のステップまでに使用したビット数の合計をxcntとする。なお、ステップ1でのxcntは0とする。
ステップがある程度以上進むと、必ず上位に0が無限個続く状態に陥る。その場合、エンコーダ201は、xsftを、size(=整数pのビット数)+1−xcntとする。
以上の処理をまとめると次のようになる。すなわち、各ステップでは、以下のようなxcnt、xsft、ysgnがそれぞれ算出される。
ステップ1 :xcnt=0、xsft=1、ysgn=1
ステップ2 :xcnt=2、xsft=2、ysgn=−1
ステップ3 :xcnt=5、xsft=3、ysgn=1
ステップ4以降:xcnt=9、xsft=0、ysgn=0
ステップ1 :xcnt=0、xsft=1、ysgn=1
ステップ2 :xcnt=2、xsft=2、ysgn=−1
ステップ3 :xcnt=5、xsft=3、ysgn=1
ステップ4以降:xcnt=9、xsft=0、ysgn=0
次に別の入力値が入力された場合の例について説明する。以下では、整数x=72が入力され、整数pのビット数が8である場合の演算例を示す。72をNAF形式に変換すると、「0,1,0,0,−1,0,0,1,0」と表される。
上記の例と同様の手順により、結果として各ステップでは、以下のようなxcnt、xsft、ysgnがそれぞれ算出される。
ステップ1 :xcnt=0、xsft=1、ysgn=1
ステップ2 :xcnt=2、xsft=2、ysgn=−1
ステップ3 :xcnt=5、xsft=2、ysgn=1
ステップ4 :xcnt=8、xsft=1、ysgn=0
ステップ5以降:xcnt=9、xsft=0、ysgn=0
ステップ1 :xcnt=0、xsft=1、ysgn=1
ステップ2 :xcnt=2、xsft=2、ysgn=−1
ステップ3 :xcnt=5、xsft=2、ysgn=1
ステップ4 :xcnt=8、xsft=1、ysgn=0
ステップ5以降:xcnt=9、xsft=0、ysgn=0
この例では、ステップ4で消費するビット数が1ビットである(xsftが1ビットで、上位に1が存在しないのでysgnの分が0ビット)。ステップ4のxsftは、整数pのビット数+1−xcnt=8+1−8=1により求めている。
以下、さらに演算装置100により演算処理の具体例について説明する。引き続き「f2×d5 mod fb」を計算する場合を例に説明する。図7は、「f2×d5 mod fb」を計算する途中の各変数の値を示す図である。
上述のように、zcntは前のステップまでのzsftの合計である。初期設定として、z=0、xcnt=0、zcnt=0とする。また、zは16ビットとする。入力された法(整数p)のサイズは8ビットなのでsize=8である。
まず、最初のステップ1でのエンコーダ201の出力を求める。上述のようにステップ1では、xcnt=0、xsft=1、ysgn=1、z=0000、およびzcnt=0が求められる。以下、上述の図4のフローチャート従って説明する。
zextは、(2)式により求められる(ステップS401)。この例では、xcnt=0、size=8、zcnt=0であるため、zext=0である。
次に、zsftが決定される(ステップS402)。zsftは、zの下位の連続した0の個数であるが、zext以下の値を取る。ここでは、z=0であるため、下位には16ビットの0が並んでいることになる。しかし、zext(=0)以下の値でなければならないため、zsft=0となる。
次に、psgnが算出される(ステップS403〜ステップS407)。ここでは、zsftとzextとが一致するため、psgn=0となる(ステップS404)。
次に、xsftおよびysgnが算出される(ステップS408〜ステップS411)。上述のように、xsft=1およびysgn=1となる。
次に、ysftが上記(6)式により算出される(ステップS412)。ここでは、ysft=0+1−0−0=1となる。
次に、xcntおよびzcntが、それぞれ上記(7)式および(8)式により算出される(ステップS413、ステップS414)。ここでは、xcnt=xcnt+xsft+1=0+1+1=2に更新される。また、zcnt=zcnt+zsft=0+0=0に更新される。
以上により、エンコーダ201の出力であるzsft(=0)、ysft(=1)、ysgn(=+1)、およびpsgn(=0)が計算される。これらの出力値を上記(1)式に入力することにより、zの新しい値が算出される(図3のステップS304)。ここでは、zの新しい値として「01aa」が求められる。
次のステップ2では、同様にしてzsft=1、ysft=3、ysgn=−1、psgn=+1が求まり、zの新しい値は「fb28」となる。
ステップ3では、同様にしてzsft=3、ysft=4、ysgn=+1、psgn=+1が求まり、zの新しい値は「0db0」となる。
ステップ4では、同様にしてzsft=4、ysft=1、ysgn=0、psgn=0が求まり、zの新しい値は「00db」となる。
なお、この例では、求められた結果であるz=「00db」は、0≦z<pを満たす。このため、補正部106はzを補正しない。
以上のように、上記例では、8ビットのモンゴメリ乗算を4ステップで求めることができる。なお、漸近的には法である整数pのビット数の1/3ステップでモンゴメリ乗算を求めることができる。以下、本実施の形態の演算処理の漸近的なふるまいを説明する。
zを下位からスキャン(処理)していったときに、あるビットが0のとき、次のビットが0になる確率は1/2であり、1になる確率も1/2である。逆に、あるビットが1のとき、エンコーダ201のアルゴリズムより、次のビットは必ず0になる。この確率を状態遷移行列Aで表すと次の(9)式のようになる。
上記(10)式に示すように、処理するビットが0である確率は2/3であり、処理するビットが1である確率は1/3である。エンコーダ201のアルゴリズムは、zのあるビットが1である場合にのみ処理を行う(0はスキップする)ため、平均して、pのビット数の1/3ステップで処理が完了することになる。
このように、本実施の形態にかかる演算装置100では、ZDN法と同程度のステップ数でモンゴメリ乗算を演算できる。また、ZDN法と異なり、変数の下位ビットから逐次的に演算を実行するため、任意のビット数の入力に対してモンゴメリ乗算を実行できる。
次に、本実施の形態にかかる演算装置100のハードウェア構成について図8を用いて説明する。図8は、本実施の形態にかかる演算装置100のハードウェア構成図である。
本実施の形態にかかる演算装置100は、CPU(Central Processing Unit)51などの制御装置と、ROM(Read Only Memory)52やRAM53などの記憶装置と、ネットワークに接続して通信を行う通信I/F54と、各部を接続するバス61を備えている。
本実施の形態にかかる演算装置100で実行される演算プログラムは、ROM52等に予め組み込まれて提供される。
本実施の形態にかかる演算装置100で実行される演算プログラムは、インストール可能な形式又は実行可能な形式のファイルでCD−ROM(Compact Disk Read Only Memory)、フレキシブルディスク(FD)、CD−R(Compact Disk Recordable)、DVD(Digital Versatile Disk)等のコンピュータで読み取り可能な記録媒体に記録してコンピュータプログラムプロダクトとして提供されるように構成してもよい。
さらに、本実施の形態にかかる演算装置100で実行される演算プログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、本実施の形態にかかる演算装置100で実行される演算プログラムをインターネット等のネットワーク経由で提供または配布するように構成してもよい。
本実施の形態にかかる演算装置100で実行される演算プログラムは、コンピュータを上述した演算装置100の各部(入力部、変換部、第1演算部、第2演算部、判定部、補正部、出力部)として機能させうる。このコンピュータは、CPU51がコンピュータ読取可能な記憶媒体から演算プログラムを主記憶装置上に読み出して実行することができる。
なお、本発明は、上記実施の形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化することができる。また、上記実施の形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成することができる。例えば、実施の形態に示される全構成要素からいくつかの構成要素を削除してもよい。さらに、異なる実施の形態にわたる構成要素を適宜組み合わせても良い。
51 CPU
52 ROM
53 RAM
54 通信I/F
61 バス
100 演算装置
101 入力部
102 変換部
103 第1演算部
103a 第1シフト量算出部
103b 第2シフト量算出部
104 第2演算部
104a シフト演算部
104b 加減算部
105 判定部
106 補正部
107 出力部
108 記憶部
201 エンコーダ
202 右シフト演算器
203 左シフト演算器
204 3入力加減算器
211、212、213、214 レジスタ
52 ROM
53 RAM
54 通信I/F
61 バス
100 演算装置
101 入力部
102 変換部
103 第1演算部
103a 第1シフト量算出部
103b 第2シフト量算出部
104 第2演算部
104a シフト演算部
104b 加減算部
105 判定部
106 補正部
107 出力部
108 記憶部
201 エンコーダ
202 右シフト演算器
203 左シフト演算器
204 3入力加減算器
211、212、213、214 レジスタ
Claims (7)
- 整数xと整数yとの積の整数pを法とするモンゴメリ乗算結果zを演算する演算装置であって、
前記整数xを冗長2進表現に変換する変換部と、
前記モンゴメリ乗算結果zの演算の中間結果の下位ビットから上位ビットに向けて連続する0の個数をカウントし、カウントした個数に基づいて第1シフト量を算出する第1シフト量算出部と、
冗長2進表現の前記整数xの下位ビットから上位ビットに向けて連続する0の個数をカウントし、カウントした個数に基づいて第2シフト量を算出する第2シフト量算出部と、
前記第1シフト量だけビットシフトした前記中間結果と、前記第2シフト量だけビットシフトした前記整数yと、前記整数pと、を加減算した前記中間結果を算出し、算出した前記中間結果を前記第1シフト量算出部に送出する加減算部と、
前記第1シフト量の合計が前記整数pのビット数と一致したときの前記中間結果を前記モンゴメリ乗算結果zとして出力する出力部と、
を備えることを特徴とする演算装置。 - 前記第1シフト量算出部は、前記中間結果の最下位ビットから上位ビットに向けて、前記中間結果が算出されるごとに変更されるビット数のビットまでの間で連続する0の個数をカウントし、カウントした前記個数である前記第1シフト量を算出すること、
を特徴とする請求項1に記載の演算装置。 - 前記第2シフト量算出部は、冗長2進表現の前記整数xに含まれるビットのうち、連続する0の個数のカウントの対象となったビットを表す処理済みビットと、前記処理済みビットの1つ上位の0でないビットとを除くビットを対象として、下位ビットから上位ビットに向けて連続する0の個数をカウントし、カウントした個数に基づいて前記第2シフト量を算出すること、
を特徴とする請求項1に記載の演算装置。 - 前記加減算部は、前記第1シフト量だけビットシフトした前記中間結果と、前記第2シフト量だけビットシフトした前記整数yおよび冗長2進表現の前記整数xに含まれるビットのうち連続する0の個数のカウントの対象となったビットを表す処理済みビットの1つ上位のビットの値の積と、前記整数pと、を加減算した前記中間結果を算出し、算出した前記中間結果を前記第1シフト量算出部に送出すること、
を特徴とする請求項1に記載の演算装置。 - 前記加減算部は、前記第1シフト量だけビットシフトした前記中間結果と、前記第2シフト量だけビットシフトした前記整数yとを加算した値に対して、前記中間結果に含まれるビットのうち、最下位ビットから前記第1シフト量+1ビット目のビットの値が前記整数pの最下位ビットの値と一致するときは前記整数pを減算して前記中間結果を算出し、前記中間結果に含まれるビットのうち、最下位ビットから前記第1シフト量+1ビット目のビットの値が前記整数pの最下位ビットの値と一致しないときは前記整数pを加算した前記中間結果を算出し、算出した前記中間結果を前記第1シフト量算出部に送出すること、
を特徴とする請求項1に記載の演算装置。 - 前記冗長2進表現はNAF(Non−Adjacent Form)であること、
を特徴とする請求項1に記載の演算装置。 - 前記出力部は、前記合計が前記整数pのビット数と一致したときの前記中間結果が0より小さいときは、前記中間結果に前記整数pを加算した値を前記モンゴメリ乗算結果zとして出力し、前記合計が前記整数pのビット数と一致したときの前記中間結果がp以上のときは、前記中間結果から前記整数pを減算した値を前記モンゴメリ乗算結果zとして出力すること、
を特徴とする請求項1に記載の演算装置。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/JP2009/066537 WO2011036746A1 (ja) | 2009-09-24 | 2009-09-24 | 演算装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPWO2011036746A1 true JPWO2011036746A1 (ja) | 2013-02-14 |
JP5175983B2 JP5175983B2 (ja) | 2013-04-03 |
Family
ID=43795517
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2011532825A Active JP5175983B2 (ja) | 2009-09-24 | 2009-09-24 | 演算装置 |
Country Status (3)
Country | Link |
---|---|
US (1) | US8909689B2 (ja) |
JP (1) | JP5175983B2 (ja) |
WO (1) | WO2011036746A1 (ja) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5225115B2 (ja) * | 2009-01-15 | 2013-07-03 | 株式会社東芝 | Naf変換装置 |
WO2011036746A1 (ja) * | 2009-09-24 | 2011-03-31 | 株式会社東芝 | 演算装置 |
US11508263B2 (en) * | 2020-06-24 | 2022-11-22 | Western Digital Technologies, Inc. | Low complexity conversion to Montgomery domain |
WO2023199440A1 (ja) * | 2022-04-13 | 2023-10-19 | 日本電気株式会社 | 符号付き整数の剰余積計算装置、符号付き整数の剰余積計算方法及び、プログラム |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH04302640A (ja) | 1991-03-28 | 1992-10-26 | Taisei Corp | プレキヤストコンクリート部材 |
JP3555091B2 (ja) * | 1994-11-21 | 2004-08-18 | 日本電信電話株式会社 | 羃乗剰余演算方法及びその装置 |
CA2228493C (en) | 1997-02-03 | 2005-05-03 | Nippon Telegraph And Telephone Corporation | Scheme for carrying out modular calculations based on redundant binary calculation |
JPH10307710A (ja) * | 1997-03-05 | 1998-11-17 | Nippon Telegr & Teleph Corp <Ntt> | 剰余系演算方法及びその装置 |
IL135247A0 (en) * | 2000-03-23 | 2003-06-24 | Cipherit Ltd | Method and apparatus for the calculation of modular multiplicative inverses |
US6973470B2 (en) * | 2001-06-13 | 2005-12-06 | Corrent Corporation | Circuit and method for performing multiple modulo mathematic operations |
JP4202701B2 (ja) * | 2002-09-11 | 2008-12-24 | 株式会社東芝 | 多項式剰余系演算装置、方法及びプログラム |
DE10260655B3 (de) | 2002-12-23 | 2004-06-24 | Infineon Technologies Ag | Vorrichtung und Verfahren zum Berechnen einer Multiplikation mit einer Verschiebung des Multiplikanden, insbesondere bei der kryptographischen Berechnung |
JP4177125B2 (ja) * | 2003-01-22 | 2008-11-05 | 三菱電機株式会社 | 演算装置及び演算装置の演算方法 |
JP4408712B2 (ja) * | 2004-01-26 | 2010-02-03 | 富士通マイクロエレクトロニクス株式会社 | 多倍長データ積和演算処理回路及びモンゴメリ積和剰余演算回路 |
JP2005221830A (ja) * | 2004-02-06 | 2005-08-18 | Sanyo Electric Co Ltd | 逆元演算装置、演算処理装置および演算処理方法 |
KR101590322B1 (ko) * | 2009-05-15 | 2016-02-19 | 삼성전자주식회사 | 연산임계경로가 감소된 모듈러 곱셈기 및 연산임계경로 감소방법 |
WO2011036746A1 (ja) * | 2009-09-24 | 2011-03-31 | 株式会社東芝 | 演算装置 |
-
2009
- 2009-09-24 WO PCT/JP2009/066537 patent/WO2011036746A1/ja active Application Filing
- 2009-09-24 JP JP2011532825A patent/JP5175983B2/ja active Active
-
2012
- 2012-01-30 US US13/361,074 patent/US8909689B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
WO2011036746A1 (ja) | 2011-03-31 |
US20120131078A1 (en) | 2012-05-24 |
JP5175983B2 (ja) | 2013-04-03 |
US8909689B2 (en) | 2014-12-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5456766B2 (ja) | プログラム可能なプロセッサにおける随意選択的なガロア域計算の実行 | |
TW550498B (en) | Method and apparatus for modular multiplying and calculating unit for modular multiplying | |
US20110161390A1 (en) | Modular multiplication processing apparatus | |
JP2005250481A (ja) | 多重精度を支援する拡張型モンゴメリモジュラ掛け算器 | |
JP5175983B2 (ja) | 演算装置 | |
CN113467750A (zh) | 用于基数为4的srt算法的大整数位宽除法电路及方法 | |
JP3726966B2 (ja) | 乗算器及び暗号回路 | |
JP4182226B2 (ja) | 剰余系の計算方法及び装置並びにプログラム | |
CN108418687B (zh) | 一种适合sm2算法的快速模约减方法和介质 | |
JP4728392B2 (ja) | 大数乗算方法およびデバイス | |
JP5840086B2 (ja) | 縮約装置、縮約方法、およびプログラム | |
JP2004166274A (ja) | 有限体での基底変換方法及び基底変換装置 | |
JP2005228169A (ja) | 乱数生成装置 | |
JP4223819B2 (ja) | べき乗剰余演算装置及びそのプログラム | |
WO2003096182A1 (en) | “emod” a fast modulus calculation for computer systems | |
JP2007503036A (ja) | モジュラ乗算を行うための方法、および2nビットの数を使用してユークリッド乗算を行うための方法 | |
JP4850884B2 (ja) | べき乗剰余演算器 | |
JP2008134812A (ja) | 有限体gf(3)の演算方法及び演算装置 | |
JP4629972B2 (ja) | ベクトル演算装置及び分割値演算装置及び楕円曲線スカラー倍演算装置及び楕円暗号演算装置及びベクトル演算方法及びプログラム及びプログラムを記録したコンピュータ読み取り可能な記録媒体 | |
JP4643951B2 (ja) | 剰余系の被変換数を2進数に変換する変換装置及び変換方法 | |
JP2008097194A (ja) | 逆数算出装置、逆数算出方法、及び逆数算出プログラム | |
KR100761132B1 (ko) | Sha-1 연산 방법 및 장치 | |
CN118819470A (zh) | 模乘运算电路、方法、数据处理芯片和电子设备 | |
CN113590083A (zh) | 运算控制方法、装置、系统、存储介质及处理器 | |
JP2007034927A (ja) | べき乗演算装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
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: 20121211 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20130107 |
|
R151 | Written notification of patent or utility model registration |
Ref document number: 5175983 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R151 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20160111 Year of fee payment: 3 |