JP3540280B2 - べき乗剰余演算方法、および、剰余演算方法 - Google Patents
べき乗剰余演算方法、および、剰余演算方法 Download PDFInfo
- Publication number
- JP3540280B2 JP3540280B2 JP2001011300A JP2001011300A JP3540280B2 JP 3540280 B2 JP3540280 B2 JP 3540280B2 JP 2001011300 A JP2001011300 A JP 2001011300A JP 2001011300 A JP2001011300 A JP 2001011300A JP 3540280 B2 JP3540280 B2 JP 3540280B2
- Authority
- JP
- Japan
- Prior art keywords
- basis
- processing
- base
- montgomery multiplication
- remainder
- 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.)
- Expired - Fee Related
Links
Images
Description
【発明の属する技術分野】
本発明は、剰余演算系に基づき大きな整数の演算を並列処理により高速に計算する剰余演算処理装置及び方法に関する。
【0002】
【従来の技術】
大きな整数を効率良く演算するための手法として剰余演算系(Modular ArithmeticまたはResidue Number Systems)が知られている。剰余演算系(以下RNSと書く)は、互いに素な比較的小さな整数の組[a1, a2, , an]を用意し、これらの整数で割った余りの組として大きな整数を表現する方法である。以降、この整数の組をRNSの基底、要素数nを基底サイズと称する。例えば、整数xを基底[a1, a2, , an]で表現すると[x1, x2, , xn]となる。ここでxi = x mod ai (i = 1, , n)としている。この時、基底要素の積をA (= a1a2…an)として、xがx<Aを満たす正整数であれば、xと[x1, x2, , xn]は一対一対応となり、xは基底[a1, a2, , an]で一意に表現される。なおRNSは、加算・減算・乗算が基底ごとに独立に実行可能であるという特徴を持っている。
【0003】
一方、RSA暗号で用いるべき乗剰余算の実装法として、Montgomeryによって提案された剰余付き乗算(P. L. Montgomery, Mathematics of Computation, Vol.44, No. 170, pp. 519521, April, 1985)を繰返し実行する方法がある。このモンゴメリ乗算は剰余付き乗算を加算と乗算で代替えして実行する手法であるため、加減乗算の並列処理を可能にするRNSと組み合わせることで、べき乗剰余算の高速並列処理の実現が期待できる。
【0004】
そのような試みとして、Poschらの方式(K. C. Posch and R. Posch, IEEE Transaction on Parallel and Distributed Systems, Vol. 6, No. 5, May 1995, pp.449454)や、先発明の特願2000-334978による方法が提案されている。
【0005】
このRNSモンゴメリ乗算(以下、モンゴメリ乗算と略称する)では、基底変換と呼ぶ処理が2回実行される。ここで基底変換とは、RNSのある基底で表された数をその基底と互いに素な別の基底で表現し直すことをいう。モンゴメリ乗算では基底変換以外の処理も行なうが、基底変換以外の処理は演算量が少ないため、基底変換の処理時間によってモンゴメリ乗算の処理性能が決まる。さらに、モンゴメリ乗算の繰返し処理によってべき乗剰余算が実現されるため、基底変換の処理時間がべき乗剰余算の処理性能も決めることになる。このため、基底変換の処理の効率化はべき乗剰余算の処理性能向上に直結するものである。
【0006】
【発明が解決しようとする課題】
基底変換の処理自体の効率化については、既に様々な取り組みがなされている。しかし、モンゴメリ乗算で実行する2回の基底変換同士を並列処理するという試みは行なわれていない。これは、従来法のモンゴメリ乗算のアルゴリズムでは、1回目の基底変換で得られる結果を用いて2回目の基底変換を開始する必要があるために、2つの基底変換は逐次処理されねばならず、並列処理が不可能になっていることによる。
【0007】
また従来法は、並列演算ユニットを増設することで処理性能の向上を図るものであるが、最も高い処理性能が得られる並列ユニット数uは、RNSの基底サイズをnとしてu=nであり、nが並列度に関する上限値となる。すなわち従来法は、ユニット数が1≦u≦nの範囲内で処理性能の向上が得られるものであり、nを超えるユニット数を用意してもu=nでの処理性能を上回ることはできない。
【0008】
上述した点に鑑み、本発明は、2回の基底変換の並列処理(二重処理)を可能とするであることを特徴とするRNSモンゴメリ乗算の処理方式を提供することを目的とする。
【0009】
【課題を解決するための手段】
本発明は、整数を剰余演算系で表現し、これを演算処理する剰余演算装置であって、剰余演算機能を有する第1の積和回路と第2の積和回路とを具備する積和演算ユニットと、前記第1の積和回路の剰余演算に用いられる補正項を求め、これを前記第1の積和回路へ供給する第1の補正項計算ユニットと、前記第2の積和回路の剰余演算に用いられる補正項を求め、これを前記第2の積和回路へ供給する第2の補正項計算ユニットとを備えた。
【0010】
好ましくは、上記積和演算ユニットは、複数個備えているようにしてもよい。
【0011】
好ましくは、前記第1の積和回路と第2の積和回路とに接続される記憶手段を更に備えているようにしてもよい。
【0012】
また、本発明は、第1の基底で表現された剰余演算系の第1中間変数を基底変換し、第1の基底と異なる第2の基底に基づく剰余演算系の中間変数を得る第1基底変換処理と、該第1の基底で表現された剰余演算系の、第1中間変数とは異なる第2中間変数を基底変換し、該第2の基底に基づく剰余演算系の中間変数を得る第2基底変換処理とを備えたモンゴメリ乗算を、基底変換を処理可能な第1の積和演算手段と第2の積和演算手段とを備えた剰余演算装置を利用して、演算処理させる剰余演算方法であって、前記第1基底変換処理を前記第1の積和演算手段にて、前記第2基底変換処理を前記第2の積和演算手段にて並列実行させるよう制御するようにした。
【0013】
また、本発明は、第1の基底で表現された剰余演算系の第1中間変数を基底変換し、第1の基底と異なる第2の基底に基づく剰余演算系の中間変数を得る第1基底変換処理と、該第1の基底で表現された剰余演算系の、第1中間変数とは異なる第2中間変数を基底変換し、該第2の基底に基づく剰余演算系の中間変数を得る第2基底変換処理とを備えたモンゴメリ乗算を、基底変換を処理可能な第1の積和演算手段と第2の積和演算手段とを備えた剰余演算装置を利用して、演算処理させる剰余演算方法であって、第1の基底または第2の基底のうちの何れか一方の基底によって表現される値を入力するステップと、k回目の第1基底変換処理と(k―1)回目の第2基底変換処理とを並列実行するよう制御するステップと、前記第1の基底または前記第2の基底のうちの他方の基底によって表現される値を出力するステップとを備えた。
【0014】
また、本発明は、整数を基底Aおよび基底Bの剰余演算系で表現し、該基底Aに基づいて求められた値を該基底Bに基づいて表される値へ基底変換を行う第1基底変換処理と、該基底Bに基づいて求められた値を該基底Aに基づいて表される値へ基底変換を行う第2基底変換処理と、を含む1回の剰余付き乗算を繰り返すことにより、演算結果を得るべき乗剰余演算方法であって、k回目の第1基底変換処理と(k+1)回目の第1基底変換処理とを並列実行するよう制御する第1ステップと、(k+1)回目の第2基底変換処理と(k+2)回目の第2基底変換処理とを並列実行するよう制御する第2ステップと、を繰り返し実行してべき乗剰余演算を行うようにした。
【0015】
好ましくは、べき乗剰余演算をモンゴメリ乗算の繰り返し処理で実装する場合のループ処理内の、最初のモンゴメリ乗算に入力される第3の中間変数の係数が各ループ処理で等しくなるように、該ループ処理内の最後のモンゴメリ乗算において中間変数と掛け合わせる定数の係数を設定するようにした。
【0016】
上記のようにした本発明により、RNSモンゴメリ乗算1回当たりの処理時間を約1/2に短縮できるようになった。
【0017】
また、並列ユニット数がn<u≦2nに相当する範囲内に対しても処理性能の向上を実現する。そして、RNSモンゴメリ乗算を適用することで、RSA暗号の処理等に用いられる高速な剰余演算装置、剰余演算方法および、べき剰余演算方法を実現することができるようになった。
【0018】
【発明の実施の形態】
以下、本発明の実施形態について、図面を参照しつつ詳細に説明する。
(第1実施形態)
RSA暗号で用いるべき乗剰余算 C = Me mod N を、モンゴメリ乗算を繰返し実行して実現する方法が知られている。このモンゴメリ乗算(MM)は、整数 x, y, Nの入力に対し、w = xyB1 mod N ないし xyB1 mod N + N を出力するアルゴリズムであり、次の5つのステップで与えられる。ここでBはNより大きく、Nと互いに素な任意の整数である。
MM
(1)s ← x・y
(2)t ← [s・(N)1] mod B
(3)u ← t・N
(4)v ← s + u
(5)w ← v/B
このモンゴメリ乗算を剰余演算系(RNS)表現を用いて実行する方法として、Poschらによる次の処理が提案されている。
MM[A,B→A,B]
(1)sB ← xB・yB
(1')sA ← xA・yA
(2)tB ← [sB・(NB)1] mod B
(3)基底変換BT1: tB ⇒ tA
(4)uA ← tA・NA
(5)vA ← sA + uA
(6)wA ← vA・BA 1
(7)基底変換BT2: wA ⇒ wB
添え字AないしBをつけた記号は、それぞれ剰余演算系の基底A=[a1, a2, , an]ないし基底B=[b1, b2, , bm]によって表現された数を表す。例えばxAは、基底Aの各要素でxを割った余りの組[x1, x2, , xn]、ここでxi = x mod ai (i = 1, ,n)、を表す。基底Aのサイズnと基底Bのサイズmは一般には異なるが、基底Aを処理する演算ユニットと基底Bを処理する演算ユニットとの共有が可能なn=mの場合について本実施例では説明を行なう。次に、基底変換とはある基底で表された数をその基底と互いに素な別の基底で表現しなおすことをいい、例えばwA ⇒ wBは、基底Aで表されたwAを用いて基底Bで表されるwBを求めることを意味する。なお、RNSモンゴメリ乗算の必要条件はN<A, N<Bであり、この条件からxとyは基底Aのみ、あるいは、基底Bのみで一意に表現できる数になっている。しかし、例えば処理の過程で扱うsはxとyとの積であり、値の範囲が0≦s<N2であるため、sを一意に表現するには基底としてA・Bを用いる必要がある。以下、本実施例ではRNSモンゴメリ乗算を簡略してモンゴメリ乗算と呼ぶ。
【0019】
上記7ステップで実現されるモンゴメリ乗算において、(3)と(7)の基底変換がその処理時間の大半を占めるため、ステップ(3)と(7)の効率的処理を行なうことで、モンゴメリ乗算の高速化、ひいては、べき乗剰余算の高速化が期待できる。以下、その方法について考察する。
【0020】
モンゴメリ乗算ではxA, yA, xB, yB, Nの入力に対してwA, wBが出力される。繰返し処理を行なう場合は、得られたwAおよびwBをそれぞれ入力データのxA, yAおよびxB, yBとして次のモンゴメリ乗算を実行する(正確には、二乗を行なう場合はxA, xB ← wA, wBおよびyA, yB ← wA, wBとし、定数fとの積を求める場合は、例えばxA, xB ← wA, wBおよびyA, yB ← fA, fBとする)。すなわち従来法でのモンゴメリ乗算では、2種類の基底A, Bに関する入力データを用意した後に処理を開始し、処理の終了時には2種類の基底A, Bに関する出力データが得られていることになる。
【0021】
この繰り返し処理を図3に示した。この図は特に基底変換について処理の流れを図示したものである。今、モンゴメリ乗算をK回繰り返し実行するとして、k回目(k=1, ..., K)の処理に着目する。モンゴメリ乗算1回あたり基底変換を2回行うため、もしも基底変換BT1(k)とBT2(k)とを並列処理できるならば、モンゴメリ乗算の処理時間の短縮が可能になる。しかし、基底変換BT2(k)の実行には基底変換BT1(k)の結果であるtAが必要になるため、BT1(k)とBT2(k)は逐次的に実行されねばならず、並列処理は不可能であることが分かる。すなわち、従来法によるモンゴメリ乗算は基底変換の並列処理(二重処理)ができないアルゴリズムになっている。
【0022】
そこで本発明では、基底変換BT2(k)とBT1(k+1)という組み合わせで二重処理を実現することを考える。まず説明を分かり易くするため、図3の従来法による繰り返し手順を変形した仮想的な手順を想定する。図4に示したこの仮想的な手順では、モンゴメリ乗算MM[A,B→A,B]とA, Bを入れ替えた関係にあるMM[B,A→B,A]を導入し、MM[A,B→A,B]とMM[B,A→B,A]とを交互に実行することを想定する。
【0023】
具体的には、k+2p回目でMM[A,B→A,B]を、k+2p+1回目でMM[B,A→B,A]を実行する(pは任意の整数である)。ここで、MM[A,B→A,B]とMM[B,A→B,A]はA, Bを入れ替えただけであるため、図3と図4は処理の手順やステップ数は全く同じものであることに留意されたい。図4において基底変換BT2(k)とBT1(k+1)とを比較した場合、どちらの基底変換も実行に必要な変数はxA, yA(すなわちwA)であることが分かる。これはBT2(k)とBT1(k+1)との並列処理が可能であることを意味するものである。そのため本発明では、BT2(k)をk回目のモンゴメリ乗算ではなくk+1回目のモンゴメリ乗算において実行することで、基底変換BT2(k)とBT1(k+1)との二重処理を実現するアルゴリズムを以下のように提案する。
【0024】
まず、本発明では次の2種類のモンゴメリ乗算を考慮する。
MM[B→A]
(1)sB ← xB・yB
(2)tB ← [sB・(NB)1] mod B
(3)基底変換BT1: tB ⇒ tA , 基底変換BT2: xB , yB ⇒ xA , yA
(4)uA ← tA・NA
(4')sA ← xA・yA
(5)vA ← sA + uA
(6)wA ← vA・BA 1
MM[A→B]
(1)sA ← xA・yA
(2)tA ← [sA・(NA)1] mod A
(3)基底変換BT1: tA ⇒ tB , 基底変換BT2: xA , yA ⇒ xB , yB
(4)uB ← tB・NB
(4')sB ← xB・yB
(5)vB ← sB + uB
(6)wB ← vB・AB 1
上記において、MM[B→A]とMM[A→B]はA, Bを入れ替えた関係にあり、本発明はこのMM[B→A]とMM[A→B]を交互に実行することで繰返し処理を実現することを特徴とする。
【0025】
本発明によるモンゴメリ乗算の繰り返し処理を、基底変換の取扱いが分かるように図3および図4に対比させて示したものが図5である。本図では、繰り返し処理のk+2p回目でMM[B→A]を、k+2p+1回目でMM[A→B]を実行するとしている。図5を図4と比較した場合、基底変換BT2(k)がk回目の処理からk+1回目の処理に移動し、BT1(k+1)と並列に処理される。そのため、モンゴメリ乗算1回当たりの基底変換に要する処理時間が2回分から1回分に減り、またモンゴメリ乗算の処理時間の大半が基底変換で費やされることから、約1/2の処理時間の短縮を見込むことができる。
【0026】
ここで、図3および図4でのBT2(k): wA ⇒ wBと、図5でのBT2(k): xA, yA ⇒ xB, yBとは全く同じ処理であることを補足説明しておく。図5では処理の流れを分かり易くするためにx, yという表記を用いたが、k+1回目の処理でのx, yとはk回目の処理でのwのことであり、すなわち図5のBT2(k)はwA ⇒ wBを行うものである。同様に、上記したMM[B→A]とMM[A→B]のステップ(3)での基底変換BT2に関しても、BT2: xξ, yξ ⇒ xζ, yζ という表記は、従来法でのステップ(7)のBT2: wξ ⇒ wζと全く同じ処理を意味している。ここでξ, ζはAまたはBを表す。
【0027】
なお図5では、従来法で逐次的に処理していた基底変換BT1とBT2を並列処理していることを明示するために、BT1とBT2を横に書き並べて表した。図3〜図5のモンゴメリ乗算処理を表すボックスは、縦方向が処理時間に、横方向がハードウェアの規模に対応すると考えられたい。本発明は、基底変換の二重処理を実現するために、回路規模を2倍にして約1/2の処理時間短縮を図るものであるが、これは通常の並列演算ユニットの増設による高速化のように自明な技術ではなく、これまで説明してきたように、モンゴメリ乗算の手順を変更することで初めて可能になったものである。
【0028】
次にMM[B→A]とMM[A→B]の入出力データについて説明する。図5から、BT1(k+1)とBT2(k)との並列処理が実現されたことにともない、MM[A→B]では入力データとして基底A, B両方に関するRNS表現は必要なく、xA, yAのみを入力すればよいことが分かる。これは、xB, yBがMM[A→B]の処理中に基底変換BT2によってxA, yAから求められることによっている。一方、出力データとしては、入力データと逆の表現であるwBが得られる。すなわちMM[A→B]およびMM[B→A]は、入力データと出力データの表現がAとBに関して逆になるという性質を持つ。この性質のため、MM[A→B]のみ、あるいはMM[B→A]のみで繰返し処理を行なおうとした場合、出力データを次の入力データとして用いる単純な繰返し処理ができないことになる。この不都合を回避する方法が、本発明によるアルゴリズムの特徴であるMM[B→A]とMM[A→B]とを交互に実行する繰返し処理である。
【0029】
それでは、上記したMM[B→A]とMM[A→B]の処理ステップを具体的な処理手順とともに説明する。図5に示したようにk回目の処理でMM[B→A]を実行する場合、k1回目のMM[A→B]が終了した時点でwBが得られており、これがk回目のMM[B→A]の入力データxB, yBとなる。
【0030】
以下、MM[B→A]での処理を説明する。まず入力データxB, yBを用いて、ステップ(1)と(2)からtBを得る。ステップ(3)で基底変換BT1によってtBからtAを求める際、同時にxB, yBから同じく基底変換BT2にてxA, yAを求める。このステップ(3)で得られたtAおよびxA, yAを用いて、続くステップ(4)でuAを、ステップ(4')でsAを求める。そしてステップ(5)と(6)によってuA, sAからwAを得る。従来法のMM[A,B→A,B]との違いは、ステップ(7)の基底変換BT2(正確には、1つ前のモンゴメリ乗算での基底変換BT2)を、ステップ(3)において基底変換BT1と並列に処理する点である。また従来法ではステップ(1')で計算していたsAをステップ(4')にて求めている。
【0031】
同様に、続くk+1回目でのMM[A→B]では、上述したMM[B→A]においてAとBを完全に入れ替えた処理を行なう。得られた出力データwBを入力データxB, yBとして、k+2回目のMM[B→A]に接続することができる。
【0032】
ここでMM[B→A], MM[A→B]についての補足説明を行なう。上述した処理手順では、説明を分かり易くするために基底変換BT2をステップ(3)において基底変換BT1と並列に処理するとしているが、BT2の処理は必ずしもBT1と同時に行なう必要はない。BT2は、BT2の結果を用いて計算されるsAないしsB(MM[B→A]の場合はsA、MM[A→B]の場合はsB)を使用するステップ(5)までに処理が完了されればよい。すなわち、基底変換BT2は、ステップ(1)から(4)を実行中にそれらと並列に処理すればよい。同様の理由で、ステップ(4')のsAないしsBの計算も、BT2の後、ステップ(5)の前までに実行すればよい。ただし基底変換BT2に関しては、基底変換BT1と同時に実行する場合に、基底変換を二重処理するための制御部での処理の増加分を最小限に抑えられるという利点がある。
【0033】
以上説明してきたように、本発明ではMM[B→A]とMM[A→B]を交互に実行することで、
繰返し 処理 入力データ 出力データ
:
k回目 MM[B→A] xB, yB wA
k+1回目 MM[A→B] xA, yA wB
k+2回目 MM[B→A] xB, yB wA
:
という繰返し処理が実現される。比較のために従来法について同様な表を書くと次のようになる。
繰返し 処理 入力データ 出力データ
:
k回目 MM[A,B→A,B] xA, yA, xB, yB wA, wB
k+1回目 MM[A,B→A,B] xA, yA, xB, yB wA, wB
k+2回目 MM[A,B→A,B] xA, yA, xB, yB wA, wB
:
両者を比較すると、本発明による方法では入出力において1種類の基底に関するデータしか扱わないため、計算上(特にRNS表現として)問題があるように一見されるかもしれない。しかし、前述したようにRNSモンゴメリ乗算での必要条件N<A, N<Bがあるために、xやy(すなわちw)は基底Aのみあるいは基底Bのみで一意に表現される数となっており、どちらか1種類の基底に関するデータが得られていれば問題ないことが保証されている。また本発明は従来法の処理の順番を入れ替えているだけであり、処理の途中においては従来法と同様にA, B両方の基底に関する計算を行なっているため、その他の中間変数に関しても計算上の問題は生じない。
【0034】
以下、本発明によるモンゴメリ乗算の繰返し処理を実現するためのハードウェア構成について説明する。まず図2に従来法での剰余演算装置のハードウェア構成を示す。RNS表現の基底要素ごとの演算を並列処理するための同一構成のユニットu個と、基底変換での補正項の計算を行なう補正項計算ユニット210から構成される。
【0035】
並列ユニットは、剰余演算機能付き積和回路201、RAM221、ROM231で構成される。補正項計算ユニット210に関しては、ビット選択部やROM等を要する場合、それらも含めて補正項計算ユニットとしている。ここで、並列ユニット数uは基底サイズnと1≦u≦nという関係にあり、ユニット数uがnの約数である場合に、効率的な並列処理が可能である。uがnより小さい場合は1つのユニットが2個以上の基底要素に関する演算を担うことになるため、処理時間はuに反比例して増減する。しかし、並列度を最も高くした場合がu=nであり、従来法ではユニット数をnより増やしても処理速度の向上は得られない。
【0036】
図1に本発明による剰余演算装置のハードウェア構成を示す。剰余演算機能付き積和回路[1]1011、積和回路[2]1012、RAM1210、ROM1310で構成されるu個のユニットと、補正項計算ユニット[1]1101と補正項計算ユニット[2]1102から構成される。剰余演算装置の全体構成、および、積和回路[1]1011、RAM1210、ROM1310、補正項計算ユニット[1]1101の構成としては、先発明の特願2000-334978での構成、および先発明での変形例、あるいは、先発明での従来法の構成を適用することができる。さらに、本発明に基づいてべき乗剰余演算装置を構成する場合も、先発明での構成を適用することができる。
【0037】
本発明の特徴は、従来技術による剰余演算装置に積和回路[2]1012および補正項計算ユニット[2]1102が追加された点であり、二重処理を行なう基底変換の一方の処理をこれらによって実行する。すなわち、例えば基底変換BT1を積和回路[1]と補正項計算ユニット[1]で、基底変換BT2を積和回路[2]と補正項計算ユニット[2]で行なうことで、基底変換BT1とBT2の並列処理を実現する。そのために、積和回路[2]1012および補正項計算ユニット[2]1102は、それぞれ積和回路[1]1011および補正項計算ユニット[1]1101と同じ構成を有する。そして、補正項計算ユニット[1]1101は積和回路[1]と接続され、補正項計算ユニット[2]1102は積和回路[2]と接続される。
【0038】
積和回路[1]1011と積和回路[2]1012はRAM1210とROM1310を共有する。 本発明では、積和回路[2]を増設して基底変換の二重処理を行なうために、RAMないしROMのサイズを従来法の2倍にする必要はない。積和回路[1]1011と積和回路[2]1012間でのデータ転送に関しては、バスで相互接続してもよいし、RAM1210を介して行なったのでもよい。積和回路[1]1011と積和回路[2]1012による構成ユニットを便宜的に積和ユニット1010と称する。
【0039】
ここで基底変換BT1、BT2以外の処理を積和回路[1]と積和回路[2]にどう分担させるかに応じて、積和回路[2]の構成を変えることができるためそれについて補足しておく。例えば、積和回路[1]で基底変換BT1と基底変換以外の全処理を行なうとし、積和回路[2]では基底変換BT2のみを行うとした場合は、積和回路[2]1012については、剰余演算機能付き積和回路として基本的な構成要素である乗算器、加算器、剰余演算部、レジスタ、および、スイッチを有していれば、積和回路[1]1011と全く同じ構成にする必要はなく、よりシンプルな構成にすることも可能である。
【0040】
本発明による剰余演算装置を従来技術による剰余演算装置と比較した場合、両者で並列ユニット数が同じであれば、基底変換の二重処理を行なう本発明は約2倍の処理性能を有することになる。図1の並列度をuではなく2uであると見なすならば、本発明による剰余演算装置はユニット数が2nに相当する処理性能まで高速化が可能であるといえる。これは、従来法においてnであった並列度の上限を2nまで引き上げたことに相当する。
【0041】
次に、本発明による2種類のモンゴメリ乗算を交互に実行してべき乗剰余算を行なう手順について、図7のフローチャートに従って説明する。本フローチャートは、入力されたRNS表現の値xをe乗し、Nで割った余りを求める処理を表す。その際、Nは既知と仮定し、Nおよび後述する定数f, g, hのRNS表現を求めるなどの処理については事前に計算してあるものとして図7には示していない。なお、Nや定数を外部入力とし、それらのRNS表現を求めるなどの処理をその都度行なうように構成しても良い。
【0042】
xの基底Bに関するRNS表現(以下、B表現と略記する)とべき指数eが入力されると、まずxと定数fとをモンゴメリ乗算MM[B→A]によって掛け合わすことでx'を得る。ここでf = (AB) mod Nとしている。MM[B→A]への入出力データは、入力データがxのB表現、出力データがx'の基底Aに関するRNS表現(以下、A表現と略記)である。その際、定数fについてはA, B両方の基底に関する値(fA, fB)が入力データとして必要になる。これは、MM[B→A]の処理中に基底変換BT2によってA表現からB表現に変換されるのは変数xのみであるため、xと定数とを掛け合わせる場合、定数についてはA, B両方の基底に関する値を事前に計算しておく必要があるためである。
【0043】
次に、x'のA表現と定数gとをモンゴメリ乗算MM[A→B]に入力し、中間変数cのB表現を得る。ここでg = B mod Nとしている。またMM[A→B]の処理の過程において、基底変換BT2によってx'Aからx'Bが得られていることを明記するため、図7では(, x'B)という表記を付加している。x'Aとx'Bは続く処理にて使用する。
【0044】
次のステップではループ処理に入る。ここで、ループ変数iはλ1から1まで変化する。さらに、外部入力されたべき指数eは2進数表現されており、そのビット数をλ、各ビットをeiとしている。eλは最上位ビットであり、ここでは1とする。また、λは2以上の値とする。
【0045】
ループ内では、まず、中間変数cの2乗に相当する値を計算するために、モンゴメリ乗算MM[B→A]にcBを入力し、出力結果(例えばc'A)を改めてcAとする。
【0046】
続いて、ループ変数iに対応するeのビットeiが0か1かを判定し、1の場合はcとx'とを、0の場合はcと定数hとをモンゴメリ乗算MM[A→B]によって掛け合わせる処理を行なう。ここでh = A mod Nとしている。
【0047】
次に、ループ変数iが1か否かを判定し、1でなければループの開始点に戻り、1であればループ処理を抜ける。
【0048】
最終ステップでは、得られたcと1とをモンゴメリ乗算MM[B→A]によって掛け合わせ、演算結果yのA表現を得る。
【0049】
以上の手順によって、y = xe mod Nを計算することができる。既に述べたように、RNSモンゴメリ乗算の入出力データは、基底Aのみ、あるいは、基底Bのみで一意に表現される数であるため、yAからyを求めることに問題は生じない。
【0050】
図7を従来法でのフローチャートを示した図6と比較した場合、ei=0の時もモンゴメリ乗算を実行する点が異なっており、その分の処理時間が増加するように思われる。しかし実際の実装においては、暗号解析に対する耐性を向上させるために、従来法においてもei=0の場合にモンゴメリ乗算を実行することで、ei=0とei=1での処理時間を同じにするという処置が行なわれるため、必ずしも図7が図6と比較して処理時間に関してデメリットを持つわけではない。なお、図6で定数dはB2 mod Nを表す。
【0051】
また上述した図7による繰返し処理の手順は、べき乗指数eを1ビットずつサーチしながら乗算を繰り返すことでべき乗剰余算を実現する方法(バイナリ法)であるが、例えばeをqビットずつサーチする方法(qビットウィンドウ法)に対して本発明によるモンゴメリ乗算を適用してもよい。
【0052】
ここで、図7のべき乗剰余算のループ内での処理に関して、さらに詳しく説明する。まず、ループ内の処理を次のようステップ(a)とステップ(b)に分けて考える。
ステップ(a) c'A ←MM[B→A](cB, cB)
ステップ(b) c'B ←MM[A→B](cA, (jA, jB))
説明を分かり易くするために、上記では演算結果をc'で表している。また、jはeiに応じて定まる定数であり、ei=1の場合はj=x'、ei=0の場合はj=hである。ここで、x'とhはループ処理の前に事前計算される値であるため、x'およびh(すなわちj)を定数と称している。ステップ(a)は入力変数の二乗を計算し、ステップ(b)は入力変数に定数を掛ける処理である。
【0053】
上記においてc'A, c'Bの計算式は、具体的には
ステップ(a) c'A = [c・c・B1 mod N]A or [c・c・B1 mod N + N]A
ステップ(b) c'B = [c・j・A1 mod N]B or [c・j・A1 mod N + N]B
となっている。ここで、c'AにはB1 が、c'BにはA1 が、それぞれ係数として掛かることに注目されたい。これは本実施例の冒頭で述べたモンゴメリ乗算の性質によるものである。
【0054】
このように、MM[B→A]においてはB1が、MM[A→B]においてはA1 が、それぞれ係数として演算結果に掛かるという性質があることから、MM[B→A]、MM[A→B]を交互に繰返し実行するために、中間変数の係数を制御する必要が生じ、以下、その方法について説明する。その際、ループ処理に入る直前の中間変数cの係数を仮定して説明を行なう必要がある(これは係数の初期値を定めることを意味する)。図7に示した例ではループに入る直前のcはB・x mod Nであり、すなわち係数の初期値はBである。本実施例では初期値としてこの係数Bを例にとって説明を行なう。なお、ここでいう係数とは、φとψを任意の整数として、Aφ・Bψで表される数である。また係数の初期値のとり方は任意であり、B以外でもよい。
【0055】
以下、係数に着目して、べき乗剰余算のループ内の処理を考察する。まず、ループi=λ1のステップ(a)では、係数がBである中間変数の二乗にB1を掛ける処理が行なわれる。そのため、演算結果の係数は同じくBとなる。続くステップ(b)は、中間変数に定数を掛ける処理であり、それにA1が掛かるため、演算結果の係数は B・J・A1となる。ここで定数の係数をJとしている。この演算結果を入力データとして、続くループi=λ2のステップ(a)に戻ってループ処理を続行するには、係数B・J・A1が初期値と同じBである必要がある。この条件は、各ループで同じ処理を行ないながらステップ(a)とステップ(b)を繰返し実行するために必要なもので、この条件B・J・A1 = BからJ = Aが得られる。実際、図7に示した例では、x'とhは共に係数はAになっている。
【0056】
以上は、MM[B→A]とMM[A→B]を交互に実行してべき乗剰余算のループ処理を実行する際、ステップ(a)のモンゴメリ乗算に入力される中間変数cの係数が、各ループで同じである必要があることを示している。本発明は、この係数の制御を実現するため、ステップ(b)のモンゴメリ乗算で中間変数と掛け合わされる定数の係数を、上記に示した方法で選ぶものである。
【0057】
ここで、qビットウィンドウ法についても係数の制御法を説明する。qビットウィンドウ法では、ステップ(a)において中間変数cの二乗計算をq回行なう必要があり、そのためモンゴメリ乗算をq回実行した後に、ステップ(b)へと処理が移る。ステップ(b)での処理は基本的に図7のバイナリ法と同じであるが、qビットウィンドウ法ではべき指数eをqビットずつサーチするため、eiに関する分岐が2通りではなく、qビットで表される数の個数分に分岐して処理されることになる(例えば、4ビットの場合は0〜15の16通りである)。ただし、ステップ(b)でのモンゴメリ乗算の回数は各分岐とも図7と同じ1回であり、かつ、バイナリ法と同様に中間変数cに定数を掛け合わせる処理が行なわれる。そのためqビットウィンドウ法においても、ステップ(b)のモンゴメリ乗算(すなわち、ループ処理内の最後のモンゴメリ乗算)において中間変数と掛け合わせる定数の係数を、上述したバイナリ法での説明と同様な方法で選ぶことで、ステップ(a)の1番目のモンゴメリ乗算(すなわち、ループ処理内の最初のモンゴメリ乗算)に入力する中間変数の係数が各ループで等しくなるように制御することが可能である。
【0058】
具体的には、ステップ(b)の演算結果の係数が、係数の初期値と一致するように定数の係数を定める。これによって、MM[B→A], MM[A→B]を交互に実行して、べき乗剰余算のループ処理をqビットウィンドウ法に対しても実現することができる。
【0059】
上記処理において、qの値によって注意が必要な場合があり、それについて補足する。qが奇数の場合(例えばバイナリ法)は、上述した方法をそのまま適用することができるが、qが偶数である場合、次のような処置を行なう必要がある。ここでは4ビットウィンドウ法を例に挙げて説明する。
【0060】
4ビットウィンドウ法では、ステップ(a)でモンゴメリ乗算を4回、ステップ(b)でモンゴメリ乗算を1回行うため、ループ1回あたりのモンゴメリ乗算の回数は計5回の奇数となる。このために、例えばi番目のループでの最初のモンゴメリ乗算がMM[B→A]であった場合、次のi1番目のループでの最初のモンゴメリ乗算はMM[A→B]となり、周期性がループ1回ではなくループ2回になることが分かる。これを受けて、qが偶数の場合は、ループ2回で1周期と見なした次のような係数の制御を行なう。
:
ループi
ステップ(a) c'A = [c・c・B1 mod N]A or [c・c・B1 mod N + N]A
c'B = [c・c・A1 mod N]B or [c・c・A1 mod N + N]B
c'A = [c・c・B1 mod N]A or [c・c・B1 mod N + N]A
c'B = [c・c・A1 mod N]B or [c・c・A1 mod N + N]B
ステップ(b) c'A = [c・j1・B1 mod N]A or [c・j1・B1 mod N + N]A
ループi1
ステップ(a) c'B = [c・c・A1 mod N]B or [c・c・A1 mod N + N]B
c'A = [c・c・B1 mod N]A or [c・c・B1 mod N + N]A
c'B = [c・c・A1 mod N]B or [c・c・A1 mod N + N]B
c'A = [c・c・B1 mod N]A or [c・c・B1 mod N + N]A
ステップ(b) c'B = [c・j1・A1 mod N]B or [c・j2・A1 mod N + N]B
:
上記したようにqが偶数の場合、2種類の定数j1とj2を導入する。そして、j1の係数J1とj2の係数J2が基底A, Bを入れ換えた関係にあり、かつ、ステップ(a)の最初のモンゴメリ乗算に入力される中間変数の係数が各周期で等しくなるようにJ1とJ2を定める。すなわち、ループiの最初のモンゴメリ乗算に入力される中間変数cの係数をBと仮定した場合、j2と掛け合わせた演算結果の係数がBになるようにJ2を定める。同様にJ1については、j1と掛け合わせた演算結果の係数がAになるようにJ1を定める。このような方法によって、qが偶数の場合も、ループ2回を1周期とみなして係数を制御することで、MM[B→A], MM[A→B]を交互に実行して、べき乗剰余算のループ処理を実現することができる。
【0061】
最後に、本発明によるモンゴメリ乗算による高速化率について考察する。まず、基底AおよびBの基底サイズをnとして、基底変換に要するステップ数はn2である。これをu個の並列演算ユニットで並列処理するため、1ユニットあたりのステップ数はn2/uとなる。効率的な並列処理が可能なユニット数uはnの約数であることから、ここでp=n/uを仮定すると、1ユニットあたりの基底変換のステップ数はn2/u = npと書き換えられる。以下では、ユニット数が同じu個である場合に、1ユニットあたりのステップ数について、従来法と本発明による方法との比較を行なう。
【0062】
まず説明を簡単にするため、u=n、すなわち、p=1の場合から説明する。基底変換のステップ数がnであるため、モンゴメリ乗算で基底変換を2回行なう従来法では、1ユニットあたりのモンゴメリ乗算のステップ数は2n+αで表される。ここで基底変換以外に要するステップ数をαとしている。そして、べき乗剰余算のほとんどの処理時間がモンゴメリ乗算で費やされる(99%前後)ため、Kをモンゴメリ乗算の繰返し回数として、(2n+α)Kをべき乗剰余算に要する従来法での1ユニットあたりのステップ数と見積ることができる。一方、本発明によるモンゴメリ乗算を適用する場合、モンゴメリ乗算の繰返し回数Kは変わらないが、基底変換に要する処理時間が2回分から1回分に減るため、べき乗剰余算に要する1ユニットあたりのステップ数は(n+α)Kとなる。ここで通常αは従来法での値から若干異なるが、変化分は無視できる範囲内である。以上より、本発明による高速化率は(2n+α)/(n+α)となる。具体的な数値として、例えば鍵長1024ビットに対してn=33、α=14を想定することができ、この場合、本発明によって1.7倍の処理性能の向上が得られる。また鍵長を長くする場合、通常、それに比例して基底サイズnを増加する必要があるが、その際αの値は不変となる。そのため、長い鍵長でのRSA暗号処理ほど本発明によるモンゴメリ乗算の適用が効果的であり、高速化率が2倍に近づくことが分かる。
【0063】
次にp=n/u≧2の場合は、pに関する繰り返し処理が入るため、べき乗剰余算に要する1ユニットあたりのステップ数は、従来法が(2np+α)pK、本発明による方法が(np+α)pKとなる。そのため、本発明による高速化率として(2np+α)/(np+α)という見積りが得られる。
(第2実施形態)
第2の実施形態では、図5に示した本発明によるモンゴメリ乗算の繰返し処理の変形例を示す。
【0064】
従来法でのモンゴメリ乗算MM[A,B→A,B]は、基底変換の逐次処理を行なうものであり、基底A, Bに関して表現した2種類のデータが入力され、基底A, Bに関して表現された2種類のデータが出力される。ここでMM[A,B→A,B]の手順を改めて見直すと、
a)xB, yBはステップ(1)の前に入力される必要があるが、xA, yAはステップ(5)までに入力されればよい、
b)出力データのwA, wBは、ステップ(6)が終了した時点で片方のwAの計算が終了している、
という特徴があることが分かる。この2つの特徴のために、次のような手順によって基底変換の二重処理を行なうことが可能である。
【0065】
まず、モンゴメリ乗算[1]でステップ(7)の基底変換BT2を開始すると同時に、ステップ(6)で既に計算されているwAを入力データとしてモンゴメリ乗算[2]を開始する。これによって、モンゴメリ乗算[1]の基底変換BT2とモンゴメリ乗算[2]の基底変換BT1を同時実行することができる。次に、モンゴメリ乗算[1]のステップ(7)が終了した時点で、基底変換BT2の結果wBをモンゴメリ乗算[2]に入力する。そして、モンゴメリ乗算[2]では、入力されたwB(すなわちxB, yB)を用いて基底変換BT2を開始する。それと同時に、モンゴメリ乗算[1]では繰返し処理の次の処理に移り、モンゴメリ乗算[2]のステップ(6)で得られているwBを入力データとして基底変換BT1を実行する。これによって、モンゴメリ乗算[2]の基底変換BT2とモンゴメリ乗算[1]の基底変換BT1とが同時に処理されることになる。
【0066】
以上の手順を図8に示した。本図では、図4で説明したMM[B,A→B,A]を導入し、上述のモンゴメリ乗算[1]がMM[A,B→A,B]に、モンゴメリ乗算[2]がMM[B,A→B,A]に対応している。MM[B,A→B,A]は、MM[A,B→A,B]の手順で基底A, Bを入れ換えた従来法によるモンゴメリ乗算である。図8に示した手順は、基底変換の逐次処理を行なう2種類のモンゴメリ乗算を2分の1ずつずらしながら並列処理を行なうことを特徴としている。
【0067】
これによって、k回目のMM[A,B→A,B]のBT2(k)とk回目のMM[B,A→B,A]のBT1(k)が並列処理され、k+1回目のMM[A,B→A,B]のBT1(k+1)とk回目のMM[B,A→B,A]のBT2(k)が並列処理されることになる。その際、MM[A,B→A,B]の処理を図1の積和回路[1]で、MM[B,A→B,A]の処理を図1の積和回路[2]で行なう(または、この逆でもよい)。以上説明したように、図8に示した手順によれば、基底変換の逐次処理を行なうモンゴメリ乗算を用いても基底変換の二重処理が可能であり、約1/2の時間短縮を図ることができる。
【0068】
【発明の効果】
以上説明したように本発明によれば、基底変換の二重処理を実現することでモンゴメリ乗算の約2倍の高速処理が可能となり、RSA暗号処理の高速化を実現できる。その際、通常の並列演算ユニットの単純な増設による高速化とは異なり、次のような特徴を持つ。従来法では並列ユニット数uの増加に伴う処理性能の向上が1≦u≦nの範囲に限られるのに対し、本発明はn<u≦2nに相当する範囲に対しても並列ユニットの増設を有効にし、処理性能の向上を図ることができる。すなわち、並列化による処理性能向上の上限を従来法の約2倍に引き上げることが可能である。
【図面の簡単な説明】
【図1】本発明の実施形態に係る剰余演算装置の構成を示す図。
【図2】従来技術に係る剰余演算装置の構成を示す図。
【図3】従来技術に係るモンゴメリ乗算の繰返し処理を示す図。
【図4】従来技術に係るモンゴメリ乗算の繰返し処理を変形した仮想的な処理を示す図。
【図5】本発明の実施形態に係るモンゴメリ乗算の繰返し処理を示す図。
【図6】従来技術に係るべき乗剰余演算の処理フローチャート。
【図7】本発明の実施形態に係るべき乗剰余演算の処理フローチャート。
【図8】本発明の実施形態に係るモンゴメリ乗算の繰返し処理の変形例を示す図。
【符号の説明】
1010, 1020, , 10u0 … 積和ユニット
1011, 1021, , 10u1 … 積和回路[1]
1012, 1022, , 10u2 … 積和回路[2]
1101 … 補正項計算ユニット[1]
1102 … 補正項計算ユニット[2]
1210, 1220, , 12u0 … RAM(ランダムアクセスメモリ)
1310, 1320, , 13u0 … ROM(リードオンリーメモリ)
201〜20u … 積和回路
210 … 補正項計算ユニット
221〜22u … RAM(ランダムアクセスメモリ)
231〜23u … ROM(リードオンリーメモリ)
Claims (3)
- 整数を基底Aおよび基底Bの剰余演算系で表現し、該基底Aに基づいて求められた値を該基底Bに基づいて表される値へ基底変換を行う第1基底変換処理と、該基底Bに基づいて求められた値を該基底Aに基づいて表される値へ基底変換を行う第2基底変換処理と、を含む1回の剰余付き乗算を繰り返すことにより、演算結果を得るべき乗剰余演算方法であって、
k回目の第1基底変換処理と(k+1)回目の第1基底変換処理とを並列実行するよう制御する第1ステップと、
(k+1)回目の第2基底変換処理と(k+2)回目の第2基底変換処理とを並列実行するよう制御する第2ステップと、を繰り返し実行してべき乗剰余演算を行うことを特徴とするべき乗剰余演算方法。 - べき乗剰余演算をモンゴメリ乗算の繰り返し処理で実装する場合のループ処理内の、最初のモンゴメリ乗算に入力される第3の中間変数の係数が各ループ処理で等しくなるように、該ループ処理内の最後のモンゴメリ乗算において中間変数と掛け合わせる定数の係数を設定することを特徴とする請求項1記載のべき乗剰余演算方法。
- 第1の基底で表現された剰余演算系の第1中間変数を基底変換し、第1の基底と異なる第2の基底に基づく剰余演算系の中間変数を得る第1基底変換処理と、
該第1の基底で表現された剰余演算系の、第1中間変数とは異なる第2中間変数を基底変換し、該第2の基底に基づく剰余演算系の中間変数を得る第2基底変換処理とを備えたモンゴメリ乗算を、基底変換を処理可能な第1の積和演算手段と第2の積和演算手段とを備えた剰余演算装置を利用して、演算処理させる剰余演算方法であって、
第1の基底または第2の基底のうちの何れか一方の基底によって表現される値を入力する
ステップと、
k回目の第1基底変換処理と(k―1)回目の第2基底変換処理とを並列実行するよう制御するステップと、
前記第1の基底または前記第2の基底のうちの他方の基底によって表現される値を出力するステップとを備えたことを特徴とする剰余演算方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001011300A JP3540280B2 (ja) | 2001-01-19 | 2001-01-19 | べき乗剰余演算方法、および、剰余演算方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001011300A JP3540280B2 (ja) | 2001-01-19 | 2001-01-19 | べき乗剰余演算方法、および、剰余演算方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2002215386A JP2002215386A (ja) | 2002-08-02 |
JP3540280B2 true JP3540280B2 (ja) | 2004-07-07 |
Family
ID=18878449
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2001011300A Expired - Fee Related JP3540280B2 (ja) | 2001-01-19 | 2001-01-19 | べき乗剰余演算方法、および、剰余演算方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3540280B2 (ja) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2007080652A1 (ja) * | 2006-01-13 | 2007-07-19 | Fujitsu Limited | モンゴメリ法用乗算剰余計算装置 |
WO2020194594A1 (ja) | 2019-03-27 | 2020-10-01 | Tdk株式会社 | ニューラルネットワーク演算処理装置及びニューラルネットワーク演算処理方法 |
-
2001
- 2001-01-19 JP JP2001011300A patent/JP3540280B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2002215386A (ja) | 2002-08-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Okada et al. | Implementation of Elliptic Curve Cryptographic Coprocessor over GF (2 m) on an FPGA | |
US6049815A (en) | Method and apparatus for finite field multiplication | |
JP3939658B2 (ja) | モジュラー乗算を行うための装置、および、モジュラー乗算を行うための算術演算装置 | |
JP5116770B2 (ja) | フォールディングを用いるモジュール削減 | |
US8793300B2 (en) | Montgomery multiplication circuit | |
US8959134B2 (en) | Montgomery multiplication method | |
JP2004534266A (ja) | ハードウェアにおいて算術演算を効率的に行う方法および装置 | |
WO2015164996A1 (zh) | 椭圆域曲线运算方法和椭圆域曲线运算器 | |
CN113783702A (zh) | 一种椭圆曲线数字签名与验签的硬件实现方法和系统 | |
US6598061B1 (en) | System and method for performing modular multiplication | |
CN111092718A (zh) | 加密方法、装置及电子设备 | |
KR102496446B1 (ko) | 모듈러 연산을 위한 워드 병렬 연산 방법 | |
JP2004258141A (ja) | モンゴメリ乗算剰余の多倍長演算のための演算装置 | |
JP3540280B2 (ja) | べき乗剰余演算方法、および、剰余演算方法 | |
JP2011512556A (ja) | 楕円曲線上の多数の点を計算する装置及び方法 | |
JP3660075B2 (ja) | 除算装置 | |
JP3823107B2 (ja) | 有限体での基底変換方法及び基底変換装置 | |
JP4223819B2 (ja) | べき乗剰余演算装置及びそのプログラム | |
JP4850884B2 (ja) | べき乗剰余演算器 | |
KR100506470B1 (ko) | 평방근의 역수 계산 방법, 계산 회로, 및 기록매체 | |
US6275837B1 (en) | Method for the implementation of an elementary modular operation according to the Montgomery method | |
JP4341889B2 (ja) | 楕円積和演算計算方法、楕円積和演算計算装置、プログラム及び記録媒体 | |
KR100386979B1 (ko) | 갈로아체상에서 비트 직렬 승산기의 병렬화 방법 및 이를이용한 직병렬 승산기 | |
JP2007503036A (ja) | モジュラ乗算を行うための方法、および2nビットの数を使用してユークリッド乗算を行うための方法 | |
JP3626315B2 (ja) | 剰余算装置、情報処理装置及び剰余算方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20040113 |
|
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: 20040323 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20040324 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20080402 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090402 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100402 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100402 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110402 Year of fee payment: 7 |
|
LAPS | Cancellation because of no payment of annual fees |