JP4676071B2 - べき乗剰余演算方法、逆数演算方法およびそれらの装置 - Google Patents
べき乗剰余演算方法、逆数演算方法およびそれらの装置Info
- Publication number
- JP4676071B2 JP4676071B2 JP2001034824A JP2001034824A JP4676071B2 JP 4676071 B2 JP4676071 B2 JP 4676071B2 JP 2001034824 A JP2001034824 A JP 2001034824A JP 2001034824 A JP2001034824 A JP 2001034824A JP 4676071 B2 JP4676071 B2 JP 4676071B2
- Authority
- JP
- Japan
- Prior art keywords
- register
- variable
- calculation
- loop
- 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】
【従来の技術】
近年のコンピュータネットワークの発達により、データベースの検索や電子メール、電子ニュースなどの電子化された情報をネットワークを経由して送受信する機会が急速に増加してきている。さらに、これらを利用して、オンラインショッピングなどのサービスも提供されつつある。しかし、それに伴って、ネットワーク上の電子化されたデータを盗聴したり、改竄したり、または他人になりすましてサービスを受けるなどの違法行為についての問題が浮上してきている。特に、無線を利用したネットワークにおいては、傍受が容易なためこれらを防止する対策が望まれている。
【0003】
これらの問題に対して暗号技術(encryption technology)を応用した暗号化電子メールや利用者認証システムが提案され、種々のネットワークにも導入されつつあり、コンピュータネットワークにおいて暗号化は必須の技術となりつつある。
【0004】
このような暗号技術の中の1つにディジタル署名すなわち認証に適した公開鍵暗号(public key cryptosystem)があるが、暗号化/復号化に大量の処理が必要なため高速化が望まれており、様々な高速化アルゴリズムも発表されている。
【0005】
暗号化方式は、大別すると秘密鍵暗号系と公開鍵暗号系の2つに分類することができる。
秘密鍵暗号系は、送信者と受信者が同じ鍵を持つことにより暗号通信を行う方式である。すなわち、秘密鍵暗号系では、あるメッセージを秘密の暗号鍵に基づいて暗号化し相手に送り、受け手はこの暗号鍵を用いて暗号分を復号化しもとのメッセージに戻して情報を入手する。
【0006】
公開鍵暗号系は、送信者は公開されている受信者の公開鍵でメッセージを暗号化して送信し、受信者は自分の秘密鍵でその暗号化メッセージを復号化することで通信を行う方式である。すなわち、公開鍵暗号系では、公開鍵は暗号化のための鍵、秘密鍵は公開鍵により暗号化された暗号を復号化するための鍵であり、公開鍵で暗号化した暗号が秘密鍵でのみ復号化することができる。
【0007】
秘密鍵暗号系では、個人が秘密に保管しなければならない鍵の数が通信相手の数だけ必要であり、必要な総鍵数はn人のネットワークの場合、n(n−1)/2個である。また、はじめて通信をする相手に対しては、何らかの方法で秘密鍵の配送を行う必要があるという点で欠点がある。この問題を避けるために、大規模なネットワークでは、鍵管理センタを設置し、センタとの間の秘密鍵のみを保管し、暗号通信を行う場合はセンタから送信相手との秘密鍵を得る方法が用いられる。この場合秘密鍵の総数はnとなる。
【0008】
一方公開鍵暗号系では、個人が秘密に保管する鍵は自分の秘密鍵のみであり、必要な総秘密鍵数もn人のネットワークの場合、n個である。また、はじめて通信する相手に対しては、公開鍵の配送を行えばよく、鍵管理センタを設置して、ユーザの公開鍵をn個公開簿に登録し、センタから送信相手の公開鍵を得る方法が用いられる。この場合、センタは公開鍵の改竄を防ぐだけで、秘密に保管する必要がない。ただし、公開鍵方式は秘密鍵方式に比べて鍵のビット数が大きいため保管に要するファイルサイズが大きくなるという問題を内包している。
【0009】
また、認証の場合、秘密鍵暗号系では、例えば、送信するメッセージを秘密鍵で圧縮変換し、送信文に付加して送り、受信側では同様に圧縮変換して比較する方式がとられている。しかし、送受信が同じ鍵であるため受信者は認証データを偽造することができる。
【0010】
これに対して、公開鍵暗号系では、秘密鍵で暗号化することができるのは本人だけであるという特徴を利用する。送信者はメッセージを圧縮変換して秘密鍵で暗号化し、送信文に付加して送り、受信者は送信者の公開鍵で付加されたデータを復号化し、同様に圧縮変換したものと比較する方式がとられている。この場合は受信者が不正できない。
【0011】
このように、認証系では公開鍵暗号系の技術は必要不可欠であるといえる。しかし、公開鍵暗号系には、暗号化/復号化に大量の処理が必要であるという大きな欠点があるため、一般には処理の速い秘密鍵暗号系をメッセージの暗号化に、公開鍵暗号系は認証用にというように組み合わせて用いられる場合が多い。
【0012】
公開鍵暗号系の中で、現在IEEE P1363, ANSI X 9.62などで標準化が進んでいるものに、楕円曲線暗号(Elliptic Curve Cryptography)がある。これは、楕円曲線の離散対数問題に基づくもので、N. Koblitz("A course in number theory and cryptography", Spring-Verlag, 1997)と、V. Miller("Use of elliptic curves in cryptography", Advances in Cryptology-Proceedings of Crypto '85, Lecture Notes in Computer Science, 218(1986), Spring-Verlag, pp 417-426)により提案された。
〔楕円曲線暗号に用いる楕円曲線〕
楕円曲線暗号に用いる主な楕円曲線は、素体上の楕円曲線(標準形:y2=x3+ax+b(mod p),p:素数,a,b:GF(p)の元)と、2の拡大体上の楕円曲線(標準形:y2+xy=x3+ax2+b(mod f),f:n次既約多項式,a,b:GF(2n)の元)である。この楕円曲線上の点P(x,y)および単位元となる無限遠点Οの集合は、加算に関して群をなす。楕円曲線暗号は、この点の演算による離散対数問題に基づく暗号である。 楕円曲線上の点の演算は以下のものが定義されている。
〔楕円曲線上の点の加算〕
素体上の楕円曲線の場合:
楕円曲線上の点P=(x1,y1)とすると、−P=(x1,−y1)と定義される。また、楕円曲線上の点P=(x1,y1)、Q=(x2,y2)、R=(x3,y3)とし、R=P+QかつP≠−Pである場合、R=(x3,y3)は次のように定義される。
【0013】
2の拡大体上の楕円曲線の場合:
楕円曲線上の点P=(x1,y1)とすると、−P=(x1,y1+x1)と定義される。また、楕円曲線上の点P=(x1,y1)、Q=(x2,y2)、R=(x3,y3)とし、R=P+QかつP≠−Pである場合、R=(x3,y3)は次のように定義される。
【0014】
P≠Qのとき:
x3=λ2+λ+x1+x2+a
y3=λ(x1+x3)+x3+y1
λ=(y2+y1)/(x2+x1)
P=Qのとき:
x3=x1 2+b/x1 2
y3=x1 2(x1+y1/x1)x3+x3
これらの演算は、素体(mod p)もしくは2の拡大体(mod f)上の演算であるので、割り算は各体の上での逆数との乗算を行うことで計算できる。
〔逆数演算〕
逆数の演算は、拡張ユークリッドの互除法とその応用およびフェルマーの小定理を利用した方法に大別できる。たとえば、フェルマーの小定理を利用したものは次のように表すことができる。
【0015】
素体上の楕円曲線の場合:
a-1≡aP-2 mod p
2の拡大体の場合:
a-1≡a2^m-2 mod f
ただし、2^m−2=2m−2とする。
【0016】
このことから、フェルマーの小定理を用いた逆数演算は、べき乗剰余で求めることが可能である。
〔べき乗剰余演算〕
べき乗剰余ak mod cは、aをk回乗算して剰余演算を行えば計算することができるが、kの値が大きくなることにより計算量が膨大になることから、通常は、乗算剰余と自乗剰余を組み合わせたバイナリメソッド(Binary Method)や事前計算表を用いてバイナリメソッドを複数ビット単位(window)で行うウインドウメソッド(Window Method)などを用いて計算を行う。
【0017】
バイナリメソッドは、E. D. Knuthが、"The art of computer programing vol. 2, Seminumerical Algorithm, 2nd ed." (Addison-Wesley, Reading, Mass. 1981)で述べている方式で、乗数kを2進数表現(Binary表現)し、最上位ビットから最下位ビットまで順に検査していって、そのビットの値が0なら自乗剰余演算を行い、ビットの値が1であれば自乗剰余演算を行ってから乗算剰余演算を行うという方式である。これを以下のalgorithm 1に示す。
〈algorithm 1, Binary Method〉
r=ak mod cを求める。
【0018】
kをmビットとしてその2進数表現をk=(km-1、km-2、・・・k1、k0)2とする。
ウインドウメソッドにはいろいろなバリエーションがあるが、ここではもっとも基本的なものについて示す。バイナリメソッドと同様に、倍数kを2進数表現し、最上位から最下位ビットまでウィンドウ(Window)を当てはめていく。
【0019】
たとえば、k=27622793=11010010101111101100010012に4bit Windowを当てはめる場合、
1101 00 1010 1111 1011 000 1001
のように5つのWindowを当てはめることができる。このとき、a0(00002)からa15(11112)までの値を事前に計算で求めた4bitテーブルを用意しておく必要がある。このように、4bitテーブルを当てはめたWindow内の値の乗算剰余演算と、自乗剰余演算とを組み合わせることによって、ウインドウメソッドによるべき乗剰余演算を行うことができる。そのアルゴリズムを以下のalgorithm 2に示す。
〈algorithm 2,Window Method〉
r=ak mod cを求める。
【0020】
kをmビットとしてその2進数表現をk=(km-1、km-2、・・・k1、k0)2とする。
Windowサイズをwビットとする。
【0021】
【0022】
【発明が解決しようとする課題】
上述のようなバイナリメソッドやウインドウメソッドは一般的なべき乗剰余演算において高速演算を可能とする方法であって、計算対象を特定した場合には、その計算対象の性質を利用した計算方法を用いることにより、より高速な処理が可能となると考えられる。
【0023】
2の拡大体上の逆数演算(a-1 mod f)は、(a(2^m-2) mod f)で置き換えることが可能であり、さらに指数(2^m−2)を2進数表現した場合、最下位ビットを除く全てのビットが1であるという特徴を有している。このような性質を利用して、特定のものを計算対象とするべき乗剰余演算および2の拡大体上の逆数演算の高速化に関して考察する。
【0024】
指数の特徴を利用した高速べき乗剰余演算として、Lambert, Robert, J.;International Publication Number(PCT国際公開番号)WO99/63426号"Accelerated Cryptographic Operations"で開示されているものが存在する。ここでは、素体上の平方剰余演算を高速に行う方法が開示されており、指数を2進数表現した場合に1が2のべき乗数個連続する場合にのみ高速計算が可能なべき乗剰余演算方法が示されている。これを以下にalgorithm 3として示す。
〈algorithm 3〉
目的:a(2^k-1) mod pを計算する。
【0025】
このようなアルゴリズムを使用する場合、(1)の処理においてBを計算しているため、指数をビット表現した場合の連続する1の数(algorithm 3中のkの値)が2のべき数個連続する場合、即ちk=2bと表現できる場合にのみ適用可能となっている。また、このアルゴリズムは、素体上の平方剰余演算を行うという制限だけではなく、法pの値がたとえばp=2160−231−1などの特殊な場合であることが適用の条件となっており、適用範囲が極めて狭いものとなっている。
【0026】
本発明では、2の拡大体上の逆数演算に限定したアルゴリズムによって、▲1▼逆数演算をバイナリメソッドやウインドウメソッドなどの一般的なべき乗剰余演算を利用する方法より高速化すること、▲2▼特殊な条件を設けずに2の拡大体上の逆数演算に常に適用可能な演算を実現することを目的とする。
【0031】
【課題を解決するための手段】
本発明では、2進数に変換した場合にn個のビット全てが1であるべき数(2n−1)によるべき乗剰余演算a(2^n)-1 mod fを行うべき乗剰余演算装置であって、被演算数aが格納されるaレジスタと、変数sが格納されるsレジスタと、変数tが格納されるtレジスタと、演算結果が格納されるrレジスタと、前記tレジスタ内の変数tによる自乗剰余演算を行う自乗剰余演算手段と、前記tレジスタ内の変数tと、前記aレジスタ内の被演算数aまたは前記sレジスタ内の変数sとによる乗算剰余演算を行う乗算剰余演算手段と、2進数に変換した(n)を(nb-1,nb-2,・・・n1,n0)2、i=b−2が0以上である場合、ni=0の場合にレジスタs内の変数sをレジスタt内の変数tに代入し、前記自乗剰余演算手段による変数tの自乗剰余演算をループ回数loopだけ実行させその演算結果をレジスタtに格納し、レジスタt内の変数tとレジスタs内の変数sの乗算剰余演算を前記乗算剰余演算手段により演算させてレジスタs内の変数sに代入し、変数iをデクリメントする第1演算制御手段と、ni=1の場合にレジスタs内の変数sをレジスタt内の変数tに代入し、前記自乗剰余演算手段による変数tの自乗剰余演算をループ回数loopだけ実行させその演算結果をレジスタtに格納し、レジスタt内の変数tとレジスタs内の変数sの乗算剰余演算を前記乗算剰余演算手段により演算させてレジスタs内の変数sに代入し、さらにレジスタs内の変数sをレジスタt内の変数tに代入し、前記自乗剰余演算手段による変数tの自乗剰余演算を実行してレジスタt内の変数tに代入し、前記乗算剰余演算手段による前記レジスタa内の被演算数aとレジスタt内の変数tとの乗算剰余演算を実行してこの演算結果をレジスタs内の変数sに代入し、変数iをデクリメントする第2演算制御手段と、iが0未満のとき、レジスタs内の変数sをレジスタrに代入する第3演算制御手段と、前記自乗剰余演算手段による変数tの自乗剰余演算をループ回数loopだけ実行した後にループ変数loopの値を2倍し、前記乗算剰余演算手段による前記レジスタa内の被演算数aとレジスタt内の変数tとの乗算剰余演算を実行した後にループ変数loopに1を加算するループ変数制御手段と、を備えるべき乗剰余演算装置を提供する。
【0032】
【発明の実施の形態】
〔2の拡大体上の逆数演算〕
本発明の第1実施形態を図を用いて説明する。
【0033】
フェルマーの小定理を利用した2の拡大体GF(2m)上における逆数a-1の剰余演算は、a(2^m)-2 mod fで計算することができる。この指数2m−2をバイナリ表現すると、最下位ビットを除くすべてのビットが1となる。本発明では、このことを利用して高速にべき乗演算を行うものであり、以下にそのアルゴリズムを示す。
〈algorithm 4〉
(m−1)=(mb-1,mb-2,…,m1,m0)2とし、r=a(2^m)-2 mod fを計算する。i,j,s,t,loopは一時定数である。
【0034】
このアルゴリズムを実行するためのべき剰余演算装置の構成例を図1に示す。
【0035】
このべき乗剰余演算装置1は、被演算数aが格納されるaレジスタ11と、変数sが格納されるsレジスタ12と、変数tが格納されるtレジスタ13と、演算結果が格納されるrレジスタ14と、tレジスタ13内の変数tによる自乗剰余演算を行う自乗剰余演算部15と、tレジスタ13内の変数tとaレジスタ11内の被演算数aまたはsレジスタ12内の変数sとによる乗算剰余演算を行う乗算剰余演算部16とを備えている。
【0036】
このようなべき剰余演算装置において、2の拡大体GF(2m)上における逆数a-1の剰余演算a-1 mod f=a(2^m)-2 mod fを行う場合のフローチャートを図2に示す。
【0037】
ステップS1では、各パラメータに初期値をセットする初期化処理を実行する。ここでは、被演算数aをaレジスタ11にセットするとともに、sレジスタ12にaレジスタ11にセットされた被演算数aの値を代入する。自乗剰余演算を連続して行う際に用いるループ変数loopを1にセットする。さらに、べき数(2m−2)を2進数に変換した場合に連続する1の数がm個であり、(m−1)を2進数に変換した場合のビット数をbとした場合、(m−1)=(mb-1,mb-2,・・・m1,m0)2となる。ここで、演算制御に用いる変数iの値をb−2にセットする。
【0038】
ステップS2では、変数iの値が0以上であるか否かを判別する。変数iの値が0以上であればステップS3に移行し、変数iの値が0未満であればステップS10に移行する。
【0039】
ステップS3では、sレジスタ12に格納されている変数sの値をtレジスタ13に代入する。
ステップS4では、自乗剰余演算部15によりtレジスタ13内の変数tの自乗剰余演算t×t mod fを実行してtレジスタ13に格納する。この処理をループ変数loopの値と同じ回数だけ繰り返してステップS5に移行する。
【0040】
ステップS5では、乗算剰余演算部16により、sレジスタ12内の変数sの値と、tレジスタ13内の変数tの値との乗算剰余演算を行い、その演算結果をsレジスタ12に格納する。また、ループ変数loopを2倍してループ変数loopの値を更新する。
【0041】
このステップS3〜ステップS5の処理により、変数sによるべき乗剰余演算s2^loop×s mod fを実行することとなる。
ステップS6では、変数iの現在の値に基づいてmiの値が1であるか否かを判別する。miの値が1である場合にはステップS7に移行し、そうでない場合(miの値が0である場合)にはステップS11に移行する。
【0042】
ステップS7では、sレジスタ12に格納されている変数sの値をtレジスタ13に代入する。ステップS8では、自乗剰余演算部15によりtレジスタ13内の変数tの自乗剰余演算t×t mod fを実行してtレジスタ13に格納する。
【0043】
ステップS9では、乗算剰余演算部16により、tレジスタ13内の変数tの値と、aレジスタ11内の被演算数aの値との乗算剰余演算を行い、その演算結果をsレジスタ12に格納する。また、ループ変数loopに1を加算してループ変数loopの値を更新する。この後、ステップS11に移行する。
【0044】
ここでは、miの値が1の場合に、ステップS2〜ステップS5の処理を実行した後に、ステップS7〜ステップS9の処理を実行して、変数sによるべき乗剰余演算s2×a mod fを実行することとなる。
【0045】
ステップS11では、変数iの値をデクリメントし、ステップS2に移行する。
ステップS2において、変数iの値が0未満であると判断した場合には、ステップS10に移行する。ステップS10では、sレジスタ12に格納されている変数sの値をtレジスタtに代入し、自乗剰余演算部15によりtレジスタ13内の変数tの自乗剰余演算t×t mod fを実行してrレジスタ14に格納する。
【0046】
ステップS10では、sレジスタ14内の変数sの値は、2進数に変換した場合にm個の1が連続するようなべき数による被演算数aのべき乗剰余演算結果となっている。このsレジスタ14内の変数sを値をtレジスタに代入して自乗剰余演算を行うことで、m個の1が連続し最下位のビットが0であるようなべき数のべき乗剰余演算結果を得ることができる。
【0047】
図1において、sレジスタ13と自乗剰余演算部15とを接続することにより、ステップS10において、sレジスタ12からtレジスタ13への数値代入を省略し、sレジスタ13の値を直接自乗剰余演算するように構成することも可能である。
〔べき乗剰余演算〕
また、アルゴリズム4と同じ考え方で、2進数に変換した場合にn個のビット全てが1であるようなべき数(2n−1)によるべき乗剰余演算を行うことが可能である。この場合のべき乗剰余演算方法を、次のalgorithm 5に示す。このalgorithm 5では、剰余演算を"mod f"のように2の拡大体上の剰余として記載しているが、素体上においても同じアルゴリズムでべき乗剰余演算(mod p)を行うことが可能である。
〈algorithm 5〉
(n)=(nb-1,nb-2,…,n1,n0)2とし、r=a(2^n)-1 mod fを計算する。i,j,s,t,loopは一時定数である。
【0048】
〔逆数演算における他の演算方法との比較〕
上述したような本発明の方法を用いてm=163の場合の計算手順と途中経過の値を表1に示す。
【0049】
m=163の場合、(m−1)を2進数に変換すると、(10100010)2となり、計算を行う逆数は、a-1=a7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEと表すことができる。なお、表1中、lはループ変数loopの値を示すものとする。
【0050】
【表1】
また、m=163の場合の計算手順と途中経過の値を、バイナリメソッドを用いた場合の例を表2に、ウインドウメソッドを用いた場合の例を表3に示す。
【0051】
【表2】
【0052】
【表3】
この結果から、本発明のべき乗剰余演算方法を用いた場合には、自乗剰余演算の回数はバイナリメソッドやウインドウメソッドの場合とほぼ同程度の回数必要であるが、乗算剰余演算の回数を大幅に削減することが可能となる。したがって、自乗剰余演算の計算量と乗算剰余演算の計算量とが同等であると仮定した場合、本発明による演算方法を用いた逆数演算の計算量は、バイナリメソッドを用いた場合の53%であり、ウインドウメソッドを用いた場合の78%となる。ただし、ウインドウメソッドの場合、テーブルを作成するための事前演算に乗算剰余演算を30回必要とし、これを全体の演算回数に合計している。
【0053】
一般的に、2の拡大体の拡大次数mが大きくなるに従って、自乗剰余演算回数と乗算剰余演算回数を合計した計算量も増加するが、本発明、バイナリメソッドおよびウインドウメソッドの各方式による演算回数と、拡大次数mとの対応を図3に示す。ただし、ここではウインドウメソッドのウインドウ幅は5としている。
【0054】
図3に示すように、バイナリメソッドでは、本発明の演算方法による場合とウインドウメソッドによる場合に比して傾きが大きくなり、拡大次数mが500になると演算回数がほぼ1000回に達してしまう。ウインドウメソッドの場合であっても、拡大次数mが500であれば演算回数が600を超えることとなる。これに対して、本発明の演算方法による逆数演算の場合には、拡大次数mが500になっても演算回数の下限値、上限値ともに500程度となり、他の方式による演算回数より大幅に演算回数を削減することが可能となる。
【0055】
したがって、本発明の演算方法を2の拡大体の逆数演算に用いることにより、他の一般的な演算方法よりさらに高速な演算を可能とする。また、本発明の演算方法では、ウインドウメソッドのようにテーブルの事前計算を必要としないため、テーブルを格納しておくレジスタを必要とせず、テーブル参照の処理を省略することができる。
【0056】
さらに、前述したWO99/63426号に開示されているLambertの演算方法では、素体上の乗算剰余演算(平方剰余演算)に限定されており、特殊な条件下での適用だけ許されるもので、本発明の演算方法との直接的な比較は不可能である。あえて、Lambertの演算方法による演算回数を近い条件で換算して図3に表示するとすれば、拡大次数mの値が2bとなる点だけがプロットされることとなる。この点における演算回数は本発明の演算方法の場合とほぼ同様の結果になると考えられるが、Lambertの演算方法が適用の範囲の狭いということが明白である。したがって、本発明による演算方法は、広い範囲で適用することが可能であり、かつ高速演算を実現することが可能であるという点で従来の方法にはないべき乗剰余演算方法および逆数演算方法を提供することとなる。
〔正規基底の適用〕
2の拡大体にはPolynomial Base(PB:多項式基底)とNormal Base(NB:正規基底)と呼ばれる基底がある。正規基底の場合、多項式基底の場合に比較して乗算剰余演算の計算量は大きいが、自乗剰余演算をmビットデータの1ビットローテーションシフト演算で計算可能であるという性質をもっている。このローテーションシフト演算は計算量が極めて小さくなるため、自乗剰余演算による計算量をほぼ0と仮定することができる。したがって、本発明の演算方法では、バイナリメソッドやウインドウメソッドを用いた場合に比して乗算剰余演算の回数を削減することができる上、2の拡大体に正規基底を用いることにより自乗剰余演算における計算量をほぼ0と見なすことができることから、バイナリメソッドを用いた場合の6%、ウインドウメソッドを用いた場合の15%の計算量で逆数演算が可能となる。
【0057】
このような正規基底を用いた場合のアルゴリズムを以下に示す。
〈algorithm 6〉
(m−1)=(mb-1,mb-2,…,m1,m0)2とし、r=a(2^m)-2 mod fを計算する。i,j,s,t,loopは一時変数である。
【0058】
このアルゴリズムを実行するために、図5に示すようなべき乗剰余演算装置を構成する。
【0059】
このべき乗剰余演算装置21は、被演算数aが格納されるaレジスタ11と、変数sが格納されるsレジスタ12と、変数tが格納されるtレジスタ13と、演算結果が格納されるrレジスタ14と、tレジスタ13内の変数tまたはsレジスタ12内の変数sを左ローテーションシフトするシフト演算部17と、tレジスタ13内の変数tとaレジスタ11内の被演算数aまたはsレジスタ12内の変数sとによる乗算剰余演算を行う乗算剰余演算部16とを備えている。
【0060】
このようなべき乗剰余演算装置21を用いて、algorithm 6を処理するフローチャートを図4に示す。
ステップS21では、各パラメータに初期値をセットする初期化処理を実行する。ここでは、被演算数aをaレジスタ11にセットするとともに、sレジスタ12にaレジスタ11にセットされた被演算数aの値を代入する。ローテーションシフトを連続して行う際に用いるループ変数loopを1にセットする。さらに、べき数(2m−2)を2進数に変換した場合に連続する1の数がm個であり、(m−1)を2進数に変換した場合のビット数をbとした場合、(m−1)=(mb-1,mb-2,・・・m1,m0)2となる。ここで、演算制御に用いる変数iの値をb−2にセットする。
【0061】
ステップS22では、変数iの値が0以上であるか否かを判別する。変数iの値が0以上であればステップS23に移行し、変数iの値が0未満であればステップS28に移行する。
【0062】
ステップS23では、sレジスタ12に格納されている変数sの値をtレジスタ13に代入する。
ステップS24では、シフト演算部17によりtレジスタ13内の変数tをループ変数loopの値だけ左ローテーションシフトし、tレジスタ13に格納する。
【0063】
ステップS25では、乗算剰余演算部16により、sレジスタ12内の変数sの値と、tレジスタ13内の変数tの値との乗算剰余演算を行い、その演算結果をsレジスタ12に格納する。また、ループ変数loopを2倍してループ変数loopの値を更新する。
【0064】
ステップS26では、変数iの現在の値に基づいてmiの値が1であるか否かを判別する。miの値が1である場合にはステップS27に移行し、そうでない場合(miの値が0である場合)にはステップS29に移行する。
【0065】
ステップS27では、sレジスタ12に格納されている変数sの値をtレジスタ13に代入し、シフト演算部17によりtレジスタ13内の変数tを1ビットだけ左ローテーションシフトし、その値をtレジスタ13に代入する。さらに、乗算剰余演算部16により、tレジスタ13内の変数tの値と、aレジスタ11内の被演算数aの値との乗算剰余演算を行い、その演算結果をsレジスタ12に格納する。また、ループ変数loopに1を加算してループ変数loopの値を更新する。この後、ステップS29に移行する。
【0066】
ステップS29では、変数iの値をデクリメントし、ステップS22に移行する。
ステップS22において、変数iの値が0未満であると判断した場合には、ステップS28に移行する。ステップS28では、シフト演算部17によりsレジスタ12に格納されている変数sの値を1ビットだけ左ローテーションシフトし、その値をrレジスタ14に格納する。
〔他の技術への応用〕
以上の実施形態では、2の拡大体上の楕円曲線における点の演算に関して説明を行っており、楕円曲線暗号への応用を示唆するものである。これとは別に、その他の信号処理や符号処理など、2の拡大体上の演算を使用するような分野への応用が可能である。また、逆数演算に適用した場合の実施形態を開示しているが、2進数に変換した場合に1が連続するようなべき数によるべき乗剰余演算に適用することが可能であり、素体上のべき乗剰余演算、2の拡大体上の他のべき乗剰余演算に利用することが可能である。
【0067】
【発明の効果】
本発明によれば、バイナリメソッドやウインドウメソッドを用いた場合のべき乗剰余演算、逆数演算に比して計算量が大幅に削減することができ、高速演算を可能にする。また、ウインドウメソッドのように、事前にテーブルの作成を行うことがないため、テーブルを格納するためのレジスタを不要とし、テーブル参照の処理を省略することが可能である。
【図面の簡単な説明】
【図1】本発明の1実施形態の制御ブロック図。
【図2】その制御フローチャート。
【図3】2の拡大体の拡大次数mと計算量との関係を示す特性図。
【図4】正規基底を用いた場合のフローチャート。
【図5】正規基底を用いる場合の制御ブロック図。
Claims (1)
- 2進数に変換した場合にn個のビット全てが1であるべき数(2n−1)によるべき乗剰余演算a(2^n)-1 mod fを行うべき乗剰余演算装置であって、
被演算数aが格納されるaレジスタと、
変数sが格納されるsレジスタと、
変数tが格納されるtレジスタと、
演算結果が格納されるrレジスタと、
前記tレジスタ内の変数tによる自乗剰余演算を行う自乗剰余演算手段と、
前記tレジスタ内の変数tと、前記aレジスタ内の被演算数aまたは前記sレジスタ内の変数sとによる乗算剰余演算を行う乗算剰余演算手段と、
2進数に変換した(n)を(nb-1,nb-2,・・・n1,n0)2、i=b−2が0以上である場合、ni=0の場合にレジスタs内の変数sをレジスタt内の変数tに代入し、前記自乗剰余演算手段による変数tの自乗剰余演算をループ回数loopだけ実行させその演算結果をレジスタtに格納し、レジスタt内の変数tとレジスタs内の変数sの乗算剰余演算を前記乗算剰余演算手段により演算させてレジスタs内の変数sに代入し、変数iをデクリメントする第1演算制御手段と、
ni=1の場合にレジスタs内の変数sをレジスタt内の変数tに代入し、前記自乗剰余演算手段による変数tの自乗剰余演算をループ回数loopだけ実行させその演算結果をレジスタtに格納し、レジスタt内の変数tとレジスタs内の変数sの乗算剰余演算を前記乗算剰余演算手段により演算させてレジスタs内の変数sに代入し、さらにレジスタs内の変数sをレジスタt内の変数tに代入し、前記自乗剰余演算手段による変数tの自乗剰余演算を実行してレジスタt内の変数tに代入し、前記乗算剰余演算手段による前記レジスタa内の被演算数aとレジスタt内の変数tとの乗算剰余演算を実行してこの演算結果をレジスタs内の変数sに代入し、変数iをデクリメントする第2演算制御手段と、
iが0未満のとき、レジスタs内の変数sをレジスタrに代入する第3演算制御手段と、
前記自乗剰余演算手段による変数tの自乗剰余演算をループ回数loopだけ実行した後にループ変数loopの値を2倍し、前記乗算剰余演算手段による前記レジスタa内の被演算数aとレジスタt内の変数tとの乗算剰余演算を実行した後にループ変数loopに1を加算するループ変数制御手段と、を備えるべき乗剰余演算装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001034824A JP4676071B2 (ja) | 2001-02-13 | 2001-02-13 | べき乗剰余演算方法、逆数演算方法およびそれらの装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001034824A JP4676071B2 (ja) | 2001-02-13 | 2001-02-13 | べき乗剰余演算方法、逆数演算方法およびそれらの装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2002236445A JP2002236445A (ja) | 2002-08-23 |
JP4676071B2 true JP4676071B2 (ja) | 2011-04-27 |
Family
ID=18898364
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2001034824A Expired - Fee Related JP4676071B2 (ja) | 2001-02-13 | 2001-02-13 | べき乗剰余演算方法、逆数演算方法およびそれらの装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP4676071B2 (ja) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4851077B2 (ja) * | 2003-10-14 | 2012-01-11 | パナソニック株式会社 | データ変換装置およびその方法 |
JP4856599B2 (ja) * | 2007-07-25 | 2012-01-18 | 日本電信電話株式会社 | ペアリング演算装置、プログラム |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH10214262A (ja) * | 1997-01-29 | 1998-08-11 | Nippon Telegr & Teleph Corp <Ntt> | 逆元演算方法及び装置及び乗算方法及び乗算装置 |
WO1999063426A1 (en) * | 1998-06-01 | 1999-12-09 | Certicom Corp. | Accelerated cryptographic operations |
JP2002023999A (ja) * | 2000-06-21 | 2002-01-25 | Internatl Business Mach Corp <Ibm> | 乗算モジュール、乗法逆元演算回路、乗法逆元演算制御方式、該乗法逆元演算を用いる装置、暗号装置、誤り訂正復号器 |
-
2001
- 2001-02-13 JP JP2001034824A patent/JP4676071B2/ja not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH10214262A (ja) * | 1997-01-29 | 1998-08-11 | Nippon Telegr & Teleph Corp <Ntt> | 逆元演算方法及び装置及び乗算方法及び乗算装置 |
WO1999063426A1 (en) * | 1998-06-01 | 1999-12-09 | Certicom Corp. | Accelerated cryptographic operations |
JP2002023999A (ja) * | 2000-06-21 | 2002-01-25 | Internatl Business Mach Corp <Ibm> | 乗算モジュール、乗法逆元演算回路、乗法逆元演算制御方式、該乗法逆元演算を用いる装置、暗号装置、誤り訂正復号器 |
Also Published As
Publication number | Publication date |
---|---|
JP2002236445A (ja) | 2002-08-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6490352B1 (en) | Cryptographic elliptic curve apparatus and method | |
US6243467B1 (en) | Method of elliptic curve cryptographic digital signature generation and verification using reduced base tau expansion in non-adjacent form | |
US20130236012A1 (en) | Public Key Cryptographic Methods and Systems | |
US6898284B2 (en) | Cryptographic identification and digital signature method using efficient elliptic curve | |
EP0704124A4 (en) | CRYPTOGRAPHIC PROCESS | |
US20020041684A1 (en) | Public-key encryption and key-sharing methods | |
US20020055962A1 (en) | Automatically solving equations in finite fields | |
US6993136B2 (en) | Cryptographic key exchange method using efficient elliptic curve | |
Khoirom et al. | Audio encryption using ameliorated ElGamal public key encryption over finite field | |
Mohan et al. | Homomorphic encryption-state of the art | |
JP2000132376A (ja) | 剰余演算方法,乗算剰余演算方法,剰余演算装置,乗算剰余演算装置及び記録媒体 | |
Saeed et al. | Improved cloud storage security of using three layers cryptography algorithms | |
US7062044B1 (en) | Method of elliptic curve cryptographic key agreement using coefficient splitting | |
JP3797808B2 (ja) | スカラー倍算方法およびその装置 | |
JP4676071B2 (ja) | べき乗剰余演算方法、逆数演算方法およびそれらの装置 | |
US20020025034A1 (en) | Cryptographic encryption method using efficient elliptic curve | |
JP3615405B2 (ja) | 素体上楕円曲線上の点の演算方法およびその装置 | |
KR20010067016A (ko) | 알에스에이 공개키 암호 고속화 장치 및 방법 | |
Huang et al. | Fast scalar multiplication for elliptic curve cryptography in sensor networks with hidden generator point | |
JP2000137436A (ja) | 素体上楕円曲線上の点の演算方法およびその装置 | |
US7505585B2 (en) | Method of generating cryptographic key using elliptic curve and expansion in joint sparse form and using same | |
JP3706398B2 (ja) | 楕円曲線による署名、認証及び秘密通信方式 | |
Moldovyan et al. | Randomized pseudo-probabilistic encryption algorithms | |
Zaman et al. | RSA Cryptosystem: Block Cipher or Stream Cipher | |
EP1148675A1 (en) | Public key cryptograph and key sharing method |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20071120 |
|
RD02 | Notification of acceptance of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7422 Effective date: 20080929 |
|
RD04 | Notification of resignation of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7424 Effective date: 20080930 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20101109 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20110106 |
|
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: 20110125 |
|
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: 20110127 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140204 Year of fee payment: 3 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |