JP5000399B2 - 楕円曲線演算装置および楕円曲線演算方法 - Google Patents

楕円曲線演算装置および楕円曲線演算方法 Download PDF

Info

Publication number
JP5000399B2
JP5000399B2 JP2007170846A JP2007170846A JP5000399B2 JP 5000399 B2 JP5000399 B2 JP 5000399B2 JP 2007170846 A JP2007170846 A JP 2007170846A JP 2007170846 A JP2007170846 A JP 2007170846A JP 5000399 B2 JP5000399 B2 JP 5000399B2
Authority
JP
Japan
Prior art keywords
register
value stored
calculation
remainder
modulus
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
Application number
JP2007170846A
Other languages
English (en)
Other versions
JP2009008930A (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.)
Renesas Electronics Corp
Original Assignee
Renesas Electronics 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 Renesas Electronics Corp filed Critical Renesas Electronics Corp
Priority to JP2007170846A priority Critical patent/JP5000399B2/ja
Publication of JP2009008930A publication Critical patent/JP2009008930A/ja
Application granted granted Critical
Publication of JP5000399B2 publication Critical patent/JP5000399B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Description

本発明は、楕円曲線上の点の演算を行う楕円曲線演算装置および楕円曲線演算方法に関するものである。
楕円曲線暗号は、楕円曲線上の離散対数問題の困難性に基づいており、従来、公開鍵暗号方式の一つとして注目されている。ECDSA(Elliptic Curve Digital Signature Algorithm)などの楕円曲線暗号は、ディジタル署名生成や、署名検証において、楕円曲線上の点の演算を行う。楕円曲線上の点の演算の中でも、点の加算(以下、点加算という。)と点の2倍算(以下、点2倍算という。)の処理速度は、楕円曲線暗号における署名生成等の処理速度に強く影響するため、点加算と点2倍算の処理の高速化は必須である。
楕円曲線上の点加算と点2倍算は、整数の乗算、剰余算(mod p)、および加減算で構成される。従来の点加算と点2倍算は、例えば、非特許文献1に記載のアルゴリズムに従って計算される。非特許文献1の点加算では、剰余算の演算結果を直後に実行される乗算に使用している。同様に、点2倍算でも、剰余算の演算結果を直後に実行される乗算に使用している。
IEEE p1363/D13 Standard Specification for Public Key Cryptography, Annex A, 1999年11月12日,PP.130-133
しかしながら、上記従来の点加算と点2倍算は、剰余算の演算結果を直後に実行される乗算に使用していたため、剰余算と乗算とを並列に処理し、演算を高速化することができなかった。
本発明は、上記に鑑みてなされたものであって、楕円曲線暗号における演算の高速化が可能な楕円曲線演算装置および楕円曲線演算方法を得ることを目的とする。
上述した課題を解決し、目的を達成するために、本発明にかかる楕円曲線演算装置は、楕円曲線上の点の演算を行う楕円曲線演算装置であって、乗算手段と、剰余算手段と、加算または減算を行う加減算手段と、少なくとも第1〜第5のレジスタを含む複数個のレジスタと、前記乗算手段、前記剰余算手段、および前記加減算手段の制御を行う演算制御手段と、を備え、前記剰余算手段を用いて、前記第1のレジスタに格納されている値の剰余を計算し、その演算結果を前記第2のレジスタに格納する剰余算処理と、前記乗算手段を用いて、前記第2のレジスタとは異なる前記第3のレジスタに格納されている値と、前記第2のレジスタとは異なる前記第4のレジスタに格納されている値との乗算、または前記第2のレジスタとは異なる前記第3のレジスタに格納されている値の自乗を計算し、その演算結果を前記第5のレジスタに格納する乗算処理とを、前記演算制御手段の制御により並列に実行する処理を含むようにして、楕円曲線上の点の演算を行うことを特徴とする。
本発明によれば、剰余算の演算結果を直後に実行される乗算への入力として使用しないように演算手順を構成することにより、剰余算手段を用いた剰余算処理と、乗算手段を用いた乗算処理とを並列に実行することができるようにしたので、楕円曲線暗号における点演算の高速化が実現される、という効果を奏する。
以下に、本発明にかかる楕円曲線演算装置および楕円曲線演算方法の実施の形態を図面に基づいて詳細に説明する。なお、この実施の形態によりこの発明が限定されるものではない。
実施の形態.
以下では、標数pを3より大きい奇素数とし、有限体Fp上の楕円曲線E:y2=x3+ax+b(mod p)に対して、この楕円曲線E上の点加算と点2倍算について説明する。但し、a、b、x、yはFpの元であり、4a+27b≠0を満たす。また、楕円曲線E上の点をヤコビアン(Jacobian)座標系で表現する。ヤコビアン座標では、楕円曲線上の点PはP(X,Y,Z)のような座標形式で表される。なお、暗号鍵長は、例えば160ビットの場合で説明する。
図1は、本実施の形態にかかる楕円曲線演算装置の点加算の演算手順(すなわち、点加算アルゴリズム)を示す図であり、図2は、本実施の形態にかかる楕円曲線演算装置の点2倍算の演算手順(すなわち、点2倍算アルゴリズム)を示す図である。また、図3は、本実施の形態にかかる楕円曲線演算装置の構成を示す図であり、図1と図2に記述した演算手順により点演算を実行するための装置構成を示している。
図1では、楕円曲線E上の点P0と点P1とを入力とし、この2点を楕円曲線E上で加算した点P2=P0+P1を出力する。これらの点は、それぞれ、ヤコビアン座標:P0(X0,Y0,Z0)、P1(X1,Y1,Z1)、P2(X2,Y2,Z2)で表現されている。
図2では、楕円曲線E上の点P1を入力とし、この点を楕円曲線E上で2倍した点P2=2P1を出力する。これらの点は、それぞれ、ヤコビアン座標:P1(X1,Y1,Z1)、P2(X2,Y2,Z2)で表現されている。また、楕円曲線Eのパラメータaは−3とする。
図3に示すように、本実施の形態にかかる楕円曲線演算装置は、演算部1と、記憶部2と、を備え、演算部1は、乗算手段3と、剰余算手段4と、加減算手段5と、演算制御手段6と、レジスタM、T1〜T8と、を備えている。
演算部1は、点加算と点2倍算とを含む楕円曲線上の演算処理を行う。記憶部2は、演算部1に接続されており、後述する点加算および点2倍算のプログラム等が記憶される他、入出力データ等の各種のデータが記憶される。乗算手段2は、2つの整数の乗算を行う。剰余算手段4は、法pによる剰余算を行う。また、加減算手段5は、法pによる加算と減算を行う。また、乗算手段2、剰余算手段3、加減算手段4は、同時に動作することができる。演算制御手段6は、乗算手段3と、剰余算手段4と、加減算手段5とに接続されており、並列処理の制御を含むこれらの演算手段の制御を行う。
レジスタM、T1〜T8は、乗算手段3、剰余算手段4、および加減算手段5に接続されている。演算部1は、乗算手段3、剰余算手段4、および加減算手段5を用いて、整数の乗算、法pによる剰余算、および法pによる加減算を行うが、その際、データをレジスタMおよびレジスタT1〜T8に格納する。レジスタT1〜T8の構成ビット数は、例えば160ビットであり、レジスタMの構成ビット数は、例えば320ビットである。
なお、図示はしていないが、本実施の形態にかかる楕円曲線演算装置は、入力部と、出力部と、を備えている。例えば、点加算の入力データである点P0および点P1の座標値は、入力部を介して入力され、記憶部2に格納された後に、演算処理の際にレジスタに格納、設定される。また、点加算の演算結果である点P2の座標値は、レジスタから記憶部2に格納された後に、出力部を介して出力される。
本実施の形態の楕円曲線演算装置は、例えば、メモリ、プロセッサ等を備えたコンピュータにより構成することができる。演算部1は、例えば、複数個のCPUと複数個のレジスタとを有するプロセッサにより実現され、乗算手段3、剰余算手段4、加減算手段5、および演算制御手段6は、それぞれCPUにより実現される。記憶部2は、例えばメモリにより実現される。また、コンピュータを、本実施の形態の楕円曲線演算装置として機能させるためのプログラム(点加算および点2倍算のプログラム等)を記憶部2に記憶させ、実行させることにより、点加算および点2倍算等の演算処理を実行させることが可能となる。
次に、本実施の形態にかかる楕円曲線演算装置の動作、すなわち楕円曲線演算方法について、図1〜図3を参照して説明する。まず、図1と図3を参照して、点加算アルゴリズムについて説明し、次に、図2と図3を参照して、点2倍算アルゴリズムについて説明する。
図1に示すように、まず、楕円曲線演算装置に、点P0のヤコビアン座標と、点P1のヤコビアン座標とが入力され、X0はレジスタT1に(T1 ← X0)、Y0はレジスタT2に(T2 ← Y0)、Z0はレジスタT3に(T3 ← Z0)、X1はレジスタT4に(T4 ← X1)、Y1はレジスタT5に(T5 ← Y1)、Z1はレジスタT6に(T6 ← Z1)に格納され、各レジスタの初期設定がされる。なお、左向きの矢印は、右辺の値(または演算結果)を左辺のレジスタに格納することを意味する。
次に、図1における番号1〜21の付された演算手順(以下では、番号の付された各処理をステップという。)に従って点加算を実行する。なお、//の右側の記載はコメントを意味し、剰余算または加減算の演算結果が格納されたレジスタの値を、具体的に示している。
ステップ1では、演算制御手段6の制御により、乗算手段3を用いて、レジスタT6に格納されている値を自乗し、演算結果をレジスタMに格納する(1.M ← T6×T6)。
ステップ2では、演算制御手段6の制御により、乗算手段3による乗算(M ← T3×T3)と、剰余算手段4による剰余算(T7 ← M mod p)とを、同時に実行する。すなわち、乗算手段3を用いて、レジスタT3に格納されている値を自乗し、演算結果をレジスタMに格納する処理と、剰余算手段4を用いて、レジスタMに格納されている値の法pによる剰余を計算し、演算結果をレジスタT7に格納する処理とを、同時に実行する。ここで、剰余算で用いるレジスタMの値は、ステップ1で計算されたレジスタMの値であることに注意する。
つまり、ステップ2の開始と同時に、剰余算手段4はレジスタMの値を用いて計算を開始すると共に、乗算手段3はレジスタT3の値を用いて計算を開始し、乗算手段3は当該計算後にレジスタMに演算結果を格納する。
ステップ2の剰余算M mod pにおけるMは、ステップ1で計算したT6×T6であるから、剰余算はT6×T6 mod pを計算していることになる。また、//では、T7であるT6×T6の値が、Z1であることを示している(但し、mod pを除く。以下、他のステップにおいても同様)。一方、ステップ2の乗算は、T3×T3を計算しており、T6×T6 mod pの結果とは無関係な計算式である。したがって、乗算と剰余算とを同時に処理できることになる。このように、ステップ2では、乗算手段3を用いた乗算処理と、剰余算手段4を用いた剰余算処理とを、並列に処理する。
ステップ3では、演算制御手段6の制御により、乗算手段3による乗算(M ← T1×T7)と、剰余算手段4による剰余算(T8← M mod p)とを、同時に実行する。すなわち、乗算手段3を用いて、レジスタT1に格納されている値とレジスタT7に格納されている値との乗算を行い、演算結果をレジスタMに格納する処理と、剰余算手段4を用いて、レジスタMに格納されている値の法pによる剰余を計算し、演算結果をレジスタT8に格納する処理とを、同時に実行する。ここで、剰余算で用いるレジスタMの値は、ステップ2で計算されたレジスタMの値であることに注意する。したがって、乗算と剰余算とを同時に処理できることになる。このように、ステップ3では、乗算手段3を用いた乗算処理と、剰余算手段4を用いた剰余算処理とを、並列に処理する。
ステップ4(4.M ← T4×T8 T1 ← M mod p)、ステップ5(5.M ← T3×T8 T4 ← M mod p)、ステップ6(6.M ← T6×T7 T8 ← M mod p)、ステップ7(7.M ← T5×T8 T8 ← M mod p)、ステップ8(8.M ← T2×T8 T5 ← M mod p)、ステップ9(9.M ← T3×T6 T2 ← M mod p)では、ステップ2と同様に、乗算手段3と、剰余算手段4とを用いて並列処理をする。
ステップ10では、演算制御手段6の制御により、剰余算手段4による剰余算(T7 ← M mod p)と、加減算手段5による法pの減算(T3 ← T1−T4 mod p)とを、同時に実行する。すなわち、剰余算手段4を用いて、レジスタMに格納されている値の法pによる剰余算を計算し、演算結果をレジスタT7に格納する処理と、加減算手段5を用いて、レジスタT1に格納されている値からレジスタT4に格納された値を減算し、さらに法pによる剰余を計算して、演算結果をレジスタT3に格納する処理とを、同時に実行する。このように、ステップ10では、剰余算手段4を用いた剰余算処理と、加減算手段5を用いた減算処理とを、並列に処理する。
ステップ11では、演算制御手段6の制御により、乗算手段3による乗算(M ← T3×T7)と、加減算手段4による法pの減算(T7 ←T2−T5 mod p)とを、同時に実行する。すなわち、乗算手段3を用いて、レジスタT3に格納されている値とレジスタT7に格納されている値との乗算を行い、演算結果をレジスタMに格納する処理と、加減算手段5を用いて、レジスタT2に格納されている値からレジスタT5に格納された値を減算し、さらに法pによる剰余を計算して、演算結果をレジスタT7に格納する処理とを、同時に実行する。したがって、乗算と加減算とを同時に処理できることになる。このように、ステップ11では、乗算手段3を用いた乗算処理と、加減算手段5を用いた減算処理とを、並列に処理する。
ステップ12(12.M ← T3×T3 T6 ← M mod p)では、ステップ2と同様に、乗算手段3と、剰余算手段4とを用いて並列処理をする。
ステップ13では、演算制御手段6の制御により、加減算手段5による法pの加算(T1 ← T1+T4 mod p)と、剰余算手段4による剰余算(T4 ← M mod p)とを、同時に実行する。すなわち、加減算手段5を用いて、レジスタT1に格納されている値とレジスタT4に格納されている値とを加算し、さらに法pによる剰余を計算して、演算結果をレジスタT1に格納する処理と、剰余算手段4を用いて、レジスタMに格納されている値の法pによる剰余算を計算し、演算結果をレジスタT4に格納する処理と、を、同時に実行する。このように、ステップ13では、加減算手段5を用いた加算処理と、剰余算手段4を用いた剰余算処理とを、並列に処理する。
ステップ14では、演算制御手段6の制御により、乗算手段3による乗算(M ← T7×T7)と、加減算手段4による法pの加算(T2 ←T2+T5 mod p)とを、同時に実行する。このように、ステップ11では、乗算手段3を用いた乗算処理と、加減算手段5を用いた加算処理とを、並列に処理する。
ステップ15(15.M ← T1×T4 T5 ← M mod p)、ステップ16(16.M ← T3×T4 T1 ← M mod p)では、ステップ2と同様に、乗算手段3と、剰余算手段4とを用いて並列処理をする。
ステップ17では、演算制御手段6の制御により、剰余算手段4による剰余算(T3 ← M mod p)と、加減算手段5による法pの減算(T4 ← T5−T1 mod p)とを、同時に実行し、加減算手段5による法pの減算(T4 ← T5−T1 mod p)処理後に、さらに、加減算手段5による法pの加算(T5 ← T4+T4 mod p)を実行する。すなわち、T4+T4 mod pにおけるT4には、T5−T1 mod pの演算結果を代入する。このように、ステップ17では、剰余算手段4を用いた剰余算処理と、加減算手段5を用いた減算処理とを、並列に処理する。
ステップ18(18.M ← T2×T3 T1 ←T4−T5 mod p)では、ステップ11と同様に、乗算手段3と、加減算手段5とを用いて並列処理をする。ステップ19(19.M ← T1×T7 T3 ← M mod p)では、ステップ2と同様に、乗算手段3と、剰余算手段4とを用いて並列処理をする。
ステップ20では、演算制御手段6の制御により、剰余算手段4による剰余算(T1 ← M mod p)と、加減算手段5による法pの減算(T3 ← T1−T3 mod p)と、剰余算手段による剰余算(T5 ← T3/2 mod p)とを、この順に、順次実行する。すなわち、ステップ20では、これらの処理を同時に行わない。
最後に、ステップ21では、レジスタT1、T2、T3に格納された値を、それぞれ、X2、Y2、Z2として出力する(21.(X2,Y2,Z2)=(T1,T2,T3))。以上により、点P2=P0+P1のヤコビアン座標が出力される。
次に、点2倍算アルゴリズムについて説明する。図2に示すように、まず、楕円曲線演算装置に、点P1のヤコビアン座標が入力され、X1はレジスタT1に(T1 ← X1)、Y1はレジスタT2に(T2 ← Y1)、Z1はレジスタT3に(T3 ← Z1)にそれぞれ格納され、レジスタの初期設定がされる。
図2では、番号1〜12の付された演算手順に従って点2倍算処理を実行する。また、表示規則等は、図1と同様である。
ステップ1では、演算制御手段6の制御により、乗算手段3を用いて、レジスタT3に格納されている値を自乗し、演算結果をレジスタMに格納する(1.M ← T3×T3)。
ステップ2では、演算制御手段6の制御により、乗算手段3による乗算(M ← T2×T3)と、剰余算手段4による剰余算(T4 ← M mod p)とを、同時に実行する。すなわち、乗算手段3を用いて、レジスタT2に格納されている値とレジスタT3に格納されている値との乗算を行い、演算結果をレジスタMに格納する処理と、剰余算手段4を用いて、レジスタMに格納されている値の法pによる剰余を計算し、演算結果をレジスタT4に格納する処理とを、同時に実行する。ここで、剰余算で用いるレジスタMの値は、ステップ1で計算されたレジスタMの値であることに注意する。つまり、ステップ2の開始と同時に、剰余算手段4はレジスタMの値を用いて計算を開始すると共に、乗算手段3はレジスタT2の値とレジスタT3の値を用いて計算を開始し、乗算手段3は当該計算後にレジスタMに演算結果を格納する。このように、ステップ2では、乗算手段3を用いた乗算処理と、剰余算手段4を用いた剰余算処理とを、並列に処理する。
ステップ3では、演算制御手段6の制御により、加減算手段4による法pの減算(T5 ←T1−T4 mod p)を実行する。
ステップ4では、演算制御手段6の制御により、乗算手段3による乗算(M ← T2×T2)と、剰余算手段4による剰余算(T3 ← M mod p)とを、同時に実行する。
そして、剰余算手段4による剰余算(T3 ← M mod p)の処理後に、さらに、加減算手段5による法pの加算(T3 ← T3+T3 mod p)と、加減算手段5による法pの加算(T4 ← T1+T4 mod p)とを、順次実行する。すなわち、乗算手段3による乗算(M ← T2×T2)と、剰余算手段4による剰余算(T3 ← M mod p)とを並列処理し、剰余算処理の演算結果に基づいて、加減算手段5による法pの加算(T3 ← T3+T3 mod p)を処理し、続いて、加減算手段5による法pの加算(T4 ← T1+T4 mod p)を処理する。
ステップ5(5.M ← T4×T5 T2 ← M mod p)、ステップ6(6.M ← T2×T2 T5 ← M mod p)では、ステップ2と同様に、乗算手段3と、剰余算手段4とを用いて並列処理する。
ステップ7では、演算制御手段6の制御により、乗算手段3による乗算(M ← T1×T2)と、剰余算手段4による剰余算(T6 ← M mod p)とを、同時に実行する。そして、剰余算手段4による剰余算(T6 ← M mod p)の処理後に、さらに、加減算手段5による法pの加算(T4 ← T5+T5 mod p)と、加減算手段5による法pの加算(T4 ← T4+T5 mod p)とを、順次実行する。すなわち、乗算手段3による乗算(M ← T1×T2)と、剰余算手段4による剰余算(T6 ← M mod p)とを並列処理し、剰余算処理の演算結果に基づいて、加減算手段5による法pの加算(T4 ← T5+T5 mod p)を処理し、続いて、加減算手段5による法pの加算(T4 ← T4+T5 mod p)を処理する。
ステップ8では、演算制御手段6の制御により、乗算手段3による乗算(M ← T4×T4)と、剰余算手段4による剰余算(T2 ← M mod p)とを、同時に実行する。そして、剰余算手段4による剰余算(T2 ← M mod p)の処理後に、さらに、加減算手段5による法pの加算(T2 ← T2+T2 mod p)と、加減算手段5による法pの加算(T2 ← T2+T2 mod p)とを、順次実行する。すなわち、乗算手段3による乗算(M ← T4×T4)と、剰余算手段4による剰余算(T2 ← M mod p)とを並列処理し、剰余算処理の演算結果に基づいて、加減算手段5による法pの加算(T2 ← T2+T2 mod p)を処理し、続いて、加減算手段5による法pの加算(T2 ← T2+T2 mod p)を処理する。
ステップ9では、演算制御手段6の制御により、剰余算手段4による剰余算(T5 ← M mod p)と、加減算手段5による法pの加算(T1 ← T2+T2 mod p)とを、同時に実行する。そして、加減算手段5による法pの加算(T1 ← T2+T2 mod p)の処理後に、さらに、加減算手段5による法pの減算(T1 ← T2−T1 mod p)と、加減算手段5による法pの減算(T7 ← T2−T1 mod p)とを、順次実行する。すなわち、剰余算手段4による剰余算(T5 ← M mod p)と、加減算手段5による法pの加算(T1 ← T2+T2 mod p)とを、並列処理し、加算処理の演算結果に基づいて、加減算手段5による法pの減算(T1 ← T2−T1 mod p)を処理し、続いて、加減算手段5による法pの減算(T7 ← T2−T1 mod p)を処理する。
ステップ10では、演算制御手段6の制御により、乗算手段3を用いて、乗算(M ← T4×T7)を実行する。
ステップ11では、演算制御手段6の制御により、剰余算手段4による剰余算(T2 ← M mod p)と、加減算手段5による法pの加算(T6 ← T6+T6 mod p)とを、同時に実行する。そして、加減算手段5による法pの加算(T6 ← T6+T6 mod p)の処理後に、さらに、加減算手段5による法pの加算(T6 ← T6+T6 mod p)と、加減算手段5による法pの加算(T6 ← T6+T6 mod p)と、加減算手段5による法pの減算(T2 ← T2−T6 mod p)とを、順次実行する。すなわち、剰余算手段4による剰余算(T2 ← M mod p)と、加減算手段5による法pの加算(T6 ← T6+T6 mod p)とを、並列処理し、加算処理の演算結果に基づいて、加減算手段5による法pの加算(T6 ← T6+T6 mod p)と、加減算手段5による法pの加算(T6 ← T6+T6 mod p)と、加減算手段5による法pの減算(T2 ← T2−T6 mod p)とを順次処理する。
最後に、ステップ12では、レジスタT1、T2、T3に格納された値を、それぞれ、X2、Y2、Z2として出力する(21.(X2,Y2,Z2)=(T1,T2,T3))。以上により、点P2=2P1のヤコビアン座標が出力される。
ここで、本実施の形態の点加算および点2倍算の演算手順と、従来の点加算および点2倍算の演算手順とを比較し、本実施の形態では、剰余算の演算結果を直後に実行される乗算に使用しないように演算手順を構成することで、高速化を図っていることを説明する。
図4−1は、非特許文献1に記載の点加算の演算手順を示す図であり、図4−2は、図4−1に続く演算手順を示す図である。また、図5は、非特許文献1に記載の点2倍算の演算手順を示す図である。
図4−1および図4−2に示す点加算は、図1に示す点加算と同じ内容であるが、演算手順が異なる。また、図4−1および図4−2における座標やレジスタの表記については、本実施の形態と同様である。図4−1において、例えば、ステップ10(10.T7 ← M mod p)とステップ11(11.M ←T4×T7)のように、剰余算の演算結果(レジスタT7に格納されている値)を、直後に実行される乗算(T4×T7)に使用している。したがって、従来の楕円曲線演算装置においては、乗算と剰余算とが独立な値を用いて演算していないため、乗算と剰余算とを並列に処理して点加算を高速化することができなかった。
一方、上述したように、図1の例えば、ステップ2(2.M ← T3×T3 T7 ← M mod p)のように、本実施の形態では、乗算と剰余算とが独立な値を用いて演算しているため、乗算と剰余算とを並列に処理して点加算を高速化することが可能となる。別の見方をすれば、本実施の形態では、剰余算T7 ← M mod p、乗算M ← T3×T3の順に演算手順を構成し、剰余算の演算結果T7を直後の乗算(T3×T3)に使用しないようにしているので、並列処理が可能になったともいえる。
点2倍算についても同様であり、図5において、例えば、ステップ13(13.T2 ← M mod p)とステップ14(14.M ←T1×T2)のように、剰余算の演算結果(レジスタT2に格納されている値)を、直後に実行される乗算(T1×T2)に使用している。したがって、従来の楕円曲線演算装置においては、乗算と剰余算とが独立な値を用いて演算していないため、乗算と剰余算とを並列に処理して点2倍算を高速化することができなかった。
一方、上述したように、図2の例えば、ステップ2(2.M ← T2×T3 T4 ← M mod p)のように、本実施の形態では、乗算と剰余算とが独立な値を用いて演算しているため、乗算と剰余算とを並列に処理して点2倍算を高速化することが可能となる。
乗算手段3による演算処理は、剰余算手段4または加減算手段5による演算処理に比べて処理時間がかかる。そのため、本実施の形態では、乗算処理を行っているときに、剰余算処理または加減算処理を行うように演算手順を構成することで、楕円曲線上の点の演算を高速に実行するものである。
なお、本実施の形態では、ヤコビアン座標を用いた場合の点加算および点2倍算について説明したが、演算手順を同様に構成できれば、他の座標表示を用いた場合にも適用することができる。
本実施の形態によれば、楕円曲線上の点加算および点2倍算において、並列処理に適した演算手順を構成することにより、乗算手段3を用いた乗算処理と、剰余算手段4を用いた剰余算処理とを並列に処理している。さらに、剰余算手段4を用いた剰余算処理と、加減算手段5を用いた加減算処理とを並列に処理している。これにより、従来、剰余算の演算結果を直後に実行される乗算に使用していたため、乗算手段と剰余算手段とを並列に動作させて高速化できなかったという問題点を解消し、点加算および点2倍算を高速に行えるという効果を奏する。また、本実施の形態を利用することにより、楕円曲線暗号化やディジタル署名を高速に実行することができる。
以上のように、本発明にかかる楕円曲線演算装置は、楕円曲線暗号を利用したディジタル署名等に有用である。
実施の形態にかかる楕円曲線演算装置の点加算の演算手順(すなわち、点加算アルゴリズム)を示す図である。 実施の形態にかかる楕円曲線演算装置の点2倍算の演算手順(すなわち、点2倍算アルゴリズム)を示す図である。 実施の形態にかかる楕円曲線演算装置の構成を示す図である。 非特許文献1に記載の点加算の演算手順を示す図である。 図4−1に続く演算手順を示す図である。 非特許文献1に記載の点2倍算の演算手順を示す図である。
符号の説明
1 演算部
2 記憶部
3 乗算手段
4 剰余算手段
5 加減算手段
6 演算制御手段
M,T1〜T8 レジスタ

