JP2004226516A - べき乗剰余演算方法及びそのプログラム - Google Patents
べき乗剰余演算方法及びそのプログラム Download PDFInfo
- Publication number
- JP2004226516A JP2004226516A JP2003011941A JP2003011941A JP2004226516A JP 2004226516 A JP2004226516 A JP 2004226516A JP 2003011941 A JP2003011941 A JP 2003011941A JP 2003011941 A JP2003011941 A JP 2003011941A JP 2004226516 A JP2004226516 A JP 2004226516A
- Authority
- JP
- Japan
- Prior art keywords
- value
- variable
- calculation
- modm
- algorithm
- 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
Images
Abstract
【解決手段】m = k + 1とすると、
m ( m + 2 ) = k2 − 1、さらにm ( m + 2 ) { m ( m + 2 ) + 2 } = k4 − 1となり、同様な操作を繰り返すと最終的に、
m ( m + 2 ) { m ( m + 2 ) + 2 } ・・・ = k2^n − 1
とできる。この原理を応用して逆元をもとめる。また除算で一般的な引き放し法の原理を応用してモンゴメリ乗算アルゴリズムを改良し、演算の途中結果によらずに確定的に演算結果が決まるようにする。
【選択図】図1
Description
【発明の属する技術分野】
本発明は、暗号演算で用いられるべき乗剰余演算を高速にかつ低コストで実行する技術に関する。
【0002】
【従来の技術】
まず本発明の基礎となっているモンゴメリ乗算アルゴリズムについて説明する。 モンゴメリ乗算アルゴリズムは、RSA暗号、DSS、DH(Diffie−Hellman)鍵交換等の演算で用いるべき乗剰余計算、y=xemodm(y,x,e及びmは整数で、鍵長がnのときm<2nとする)、を高速に処理するアルゴリズムとして広く知られている。モンゴメリ乗算に関しては、例えばHandbook of Applied Cryptography, Alfred J. Menezes, Paul C. van Oorshot, Scott A. Vanstone(非特許文献1)に記述されている。 まずここではRSA演算アルゴリズムへのモンゴメリ乗算アルゴリズムの適用について述べることにする。
【0003】
事前準備として本明細書で用いる表記方法の説明を行っておく。整数mをb進数、n桁で表わすと、
m = mn−1・bn−1 + … + m1・b1 + m0・b0(m0,m1 … mn−1は整数で、0≦ m0,m1 … mn−1<b)となるが、これを
m = (mn−1 … m1 m0)b と表わすことにする。
また本明細書ではアルゴリズムの表記をC言語の表記方法にしたがって示す。
【0004】
RSA演算で行うべき乗剰余演算(y=xemodm、ここでy,x,e及びmは整数、鍵長がnとする)は剰余定理によって以下のように展開できる。
これに対しモンゴメリ乗算アルゴリズムを適用するために、上記の(x*y)modmあるいは(x*x)modmの計算に対し以下のように変形を加える。
【0005】
ここでy=(x*y)R−1modm(もしくはx=(x*x)R−1modm)の部分に対しモンゴメリ乗算アルゴリズムを適用すると以下となる。
上記のアルゴリズム3で、bとしては通常2のべき乗数が選ばれることが多い。これは計算機内での数値が2進法で表わされているため、bを2のべき乗にすることで上記の(1)や(2)式でのbに関わる計算部分が簡単になるためである。bを2のべき乗とするとgcd(m,b)=1の条件からmは奇数であることが必要条件となるが、例えばRSA演算では鍵の強度の観点からmを大きな素数の積とするため、実用上は奇数と考えてよい。またDiffie−Hellman鍵交換アルゴリズムにおいても、mには大きな素数を選択するため、mが偶数となることは実質的に有り得ないため、この必要条件が問題となることはない。
【0006】
ここで上記のアルゴリズム3でb=2n (ここでのnとはm<2nなる整数)の場合には以下のようになる。
図9は、上記アルゴリズム3−1をハードウェアで実装した場合の計算の手順を示す図である。図9で例えばY,Xを各々被乗数、乗数とすると、乗数Xを下位から一定の長さで分割し、乗算器によって順にYに乗算して得た値を縦方向に同じ桁が並ぶように配列すると、図示するような平行四辺形で表現される。まずY・x0,Y・x1,・・・,Y・xn−1の乗算結果をCSA(carry save adder)によって加算すると、X・Yが得られる。ここでx0,y0は最下位桁の値、xn−1,yn−1は最上位桁の値を示す。このX・Yの演算結果の下位半分のみを取り出したものをLとする。Lにm’を乗算してその演算結果の下位半分のみを取り出したものがUとなる。Uにmを乗算した結果にX・Yを加算し、上位半分のみを取り出すと新しいYが得られる。最後にY≧mであればY=Y−mの剰余演算を行って目的のYが得られる。
【0007】
RSAの鍵長は、512ビットあるいは1024ビット以上と長いため、上記アルゴリズムの乗算部分を1マシンサイクルで実行するのはゲート数の観点から困難であり、数サイクルに分割して実行される。また上記計算手順によれば乗算が3回行われるが、2回目および3回目の乗算はいずれも以前の乗算の結果と固定値との乗算となっている。したがって前者を乗数、後者を被乗数とすることによって、1つ前の乗算が実行開始されて最下位桁から順に結果が出力されていくと、その結果を用いて順次次に続く乗算を開始することができる。このため乗算器の個数を十分に用意すると、いわゆるパイプライン実行することが可能となり性能を向上させることができる。
【0008】
またモンゴメリ乗算の特徴の1つとして、演算の準備段階でm’=−m−1modbなるm’を求める処理が必要となる。この処理内容は、bの値の選び方により計算方法は大きく変わる。上述したように、実用的にはbは2のべき乗としてよいから、例えばb=2の場合が最も簡単であり、m’=1の固定値となる。ただしgcd(m,b)=1からmは奇数でなくてはならない。しかしb=2nとしてnがある程度小さいうちは、b=2の場合の拡張となり、計算なしに求めることも可能である。すなわちmのb進数での最下位桁の値とm’の値の対応表を予め作成しておき、計算時にこの対応表から値を引いてくるといった方法をとることができる。しかしnがある程度大きい値となると、計算を行ってm’を求めることになる。この計算の方法として、例えば特開平10−207689号公報「逆元計算装置及び逆元計算方法」(特許文献1)がある。これはb=2の場合の逆元を求めておき、これを繰り返し計算によってb=2nへと拡張していく方法である。この計算のための専用演算器をもつと、演算自体は加算におけるキャリーの伝播を排除することができ、高速に実行することができる。
【0009】
【特許文献1】
特開平10−207689号公報
【非特許文献1】
Handbook of Applied Cryptography, Alfred J. Menezes他, CRC Press, October 16, 1996, p600〜603
【0010】
【発明が解決しようとする課題】
本発明が解決しようとする課題は2つある。まず第1の課題について述べる。従来の技術で引用した特許文献1の技術は、キャリーの伝播を排除することができる方式であるが、この利点を十分に発揮するためには専用演算器が必要である。この専用演算器は、実はアルゴリズム3で比較的bを小さくした場合の(1)及び(2)式を実行するための専用演算器と似ており、ゲートの共有化をはかることができる。しかしこの技術が大きな効果を発揮するのは、逆元の計算量が多くなる場合、すなわちbが大きい場合であって、この場合にはアルゴリズム3の(1)及び(2)式を実行するための専用演算器とは構成が大きく異なるため、ゲートの共有化は困難となる。専用演算器を用いないとすると汎用的な加算器を用いることになり、この場合には、繰り返し計算の中で1回ごとにキャリーの伝播を伴う計算を必要とするため、この発明の性能上の効果は小さくなる。なおここでいうbが小さい場合とは、あらかじめ逆元の対応表を作成しておけるぐらい小さいことを意味する。
【0011】
ところでbが大きい場合、例えばアルゴリズム3−1のようなb=2nの場合であって、この場合、同アルゴリズムの(1)式、(2)式から明確なように乗算器が必要となる。RSA演算はデータ幅が512ビット、あるいは1024ビット以上と大きいが、実際の演算器のインプリメンテーションでは適切なゲート数におさえるため、128ビットあるいは256ビット幅のようにより幅の狭い乗算器を実装することになる。このような状況にあって、さらに逆元を求めるための専用演算器を別途追加するのは実装上、ゲート数の増大をまねき困難である。それよりその分のゲート数を乗算器のビット幅を広げるために使用した方が性能が向上する。このような観点から特許文献1の技術は、そのアルゴリズムに関しては優れているが、RSA演算器への適用を考えた場合に実装上の実効的効果は小さいといえる。
【0012】
本発明の第1の目的は、逆元専用演算器を用いないで高速に逆元を計算する技術を提供することにある。
【0013】
次に第2の課題について述べる。従来の技術でも述べたように、アルゴリズム3−1において、(1)式および(2)式の3回分の乗算は、データ依存があるものの、最下位桁から順次、次の乗算を開始することができ、乗算器等の必要なハードウエアがあればパイプライン実行をおこなうことができ、性能を向上させることができる。ここでさらに3回の乗算を実行した後についても考える。アルゴリズム3−1は、アルゴリズム2の(2)式ないし(3)式に相当するが、これらの式の計算を行った結果の間には以下のような依存関係がある。ここでアルゴリズム2の(2)式はif文の条件の成立/不成立により実行するかどうか決まるため、以下の3とおりとなる。
(a)(2)式→(3)式:データ依存関係なく並列実行が可能
(b)(3)式→(2)式:xでデータ依存関係あり、yはデータ依存関係なし
(c)(3)式→(3)式:xでデータ依存関係あり
上記の3項目のうち、(a)はデータの依存関係がないため並列実行が可能である。つまりパイプライン実行が可能である。(c)はxでデータ依存関係があり、しかもアルゴリズム3−1の(3)式からyがm以上であるかどうかによってyが決まる。y≧mのような大小関係の比較は、yからmを減じ、符号が負かどうかの判定をおこなう必要があるため、ここで行いたいような最下位桁から順次計算を行いながら次の計算にその結果を使用していくようなことはできない。つまりパイプライン実行ができないのである。(b)についても同様の問題があるが、(2)式を実行するのはj[i]==1の場合であって、実行的にはforループによる繰り返し計算において、2回に1回程度しか(2)式は実行されないと考えられる。したがってデータ依存関係があって、しかもforループによる繰り返しで毎回計算が必要な(3)式の計算によって、RSA演算の性能は決まるのである。
【0014】
本発明の第2の目的は、(c)に関わるパイプライン実行を阻む問題を解決し、モンゴメリ乗算を用いたべき乗剰余演算の性能を向上できる計算技術を提供することにある。
【0015】
【課題を解決するための手段】
第1の課題を解決するための本発明は、m’=−m−1modbを計算する技術であり、
(1)初期値として、変数m’を格納する第1の記憶手段に定数1を設定し、変数kを格納する第2の記憶手段に入力された値mを設定するステップと、
(2)変数kに2を加えたk+2の値に変数m’を乗ずる演算をbをモジュラスとする剰余演算の下で行って得られた値を第1の記憶手段上の変数m’に設定するステップと、
(3)上記(2)で得られたk+2の値に変数kを乗ずる演算をbをモジュラスとする剰余演算の下で行って得られた値を第2の記憶手段上の変数kに設定するステップと、
(4)上記(2)及び(3)のステップをパラメータf=log2n+1回まで行った後に得られた値m’を出力するステップと
を有するべき乗剰余演算技術を特徴とする。
【0016】
第2の課題を解決するための本発明は、上記xyR−1modmの計算について、
u=xym’modbを計算し、
もしxy>0であればy=(xy+um)/b−mを計算し、
xy<0であればy=(xy+um)/b+mを計算し、y=0ならばそのままとし、
得られたx及びyの値を次のeのビット値についての計算の入力として用い、eの全ビット値について上記計算を行った後にy>0ならばyの最終結果を目的の計算結果とし、y≦0ならばy=y+mの値を目的の計算結果とし、1つのxyR−1modm演算と次のxyR−1modm演算とを並列演算するように構成したべき乗剰余演算技術を特徴とする。
【0017】
【発明の実施の形態】
(1)第1の課題を解決するための実施形態
まず第1の課題を解決するためのアルゴリズムについて説明する。まずモンゴメリ乗算アルゴリズムで用いる逆元とはm’=−m−1modbであるから、mm’modb=b−1となるm’を求めるアルゴリズムを考える。RSA演算、Deffie−Hellman鍵交換アルゴリズムを計算機上で実装する場合には、bは2のべき乗でmは奇数としてよい。そうするとm=k−1とすると
m ( m + 2 ) = k2 − 1、さらにm ( m + 2 ) { m ( m + 2 ) + 2 } = k4 − 1
となり、同様な操作を繰り返すと最終的に、
m ( m + 2 ) { m ( m + 2 ) + 2 } ・・・ = k2^n − 1
とできる。m=k−1でmは奇数であるからkは偶数、つまりk=2iと表わせるから、
m ( m + 2 ) { m ( m + 2 ) + 2 } ・・・ mod b = { (2i)2^n − 1 } mod b = b − 1
となる。つまりm’ = ( m + 2 ) { m ( m + 2 ) + 2 } ・・・ mod bとすればよい。
【0018】
図1は、第1の課題を解決するためのアルゴリズムをC言語の表記方法で表現したものである。このアルゴリズムでb=2n(nは鍵長)とすると、nが2のべき乗数であれば、
f=log2n+1
となり、整数となる。
【0019】
図2は、このアルゴリズムを実行する計算機のプログラムの処理の流れを示すフローチャートである。この計算機は、プロセッサとメモリを有し、プログラムはメモリに格納されており、またプロセッサは、このプログラム中の命令を解読して実行する機構、データを格納するレジスタ、加算器及び乗算器を備える汎用計算機とする。計算機は、まず定数n,mの値を入力あるいは他の呼出元プログラムから受け取る(ステップ51)。mはnビット長の数値とする。次にパラメータf=log2n+1の計算を行い、その計算結果のfの値をデータレジスタ又はメモリに格納する(ステップ52)。次にデータレジスタ又はメモリ上の第1の記憶領域上の変数m’に1の値を設定し、データレジスタ又はメモリ上の第2の記憶領域上の変数kに入力されたmの値を設定し、データレジスタ又はメモリ上のループカウンタiを0に設定する(ステップ53)。ここで第1の記憶領域及び第2の記憶領域は、各々nビット長の記憶領域とする。
【0020】
次にデータレジスタ上でk+2の加算を行った値に変数m’を乗算しその下半分のnビットのみを取り出して新しいm’として第1の記憶領域に保存し、データレジスタ上のk+2の値に第2の記憶領域上の変数kを乗算しその下半分のnビットのみを取り出して新しいkとして第2の記憶領域に保存する(ステップ54)。次にループカウンタiに1を加える(ステップ55)。次にiとfを比較し、i<fでなければ(ステップ56No)、ステップ54に戻る。i<fとなったとき(ステップ56Yes)、計算結果のm’の値を出力あるいは呼出元プログラムに返す(ステップ57)。ただしステップ54の最終回のk=k(k+2)modbの計算は実行しなくともよい。
【0021】
上記アルゴリズムが実行する計算は、乗算、加算および剰余演算から成っており、アルゴリズム3−1の(1)式及び(2)式を計算できる汎用計算機があれば実行可能である。すなわち追加の専用演算器は必要とされない。
【0022】
次に第1の課題を解決するためのアルゴリズムを汎用的なプロセッサで実行した場合の実施例の効果について述べる。上記プログラムを実行する際には、ステップ54において2log2n回の乗算とlog2n回の加算が必要である。従来技術として、例えば特許文献1の技術ではn回の加算が必要である。乗算と加算のコストの比較を一般化するのは困難であるが、まずオーダとして本発明がlog2n、従来技術ではnであるので、回数が大幅に削減できることは明白である。通常nは512,1024,2048が多く用いられるが、n=1024で両者の比較を定量的に行うと以下のようになる。
【0023】
一般的なプロセッサは64ビットの乗算器と加算器を持っており、これらの実行時間比は通常2対1である。n=1024の場合、1024ビットデータの乗算、加算が必要となるが、各々64ビット乗算が256回、64ビット加算が16回となる。ここで用いる乗算では、乗算結果に対し剰余演算(modb)の計算を行うために、乗算結果の上位半分は不要となるので、実際には64ビット乗算は16×16/2+16=136回となる。従って性能比は以下となる
従来技術/本発明 = (n*16) /(2log 2 n *2*136 + log 2 n *16)=〜 3
つまり本実施例によれば、従来技術に比べて3倍程度性能向上するという効果がある。暗号強度の観点から鍵長が長くなる傾向にあるため、本発明の効果はより大きくなっていくことになる。専用演算器を用いればさらに高速になるが、本発明は、逆元を求めるだけのために専用演算器を置かないことを特徴とするので、専用演算器の構成及び効果について言及しない。
(2)第2の課題を解決するための実施形態
次に第2の課題を解決するためのアルゴリズムについて説明する。アルゴリズム3−1を前提として、ここの(3)式でy(以下では入力のyと区別するためYとする)に入力される値の大きさは以下のようになる。
u = xym’ mod b から 0 <= u < bであるから、
0 < Y = (xy + um) / b < (xy + bm)/b = xy/b + m −−−− (1)
ここで0 <= x,y < m < bであるから、0 <= xy/b < m −−−− (2)
したがって、(1)と(2)から0 < Y < 2mとなる。
【0024】
Y−mの範囲は、上記の(1)式から−m<Y−m<xy/bであるから、|Y−m|<mである。ここでアルゴリズム3−1の(3)式で、y≧mでもy<mでもyの大きさに関係なくy=y−mを演算したとすると次の演算でどうなるかを考える。Y=(xy+um)/bであり、|x|<m,|y|<mであるから、以下のようになる。
xy > 0 ならば、0 < Y = (xy + um) / b < (xy + bm)/b = xy/b + m < 2mであり、| Y−m | <= mである。
xy < 0 ならば、−2m < (xy − bm)/b = xy/b − m < Y = (xy + um) / b < 0であり、| Y+m | < mである。
(xy=0の場合は、Y=0)
つまりxもyもモンゴメリ乗算開始時の入力データであるから、入力データの符号を見て同符号であればy−mを、異符号であればy+mを結果として出力すれば、結果は常にその絶対値がmより小さくなり発散していくことはない。これによってアルゴリズム3−1の(3)式に相当する部分は入力データの符号により確定的に演算を行うことができるようになる。つまりこれによって、前のxyR−1modm演算と並列に次のxyR−1modm演算を実行できるようになるのである。
【0025】
図3は、第2の課題を解決するためのアルゴリズムをC言語の表記方法で表現したものである。ここでb=2nであり、m’は上記のようにm’=−m−1modbを計算した結果である。図3の(2)、(3)式は入力データの符号のみで、実行の要否を決定することができ、yの下位桁から出力される結果をそれより上位の桁の結果を待たずに次の演算に用いることが可能となる。最終的な結果yは|y|<mとなるため、アルゴリズム2を以下のようにする必要がある。
次に図3のアルゴリズムとアルゴリズム2−2を用いた専用演算器の実施例について説明する。図4は、図3のアルゴリズムとアルゴリズム2−2を用いた専用演算器の例である。この専用演算器は、3つの演算器、すなわちX2R−1modmの演算を行う演算器40、XYR−1modmの演算を行う演算器41および演算器42を含んでいる。10,11,12はセレクタ、20はラッチ、30はシフタである。TRGはトリガである。アルゴリズム2−2のX=(X*R)modmの計算は、汎用演算器を用いて行っておくものとする。
【0026】
演算器40の内部は、鍵長の1/4倍のデータ幅の乗算器8個、加算器、データラッチおよびそれらを制御する回路から成る。演算器40内部の動作を説明する図が図5である。これは図3のアルゴリズムを実行しているにすぎないが、異なる点が2点ある。図3でいうxyは、図5ではXXであるため、常に図3の(2)式が実行されることになる。図5は図9の従来例と同様に乗算の演算部分を平行四辺形の形で表わしている。その中に記載した数字は、n/4ビットのサイズをもつ各部分を実行するマシンサイクルの順序番号を示している。()で囲んだサイクル番号は、同じサイクル番号の上の結果と同じになるので計算の必要がないことを示す。計算は下位桁から順に上位の桁の方に向けて実行される。すなわちX2R−1modmの計算を行うために13サイクル要し、3つの乗算(XX,m’L,mU)が1サイクルずれでパイプライン実行できるような実行順序となっている。さらに10サイクル目以降は実行結果を下の桁から順次出力するが、その結果がまた演算器40に入力されて次のX2R−1modm演算の実行が開始される。
【0027】
また演算器41の内部は、鍵長の1/4倍のデータ幅の乗算器8個、加算器、データラッチおよびそれらを制御する回路から成る。演算器41内部の動作を説明する図が図6である。図6は図5と同様に平行四辺形の中に記載した数字は各部分を実行するサイクルを示している。すなわちXYR−1modmの計算を行うために13サイクル要し、3つの乗算(XY,m’L,mU)が1サイクルずれでパイプライン実行できるような実行順序となっている。XYR−1modmは、アルゴリズム2−2でj[i]==1の場合のみ実行される。これは演算器41内部でYからの入力データを保持しているラッチをTRG=1の場合のみ更新し、それ以外の場合は更新しないという方法で実現できる。
【0028】
図4の専用演算器によって演算が開始されるとき、演算器のラッチがリセットされ、セレクタ10,11,12は各々e,x,1を選択し、各々ラッチ20あるいは演算器40、41に入力する。mとRは演算中は固定値となるので、外部から同じ信号が演算器に入力されつづける。なおm’はあらかじめ演算器40と演算器41内部のラッチに保持されているとする。こうして演算器の各ラッチに初期値が設定されると、演算が開始される。セレクタ10,11,12は、各々シフタ30、演算器40、演算器41内部の信号を選択するように切り替えられ、演算器40,41が1回のモンゴメリ乗算を行うごとにラッチ20の内容は右に1ビットシフトした値に設定される。ラッチ20の最下位ビットは演算器41のTRG信号として入力し、1であれば計算結果を演算器内部にあるYの値を保持しているラッチの値にセットし、次の演算でこの値をYとして使用するようにする。こうして鍵長分の演算が行われると、最後に演算器41の出力結果が演算器42に入力し、値が負ならmが加算され、そうでないならその演算を行わないで値を出力する。この値がべき乗剰余演算の結果となる。なお演算器42は、1回しか使用されないから、その計算を汎用演算器で実施してもよい。
【0029】
次にこれら演算器40,41のパイプライン動作の様子を図7に示す。各四角内部の数字は各演算器の実行サイクル番号を示しており、図5と図6の平行四辺形の内部に書いた数字に対応するものである。X2R−1modmもXYR−1modmも、実行を開始してから10サイクル目で結果の最下位桁から出力しはじめ、この結果を使用して次の演算が開始される。この場合は10サイクルピッチでモンゴメリ乗算が行われていく。比較のために従来技術を使用した場合を図8に示す。従来技術によれば、X2R−1modmもXYR−1modmも最後の全加算の結果からさらに剰余演算を行う必要があるが、ここでは全加算と同時に剰余演算を実行している。結果は13サイクル目で確定するため、13サイクルピッチでモンゴメリ乗算が行われることになる。このことから、本発明の性能は、従来技術に比べて23%向上することになる。
【0030】
言い換えれば、演算器40,41への入力データの符号により、計算を確定的に行うことができ、演算結果の下位桁から出力される結果を順次、次の演算に使用することができ、性能向上をはかることができる。
【0031】
ここでは鍵長の1/4の乗算器と加算器をベースにして説明したが、本発明はこれに限定されないことは明白であろう。本発明の本質はモンゴメリ乗算の最後に行われる加減算の演算とオーバラップして次の演算を開始できることになる。これによって、加減算の演算は次演算で必要とするデータピッチに合わせて結果を出力すればよいので、大きなビット幅としなくても性能を劣化させることはないし、その部分の演算時間を隠すことができるため、ゲート削減効果と性能向上という2通りの効果を発揮させることができる。
【0032】
【発明の効果】
以上述べたように第1の課題を解決するための本発明によれば、逆元の計算の性能向上を図ることができる。また第2の課題を解決するための本発明によれば、べき乗剰余演算を高速に実行することができる。
【図面の簡単な説明】
【図1】実施形態の逆元をもとめるアルゴリズムを示す図である。
【図2】実施形態の逆元をもとめるアルゴリズムを実行するプログラムの処理手順を示すフローチャートである。
【図3】実施形態のパイプライン実行を可能にするモンゴメリ乗算アルゴリズムを示す図である。
【図4】実施形態のRSA演算を行う演算器の構成を示す図である。
【図5】実施形態の演算器の内部動作を説明する図である。
【図6】実施形態の演算器の内部動作を説明する図である。
【図7】実施形態のRSA演算器の並列動作の様子を示す図である。
【図8】従来技術によるRSA演算器の動作の様子を示す図である。
【図9】従来技術によるモンゴメリ乗算の内部動作を示す図である。
【符号の説明】
10,11,12・・・セレクタ、20・・・ラッチ、30・・・シフタ、40,41,42・・・演算器
Claims (3)
- 計算機のプロセッサによって、b=2nとし、n,mを整数とするとき、m’=−m−1modbを計算する方法において、
(1)初期値として、変数m’を格納する第1の記憶手段に定数1を設定し、変数kを格納する第2の記憶手段に入力された値mを設定するステップと、
(2)変数kに2を加えたk+2の値に前記変数m’を乗ずる演算を前記bをモジュラスとする剰余演算の下で行って得られた値を前記第1の記憶手段上の変数m’に設定するステップと、
(3)上記(2)で得られたk+2の値に変数kを乗ずる演算を前記bをモジュラスとする剰余演算の下で行って得られた値を前記第2の記憶手段上の変数kに設定するステップと、
(4)上記(2)及び(3)のステップをパラメータf=log2n+1回まで行った後に得られた値m’を出力するステップとを有することを特徴とするべき乗剰余演算方法。 - 計算機に、b=2nとし、n,mを整数とするとき、m’=−m−1modbを計算させるプログラムであって、前記計算機に、
(1)初期値として、変数m’を格納する第1の記憶手段に定数1を設定し、変数kを格納する第2の記憶手段に入力された値mを設定するステップと、
(2)変数kに2を加えたk+2の値に前記変数m’を乗ずる演算を前記bをモジュラスとする剰余演算の下で行って得られた値を前記第1の記憶手段上の変数m’に設定するステップと、
(3)上記(2)で得られたk+2の値に変数kを乗ずる演算を前記bをモジュラスとする剰余演算の下で行って得られた値を前記第2の記憶手段上の変数kに設定するステップと、
(4)上記(2)及び(3)のステップをパラメータf=log2n+1回まで行った後に得られた値m’を出力するステップと
を実行させるためのプログラム。 - 変数x,y,e及びmが各々ビット長nの整数とし、R=2nとしたときに、y=xemodmの計算を始めにx=xRmodmの計算を行ってy=1と置いた後に、eのビット値が1の場合にy=xyR−1modmを計算し、eのビット値にかかわらずx=xxR−1modmを計算するアルゴリズムを適用し、
上記y=xyR−1modmの計算について、b=2nとするとき、m’=−m−1modbとして
u=xym’modb; y=(xy+um)/b
を計算し、y≧mの場合にy=y−mを計算するべき乗剰余演算方法において、
上記xyR−1modmの計算について、
u=xym’modbを計算し、
もしxy>0であればy=(xy+um)/b−mを計算し、
xy<0であればy=(xy+um)/b+mを計算し、y=0ならばそのままとし、
得られたx及びyの値を次のeのビット値についての計算の入力として用い、eの全ビット値について上記計算を行った後にy>0ならばyの最終結果を目的の計算結果とし、y≦0ならばy=y+mの値を目的の計算結果とし、1つのxyR−1modm演算と次のxyR−1modm演算とを並列演算するように構成したことを特徴とするべき乗剰余演算方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003011941A JP4223819B2 (ja) | 2003-01-21 | 2003-01-21 | べき乗剰余演算装置及びそのプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003011941A JP4223819B2 (ja) | 2003-01-21 | 2003-01-21 | べき乗剰余演算装置及びそのプログラム |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008257078A Division JP4850884B2 (ja) | 2008-10-02 | 2008-10-02 | べき乗剰余演算器 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2004226516A true JP2004226516A (ja) | 2004-08-12 |
JP4223819B2 JP4223819B2 (ja) | 2009-02-12 |
Family
ID=32900695
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003011941A Expired - Fee Related JP4223819B2 (ja) | 2003-01-21 | 2003-01-21 | べき乗剰余演算装置及びそのプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP4223819B2 (ja) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008535011A (ja) * | 2005-04-01 | 2008-08-28 | テールズ | モンゴメリーのモジュラー乗算を実行する方法及びそのための装置 |
US8407270B2 (en) | 2008-12-02 | 2013-03-26 | Samsung Electronics Co., Ltd. | Methods of calculating negative inverse of modulus |
WO2014189171A1 (ko) * | 2013-05-23 | 2014-11-27 | 목포대학교산학협력단 | 몽고메리 역원 알고리즘을 위한 뺄셈 연산 장치 및 그 방법 |
KR20190047341A (ko) * | 2017-10-27 | 2019-05-08 | 인하대학교 산학협력단 | Rsa 알고리즘 용 몽고메리 알고리즘 파라미터 계산 방법 |
-
2003
- 2003-01-21 JP JP2003011941A patent/JP4223819B2/ja not_active Expired - Fee Related
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008535011A (ja) * | 2005-04-01 | 2008-08-28 | テールズ | モンゴメリーのモジュラー乗算を実行する方法及びそのための装置 |
US8407270B2 (en) | 2008-12-02 | 2013-03-26 | Samsung Electronics Co., Ltd. | Methods of calculating negative inverse of modulus |
KR101548174B1 (ko) | 2008-12-02 | 2015-09-07 | 삼성전자주식회사 | 모듈러스의 음의 역원을 구하는 방법 |
WO2014189171A1 (ko) * | 2013-05-23 | 2014-11-27 | 목포대학교산학협력단 | 몽고메리 역원 알고리즘을 위한 뺄셈 연산 장치 및 그 방법 |
KR20190047341A (ko) * | 2017-10-27 | 2019-05-08 | 인하대학교 산학협력단 | Rsa 알고리즘 용 몽고메리 알고리즘 파라미터 계산 방법 |
KR101980448B1 (ko) | 2017-10-27 | 2019-05-20 | 인하대학교 산학협력단 | Rsa 알고리즘 용 몽고메리 알고리즘 파라미터 계산 방법 |
Also Published As
Publication number | Publication date |
---|---|
JP4223819B2 (ja) | 2009-02-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5866128B2 (ja) | 算術プロセッサ | |
JP3525209B2 (ja) | べき乗剰余演算回路及びべき乗剰余演算システム及びべき乗剰余演算のための演算方法 | |
JP2722413B2 (ja) | モンゴメリ法によるモジュラ乗算の実施方法 | |
TW550498B (en) | Method and apparatus for modular multiplying and calculating unit for modular multiplying | |
US8977668B2 (en) | Calculating unit for reducing an input number with respect to a modulus | |
US20070198824A1 (en) | Cryptography system and elliptic curve operation method | |
CN115344237B (zh) | 结合Karatsuba和蒙哥马利模乘的数据处理方法 | |
KR101103893B1 (ko) | 몽고메리 곱셈 내에서의 simd 명령어들의 사용 | |
JP4302640B2 (ja) | 被乗数のシフトを用いて乗算を計算するための装置およびその方法、上記装置を実行するためのプログラムコードを格納した記録媒体 | |
Koç et al. | Fast algorithm for modular reduction | |
US7240204B1 (en) | Scalable and unified multiplication methods and apparatus | |
KR20040060445A (ko) | 4-2 컴프레서를 이용한 몽고메리 모듈러 승산기 및 그승산 방법 | |
KR102496446B1 (ko) | 모듈러 연산을 위한 워드 병렬 연산 방법 | |
JP2004258141A (ja) | モンゴメリ乗算剰余の多倍長演算のための演算装置 | |
JP4223819B2 (ja) | べき乗剰余演算装置及びそのプログラム | |
JP3660075B2 (ja) | 除算装置 | |
JP4850884B2 (ja) | べき乗剰余演算器 | |
JP2000207387A (ja) | 演算装置及び暗号処理装置 | |
US7167885B2 (en) | Emod a fast modulus calculation for computer systems | |
GB2318892A (en) | Co-processor for performing modular multiplication | |
KR100946256B1 (ko) | 다정도 캐리 세이브 가산기를 이용한 듀얼필드상의확장성있는 몽고매리 곱셈기 | |
KR100297110B1 (ko) | 모듈러곱셈기 | |
Lórencz et al. | Subtraction-free almost Montgomery inverse algorithm | |
JP3137599B2 (ja) | BのC乗のnを法とした剰余を計算する回路 | |
JPH0371332A (ja) | 剰余乗算回路および剰余乗算方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20050804 |
|
RD02 | Notification of acceptance of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7422 Effective date: 20050804 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20080805 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20081002 |
|
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: 20081028 |
|
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: 20081120 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111128 Year of fee payment: 3 |
|
LAPS | Cancellation because of no payment of annual fees |