JP3797808B2 - スカラー倍算方法およびその装置 - Google Patents
スカラー倍算方法およびその装置 Download PDFInfo
- Publication number
- JP3797808B2 JP3797808B2 JP30532098A JP30532098A JP3797808B2 JP 3797808 B2 JP3797808 B2 JP 3797808B2 JP 30532098 A JP30532098 A JP 30532098A JP 30532098 A JP30532098 A JP 30532098A JP 3797808 B2 JP3797808 B2 JP 3797808B2
- Authority
- JP
- Japan
- Prior art keywords
- value
- digits
- numerical
- window
- predetermined number
- 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】
これらの問題に対して暗号技術を応用した暗号化電子メールや利用者認証システムが提案され、種々のネットワークにも導入されつつあり、コンピュータネットワークにおいて暗号化は必須の技術となりつつある。
【0004】
暗号化方式は、大別すると秘密鍵暗号系と公開鍵暗号系の2つの分類することができる。
【0005】
秘密鍵暗号系は、送信者と受信者が同じ鍵を持つことにより暗号通信を行う方式である。すなわち、秘密鍵暗号系では、あるメッセージを秘密の暗号鍵に基づいて暗号化し相手に送り、受け手はこの暗号鍵を用いて暗号分を複合化しもとのメッセージに戻して情報を入手する。
【0006】
公開鍵暗号系は、送信者は公開されている受信者の公開鍵でメッセージを暗号化して送信し、受信者は自分の秘密鍵でその暗号化メッセージを復号することで通信を行う方式である。すなわち、公開鍵暗号系では、公開鍵は暗号化のための鍵、秘密鍵は公開鍵により暗号化された暗号を復号するための鍵であり、公開鍵で暗号化した暗号が秘密鍵でのみ復号することができる。
【0007】
秘密鍵暗号系では、個人が秘密に保管しなければならない鍵の数が通信相手の数だけ必要であり、必要な総鍵数はn人のネットワークの場合、n(n−1)/2個である。また、はじめて通信をする相手に対しては、何らかの方法で秘密鍵の配送を行う必要があるという点で欠点がある。この問題を避けるために、大規模なネットワークでは、鍵管理センタを設置し、センタとの間の秘密鍵のみを保管し、暗号通信を行う場合はセンタから送信相手との秘密鍵を得る方法が用いられる。この場合秘密鍵の総数はnとなる。
一方公開鍵暗号系では、個人が秘密に保管する鍵は自分の秘密鍵のみであり、必要な総秘密鍵数もn人のネットワークの場合、n個である。また、はじめて通信する相手に対しては、公開鍵の配送を行えばよく、鍵管理センタを設置して、ユーザの公開鍵をn個公開簿に登録し、センタから送信相手の公開鍵を得る方法が用いられる。この場合、センタは公開鍵の改竄を防ぐだけで、秘密に保管する必要がない。ただし、公開鍵方式は秘密鍵方式に比べて鍵のビット数が大きいため保管に要するファイルサイズが大きくなるという問題を内包している。
【0008】
また、認証の場合、秘密鍵暗号系では、例えば、送信するメッセージを秘密鍵で圧縮変換し、送信文に付加して送り、受信側では同様に圧縮変換して比較する方式がとられている。しかし、送受信が同じ鍵であるため受信者は認証データを偽造することができる。
【0009】
これに対して、公開鍵暗号系では、秘密鍵で暗号化することができるのは本人だけであるという特徴を利用する。送信者はメッセージを圧縮変換して秘密鍵で暗号化し、送信文に付加して送り、受信者は送信者の公開鍵で付加されたデータを復号化し、同様に圧縮変換したものと比較する方式がとられている。この場合は受信者が不正できない。
【0010】
このように、認証系では公開鍵暗号系の技術は必要不可欠であるといえる。しかし、公開鍵暗号系には、暗号化/復号化に大量の処理が必要であるという大きな欠点があるため、一般には処理の速い秘密鍵暗号系をメッセージの暗号化に、公開鍵暗号系は認証用にというように組み合わせて用いられる場合が多い。
【0011】
公開鍵暗号系の中で、現在標準化が進んでいるものに、楕円曲線暗号(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(modp),p:素数)と、2拡大体上の楕円曲線(標準形:y2+xy=x3+ax2+b(mod f),f:既約多項式)である。この楕円曲線上の点P(x,y)および単位元となる無限遠点Οの集合は、加算に関して群をなす。楕円曲線は、この点の演算による離散対数問題に基づく暗号である。
〔楕円曲線の点の演算と離散対数問題〕
楕円曲線上の点の演算は以下のものが定義されている。
加算:R=P+Q=Q+P
2倍算:R=2P=P+P
減算:R=P−Q
零点:Ο(無限遠点)=P−P
スカラー倍算:kP=P+P+・・・+P(k個のPの和)
ここで、kPとPからkを計算することは困難である。このことは、楕円曲線の離散対数問題と呼ばれており、この離散対数問題に関連する計算の困難性に基づいて公開鍵系の暗号とすることができる。
【0012】
たとえば、公開鍵暗号系として知られる(有限体上の)ディッフィ−ヘルマン(Diffie-Hellman)鍵交換と同様の鍵交換方式を実現することができる。楕円曲線上のベースポイントをGとし、Aの秘密鍵をsaとしPa=saGを演算して公開鍵とする。また、Bの秘密鍵をsbとし、Pb=sbGを演算してこれを公開鍵とする。AはBの公開鍵Pbと自分の秘密鍵saから、KAB=saPb=sasbGを演算することによって共通鍵を得ることができる。また、同様にして、BはAの公開鍵Paと自分の秘密鍵sbから、KBA=sbPa=sbsaGを演算することによって共通鍵を得ることができる。この方式は、ECDH(Elliptic Curve Diffie-Hellman)方式と呼ばれ、秘密鍵sa,sbをスカラー量として楕円曲線上の点G、Pa、Pbに乗算する必要があり、暗号化/復号化の際に大量の演算処理を必要とする。この他にECDSA方式やECES方式なども提案されているが、演算処理が大きくなる点については同様である。
〔楕円曲線上の点のスカラー倍算〕
楕円曲線上の点のスカラー倍算は上記のように定義されるが、kの値が大きくなると計算量が膨大となるため、通常は、加算と2倍算を組み合わせたバイナリメソッド(Binary Method)や加算と2倍算、減算を組み合わせたサインドバイナリメソッド(Signed Binary Method)、事前計算表を用いて用いてバイナリメソッドを複数ビット単位で行うウィンドウメソッド(Window Method)などを用いて計算を行うことが提案されている。
【0013】
バイナリメソッドは、E. D. Knuthが、"The art of computer programing vol. 2, Seminumerical Algorithm, 2nd ed." (Addison-Wesley, Reading, Mass. 1981)で述べている方式で、乗数kを2進数表現(Binary表現)し、最上位ビットから最下位ビットまで順に検査していって、そのビットの値が0なら2倍算を行い、ビットの値が1であれば2倍算を行った後加算するという方式である。
【0014】
サインドバイナリメソッドは、F. Morain and J. Olivosが、"Speeding up the computations on an elliptic curve using addition-subtraction chains." (Inform. Theory Appl. 24, 1990)で提案している方式であり、乗数kを符号付き2進数表現(Signed Bainary表現)し、最上位ビットから最下位ビットまで順に検査していき、そのビットの値が0なら2倍算を行い、ビットの値が1なら2倍算を行った後加算し、ビットの値が−1であれば2倍算を行った後減算を行うという方式である。符号付き2進数表現は、−1,0,1によって表現するものであって、1つの値について複数の表現方法があり、どの表現を採用するかによって演算の速度が異なってくる。
【0015】
ウィンドウメソッドには、いろいろなバリエーションがあり、もっとも基本的なものでは、乗数kを2進数表現に変換し、最上位ビットから最下位ビットまでを所定の桁数でなる数値ブロックに分割し、予め演算したテーブルを当てはめていく。たとえば、k=27622793=11010010101111101100010012である場合、この乗数kに上位から4ビットのウィンドウを当てはめるなら、
1101 0010 1011 1110 1100 0100 1
となる。この場合には、被乗数Pに4ビットの数値ブロックの値を乗算した値、0P(00002P)から15P(11112P)を事前に計算しておき、テーブルとして保存しておく必要がある。
【0016】
数値ブロックの最上位ビットが1となるように4ビットのウィンドウを当てはめた場合には、上記乗数kは、
1101 00 1010 1111 1011 000 1001
と5つのウィンドウを当てはめることとなる。この場合には、最上位ビットが1となる数値ブロックについてのみ事前計算を行ってテーブルとして保存しておけばよいと考えられる。ただし、最終の数値ブロックは、所定の桁数(この場合4ビット)とならない可能性があるため、最上位ビットが1とならない数値ブロックについても事前計算を行ってテーブル化しておく必要があり、やはり、0P(00002P)から15P(11112P)のすべてを事前計算する必要がある。
【0017】
このように、ウィンドウメソッドでは、当てはめたウィンドウの値の加算と、2倍算を組み合わせることで、スカラー倍算を計算することができる。
【0018】
前述したようなサインドバイナリメソッドとウィンドウメソッドとを複合したものとして、宮地、小野、H. Cohenが、"Efficient elliptic curve exponetiation, ICICS '97, 1997" で提案したものがある(以下、MOC方式と称す)。
【0019】
このMOC方式では、乗数を2進数表現とし、これに所定の桁数でなるウィンドウを最下位のビットから順に割り当てていき、割り当てたウィンドウのすぐ上位のビットが1の場合、ウィンドウの値をマイナス2の補数とし、すぐ上位に1を加算する。例えば、上記乗数k=27622793=11010010101111101100010012に4ビットのウィンドウを当てはめる場合、
11010010101111 1011 000 1001
となり、2つ目のウィンドウ"1011"の上位のビットは1である。したがって、このウィンドウの値を補数として、"0101"(下線付きをマイナスとする)とし、その上位ビットに1を加算する。
【0020】
11010010110000 0101 000 1001
この後、さらにウィンドウを当てはめて行くことによって、次のようになる。
【0021】
1101 00 1011 0000 0101 000 1001
このことにより、MOC方式の場合、ウィンドウの数は、上述したような通常のウィンドウメソッドの場合よりも少なくすることができる。また、1つのウィンドウの上位に位置するビットは必ず0となるようにしているため、ウィンドウの1回割り当てあたりの平均処理ビット数は、ウィンドウ幅+2となる。
【0022】
バイナリメソッド、サインドバイナリメソッド、ウィンドウメソッド、宮地方式について、160ビット程度の楕円曲線の点の演算に用いた(ウィンドウメソッドについては4ビットウィンドウを用いた)場合の計算回数は以下のようになる。
【0023】
【表1】
【0024】
【発明が解決しようとする課題】
上述したように、ウィンドウメソッド系の処理では、合計の加算回数が少なくなり、バイナリメソッド系の処理に比して高速な処理が可能になると考えられる。しかしながら、事前計算を必要としないバイナリメソッド系の平均加算回数に比してウィンドウメソッド系の加算回数は1/2程度に軽減されているに止まっている。
【0025】
従来のウィンドウ方式において、スカラー倍算を高速化するためにはテーブルを大きくとる必要があり、このテーブルを格納しておく領域を確保する必要がある。しかしながら、上述したように、大きなテーブルを用意しても有効に利用しているとは言い難く、このテーブルを格納する領域を無駄にしている。また、テーブルを大きくすることで事前計算の処理に時間を要し、スカラー倍算自体は高速であるが、トータルでの高速化が考慮されていないといった問題を有している。このことは、ウィンドウメソッドを利用したMOC方式であっても同様のことが言える。
【0026】
本発明の目的は、テーブル数を削減して有効利用することにより、テーブル格納領域を削減し、事前計算の回数を削減してトータルでの演算の高速化を図ることを可能としたスカラー倍算方法およびその装置を提案することにある。
【0027】
【課題を解決するための手段】
本発明に係るスカラー倍算方法は、整数を乗数とするスカラー倍算において、乗数を非隣接型(nonadjacent form)符号付き2進数(以下、NAFと称す)に変換し、NAFに変換された乗数を上位ビットより順に最上位ビットが0でない所定の桁数でなる数値ブロックに分解して固定幅ウィンドウによるウィンドウ法を用いて演算することを特徴としている。
【0028】
NAFは、0でないビット(1または−1)が連続しないような符号付き2進数表現であり、0でないビットの数が最小となる。したがって、加算回数を軽減することができる。また、NAFは0でないビットが隣接しないため、最上位ビットが0でない数値ブロックで分割した際に、出現する数値ブロックの種類が限られる。したがって、テーブルを必要最小限に削減することができ、事前計算の回数を軽減することができる。
【0029】
ここで、所定の桁数でなる数値ブロックのうち、NAFに現れるものであって最上位ビットが1となる数値ブロックの値を、被乗数に乗算したものを予め演算してテーブルとして保存しておく構成にできる。例えば、ウィンドウ幅が4ビットの場合、最上位ビットが1となる値は、10102(=6)、1001 2(=7)、10002(=8)、10012(=9)、10102(=10)の5つだけであり、被乗数Pにこれを乗算した6P、7P、8P、9P、10Pを事前計算してこれをテーブルとすればよいこととなる。
【0030】
また、テーブルを作成するために計算した途中の値を、テーブルに追加して保存しておくように構成できる。
【0031】
さらに、非隣接型符号付き2進数に変換した乗数の値を最上位ビットが0でない所定の桁数でなる数値ブロックに分解した際に、最終の数値ブロックが所定の桁数に満たない場合に、この最終の数値ブロックのみテーブルの値を組み合わせて演算するように構成できる。
【0032】
最終の数値ブロックが所定の桁数に満たなかった場合には、所定の桁数であって最上位ビットが1となる数値ブロックのみで計算することができないため、テーブルを作成するために計算した途中の値とテーブルの値とを利用してこれを算出するようにする。たとえば、ウィンドウ幅が4ビットの場合に、最終の数値ブロックに1〜3ビットの値が残る可能性がある。したがって、最終の数値ブロックが採り得る値は、−10P〜+10Pの範囲ですべての値をとり得る。前述の事前計算で、6P、7P、8P、9P、10Pを計算する際に、途中で計算を行う2P、4Pをテーブルに追加して保存しておけば、±1PはPの値をそのまま用い、±2または±4Pの場合2Pまたは4Pをそのまま使うことができ、±3Pの場合2P+Pの演算を行い、±5Pの場合4P+Pの演算を行うことで算出することが可能となる。
【0033】
このようなスカラー倍算は、楕円曲線上の点の演算に用いることができ、楕円曲線暗号を演算する際に利用することができる。また、整数演算に用いることも可能である。
【0034】
さらに、本発明に係るスカラー倍算装置では、所定の桁数でなる数値ブロックのうち、非隣接型符号付き2進数に現れるものであって最上位ビットが1となる数値ブロックの値を、被乗数に乗算した値を予め演算する事前計算手段と、事前計算手段によって演算された値をテーブルとして保存するテーブル記憶手段と、乗数を非隣接型符号付き2進数に変換するNAF変換手段と、NAF変換手段によって非隣接型符号付き2進数に変換された乗数を、上位ビットより順に、最上位ビットが0でない所定の桁数でなる数値ブロックに分解し、テーブル記憶手段に保存されたテーブルを適用するウィンドウ演算手段と、非隣接型符号付き2進数に変換した乗数の値を最上位ビットが0でない所定の桁数でなる数値ブロックに分解した際に、最終の数値ブロックが所定の桁数に満たない場合に、この最終の数値ブロックのみテーブルの値を組み合わせて演算する後処理手段とを備えている。
【0035】
【発明の実施の形態】
本発明に係るスカラー倍算装置の1実施形態を図1を用いて説明する。
【0036】
このスカラー倍算装置1は、通常のCPUおよびメモリを搭載したコンピュータにより実現されるものであって、主に記憶手段2と演算手段3とで構成される。
【0037】
記憶手段2は、乗数kや被乗数Pおよび演算結果などを記憶しておく通常記憶部21と、事前計算により作成されたテーブルを格納しておくテーブル記憶部22とを備えている。
【0038】
演算手段3は、所定の桁数でなる数値ブロックのうち、NAFに現れるものであって最上位ビットが1となるものについて、その値を被乗数Pに乗算した値を予め演算する事前計算手段31を備えている。例えば、ウィンドウ幅が4ビットの場合、最上位ビットが1となる値は、10102(=6)、1001 2(=7)、10002(=8)、10012(=9)、10102(=10)の5つだけであり、被乗数にこれを乗算した6P、7P、8P、9P、10Pを事前計算する。事前計算手段31では、この6P、7P、8P、9P、10Pとこの計算の途中で得られる2P、4Pについてテーブルとして記憶手段2のテーブル記憶部22に保存する。
【0039】
また、演算手段3は、乗数kをNAFに変換するNAF変換手段32を備えている。このNAF変換手段32は、G. Reitwiesnerが"Binaryarithmetic, Advances in Computers, 1 (1960), pp. 231-308"で提案した変換方法などを実現するものであり、記憶手段2に格納されている乗数kを0でないビットが隣接しないようなサインドバイナリ表現に変換する。
【0040】
さらに、演算手段3は、NAFに変換された乗数kを上位ビットから順に所定の桁数でなる数値ブロックに分解し、テーブル記憶部22に格納されているテーブルを各数値ブロックに適用するウィンドウ演算手段33を備えている。
【0041】
また、演算手段3は、NAFに変換された乗数kを上位ビットから順に所定の桁数でなる数値ブロックに分解した際に、最終の数値ブロックが所定の桁数に満たない場合に、テーブルに格納されている値を用いてこの最終の数値ブロックの値を演算する後処理手段34を備えている。
【0042】
次に、本発明に係るスカラー倍算方法について詳細に説明する。
【0043】
図2において、ステップS1では、被乗数Pおよび乗数kが入力される。この値はシステムが自動的に選択する数値であってもよく、ユーザが入力する任意の値であってもよい。
【0044】
ステップS2では、被乗数Pに対する事前計算を行ってテーブルを作成するテーブル作成処理を実行する。
【0045】
ステップS3では、乗数kをNAFに変換するNAF変換処理を実行する。
【0046】
ステップS4では、NAFに変換された乗数kをウィンドウメソッドを用いて上位のビットから順に所定の桁数でなる数値ブロックに分割し、テーブルの値を適用するとともに、2倍算および加算を行うウィンドウ演算処理を実行する。
【0047】
ステップS5では、最終の数値ブロックが所定の桁数に満たない場合に、テーブルに格納された値を使ってこの最終ブロックの値を演算する後処理を実行する。
【0048】
ステップS6では、演算結果を出力し、例えば記憶手段2に格納する。
〔事前計算〕
ステップS2におけるテーブル作成処理を図3にフローチャートとして示す。ここでは、ウィンドウ幅を4ビットとしたウィンドウメソッドを用いることとする。
【0049】
ステップS11では、被乗数Pに2をかけた値2P=P+Pを計算し、これを記憶手段2に格納する。ステップS12では、被乗数Pに4をかけた値4P=2P+2Pを計算し、これを記憶手段2に格納する。
【0050】
ステップS13では、被乗数Pに8をかけた値8P=4P+4Pを計算し、これをテーブル記憶部22のtable[2]として保存する。ステップS14では、被乗数Pに7をかけた値7P=8P−P=table[2]−Pを計算し、これをテーブル記憶部22のtable[1]として保存する。ステップS15では、被乗数Pに9をかけた値9P=8P+P=table[2]+Pを計算し、これをテーブル記憶部22のtable[3]として保存する。
【0051】
ステップS16では、被乗数Pに6をかけた値6P=7P−P=table[1]−Pを計算し、これをテーブル記憶部22のtable[0]として保存する。ステップS17では、被乗数Pに10をかけた値10P=9P+P=table[3]+Pを計算し、これをテーブル記憶部22のtable[4]として保存する。
【0052】
このことにより、テーブル記憶部22には、図4に示すようなテーブルが作成されることとなる。すなわち、a=0〜4について、table[a]の値がそれぞれ、6P,7P,8P,9P,10Pとして格納される。また、このテーブルとは別に、計算途中で得られる値2P,4Pもこの記憶手段2内に保存されることとなる。
〔NAFへの変換〕
乗数kをNAFに変換する方法は、前述したように、G. Reitwiesnerの提案する方法などを用いて実現することができる。
【0053】
例えば、乗数k=27622793=110100101011111011000010012をNAFに変換した場合には、
10101010101000001010001001
となる(値が−1となるビットを"1"で示すこととする)。
〔ウィンドウ演算処理〕
ステップS4におけるウィンドウ演算処理について、図5に示すフローチャートに基づいて説明する。
【0054】
ステップS21では、乗数kの値をNAFに変換したときの桁数がnであれば(n−1)の値を変数iとして取り込む。ここでは、乗数kをNAFに変換したときの値が(k159,k158,k157・・・k1,k0)でなりその桁数が160ビットである場合を想定し、i=159とする。ステップS22では、NAF変換した乗数kを上位ビットから4桁のウィンドウ幅で取り込み、ウィンドウ値W=(ki,ki-1,ki-2,ki-3)とする。この時のウィンドウ値Wは、W=(k159,k158,k157,k156)となる。ステップS23では、この時のウィンドウ値Wから6を引いた値のテーブルを参照して、これを演算結果Rの初期値とする。たとえば、W=10002=8であれば、table[2]を参照して、R=8Pとする。
【0055】
ステップS24では、変数iから4をデクリメントする。ステップS25では、乗数kについて現在のウィンドウの下にさらにビットが存在するか否かを判別する。変数iの値が0よりも大きい場合に、次のビットが存在するとして、ステップS26に移行する。ステップS26では、乗数kについて現在のウィンドウの下に位置する次のビットkiが0であるか否かを判別する。次のビットkiが0であると判断した場合、ステップS27に移行する。ステップS27では、Rの値を2倍算し、R=2Rとする。ステップS28では変数iから1をデクリメントして、ステップS25に移行する。
【0056】
ステップS26において、次のビットkiが0でないと判断した場合には、ステップS29に移行する。ステップS29では、乗数kについて現在のウィンドウの下に位置するビット数が4ビット以下になったか否かを判別する。ここで、変数iの値が3以下であれば、乗数kについて現在のウィンドウの下に位置するビット数が4ビット以下になったと判断してメインルーチンに復帰する。また、変数iの数が4以上であれば、ステップS30に移行する。
【0057】
ステップS30では、Rの値を2倍算し、R=2Rとする。ステップS31、S32、S33では、同様にRの値を2倍算し、R=2Rとする。したがって、ステップS30〜S33では、R=24Rを計算することとなる。
【0058】
ステップS34では、次のウィンドウについて、ウィンドウ値Wを取り込む。ステップS35では、取り込んだウィンドウ値Wの値が0より大きいか否かを判別する。ウィンドウ値Wが0よりも大きい場合には、ステップS36に移行する。ステップS36では、(W−6)の値に対応するテーブルを参照し、Rの値に加算して、R=R+table[W−6]を計算する。したがって、このときのウィンドウ値W=10012=9であれば、R=R+table[3]=R+9Pを計算することとなる。また、ステップS35において、ウィンドウ値Wが0よりも小さいと判別した場合には、ステップS37に移行する。ステップS37では、(−W−6)の値に対応するテーブルを参照し、Rの値からこれを減算して、R=R−table[−W−6]を計算する。例えば、ウィンドウ値W=1001 2=−9であれば、R=R−table[3]=R−9Pを計算することとなる。ステップS38では、変数iの値から4だけデクリメントし、ステップS25に移行する。
【0059】
ステップS25において乗数kについて現在のウィンドウの下に次のビットが存在しないと判別した場合およびステップS29において乗数kについて現在のウィンドウの下にあるビット数が4ビット以下になった場合には、メインルーチンに復帰する。
〔最終ウィンドウ処理〕
ウィンドウ演算処理において、最終のウィンドウについて所定の桁数以下となった場合には、ステップS5の後処理が必要となる。これは、図5において、変数iの値がステップS25では0よりも大きくかつステップS29において3以下であると判断された場合である。このときの最終ウィンドウ処理を図6に示すフローチャートに基づいて説明する。
【0060】
ステップS41では、最終ウィンドウのウィンドウ値Wに初期値として0を代入する。ステップS42では、次のビットが存在するか否かを判別する。ここでは、変数iの値が0よりも大きい場合に、次のビットが存在すると判断してステップS43に移行する。ステップS43では、W=2W+kiを計算する。ステップS44では、Rの値を2倍算して、R=2Rを計算する。ステップS45では、変数iの値から1だけデクリメントし、ステップS42に移行する。
【0061】
ステップS42において、変数iの値が0以下になった場合、次のビットが存在しないと判断して、ステップS46に移行する。
【0062】
ステップS46では、ウィンドウ値Wの値を判別して、対応するステップに分岐する。ウィンドウ値W=0の場合、何もせずにメインルーチンに復帰する。
ウィンドウ値W=6〜10の場合には、ステップS47に移行する。ステップS47では、R=R+table[W−6]を計算する。ウィンドウ値Wの値が6〜10の場合には、最終ウィンドウは4ビットであり、これに対応するテーブルが存在する。したがって、ウィンドウ値Wに対応するテーブルを参照して最終ウィンドウの計算を行う。
【0063】
ウィンドウ値W=−6〜−10の場合には、ステップS48に移行する。ステップS48では、ステップS47と同様にしてウィンドウ値Wに対応するテーブルを参照して、R=R−table[−W−6]を計算する。
【0064】
ウィンドウ値W=1の場合、ステップS49に移行する。ステップS49では、R=R+Pを計算する。ウィンドウ値W=−1の場合、ステップS50に移行する。ステップS50では、R=R−Pを計算する。
ウィンドウ値W=2の場合、ステップS51に移行する。ステップS51では、記憶手段2に保存しておいた(2P)の値を読み込んでこれをRに加算し、R=R+2Pを計算する。ウィンドウ値W=−2の場合、ステップS52に移行する。ステップS52では、記憶手段2に保存しておいた(2P)の値を読み込んで、Rからこれを減算し、R=R−2Pを計算する。
【0065】
ウィンドウ値W=4の場合、ステップS53に移行する。ステップS53では、記憶手段2に保存しておいた(4P)の値を読み込んでこれをRに加算し、R=R+4Pを計算する。ウィンドウ値W=−4の場合、ステップS54に移行する。ステップS54では、記憶手段2に保存しておいた(4P)の値を読み込んでRからこれを減算し、R=R−4Pを計算する。
【0066】
ウィンドウ値W=3の場合、ステップS55に移行する。ステップS55では、記憶手段2に保存しておいた(2P)の値を読み込んでこれをRに加算し、R=R+2Pを計算する。さらに、ステップS56において、R=R+Pを計算する。ウィンドウ値W=−3の場合、ステップS57に移行する。ステップS57では、記憶手段2に保存しておいた(2P)の値を読み込んで、Rからこれを減算し、R=R−2Pを計算する。さらに、ステップS58において、R=R−Pを計算する。
【0067】
ウィンドウ値W=5の場合、ステップS59に移行する。ステップS59では、記憶手段2に保存しておいた(4P)の値を読み込んでこれをRに加算し、R=R+4Pを計算する。さらに、ステップS60において、R=R+Pを計算する。ウィンドウ値W=−5の場合、ステップS61に移行する。ステップS61では、記憶手段2に保存しておいた(4P)の値を読み込んで、Rからこれを減算し、R=R−4Pを計算する。さらに、ステップS62において、R=R−Pを計算する。
【0068】
この後、メインルーチンに復帰する。メインルーチンでは、このようにして計算されたRの値を演算結果として出力し、例えば、記憶手段2の所定領域に格納する。
〔ウィンドウメソッドにおける処理ビット数〕
本発明によれば、乗数kをNAF表現に変換し、最上位ビットが1となるようにウィンドウを当てはめているため、1ウィンドウあたりの処理ビット数は、ウィンドウ幅をwとすると、平均w+1.5ビットとなる。ウィンドウ幅w=4とした場合、1ウィンドウあたりの処理ビット数は5.4ビットとなる。
【0069】
また、2倍算を行う回数は、最終の数値ブロックについて省略することができるため、乗数kのビット数m−4となり、m=160の場合2倍算の回数は156となる。乗数kに当てはめるウィンドウの平均個数は、この2倍算の回数を1ウィンドウあたりの処理ビット数で割った値となり、この回数が平均加算回数となる。前述の乗数kのビット数m=160で、ウィンドウ幅w=4とした場合には、ウィンドウの平均個数は156/5.4=28.9となり、これが平均加算回数となる。
〔テーブル個数〕
本発明において、ウィンドウ幅をwとした場合、事前計算により作成すべきテーブル数は、以下のように表すことができる。
【0070】
wが偶数の場合:2/3(2w-1−2)+1
wが奇数の場合:2/3(2w-1−1)+1
また、このテーブルを作成するために使用する値の個数は、(w−2)個であり、合計すると次のようになる。
【0071】
wが偶数の場合:2/3(2w-1−2)+w−1
wが奇数の場合:2/3(2w-1−1)+w−1
これに対し、従来のウィンドウメソッドおよびMOC方式の場合には、テーブル数は(2w−2)となる。したがって、テーブルの削減率は次のようになる。
wが偶数の場合:(2w+3w−7)/(3・2w−6)
wが奇数の場合:(2w+3w−5)/(3・2w−6)
これから、ウィンドウ幅wを3ビット、4ビット、5ビットとした場合のテーブルの削減率は、それぞれ2/3、1/2、7/15となる。
〔最終ウィンドウ処理回数〕
ウィンドウ幅wとした場合の最終ウィンドウの取り得る値は次のようになる。
【0072】
wが偶数の場合:最小−1/3(2w+1−2)、最大1/3(2w+1−2)
wが奇数の場合:最小−1/3(2w+1−1)、最大1/3(2w+1−1)
このうち後処理としての加算演算が不要なものは、保存している値が利用できる場合と、±P、0の場合である。前述したように、記憶手段2に格納している値の合計数は次のようになる。
【0073】
wが偶数の場合:2/3(2w-1−2)+w−1
wが奇数の場合:2/3(2w-1−1)+w−1
これから、ウィンドウ幅wの場合の平均後処理回数は、次のようになる。
【0074】
wが偶数の場合:(2w+1−6w+4)/(2w+2−1)
wが奇数の場合:(2w+1−6w+2)/(2w+2+1)
通常よく用いられるウィンドウ幅wが3ビット、4ビット、5ビットの場合には、平均後処理回数はそれぞれ0,4/21,12/43となる。例えば、ウィンドウ幅wが4ビットの場合、最終ウィンドウの取り得る値は−10P〜+10Pの21通りであり、後処理が必要となる場合は±3P、±5Pの4通りである。したがって、この場合の平均後処理回数は4/21=0.2回となる。
乗数kを2進数に変換した際の桁数mが160ビットの場合と239ビットの場合について、1加算または1ウィンドウあたりの平均処理ビット、平均2倍算回数、平均加算回数、事前計算回数、事後計算回数を、従来の方式と比較したものをそれぞれ表2および表3として示す。
【0075】
【表2】
【0076】
【表3】
この結果から、本発明によるスカラー倍算方法によれば、事前計算によって作成するテーブル数を1/2に削減することができ、テーブルを格納するための領域を小さくすることができる。また、事前計算の回数を少なくすることにより、合計計算回数を削減することができ、トータルでの処理速度を高速化することが可能となる。
〔他の実施形態〕
楕円曲線上の点のスカラー倍算だけでなく、被乗数Pを整数とすることで通常の整数演算においても高速な乗算方式を得ることができる。
【0077】
【発明の効果】
本発明によれば、楕円曲線上の点のスカラー倍算について、事前計算により作成するテーブルの数を通常のウィンドウメソッド系の演算を用いる場合に比して約1/2に削減することができ、演算に必要な平均加算回数を全体で数%削減することができ、処理速度を高速化することが可能となる。
【図面の簡単な説明】
【図1】本発明の1実施形態の制御ブロック図。
【図2】その制御フローチャート。
【図3】テーブル作成処理のフローチャート。
【図4】テーブルの説明図。
【図5】ウィンドウ演算処理のフローチャート。
【図6】最終ウィンドウ処理のフローチャート。
【符号の説明】
1 スカラー倍算装置
2 記憶手段
3 演算手段
21 通常記憶部
22 テーブル記憶部
31 事前計算手段
32 NAF変換手段
33 ウィンドウ演算手段
34 後処理手段
Claims (6)
- 所定の桁数でなる数値ブロックの値を被乗数に乗算した値を予め演算する事前計算手段と、整数を非隣接型符号付き2進数に変換するNAF変換手段と、非隣接型符号付き2進数を最上位ビットが0でない前記所定の桁数の数値ブロックに分解し、分解された数値ブロックと被乗数とを乗算した値を前記事前計算手段により演算した結果から取得して計算結果とするウィンドウ演算手段と、所定の桁数に満たなかった最終の数値ブロックについて当該数値ブロックと被乗数との乗算を実行する後処理手段とを備えるスカラー倍算装置におけるスカラー倍算演算方法であって、
所定の桁数でなる数値ブロックのうち、非隣接型符号付き2進数に現れるものであって最上位ビットが1となる数値ブロックの値を、被乗数に乗算した値を前記事前計算手段により予め演算する段階と、
前記事前計算手段により演算された値を数値ブロックの値と対応させたテーブルとしてテーブル記憶手段に格納する段階と、
乗数をNAF変換手段によって非隣接型符号付き2進数に変換する段階と、
前記NAF変換手段によって非隣接型符号付き2進数に変換された乗数を、前記ウィンドウ演算手段により、上位ビットより順に最上位ビットが0でない前記所定の桁数でなる数値ブロックに分解し、分解された数値ブロックに応じて前記テーブル記憶手段に保存されたテーブルを参照し、事前計算手段によって演算された値を前記乗数と被乗数との演算結果として取得する段階と、
前記後処理手段により、前記テーブル記憶手段に格納されたテーブルを参照し、所定の桁数に満たない最終の数値ブロックの値に対応する値を取得してこの値に基づいて演算を実行する段階と、
を備えるスカラー倍算方法。 - 前記事前計算手段により予め演算する段階は、最上位2ビットが "10" となる数値ブロックの値を、被乗数に乗算した値を予め演算することを特徴とする、請求項1に記載のスカラー倍算方法。
- 前記事前計算手段は、前記テーブルを作成するために計算した途中の値を、前記テーブルに追加して保存しておくことを特徴とする、請求項1または2に記載のスカラー倍算方法。
- 前記後処理手段は、非隣接型符号付き2進数に変換した乗数の値を最上位ビットが0でない所定の桁数でなる数値ブロックに分解した際に、最終の数値ブロックが前記所定の桁数に満たない場合に、この最終の数値ブロックのみ前記テーブルの値を組み合わせて演算することを特徴とする、請求項1〜3のいずれかに記載のスカラー倍算方法。
- 楕円曲線上の点の演算に用いることを特徴とする、請求項1〜4のいずれかに記載のスカラー倍算方法。
- 所定の桁数でなる数値ブロックのうち、非隣接型符号付き2進数に現れるものであって最上位ビットが1となる数値ブロックの値を、被乗数に乗算した値を予め演算する事前計算手段と、
前記事前計算手段によって演算された値を数値ブロックの値と対応させたテーブルとして保存するテーブル記憶手段と、
乗数を非隣接型符号付き2進数に変換するNAF変換手段と、
前記NAF変換手段によって非隣接型符号付き2進数に変換された乗数を、上位ビットより順に、最上位ビットが0でない前記所定の桁数でなる数値ブロックに分解し、前記テーブル記憶手段に保存されたテーブルを参照し、事前計算手段によって演算された値を前 記定数と被乗数との演算結果として取得するウィンドウ演算手段と、
非隣接型符号付き2進数に変換した乗数の値を最上位ビットが0でない所定の桁数でなる数値ブロックに分解した際に、最終の数値ブロックが前記所定の桁数に満たない場合に、前記テーブル記憶手段に保存されたテーブルを参照し、最終の数値ブロックの値に対応する値を取得してこの値に基づいて演算を実行する後処理手段と、
を備えるスカラー倍算装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP30532098A JP3797808B2 (ja) | 1998-10-27 | 1998-10-27 | スカラー倍算方法およびその装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP30532098A JP3797808B2 (ja) | 1998-10-27 | 1998-10-27 | スカラー倍算方法およびその装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2000132096A JP2000132096A (ja) | 2000-05-12 |
JP3797808B2 true JP3797808B2 (ja) | 2006-07-19 |
Family
ID=17943698
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP30532098A Expired - Fee Related JP3797808B2 (ja) | 1998-10-27 | 1998-10-27 | スカラー倍算方法およびその装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3797808B2 (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2011141488A (ja) * | 2010-01-08 | 2011-07-21 | Nippon Telegr & Teleph Corp <Ntt> | スカラー倍演算装置、スカラー倍演算方法、スカラー倍演算プログラム、記録媒体 |
US11128461B2 (en) * | 2017-03-06 | 2021-09-21 | Canon Kabushiki Kaisha | Encryption processing apparatus and encryption processing method |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2004070681A2 (ja) * | 2003-02-06 | 2004-08-19 | Hitachi Ltd | 楕円曲線スカラー倍計算方法および装置 |
JP5505173B2 (ja) * | 2010-07-30 | 2014-05-28 | 富士通株式会社 | リスト生成装置、リスト生成方法およびリスト生成プログラム |
JP5573964B2 (ja) | 2010-12-27 | 2014-08-20 | 富士通株式会社 | 暗号処理装置および方法 |
WO2012090288A1 (ja) | 2010-12-27 | 2012-07-05 | 富士通株式会社 | 暗号処理装置、暗号処理方法、およびプログラム |
JP5975682B2 (ja) * | 2012-03-06 | 2016-08-23 | キヤノン株式会社 | 演算装置、演算方法、およびプログラム |
WO2022153456A1 (ja) * | 2021-01-14 | 2022-07-21 | 日本電信電話株式会社 | 暗号化装置、暗号通信システム、暗号化方法およびプログラム |
-
1998
- 1998-10-27 JP JP30532098A patent/JP3797808B2/ja not_active Expired - Fee Related
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2011141488A (ja) * | 2010-01-08 | 2011-07-21 | Nippon Telegr & Teleph Corp <Ntt> | スカラー倍演算装置、スカラー倍演算方法、スカラー倍演算プログラム、記録媒体 |
US11128461B2 (en) * | 2017-03-06 | 2021-09-21 | Canon Kabushiki Kaisha | Encryption processing apparatus and encryption processing method |
Also Published As
Publication number | Publication date |
---|---|
JP2000132096A (ja) | 2000-05-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5499299A (en) | Modular arithmetic operation system | |
AU677269B2 (en) | A cryptographic method | |
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 | |
US6202076B1 (en) | Scheme for arithmetic operations in finite field and group operations over elliptic curves realizing improved computational speed | |
US6993136B2 (en) | Cryptographic key exchange method using efficient elliptic curve | |
US6480606B1 (en) | Elliptic curve encryption method and system | |
US6415310B1 (en) | Remainder calculating method, modular-multiplication method, remainder calculating apparatus, modular-multiplication apparatus and recording medium | |
US7062043B1 (en) | Method of elliptic curve digital signature using coefficient splitting | |
JP3797808B2 (ja) | スカラー倍算方法およびその装置 | |
US7050579B1 (en) | Cryptographic methods and apparatus using word-wise montgomery multiplication | |
JP4177526B2 (ja) | 乗算剰余演算方法および乗算剰余回路 | |
US7062044B1 (en) | Method of elliptic curve cryptographic key agreement using coefficient splitting | |
JP3616897B2 (ja) | モンゴメリ法による乗算剰余計算装置 | |
US7024559B1 (en) | Method of elliptic curve digital signature using expansion in joint sparse form | |
Alvarez et al. | A matricial public key cryptosystem with digital signature | |
JP3615405B2 (ja) | 素体上楕円曲線上の点の演算方法およびその装置 | |
KR20010067016A (ko) | 알에스에이 공개키 암호 고속화 장치 및 방법 | |
JP4423900B2 (ja) | 楕円曲線暗号におけるスカラー倍計算方法と、その装置およびそのプログラム | |
US6477556B1 (en) | Method and apparatus for arithmetic operation and recording medium of method of operation | |
US20020025034A1 (en) | Cryptographic encryption method using efficient elliptic curve | |
JP2000137436A (ja) | 素体上楕円曲線上の点の演算方法およびその装置 | |
JP3123820B2 (ja) | 有限可換群における演算器 | |
US7505585B2 (en) | Method of generating cryptographic key using elliptic curve and expansion in joint sparse form and using same | |
JP4676071B2 (ja) | べき乗剰余演算方法、逆数演算方法およびそれらの装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20060117 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060320 |
|
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: 20060411 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20060418 |
|
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: 20090428 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100428 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110428 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110428 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120428 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130428 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140428 Year of fee payment: 8 |
|
LAPS | Cancellation because of no payment of annual fees |