Claims (6)

  1. 楕円曲線上の点の演算を行う楕円曲線演算装置であって、
    乗算手段と、
    剰余算手段と、
    加算または減算を行う加減算手段と、
    少なくとも第1〜第5のレジスタを含む複数個のレジスタと、
    前記乗算手段、前記剰余算手段、および前記加減算手段の制御を行う演算制御手段と、
    を備え、
    前記剰余算手段を用いて、前記第1のレジスタに格納されている値の剰余を計算し、その演算結果を前記第2のレジスタに格納する剰余算処理と、
    前記乗算手段を用いて、前記第2のレジスタとは異なる前記第3のレジスタに格納されている値と、前記第2のレジスタとは異なる前記第4のレジスタに格納されている値との乗算、または前記第2のレジスタとは異なる前記第3のレジスタに格納されている値の自乗を計算し、その演算結果を前記第5のレジスタに格納する乗算処理とを、
    前記演算制御手段の制御により並列に実行する処理を含むようにして、楕円曲線上の点の演算を行うことを特徴とする楕円曲線演算装置。
  2. 前記楕円曲線上の点の演算は、点の加算もしくは点の2倍算、または点の加算および点の2倍算であることを特徴とする請求項1に記載の楕円曲線演算装置。
  3. 標数pの有限体Fp上の楕円曲線E:y2=x3+ax+b(mod p)に対して、ヤコビアン座標で表示された楕円曲線E上の2つの点P0(X0,Y0,Z0)、P1(X1,Y1,Z1)を入力とし、楕円曲線E上で前記2つの点の加算を行い、加算後の点P2=P0+P1を出力する楕円曲線演算装置であって、
    乗算手段と、
    法pによる剰余算を行う剰余算手段と、
    法pによる加算または減算を行う加減算手段と、
    レジスタT1〜T8、およびレジスタMと、
    前記乗算手段、前記剰余算手段、および前記加減算手段の制御を行う演算制御手段と、
    を備え、
    X0をレジスタT1に格納し、Y0をレジスタT2に格納し、Z0をレジスタT3に格納し、X1をレジスタT4に格納し、Y1をレジスタT5に格納し、Z1をレジスタT6に格納した後に、下記(1)〜(21)の演算手順に従い、点P2のヤコビアン座標(X2,Y2,Z2)を出力することを特徴とする楕円曲線演算装置。
    (1)前記演算制御手段の制御により、前記乗算手段を用いて、レジスタT6に格納されている値を自乗し、その演算結果をレジスタMに格納する。
    (2)前記乗算手段を用いて、レジスタT3に格納されている値を自乗し、演算結果をレジスタMに格納する処理と、前記剰余算手段を用いて、レジスタMに格納されている値の法pによる剰余を計算し、演算結果をレジスタT7に格納する処理とを、前記演算制御手段の制御により並列に実行する。
    (3)前記乗算手段を用いて、レジスタT1に格納されている値とレジスタT7に格納されている値との乗算を行い、演算結果をレジスタMに格納する処理と、前記剰余算手段を用いて、レジスタMに格納されている値の法pによる剰余を計算し、演算結果をレジスタT8に格納する処理とを、前記演算制御手段の制御により並列に実行する。
    (4)前記乗算手段を用いて、レジスタT4に格納されている値とレジスタT8に格納されている値との乗算を行い、演算結果をレジスタMに格納する処理と、前記剰余算手段を用いて、レジスタMに格納されている値の法pによる剰余を計算し、演算結果をレジスタT1に格納する処理とを、前記演算制御手段の制御により並列に実行する。
    (5)前記乗算手段を用いて、レジスタT3に格納されている値とレジスタT8に格納されている値との乗算を行い、演算結果をレジスタMに格納する処理と、前記剰余算手段を用いて、レジスタMに格納されている値の法pによる剰余を計算し、演算結果をレジスタT4に格納する処理とを、前記演算制御手段の制御により並列に実行する。
    (6)前記乗算手段を用いて、レジスタT6に格納されている値とレジスタT7に格納されている値との乗算を行い、演算結果をレジスタMに格納する処理と、前記剰余算手段を用いて、レジスタMに格納されている値の法pによる剰余を計算し、演算結果をレジスタT8に格納する処理とを、前記演算制御手段の制御により並列に実行する。
    (7)前記乗算手段を用いて、レジスタT5に格納されている値とレジスタT8に格納されている値との乗算を行い、演算結果をレジスタMに格納する処理と、前記剰余算手段を用いて、レジスタMに格納されている値の法pによる剰余を計算し、演算結果をレジスタT8に格納する処理とを、前記演算制御手段の制御により並列に実行する。
    (8)前記乗算手段を用いて、レジスタT2に格納されている値とレジスタT8に格納されている値との乗算を行い、演算結果をレジスタMに格納する処理と、前記剰余算手段を用いて、レジスタMに格納されている値の法pによる剰余を計算し、演算結果をレジスタT5に格納する処理とを、前記演算制御手段の制御により並列に実行する。
    (9)前記乗算手段を用いて、レジスタT3に格納されている値とレジスタT6に格納されている値との乗算を行い、演算結果をレジスタMに格納する処理と、前記剰余算手段を用いて、レジスタMに格納されている値の法pによる剰余を計算し、演算結果をレジスタT2に格納する処理とを、前記演算制御手段の制御により並列に実行する。
    (10)前記剰余算手段を用いて、レジスタMに格納されている値の法pによる剰余算を計算し、演算結果をレジスタT7に格納する処理と、前記加減算手段を用いて、レジスタT1に格納されている値からレジスタT4に格納された値を減算し、さらに法pによる剰余を計算して、演算結果をレジスタT3に格納する処理とを、前記演算制御手段の制御により並列に実行する。
    (11)前記乗算手段を用いて、レジスタT3に格納されている値とレジスタT7に格納されている値との乗算を行い、演算結果をレジスタMに格納する処理と、前記加減算手段を用いて、レジスタT2に格納されている値からレジスタT5に格納された値を減算し、さらに法pによる剰余を計算して、演算結果をレジスタT7に格納する処理とを、前記演算制御手段の制御により並列に実行する。
    (12)前記乗算手段を用いて、レジスタT3に格納されている値を自乗し、演算結果をレジスタMに格納する処理と、前記剰余算手段を用いて、レジスタMに格納されている値の法pによる剰余を計算し、演算結果をレジスタT6に格納する処理とを、前記演算制御手段の制御により並列に実行する。
    (13)前記加減算手段を用いて、レジスタT1に格納されている値とレジスタT4に格納されている値とを加算し、さらに法pによる剰余を計算して、演算結果をレジスタT1に格納する処理と、前記剰余算手段を用いて、レジスタMに格納されている値の法pによる剰余算を計算し、演算結果をレジスタT4に格納する処理とを、前記演算制御手段の制御により並列に実行する。
    (14)前記乗算手段を用いて、レジスタT7に格納されている値を自乗し、演算結果をレジスタMに格納する処理と、前記加減算手段を用いて、レジスタT2に格納されている値とレジスタT5に格納されている値とを加算し、さらに法pによる剰余を計算して、演算結果をレジスタT2に格納する処理とを、前記演算制御手段の制御により並列に実行する。
    (15)前記乗算手段を用いて、レジスタT1に格納されている値とレジスタT4に格納されている値との乗算を行い、演算結果をレジスタMに格納する処理と、前記剰余算手段を用いて、レジスタMに格納されている値の法pによる剰余を計算し、演算結果をレジスタT5に格納する処理とを、前記演算制御手段の制御により並列に実行する。
    (16)前記乗算手段を用いて、レジスタT3に格納されている値とレジスタT4に格納されている値との乗算を行い、演算結果をレジスタMに格納する処理と、前記剰余算手段を用いて、レジスタMに格納されている値の法pによる剰余を計算し、演算結果をレジスタT1に格納する処理とを、前記演算制御手段の制御により並列に実行する。
    (17)前記剰余算手段を用いて、レジスタMに格納されている値の法pによる剰余を計算し、演算結果をレジスタT3に格納する処理と、前記加減算手段を用いて、レジスタT5に格納されている値からレジスタT1に格納された値を減算し、さらに法pによる剰余を計算して、演算結果をレジスタT4に格納する処理とを、前記演算制御手段の制御により並列に実行し、続いて、前記加減算手段を用いて、レジスタT4に格納されている値とレジスタT4に格納されている値とを加算し、さらに法pによる剰余を計算して、演算結果をレジスタT5に格納する。
    (18)前記乗算手段を用いて、レジスタT2に格納されている値とレジスタT3に格納されている値との乗算を行い、演算結果をレジスタMに格納する処理と、前記加減算手段を用いて、レジスタT4に格納されている値からレジスタT5に格納された値を減算し、さらに法pによる剰余を計算して、演算結果をレジスタT1に格納する処理とを、前記演算制御手段の制御により並列に実行する。
    (19)前記乗算手段を用いて、レジスタT1に格納されている値とレジスタT7に格納されている値との乗算を行い、演算結果をレジスタMに格納する処理と、前記剰余算手段を用いて、レジスタMに格納されている値の法pによる剰余を計算し、演算結果をレジスタT3に格納する処理とを、前記演算制御手段の制御により並列に実行する。
    (20)前記剰余算手段を用いて、レジスタMに格納されている値の法pによる剰余を計算し、演算結果をレジスタT1に格納する処理と、前記加減算手段を用いて、レジスタT1に格納されている値からレジスタT3に格納された値を減算し、さらに法pによる剰余を計算して、演算結果をレジスタT3に格納する処理と、レジスタT3に格納されている値の半分の法pによる剰余を計算し、演算結果をレジスタT5に格納する処理とを、順次実行する。
    (21)レジスタT1、T2、T3に格納された値を、それぞれ、X2、Y2、Z2として出力する。
  4. 標数pの有限体Fp上の楕円曲線E:y2=x3+ax+b(mod p)に対して、ヤコビアン座標で表示された楕円曲線E上の点P1(X1,Y1,Z1)を入力とし、楕円曲線E上で点P1の2倍算を行い、2倍算後の点P2=2P1を出力する楕円曲線演算装置であって、
    乗算手段と、
    法pによる剰余算を行う剰余算手段と、
    法pによる加算または減算を行う加減算手段と、
    レジスタT1〜T7、およびレジスタMと、
    前記乗算手段、前記剰余算手段、および前記加減算手段の制御を行う演算制御手段と、
    を備え、
    X1をレジスタT1に格納し、Y1をレジスタT2に格納し、Z1をレジスタT3に格納した後に、下記(1)〜(12)の演算手順に従い、点P2のヤコビアン座標(X2,Y2,Z2)を出力することを特徴とする楕円曲線演算装置。
    (1)前記演算制御手段の制御により、前記乗算手段を用いて、レジスタT3に格納されている値を自乗し、その演算結果をレジスタMに格納する。
    (2)前記乗算手段を用いて、レジスタT2に格納されている値とレジスタT3に格納されている値との乗算を行い、演算結果をレジスタMに格納する処理と、前記剰余算手段を用いて、レジスタMに格納されている値の法pによる剰余を計算し、演算結果をレジスタT4に格納する処理とを、前記演算制御手段の制御により並列に実行する。
    (3)前記加減算手段を用いて、レジスタT1に格納されている値からレジスタT4に格納された値を減算し、さらに法pによる剰余を計算して、演算結果をレジスタT5に格納する。
    (4)前記乗算手段を用いて、レジスタT2に格納されている値を自乗し、演算結果をレジスタMに格納する処理と、前記剰余算手段を用いて、レジスタMに格納されている値の法pによる剰余を計算し、演算結果をレジスタT3に格納する処理とを、前記演算制御手段の制御により並列に実行し、続いて、前記加減算手段を用いて、レジスタT3に格納されている値とレジスタT3に格納されている値とを加算し、さらに法pによる剰余を計算して、演算結果をレジスタT3に格納する処理と、前記加減算手段を用いて、レジスタT1に格納されている値とレジスタT4に格納されている値とを加算し、さらに法pによる剰余を計算して、演算結果をレジスタT4に格納する処理とを、順次実行する。
    (5)前記乗算手段を用いて、レジスタT4に格納されている値とレジスタT5に格納されている値との乗算を行い、演算結果をレジスタMに格納する処理と、前記剰余算手段を用いて、レジスタMに格納されている値の法pによる剰余を計算し、演算結果をレジスタT2に格納する処理とを、前記演算制御手段の制御により並列に実行する。
    (6)前記乗算手段を用いて、レジスタT2に格納されている値を自乗し、演算結果をレジスタMに格納する処理と、前記剰余算手段を用いて、レジスタMに格納されている値の法pによる剰余を計算し、演算結果をレジスタT5に格納する処理とを、前記演算制御手段の制御により並列に実行する。
    (7)前記乗算手段を用いて、レジスタT1に格納されている値とレジスタT2に格納されている値との乗算を行い、演算結果をレジスタMに格納する処理と、前記剰余算手段を用いて、レジスタMに格納されている値の法pによる剰余を計算し、演算結果をレジスタT6に格納する処理とを、前記演算制御手段の制御により並列に実行し、続いて、前記加減算手段を用いて、レジスタT5に格納されている値とレジスタT5に格納されている値とを加算し、さらに法pによる剰余を計算して、演算結果をレジスタT4に格納する処理と、前記加減算手段を用いて、レジスタT4に格納されている値とレジスタT5に格納されている値とを加算し、さらに法pによる剰余を計算して、演算結果をレジスタT4に格納する処理とを、順次実行する。
    (8)前記乗算手段を用いて、レジスタT4に格納されている値を自乗し、演算結果をレジスタMに格納する処理と、前記剰余算手段を用いて、レジスタMに格納されている値の法pによる剰余を計算し、演算結果をレジスタT2に格納する処理とを、前記演算制御手段の制御により並列に実行し、続いて、前記加減算手段を用いて、レジスタT2に格納されている値とレジスタT2に格納されている値とを加算し、さらに法pによる剰余を計算して、演算結果をレジスタT2に格納する処理と、前記加減算手段を用いて、レジスタT2に格納されている値とレジスタT2に格納されている値とを加算し、さらに法pによる剰余を計算して、演算結果をレジスタT2に格納する処理とを、順次実行する。
    (9)前記剰余算手段を用いて、レジスタMに格納されている値の法pによる剰余を計算し、演算結果をレジスタT5に格納する処理と、前記加減算手段を用いて、レジスタT2に格納されている値とレジスタT2に格納されている値とを加算し、さらに法pによる剰余を計算して、演算結果をレジスタT1に格納する処理とを、前記演算制御手段の制御により並列に実行し、続いて、前記加減算手段を用いて、レジスタT2に格納されている値からレジスタT1に格納された値を減算し、さらに法pによる剰余を計算して、演算結果をレジスタT1に格納する処置と、前記加減算手段を用いて、レジスタT2に格納されている値からレジスタT1に格納された値を減算し、さらに法pによる剰余を計算して、演算結果をT7に格納する処置とを、順次実行する。
    (10)前記乗算手段を用いて、レジスタT4に格納されている値とT7に格納されている値との乗算を行い、演算結果をレジスタMに格納する。
    (11)前記剰余算手段を用いて、レジスタMに格納されている値の法pによる剰余を計算し、演算結果をレジスタT2に格納する処理と、前記加減算手段を用いて、レジスタT6に格納されている値とレジスタT6に格納されている値とを加算し、さらに法pによる剰余を計算して、演算結果をレジスタT6に格納する処理とを、前記演算制御手段の制御により並列に実行し、続いて、レジスタT6に格納されている値とレジスタT6に格納されている値とを加算し、さらに法pによる剰余を計算して、演算結果をレジスタT6に格納する処理と、レジスタT6に格納されている値とレジスタT6に格納されている値とを加算し、さらに法pによる剰余を計算して、演算結果をレジスタT6に格納する処理と、前記加減算手段を用いて、レジスタT2に格納されている値からレジスタT6に格納された値を減算し、さらに法pによる剰余を計算して、演算結果をレジスタ2に格納する処置とを、順次実行する。
    (12)レジスタT1、T2、T3に格納された値を、それぞれ、X2、Y2、Z2として出力する。
  5. 乗算手段と、剰余算手段と、加算または減算を行う加減算手段と、少なくとも第1〜第5のレジスタを含む複数個のレジスタと、前記乗算手段、前記剰余算手段、および前記加減算手段の制御を行う演算制御手段と、を備えた楕円曲線演算装置により楕円曲線上の点の演算を行う楕円曲線演算方法において、
    前記剰余算手段を用いて、前記第1のレジスタに格納されている値の剰余を計算し、その演算結果を前記第2のレジスタに格納する剰余算処理と、
    前記乗算手段を用いて、前記第2のレジスタとは異なる前記第3のレジスタに格納されている値と、前記第2のレジスタとは異なる前記第4のレジスタに格納されている値との乗算、または前記第2のレジスタとは異なる前記第3のレジスタに格納されている値の自乗を計算し、その演算結果を前記第5のレジスタに格納する乗算処理とを、
    前記演算制御手段の制御により並列に実行するステップを含むことを特徴とする楕円曲線演算方法。
  6. 前記楕円曲線上の点の演算は、点の加算もしくは点の2倍算、または点の加算および点の2倍算であることを特徴とする請求項5に記載の楕円曲線演算方法。
JP2007170846A 2007-06-28 2007-06-28 楕円曲線演算装置および楕円曲線演算方法 Expired - Fee Related JP5000399B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2007170846A JP5000399B2 (ja) 2007-06-28 2007-06-28 楕円曲線演算装置および楕円曲線演算方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2007170846A JP5000399B2 (ja) 2007-06-28 2007-06-28 楕円曲線演算装置および楕円曲線演算方法

Publications (2)

Publication Number Publication Date
JP2009008930A JP2009008930A (ja) 2009-01-15
JP5000399B2 true JP5000399B2 (ja) 2012-08-15

Family

ID=40324058

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007170846A Expired - Fee Related JP5000399B2 (ja) 2007-06-28 2007-06-28 楕円曲線演算装置および楕円曲線演算方法

Country Status (1)

Country Link
JP (1) JP5000399B2 (ja)

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11242436A (ja) * 1998-02-25 1999-09-07 Matsushita Electric Ind Co Ltd 演算装置
JP2001202019A (ja) * 2000-01-21 2001-07-27 Nippon Telegr & Teleph Corp <Ntt> 並列楕円演算装置及びそのプログラム記録媒体
JP2001337815A (ja) * 2000-05-24 2001-12-07 Toshiba Corp 剰余演算装置及び方法
JP4067818B2 (ja) * 2001-12-10 2008-03-26 富士通株式会社 楕円曲線暗号装置、楕円曲線暗号プログラム及び楕円曲線暗号の演算方法

Also Published As

Publication number Publication date
JP2009008930A (ja) 2009-01-15

Similar Documents

Publication Publication Date Title
Faz-Hernández et al. A faster software implementation of the supersingular isogeny Diffie-Hellman key exchange protocol
US20170091148A1 (en) Method for calculating elliptic curve scalar multiplication
Karakoyunlu et al. Efficient and side-channel-aware implementations of elliptic curve cryptosystems over prime fields
JP2004501385A (ja) 楕円曲線暗号化方法
JP5553773B2 (ja) 楕円曲線上の点のスカラー倍を計算する装置及び方法
JP4351987B2 (ja) モンゴメリ変換装置、演算装置、icカード、暗号装置、復号装置及びプログラム
Choi et al. ECC coprocessor over a NIST prime field using fast partial Montgomery reduction
JP5403630B2 (ja) スカラ倍算器及びスカラ倍算プログラム
Batina et al. Flexible hardware design for RSA and elliptic curve cryptosystems
Moon et al. Fast VLSI arithmetic algorithms for high-security elliptic curve cryptographic applications
JP2009505148A (ja) 暗号化演算における反転操作を行うための回路配置及び方法
TWI602119B (zh) 用於蒙哥馬利域的計算方法、計算裝置和電腦軟體產品
KR101977873B1 (ko) 하드웨어 구현된 모듈러 역원 모듈
JP5000399B2 (ja) 楕円曲線演算装置および楕円曲線演算方法
EP3226120B1 (en) Non-modular multiplier, method for non-modular multiplication and computational device
WO2023043467A1 (en) A method and architecture for performing modular addition and multiplication sequences
CN116186794B (zh) 密码协处理器、密码处理方法、芯片和计算机设备
CN107239258A (zh) 一种模逆运算方法及运算器
Jacobson Jr et al. Comparison of scalar multiplication on real hyperelliptic curves.
Brumley et al. Fast point decompression for standard elliptic curves
JP3966714B2 (ja) 暗号処理方法、そのプログラム及びその記録媒体
JP2006091086A (ja) モンゴメリ逆元演算装置を備えた半導体装置およびicカ−ド
JP6102649B2 (ja) 演算回路および演算回路の制御方法
Liu et al. Computing the modular inverses is as simple as computing the GCDs
JP2003263110A (ja) 楕円曲線上の有理点群の部分群の元生成装置、そのプログラム及び記録媒体

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20100225

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A712

Effective date: 20100519

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20120420

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: 20120508

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: 20120516

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: 20150525

Year of fee payment: 3

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

LAPS Cancellation because of no payment of annual fees