楕円曲線暗号演算装置及び方法
【課題】耐タンパ性を保持しつつ、メモリ特にRAMの使用量を削減する。
【解決手段】nビットのスカラー値dに対するウィンドウのウィンドウ幅kビットと同じビット数の各索引値に対応付けて、当該索引値の各ビットの値と当該ビットが担当する、スカラー値d中の相対ビット位置に対応する値についての2のべき乗との積の和に点Gを乗じた基本テーブル値に対して非ゼロのテーブル補正値を加えたテーブル値が格納されているウィンドウテーブルを格納するデータ格納部と、ウィンドウをシフトさせつつ当該ウィンドウの各担当ビット位置のビット値をスカラー値dから読み出すことにより索引値を生成して当該索引値でウィンドウテーブルを検索してテーブル値を読み出し、読み出したテーブル値を用いて2倍演算及び加算演算を実施する演算処理部と、演算処理部の演算結果に対してテーブル補正値に応じた所定の補正値で補正を実施する補正部とを有する。
【解決手段】nビットのスカラー値dに対するウィンドウのウィンドウ幅kビットと同じビット数の各索引値に対応付けて、当該索引値の各ビットの値と当該ビットが担当する、スカラー値d中の相対ビット位置に対応する値についての2のべき乗との積の和に点Gを乗じた基本テーブル値に対して非ゼロのテーブル補正値を加えたテーブル値が格納されているウィンドウテーブルを格納するデータ格納部と、ウィンドウをシフトさせつつ当該ウィンドウの各担当ビット位置のビット値をスカラー値dから読み出すことにより索引値を生成して当該索引値でウィンドウテーブルを検索してテーブル値を読み出し、読み出したテーブル値を用いて2倍演算及び加算演算を実施する演算処理部と、演算処理部の演算結果に対してテーブル補正値に応じた所定の補正値で補正を実施する補正部とを有する。
【発明の詳細な説明】
【技術分野】
【0001】
本技術は、楕円曲線暗号技術に関する。
【背景技術】
【0002】
情報化社会の発展に伴い、電子決済、住民基本台帳ネットワークなどの情報ネットワークを利用したサービスが普及すると予想される。これらのサービスを安全に運用するためには情報セキュリティ技術が必須であり、情報セキュリティの基盤技術として公開鍵暗号技術が用いられる。公開鍵暗号技術には様々な方式が知られているが、その中の主要な方式として楕円曲線暗号が知られている。公開鍵暗号技術を用いることで、暗号、デジタル署名又は認証機能といったサービスを実現し、個人情報に対する第三者からの不正なアクセスを防止することができる。
【0003】
また、電子決済、住民基本台帳ネットワークなどのサービスにおけるエンドユーザ側のデバイスとして、スマートカードが知られている。スマートカードはIC(Integrated Circuit)チップを搭載したカードであり、チップ内部のメモリ領域にユーザの秘密情報を格納している。スマートカードのICチップには暗号、デジタル署名又は認証機能を搭載しており、これらの機能のための処理を実施する際には、ユーザの秘密情報が鍵として用いられる。ユーザの秘密情報はカード内部のメモリ領域に格納されるため、第三者からの不正な覗き見に対する安全性(耐タンパ性)が磁気記録型のカードに比べて飛躍的に向上すると考えられている。
【0004】
しかし、1998年に電力解析攻撃(PA:Power Analysis。以下、PAと呼ぶ)と呼ばれる解析方法が発見されたことで、スマートカードの耐タンパ性に対する脆弱性が認識されるようになった。スマートカードは、ユーザの秘密情報を鍵として用いて暗号処理を実施しているが、PAは、暗号処理中のスマートカードの消費電力を測定し、測定されたデータを用いることでユーザの秘密情報を推定且つ解析するものである。
【0005】
PAは強力な解析法として知られており、PAの防止策についての必要性については、各種国際標準に記載されている。例えば、セキュリティの国際標準であるISO15408のスマートカード向けプロテクションプロファイル(PP:Protection Profile)ではPAへの対策が必須とされている。さらに、この攻撃は電力を観察する攻撃であるため、攻撃対象はスマートカードに限定されない。PDA(Personal Digital Assistant)デバイスに対して、電力消費時に発生する電磁波を測定するPAも知られており、PAは電力を消費する組み込み機器全般が攻撃対象となる。
【0006】
以下、公開鍵暗号技術の中で、楕円曲線暗号方式について基本的事項を説明すると共に、どのようにPAが実施されるかについて説明する。
【0007】
[楕円曲線暗号]
楕円曲線暗号は、図1に示されるような楕円曲線における有理点の演算を用いた暗号である。楕円曲線には、素体と2べきの2種類が存在する。それぞれ、2つのパラメータであるaとbとを用いて、以下の関係式のように表現可能である。
素体:y2=x3+ax+b (mod p)(x,y,a,b∈GF(p),p:素体)
2べき:y2+yx=x3+ax2+b (mod f(x))(x,y,a,b∈GF(2m),f(x):m次既約多項式)
【0008】
以下では、素体の楕円曲線を対象に説明を行うが、以下の議論は2べきの楕円曲線に対しても同様に適用できる。
【0009】
楕円曲線における有理点とは、楕円曲線の関係式を満たす(x,y)の集合である。楕円曲線では、任意の点に対し、「点の加算」と「点の2倍算」という2種類の演算が定義される。点は、二次元ベクトル(x,y)による表現(affine表現)と,三次元ベクトル(X,Y,Z)による表現(射影座標、Jacobian座標)によって表される。
【0010】
図2は、2つの楕円曲線上の点P及びQの加算を表している。点Pと点Qを加算した点Rは、以下のように定義される。すなわち、PとQを結ぶ直線と楕円曲線の交点から垂線を引き、その垂線と楕円曲線の交点がRと定義される。楕円曲線における点の加算では、一般的な整数の加算と同様に、交換則(A+B=B+A)が成立する。3次元ベクトル表現において、点の加算を行う場合、2点のうちどちらかの点のZ座標が1の場合、加算の高速化を実現可能となる。また、点の減算については、P=R−Qとすることで、同様に定義される。すなわち、点Rから垂線を引き、その垂線と楕円曲線の交点と点Qを結ぶ直線を引く。その直線と楕円曲線の交点が点Pとなる。
【0011】
Jacobian座標を用いた場合における点の加算の演算手順は、よく知られている。図3に詳細を示すが、素体における点Aと点Bの加算R=ECADD(A,B)=A+Bのためにステップ800乃至835が必要であることが分かる。なお、ECDBL(A)=A+Aである。詳細な説明は省略するが、一般的に、点の加算、点の減算は、整数の加算や減算に比べると、時間のかかる演算であること分かる。
【0012】
また、図4は、楕円曲線上の点Pの2倍算を表している。点Pの2倍算は以下のように定義される。すなわち、楕円曲線上の点Pから接線を引き、その接線と楕円曲線の交点から垂線を引き、その垂線と楕円曲線の交点が2倍算の結果Rと定義される。
【0013】
図5(a)及び(b)は、マイナス点と無限遠点を表している。図5(a)に示すように、楕円曲線上の点Pのマイナス点「−P」は、点Pから垂線を引き、その垂線と楕円曲線の交点と定義される。また、図5(b)に示すように、無限遠点は、点Pと点−Pを結ぶ直線と楕円曲線の交点と定義される。無限遠点Oは、一般的な整数の加算におけるゼロと同様の性質を持ち、A+O=O+A=A,2O=Oが成立する。
【0014】
さらに、楕円曲線暗号では、点のスカラー倍算(Elliptic Scalar Multiplication)と呼ばれる処理を用いた演算が行われる。点のスカラー倍算は、楕円曲線上の点A、スカラー値と呼ばれる整数xから、
V=xA
を満たす楕円曲線上の点Vを計算する処理であり、xを秘密情報とした処理が行われる。図1、図2、図4及び図5(a)及び(b)と同様な形で図示すると、点Aのスカラーd倍は、図6のように示される。より具体的には、点のスカラー倍算は、上で述べた点の加算及び2倍算を基にして行われる。ECDH(Elliptic Curve Diffie Hellman)鍵交換の場合、通信相手の公開鍵となる楕円曲線上の点をA、個人鍵をdとすると、
V=dA
を満たす楕円曲線上の点Vを計算することで、安全な鍵共有を実現する。個人鍵dの値を知らない第三者は正しい共有鍵の値を算出することができない。ここでは、dが個人の秘密鍵であり、攻撃者などの不正な第三者に漏洩してはならない値である。すなわち、dの値の保護が重要な耐タンパ機能となる。数学的には、d以外の値(すなわちA及びV)が既知だとしても、dを計算する計算量が大きすぎるため、現実的な時間内にdを求めることが難しい問題として知られている(すなわち、楕円曲線上の離散対数問題。)。すなわち、楕円曲線パラメータ(Elliptic Curve Parameter)が160ビット以上の場合、AやVの値を知っていたとしても、dの値を求めることが困難となる。
【0015】
このように、数学的に求めることが困難な個人鍵dであるが、上で述べたPAを用いることで容易に解読することができることが知られている。PAの基本メカニズムは、点のスカラー倍算の処理手順と大きな関連があり、PAを用いることで、dを1ビット単位で解読できることが知られている。
【0016】
楕円曲線上の点Aのd倍点V(=dA)は、上でも述べたように点の加算と2倍算を用いて算出される。このような演算手法は、楕円曲線上の演算に限らず、様々な場面で用いられる。具体的には、よく知られているバイナリ法、Window法、櫛型Window法などが挙げられる。以下では、Window法及び櫛型Window法を用いた点のスカラー倍算を説明する。
【0017】
図7に、Window法を用いた、点のスカラー倍算のアルゴリズムを示す。ここでは、楕円曲線上の点G、スカラー値をd(例として12ビット幅)として、A=dGを求めるものとする。例として、Window法のWindow幅を3ビットとし、Windowテーブルの要素数を23=8個とする。具体的には、索引「000」に対応付けて0G=O(ゼロ点)を設定し、索引「001」に対応付けて20Gを設定し、索引「010」に対応付けて21Gを設定し、索引「011」に対応付けて21G+20を設定し、索引「100」に対応付けて22Gを設定し、索引「101」に対応付けて22+20Gを設定し、索引「110」に対応付けて22+21を設定し、索引「111」に対応付けて22+21+20を設定するようになっている。
【0018】
このようなWindowテーブルを用いた具体的な演算手順は以下のとおりである。最初に、手順(1)において、dの上位3ビットを索引として、Windowテーブルのテーブル値を読み出す。これを変数Aに代入する。すなわち、(1)A=Tab[d11,d10,d9](Tab[x]は、[x]で指定されたテーブル値を表す)。
【0019】
次に、手順(2)において、Windowのシフト幅である3ビットに応じて、23Aを算出する。すなわち、(2)A=23A。また、手順(3)において、dの次の3ビットを索引として、Windowテーブルのテーブル値を読み出し、Aに加算する。すなわち、(3)A=A+Tab[d8,d7,d6]。さらに、手順(4)において、Windowのシフト幅である3ビットに応じて、23Aを算出する。すなわち、(4)A=23A。また、手順(5)において、dの次の3ビットを索引として、Windowテーブルのテーブル値を読み出し、Aに加算する。すなわち、(5)A=A+Tab[d5,d4,d3]。
【0020】
さらに、手順(6)において、Windowのシフト幅である3ビットに応じて、23Aを算出する。すなわち、(6)A=23A。最後に、手順(7)において、dの次の3ビットを索引として、Windowテーブルのテーブル値を読み出し、Aに加算する。すなわち、(7)A=A+Tab[d2,d1,d0]=dG。
【0021】
図8に、d=(101011101001)2とした場合の具体例を図示する。なお、Windowテーブルは同じである。まず、手順(1)において、dの上位3ビット「101」を索引として、Windowテーブルのテーブル値を読み出す。これを変数Aに代入する。すなわち、(1)A=Tab[101]=(22+20)G。
【0022】
次に、手順(2)において、Window幅である3ビットに応じて、23Aを算出する。すなわち、(2)A=23A=(25+23)G。また、手順(3)において、dの次の3ビット「011」を索引として、Windowテーブルのテーブル値を読み出し、Aに加算する。すなわち、(3)A=A+Tab[011]=(25+23+21+20)G。さらに、手順(4)において、Windowのシフト幅である3ビットに応じて、23Aを算出する。すなわち、(4)A=23A=(28+26+24+23)G。
【0023】
また、手順(5)において、dの次の3ビット「101」を索引として、Windowテーブルのテーブル値を読み出し、Aに加算する。すなわち、(5)A=A+Tab[101]=(28+26+24+23+22+20)G。さらに、手順(6)において、Windowのシフト幅である3ビットに応じて、23Aを算出する。すなわち、(6)A=23A=(211+29+27+26+25+23)G。最後に、手順(7)において、dの次の3ビット「101」を索引として、Windowテーブルのテーブル値を読み出し、Aに加算する。すなわち、(7)A=A+Tab[001]=(211+29+27+26+25+23+20)G=dG。
【0024】
次に、図9を用いて櫛形Window法を用いた点のスカラー倍算を説明する。櫛形Window法では、その名前のとおり、櫛形にWindowテーブルを設定する。すなわち、通常のWindow法では、索引「111」に対応付けられているテーブル値が「(22+21+20)G」のように連続する値であったが、櫛形Window法では、とびとびの値がWindowテーブルに登録されている。具体的には、索引「000」に対応付けて0G=O(ゼロ点)を設定し、索引「001」に対応付けて20Gを設定し、索引「010」に対応付けて24Gを設定し、索引「011」に対応付けて24G+20を設定し、索引「100」に対応付けて28Gを設定し、索引「101」に対応付けて28+20Gを設定し、索引「110」に対応付けて28+24を設定し、索引「111」に対応付けて28+24+20を設定するようになっている。
【0025】
このようなWindowテーブルを用いた具体的な演算手順は以下のとおりである。なお、Window法では、23倍算を行う必要があるが、櫛形Window法では2倍算ですむ利点がある。これにより点のスカラー倍算全体における点の2倍算の回数が1/3となる。一般に、Window幅がkビットの櫛型Window法では、2倍算の回数が1/kに削減できる。
【0026】
まず、手順(1)において、3ビットおきにdにおける3ビットを索引値として用いて、Windowテーブルのテーブル値を読み出す。これを変数Aに代入する。すなわち、(1)A=Tab[d11,d7,d3]。 次に、手順(2)において、Windowのシフト幅1ビットに応じて、2Aを算出する。すなわち、(2)A=2A。また、手順(3)において、dにおいて手順(1)の状態からwindowを1ビット右シフトさせて得られる次の3ビットを索引として、Windowテーブルのテーブル値を読み出し、Aに加算する。すなわち、(3)A=A+Tab[d10,d6,d2]。さらに、手順(4)において、Windowのシフト幅1ビットに応じて、2Aを算出する。すなわち、(4)A=2A。
【0027】
また、手順(5)において、dにおいて手順(3)の状態からwindowを1ビット右シフトさせて得られる次の3ビットを索引として、Windowテーブルのテーブル値を読み出し、Aに加算する。すなわち、(5)A=A+Tab[d9,d5,d1]。さらに、手順(6)において、Windowのシフト幅1ビットに応じて、2Aを算出する。すなわち、(6)A=2A。最後に、手順(7)において、dにおいて手順(5)の状態からwindowを1ビット右シフトさせて得られる次の3ビットを索引として、Windowテーブルのテーブル値を読み出し、Aに加算する。すなわち、(7)A=A+Tab[d8,d4,d0]=dG。
【0028】
図10に、d=(101011101001)2とした場合の具体例を図示する。なお、Windowテーブルは同じである。
【0029】
まず、手順(1)において、最上位から3ビットおきにdから得られる3ビット「111」を索引として、Windowテーブルのテーブル値を読み出す。これを変数Aに代入する。すなわち、(1)A=Tab[111]=(28+24+20)G。
【0030】
次に、手順(2)において、Windowのシフト幅1ビットに応じて、2Aを算出する。すなわち、(2)A=2A=(29+25+21)G。また、手順(3)において、手順(1)から1ビット右シフトさせてdから得られる次の3ビット「010」を索引として、Windowテーブルのテーブル値を読み出し、Aに加算する。すなわち、(3)A=A+Tab[010]=(29+25+24+21)G。さらに、手順(4)において、Windowのシフト幅1ビットに応じて、2Aを算出する。すなわち、(4)A=2A=(210+26+25+22)G。
【0031】
また、手順(5)において、手順(3)から1ビット右シフトさせてdから得られる次の3ビット「110」を索引として、Windowテーブルのテーブル値を読み出し、Aに加算する。すなわち、(5)A=A+Tab[110]=(210+28+26+25+24+22)G。さらに、手順(6)において、Windowのシフト幅1ビットに応じて、2Aを算出する。すなわち、(6)A=2A=(211+29+27+26+25+23)G。最後に、手順(7)において、手順(5)から1ビット右シフトさせてdから得られる次の3ビット「001」を索引として、Windowテーブルのテーブル値を読み出し、Aに加算する。すなわち、(7)A=A+Tab[001]=(211+29+27+26+25+23+20)G=dG。このように図8と同じ結果が得られる。
【0032】
上で述べた櫛型Window法では、Windowテーブルを1個用いる例を示した。ここでWindowテーブルを2個用いて記憶テーブルの領域を増大させる代わりに、2倍算の回数をさらに減少させて高速化を図る方式も存在する。このような櫛型Window法について図11A及び図11Bを用いて説明する。
【0033】
このような櫛形Window法では、dの上位半分のビットブロックのための上側テーブルと、dの下位半分のビットブロックのための下側テーブルとを用意する。以下では、dが18ビットの例を示す。具体的には、上側テーブルには、索引「000」に対応付けて0G=O(ゼロ点)を設定し、索引「001」に対応付けて29Gを設定し、索引「010」に対応付けて212Gを設定し、索引「011」に対応付けて212G+29を設定し、索引「100」に対応付けて215Gを設定し、索引「101」に対応付けて215+29Gを設定し、索引「110」に対応付けて215+212を設定し、索引「111」に対応付けて215+212+29を設定するようになっている。
【0034】
一方、下側テーブルには、索引「000」に対応付けて0G=O(ゼロ点)を設定し、索引「001」に対応付けて20Gを設定し、索引「010」に対応付けて23Gを設定し、索引「011」に対応付けて23G+20を設定し、索引「100」に対応付けて26Gを設定し、索引「101」に対応付けて26+20Gを設定し、索引「110」に対応付けて26+23を設定し、索引「111」に対応付けて26+23+20を設定するようになっている。
【0035】
このようなWindowテーブルを用いた具体的な演算手順は以下のとおりである。最初に、手順(1)において、dの上位半分のビットブロックのうち2ビット間隔で3ビットを索引として抽出し、上側テーブルの該当するテーブル値を読み出す。これを変数Aに代入する。すなわち、(1)A=TabH[d17,d14,d11]。TabHについては、上側テーブルのテーブル値を表す。次に、手順(2)において、dの下位半分のビットブロックのうち2ビット間隔で3ビットを索引として抽出し、下側テーブルの該当するテーブル値を読み出し、Aに加算する。すなわち、(2)A=A+TabL[d8,d5,d2]。TabLについては、下側テーブルのテーブル値を表す。
【0036】
そして、Windowのシフト幅1ビットに応じて、2Aを算出する。すなわち、(3)A=2A。また、手順(4)において、手順(1)の状態からwindowを1ビット右シフトさせて上位半分のビットブロックの次の3ビットを索引として抽出し、上側テーブルのテーブル値を読み出し、Aに加算する。すなわち、(5)A=A+TabH[d16,d13,d10]。また、手順(5)において、手順(2)の状態からwindowを1ビット右シフトさせて下位半分のビットブロックの次の3ビットを索引として抽出し、下側テーブルのテーブル値を読み出し、Aに加算する。すなわち、(5)A=A+TabL[d7,d4,d1]。さらに、手順(6)において、Windowのシフト幅1ビットに応じて、2Aを算出する。すなわち、(6)A=2A。
【0037】
また、手順(7)において、手順(4)の状態からwindowを1ビット右シフトさせて上位半分の次の3ビットを索引として抽出し、上側テーブルのテーブル値を読み出し、Aに加算する。すなわち、(7)A=A+TabH[d15,d12,d9]。また、手順(8)において、手順(5)の状態からwindowを1ビット右シフトさせて下位半分のビットブロックの次の3ビットを索引として抽出し、下側テーブルのテーブル値を読み出し、Aに加算する。すなわち、(8)A=A+TabL[d6,d3,d0]=dG。
【0038】
このように、図9からdのビット長が長くなったが、図9に示した3ビット幅からあたかも6ビット幅へ長くなったWindowテーブルを用いているので、2倍算の回数も削減されている。
【0039】
上で述べたWindow法や櫛型Window法では、Windowテーブルの索引値が「000」の場合、テーブル値がO(無限遠点)となる。スカラー倍算を実行しているデバイスの消費電力を測定すると、模式的には図12(a)及び(b)に示すようになる。すなわち、索引値が非0の場合(C=A+B)には図12(a)のような波形が得られ、0の場合(C=A+O)には図12(b)のような波形が得られる。このように、明らかに異なった波形が得られる。これはO点との加算時には、特殊な演算処理を実行するためである。従って、消費電力波形より、秘密情報であるdの部分的なビット値が0であるという情報が漏洩することになる。
【0040】
このようなdの部分的なビット値「0」を用いることで、秘密鍵dの全ビットを解読する数学的なアルゴリズムも知られている。また、スカラー倍算を署名生成に用いる場合、署名用の秘密鍵が漏洩するという問題も知られている。
【0041】
このため、A=dGを計算する際に、秘密情報であるdの値を1ビットたりとも漏洩させないことが非常に重要である。
【0042】
点のスカラー倍算を用いた楕円曲線暗号の代表的な処理として、ECDSA(Elliptic Curve Digital Signature Algorithm)を用いた署名生成処理が知られている。この処理のアルゴリズムを、図13に示す。この処理は、署名用の個人鍵s及び署名対象データhiを入力とし、一時的な乱数diを生成し、点のスカラー倍算diG(但し、Gはベースポイントと呼ばれる公開された点)を含む演算処理を行うことで、hi、署名データ(ui,vi)を出力する処理である。ただし、iは署名生成処理の処理回数を表す変数である。なお、rは、公開された素数値であり、di-1は、di-1×di=1 (mod r)を満たすような整数値である。
【0043】
ECDSA署名をスマートカードなどの装置に実装する場合、署名用の個人鍵sと一時的な乱数diは外部から観察できない値である。特に、署名用の個人鍵sは重要な情報資産であり、厳重に保護する必要がある。しかし、Howgrave-Grahamらによる攻撃手法を用いることで、図14に示すように、一時的な乱数diの上位又は下位の数ビットのデータを攻撃者が多数集めることに成功した場合、この集めたデータと外部に対する出力データhi及び(ui,vi)を組み合わせることで、署名用の個人鍵sを解読できる。
【0044】
diの値は通常は外部から観察されない値であるが、もしSPA(simple PA。単純な電力消費波形の解析。)による攻撃能力を有する攻撃者が、点のスカラー倍算diGの演算時にSPAを用いた場合、diの最上位又は最下位数ビットを解読することが可能である。この結果をHowgrave-Grahamらによる攻撃手法と組み合わせることで、攻撃者は個人鍵sを解読することができる。この攻撃の組み合わせを考慮すると、diGの演算にSPAを適用した場合でも、diに関する情報を1ビットも漏洩しないことがセキュリティ上必須である。
【0045】
秘密情報であるdの値を漏洩させないためには、索引値が非0の場合(C=A+B)と、0の場合(C=A+O)で、消費電力波形を同一にし、攻撃者に区別させない手法が考えられる。従来から知られている技術として、Coronらによって提案されたダミー演算法がある。図15に、櫛型Window法におけるダミー演算法の概略を示す。基本的な動作は図9を用いて説明したとおりであるが、ダミー演算法では、手順(1)を除き、dから該当する索引値を決定すると、「000」であるか否かを確認する処理を実施する。テーブルの索引値が「000」の場合、計算結果を格納する本来の変数Aではなく、ダミー用の変数Bに、非0のテーブル値を加算する。図15の例では、手順(3)、(5)及び(7)において、索引値が「000」であれば、ダミー用変数Bに、索引値が例えば「001」(「000」以外の他の値でも良い)のテーブル値とAを加算した結果を格納する。このようにすることで、ダミー演算法では、索引値が「000」の場合の消費電力波形を、非0の場合と同一にすることができ、秘密情報dの漏洩を防ぐことができる。
【0046】
ダミー演算法では、何の対策も施さない場合と比較し、PAに対して安全となり且つ計算量は増加しない。しかし、ダミー用の変数Bを必要とする。なぜなら、ダミー演算は変数Aに格納されている中間データを破壊しないように実行する必要があるため、変数Bは変数Aと別の記憶領域とする必要があるからである。よって、SPA対策を施さない場合には、変数Aのみを格納する記憶領域(RAM:Random Access Memory)を必要としたのに対し、ダミー演算法では、変数Aと変数Bを格納するRAMが必要となる。すなわち、必要とするRAMが2倍となってしまう。スマートカードのような実装形態において、RAM資源はROM資源に比べて容量が限られており、これを削減することは非常に重要な課題である。
【先行技術文献】
【非特許文献】
【0047】
【非特許文献1】IEEE P1363/D13 (Draft Version 13, November 12, 1999) main document, Standard Specifications for Public Key Cryptography
【非特許文献2】P.Kocher, J,Jaffe and B.Jun "Differential Power Anaysis", Crypto'99, LNCS 1666, pp.388-397, Springer-Verlag, 1999.
【非特許文献3】Catherine H. Gebotys, Simon Ho, and C.C. Tiu, “EM Analysis of Rijndael and ECC on a Wireless Java-Based PDA”, Cryptographic Hardware and Embedded System, CHES 2005, pp.250-264, LNCS 3659.
【非特許文献4】N.A.Howgrave-Graham and N.P.Smart, “Lattice Attacks on Digital Signature Schemes”, Designs, Codes and Cryptography, vol.23, Issue3, 2001, pp.283-290.
【非特許文献5】IEEE 1363-2000: Standard Specifications For Public Key Cryptography
【発明の概要】
【発明が解決しようとする課題】
【0048】
上で述べたように、スマートカードやPDAといった小型機器のように使用できるハードウェア・リソースが限られている場合に、PA対策を行いつつ、RAMの記憶領域の使用を抑えることはできなかった。
【0049】
従って、本技術の目的は、SPAに対する耐タンパ性を保持しつつ、メモリ特にRAMの使用量を削減するための技術を提供することである。
【課題を解決するための手段】
【0050】
第1の態様に係る楕円曲線暗号演算装置は、楕円曲線上の所定の点Gのスカラー倍算を実施する楕円曲線暗号演算装置であって、(A)n(nは2以上の整数)ビットのスカラー値dに対するウィンドウのウィンドウ幅k(kは2以上の整数)ビットと同じビット数の各索引値に対応付けて、当該索引値の各ビットの値と当該ビットが担当するスカラー値d中の相対ビット位置に対応する値についての2のべき乗との積の和に点Gを乗じた基本テーブル値に対して非ゼロのテーブル補正値を加えたテーブル値が格納されているウィンドウテーブルを格納するデータ格納部と、(B)ウィンドウをシフトさせつつ当該ウィンドウの各ビットの担当ビット位置のビット値をスカラー値dから読み出すことにより索引値を生成して当該索引値でウィンドウテーブルを検索してテーブル値を読み出し、読み出したテーブル値を用いて2倍演算及び加算演算を実施する演算処理部と、(C)演算処理部の演算結果に対してテーブル補正値に応じた所定の補正値で補正を実施する補正部とを有する。
【0051】
第2の態様に係る楕円曲線暗号演算装置は、(A)n(nは2以上の整数)ビットのスカラー値dに対するウィンドウのウィンドウ幅k(kは2以上の整数)ビットと同じビット数の各索引値に対応付けて、当該索引値の各ビットの値と当該ビットが担当するスカラー値d中の相対ビット位置に対応する値についての2のべき乗との積の和に点Gを乗じた基本テーブル値に対して点Gの第2のスカラー値x倍のテーブル補正値を加えたテーブル値が格納されているウィンドウテーブルを格納するデータ格納部と、(B)スカラー値dに対して第2のスカラー値xに応じた所定の補正値で補正を実施して、第3のスカラー値fを生成する補正部と、(C)ウィンドウをシフトさせつつ当該ウィンドウの各ビットの担当ビット位置のビット値を第3のスカラー値fから読み出すことにより索引値を生成して当該索引値でウィンドウテーブルを検索してテーブル値を読み出し、読み出したテーブル値を用いて2倍演算及び加算演算を実施する演算処理部とを有する。
【0052】
第3の態様に係る楕円曲線暗号演算装置は、(A)n(nは2以上の整数)ビットのスカラー値dのブロック毎に、当該ブロックに対するウィンドウのウィンドウ幅k(kは2以上の整数)ビットと同じビット数の各索引値に対応付けて、当該索引値の各ビットの値と当該ビットが担当するブロック中の相対ビット位置及び前記スカラー値d中の当該ブロックの相対位置に対応する値についての2のべき乗との積の和に前記点Gを乗じた基本テーブル値に対して非ゼロのブロックテーブル補正値を加えたテーブル値が格納されているウィンドウテーブルを格納するデータ格納部と、(B)ウィンドウをシフトさせつつ当該ウィンドウの各ビットの担当ビット位置のビット値をスカラー値dの各ブロックから読み出すことにより索引値を生成して当該索引値で各ブロックのウィンドウテーブルを検索してテーブル値を読み出し、読み出したテーブル値を用いて2倍演算及び加算演算を実施する演算処理部とを有する。そして、各ブロックについてのブロックテーブル補正値の総和がゼロとなっている。
【発明の効果】
【0053】
SPAに対する耐タンパ性を保持しつつ、処理速度の低下を抑え且つメモリ特にRAMの使用量を削減できるようになる。
【図面の簡単な説明】
【0054】
【図1】図1は、楕円曲線を説明するための図である。
【図2】図2は、楕円曲線上の加算を説明するための図である。
【図3】図3は、楕円曲線上の加算演算の具体的アルゴリズムを表す図である。
【図4】図4は、楕円曲線上の2倍算を説明するための図である。
【図5】図5(a)は、楕円曲線上のマイナス点を説明するための図であり、図5(b)は、無限遠点を説明するための図である。
【図6】図6は、楕円曲線上の点のスカラー倍を説明するための図である。
【図7】図7は、Window法による点のスカラー倍算のアルゴリズムの概要を説明するための図である。
【図8】図8は、Window法による点のスカラー倍算の具体例を説明するための図である。
【図9】図9は、櫛形Window法による点のスカラー倍算のアルゴリズムの概要を説明するための図である。
【図10】図10は、櫛形Window法による点のスカラー倍算の具体例を説明するための図である。
【図11A】図11Aは、Windowテーブルを2つ用いる櫛形Window法による点のスカラー倍算のアルゴリズムを説明するための図である。
【図11B】図11Bは、Windowテーブルを2つ用いる櫛形Window法による点のスカラー倍算のアルゴリズムを説明するための図である。
【図12】図12(a)は、索引値が非ゼロの場合の消費電力波形を表す図であり、図12(b)は、索引値がゼロの場合の消費電力波形を表す図である。
【図13】図13は、署名生成処理のアルゴリズムの一例を示す図である。
【図14】図14は、署名生成処理からビット値を盗み出す例を説明するための図である。
【図15】図15は、従来技術であるダミー演算法を説明するための図である。
【図16】図16は、楕円曲線暗号演算装置の一例であるスマートカードを示す図である。
【図17】図17は、実施の形態1−Aに係る楕円曲線暗号演算装置の構成例を示す図である。
【図18A】図18Aは、実施の形態1−AにおけるWindowテーブルの具体例を示す図である。
【図18B】図18Bは、実施の形態1−Aにおける演算処理の具体例を示す図である。
【図19】図19は、実施の形態1−Aにおける一般化したWindowテーブルを示す図である。
【図20】図20は、実施の形態1−Aにおける処理フローを示す図である。
【図21】図21は、実施の形態1−Bに係る楕円曲線暗号演算装置の構成例を示す図である。
【図22】図22は、実施の形態1−Bにおける処理フローを示す図である。
【図23】図23は、実施の形態2−Aに係る楕円曲線暗号演算装置の構成例を示す図である。
【図24A】図24Aは、実施の形態2−AにおけるWindowテーブルの具体例を示す図である。
【図24B】図24Bは、実施の形態2−Aにおける演算処理の具体例を示す図である。
【図25】図25は、実施の形態2−Aにおける一般化したWindowテーブルを示す図である。
【図26】図26は、実施の形態2−Aにおける処理フローを示す図である。
【図27】図27は、実施の形態2−Bに係る楕円曲線暗号演算装置の構成例を示す図である。
【図28】図28は、実施の形態2−Bにおける処理フローを示す図である。
【図29】図29は、実施の形態3に係る楕円曲線暗号演算装置の構成例を示す図である。
【図30A】図30Aは、実施の形態3におけるWindowテーブルの具体例を示す図である。
【図30B】図30Bは、実施の形態3における演算処理の具体例を示す図である。
【図31】図31は、実施の形態3における一般化したWindowテーブルを示す図である。
【図32】図32は、実施の形態3における処理フローを示す図である。
【図33】図33は、実施の形態4に係る楕円曲線暗号演算装置の構成例を示す図である。
【図34A】図34Aは、実施の形態4におけるWindowテーブルの具体例を示す図である。
【図34B】図34Bは、実施の形態4における演算処理の具体例を示す図である。
【図35】図35は、実施の形態4における一般化したWindowテーブルを示す図である。
【図36】図36は、実施の形態4における処理フローを示す図である。
【図37】図37は、実施の形態5に係る楕円曲線暗号演算装置の構成例を示す図である。
【図38A】図38Aは、実施の形態5におけるWindowテーブルの具体例を示す図である。
【図38B】図38Bは、実施の形態5における演算処理の具体例を示す図である。
【図39】図39は、実施の形態5における一般化したWindowテーブルを示す図である。
【図40】図40は、実施の形態5における一般化したWindowテーブルを示す図である。
【図41】図41は、実施の形態5における処理フローを示す図である。
【図42】図42は、実施の形態6に係る楕円曲線暗号演算装置の構成例を示す図である。
【図43】図43は、実施の形態6における処理フローを示す図である。
【図44】図44は、楕円曲線暗号演算装置の構成例を示す図である。
【図45】図45は、楕円曲線暗号演算装置の構成例を示す図である。
【発明を実施するための形態】
【0055】
本技術の実施の形態に係る楕円曲線暗号演算装置100は、図16に示すように、例えばスマートカードとして実施される。また、携帯電話機、PDAその他の小型機器、場合によってはパーソナルコンピュータその他の機器として実施するようにしても良い。
【0056】
[実施の形態1−A]
本実施の形態に係る楕円曲線暗号演算装置100の装置構成例を図17に示す。楕円曲線暗号演算装置100では、バス1に、CPU(Central Processing Unit)3と、演算器5と、ROM7と、RAM9と、通信部11とが接続されている。ROM7は、以下で説明する処理をCPU3に実行させるための演算プログラム71と、以下で述べる補正点データ73と、通常のWindow法のWindowテーブルをベースとしたものであって以下で述べるWindowテーブル75とが記録されている。演算器5は、従来から知られている楕円曲線上の点の加算ECADD(A,B)を演算する加算演算部51と、従来から知られている楕円曲線上の点の2倍演算ECDBL(A)を実施する2倍演算部53とを有する。また、演算プログラム71をCPU3が実行すると、制御部31及び以下で述べるような演算結果の補正処理を実施する補正部33が実現される。また、外部装置との通信を行うため通信部11を設ける例を示しているが、他の機能を実現するための装置が設けられる場合もある。RAM9は、CPU3が各種処理を実施する際に用いるデータを格納するものであり、本実施の形態では、楕円曲線におけるベースポイントGのスカラー値d倍を算出するために用いる変数Aのための領域が用意される。その他にも演算に必要なデータもRAM9には格納されるが、耐タンパ性を保持させるために追加で必要な領域は存在しない。
【0057】
まず、本実施の形態1−Aについての演算処理を具体的な例を用いて説明する。本具体例のためのWindowテーブル75の内容を図18Aに示す。図18Aの例では、楕円曲線上の点Gのスカラー値d倍を算出する場合を念頭に、スカラー値dが12ビットであり、Window幅が3ビットであるものとする。従って、このWindowテーブル75の要素数は23=8個である。そして、図7に示したPA対策なしの場合と比較すると、各テーブル値にテーブル補正値Fが加えられていることが分かる。
【0058】
具体的には、索引「000」に対応付けて0G+F=Fを設定し、索引「001」に対応付けて20G+Fを設定し、索引「010」に対応付けて21G+Fを設定し、索引「011」に対応付けて21G+20G+Fを設定し、索引「100」に対応付けて22G+Fを設定し、索引「101」に対応付けて22G+20G+Fを設定し、索引「110」に対応付けて22G+21G+Fを設定し、索引「111」に対応付けて22G+21G+20G+Fを設定するようになっている。テーブル補正値Fは、楕円曲線上の点であるが、どのような点であっても良い。例えば、xをスカラー値とすると、xGのような点であってもよい。但し、非ゼロでなければならない。
【0059】
以下で一般的なテーブル値については数式で表すが、索引値の上位1ビットの値が22Gに対応し、索引値の2番目のビットの値が21Gに対応し、索引値の3番目のビットの値が20Gに対応している。従って、索引値の各ビットの0又は1に応じて、22G、21G及び20Gが加算されたりされなかったりする。なお、2のべき指数は、Window(すなわち索引値)において各ビットが担当する、スカラー値dにおける相対ビット位置に応じて設定される。すなわち、以下で述べるように、本実施の形態では、3ビット連続してスカラー値のビット値を読み出すので、Windowの最下位ビットについてのべき指数を「0」とすると、2番目のビットについてのべき指数は「1」となり、最上位のビットについてのべき指数は「2」となる。
【0060】
このようなWindowテーブル75を用いた具体的な演算手順は図18Bに示すとおりである。最初に、手順(1)において、dの上位3ビットを索引として、Windowテーブル75のテーブル値を読み出す。これを変数Aに代入する。すなわち、(1)A=Tab[d11,d10,d9](Tab[]は、[]で指定されたテーブル値を表す)。
【0061】
次に、手順(2)において、Windowのシフト幅である3ビットに応じて、23Aを算出する。すなわち、(2)A=23A。また、手順(3)において、dにおける次の3ビットを索引として、Windowテーブル75のテーブル値を読み出し、Aに加算する。すなわち、(3)A=A+Tab[d8,d7,d6]。さらに、手順(4)において、Windowのシフト幅である3ビットに応じて、23Aを算出する。すなわち、(4)A=23A。また、手順(5)において、dにおける次の3ビットを索引として、Windowテーブル75のテーブル値を読み出し、Aに加算する。すなわち、(5)A=A+Tab[d5,d4,d3]。
【0062】
さらに、手順(6)において、Windowのシフト幅である3ビットに応じて、23Aを算出する。すなわち、(6)A=23A。手順(7)において、dの次の3ビットを索引として、Windowテーブル75のテーブル値を読み出し、Aに加算する。すなわち、(7)A=A+Tab[d2,d1,d0]。
【0063】
ここまでは図7を用いて説明したものと同じであるが、当然ながらWindowテーブル75の各テーブル値には(001001001001)2Fが加算されてしまっているので、手順(7)の演算結果にも余分にFが加算されてしまっている。そこで、その分を手順(7)の結果から差し引かなければならない。本実施の形態のようにWindow法を採用する場合には、手順(8)においては、(001001001001)2Fを補正点データ73として採用し、A=A−(001001001001)2Fを算出する。
【0064】
以上のように手順(8)を除き、基本的にはPA対策なしの場合の演算処理と同じであるが、索引値「000」に対してもテーブル値「F」が読み出されるので、ゼロの加算は絶対に行われない。すなわち、図12(B)のような消費電力波形は出現しない。また、ダミー演算のように変数のためのRAM領域を増加させる必要もない。
【0065】
次に、図18Aに示したWindowテーブル75を一般化したものを図19に示す。ここで、索引値yを(yk-1||yk-2||・・・y1||y0)と表すものとする。そうすると、右からx番目のビットはyx-1と表される。また、Window幅はkビットとする。
【0066】
そうすると、図19に示すように、索引値yのテーブル値は、以下のように表される。
(yk-1×2k-1+yk-2×2k-2+・・・+y1×21+y0×20)G+F
【0067】
上でも述べたように、kビットの索引値の右からj番目のビットは、yj-1×2j-1に対応する。Window法の場合には、スカラー値dから連続したkビットを読み出すので、kビットの索引値の右からj番目のビットについての2のべき指数は、当該j番目のビットが担当する、スカラー値dにおける相対ビット位置(j−1)となる。
【0068】
従って、索引値「0」のテーブル値はテーブル補正値の「F」であり、索引値「1」のテーブル値は、y0のみ「1」であるから20G+Fとなる。索引値「2」のテーブル値は、y1のみ「1」であるから21G+Fとなる。さらに、索引値「2k−1」のテーブル値は、yk-1乃至y0の全てが「1」であるから、(2k-1+2k-2+・・・+21+20)G+Fとなる。
【0069】
次に、図20を用いて、楕円曲線暗号演算装置の処理フローについて説明する。まず、制御部31は、RAM9又はROM7に格納されているnビットのスカラー値d及び楕円曲線上のベースポイントGを読み出す(ステップS1)。そして、制御部31は、スカラー値dの最上位ビットからkビット幅のwindowで値を読み出して、索引値を取得する(ステップS3)。スカラー値dを{dn-1||dn-2||・・・d1||d0}のような形で表すとすると、dから読み出される値w┌n/k┐-1は、以下のように表される。
w┌n/k┐-1={dk*(┌n/k┐-1)+(k-1)||・・・dk*(┌n/k┐-1)+1||dk*(┌n/k┐-1)+0}
【0070】
なお、┌n/k┐は、n/kより大きい最小の整数を表す。例えばn=12で、k=3であれば、┌n/k┐-1=3となる。また、k*(┌n/k┐-1)+(k−1)=3*3+(3−1)=11となる。dが12ビットの場合、11は最上位ビットの番号である。
【0071】
そして、制御部31は、Windowテーブル75から索引値w┌n/k┐-1に対応するテーブル値を読み出し、変数Aに設定する(ステップS5)。すなわち、以下のように表される。
A=W[w┌n/k┐-1]
W[z]は、Windowテーブル75において索引値zに対応付けられているテーブル値である。
【0072】
そして、制御部31は、カウンタiに、┌n/k┐−2を設定する(ステップS7)。
【0073】
さらに、制御部31は、スカラー値dにおいてカウンタiで規定されるビット位置からkビット幅のwindowで値を読み出して、索引値を取得する(ステップS9)。
【0074】
dから読み出される値wiは、以下のように表される。
wi={dk*i+(k-1)||・・・dk*i+1||dk*i+0}
これによって、windowの位置がkビット右シフトされることになる。
【0075】
そして、制御部31は、変数Aの2倍演算を、windowの右シフト幅であるk回演算器5の2倍演算部53に実施させる(ステップS11)。図20では、ECDBL(A)で、楕円曲線上におけるAの2倍演算を表す。2倍演算自体は周知であるからこれ以上述べない。
【0076】
さらに、制御部31は、変数Aと、索引値wiでWindowテーブル75を検索することにより得られるテーブル値W[wi]との加算演算を、演算器5の加算演算部51に実施させる(ステップS13)。図20では、ECADD(A,W[wi])で、AとW[wi]との、楕円曲線上における加算演算を表す。加算演算自体は周知であるからこれ以上述べない。
【0077】
そして、制御部31は、カウンタiの値を1デクリメントし(ステップS15)、iが0以上であるか判断する(ステップS17)。iが0以上であればステップS9に戻る。すなわち、iが0未満になるまでステップS9乃至S17を繰り返す。
【0078】
iが0未満になると、補正部33は、補正のための演算を実施する(ステップS19)。すなわちA=A−補正点=dGであり、補正点は、上で述べたように、kビットの最下位ビットのみが「1」となっているビット列を┌n/k┐個並べた値(全部で┌n/k┐*kビット)を楕円曲線上の点Fに乗じた値である。従って、補正点データ73をROM7から読み出して、上記演算に用いる。この演算は、補正部33が演算器5を利用して実施するが、その詳細は周知であるからこれ以上述べない。
【0079】
制御部31は、このようにして得られた変数Aの値を、指定された出力先に出力する(ステップS21)。変数Aの値は、例えば通信部11から外部に出力される場合もあれば、他の演算プログラムに出力されて処理に用いられる。
【0080】
以上述べたように、Windowテーブル75において通常のテーブル値に非ゼロのテーブル補正値を加算しておき、ステップS19でその分演算値に対して補正を行うことによって、どのようなスカラー値dに対しても同じ演算が繰り返されるようになる。すなわちPAが行われてもスカラー値dのビットを盗み取られることはない。また、処理としてはステップS19だけが追加されているので、処理速度の面でもPA対策なしの場合に比してパフォーマンスが大幅に落ちることはない。また、RAM9において使用される容量は、PA対策なしの場合と同じである。ROM7において使用される容量は、補正点データ73の分だけ増加するが、増加量は大きくない。すなわち、ROMに比べてRAMの容量が限られているスマートカードのような実装形態において、本実施の形態は特に有用となる。
【0081】
[実施の形態1−B]
本実施の形態は、実施の形態1−Aの変形である。本実施の形態に係る楕円曲線暗号演算装置100の装置構成例を図21に示す。図21において、図17と同じ構成要素については同じ参照番号が付されている。実施の形態1−Aとの差は、ROM7に、補正点データ73が記録されていないことと、それに応じて必要な処理が異なるため演算プログラムが異なる点である。
【0082】
すなわち、楕円曲線暗号演算装置100では、バス1に、CPU3と、演算器5と、ROM7と、RAM9と、通信部11とが接続されている。ROM7は、以下で説明する処理をCPU3に実行させるための演算プログラム71bと、Windowテーブル75とが記録されている。演算器5は、加算演算部51と、2倍演算部53とを有する。また、演算プログラム71bをCPU3が実行すると、制御部31及び以下で述べるような演算結果の補正処理を実施する補正部33bが実現される。Windowテーブル75に格納されるデータの内容は、実施の形態1−Aと同じである。
【0083】
次に、図22を用いて、楕円曲線暗号演算装置の処理フローについて説明する。なお、図20と同じ処理内容のステップについては同じステップ番号が付されている。まず、制御部31は、RAM9又はROM7に格納されているnビットのスカラー値d及び楕円曲線上のベースポイントGを読み出す(ステップS1)。そして、制御部31は、スカラー値dの最上位ビットからkビット幅のwindowで値を読み出して、索引値w┌n/k┐-1を取得する(ステップS3)。
【0084】
そして、制御部31は、Windowテーブル75から索引値w┌n/k┐-1に対応するテーブル値を読み出し、変数Aに設定する(ステップS5)。
【0085】
さらに、制御部31は、カウンタiに、┌n/k┐−2を設定する(ステップS7)。
【0086】
そして、制御部31は、スカラー値dにおいてカウンタiで規定されるビット位置からkビット幅のwindowで値を読み出して、索引値wiを取得する(ステップS9)。windowの位置がkビット右シフトされてビット値を読み出す。
【0087】
その後、制御部31は、変数Aの2倍演算を、windowの右シフト幅であるk回演算器5の2倍演算部53に実施させる(ステップS11)。図20と同様に、ECDBL(A)で、楕円曲線上におけるAの2倍演算を表す。
【0088】
さらに、制御部31は、変数Aと、索引値wiでWindowテーブル75を検索することにより得られるテーブル値W[wi]との加算演算を、演算器5の加算演算部51に実施させる(ステップS13)。図20と同様に、ECADD(A,W[wi])で、楕円曲線上におけるAとW[wi]の加算演算を表す。
【0089】
そして、制御部31は、カウンタiの値を1デクリメントし(ステップS15)、iが0以上であるか判断する(ステップS17)。iが0以上であればステップS9に戻る。すなわち、iが0未満になるまでステップS9乃至S17を繰り返す。
【0090】
iが0未満になると、補正部33bは、補正点を算出する(ステップS18)。補正点は、実施の形態1−Aと同じであり、kビットの最下位ビットのみが「1」となっているビット列を┌n/k┐個並べた値(全部で┌n/k┐*kビット)を楕円曲線上の点Fに乗じた値である。このような演算は、制御部31が演算器5を利用して実施するが、その詳細は周知であるからこれ以上述べない。そして、補正部33bは、算出した補正点を用いて補正のための演算を実施する(ステップS19)。すなわちA=A−補正点を演算する。この演算は、補正部33bが演算器5を利用して実施するが、その詳細は周知であるからこれ以上述べない。
【0091】
制御部31は、このようにして得られた変数Aの値を、指定された出力先に出力する(ステップS21)。変数Aの値は、例えば通信部11から外部に出力される場合もあれば、他の演算プログラムに出力されて処理に用いられる。
【0092】
以上述べたように、Windowテーブル75において通常のテーブル値に非ゼロのテーブル補正値を加算しておき、ステップS19でその分演算値に対して補正を行うことによって、どのようなスカラー値dに対しても同じ演算が繰り返されるようになる。すなわちPAが行われてもスカラー値dのビットを盗み取られることはない。また、RAM9において使用される容量は、PA対策なしの場合と同じである。ROM7において使用される容量も、PA対策なしの場合と同じとなっている。すなわち、メモリ特にRAMの容量が限られているスマートカードのような実装形態において、本実施の形態は特に有用となる。
【0093】
[実施の形態2−A]
本実施の形態に係る楕円曲線暗号演算装置100の装置構成例を図23に示す。図17に示した楕円曲線暗号演算装置100と同じ構成要素については同じ参照番号が付されている。本楕円曲線暗号演算装置では、バス1に、CPU(Central Processing Unit)3と、演算器5と、ROM7と、RAM9と、通信部11とが接続されている。ROM7は、以下で説明する処理をCPU3に実行させるための演算プログラム71cと、以下で述べる補正点データ73cと、櫛形Window法のWindowテーブルをベースとしたものであって以下で述べるWindowテーブル75cとが記録されている。
【0094】
演算器5は、実施の形態1−Aと同じ加算演算部51及び2倍演算部53とを有する。また、演算プログラム71cをCPU3が実行すると、制御部31c及び以下で述べるような演算結果の補正処理を実施する補正部33cが実現される。また、外部装置との通信を行うため通信部11を設ける例を示しているが、他の機能を実現するための装置が設けられる場合もある。RAM9は、CPU3が各種処理を実施する際に用いるデータを格納するものであり、本実施の形態では、楕円曲線におけるベースポイントGのスカラー値d倍を算出するために用いる変数Aのための領域が用意される。その他にも演算に必要なデータもRAM9には格納されるが、耐タンパ性を保持させるために追加で必要な領域は存在しない。
【0095】
まず、本実施の形態2−Aについての演算処理を具体的な例を用いて説明する。本具体例のためのWindowテーブル75cの内容を図24Aに示す。図24Aの例では、楕円曲線上の点Gのスカラー値d倍を算出する場合を念頭に、スカラー値dが12ビットであり、Window幅が3ビットであるものとする。従って、このWindowテーブル75cの要素数は23=8個である。そして、図9に示したPA対策なしの場合と比較すると、各テーブル値にテーブル補正値Fが加えられていることが分かる。
【0096】
具体的には、索引「000」に対応付けて0G+F=Fを設定し、索引「001」に対応付けて20G+Fを設定し、索引「010」に対応付けて24G+Fを設定し、索引「011」に対応付けて24G+20G+Fを設定し、索引「100」に対応付けて28G+Fを設定し、索引「101」に対応付けて28G+20G+Fを設定し、索引「110」に対応付けて28G+24G+Fを設定し、索引「111」に対応付けて28G+24G+20G+Fを設定するようになっている。テーブル補正値Fは、楕円曲線上の点であるが、どのような点であっても良い。例えば、xをスカラー値とすると、xGのような点であってもよい。但し、非ゼロでなければならない。
【0097】
以下で一般的なテーブル値については数式で表すが、索引値の上位1ビットの値が28Gに対応し、索引値の2番目のビットの値が24Gに対応し、索引値の3番目のビットの値が20Gに対応している。従って、索引値の各ビットの0又は1に応じて、28G、24G及び20Gが加算されたりされなかったりする。なお、2のべき指数は、Window(すなわち索引値)において各ビットが担当する、スカラー値dにおける相対ビット位置に応じて設定される。すなわち、本実施の形態では、図9でも示したように(┌n/k┐−1)=3ビットおきにスカラー値dのビット値を読み出すので、Windowの最下位ビットについてのべき指数を「0」とすると、2番目のビットについてのべき指数は「4」であり、最上位のビットについてのべき指数は「8」である。
【0098】
このようなWindowテーブル75cを用いた具体的な演算手順は図24Bに示すとおりである。最初に、手順(1)において、スカラー値dの最上位ビットから3ビットおきにビット値を読み出すことによって索引値を得て、Windowテーブル75cのテーブル値を読み出す。これを変数Aに代入する。すなわち、(1)A=Tab[d11,d7,d3](Tab[]は、[]で指定されたテーブル値を表す)。
【0099】
次に、手順(2)において、Windowのシフト幅である1ビットに応じて、2Aを算出する。すなわち、(2)A=2A。また、手順(3)において、スカラー値dの上位第2ビットから3ビットおきにビット値を読み出すことによって索引値を得て、Windowテーブル75cのテーブル値を読み出し、Aに加算する。すなわち、(3)A=A+Tab[d10,d6,d2]。さらに、手順(4)において、Windowのシフト幅である1ビットに応じて、2Aを算出する。すなわち、(4)A=2A。また、手順(5)において、スカラー値dの上位第3ビットから3ビットおきにビット値を読み出すことによって索引値を得て、Windowテーブル75cのテーブル値を読み出し、Aに加算する。すなわち、(5)A=A+Tab[d9,d5,d1]。
【0100】
さらに、手順(6)において、Windowのシフト幅である1ビットに応じて、2Aを算出する。すなわち、(6)A=2A。そして、手順(7)において、スカラー値dの上位第4ビットから3ビットおきにビット値を読み出すことによって索引値を得て、Windowテーブル75cのテーブル値を読み出し、Aに加算する。すなわち、(7)A=A+Tab[d8,d4,d0]。
【0101】
ここまでは図9を用いて説明したものと同じであるが、当然ながらWindowテーブル75cの各テーブル値には(1111)2Fが加算されてしまっているので、手順(7)の演算結果にも余分にFが加算されてしまっている。そこで、その分を手順(7)の結果から差し引かなければならない。本実施の形態のように櫛形Window法を採用する場合には、手順(8)においては、(1111)2Fを補正点データ73として採用し、A=A−(1111)2Fを算出する。
【0102】
以上のように手順(8)を除き、基本的にはPA対策なしの場合の演算処理と同じであるが、索引値「000」に対してもテーブル値「F」が読み出されるので、ゼロの加算は絶対に行われない。すなわち、図12(B)のような消費電力波形は出現しない。また、ダミー演算のように変数のためのRAM領域を増加させる必要もない。
【0103】
次に、図24Aに示したWindowテーブル75cを一般化したものを図25に示す。実施の形態1−Aと同様に、索引値yを(yk-1||yk-2||・・・y1||y0)と表すものとする。また、Window幅はkビットとする。
【0104】
そうすると、図25に示すように、索引値yのテーブル値は、以下のように表される。
(yk-1×2┌n/k┐*(k-1)+yk-2×2┌n/k┐*(k-2)+・・・+y1×2┌n/k┐*1+y0×2┌n/k┐*0)G+F
【0105】
上でも述べたように、kビットの索引値の右からj番目のビットは、yj-1×2┌n/k┐*(j-1)に対応する。櫛形Window法の場合には、スカラー値dから(┌n/k┐−1)おきにkビットを読み出すので、kビットの索引値の右からj番目のビットについての2のべき指数は、当該j番目のビットが担当する、スカラー値dにおける相対ビット位置┌n/k┐*(j−1)となる。
【0106】
従って、索引値「0」のテーブル値はテーブル補正値の「F」であり、索引値「1」のテーブル値は、y0のみ「1」であるから20+Fとなる。索引値「2」のテーブル値は、y1のみ「1」であるから2┌n/k┐*1+Fとなる。さらに、索引値「2k−1」のテーブル値は、yk-1乃至y0の全てが「1」であるから、(2┌n/k┐*(k-1)+2┌n/k┐*(k-2)+・・・+2┌n/k┐*1+2┌n/k┐*0)G+Fとなる。
【0107】
次に、図26を用いて、楕円曲線暗号演算装置の処理フローについて説明する。まず、制御部31cは、RAM9又はROM7に格納されているnビットのスカラー値d及び楕円曲線上のベースポイントGを読み出す(ステップS31)。そして、制御部31cは、スカラー値dの最上位ビットから(┌n/k┐−1)ビットおきにkビット幅のwindowでビット値を読み出して、索引値を取得する(ステップS33)。スカラー値dを{dn-1||dn-2||・・・d1||d0}のような形で表すとすると、dから読み出される値w┌n/k┐-1は、以下のように表される。
w┌n/k┐-1={d┌n/k┐*(k-1)+┌n/k┐-1||・・・d┌n/k┐*1+┌n/k┐-1||d┌n/k┐*0+┌n/k┐-1}
【0108】
そして、制御部31cは、Windowテーブル75cから索引値w┌n/k┐-1に対応するテーブル値を読み出し、変数Aに設定する(ステップS35)。すなわち、以下のように表される。
A=W[w┌n/k┐-1]
W[z]は、Windowテーブル75cにおいて索引値zに対応付けられているテーブル値である。
【0109】
そして、制御部31cは、カウンタiに、┌n/k┐−2を設定する(ステップS37)。
【0110】
さらに、制御部31cは、スカラー値dにおいてカウンタiで規定されるビット位置からkビット幅のwindowでビット値を(┌n/k┐−1)ビットおきに読み出して、索引値を取得する(ステップS39)。
【0111】
dから読み出される値wiは、以下のように表される。
wi={dk*i+(k-1)||・・・dk*i+1||dk*i+0}
すなわち、Windowが1ビット右シフトされることになる。
【0112】
そして、制御部31cは、変数Aの2倍演算を、windowの右シフト幅である1回だけ演算器5の2倍演算部53に実施させる(ステップS41)。図26では、ECDBL(A)で、楕円曲線上におけるAの2倍演算を表す。2倍演算自体は周知であるからこれ以上述べない。
【0113】
さらに、制御部31cは、変数Aと、索引値wiでWindowテーブル75cを検索することにより得られるテーブル値W[wi]との加算演算を、演算器5の加算演算部51に実施させる(ステップS43)。図26は、ECADD(A,W[wi])で、楕円曲線上におけるAとW[wi]の加算演算を表す。加算演算自体は周知であるからこれ以上述べない。
【0114】
そして、制御部31cは、カウンタiの値を1デクリメントし(ステップS45)、iが0以上であるか判断する(ステップS47)。iが0以上であればステップS39に戻る。すなわち、iが0未満になるまでステップS39乃至S47を繰り返す。
【0115】
iが0未満になると、補正部33cは、補正のための演算を実施する(ステップS49)。すなわちA=A−補正点=dGであり、補正点は、上で述べたように、「1」を┌n/k┐ビット並べた値を楕円曲線上の点Fに乗じた値である。従って、補正点データ73cをROM7から読み出して、上記演算に用いる。この演算は、補正部33が演算器5を利用して実施するが、その詳細は周知であるからこれ以上述べない。
【0116】
制御部31cは、このようにして得られた変数Aの値を、指定された出力先に出力する(ステップS51)。変数Aの値は、例えば通信部11から外部に出力される場合もあれば、他の演算プログラムに出力されて処理に用いられる。
【0117】
以上述べたように、Windowテーブル75cにおいて通常のテーブル値に非ゼロのテーブル補正値を加算しておき、ステップS49でその分演算値に対して補正を行うことによって、どのようなスカラー値dに対しても同じ演算が繰り返されるようになる。すなわちPAが行われてもスカラー値dのビットを盗み取られることはない。また、処理としてはステップS49だけが追加されているので、処理速度の面でもPA対策なしの場合に比してパフォーマンスが大幅に落ちることはない。また、RAM9において使用される容量は、PA対策なしの場合と同じである。ROM7において使用される容量は、補正点データ73の分だけ増加するが、増加量は大きくない。すなわち、ROMに比べてRAMの容量が限られているスマートカードのような実装形態において、本実施の形態は特に有用となる。
【0118】
[実施の形態2−B]
本実施の形態は、実施の形態2−Aの変形である。本実施の形態に係る楕円曲線暗号演算装置100の装置構成例を図27に示す。図27において、図21と同じ構成要素については同じ参照番号が付されている。実施の形態2−Aとの差は、ROM7に、補正点データ73cが記録されていないことと、それに応じて必要な処理が異なるため演算プログラム71cが異なる点である。
【0119】
すなわち、楕円曲線暗号演算装置100では、バス1に、CPU3と、演算器5と、ROM7と、RAM9と、通信部11とが接続されている。ROM7は、以下で説明する処理をCPU3に実行させるための演算プログラム71dと、Windowテーブル75cとが記録されている。演算器5は、加算演算部51と、2倍演算部53とを有する。また、演算プログラム71dをCPU3が実行すると、制御部31d及び以下で述べるような演算結果の補正処理を実施する補正部33dが実現される。Windowテーブル75cに格納されるデータの内容は、実施の形態2−Aと同じである。
【0120】
次に、図28を用いて、楕円曲線暗号演算装置の処理フローについて説明する。なお、図26と同じ処理内容のステップについては同じステップ番号が付されている。まず、制御部31dは、RAM9又はROM7に格納されているnビットのスカラー値d及び楕円曲線上のベースポイントGを読み出す(ステップS31)。そして、制御部31dは、スカラー値dの最上位ビットからkビット幅のwindowでビット値を(┌n/k┐−1)ビットおきに読み出して、索引値w┌n/k┐-1を取得する(ステップS33)。
【0121】
そして、制御部31dは、Windowテーブル75cから索引値w┌n/k┐-1に対応するテーブル値を読み出し、変数Aに設定する(ステップS35)。また、制御部31dは、カウンタiに、┌n/k┐−2を設定する(ステップS37)。さらに、制御部31dは、スカラー値dにおいてカウンタiで規定されるビット位置からkビット幅のwindowでビット値を(┌n/k┐−1)ビットおきに読み出して、索引値を取得する(ステップS39)。上でも述べたようにwindowの1ビット右シフトが行われている。
【0122】
そして、制御部31dは、変数Aの2倍演算を、windowの右シフト幅である1回だけ演算器5の2倍演算部53に実施させる(ステップS41)。図28では、ECDBL(A)で、楕円曲線上におけるAの2倍演算を表す。
【0123】
さらに、制御部31dは、変数Aと、索引値wiでWindowテーブル75cを検索することにより得られるテーブル値W[wi]との加算演算を、演算器5の加算演算部51に実施させる(ステップS43)。図28では、ECADD(A,W[wi])で、楕円曲線上におけるAとW[wi]の加算演算を表す。
【0124】
そして、制御部31dは、カウンタiの値を1デクリメントし(ステップS45)、iが0以上であるか判断する(ステップS47)。iが0以上であればステップS39に戻る。すなわち、iが0未満になるまでステップS39乃至S47を繰り返す。
【0125】
iが0未満になると、補正部33dは、補正点を算出する(ステップS48)。実施の形態2−Aと同様に、補正点は、「1」を┌n/k┐ビット並べた値を楕円曲線上の点Fに乗じた値である。この演算は、補正部33dが演算器5を利用して実施する。
【0126】
その後、補正部33dは、補正のための演算を実施する(ステップS49)。すなわちA=A−補正点=dGを算出する。この演算は、補正部33dが演算器5を利用して実施する。
【0127】
制御部31dは、このようにして得られた変数Aの値を、指定された出力先に出力する(ステップS51)。変数Aの値は、例えば通信部11から外部に出力される場合もあれば、他の演算プログラムに出力されて処理に用いられる。
【0128】
以上述べたように、Windowテーブル75cにおいて通常のテーブル値に非ゼロのテーブル補正値を加算しておき、ステップS48及びS49でその分演算値に対して補正を行うことによって、どのようなスカラー値dに対しても同じ演算が繰り返されるようになる。すなわちPAが行われてもスカラー値dのビットを盗み取られることはない。また、RAM9において使用される容量は、PA対策なしの場合と同じである。ROM7において使用される容量も、PA対策なしの場合と同じである。すなわち、メモリ特にRAMの容量が限られているスマートカードのような実装形態において、本実施の形態は特に有用となる。
【0129】
[実施の形態3]
本実施の形態に係る楕円曲線暗号演算装置100の装置構成例を図29に示す。図21に示した楕円曲線暗号演算装置100と同じ構成要素については同じ参照番号が付されている。本楕円曲線暗号演算装置100では、バス1に、CPU(Central Processing Unit)3と、演算器5と、ROM7と、RAM9と、通信部11とが接続されている。ROM7は、以下で説明する処理をCPU3に実行させるための演算プログラム71eと、通常のWindow法のWindowテーブルをベースとしたものであって以下で述べるWindowテーブル75eとが記録されている。
【0130】
演算器5は、実施の形態1−Aと同じ加算演算部51及び2倍演算部53とを有する。また、演算プログラム71eをCPU3が実行すると、制御部31e及び以下で述べるようなスカラー値dの補正演算を実施する補正部33eが実現される。また、外部装置との通信を行うため通信部11を設ける例を示しているが、他の機能を実現するための装置が設けられる場合もある。RAM9は、CPU3が各種処理を実施する際に用いるデータを格納するものであり、本実施の形態では、楕円曲線におけるベースポイントGのスカラー値d倍を算出するために用いる変数Aのための領域が用意される。その他にも演算に必要なデータもRAM9には格納されるが、耐タンパ性を保持させるために追加で必要な領域は存在しない。
【0131】
まず、本実施の形態3についての演算処理を具体的な例を用いて説明する。本具体例のためのWindowテーブル75eの内容を図30Aに示す。図30Aの例では、楕円曲線上の点Gのスカラー値d倍を算出する場合を念頭に、スカラー値dが12ビットであり、Window幅が3ビットであるものとする。従って、このWindowテーブル75eの要素数は23=8個である。そして、図9に示したPA対策なしの場合と比較すると、各テーブル値にテーブル補正値xGが加えられていることが分かる。なお、xは非ゼロである。
【0132】
具体的には、索引「000」に対応付けてxGを設定し、索引「001」に対応付けて20G+xGを設定し、索引「010」に対応付けて21G+xGを設定し、索引「011」に対応付けて21G+20G+xGを設定し、索引「100」に対応付けて23G+xGを設定し、索引「101」に対応付けて22G+20G+xGを設定し、索引「110」に対応付けて22G+21G+xGを設定し、索引「111」に対応付けて22G+21G+20G+xGを設定するようになっている。テーブル補正値にxGを採用することによって、以下で述べるように、スカラー値dを単純なスカラーの演算によって補正するだけで、楕円曲線上の演算を削減することができるようになる。
【0133】
以下で一般的なテーブル値については数式で表すが、索引値の上位1ビットの値が22Gに対応し、索引値の2番目のビットの値が21Gに対応し、索引値の3番目のビットの値が20Gに対応している。従って、索引値の各ビットの0又は1に応じて、22G、21G及び20Gが加算されたりされなかったりする。なお、2のべき指数は、Window(すなわち索引値)において各ビットが担当する、スカラー値dにおける相対ビット位置に応じて設定される。すなわち、本実施の形態では、図9でも示したように(┌n/k┐−1)=3ビットおきにスカラー値dのビット値を読み出すので、Windowの最下位ビットについてのべき指数を「0」とすると、2番目のビットについてのべき指数は「1」であり、最上位のビットについてのべき指数は「2」である。
【0134】
このようなWindowテーブル75eを用いた具体的な演算手順は図30Bに示すとおりである。最初に、従来技術や実施の形態1−A乃至2−Bとは異なり、手順(0)において、スカラー値dを、d=d−x(001001001001)2で補正する。xGがそれぞれテーブル値に加算されているWindowテーブル75eを用いて演算を実施すると、最終的に変数Aに格納される値は、dG+(001001001001)2×Gとなる。従って、スカラー値dから、予め(001001001001)2×xだけ減算しておけば、最終的に得られる結果がdGとなり、テーブル補正値の影響を相殺することができる。なお、このような補正を実施することによって、後から楕円曲線上の演算が不要になって、演算速度が速くなる。
【0135】
次に、手順(1)において、補正後のd(以下、本実施の形態では単純にdと示す場合もある)の上位3ビットを索引として、Windowテーブル75のテーブル値を読み出す。これを変数Aに代入する。すなわち、(1)A=Tab[d11,d10,d9](Tab[x]は、[x]で指定されたテーブル値を表す)。
【0136】
次に、手順(2)において、Windowのシフト幅である3ビットに応じて、23Aを算出する。すなわち、(2)A=23A。また、手順(3)において、補正後のdの次の3ビットを索引として、Windowテーブル75のテーブル値を読み出し、Aに加算する。すなわち、(3)A=A+Tab[d8,d7,d6]。さらに、手順(4)において、Windowのシフト幅である3ビットに応じて、23Aを算出する。すなわち、(4)A=23A。また、手順(5)において、補正後のdの次の3ビットを索引として、Windowテーブル75のテーブル値を読み出し、Aに加算する。すなわち、(5)A=A+Tab[d5,d4,d3]。
【0137】
さらに、手順(6)において、Windowのシフト幅である3ビットに応じて、23Aを算出する。すなわち、(6)A=23A。手順(7)において、補正後のdにおいて次の3ビットを索引として、Windowテーブル75のテーブル値を読み出し、Aに加算する。すなわち、(7)A=A+Tab[d2,d1,d0]=dG。
【0138】
このように手順(0)を除き、PA対策なしの場合の手順と同じになる。但し、索引値「000」に対してもテーブル値「xG」が読み出されるので、ゼロの加算は絶対に行われない。すなわち、図12(B)のような消費電力波形は出現しない。また、ダミー演算のように変数のためのRAM領域を増加させる必要もない。
【0139】
次に、図30に示したWindowテーブル75eを一般化したものを図31に示す。ここで、索引値yを(yk-1||yk-2||・・・y1||y0)と表すものとする。そうすると、右からx番目のビットはyx-1と表される。また、Window幅はkビットとする。
【0140】
そうすると、図31に示すように、索引値yのテーブル値は、以下のように表される。
(yk-1×2k-1+yk-2×2k-2+・・・+y1×21+y0×20)G+xG
【0141】
上でも述べたように、kビットの索引値の右からj番目のビットは、yj-1×2j-1に対応する。Window法の場合には、スカラー値dから連続したkビットを読み出すので、kビットの索引値の右からj番目のビットについての2のべき指数は、当該j番目のビットが担当する、スカラー値dにおける相対ビット位置(j−1)となる。
【0142】
従って、索引値「0」のテーブル値はテーブル補正値の「xG」であり、索引値「1」のテーブル値は、y0のみ「1」であるから20+xGとなる。索引値「2」のテーブル値は、y1のみ「1」であるから21+xGとなる。さらに、索引値「2k−1」のテーブル値は、yk-1乃至y0の全てが「1」であるから、(2k-1+2k-2+・・・+21+20)G+xGとなる。
【0143】
次に、図32を用いて、楕円曲線暗号演算装置の処理フローについて説明する。まず、制御部31eは、RAM9又はROM7に格納されているnビットのスカラー値d及び楕円曲線上のベースポイントGを読み出す(ステップS61)。そして、補正部33eは、スカラー値dの補正を実施する(ステップS63)。すなわち、補正値としてkビットのうち最下位ビットのみが「1」であるビット列が┌n/k┐個連結された補正値(001001001...001)(全┌n/k┐*kビット)とスカラー値xの積を算出する。この処理は簡単な処理であるからCPU3で容易に実施することができる。その後、制御部31eは、補正後のスカラー値d(以下、本実施の形態において単にスカラー値dと略する場合がある)の最上位ビットからkビット幅のwindowで値を読み出して、索引値を取得する(ステップS65)。補正後のスカラー値dを{dn-1||dn-2||・・・d1||d0}のような形で表すとすると、dから読み出される値w┌n/k┐-1は、以下のように表される。
w┌n/k┐-1={dk*(┌n/k┐-1)+(k-1)||・・・dk*(┌n/k┐-1)+1||dk*(┌n/k┐-1)+0}
【0144】
なお、┌n/k┐は、n/kより大きい最小の整数を表す。
【0145】
そして、制御部31eは、Windowテーブル75eから索引値w┌n/k┐-1に対応するテーブル値を読み出し、変数Aに設定する(ステップS67)。すなわち、以下のように表される。
A=W[w┌n/k┐-1]
W[z]は、Windowテーブル75eにおいて索引値zに対応付けられているテーブル値である。
【0146】
そして、制御部31eは、カウンタiに、┌n/k┐−2を設定する(ステップS69)。
【0147】
さらに、制御部31eは、補正後のスカラー値dからカウンタiで規定されるビット位置からkビット幅のwindowで値を読み出して、索引値を取得する(ステップS71)。
【0148】
補正後のdから読み出される値wiは、以下のように表される。
wi={dk*i+(k-1)||・・・dk*i+1||dk*i+0}
これによって、windowの位置がkビット右シフトされることになる。
【0149】
そして、制御部31eは、変数Aの2倍演算を、windowの右シフト幅であるk回演算器5の2倍演算部53に実施させる(ステップS73)。図32では、ECDBL(A)で、楕円曲線上におけるAの2倍演算を表す。
【0150】
さらに、制御部31eは、変数Aと、索引値wiでWindowテーブル75eを検索することにより得られるテーブル値W[wi]との加算演算を、演算器5の加算演算部51に実施させる(ステップS75)。図32は、ECADD(A,W[wi])で、楕円曲線上におけるAとW[wi]の加算演算を表す。
【0151】
そして、制御部31eは、カウンタiの値を1デクリメントし(ステップS77)、iが0以上であるか判断する(ステップS79)。iが0以上であればステップS71に戻る。すなわち、iが0未満になるまでステップS71乃至S79を繰り返す。
【0152】
iが0未満になると、制御部31eは、このようにして得られた変数Aの値を、指定された出力先に出力する(ステップS81)。変数Aの値は、例えば通信部11から外部に出力される場合もあれば、他の演算プログラムに出力されて処理に用いられる。
【0153】
以上述べたように、Windowテーブル75eにおいて通常のテーブル値に非ゼロのテーブル補正値xGを加算しておくことによって、どのようなスカラー値dに対しても同じ演算が繰り返されるようになる。すなわちPAが行われてもスカラー値dのビットを盗み取られることはない。また、処理としてはステップS63だけが追加されているので、処理速度の面でもPA対策なしの場合に比してパフォーマンスが大幅に落ちることはない。また、RAM9において使用される容量は、PA対策なしの場合と同じである。ROM7において使用される容量もPAなしの場合と同様である。すなわち、メモリ特にRAMの容量が限られているスマートカードのような実装形態において、本実施の形態は特に有用となる。
【0154】
[実施の形態4]
本実施の形態は、実施の形態3の櫛形Window版である。本実施の形態に係る楕円曲線暗号演算装置100の装置構成例を図33に示す。図29に示した楕円曲線暗号演算装置100と同じ構成要素については同じ参照番号が付されている。本楕円曲線暗号演算装置100では、バス1に、CPU(Central Processing Unit)3と、演算器5と、ROM7と、RAM9と、通信部11とが接続されている。ROM7は、以下で説明する処理をCPU3に実行させるための演算プログラム71fと、櫛形Window法のWindowテーブルをベースとしたものであって以下で述べるWindowテーブル75fとが記録されている。
【0155】
演算器5は、実施の形態1−Aと同じ加算演算部51及び2倍演算部53とを有する。また、演算プログラム71fをCPU3が実行すると、制御部31f及び以下で述べるようなスカラー値dの補正処理を実施する補正部33fが実現される。また、外部装置との通信を行うため通信部11を設ける例を示しているが、他の機能を実現するための装置が設けられる場合もある。RAM9は、CPU3が各種処理を実施する際に用いるデータを格納するものであり、本実施の形態では、楕円曲線におけるベースポイントGのスカラー値d倍を算出するために用いる変数Aのための領域が用意される。その他にも演算に必要なデータもRAM9には格納されるが、耐タンパ性を保持させるために追加で必要な領域は存在しない。
【0156】
まず、本実施の形態4についての演算処理を具体的な例を用いて説明する。本具体例のためのWindowテーブル75fの内容を図34Aに示す。図34Aの例では、楕円曲線上の点Gのスカラー値d倍を算出する場合を念頭に、スカラー値dが12ビットであり、Window幅が3ビットであるものとする。従って、このWindowテーブル75fの要素数は23=8個である。そして、図9に示したPA対策なしの場合と比較すると、各テーブル値にテーブル補正値xGが加えられていることが分かる。すなわち、ベースポイントGのスカラー値x倍である。
【0157】
具体的には、索引「000」に対応付けて0G+xG=xGを設定し、索引「001」に対応付けて20G+xGを設定し、索引「010」に対応付けて24G+xGを設定し、索引「011」に対応付けて24G+20G+xGを設定し、索引「100」に対応付けて28G+xGを設定し、索引「101」に対応付けて28G+20G+xGを設定し、索引「110」に対応付けて28G+24G+xGを設定し、索引「111」に対応付けて28G+24G+20G+xGを設定するようになっている。テーブル補正値にxGを採用することによって、以下で述べるように、スカラー値dを単純なスカラーの演算によって補正するだけで、楕円曲線上の演算を削減することができるようになる。
【0158】
以下で一般的なテーブル値については数式で表すが、索引値の上位1ビットの値が28Gに対応し、索引値の2番目のビットの値が24Gに対応し、索引値の3番目のビットの値が20Gに対応している。従って、索引値の各ビットの0又は1に応じて、28G、24G及び20Gが加算されたりされなかったりする。なお、2のべき指数は、Window(すなわち索引値)において各ビットが担当する、スカラー値dにおける相対ビット位置に応じて設定される。すなわち、本実施の形態では、図9でも示したように(┌n/k┐−1)=3ビットおきにスカラー値dのビット値を読み出すので、Windowの最下位ビットについてのべき指数を「0」とすると、2番目のビットについてのべき指数は「4」であり、最上位のビットについてのべき指数は「8」である。
【0159】
このようなWindowテーブル75fを用いた具体的な演算手順は図34Bに示すとおりである。最初に、従来技術や実施の形態1−A乃至2−Bとは異なり、手順(0)において、スカラー値dを、d=d−x(1111)2で補正する。xGがそれぞれテーブル値に加算されているWindowテーブル75fを用いて演算を実施すると、最終的に変数Aに格納される値は、dG+(1111)2×Gとなる。従って、スカラー値dから、予め(1111)2×xだけ減算しておけば、最終的に得られる結果がdGとなり、テーブル補正値の影響を相殺することができる。なお、このような補正を実施することによって、後から楕円曲線上の演算が不要になって、演算速度が速くなる。
【0160】
そして、手順(1)において、補正後のスカラー値d(以下、本実施の形態において単にスカラー値dと略する場合がある)の最上位ビットから3ビットおきにビット値を読み出すことによって索引値を得て、Windowテーブル75fのテーブル値を読み出す。これを変数Aに代入する。すなわち、(1)A=Tab[d11,d7,d3](Tab[]は、[]で指定されたテーブル値を表す)。
【0161】
次に、手順(2)において、Windowのシフト幅である1ビットに応じて、2Aを算出する。すなわち、(2)A=2A。また、手順(3)において、補正後のスカラー値dの上位第2ビットから3ビットおきにビット値を読み出すことによって索引値を得て、Windowテーブル75fのテーブル値を読み出し、Aに加算する。すなわち、(3)A=A+Tab[d10,d6,d2]。さらに、手順(4)において、Windowのシフト幅である1ビットに応じて、2Aを算出する。すなわち、(4)A=2A。また、手順(5)において、補正後のスカラー値dの上位第3ビットから3ビットおきにビット値を読み出すことによって索引値を得て、Windowテーブル75fのテーブル値を読み出し、Aに加算する。すなわち、(5)A=A+Tab[d9,d5,d1]。
【0162】
さらに、手順(6)において、Windowのシフト幅である1ビットに応じて、2Aを算出する。すなわち、(6)A=2A。そして、手順(7)において、スカラー値dの上位第4ビットから3ビットおきにビット値を読み出すことによって索引値を得て、Windowテーブル75fのテーブル値を読み出し、Aに加算する。すなわち、(7)A=A+Tab[d8,d4,d0]=dG。
【0163】
このように手順(0)を除き、PA対策なしの場合の手順と同じになる。但し、索引値「000」に対してもテーブル値「xG」が読み出されるので、ゼロの加算は絶対に行われない。すなわち、図12(B)のような消費電力波形は出現しない。また、ダミー演算のように変数のためのRAM領域を増加させる必要もない。
【0164】
次に、図34に示したWindowテーブル75fを一般化したものを図35に示す。実施の形態1−Aなどと同様に、索引値yを(yk-1||yk-2||・・・y1||y0)と表すものとする。そうすると、右からx番目のビットはyx-1と表される。また、Window幅はkビットとする。
【0165】
そうすると、図35に示すように、索引値yのテーブル値は、以下のように表される。
(yk-1×2┌n/k┐*(k-1)+yk-2×2┌n/k┐*(k-2)+・・・+y1×2┌n/k┐*1+y0×2┌n/k┐*0)G+xG
【0166】
上でも述べたように、kビットの索引値の右からj番目のビットは、yj-1×2┌n/k┐*(j-1)に対応する。櫛形Window法の場合には、スカラー値dから(┌n/k┐−1)おきにkビットを読み出すので、kビットの索引値の右からj番目のビットについての2のべき指数は、当該j番目のビットが担当する、スカラー値dにおける相対ビット位置┌n/k┐*(j−1)となる。
【0167】
従って、索引値「0」のテーブル値はテーブル補正値の「xG」であり、索引値「1」のテーブル値は、y0のみ「1」であるから20+xGとなる。索引値「2」のテーブル値は、y1のみ「1」であるから2┌n/k┐*1+xGとなる。さらに、索引値「2k−1」のテーブル値は、yk-1乃至y0の全てが「1」であるから、(2┌n/k┐*(k-1)+2┌n/k┐*(k-2)+・・・+2┌n/k┐*1+2┌n/k┐*0)G+xGとなる。
【0168】
次に、図36を用いて、楕円曲線暗号演算装置の処理フローについて説明する。まず、制御部31fは、RAM9又はROM7に格納されているnビットのスカラー値d及び楕円曲線上のベースポイントGを読み出す(ステップS91)。そして、補正部33fは、スカラー値dの補正を実施する(ステップS93)。すなわち、補正値として「1」が┌n/k┐個連結された補正値(111...1)とスカラー値xの積を算出する。この処理は簡単な処理であるからCPU3で容易に実施することができる。従って、d=d−(111...1)xを算出する。
【0169】
また、制御部31fは、スカラー値dの最上位ビットから(┌n/k┐−1)ビットおきにkビット幅のwindowでビット値を読み出して、索引値を取得する(ステップS95)。補正後のスカラー値dを{dn-1||dn-2||・・・d1||d0}のような形で表すとすると、dから読み出される値w┌n/k┐-1は、以下のように表される。
w┌n/k┐-1={d┌n/k┐*(k-1)+┌n/k┐-1||・・・d┌n/k┐*1+┌n/k┐-1||d┌n/k┐*0+┌n/k┐-1}
【0170】
そして、制御部31fは、Windowテーブル75fから索引値w┌n/k┐-1に対応するテーブル値を読み出し、変数Aに設定する(ステップS97)。すなわち、以下のように表される。
A=W[w┌n/k┐-1]
W[z]は、Windowテーブル75fにおいて索引値zに対応付けられているテーブル値である。
【0171】
そして、制御部31fは、カウンタiに、┌n/k┐−2を設定する(ステップS99)。
【0172】
さらに、制御部31fは、補正後のスカラー値dからカウンタiで規定されるビット位置からkビット幅のwindowでビット値を(┌n/k┐−1)ビットおきに読み出して、索引値を取得する(ステップS101)。
【0173】
dから読み出される値wiは、以下のように表される。
wi={dk*i+(k-1)||・・・dk*i+1||dk*i+0}
すなわち、Windowが1ビット右シフトされることになる。
【0174】
そして、制御部31fは、変数Aの2倍演算を、windowの右シフト幅である1回だけ演算器5の2倍演算部53に実施させる(ステップS103)。図36では、ECDBL(A)で、楕円曲線上におけるAの2倍演算を表す。
【0175】
さらに、制御部31fは、変数Aと、索引値wiでWindowテーブル75fを検索することにより得られるテーブル値W[wi]との加算演算を、演算器5の加算演算部51に実施させる(ステップS105)。図36は、ECADD(A,W[wi])で、楕円曲線上におけるAとW[wi]の加算演算を表す。
【0176】
そして、制御部31fは、カウンタiの値を1デクリメントし(ステップS107)、iが0以上であるか判断する(ステップS109)。iが0以上であればステップS101に戻る。すなわち、iが0未満になるまでステップS101乃至S109を繰り返す。
【0177】
iが0未満になると、制御部31fは、このようにして得られた変数Aの値を、指定された出力先に出力する(ステップS111)。変数Aの値は、例えば通信部11から外部に出力される場合もあれば、他の演算プログラムに出力されて処理に用いられる。
【0178】
以上述べたように、Windowテーブル75fにおいて通常のテーブル値に非ゼロのテーブル補正値xGを加算しておくことによって、どのようなスカラー値dに対しても同じ演算が繰り返されるようになる。すなわちPAが行われてもスカラー値dのビットを盗み取られることはない。また、処理としてはステップS93だけが追加されているので、処理速度の面でもPA対策なしの場合に比してパフォーマンスが大幅に落ちることはない。また、RAM9において使用される容量は、PA対策なしの場合と同じである。ROM7において使用される容量もPAなしの場合と同様である。すなわち、メモリ特にRAMの容量が限られているスマートカードのような実装形態において、本実施の形態は特に有用となる。
【0179】
[実施の形態5]
本実施の形態では、最初に2つのWindowテーブルを用いてスカラー値d又は演算結果の補正なしでPA対策を実施する例を説明する。
【0180】
本実施の形態に係る楕円曲線暗号演算装置100の装置構成例を図37に示す。図17に示した楕円曲線暗号演算装置100と同じ構成要素については同じ参照番号が付されている。本楕円曲線暗号演算装置100では、バス1に、CPU(Central Processing Unit)3と、演算器5と、ROM7と、RAM9と、通信部11とが接続されている。ROM7は、以下で説明する処理をCPU3に実行させるための演算プログラム71gと、櫛形Window法のWindowテーブルをベースとしたものであって以下で述べるWindowテーブルa及びbとが記録されている。
【0181】
演算器5は、実施の形態1−Aと同じ加算演算部51及び2倍演算部53とを有する。また、演算プログラム71gをCPU3が実行すると、制御部31gが実現される。以下で詳細に述べるが、本実施の形態では、補正を行わない。
【0182】
また、外部装置との通信を行うため通信部11を設ける例を示しているが、他の機能を実現するための装置が設けられる場合もある。RAM9は、CPU3が各種処理を実施する際に用いるデータを格納するものであり、本実施の形態では、楕円曲線におけるベースポイントGのスカラー値d倍を算出するために用いる変数Aのための領域が用意される。その他にも演算に必要なデータもRAM9には格納されるが、耐タンパ性を保持させるために追加で必要な領域は存在しない。
【0183】
まず、本実施の形態5についての演算処理を具体的な例を用いて説明する。本具体例のためのWindowテーブルa及びbの内容を図38A(a)及び(b)に示す。図38A(a)及び(b)の例では、楕円曲線上の点Gのスカラー値d倍を算出する場合を念頭に、スカラー値dが18ビットであり、Window幅が3ビットであるものとする。また、スカラー値dの上位9ビットのブロックを、Windowテーブルaが担当し、下位9ビットのブロックを、Windowテーブルbが担当する。従って、このWindowテーブルa及びbの要素数は各々23=8個である。そして、図11に示したPA対策なしの場合と比較すると、図38A(a)の上側テーブルの方は、各テーブル値にテーブル補正値−Fが加えられていることが分かる。また、図38A(b)の下側テーブルの方は、各テーブル値にテーブル補正値+Fが加えられていることが分かる。すなわち、上側テーブルのテーブル補正値−Fと下側テーブルの補正値+Fによって、テーブル補正値が相殺されてゼロになるようにする。これによって、複数のWindowテーブルを用いる場合には、スカラー値d又は演算結果の補正を実施せずとも、PA対策ができるようになる。
【0184】
具体的には、上側テーブルであるWindowテーブルaにおいては、索引「000」に対応付けて0G−F=−Fを設定し、索引「001」に対応付けて29G−Fを設定し、索引「010」に対応付けて212G−Fを設定し、索引「011」に対応付けて212G+29−Fを設定し、索引「100」に対応付けて215G−Fを設定し、索引「101」に対応付けて215+29G−Fを設定し、索引「110」に対応付けて215+212−Fを設定し、索引「111」に対応付けて215+212+29−Fを設定するようになっている。Windowテーブルaのテーブル補正値−Fは、Windowテーブルbのテーブル補正値+Fとの加算結果が「0」になればよい。ここで、補正値Fは、楕円曲線上の点である。
【0185】
また、下側テーブルであるWindowテーブルbにおいては、索引「000」に対応付けて0G+F=+Fを設定し、索引「001」に対応付けて20G+Fを設定し、索引「010」に対応付けて23G+Fを設定し、索引「011」に対応付けて23G+20+Fを設定し、索引「100」に対応付けて26G+Fを設定し、索引「101」に対応付けて26+20G+Fを設定し、索引「110」に対応付けて26+23+Fを設定し、索引「111」に対応付けて26+23+20+Fを設定するようになっている。
【0186】
以下で一般的なテーブル値については数式で表すが、上側テーブルであるWindowテーブルaにおける索引値の上位1ビットの値が215Gに対応し、索引値の2番目のビットの値が212に対応し、索引値の3番目のビットの値が29に対応している。従って、索引値の各ビットの0又は1に応じて、215、212及び29が加算されたりされなかったりする。なお、2のべき指数は、Window(すなわち索引値)において各ビットが担当する、スカラー値dのブロックにおける相対ビット位置、及びスカラー値d中の当該ブロックの相対位置に応じて設定される。すなわち、下側テーブルであるWindowテーブルbは、スカラー値dの下位9ビットの下位ブロックを担当しており、その中で、図11でも示したように(┌n/2k┐−1)=2ビットおきにスカラー値dのビット値を読み出すので、下側テーブルであるWindowテーブルbについてのWindowの最下位ビットについてのべき指数が「0」とすると、2番目のビットについてのべき指数は「3」であり、最上位のビットについてのべき指数は「6」である。同様に、上側テーブルであるWindowテーブルaは、スカラー値dの上位9ビットの上位ブロックを担当しており、その中で、図11でも示したように(┌n/2k┐−1)=2ビットおきにスカラー値dのビット値を読み出すので、上側テーブルであるWindowテーブルaについてのWindowの最下位ビットについてのべき指数は「9」となり、2番目のビットについてのべき指数は「12」となり、最上位のビットについてのべき指数は「15」となる。
【0187】
このようなWindowテーブルa及びbを用いた具体的な演算手順は図38Bに示すとおりである。最初に、手順(1)において、dの上位半分のうち2ビットおきにdにおける3ビットを索引として抽出し、Windowテーブルaのテーブル値を読み出す。これを変数Aに代入する。すなわち、(1)A=TabH[d17,d14,d11]。TabHについては、上側テーブルであるWindowテーブルaのテーブル値を表す。次に、手順(2)において、dの下位半分のビットブロックのうち2ビットおきにdにおける3ビットを索引として抽出し、Windowテーブルbのテーブル値を読み出し、Aに加算する。すなわち、(2)A=A+TabL[d8,d5,d2]。TabLについては、下側テーブルであるWindowテーブルbのテーブル値を表す。
【0188】
本実施の形態のようなテーブル補正値を採用すれば、手順(1)及び(2)で−F+F=0(ゼロ)で、テーブル補正値が相殺されている。
【0189】
そして、Windowのシフト幅1ビットに応じて、2Aを算出する。すなわち、(3)A=2A。また、手順(4)において、dにおいて手順(1)の状態からwindowを1ビット右シフトさせて上位半分のビットブロックの次の3ビットを索引として抽出し、Windowテーブルのテーブル値を読み出し、Aに加算する。すなわち、(5)A=A+TabH[d16,d13,d10]。また、手順(5)において、dにおいて手順(2)の状態からwindowを1ビット右シフトさせて下位半分のビットブロックの次の3ビットを索引として抽出し、Windowテーブルのテーブル値を読み出し、Aに加算する。すなわち、(5)A=A+TabL[d7,d4,d1]。
【0190】
手順(1)及び(2)と同様に、手順(3)及び(4)においてもテーブル補正値−F+F=0(ゼロ)で、テーブル補正値が相殺されている。
【0191】
さらに、手順(6)において、Windowのシフト幅1ビットに応じて、2Aを算出する。すなわち、(6)A=2A。また、手順(7)において、dにおいて手順(4)の状態からwindowを1ビット右シフトさせて上位半分のビットブロックの次の3ビットを索引として抽出し、Windowテーブルのテーブル値を読み出し、Aに加算する。すなわち、(7)A=A+TabH[d15,d12,d9]。また、手順(8)において、dにおいて手順(5)の状態からwindowを1ビット右シフトさせて下位半分のビットブロックの次の3ビットを索引として抽出し、Windowテーブルのテーブル値を読み出し、Aに加算する。すなわち、(8)A=A+TabL[d6,d3,d0]=dG。
【0192】
手順(1)及び(2)と同様に、手順(7)及び(8)においてもテーブル補正値−F+F=0(ゼロ)で、テーブル補正値が相殺されている。
【0193】
このように、スカラー値d又は演算結果の補正を行わずとも、テーブル補正値が相殺されるので、演算処理が高速化される。なお、櫛形Windowを用いており且つWindowテーブルも2つ用いているので、より処理が高速化される。
【0194】
以上のように演算処理そのものは図11で説明したものと同じであるが、Windowテーブルa及びbの構成を上で述べたように変更しているため、ゼロの加算は絶対に行われない。すなわち、図12(B)のような消費電力波形は出現しない。また、ダミー演算のように変数のためのRAM領域を増加させる必要もない。
【0195】
次に、図38に示したWindowテーブルa及びbを一般化したものを図39及び図40に示す。実施の形態1−Aと同様に、索引値yを(yk-1||yk-2||・・・y1||y0)と表すものとする。そうすると、右からx番目のビットはyx-1と表される。また、Window幅は、各Windowテーブルについてkビットとする。スカラー値dはnビットであるものとする。
【0196】
そうすると、図40に示すように、下側テーブルであるWindowテーブルbにおける索引値yのテーブル値は、以下のように表される。
(yk-1×2┌n/2k┐*(k-1)+yk-2×2┌n/2k┐*(k-2)+・・・+y1×2┌n/2k┐*1+y0×2┌n/2k┐*0)G+F
【0197】
下側テーブルであるWindowテーブルbにおいて、kビットの索引値の右からi番目のビットは、yi-1×2┌n/2k┐*(i-1)に対応する。櫛形Window法の場合には、スカラー値dから(┌n/2k┐−1)おきにkビットを読み出すので、kビットの索引値の右からi番目のビットについての2のべき指数は、当該i番目のビットが担当する、スカラー値dの下位ビットブロックにおける相対ビット位置┌n/2k┐*(i−1)となる。
【0198】
一方、図39に示すように、上側テーブルであるWindowテーブルaにおける索引値yのテーブル値は、以下のように表される。
(yk-1×2┌n/2k┐*k+┌n/2k┐*(k-1)++yk-2×2┌n/2k┐*k+┌n/2k┐*(k-2)+・・・+y1×2┌n/2k┐*k+┌n/2k┐*1+y0×2┌n/2k┐*k+┌n/2k┐*0)G−F
【0199】
上側テーブルであるWindowテーブルaにおいて、kビットの索引値の右からi番目のビットは、yi-1×2┌n/2k┐*k+┌n/2k┐*(i-1)に対応する。Windowテーブル2つで櫛形Window法の場合には、スカラー値dから(┌n/2k┐−1)おきにkビットを読み出し、上側テーブルの場合にはスカラー値dの上位ビットブロックを担当するので、kビットの索引値の右からi番目のビットについての2のべき指数は、下側テーブルの場合に比して┌n/2k┐*kだけ上乗せされて、i番目のビットが担当する、スカラー値dの上位ビットブロックにおける相対ビット位置┌n/2k┐*k+┌n/2k┐*(i−1)となる。
【0200】
次に、図41を用いて、楕円曲線暗号演算装置の処理フローについて説明する。まず、制御部31gは、RAM9又はROM7に格納されているnビットのスカラー値d及び楕円曲線上のベースポイントGを読み出す(ステップS121)。そして、制御部31gは、スカラー値dの上位ビットブロックにおける最上位ビットから(┌n/2k┐−1)ビットおきにkビット幅のwindowでビット値を読み出して、上側テーブルであるWindowテーブルaのための索引値を取得する(ステップS123)。スカラー値dを{dn-1||dn-2||・・・d1||d0}のような形で表すとすると、dから読み出される値w┌n/2k┐-1,1は、以下のように表される。
w┌n/2k┐-1,1={d┌n/2k┐*(k-1)+┌n/2k┐-1+┌n/2┐||・・・d┌n/2k┐*1+┌n/2k┐-1+┌n/2┐||d┌n/2k┐*0+┌n/2k┐-1+┌n/2┐}
【0201】
上でも述べたが、┌n/2k┐は、n/2kより大きい最小の整数を表す。例えばスカラー値dは全体では18ビットであるがテーブル2つで上位半分のビットブロックのビット数は9である。そして、k=3であれば、┌n/2k┐-1=2となる。また、┌n/2k┐*(k-1)+┌n/2k┐−1+┌n/2┐=3*2+3−1+9=17となる。17は最上位ビットの番号である。
【0202】
また、制御部31gは、スカラー値dの下位ビットブロックにおける最上位ビットから(┌n/2k┐−1)ビットおきにkビット幅のwindowでビット値を読み出して、下側テーブルであるWindowテーブルbのための索引値を取得する(ステップS125)。dから読み出される値w┌n/2k┐-1,0は、以下のように表される。
w┌n/2k┐-1,0={d┌n/2k┐*(k-1)+┌n/2k┐-1||・・・d┌n/2k┐*1+┌n/2k┐-1||d┌n/2k┐*0+┌n/2k┐-1}
【0203】
例えばスカラー値dは全体では18ビットであるがテーブル2つで上位半分のビットブロックのビット数は9である。そして、k=3であれば、┌n/k┐-1=2となる。また、┌n/k┐*(k-1)+┌n/k┐−1=3*2+3−1=9となる。9は下位ビットブロックの最上位ビットの番号である。
【0204】
そして、制御部31gは、Windowテーブルaから索引値w┌n/2k┐-1,1に対応するテーブル値を読み出し、変数Aに設定する(ステップS127)。すなわち、以下のように表される。
A=W1[w┌n/2k┐-1,1]
W1[z]は、Windowテーブルaにおいて索引値zに対応付けられているテーブル値である。
【0205】
さらに、制御部31gは、Windowテーブルbにおいて索引値w┌n/2k┐-1,0に対応するテーブル値W0と、変数Aとの加算演算を、演算器5の加算演算部51に実施させる(ステップS129)。図41では、ECADD(A,W0[w┌n/2k┐-1,0])で、楕円曲線上におけるAとW0[w┌n/2k┐-1,0]の加算演算を表す。
【0206】
そして、制御部31gは、カウンタiに、┌n/k┐−2を設定する(ステップS131)。
【0207】
さらに、制御部31gは、スカラー値dの上位ビットブロックからカウンタiで規定されるビット位置からkビット幅のwindowでビット値を(┌n/2k┐−1)ビットおきに読み出して、索引値wi,1を取得する(ステップS133)。
【0208】
dから読み出される値wi,1は、以下のように表される。
wi,1={d┌n/2k┐*(k-1)+i+┌n/2┐||・・・d┌n/2k┐*1+i+┌n/2┐||d┌n/2k┐*0+i+┌n/2┐}
すなわち、Windowが1ビット右シフトされることになる。
【0209】
また、制御部31gは、スカラー値dの下位ビットブロックからカウンタiで規定されるビット位置からkビット幅のwindowでビット値を(┌n/2k┐−1)ビットおきに読み出して、索引値wi,0を取得する(ステップS135)。
【0210】
dから読み出される値wi,0は、以下のように表される。
wi,0={d┌n/2k┐*(k-1)+i||・・・d┌n/2k┐*1+i||d┌n/2k┐*0+i}
【0211】
そして、制御部31gは、変数Aの2倍演算を、windowの右シフト幅である1回だけ演算器5の2倍演算部53に実施させる(ステップS137)。図41では、ECDBL(A)で、楕円曲線上におけるAの2倍演算を表す。
【0212】
さらに、制御部31gは、変数Aと、索引値wi,1でWindowテーブルaを検索することにより得られるテーブル値W1[wi,1]との加算演算を、演算器5の加算演算部51に実施させる(ステップS139)。
【0213】
また、制御部31gは、変数Aと、索引値wi,0でWindowテーブルbを検索することにより得られるテーブル値W0[wi,0]との加算演算を、演算器5の加算演算部51に実施させる(ステップS141)。
【0214】
そして、制御部31cは、カウンタiの値を1デクリメントし(ステップS143)、iが0以上であるか判断する(ステップS145)。iが0以上であればステップS133に戻る。すなわち、iが0未満になるまでステップS133乃至S145を繰り返す。
【0215】
iが0未満になると、制御部31gは、このようにして得られた変数Aの値を、指定された出力先に出力する(ステップS147)。変数Aの値は、例えば通信部11から外部に出力される場合もあれば、他の演算プログラムに出力されて処理に用いられる。
【0216】
以上述べたように、Windowテーブルa及びbにおいて通常のテーブル値に非ゼロのテーブル補正値を加算しておけば、どのようなスカラー値dに対しても同じ演算が繰り返されるようになる。すなわちPAが行われてもスカラー値dのビットを盗み取られることはない。一方、テーブル補正値は、2つのテーブルで相殺されるように設定されるので、演算処理はPA対策なしの場合と完全に同じになっている。すなわち、処理速度の面で、PA対策なしと同じである。また、RAM9において使用される容量は、PA対策なしの場合と同じである。ROM7において使用される容量も同様に、PA対策なしの場合と同じである。すなわち、メモリ特にRAMの容量が限られているスマートカードのような実装形態において、本実施の形態は特に有用となる。
【0217】
[実施の形態6]
実施の形態5では、2つのWindowテーブルa及びbを用いる例を示したが、テーブルの数は2に限定されるものではない。例えば、一般的にt個設ける場合について説明する。
【0218】
本実施の形態に係る楕円曲線暗号演算装置100の装置構成例を図42に示す。図17に示した楕円曲線暗号演算装置100と同じ構成要素については同じ参照番号が付されている。本楕円曲線暗号演算装置では、バス1に、CPU3と、演算器5と、ROM7と、RAM9と、通信部11とが接続されている。ROM7は、以下で説明する処理をCPU3に実行させるための演算プログラム71hと、櫛形Window法のWindowテーブルをベースとしたものであって以下で述べるWindowテーブル0乃至(t−1)とが記録されている。
【0219】
演算器5は、実施の形態1−Aと同じ加算演算部51及び2倍演算部53とを有する。また、演算プログラム71hをCPU3が実行すると、制御部31hが実現される。実施の形態5と同様に、本実施の形態においては補正を行わない。
【0220】
また、外部装置との通信を行うため通信部11を設ける例を示しているが、他の機能を実現するための装置が設けられる場合もある。RAM9は、CPU3が各種処理を実施する際に用いるデータを格納するものであり、本実施の形態では、楕円曲線におけるベースポイントGのスカラー値d倍を算出するために用いる変数Aのための領域が用意される。その他にも演算に必要なデータもRAM9には格納されるが、耐タンパ性を保持させるために追加で必要な領域は存在しない。
【0221】
Windowテーブル0乃至(t−1)のうちのWindowテーブルjに格納されるテーブル値は、以下のように表される。なお、索引値yを(yk-1||yk-2||・・・y1||y0)と表すものとする。そうすると、右からx番目のビットはyx-1と表される。また、Window幅は、各Windowテーブルについてkビットとする。さらに、スカラー値dは、nビットであるものとする。
【0222】
【数1】
K(n, k, m, t, j)=┌n/(t*k)┐×k×j+┌n/(t*k)┐×m
なお、以下では、e=┌n/(t*k)┐を示すものとする。
【0223】
上記のK(n, k, m, t, j)において、┌n/(t*k)┐×k×jの項は、同じWindowテーブルであれば同じである。すなわち、スカラー値dにおける該当ビットブロックの相対位置に応じた値になる。mはymに対応する。従って、┌n/(t*k)┐×mは、該当ビットブロックにおいてwindowの各ビットが担当する相対ビット位置に応じた値となる。
【0224】
本実施の形態では、各Windowテーブルについてのテーブル補正値Fjの総和がゼロ点となるように設定する。すなわち、以下のように表される。
F0+F1+・・・+Ft-1=0
【0225】
次に、図43を用いて、楕円曲線暗号演算装置の処理フローについて説明する。まず、制御部31hは、RAM9又はROM7に格納されているnビットのスカラー値d及び楕円曲線上のベースポイントGを読み出す(ステップS161)。そして、制御部31hは、Windowテーブル0乃至(t−1)の各々が担当するスカラー値dのビットブロックの最上位ビットから(┌n/(t*k)┐−1)ビットおきにkビット幅のwindowでビット値を読み出して、索引値we-1,0乃至we-1,t-1を取得する(ステップS163)。より具体的には、以下のように表される。
we-1,0={de*k*0+e*(k-1)+e-1||de*k*0+e*(k-2)+e-1||・・||de*k*0+e*0+e-1}
we-1,j={de*k*j+e*(k-1)+e-1||de*k*j+e*(k-2)+e-1||・・||de*k*j+e*0+e-1}
we-1,t-1={de*k*(t-1)+e*(k-1)+e-1||de*k*(t-1)+e*(k-2)+e-1||・・||de*k*(t-1)+e*0+e-1}
【0226】
また、制御部31hは、スカラー値dの最下位ビットブロックを担当するWindowテーブル0から、索引値we-1,0に対応するテーブル値W0[we-1,0]を読み出し、変数Aに設定する(ステップS165)。すなわち、以下のように表される。
A=A+W0[we-1,0]
W0[we-1,0]は、Windowテーブル0において索引値(e−1)に対応付けられているテーブル値である。
【0227】
さらに、制御部31hは、j=1からj=t-1まで順番に、Windowテーブルjにおいて索引値(e−1)に対応付けられているテーブル値Wj[we-1,j]と、変数Aとの加算演算を、演算器5の加算演算部51に繰り返し実施させる(ステップS167)。図41は、ECADD(A,Wj[we-1,j])で、楕円曲線上におけるAとWj[we-1,j]の加算演算を表す。
【0228】
そして、制御部31hは、カウンタiに、e−2を設定する(ステップS169)。これによって、windowが1ビット右シフトされたことになる。
【0229】
さらに、制御部31hは、Windowテーブル0乃至(t−1)の各々が担当するスカラー値dのビットブロックの次のビットから(┌n/(t*k)┐−1)ビットおきにkビット幅のwindowでビット値を読み出して、索引値wi,0乃至wi,t-1を取得する(ステップS171)。より具体的には、以下のように表される。
wi,0={de*k*0+e*(k-1)+i||de*k*0+e*(k-2)+i||・・||de*k*0+e*0+i}
wi,j={de*k*j+e*(k-1)+i||de*k*j+e*(k-2)+i||・・||de*k*j+e*0+i}
wi,t-1={de*k*(t-1)+e*(k-1)+i||de*k*(t-1)+e*(k-2)+i||・・||de*k*(t-1)+e*0+i}
【0230】
そして、制御部31hは、変数Aの2倍演算を、windowの右シフト幅である1回だけ演算器5の2倍演算部53に実施させる(ステップS173)。図43では、ECDBL(A)で、楕円曲線上におけるAの2倍演算を表す。
【0231】
さらに、制御部31hは、j=0からj=t-1まで順番に、Windowテーブルjにおいて索引値iに対応付けられているテーブル値Wj[wi,j]と、変数Aとの加算演算を、演算器5の加算演算部51に繰り返し実施させる(ステップS175)。
【0232】
また、制御部31hは、カウンタiの値を1デクリメントし(ステップS177)、iが0以上であるか判断する(ステップS179)。iが0以上であればステップS171に戻る。すなわち、iが0未満になるまでステップS171乃至S179を繰り返す。
【0233】
iが0未満になると、制御部31hは、このようにして得られた変数Aの値を、指定された出力先に出力する(ステップS181)。変数Aの値は、例えば通信部11から外部に出力される場合もあれば、他の演算プログラムに出力されて処理に用いられる。
【0234】
以上述べたように、Windowテーブル0乃至(t−1)において通常のテーブル値に非ゼロのテーブル補正値を加算しておけば、どのようなスカラー値dに対しても同じ演算が繰り返されるようになる。すなわちPAが行われてもスカラー値dのビットを盗み取られることはない。一方、テーブル補正値は、t個のテーブルで相殺されるように設定されるので、演算処理はPA対策なしの場合と完全に同じになっている。すなわち、処理速度の面でもPA対策なしの場合と同じである。また、RAM9において使用される容量は、PA対策なしの場合と同じである。ROM7において使用される容量も同様に、PA対策なしの場合と同じである。すなわち、メモリ特にRAMの容量が限られているスマートカードのような実装形態において、本実施の形態は特に有用となる。
【0235】
以上本技術の実施の形態を説明したが、本技術はこれに限定されるものではない。例えば実施の形態5及び6については、櫛形Window法を前提としているが、通常のWindow法を採用することも可能である。
【0236】
さらに、実施の形態5及び6で各ビットブロックに用いられるwindow幅については統一されていたが、異なるビット幅にしてもよい。また、ビットブロックのサイズを異なるようにしても良い。
【0237】
また、上で述べた楕円暗号演算装置では、演算器5をCPU3とは別に設ける例を示しているが、例えばCPU3によりその機能を実施するようにしても良い。さらに、CPU3が複数設けられている場合には、演算器5が保持する機能を他のCPUで実現するようにしても良い。さらに1つのCPU3で複数のコアを有する場合にも同様である。
【0238】
以上述べた本実施の形態をまとめると以下のようになる。
【0239】
第1の態様に係る楕円曲線暗号演算装置(図44)は、楕円曲線上の所定の点Gのスカラー倍算を実施する楕円曲線暗号演算装置であって、(A)n(nは2以上の整数)ビットのスカラー値dに対するウィンドウのウィンドウ幅k(kは2以上の整数)ビットと同じビット数の各索引値に対応付けて、当該索引値の各ビットの値と当該ビットが担当するスカラー値d中の相対ビット位置に対応する値についての2のべき乗との積の和に点Gを乗じた基本テーブル値に対して非ゼロのテーブル補正値を加えたテーブル値が格納されているウィンドウテーブル(図44の1110)を格納するデータ格納部(図44の1100)と、(B)ウィンドウをシフトさせつつ当該ウィンドウの各ビットの担当ビット位置のビット値をスカラー値dから読み出すことにより索引値を生成して当該索引値でウィンドウテーブルを検索してテーブル値を読み出し、読み出したテーブル値を用いて2倍演算及び加算演算を実施する演算処理部(図44の1200)と、(C)演算処理部の演算結果に対してテーブル補正値に応じた所定の補正値で補正を実施する補正部(図44の1300)とを有する。
【0240】
このようなウィンドウテーブルを予め用意しておくことによって、どのような索引値であっても対応するテーブル値はゼロとならない。すなわち、補正部の処理以外は、PA対策無しの場合と同じ処理を実施しても、消費電力の波形はdのビット値に応じて変化することはないので、SPAに対する耐タンパ性が保持できている。また、余分なRAM領域も必要ない。
【0241】
また、上で述べた演算処理部が、変数に格納されている値に対して楕円曲線上における2倍演算を実施して演算結果を当該変数に格納する2倍演算部と、変数に格納されている値と読み出されたテーブル値との、楕円曲線上における加算演算を実施して、演算結果を当該変数に格納する加算演算部と、制御部とを有するようにしても良い。そのような場合には、制御部が、スカラー値dの最上位ビットから、ウィンドウの各ビットの担当ビット位置のビット値を読み出して索引値を生成し、当該索引値で前記テーブル格納部に格納されているウィンドウテーブルを検索して第1のテーブル値を読み出して、上記変数に格納するようにしてもよい。そして、ウィンドウを所定のビットシフト幅だけ右シフトさせると共に、2倍演算部に、所定のビットシフト幅に応じた回数分上記変数に格納されている値に対して2倍演算を実施させ、加算演算部に、スカラー値dからウィンドウの各ビットの担当ビット位置のビット値を読み出すことにより得られる索引値でウィンドウテーブルを検索して得られる第2のテーブル値について加算演算を実施させる処理を、スカラー値dの全てのビットを処理するまで繰り返し行わせるようにしてもよい。
【0242】
2倍演算部及び加算演算部は、専用の回路であっても良いし、CPUとプログラムの組み合わせにて実施するようにしても良い。また、演算処理部については、CPUと専用の演算器とプログラムとの組み合わせにて実施されるようにしても良い。
【0243】
さらに、第1の態様において、テーブル補正値をFとし、索引値をウィンドウ幅kビットのy(yk-1||yk-2||・・・y1||y0)とすると、対応するテーブル値を、以下のような値に設定するようにしても良い。
(yk-1×2k-1+yk-2×2k-2+・・・+y1×21+y0×20)G+F
また、上で述べた所定の補正値を、以下のような値に設定するようにしても良い。
(2k*0+2k*1+2k*2+・・・+2k*(┌n/k┐-1))F
(┌n/k┐は、n/k以上の最小の整数を表す)
さらに、上で述べた担当ビット位置がkビット連続しており且つ所定のビットシフト幅がkビットである場合もある。
【0244】
例えば、通常のWindow法を採用する場合には、このような構成が必要となる。
【0245】
また、第1の態様において、テーブル補正値をFとし、索引値をウィンドウ幅kビットのy(yk-1||yk-2||・・・y1||y0)とすると、対応するテーブル値を、以下のように設定しても良い。
(yk-1×2┌n/k┐*(k-1)+yk-2×2┌n/k┐*(k-2)+・・・+y1×2┌n/k┐*1+y0×2┌n/k┐*0)G+F
(┌n/k┐は、n/k以上の最小の整数を表す)
また、上で述べた所定の補正値を、以下のように設定するようにしても良い。
(2┌n/k┐−1)F
さらに、上で述べた担当ビット位置が┌n/k┐−1ビットおきであり且つ所定のビットシフト幅が1ビットであるようにしてもよい。
【0246】
例えば、櫛形Window法を採用する場合には、このような構成が必要となる。
【0247】
さらに、第1の態様において、所定の補正値が予め算出されており且つデータ格納部に格納されているようにしてもよい。このようにすれば、処理のパフォーマンスはあまり低下しない。また、その都度計算するようにしても良い。
【0248】
第2の態様に係る楕円曲線暗号演算装置(図44)は、(A)n(nは2以上の整数)ビットのスカラー値dに対するウィンドウのウィンドウ幅k(kは2以上の整数)ビットと同じビット数の各索引値に対応付けて、当該索引値の各ビットの値と当該ビットが担当するスカラー値d中の相対ビット位置に対応する値についての2のべき乗との積の和に点Gを乗じた基本テーブル値に対して点Gの第2のスカラー値x倍のテーブル補正値を加えたテーブル値が格納されているウィンドウテーブル(図44の1110)を格納するデータ格納部(図44の1100)と、(B)スカラー値dに対して第2のスカラー値xに応じた所定の補正値で補正を実施して、第3のスカラー値fを生成する補正部(図44の1300)と、(C)ウィンドウをシフトさせつつ当該ウィンドウの各ビットの担当ビット位置のビット値を第3のスカラー値fから読み出すことにより索引値を生成して当該索引値でウィンドウテーブルを検索してテーブル値を読み出し、読み出したテーブル値を用いて2倍演算及び加算演算を実施する演算処理部(図44の1200)とを有する。
【0249】
このように、ウィンドウテーブルの基本テーブル値に加算するテーブル補正値が、点Gの第2のスカラー値x倍である場合には、第1のスカラー値を補正することによって、楕円曲線上の演算が不要になって、補正の処理負荷を下げることができるようになる。なお、第1の態様においても、テーブル補正値をxGと設定することも可能である。当然、追加のRAMも不要である。
【0250】
また、上で述べた演算処理部が、変数に格納されている値に対して楕円曲線上における2倍演算を実施して演算結果を当該変数に格納する2倍演算部と、変数に格納されている値と読み出されたテーブル値との、楕円曲線上における加算演算を実施し、演算結果を当該変数に格納する加算演算部と、制御部とを有するようにしてもよい。そのような場合、上で述べた制御部が、第3のスカラー値fの最上位ビットから、ウィンドウの各ビットの担当ビット位置のビット値を読み出して索引値を生成し、当該索引値でテーブル格納部に格納されているウィンドウテーブルを検索して第1のテーブル値を読み出して、変数に格納するようにしてもよい。さらに、ウィンドウを所定のビットシフト幅だけ右シフトさせると共に、2倍演算部に、所定のビットシフト幅に応じた回数分変数に格納されている値に対して2倍演算を実施させ、加算演算部に、第3のスカラー値fからウィンドウの各ビットの担当ビット位置のビット値を読み出すことにより得られる索引値でウィンドウテーブルを検索して得られる第2のテーブル値について加算演算を実施させる処理を、第3のスカラー値fの全てのビットを処理するまで繰り返し行わせるようにしてもよい。
【0251】
2倍演算部及び加算演算部については、第1の形態と同様に、従来から用いられているものが使用できる。ハードウエアで実装しても良いし、ソフトウエアで実装しても良い。制御部は、CPUとプログラムとの組み合わせにて実施される場合もある。
【0252】
また、第2の態様において、索引値をウィンドウ幅kビットのy(yk-1||yk-2||・・・y1||y0)とすると、対応するテーブル値を、以下のように設定するようにしてもよい。
(yk-1×2k-1+yk-2×2k-2+・・・+y1×21+y0×20)G+xG
また、上で述べた所定の補正値を、以下のように設定するようにしてもよい。
(2k*0+2k*1+2k*2+・・・+2k*(┌n/k┐-1))x
(┌n/k┐は、n/k以上の最小の整数を表す)
さらに、担当ビット位置がkビット連続しており且つ所定のビットシフト幅がkビットであるようにしてもよい。
【0253】
例えば、第2の態様において通常のWindow法を採用する場合にはこのような構成となる。
【0254】
さらに、第2の態様において、索引値をウィンドウ幅kビットのy(yk-1||yk-2||・・・y1||y0)とすると、対応するテーブル値を、以下のように設定してもよい。
(yk-1×2┌n/k┐*(k-1)+yk-2×2┌n/k┐*(k-2)+・・・+y1×2┌n/k┐*1+y0×2┌n/k┐*0)G+xG
(┌n/k┐は、n/k以上の最小の整数を表す)
また、上で述べた所定の補正値を、以下のように設定してもよい。
(2┌n/k┐−1)x
さらに、担当ビット位置が┌n/k┐−1ビットおきであり且つ所定のビットシフト幅が1ビットであるようにしてもよい。
【0255】
例えば、第2の態様において櫛形Window法を採用する場合にはこのような構成が必要となる。
【0256】
第3の態様に係る楕円曲線暗号演算装置(図45)は、(A)スカラー値dのブロック毎に、当該ブロックに対するウィンドウのウィンドウ幅k(kは2以上の整数)ビットと同じビット数の各索引値に対応付けて、当該索引値の各ビットの値と当該ビットが担当するブロック中の相対ビット位置及び前記スカラー値d中の当該ブロックの相対位置に対応する値についての2のべき乗との積の和に前記点Gを乗じた基本テーブル値に対して非ゼロのブロックテーブル補正値を加えたテーブル値が格納されているウィンドウテーブル(図45の1610)を格納するデータ格納部(図45の1600)と、(B)ウィンドウをシフトさせつつ当該ウィンドウの各ビットの担当ビット位置のビット値をスカラー値dの各ブロックから読み出すことにより索引値を生成して当該索引値で各ブロックのウィンドウテーブルを検索してテーブル値を読み出し、読み出したテーブル値を用いて2倍演算及び加算演算を実施する演算処理部(図45の1700)とを有する。そして、各ブロックについてのブロックテーブル補正値の総和がゼロとなっている。
【0257】
このようなウィンドウテーブルを複数用意することによって、スカラー値dの補正も演算結果の補正も不要となるので、PA対策なしの場合と同様の処理負荷でPA対策を行うことができるようになる。当然、追加のRAMも不要である。
【0258】
また、上で述べた演算処理部が、変数に格納されている値に対して楕円曲線上における2倍演算を実施して演算結果を当該変数に格納する2倍演算部と、変数に格納されている値と読み出されたテーブル値との、楕円曲線上における加算演算を実施し、当該変数に格納する加算演算部と、制御部とを有するようにしても良い。そのような場合、上で述べた制御部が、スカラー値dの最上位ブロックの最上位ビットから、ウィンドウの各ビットの担当ビット位置のビット値を読み出して索引値を生成し、当該索引値でテーブル格納部に格納されている最上位ブロックについてのウィンドウテーブルを検索して第1のテーブル値を読み出して、上記変数に格納するようにしてもよい。さらに、上で述べた加算演算部に、スカラー値dの第2位ブロック以下の各ブロックの最上位ビットからウィンドウの各ビットの担当ビット位置のビット値を読み出すことにより得られる索引値により処理に係るブロックについてのウィンドウテーブルを検索して得られる第2のテーブル値と、変数に格納されている値との加算演算を最下位ブロックまで繰り返し実施させるようにしてもよい。そして、ウィンドウを所定のビットシフト幅だけ各ブロック内において右シフトさせると共に、上で述べた2倍演算部に、所定のビットシフト幅に応じた回数分変数に格納されている値に対して2倍演算を実施させ、加算演算部に、スカラー値dの各前記ブロックからウィンドウの各ビットの担当ビット位置のビット値を読み出すことにより得られる索引値により処理に係るブロックについてのウィンドウテーブルを検索して得られる第3のテーブル値についての加算演算を最下位ブロックまで繰り返し実施させる処理を、スカラー値dの全てのビットを処理するまで繰り返し行わせるようにしてもよい。
【0259】
なお、第3の態様においても、通常のWindow法を採用しても、櫛形Window法を採用してもよい。
【0260】
より具体的に、櫛形Window法を採用する場合には、ブロックの番号をjとし、スカラー値はnビットとし、ブロックの個数をtとし、ブロックの番号jの前記テーブル補正値をFjとし、索引値をウィンドウ幅kビットのy(yk-1||yk-2||・・・y1||y0)とすると、対応するテーブル値は、以下のように設定される。
【0261】
【数2】
K(n, t, m, t, j)=┌n/(t*k)┐×k×j+┌n/(t*k)┐×m
【0262】
(┌z┐は、z以上の最小の整数を表す)
また、担当ビット位置が┌n/(k*t)┐−1ビットおきであり且つ所定のビットシフト幅が1ビットである。
【0263】
第4の態様に係る楕円曲線暗号演算方法は、n(nは2以上の整数)ビットのスカラー値dに対するウィンドウのウィンドウ幅k(kは2以上の整数)ビットと同じビット数の各索引値に対応付けて、当該索引値の各ビットの値と当該ビットが担当するスカラー値d中の相対ビット位置に対応する値についての2のべき乗との積の和に楕円曲線上の所定の点Gを乗じた基本テーブル値に対して非ゼロのテーブル補正値を加えたテーブル値が格納されているウィンドウテーブルを格納するデータ格納部を有する装置により実行される。そして、本楕円曲線暗号演算方法は、(A)ウィンドウをシフトさせつつ当該ウィンドウの各ビットの担当ビット位置のビット値をスカラー値dから読み出すことにより索引値を生成して当該索引値でウィンドウテーブルを検索してテーブル値を読み出し、読み出したテーブル値を用いて2倍演算及び加算演算を実施するステップと、(B)演算処理部の演算結果に対してテーブル補正値に応じた所定の補正値で補正を実施するステップとを含む。
【0264】
第5の態様に係る楕円曲線暗号演算方法は、(A)n(nは2以上の整数)ビットのスカラー値dに対するウィンドウのウィンドウ幅k(kは2以上の整数)ビットと同じビット数の各索引値に対応付けて、当該索引値の各ビットの値と当該ビットが担当するスカラー値d中の相対ビット位置に対応する値についての2のべき乗との積の和に楕円曲線上の所定の点Gを乗じた基本テーブル値に対して点Gの第2のスカラー値x倍のテーブル補正値を加えたテーブル値が格納されているウィンドウテーブルを格納するデータ格納部を有する装置により実行される。そして、本楕円曲線暗号演算方法は、(B)スカラー値dに対して第2のスカラー値xに応じた所定の補正値で補正を実施して、第3のスカラー値fを生成するステップと、(C)ウィンドウをシフトさせつつ当該ウィンドウの各ビットの担当ビット位置のビット値を第3のスカラー値fから読み出すことにより索引値を生成して当該索引値でウィンドウテーブルを検索してテーブル値を読み出し、読み出したテーブル値を用いて2倍演算及び加算演算を実施するステップとを含む。
【0265】
第6の態様に係る楕円曲線暗号演算方法は、(A)n(nは2以上の整数)ビットのスカラー値dのブロック毎に、当該ブロックに対するウィンドウのウィンドウ幅k(kは2以上の整数)ビットと同じビット数の各索引値に対応付けて、当該索引値の各ビットの値と当該ビットが担当するブロック中の相対ビット位置及びスカラー値d中の当該ブロックの相対位置に対応する値についての2のべき乗との積の和に楕円曲線上の所定の点Gを乗じた基本テーブル値に対して非ゼロのブロックテーブル補正値を加えたテーブル値が格納されているウィンドウテーブルを格納するデータ格納部を有する装置により実行される。そして、本楕円曲線暗号演算方法は、(B)ウィンドウをシフトさせつつ当該ウィンドウの各ビットの担当ビット位置のビット値をスカラー値dの各前記ブロックから読み出すことにより索引値を生成して当該索引値で各ブロックのウィンドウテーブルを検索してテーブル値を読み出すステップと、(C)読み出したテーブル値を用いて2倍演算及び加算演算を実施するステップとを含む。そして、各ブロックについてのブロックテーブル補正値の総和がゼロとなっている。
【0266】
なお、上で述べたような処理をスマートカードなどの装置に実施させるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブル・ディスク、CD−ROM、光磁気ディスク、半導体メモリ(例えばROM)、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。なお、処理途中のデータについては、RAM等の記憶装置に一時保管される。
【0267】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【0268】
(付記1)
楕円曲線上の所定の点Gのスカラー倍算を実施する楕円曲線暗号演算装置であって、
n(nは2以上の整数)ビットのスカラー値dに対するウィンドウのウィンドウ幅k(kは2以上の整数)ビットと同じビット数の各索引値に対応付けて、当該索引値の各ビットの値と当該ビットが担当する前記スカラー値d中の相対ビット位置に対応する値についての2のべき乗との積の和に前記点Gを乗じた基本テーブル値に対して非ゼロのテーブル補正値を加えたテーブル値が格納されているウィンドウテーブルを格納するデータ格納部と、
前記ウィンドウをシフトさせつつ当該ウィンドウの各ビットの担当ビット位置のビット値を前記スカラー値dから読み出すことにより索引値を生成して当該索引値で前記ウィンドウテーブルを検索してテーブル値を読み出し、読み出した前記テーブル値を用いて2倍演算及び加算演算を実施する演算処理部と、
前記演算処理部の演算結果に対して前記テーブル補正値に応じた所定の補正値で補正を実施する補正部と、
を有する楕円曲線暗号演算装置。
【0269】
(付記2)
前記演算処理部が、
変数に格納されている値に対して前記楕円曲線上における2倍演算を実施して演算結果を当該変数に格納する2倍演算部と、
前記変数に格納されている値と読み出された前記テーブル値との、前記楕円曲線上における加算演算を実施して、演算結果を当該変数に格納する加算演算部と、
制御部と、
を有し、
前記制御部が、
前記スカラー値dの最上位ビットから、前記ウィンドウの各ビットの担当ビット位置のビット値を読み出して索引値を生成し、当該索引値で前記テーブル格納部に格納されている前記ウィンドウテーブルを検索して第1のテーブル値を読み出して、前記変数に格納し、
前記ウィンドウを所定のビットシフト幅だけ右シフトさせると共に、前記2倍演算部に、前記所定のビットシフト幅に応じた回数分前記変数に格納されている値に対して2倍演算を実施させ、前記加算演算部に、前記スカラー値dから前記ウィンドウの各ビットの担当ビット位置のビット値を読み出すことにより得られる索引値で前記ウィンドウテーブルを検索して得られる第2のテーブル値について加算演算を実施させる処理を、前記スカラー値dの全てのビットを処理するまで繰り返し行わせる
付記1記載の楕円曲線暗号演算装置。
【0270】
(付記3)
前記テーブル補正値をFとし、前記索引値を前記ウィンドウ幅kビットのy(yk-1||yk-2||・・・y1||y0)とすると、対応する前記テーブル値が、
(yk-1×2k-1+yk-2×2k-2+・・・+y1×21+y0×20)G+F
であり、
前記所定の補正値が、
(2k*0+2k*1+2k*2+・・・+2k*(┌n/k┐-1))F
(┌n/k┐は、n/k以上の最小の整数を表す)
であり、
前記担当ビット位置がkビット連続しており且つ前記所定のビットシフト幅がkビットである
付記1又は2記載の楕円曲線暗号演算装置。
【0271】
(付記4)
前記テーブル補正値をFとし、前記索引値を前記ウィンドウ幅kビットのy(yk-1||yk-2||・・・y1||y0)とすると、対応する前記テーブル値が、
(yk-1×2┌n/k┐*(k-1)+yk-2×2┌n/k┐*(k-2)+・・・+y1×2┌n/k┐*1+y0×2┌n/k┐*0)G+F
(┌n/k┐は、n/k以上の最小の整数を表す)
であり、
前記所定の補正値が、
(2┌n/k┐−1)F
であり、
前記担当ビット位置が┌n/k┐−1ビットおきであり且つ前記所定のビットシフト幅が1ビットである
付記1又は2記載の楕円曲線暗号演算装置。
【0272】
(付記5)
前記所定の補正値が予め算出されており且つ前記データ格納部に格納されている付記1乃至4のいずれか1つ記載の楕円曲線暗号演算装置。
【0273】
(付記6)
楕円曲線上の所定の点Gのスカラー倍算を実施する楕円曲線暗号演算装置であって、
n(nは2以上の整数)ビットのスカラー値dに対するウィンドウのウィンドウ幅k(kは2以上の整数)ビットと同じビット数の各索引値に対応付けて、当該索引値の各ビットの値と当該ビットが担当する前記スカラー値d中の相対ビット位置に対応する値についての2のべき乗との積の和に前記点Gを乗じた基本テーブル値に対して前記点Gの第2のスカラー値x倍のテーブル補正値を加えたテーブル値が格納されているウィンドウテーブルを格納するデータ格納部と、
前記スカラー値dに対して前記第2のスカラー値xに応じた所定の補正値で補正を実施して、第3のスカラー値fを生成する補正部と、
前記ウィンドウをシフトさせつつ当該ウィンドウの各ビットの担当ビット位置のビット値を前記第3のスカラー値fから読み出すことにより索引値を生成して当該索引値で前記ウィンドウテーブルを検索してテーブル値を読み出し、読み出した前記テーブル値を用いて2倍演算及び加算演算を実施する演算処理部と、
を有する楕円曲線暗号演算装置。
【0274】
(付記7)
前記演算処理部が、
変数に格納されている値に対して前記楕円曲線上における2倍演算を実施して演算結果を当該変数に格納する2倍演算部と、
前記変数に格納されている値と読み出された前記テーブル値との、前記楕円曲線上における加算演算を実施し、演算結果を当該変数に格納する加算演算部と、
制御部と、
を有し、
前記制御部が、
前記第3のスカラー値fの最上位ビットから、前記ウィンドウの各ビットの担当ビット位置のビット値を読み出して索引値を生成し、当該索引値で前記テーブル格納部に格納されている前記ウィンドウテーブルを検索して第1のテーブル値を読み出して、前記変数に格納し、
前記ウィンドウを所定のビットシフト幅だけ右シフトさせると共に、前記2倍演算部に、前記所定のビットシフト幅に応じた回数分前記変数に格納されている値に対して2倍演算を実施させ、前記加算演算部に、前記第3のスカラー値fから前記ウィンドウの各ビットの担当ビット位置のビット値を読み出すことにより得られる索引値で前記ウィンドウテーブルを検索して得られる第2のテーブル値について加算演算を実施させる処理を、前記第3のスカラー値fの全てのビットを処理するまで繰り返し行わせる
付記6記載の楕円曲線暗号演算装置。
【0275】
(付記8)
前記索引値を前記ウィンドウ幅kビットのy(yk-1||yk-2||・・・y1||y0)とすると、対応する前記テーブル値が、
(yk-1×2k-1+yk-2×2k-2+・・・+y1×21+y0×20)G+xG
であり、
前記所定の補正値が、
(2k*0+2k*1+2k*2+・・・+2k*(┌n/k┐-1))x
(┌n/k┐は、n/k以上の最小の整数を表す)
であり、
前記担当ビット位置がkビット連続しており且つ前記所定のビットシフト幅がkビットである
付記6又は7記載の楕円曲線暗号演算装置。
【0276】
(付記9)
前記索引値を前記ウィンドウ幅kビットのy(yk-1||yk-2||・・・y1||y0)とすると、対応する前記テーブル値が、
(yk-1×2┌n/k┐*(k-1)+yk-2×2┌n/k┐*(k-2)+・・・+y1×2┌n/k┐*1+y0×2┌n/k┐*0)G+xG
(┌n/k┐は、n/k以上の最小の整数を表す)
であり、
前記所定の補正値が、
(2┌n/k┐−1)x
であり、
前記担当ビット位置が┌n/k┐−1ビットおきであり且つ前記所定のビットシフト幅が1ビットである
付記6又は7記載の楕円曲線暗号演算装置。
【0277】
(付記10)
楕円曲線上の所定の点Gのスカラー倍算を実施する楕円曲線暗号演算装置であって、
スカラー値dのブロック毎に、当該ブロックに対するウィンドウのウィンドウ幅k(kは2以上の整数)ビットと同じビット数の各索引値に対応付けて、当該索引値の各ビットの値と当該ビットが担当する前記ブロック中の相対ビット位置及び前記スカラー値d中の当該ブロックの相対位置に対応する値についての2のべき乗との積の和に前記点Gを乗じた基本テーブル値に対して非ゼロのブロックテーブル補正値を加えたテーブル値が格納されているウィンドウテーブルを格納するデータ格納部と、
前記ウィンドウをシフトさせつつ当該ウィンドウの各ビットの担当ビット位置のビット値を前記スカラー値dの各前記ブロックから読み出すことにより索引値を生成して当該索引値で各前記ブロックの前記ウィンドウテーブルを検索してテーブル値を読み出し、読み出した前記テーブル値を用いて2倍演算及び加算演算を実施する演算処理部と、
を有し、
各前記ブロックについての前記ブロックテーブル補正値の総和がゼロとなっていることを特徴とする
楕円曲線暗号演算装置。
【0278】
(付記11)
前記演算処理部が、
変数に格納されている値に対して前記楕円曲線上における2倍演算を実施して演算結果を当該変数に格納する2倍演算部と、
前記変数に格納されている値と読み出された前記テーブル値との、前記楕円曲線上における加算演算を実施し、当該変数に格納する加算演算部と、
制御部と、
を有し、
前記制御部が、
前記スカラー値dの最上位ブロックの最上位ビットから、前記ウィンドウの各ビットの担当ビット位置のビット値を読み出して索引値を生成し、当該索引値で前記テーブル格納部に格納されている前記最上位ブロックについてのウィンドウテーブルを検索して第1のテーブル値を読み出して、前記変数に格納し、
前記加算演算部に、前記スカラー値dの第2位ブロック以下の各ブロックの最上位ビットから前記ウィンドウの各ビットの担当ビット位置のビット値を読み出すことにより得られる索引値により処理に係る前記ブロックについてのウィンドウテーブルを検索して得られる第2のテーブル値と前記変数に格納されている値との加算演算を最下位ブロックまで繰り返し実施させ、
前記ウィンドウを所定のビットシフト幅だけ各前記ブロック内において右シフトさせると共に、前記2倍演算部に、前記所定のビットシフト幅に応じた回数分前記変数に格納されている値に対して2倍演算を実施させ、前記加算演算部に、前記スカラー値dの各前記ブロックから前記ウィンドウの各ビットの担当ビット位置のビット値を読み出すことにより得られる索引値により処理に係る前記ブロックについてのウィンドウテーブルを検索して得られる第3のテーブル値についての加算演算を最下位ブロックまで繰り返し実施させる処理を、前記スカラー値dの全てのビットを処理するまで繰り返し行わせる
付記10記載の楕円曲線暗号演算装置。
【0279】
(付記12)
前記ブロックの番号をjとし、前記ブロックの個数をtとし、前記スカラー値dはnビットとし、前記ブロックの番号jの前記テーブル補正値をFjとし、前記索引値を前記ウィンドウ幅kビットのy(yk-1||yk-2||・・・y1||y0)とすると、対応する前記テーブル値が、
【数3】
K(n, k, m, t, j)=┌n/(t*k)┐×k×j+┌n/(t*k)┐×m
(┌z┐は、z以上の最小の整数を表す)
であり、
前記担当ビット位置が┌n/2k┐−1ビットおきであり且つ前記所定のビットシフト幅が1ビットである
付記10又は11記載の楕円曲線暗号演算装置。
【0280】
(付記13)
n(nは2以上の整数)ビットのスカラー値dに対するウィンドウのウィンドウ幅k(kは2以上の整数)ビットと同じビット数の各索引値に対応付けて、当該索引値の各ビットの値と当該ビットが担当する前記スカラー値d中の相対ビット位置に対応する値についての2のべき乗との積の和に楕円曲線上の所定の点Gを乗じた基本テーブル値に対して非ゼロのテーブル補正値を加えたテーブル値が格納されているウィンドウテーブルを格納するデータ格納部を有する装置により実行される楕円曲線暗号演算方法であって、
前記ウィンドウをシフトさせつつ当該ウィンドウの各ビットの担当ビット位置のビット値を前記スカラー値dから読み出すことにより索引値を生成して当該索引値で前記ウィンドウテーブルを検索してテーブル値を読み出し、読み出した前記テーブル値を用いて2倍演算及び加算演算を実施するステップと、
前記演算処理部の演算結果に対して前記テーブル補正値に応じた所定の補正値で補正を実施するステップと、
を含む楕円曲線暗号演算方法。
【0281】
(付記14)
n(nは2以上の整数)ビットのスカラー値dに対するウィンドウのウィンドウ幅k(kは2以上の整数)ビットと同じビット数の各索引値に対応付けて、当該索引値の各ビットの値と当該ビットが担当する前記スカラー値d中の相対ビット位置に対応する値についての2のべき乗との積の和に楕円曲線上の所定の点Gを乗じた基本テーブル値に対して前記点Gの第2のスカラー値x倍のテーブル補正値を加えたテーブル値が格納されているウィンドウテーブルを格納するデータ格納部を有する装置により実行される楕円曲線暗号演算方法であって、
前記スカラー値dに対して前記第2のスカラー値xに応じた所定の補正値で補正を実施して、第3のスカラー値fを生成するステップと、
前記ウィンドウをシフトさせつつ当該ウィンドウの各ビットの担当ビット位置のビット値を前記第3のスカラー値fから読み出すことにより索引値を生成して当該索引値で前記ウィンドウテーブルを検索してテーブル値を読み出し、読み出した前記テーブル値を用いて2倍演算及び加算演算を実施するステップと、
を含む楕円曲線暗号演算方法。
【0282】
(付記15)
n(nは2以上の整数)ビットのスカラー値dのブロック毎に、当該ブロックに対するウィンドウのウィンドウ幅k(kは2以上の整数)ビットと同じビット数の各索引値に対応付けて、当該索引値の各ビットの値と当該ビットが担当する前記ブロック中の相対ビット位置及び前記スカラー値d中の当該ブロックの相対位置に対応する値についての2のべき乗との積の和に楕円曲線上の所定の点Gを乗じた基本テーブル値に対して非ゼロのブロックテーブル補正値を加えたテーブル値が格納されているウィンドウテーブルを格納するデータ格納部を有する装置により実行される楕円曲線暗号演算方法であって、
前記ウィンドウをシフトさせつつ当該ウィンドウの各ビットの担当ビット位置のビット値を前記スカラー値dの各前記ブロックから読み出すことにより索引値を生成して当該索引値で各前記ブロックの前記ウィンドウテーブルを検索してテーブル値を読み出すステップと、
読み出した前記テーブル値を用いて2倍演算及び加算演算を実施するステップと、
を含み、
各前記ブロックについての前記ブロックテーブル補正値の総和がゼロとなっていることを特徴とする
楕円曲線暗号演算方法。
【0283】
(付記16)
n(nは2以上の整数)ビットのスカラー値dに対するウィンドウのウィンドウ幅k(kは2以上の整数)ビットと同じビット数の各索引値に対応付けて、当該索引値の各ビットの値と当該ビットが担当する前記スカラー値d中の相対ビット位置に対応する値についての2のべき乗との積の和に楕円曲線上の所定の点Gを乗じた基本テーブル値に対して非ゼロのテーブル補正値を加えたテーブル値が格納されているウィンドウテーブルを格納するデータ格納部を有する装置に、
前記ウィンドウをシフトさせつつ当該ウィンドウの各ビットの担当ビット位置のビット値を前記スカラー値dから読み出すことにより索引値を生成して当該索引値で前記ウィンドウテーブルを検索してテーブル値を読み出し、読み出した前記テーブル値を用いて2倍演算及び加算演算を実施するステップと、
前記演算処理部の演算結果に対して前記テーブル補正値に応じた所定の補正値で補正を実施するステップと、
を実行させるための楕円曲線暗号演算プログラム。
【0284】
(付記17)
n(nは2以上の整数)ビットのスカラー値dに対するウィンドウのウィンドウ幅k(kは2以上の整数)ビットと同じビット数の各索引値に対応付けて、当該索引値の各ビットの値と当該ビットが担当する前記スカラー値d中の相対ビット位置に対応する値についての2のべき乗との積の和に楕円曲線上の所定の点Gを乗じた基本テーブル値に対して前記点Gの第2のスカラー値x倍のテーブル補正値を加えたテーブル値が格納されているウィンドウテーブルを格納するデータ格納部を有する装置に、
前記スカラー値dに対して前記第2のスカラー値xに応じた所定の補正値で補正を実施して、第3のスカラー値fを生成するステップと、
前記ウィンドウをシフトさせつつ当該ウィンドウの各ビットの担当ビット位置のビット値を前記第3のスカラー値fから読み出すことにより索引値を生成して当該索引値で前記ウィンドウテーブルを検索してテーブル値を読み出し、読み出した前記テーブル値を用いて2倍演算及び加算演算を実施するステップと、
を実行させるための楕円曲線暗号演算プログラム。
【0285】
(付記18)
n(nは2以上の整数)ビットのスカラー値dのブロック毎に、当該ブロックに対するウィンドウのウィンドウ幅k(kは2以上の整数)ビットと同じビット数の各索引値に対応付けて、当該索引値の各ビットの値と当該ビットが担当する前記ブロック中の相対ビット位置及び当該ブロックの前記スカラー値d中の相対位置に対応する値についての2のべき乗との積の和に楕円曲線上の所定の点Gを乗じた基本テーブル値に対して非ゼロのブロックテーブル補正値を加えたテーブル値が格納されているウィンドウテーブルを格納するデータ格納部を有する装置に、
前記ウィンドウをシフトさせつつ当該ウィンドウの各ビットの担当ビット位置のビット値を前記スカラー値dの各前記ブロックから読み出すことにより索引値を生成して当該索引値で各前記ブロックの前記ウィンドウテーブルを検索してテーブル値を読み出すステップと、
読み出した前記テーブル値を用いて2倍演算及び加算演算を実施するステップと、
を実行させ、
各前記ブロックについての前記ブロックテーブル補正値の総和がゼロとなっていることを特徴とする
楕円曲線暗号演算プログラム。
【符号の説明】
【0286】
1 バス 3 CPU 5 演算器
7 ROM 9 RAM 11 通信部
71 演算プログラム 73 補正点データ
75 Windowテーブル
51 加算演算部 53 2倍演算部
【技術分野】
【0001】
本技術は、楕円曲線暗号技術に関する。
【背景技術】
【0002】
情報化社会の発展に伴い、電子決済、住民基本台帳ネットワークなどの情報ネットワークを利用したサービスが普及すると予想される。これらのサービスを安全に運用するためには情報セキュリティ技術が必須であり、情報セキュリティの基盤技術として公開鍵暗号技術が用いられる。公開鍵暗号技術には様々な方式が知られているが、その中の主要な方式として楕円曲線暗号が知られている。公開鍵暗号技術を用いることで、暗号、デジタル署名又は認証機能といったサービスを実現し、個人情報に対する第三者からの不正なアクセスを防止することができる。
【0003】
また、電子決済、住民基本台帳ネットワークなどのサービスにおけるエンドユーザ側のデバイスとして、スマートカードが知られている。スマートカードはIC(Integrated Circuit)チップを搭載したカードであり、チップ内部のメモリ領域にユーザの秘密情報を格納している。スマートカードのICチップには暗号、デジタル署名又は認証機能を搭載しており、これらの機能のための処理を実施する際には、ユーザの秘密情報が鍵として用いられる。ユーザの秘密情報はカード内部のメモリ領域に格納されるため、第三者からの不正な覗き見に対する安全性(耐タンパ性)が磁気記録型のカードに比べて飛躍的に向上すると考えられている。
【0004】
しかし、1998年に電力解析攻撃(PA:Power Analysis。以下、PAと呼ぶ)と呼ばれる解析方法が発見されたことで、スマートカードの耐タンパ性に対する脆弱性が認識されるようになった。スマートカードは、ユーザの秘密情報を鍵として用いて暗号処理を実施しているが、PAは、暗号処理中のスマートカードの消費電力を測定し、測定されたデータを用いることでユーザの秘密情報を推定且つ解析するものである。
【0005】
PAは強力な解析法として知られており、PAの防止策についての必要性については、各種国際標準に記載されている。例えば、セキュリティの国際標準であるISO15408のスマートカード向けプロテクションプロファイル(PP:Protection Profile)ではPAへの対策が必須とされている。さらに、この攻撃は電力を観察する攻撃であるため、攻撃対象はスマートカードに限定されない。PDA(Personal Digital Assistant)デバイスに対して、電力消費時に発生する電磁波を測定するPAも知られており、PAは電力を消費する組み込み機器全般が攻撃対象となる。
【0006】
以下、公開鍵暗号技術の中で、楕円曲線暗号方式について基本的事項を説明すると共に、どのようにPAが実施されるかについて説明する。
【0007】
[楕円曲線暗号]
楕円曲線暗号は、図1に示されるような楕円曲線における有理点の演算を用いた暗号である。楕円曲線には、素体と2べきの2種類が存在する。それぞれ、2つのパラメータであるaとbとを用いて、以下の関係式のように表現可能である。
素体:y2=x3+ax+b (mod p)(x,y,a,b∈GF(p),p:素体)
2べき:y2+yx=x3+ax2+b (mod f(x))(x,y,a,b∈GF(2m),f(x):m次既約多項式)
【0008】
以下では、素体の楕円曲線を対象に説明を行うが、以下の議論は2べきの楕円曲線に対しても同様に適用できる。
【0009】
楕円曲線における有理点とは、楕円曲線の関係式を満たす(x,y)の集合である。楕円曲線では、任意の点に対し、「点の加算」と「点の2倍算」という2種類の演算が定義される。点は、二次元ベクトル(x,y)による表現(affine表現)と,三次元ベクトル(X,Y,Z)による表現(射影座標、Jacobian座標)によって表される。
【0010】
図2は、2つの楕円曲線上の点P及びQの加算を表している。点Pと点Qを加算した点Rは、以下のように定義される。すなわち、PとQを結ぶ直線と楕円曲線の交点から垂線を引き、その垂線と楕円曲線の交点がRと定義される。楕円曲線における点の加算では、一般的な整数の加算と同様に、交換則(A+B=B+A)が成立する。3次元ベクトル表現において、点の加算を行う場合、2点のうちどちらかの点のZ座標が1の場合、加算の高速化を実現可能となる。また、点の減算については、P=R−Qとすることで、同様に定義される。すなわち、点Rから垂線を引き、その垂線と楕円曲線の交点と点Qを結ぶ直線を引く。その直線と楕円曲線の交点が点Pとなる。
【0011】
Jacobian座標を用いた場合における点の加算の演算手順は、よく知られている。図3に詳細を示すが、素体における点Aと点Bの加算R=ECADD(A,B)=A+Bのためにステップ800乃至835が必要であることが分かる。なお、ECDBL(A)=A+Aである。詳細な説明は省略するが、一般的に、点の加算、点の減算は、整数の加算や減算に比べると、時間のかかる演算であること分かる。
【0012】
また、図4は、楕円曲線上の点Pの2倍算を表している。点Pの2倍算は以下のように定義される。すなわち、楕円曲線上の点Pから接線を引き、その接線と楕円曲線の交点から垂線を引き、その垂線と楕円曲線の交点が2倍算の結果Rと定義される。
【0013】
図5(a)及び(b)は、マイナス点と無限遠点を表している。図5(a)に示すように、楕円曲線上の点Pのマイナス点「−P」は、点Pから垂線を引き、その垂線と楕円曲線の交点と定義される。また、図5(b)に示すように、無限遠点は、点Pと点−Pを結ぶ直線と楕円曲線の交点と定義される。無限遠点Oは、一般的な整数の加算におけるゼロと同様の性質を持ち、A+O=O+A=A,2O=Oが成立する。
【0014】
さらに、楕円曲線暗号では、点のスカラー倍算(Elliptic Scalar Multiplication)と呼ばれる処理を用いた演算が行われる。点のスカラー倍算は、楕円曲線上の点A、スカラー値と呼ばれる整数xから、
V=xA
を満たす楕円曲線上の点Vを計算する処理であり、xを秘密情報とした処理が行われる。図1、図2、図4及び図5(a)及び(b)と同様な形で図示すると、点Aのスカラーd倍は、図6のように示される。より具体的には、点のスカラー倍算は、上で述べた点の加算及び2倍算を基にして行われる。ECDH(Elliptic Curve Diffie Hellman)鍵交換の場合、通信相手の公開鍵となる楕円曲線上の点をA、個人鍵をdとすると、
V=dA
を満たす楕円曲線上の点Vを計算することで、安全な鍵共有を実現する。個人鍵dの値を知らない第三者は正しい共有鍵の値を算出することができない。ここでは、dが個人の秘密鍵であり、攻撃者などの不正な第三者に漏洩してはならない値である。すなわち、dの値の保護が重要な耐タンパ機能となる。数学的には、d以外の値(すなわちA及びV)が既知だとしても、dを計算する計算量が大きすぎるため、現実的な時間内にdを求めることが難しい問題として知られている(すなわち、楕円曲線上の離散対数問題。)。すなわち、楕円曲線パラメータ(Elliptic Curve Parameter)が160ビット以上の場合、AやVの値を知っていたとしても、dの値を求めることが困難となる。
【0015】
このように、数学的に求めることが困難な個人鍵dであるが、上で述べたPAを用いることで容易に解読することができることが知られている。PAの基本メカニズムは、点のスカラー倍算の処理手順と大きな関連があり、PAを用いることで、dを1ビット単位で解読できることが知られている。
【0016】
楕円曲線上の点Aのd倍点V(=dA)は、上でも述べたように点の加算と2倍算を用いて算出される。このような演算手法は、楕円曲線上の演算に限らず、様々な場面で用いられる。具体的には、よく知られているバイナリ法、Window法、櫛型Window法などが挙げられる。以下では、Window法及び櫛型Window法を用いた点のスカラー倍算を説明する。
【0017】
図7に、Window法を用いた、点のスカラー倍算のアルゴリズムを示す。ここでは、楕円曲線上の点G、スカラー値をd(例として12ビット幅)として、A=dGを求めるものとする。例として、Window法のWindow幅を3ビットとし、Windowテーブルの要素数を23=8個とする。具体的には、索引「000」に対応付けて0G=O(ゼロ点)を設定し、索引「001」に対応付けて20Gを設定し、索引「010」に対応付けて21Gを設定し、索引「011」に対応付けて21G+20を設定し、索引「100」に対応付けて22Gを設定し、索引「101」に対応付けて22+20Gを設定し、索引「110」に対応付けて22+21を設定し、索引「111」に対応付けて22+21+20を設定するようになっている。
【0018】
このようなWindowテーブルを用いた具体的な演算手順は以下のとおりである。最初に、手順(1)において、dの上位3ビットを索引として、Windowテーブルのテーブル値を読み出す。これを変数Aに代入する。すなわち、(1)A=Tab[d11,d10,d9](Tab[x]は、[x]で指定されたテーブル値を表す)。
【0019】
次に、手順(2)において、Windowのシフト幅である3ビットに応じて、23Aを算出する。すなわち、(2)A=23A。また、手順(3)において、dの次の3ビットを索引として、Windowテーブルのテーブル値を読み出し、Aに加算する。すなわち、(3)A=A+Tab[d8,d7,d6]。さらに、手順(4)において、Windowのシフト幅である3ビットに応じて、23Aを算出する。すなわち、(4)A=23A。また、手順(5)において、dの次の3ビットを索引として、Windowテーブルのテーブル値を読み出し、Aに加算する。すなわち、(5)A=A+Tab[d5,d4,d3]。
【0020】
さらに、手順(6)において、Windowのシフト幅である3ビットに応じて、23Aを算出する。すなわち、(6)A=23A。最後に、手順(7)において、dの次の3ビットを索引として、Windowテーブルのテーブル値を読み出し、Aに加算する。すなわち、(7)A=A+Tab[d2,d1,d0]=dG。
【0021】
図8に、d=(101011101001)2とした場合の具体例を図示する。なお、Windowテーブルは同じである。まず、手順(1)において、dの上位3ビット「101」を索引として、Windowテーブルのテーブル値を読み出す。これを変数Aに代入する。すなわち、(1)A=Tab[101]=(22+20)G。
【0022】
次に、手順(2)において、Window幅である3ビットに応じて、23Aを算出する。すなわち、(2)A=23A=(25+23)G。また、手順(3)において、dの次の3ビット「011」を索引として、Windowテーブルのテーブル値を読み出し、Aに加算する。すなわち、(3)A=A+Tab[011]=(25+23+21+20)G。さらに、手順(4)において、Windowのシフト幅である3ビットに応じて、23Aを算出する。すなわち、(4)A=23A=(28+26+24+23)G。
【0023】
また、手順(5)において、dの次の3ビット「101」を索引として、Windowテーブルのテーブル値を読み出し、Aに加算する。すなわち、(5)A=A+Tab[101]=(28+26+24+23+22+20)G。さらに、手順(6)において、Windowのシフト幅である3ビットに応じて、23Aを算出する。すなわち、(6)A=23A=(211+29+27+26+25+23)G。最後に、手順(7)において、dの次の3ビット「101」を索引として、Windowテーブルのテーブル値を読み出し、Aに加算する。すなわち、(7)A=A+Tab[001]=(211+29+27+26+25+23+20)G=dG。
【0024】
次に、図9を用いて櫛形Window法を用いた点のスカラー倍算を説明する。櫛形Window法では、その名前のとおり、櫛形にWindowテーブルを設定する。すなわち、通常のWindow法では、索引「111」に対応付けられているテーブル値が「(22+21+20)G」のように連続する値であったが、櫛形Window法では、とびとびの値がWindowテーブルに登録されている。具体的には、索引「000」に対応付けて0G=O(ゼロ点)を設定し、索引「001」に対応付けて20Gを設定し、索引「010」に対応付けて24Gを設定し、索引「011」に対応付けて24G+20を設定し、索引「100」に対応付けて28Gを設定し、索引「101」に対応付けて28+20Gを設定し、索引「110」に対応付けて28+24を設定し、索引「111」に対応付けて28+24+20を設定するようになっている。
【0025】
このようなWindowテーブルを用いた具体的な演算手順は以下のとおりである。なお、Window法では、23倍算を行う必要があるが、櫛形Window法では2倍算ですむ利点がある。これにより点のスカラー倍算全体における点の2倍算の回数が1/3となる。一般に、Window幅がkビットの櫛型Window法では、2倍算の回数が1/kに削減できる。
【0026】
まず、手順(1)において、3ビットおきにdにおける3ビットを索引値として用いて、Windowテーブルのテーブル値を読み出す。これを変数Aに代入する。すなわち、(1)A=Tab[d11,d7,d3]。 次に、手順(2)において、Windowのシフト幅1ビットに応じて、2Aを算出する。すなわち、(2)A=2A。また、手順(3)において、dにおいて手順(1)の状態からwindowを1ビット右シフトさせて得られる次の3ビットを索引として、Windowテーブルのテーブル値を読み出し、Aに加算する。すなわち、(3)A=A+Tab[d10,d6,d2]。さらに、手順(4)において、Windowのシフト幅1ビットに応じて、2Aを算出する。すなわち、(4)A=2A。
【0027】
また、手順(5)において、dにおいて手順(3)の状態からwindowを1ビット右シフトさせて得られる次の3ビットを索引として、Windowテーブルのテーブル値を読み出し、Aに加算する。すなわち、(5)A=A+Tab[d9,d5,d1]。さらに、手順(6)において、Windowのシフト幅1ビットに応じて、2Aを算出する。すなわち、(6)A=2A。最後に、手順(7)において、dにおいて手順(5)の状態からwindowを1ビット右シフトさせて得られる次の3ビットを索引として、Windowテーブルのテーブル値を読み出し、Aに加算する。すなわち、(7)A=A+Tab[d8,d4,d0]=dG。
【0028】
図10に、d=(101011101001)2とした場合の具体例を図示する。なお、Windowテーブルは同じである。
【0029】
まず、手順(1)において、最上位から3ビットおきにdから得られる3ビット「111」を索引として、Windowテーブルのテーブル値を読み出す。これを変数Aに代入する。すなわち、(1)A=Tab[111]=(28+24+20)G。
【0030】
次に、手順(2)において、Windowのシフト幅1ビットに応じて、2Aを算出する。すなわち、(2)A=2A=(29+25+21)G。また、手順(3)において、手順(1)から1ビット右シフトさせてdから得られる次の3ビット「010」を索引として、Windowテーブルのテーブル値を読み出し、Aに加算する。すなわち、(3)A=A+Tab[010]=(29+25+24+21)G。さらに、手順(4)において、Windowのシフト幅1ビットに応じて、2Aを算出する。すなわち、(4)A=2A=(210+26+25+22)G。
【0031】
また、手順(5)において、手順(3)から1ビット右シフトさせてdから得られる次の3ビット「110」を索引として、Windowテーブルのテーブル値を読み出し、Aに加算する。すなわち、(5)A=A+Tab[110]=(210+28+26+25+24+22)G。さらに、手順(6)において、Windowのシフト幅1ビットに応じて、2Aを算出する。すなわち、(6)A=2A=(211+29+27+26+25+23)G。最後に、手順(7)において、手順(5)から1ビット右シフトさせてdから得られる次の3ビット「001」を索引として、Windowテーブルのテーブル値を読み出し、Aに加算する。すなわち、(7)A=A+Tab[001]=(211+29+27+26+25+23+20)G=dG。このように図8と同じ結果が得られる。
【0032】
上で述べた櫛型Window法では、Windowテーブルを1個用いる例を示した。ここでWindowテーブルを2個用いて記憶テーブルの領域を増大させる代わりに、2倍算の回数をさらに減少させて高速化を図る方式も存在する。このような櫛型Window法について図11A及び図11Bを用いて説明する。
【0033】
このような櫛形Window法では、dの上位半分のビットブロックのための上側テーブルと、dの下位半分のビットブロックのための下側テーブルとを用意する。以下では、dが18ビットの例を示す。具体的には、上側テーブルには、索引「000」に対応付けて0G=O(ゼロ点)を設定し、索引「001」に対応付けて29Gを設定し、索引「010」に対応付けて212Gを設定し、索引「011」に対応付けて212G+29を設定し、索引「100」に対応付けて215Gを設定し、索引「101」に対応付けて215+29Gを設定し、索引「110」に対応付けて215+212を設定し、索引「111」に対応付けて215+212+29を設定するようになっている。
【0034】
一方、下側テーブルには、索引「000」に対応付けて0G=O(ゼロ点)を設定し、索引「001」に対応付けて20Gを設定し、索引「010」に対応付けて23Gを設定し、索引「011」に対応付けて23G+20を設定し、索引「100」に対応付けて26Gを設定し、索引「101」に対応付けて26+20Gを設定し、索引「110」に対応付けて26+23を設定し、索引「111」に対応付けて26+23+20を設定するようになっている。
【0035】
このようなWindowテーブルを用いた具体的な演算手順は以下のとおりである。最初に、手順(1)において、dの上位半分のビットブロックのうち2ビット間隔で3ビットを索引として抽出し、上側テーブルの該当するテーブル値を読み出す。これを変数Aに代入する。すなわち、(1)A=TabH[d17,d14,d11]。TabHについては、上側テーブルのテーブル値を表す。次に、手順(2)において、dの下位半分のビットブロックのうち2ビット間隔で3ビットを索引として抽出し、下側テーブルの該当するテーブル値を読み出し、Aに加算する。すなわち、(2)A=A+TabL[d8,d5,d2]。TabLについては、下側テーブルのテーブル値を表す。
【0036】
そして、Windowのシフト幅1ビットに応じて、2Aを算出する。すなわち、(3)A=2A。また、手順(4)において、手順(1)の状態からwindowを1ビット右シフトさせて上位半分のビットブロックの次の3ビットを索引として抽出し、上側テーブルのテーブル値を読み出し、Aに加算する。すなわち、(5)A=A+TabH[d16,d13,d10]。また、手順(5)において、手順(2)の状態からwindowを1ビット右シフトさせて下位半分のビットブロックの次の3ビットを索引として抽出し、下側テーブルのテーブル値を読み出し、Aに加算する。すなわち、(5)A=A+TabL[d7,d4,d1]。さらに、手順(6)において、Windowのシフト幅1ビットに応じて、2Aを算出する。すなわち、(6)A=2A。
【0037】
また、手順(7)において、手順(4)の状態からwindowを1ビット右シフトさせて上位半分の次の3ビットを索引として抽出し、上側テーブルのテーブル値を読み出し、Aに加算する。すなわち、(7)A=A+TabH[d15,d12,d9]。また、手順(8)において、手順(5)の状態からwindowを1ビット右シフトさせて下位半分のビットブロックの次の3ビットを索引として抽出し、下側テーブルのテーブル値を読み出し、Aに加算する。すなわち、(8)A=A+TabL[d6,d3,d0]=dG。
【0038】
このように、図9からdのビット長が長くなったが、図9に示した3ビット幅からあたかも6ビット幅へ長くなったWindowテーブルを用いているので、2倍算の回数も削減されている。
【0039】
上で述べたWindow法や櫛型Window法では、Windowテーブルの索引値が「000」の場合、テーブル値がO(無限遠点)となる。スカラー倍算を実行しているデバイスの消費電力を測定すると、模式的には図12(a)及び(b)に示すようになる。すなわち、索引値が非0の場合(C=A+B)には図12(a)のような波形が得られ、0の場合(C=A+O)には図12(b)のような波形が得られる。このように、明らかに異なった波形が得られる。これはO点との加算時には、特殊な演算処理を実行するためである。従って、消費電力波形より、秘密情報であるdの部分的なビット値が0であるという情報が漏洩することになる。
【0040】
このようなdの部分的なビット値「0」を用いることで、秘密鍵dの全ビットを解読する数学的なアルゴリズムも知られている。また、スカラー倍算を署名生成に用いる場合、署名用の秘密鍵が漏洩するという問題も知られている。
【0041】
このため、A=dGを計算する際に、秘密情報であるdの値を1ビットたりとも漏洩させないことが非常に重要である。
【0042】
点のスカラー倍算を用いた楕円曲線暗号の代表的な処理として、ECDSA(Elliptic Curve Digital Signature Algorithm)を用いた署名生成処理が知られている。この処理のアルゴリズムを、図13に示す。この処理は、署名用の個人鍵s及び署名対象データhiを入力とし、一時的な乱数diを生成し、点のスカラー倍算diG(但し、Gはベースポイントと呼ばれる公開された点)を含む演算処理を行うことで、hi、署名データ(ui,vi)を出力する処理である。ただし、iは署名生成処理の処理回数を表す変数である。なお、rは、公開された素数値であり、di-1は、di-1×di=1 (mod r)を満たすような整数値である。
【0043】
ECDSA署名をスマートカードなどの装置に実装する場合、署名用の個人鍵sと一時的な乱数diは外部から観察できない値である。特に、署名用の個人鍵sは重要な情報資産であり、厳重に保護する必要がある。しかし、Howgrave-Grahamらによる攻撃手法を用いることで、図14に示すように、一時的な乱数diの上位又は下位の数ビットのデータを攻撃者が多数集めることに成功した場合、この集めたデータと外部に対する出力データhi及び(ui,vi)を組み合わせることで、署名用の個人鍵sを解読できる。
【0044】
diの値は通常は外部から観察されない値であるが、もしSPA(simple PA。単純な電力消費波形の解析。)による攻撃能力を有する攻撃者が、点のスカラー倍算diGの演算時にSPAを用いた場合、diの最上位又は最下位数ビットを解読することが可能である。この結果をHowgrave-Grahamらによる攻撃手法と組み合わせることで、攻撃者は個人鍵sを解読することができる。この攻撃の組み合わせを考慮すると、diGの演算にSPAを適用した場合でも、diに関する情報を1ビットも漏洩しないことがセキュリティ上必須である。
【0045】
秘密情報であるdの値を漏洩させないためには、索引値が非0の場合(C=A+B)と、0の場合(C=A+O)で、消費電力波形を同一にし、攻撃者に区別させない手法が考えられる。従来から知られている技術として、Coronらによって提案されたダミー演算法がある。図15に、櫛型Window法におけるダミー演算法の概略を示す。基本的な動作は図9を用いて説明したとおりであるが、ダミー演算法では、手順(1)を除き、dから該当する索引値を決定すると、「000」であるか否かを確認する処理を実施する。テーブルの索引値が「000」の場合、計算結果を格納する本来の変数Aではなく、ダミー用の変数Bに、非0のテーブル値を加算する。図15の例では、手順(3)、(5)及び(7)において、索引値が「000」であれば、ダミー用変数Bに、索引値が例えば「001」(「000」以外の他の値でも良い)のテーブル値とAを加算した結果を格納する。このようにすることで、ダミー演算法では、索引値が「000」の場合の消費電力波形を、非0の場合と同一にすることができ、秘密情報dの漏洩を防ぐことができる。
【0046】
ダミー演算法では、何の対策も施さない場合と比較し、PAに対して安全となり且つ計算量は増加しない。しかし、ダミー用の変数Bを必要とする。なぜなら、ダミー演算は変数Aに格納されている中間データを破壊しないように実行する必要があるため、変数Bは変数Aと別の記憶領域とする必要があるからである。よって、SPA対策を施さない場合には、変数Aのみを格納する記憶領域(RAM:Random Access Memory)を必要としたのに対し、ダミー演算法では、変数Aと変数Bを格納するRAMが必要となる。すなわち、必要とするRAMが2倍となってしまう。スマートカードのような実装形態において、RAM資源はROM資源に比べて容量が限られており、これを削減することは非常に重要な課題である。
【先行技術文献】
【非特許文献】
【0047】
【非特許文献1】IEEE P1363/D13 (Draft Version 13, November 12, 1999) main document, Standard Specifications for Public Key Cryptography
【非特許文献2】P.Kocher, J,Jaffe and B.Jun "Differential Power Anaysis", Crypto'99, LNCS 1666, pp.388-397, Springer-Verlag, 1999.
【非特許文献3】Catherine H. Gebotys, Simon Ho, and C.C. Tiu, “EM Analysis of Rijndael and ECC on a Wireless Java-Based PDA”, Cryptographic Hardware and Embedded System, CHES 2005, pp.250-264, LNCS 3659.
【非特許文献4】N.A.Howgrave-Graham and N.P.Smart, “Lattice Attacks on Digital Signature Schemes”, Designs, Codes and Cryptography, vol.23, Issue3, 2001, pp.283-290.
【非特許文献5】IEEE 1363-2000: Standard Specifications For Public Key Cryptography
【発明の概要】
【発明が解決しようとする課題】
【0048】
上で述べたように、スマートカードやPDAといった小型機器のように使用できるハードウェア・リソースが限られている場合に、PA対策を行いつつ、RAMの記憶領域の使用を抑えることはできなかった。
【0049】
従って、本技術の目的は、SPAに対する耐タンパ性を保持しつつ、メモリ特にRAMの使用量を削減するための技術を提供することである。
【課題を解決するための手段】
【0050】
第1の態様に係る楕円曲線暗号演算装置は、楕円曲線上の所定の点Gのスカラー倍算を実施する楕円曲線暗号演算装置であって、(A)n(nは2以上の整数)ビットのスカラー値dに対するウィンドウのウィンドウ幅k(kは2以上の整数)ビットと同じビット数の各索引値に対応付けて、当該索引値の各ビットの値と当該ビットが担当するスカラー値d中の相対ビット位置に対応する値についての2のべき乗との積の和に点Gを乗じた基本テーブル値に対して非ゼロのテーブル補正値を加えたテーブル値が格納されているウィンドウテーブルを格納するデータ格納部と、(B)ウィンドウをシフトさせつつ当該ウィンドウの各ビットの担当ビット位置のビット値をスカラー値dから読み出すことにより索引値を生成して当該索引値でウィンドウテーブルを検索してテーブル値を読み出し、読み出したテーブル値を用いて2倍演算及び加算演算を実施する演算処理部と、(C)演算処理部の演算結果に対してテーブル補正値に応じた所定の補正値で補正を実施する補正部とを有する。
【0051】
第2の態様に係る楕円曲線暗号演算装置は、(A)n(nは2以上の整数)ビットのスカラー値dに対するウィンドウのウィンドウ幅k(kは2以上の整数)ビットと同じビット数の各索引値に対応付けて、当該索引値の各ビットの値と当該ビットが担当するスカラー値d中の相対ビット位置に対応する値についての2のべき乗との積の和に点Gを乗じた基本テーブル値に対して点Gの第2のスカラー値x倍のテーブル補正値を加えたテーブル値が格納されているウィンドウテーブルを格納するデータ格納部と、(B)スカラー値dに対して第2のスカラー値xに応じた所定の補正値で補正を実施して、第3のスカラー値fを生成する補正部と、(C)ウィンドウをシフトさせつつ当該ウィンドウの各ビットの担当ビット位置のビット値を第3のスカラー値fから読み出すことにより索引値を生成して当該索引値でウィンドウテーブルを検索してテーブル値を読み出し、読み出したテーブル値を用いて2倍演算及び加算演算を実施する演算処理部とを有する。
【0052】
第3の態様に係る楕円曲線暗号演算装置は、(A)n(nは2以上の整数)ビットのスカラー値dのブロック毎に、当該ブロックに対するウィンドウのウィンドウ幅k(kは2以上の整数)ビットと同じビット数の各索引値に対応付けて、当該索引値の各ビットの値と当該ビットが担当するブロック中の相対ビット位置及び前記スカラー値d中の当該ブロックの相対位置に対応する値についての2のべき乗との積の和に前記点Gを乗じた基本テーブル値に対して非ゼロのブロックテーブル補正値を加えたテーブル値が格納されているウィンドウテーブルを格納するデータ格納部と、(B)ウィンドウをシフトさせつつ当該ウィンドウの各ビットの担当ビット位置のビット値をスカラー値dの各ブロックから読み出すことにより索引値を生成して当該索引値で各ブロックのウィンドウテーブルを検索してテーブル値を読み出し、読み出したテーブル値を用いて2倍演算及び加算演算を実施する演算処理部とを有する。そして、各ブロックについてのブロックテーブル補正値の総和がゼロとなっている。
【発明の効果】
【0053】
SPAに対する耐タンパ性を保持しつつ、処理速度の低下を抑え且つメモリ特にRAMの使用量を削減できるようになる。
【図面の簡単な説明】
【0054】
【図1】図1は、楕円曲線を説明するための図である。
【図2】図2は、楕円曲線上の加算を説明するための図である。
【図3】図3は、楕円曲線上の加算演算の具体的アルゴリズムを表す図である。
【図4】図4は、楕円曲線上の2倍算を説明するための図である。
【図5】図5(a)は、楕円曲線上のマイナス点を説明するための図であり、図5(b)は、無限遠点を説明するための図である。
【図6】図6は、楕円曲線上の点のスカラー倍を説明するための図である。
【図7】図7は、Window法による点のスカラー倍算のアルゴリズムの概要を説明するための図である。
【図8】図8は、Window法による点のスカラー倍算の具体例を説明するための図である。
【図9】図9は、櫛形Window法による点のスカラー倍算のアルゴリズムの概要を説明するための図である。
【図10】図10は、櫛形Window法による点のスカラー倍算の具体例を説明するための図である。
【図11A】図11Aは、Windowテーブルを2つ用いる櫛形Window法による点のスカラー倍算のアルゴリズムを説明するための図である。
【図11B】図11Bは、Windowテーブルを2つ用いる櫛形Window法による点のスカラー倍算のアルゴリズムを説明するための図である。
【図12】図12(a)は、索引値が非ゼロの場合の消費電力波形を表す図であり、図12(b)は、索引値がゼロの場合の消費電力波形を表す図である。
【図13】図13は、署名生成処理のアルゴリズムの一例を示す図である。
【図14】図14は、署名生成処理からビット値を盗み出す例を説明するための図である。
【図15】図15は、従来技術であるダミー演算法を説明するための図である。
【図16】図16は、楕円曲線暗号演算装置の一例であるスマートカードを示す図である。
【図17】図17は、実施の形態1−Aに係る楕円曲線暗号演算装置の構成例を示す図である。
【図18A】図18Aは、実施の形態1−AにおけるWindowテーブルの具体例を示す図である。
【図18B】図18Bは、実施の形態1−Aにおける演算処理の具体例を示す図である。
【図19】図19は、実施の形態1−Aにおける一般化したWindowテーブルを示す図である。
【図20】図20は、実施の形態1−Aにおける処理フローを示す図である。
【図21】図21は、実施の形態1−Bに係る楕円曲線暗号演算装置の構成例を示す図である。
【図22】図22は、実施の形態1−Bにおける処理フローを示す図である。
【図23】図23は、実施の形態2−Aに係る楕円曲線暗号演算装置の構成例を示す図である。
【図24A】図24Aは、実施の形態2−AにおけるWindowテーブルの具体例を示す図である。
【図24B】図24Bは、実施の形態2−Aにおける演算処理の具体例を示す図である。
【図25】図25は、実施の形態2−Aにおける一般化したWindowテーブルを示す図である。
【図26】図26は、実施の形態2−Aにおける処理フローを示す図である。
【図27】図27は、実施の形態2−Bに係る楕円曲線暗号演算装置の構成例を示す図である。
【図28】図28は、実施の形態2−Bにおける処理フローを示す図である。
【図29】図29は、実施の形態3に係る楕円曲線暗号演算装置の構成例を示す図である。
【図30A】図30Aは、実施の形態3におけるWindowテーブルの具体例を示す図である。
【図30B】図30Bは、実施の形態3における演算処理の具体例を示す図である。
【図31】図31は、実施の形態3における一般化したWindowテーブルを示す図である。
【図32】図32は、実施の形態3における処理フローを示す図である。
【図33】図33は、実施の形態4に係る楕円曲線暗号演算装置の構成例を示す図である。
【図34A】図34Aは、実施の形態4におけるWindowテーブルの具体例を示す図である。
【図34B】図34Bは、実施の形態4における演算処理の具体例を示す図である。
【図35】図35は、実施の形態4における一般化したWindowテーブルを示す図である。
【図36】図36は、実施の形態4における処理フローを示す図である。
【図37】図37は、実施の形態5に係る楕円曲線暗号演算装置の構成例を示す図である。
【図38A】図38Aは、実施の形態5におけるWindowテーブルの具体例を示す図である。
【図38B】図38Bは、実施の形態5における演算処理の具体例を示す図である。
【図39】図39は、実施の形態5における一般化したWindowテーブルを示す図である。
【図40】図40は、実施の形態5における一般化したWindowテーブルを示す図である。
【図41】図41は、実施の形態5における処理フローを示す図である。
【図42】図42は、実施の形態6に係る楕円曲線暗号演算装置の構成例を示す図である。
【図43】図43は、実施の形態6における処理フローを示す図である。
【図44】図44は、楕円曲線暗号演算装置の構成例を示す図である。
【図45】図45は、楕円曲線暗号演算装置の構成例を示す図である。
【発明を実施するための形態】
【0055】
本技術の実施の形態に係る楕円曲線暗号演算装置100は、図16に示すように、例えばスマートカードとして実施される。また、携帯電話機、PDAその他の小型機器、場合によってはパーソナルコンピュータその他の機器として実施するようにしても良い。
【0056】
[実施の形態1−A]
本実施の形態に係る楕円曲線暗号演算装置100の装置構成例を図17に示す。楕円曲線暗号演算装置100では、バス1に、CPU(Central Processing Unit)3と、演算器5と、ROM7と、RAM9と、通信部11とが接続されている。ROM7は、以下で説明する処理をCPU3に実行させるための演算プログラム71と、以下で述べる補正点データ73と、通常のWindow法のWindowテーブルをベースとしたものであって以下で述べるWindowテーブル75とが記録されている。演算器5は、従来から知られている楕円曲線上の点の加算ECADD(A,B)を演算する加算演算部51と、従来から知られている楕円曲線上の点の2倍演算ECDBL(A)を実施する2倍演算部53とを有する。また、演算プログラム71をCPU3が実行すると、制御部31及び以下で述べるような演算結果の補正処理を実施する補正部33が実現される。また、外部装置との通信を行うため通信部11を設ける例を示しているが、他の機能を実現するための装置が設けられる場合もある。RAM9は、CPU3が各種処理を実施する際に用いるデータを格納するものであり、本実施の形態では、楕円曲線におけるベースポイントGのスカラー値d倍を算出するために用いる変数Aのための領域が用意される。その他にも演算に必要なデータもRAM9には格納されるが、耐タンパ性を保持させるために追加で必要な領域は存在しない。
【0057】
まず、本実施の形態1−Aについての演算処理を具体的な例を用いて説明する。本具体例のためのWindowテーブル75の内容を図18Aに示す。図18Aの例では、楕円曲線上の点Gのスカラー値d倍を算出する場合を念頭に、スカラー値dが12ビットであり、Window幅が3ビットであるものとする。従って、このWindowテーブル75の要素数は23=8個である。そして、図7に示したPA対策なしの場合と比較すると、各テーブル値にテーブル補正値Fが加えられていることが分かる。
【0058】
具体的には、索引「000」に対応付けて0G+F=Fを設定し、索引「001」に対応付けて20G+Fを設定し、索引「010」に対応付けて21G+Fを設定し、索引「011」に対応付けて21G+20G+Fを設定し、索引「100」に対応付けて22G+Fを設定し、索引「101」に対応付けて22G+20G+Fを設定し、索引「110」に対応付けて22G+21G+Fを設定し、索引「111」に対応付けて22G+21G+20G+Fを設定するようになっている。テーブル補正値Fは、楕円曲線上の点であるが、どのような点であっても良い。例えば、xをスカラー値とすると、xGのような点であってもよい。但し、非ゼロでなければならない。
【0059】
以下で一般的なテーブル値については数式で表すが、索引値の上位1ビットの値が22Gに対応し、索引値の2番目のビットの値が21Gに対応し、索引値の3番目のビットの値が20Gに対応している。従って、索引値の各ビットの0又は1に応じて、22G、21G及び20Gが加算されたりされなかったりする。なお、2のべき指数は、Window(すなわち索引値)において各ビットが担当する、スカラー値dにおける相対ビット位置に応じて設定される。すなわち、以下で述べるように、本実施の形態では、3ビット連続してスカラー値のビット値を読み出すので、Windowの最下位ビットについてのべき指数を「0」とすると、2番目のビットについてのべき指数は「1」となり、最上位のビットについてのべき指数は「2」となる。
【0060】
このようなWindowテーブル75を用いた具体的な演算手順は図18Bに示すとおりである。最初に、手順(1)において、dの上位3ビットを索引として、Windowテーブル75のテーブル値を読み出す。これを変数Aに代入する。すなわち、(1)A=Tab[d11,d10,d9](Tab[]は、[]で指定されたテーブル値を表す)。
【0061】
次に、手順(2)において、Windowのシフト幅である3ビットに応じて、23Aを算出する。すなわち、(2)A=23A。また、手順(3)において、dにおける次の3ビットを索引として、Windowテーブル75のテーブル値を読み出し、Aに加算する。すなわち、(3)A=A+Tab[d8,d7,d6]。さらに、手順(4)において、Windowのシフト幅である3ビットに応じて、23Aを算出する。すなわち、(4)A=23A。また、手順(5)において、dにおける次の3ビットを索引として、Windowテーブル75のテーブル値を読み出し、Aに加算する。すなわち、(5)A=A+Tab[d5,d4,d3]。
【0062】
さらに、手順(6)において、Windowのシフト幅である3ビットに応じて、23Aを算出する。すなわち、(6)A=23A。手順(7)において、dの次の3ビットを索引として、Windowテーブル75のテーブル値を読み出し、Aに加算する。すなわち、(7)A=A+Tab[d2,d1,d0]。
【0063】
ここまでは図7を用いて説明したものと同じであるが、当然ながらWindowテーブル75の各テーブル値には(001001001001)2Fが加算されてしまっているので、手順(7)の演算結果にも余分にFが加算されてしまっている。そこで、その分を手順(7)の結果から差し引かなければならない。本実施の形態のようにWindow法を採用する場合には、手順(8)においては、(001001001001)2Fを補正点データ73として採用し、A=A−(001001001001)2Fを算出する。
【0064】
以上のように手順(8)を除き、基本的にはPA対策なしの場合の演算処理と同じであるが、索引値「000」に対してもテーブル値「F」が読み出されるので、ゼロの加算は絶対に行われない。すなわち、図12(B)のような消費電力波形は出現しない。また、ダミー演算のように変数のためのRAM領域を増加させる必要もない。
【0065】
次に、図18Aに示したWindowテーブル75を一般化したものを図19に示す。ここで、索引値yを(yk-1||yk-2||・・・y1||y0)と表すものとする。そうすると、右からx番目のビットはyx-1と表される。また、Window幅はkビットとする。
【0066】
そうすると、図19に示すように、索引値yのテーブル値は、以下のように表される。
(yk-1×2k-1+yk-2×2k-2+・・・+y1×21+y0×20)G+F
【0067】
上でも述べたように、kビットの索引値の右からj番目のビットは、yj-1×2j-1に対応する。Window法の場合には、スカラー値dから連続したkビットを読み出すので、kビットの索引値の右からj番目のビットについての2のべき指数は、当該j番目のビットが担当する、スカラー値dにおける相対ビット位置(j−1)となる。
【0068】
従って、索引値「0」のテーブル値はテーブル補正値の「F」であり、索引値「1」のテーブル値は、y0のみ「1」であるから20G+Fとなる。索引値「2」のテーブル値は、y1のみ「1」であるから21G+Fとなる。さらに、索引値「2k−1」のテーブル値は、yk-1乃至y0の全てが「1」であるから、(2k-1+2k-2+・・・+21+20)G+Fとなる。
【0069】
次に、図20を用いて、楕円曲線暗号演算装置の処理フローについて説明する。まず、制御部31は、RAM9又はROM7に格納されているnビットのスカラー値d及び楕円曲線上のベースポイントGを読み出す(ステップS1)。そして、制御部31は、スカラー値dの最上位ビットからkビット幅のwindowで値を読み出して、索引値を取得する(ステップS3)。スカラー値dを{dn-1||dn-2||・・・d1||d0}のような形で表すとすると、dから読み出される値w┌n/k┐-1は、以下のように表される。
w┌n/k┐-1={dk*(┌n/k┐-1)+(k-1)||・・・dk*(┌n/k┐-1)+1||dk*(┌n/k┐-1)+0}
【0070】
なお、┌n/k┐は、n/kより大きい最小の整数を表す。例えばn=12で、k=3であれば、┌n/k┐-1=3となる。また、k*(┌n/k┐-1)+(k−1)=3*3+(3−1)=11となる。dが12ビットの場合、11は最上位ビットの番号である。
【0071】
そして、制御部31は、Windowテーブル75から索引値w┌n/k┐-1に対応するテーブル値を読み出し、変数Aに設定する(ステップS5)。すなわち、以下のように表される。
A=W[w┌n/k┐-1]
W[z]は、Windowテーブル75において索引値zに対応付けられているテーブル値である。
【0072】
そして、制御部31は、カウンタiに、┌n/k┐−2を設定する(ステップS7)。
【0073】
さらに、制御部31は、スカラー値dにおいてカウンタiで規定されるビット位置からkビット幅のwindowで値を読み出して、索引値を取得する(ステップS9)。
【0074】
dから読み出される値wiは、以下のように表される。
wi={dk*i+(k-1)||・・・dk*i+1||dk*i+0}
これによって、windowの位置がkビット右シフトされることになる。
【0075】
そして、制御部31は、変数Aの2倍演算を、windowの右シフト幅であるk回演算器5の2倍演算部53に実施させる(ステップS11)。図20では、ECDBL(A)で、楕円曲線上におけるAの2倍演算を表す。2倍演算自体は周知であるからこれ以上述べない。
【0076】
さらに、制御部31は、変数Aと、索引値wiでWindowテーブル75を検索することにより得られるテーブル値W[wi]との加算演算を、演算器5の加算演算部51に実施させる(ステップS13)。図20では、ECADD(A,W[wi])で、AとW[wi]との、楕円曲線上における加算演算を表す。加算演算自体は周知であるからこれ以上述べない。
【0077】
そして、制御部31は、カウンタiの値を1デクリメントし(ステップS15)、iが0以上であるか判断する(ステップS17)。iが0以上であればステップS9に戻る。すなわち、iが0未満になるまでステップS9乃至S17を繰り返す。
【0078】
iが0未満になると、補正部33は、補正のための演算を実施する(ステップS19)。すなわちA=A−補正点=dGであり、補正点は、上で述べたように、kビットの最下位ビットのみが「1」となっているビット列を┌n/k┐個並べた値(全部で┌n/k┐*kビット)を楕円曲線上の点Fに乗じた値である。従って、補正点データ73をROM7から読み出して、上記演算に用いる。この演算は、補正部33が演算器5を利用して実施するが、その詳細は周知であるからこれ以上述べない。
【0079】
制御部31は、このようにして得られた変数Aの値を、指定された出力先に出力する(ステップS21)。変数Aの値は、例えば通信部11から外部に出力される場合もあれば、他の演算プログラムに出力されて処理に用いられる。
【0080】
以上述べたように、Windowテーブル75において通常のテーブル値に非ゼロのテーブル補正値を加算しておき、ステップS19でその分演算値に対して補正を行うことによって、どのようなスカラー値dに対しても同じ演算が繰り返されるようになる。すなわちPAが行われてもスカラー値dのビットを盗み取られることはない。また、処理としてはステップS19だけが追加されているので、処理速度の面でもPA対策なしの場合に比してパフォーマンスが大幅に落ちることはない。また、RAM9において使用される容量は、PA対策なしの場合と同じである。ROM7において使用される容量は、補正点データ73の分だけ増加するが、増加量は大きくない。すなわち、ROMに比べてRAMの容量が限られているスマートカードのような実装形態において、本実施の形態は特に有用となる。
【0081】
[実施の形態1−B]
本実施の形態は、実施の形態1−Aの変形である。本実施の形態に係る楕円曲線暗号演算装置100の装置構成例を図21に示す。図21において、図17と同じ構成要素については同じ参照番号が付されている。実施の形態1−Aとの差は、ROM7に、補正点データ73が記録されていないことと、それに応じて必要な処理が異なるため演算プログラムが異なる点である。
【0082】
すなわち、楕円曲線暗号演算装置100では、バス1に、CPU3と、演算器5と、ROM7と、RAM9と、通信部11とが接続されている。ROM7は、以下で説明する処理をCPU3に実行させるための演算プログラム71bと、Windowテーブル75とが記録されている。演算器5は、加算演算部51と、2倍演算部53とを有する。また、演算プログラム71bをCPU3が実行すると、制御部31及び以下で述べるような演算結果の補正処理を実施する補正部33bが実現される。Windowテーブル75に格納されるデータの内容は、実施の形態1−Aと同じである。
【0083】
次に、図22を用いて、楕円曲線暗号演算装置の処理フローについて説明する。なお、図20と同じ処理内容のステップについては同じステップ番号が付されている。まず、制御部31は、RAM9又はROM7に格納されているnビットのスカラー値d及び楕円曲線上のベースポイントGを読み出す(ステップS1)。そして、制御部31は、スカラー値dの最上位ビットからkビット幅のwindowで値を読み出して、索引値w┌n/k┐-1を取得する(ステップS3)。
【0084】
そして、制御部31は、Windowテーブル75から索引値w┌n/k┐-1に対応するテーブル値を読み出し、変数Aに設定する(ステップS5)。
【0085】
さらに、制御部31は、カウンタiに、┌n/k┐−2を設定する(ステップS7)。
【0086】
そして、制御部31は、スカラー値dにおいてカウンタiで規定されるビット位置からkビット幅のwindowで値を読み出して、索引値wiを取得する(ステップS9)。windowの位置がkビット右シフトされてビット値を読み出す。
【0087】
その後、制御部31は、変数Aの2倍演算を、windowの右シフト幅であるk回演算器5の2倍演算部53に実施させる(ステップS11)。図20と同様に、ECDBL(A)で、楕円曲線上におけるAの2倍演算を表す。
【0088】
さらに、制御部31は、変数Aと、索引値wiでWindowテーブル75を検索することにより得られるテーブル値W[wi]との加算演算を、演算器5の加算演算部51に実施させる(ステップS13)。図20と同様に、ECADD(A,W[wi])で、楕円曲線上におけるAとW[wi]の加算演算を表す。
【0089】
そして、制御部31は、カウンタiの値を1デクリメントし(ステップS15)、iが0以上であるか判断する(ステップS17)。iが0以上であればステップS9に戻る。すなわち、iが0未満になるまでステップS9乃至S17を繰り返す。
【0090】
iが0未満になると、補正部33bは、補正点を算出する(ステップS18)。補正点は、実施の形態1−Aと同じであり、kビットの最下位ビットのみが「1」となっているビット列を┌n/k┐個並べた値(全部で┌n/k┐*kビット)を楕円曲線上の点Fに乗じた値である。このような演算は、制御部31が演算器5を利用して実施するが、その詳細は周知であるからこれ以上述べない。そして、補正部33bは、算出した補正点を用いて補正のための演算を実施する(ステップS19)。すなわちA=A−補正点を演算する。この演算は、補正部33bが演算器5を利用して実施するが、その詳細は周知であるからこれ以上述べない。
【0091】
制御部31は、このようにして得られた変数Aの値を、指定された出力先に出力する(ステップS21)。変数Aの値は、例えば通信部11から外部に出力される場合もあれば、他の演算プログラムに出力されて処理に用いられる。
【0092】
以上述べたように、Windowテーブル75において通常のテーブル値に非ゼロのテーブル補正値を加算しておき、ステップS19でその分演算値に対して補正を行うことによって、どのようなスカラー値dに対しても同じ演算が繰り返されるようになる。すなわちPAが行われてもスカラー値dのビットを盗み取られることはない。また、RAM9において使用される容量は、PA対策なしの場合と同じである。ROM7において使用される容量も、PA対策なしの場合と同じとなっている。すなわち、メモリ特にRAMの容量が限られているスマートカードのような実装形態において、本実施の形態は特に有用となる。
【0093】
[実施の形態2−A]
本実施の形態に係る楕円曲線暗号演算装置100の装置構成例を図23に示す。図17に示した楕円曲線暗号演算装置100と同じ構成要素については同じ参照番号が付されている。本楕円曲線暗号演算装置では、バス1に、CPU(Central Processing Unit)3と、演算器5と、ROM7と、RAM9と、通信部11とが接続されている。ROM7は、以下で説明する処理をCPU3に実行させるための演算プログラム71cと、以下で述べる補正点データ73cと、櫛形Window法のWindowテーブルをベースとしたものであって以下で述べるWindowテーブル75cとが記録されている。
【0094】
演算器5は、実施の形態1−Aと同じ加算演算部51及び2倍演算部53とを有する。また、演算プログラム71cをCPU3が実行すると、制御部31c及び以下で述べるような演算結果の補正処理を実施する補正部33cが実現される。また、外部装置との通信を行うため通信部11を設ける例を示しているが、他の機能を実現するための装置が設けられる場合もある。RAM9は、CPU3が各種処理を実施する際に用いるデータを格納するものであり、本実施の形態では、楕円曲線におけるベースポイントGのスカラー値d倍を算出するために用いる変数Aのための領域が用意される。その他にも演算に必要なデータもRAM9には格納されるが、耐タンパ性を保持させるために追加で必要な領域は存在しない。
【0095】
まず、本実施の形態2−Aについての演算処理を具体的な例を用いて説明する。本具体例のためのWindowテーブル75cの内容を図24Aに示す。図24Aの例では、楕円曲線上の点Gのスカラー値d倍を算出する場合を念頭に、スカラー値dが12ビットであり、Window幅が3ビットであるものとする。従って、このWindowテーブル75cの要素数は23=8個である。そして、図9に示したPA対策なしの場合と比較すると、各テーブル値にテーブル補正値Fが加えられていることが分かる。
【0096】
具体的には、索引「000」に対応付けて0G+F=Fを設定し、索引「001」に対応付けて20G+Fを設定し、索引「010」に対応付けて24G+Fを設定し、索引「011」に対応付けて24G+20G+Fを設定し、索引「100」に対応付けて28G+Fを設定し、索引「101」に対応付けて28G+20G+Fを設定し、索引「110」に対応付けて28G+24G+Fを設定し、索引「111」に対応付けて28G+24G+20G+Fを設定するようになっている。テーブル補正値Fは、楕円曲線上の点であるが、どのような点であっても良い。例えば、xをスカラー値とすると、xGのような点であってもよい。但し、非ゼロでなければならない。
【0097】
以下で一般的なテーブル値については数式で表すが、索引値の上位1ビットの値が28Gに対応し、索引値の2番目のビットの値が24Gに対応し、索引値の3番目のビットの値が20Gに対応している。従って、索引値の各ビットの0又は1に応じて、28G、24G及び20Gが加算されたりされなかったりする。なお、2のべき指数は、Window(すなわち索引値)において各ビットが担当する、スカラー値dにおける相対ビット位置に応じて設定される。すなわち、本実施の形態では、図9でも示したように(┌n/k┐−1)=3ビットおきにスカラー値dのビット値を読み出すので、Windowの最下位ビットについてのべき指数を「0」とすると、2番目のビットについてのべき指数は「4」であり、最上位のビットについてのべき指数は「8」である。
【0098】
このようなWindowテーブル75cを用いた具体的な演算手順は図24Bに示すとおりである。最初に、手順(1)において、スカラー値dの最上位ビットから3ビットおきにビット値を読み出すことによって索引値を得て、Windowテーブル75cのテーブル値を読み出す。これを変数Aに代入する。すなわち、(1)A=Tab[d11,d7,d3](Tab[]は、[]で指定されたテーブル値を表す)。
【0099】
次に、手順(2)において、Windowのシフト幅である1ビットに応じて、2Aを算出する。すなわち、(2)A=2A。また、手順(3)において、スカラー値dの上位第2ビットから3ビットおきにビット値を読み出すことによって索引値を得て、Windowテーブル75cのテーブル値を読み出し、Aに加算する。すなわち、(3)A=A+Tab[d10,d6,d2]。さらに、手順(4)において、Windowのシフト幅である1ビットに応じて、2Aを算出する。すなわち、(4)A=2A。また、手順(5)において、スカラー値dの上位第3ビットから3ビットおきにビット値を読み出すことによって索引値を得て、Windowテーブル75cのテーブル値を読み出し、Aに加算する。すなわち、(5)A=A+Tab[d9,d5,d1]。
【0100】
さらに、手順(6)において、Windowのシフト幅である1ビットに応じて、2Aを算出する。すなわち、(6)A=2A。そして、手順(7)において、スカラー値dの上位第4ビットから3ビットおきにビット値を読み出すことによって索引値を得て、Windowテーブル75cのテーブル値を読み出し、Aに加算する。すなわち、(7)A=A+Tab[d8,d4,d0]。
【0101】
ここまでは図9を用いて説明したものと同じであるが、当然ながらWindowテーブル75cの各テーブル値には(1111)2Fが加算されてしまっているので、手順(7)の演算結果にも余分にFが加算されてしまっている。そこで、その分を手順(7)の結果から差し引かなければならない。本実施の形態のように櫛形Window法を採用する場合には、手順(8)においては、(1111)2Fを補正点データ73として採用し、A=A−(1111)2Fを算出する。
【0102】
以上のように手順(8)を除き、基本的にはPA対策なしの場合の演算処理と同じであるが、索引値「000」に対してもテーブル値「F」が読み出されるので、ゼロの加算は絶対に行われない。すなわち、図12(B)のような消費電力波形は出現しない。また、ダミー演算のように変数のためのRAM領域を増加させる必要もない。
【0103】
次に、図24Aに示したWindowテーブル75cを一般化したものを図25に示す。実施の形態1−Aと同様に、索引値yを(yk-1||yk-2||・・・y1||y0)と表すものとする。また、Window幅はkビットとする。
【0104】
そうすると、図25に示すように、索引値yのテーブル値は、以下のように表される。
(yk-1×2┌n/k┐*(k-1)+yk-2×2┌n/k┐*(k-2)+・・・+y1×2┌n/k┐*1+y0×2┌n/k┐*0)G+F
【0105】
上でも述べたように、kビットの索引値の右からj番目のビットは、yj-1×2┌n/k┐*(j-1)に対応する。櫛形Window法の場合には、スカラー値dから(┌n/k┐−1)おきにkビットを読み出すので、kビットの索引値の右からj番目のビットについての2のべき指数は、当該j番目のビットが担当する、スカラー値dにおける相対ビット位置┌n/k┐*(j−1)となる。
【0106】
従って、索引値「0」のテーブル値はテーブル補正値の「F」であり、索引値「1」のテーブル値は、y0のみ「1」であるから20+Fとなる。索引値「2」のテーブル値は、y1のみ「1」であるから2┌n/k┐*1+Fとなる。さらに、索引値「2k−1」のテーブル値は、yk-1乃至y0の全てが「1」であるから、(2┌n/k┐*(k-1)+2┌n/k┐*(k-2)+・・・+2┌n/k┐*1+2┌n/k┐*0)G+Fとなる。
【0107】
次に、図26を用いて、楕円曲線暗号演算装置の処理フローについて説明する。まず、制御部31cは、RAM9又はROM7に格納されているnビットのスカラー値d及び楕円曲線上のベースポイントGを読み出す(ステップS31)。そして、制御部31cは、スカラー値dの最上位ビットから(┌n/k┐−1)ビットおきにkビット幅のwindowでビット値を読み出して、索引値を取得する(ステップS33)。スカラー値dを{dn-1||dn-2||・・・d1||d0}のような形で表すとすると、dから読み出される値w┌n/k┐-1は、以下のように表される。
w┌n/k┐-1={d┌n/k┐*(k-1)+┌n/k┐-1||・・・d┌n/k┐*1+┌n/k┐-1||d┌n/k┐*0+┌n/k┐-1}
【0108】
そして、制御部31cは、Windowテーブル75cから索引値w┌n/k┐-1に対応するテーブル値を読み出し、変数Aに設定する(ステップS35)。すなわち、以下のように表される。
A=W[w┌n/k┐-1]
W[z]は、Windowテーブル75cにおいて索引値zに対応付けられているテーブル値である。
【0109】
そして、制御部31cは、カウンタiに、┌n/k┐−2を設定する(ステップS37)。
【0110】
さらに、制御部31cは、スカラー値dにおいてカウンタiで規定されるビット位置からkビット幅のwindowでビット値を(┌n/k┐−1)ビットおきに読み出して、索引値を取得する(ステップS39)。
【0111】
dから読み出される値wiは、以下のように表される。
wi={dk*i+(k-1)||・・・dk*i+1||dk*i+0}
すなわち、Windowが1ビット右シフトされることになる。
【0112】
そして、制御部31cは、変数Aの2倍演算を、windowの右シフト幅である1回だけ演算器5の2倍演算部53に実施させる(ステップS41)。図26では、ECDBL(A)で、楕円曲線上におけるAの2倍演算を表す。2倍演算自体は周知であるからこれ以上述べない。
【0113】
さらに、制御部31cは、変数Aと、索引値wiでWindowテーブル75cを検索することにより得られるテーブル値W[wi]との加算演算を、演算器5の加算演算部51に実施させる(ステップS43)。図26は、ECADD(A,W[wi])で、楕円曲線上におけるAとW[wi]の加算演算を表す。加算演算自体は周知であるからこれ以上述べない。
【0114】
そして、制御部31cは、カウンタiの値を1デクリメントし(ステップS45)、iが0以上であるか判断する(ステップS47)。iが0以上であればステップS39に戻る。すなわち、iが0未満になるまでステップS39乃至S47を繰り返す。
【0115】
iが0未満になると、補正部33cは、補正のための演算を実施する(ステップS49)。すなわちA=A−補正点=dGであり、補正点は、上で述べたように、「1」を┌n/k┐ビット並べた値を楕円曲線上の点Fに乗じた値である。従って、補正点データ73cをROM7から読み出して、上記演算に用いる。この演算は、補正部33が演算器5を利用して実施するが、その詳細は周知であるからこれ以上述べない。
【0116】
制御部31cは、このようにして得られた変数Aの値を、指定された出力先に出力する(ステップS51)。変数Aの値は、例えば通信部11から外部に出力される場合もあれば、他の演算プログラムに出力されて処理に用いられる。
【0117】
以上述べたように、Windowテーブル75cにおいて通常のテーブル値に非ゼロのテーブル補正値を加算しておき、ステップS49でその分演算値に対して補正を行うことによって、どのようなスカラー値dに対しても同じ演算が繰り返されるようになる。すなわちPAが行われてもスカラー値dのビットを盗み取られることはない。また、処理としてはステップS49だけが追加されているので、処理速度の面でもPA対策なしの場合に比してパフォーマンスが大幅に落ちることはない。また、RAM9において使用される容量は、PA対策なしの場合と同じである。ROM7において使用される容量は、補正点データ73の分だけ増加するが、増加量は大きくない。すなわち、ROMに比べてRAMの容量が限られているスマートカードのような実装形態において、本実施の形態は特に有用となる。
【0118】
[実施の形態2−B]
本実施の形態は、実施の形態2−Aの変形である。本実施の形態に係る楕円曲線暗号演算装置100の装置構成例を図27に示す。図27において、図21と同じ構成要素については同じ参照番号が付されている。実施の形態2−Aとの差は、ROM7に、補正点データ73cが記録されていないことと、それに応じて必要な処理が異なるため演算プログラム71cが異なる点である。
【0119】
すなわち、楕円曲線暗号演算装置100では、バス1に、CPU3と、演算器5と、ROM7と、RAM9と、通信部11とが接続されている。ROM7は、以下で説明する処理をCPU3に実行させるための演算プログラム71dと、Windowテーブル75cとが記録されている。演算器5は、加算演算部51と、2倍演算部53とを有する。また、演算プログラム71dをCPU3が実行すると、制御部31d及び以下で述べるような演算結果の補正処理を実施する補正部33dが実現される。Windowテーブル75cに格納されるデータの内容は、実施の形態2−Aと同じである。
【0120】
次に、図28を用いて、楕円曲線暗号演算装置の処理フローについて説明する。なお、図26と同じ処理内容のステップについては同じステップ番号が付されている。まず、制御部31dは、RAM9又はROM7に格納されているnビットのスカラー値d及び楕円曲線上のベースポイントGを読み出す(ステップS31)。そして、制御部31dは、スカラー値dの最上位ビットからkビット幅のwindowでビット値を(┌n/k┐−1)ビットおきに読み出して、索引値w┌n/k┐-1を取得する(ステップS33)。
【0121】
そして、制御部31dは、Windowテーブル75cから索引値w┌n/k┐-1に対応するテーブル値を読み出し、変数Aに設定する(ステップS35)。また、制御部31dは、カウンタiに、┌n/k┐−2を設定する(ステップS37)。さらに、制御部31dは、スカラー値dにおいてカウンタiで規定されるビット位置からkビット幅のwindowでビット値を(┌n/k┐−1)ビットおきに読み出して、索引値を取得する(ステップS39)。上でも述べたようにwindowの1ビット右シフトが行われている。
【0122】
そして、制御部31dは、変数Aの2倍演算を、windowの右シフト幅である1回だけ演算器5の2倍演算部53に実施させる(ステップS41)。図28では、ECDBL(A)で、楕円曲線上におけるAの2倍演算を表す。
【0123】
さらに、制御部31dは、変数Aと、索引値wiでWindowテーブル75cを検索することにより得られるテーブル値W[wi]との加算演算を、演算器5の加算演算部51に実施させる(ステップS43)。図28では、ECADD(A,W[wi])で、楕円曲線上におけるAとW[wi]の加算演算を表す。
【0124】
そして、制御部31dは、カウンタiの値を1デクリメントし(ステップS45)、iが0以上であるか判断する(ステップS47)。iが0以上であればステップS39に戻る。すなわち、iが0未満になるまでステップS39乃至S47を繰り返す。
【0125】
iが0未満になると、補正部33dは、補正点を算出する(ステップS48)。実施の形態2−Aと同様に、補正点は、「1」を┌n/k┐ビット並べた値を楕円曲線上の点Fに乗じた値である。この演算は、補正部33dが演算器5を利用して実施する。
【0126】
その後、補正部33dは、補正のための演算を実施する(ステップS49)。すなわちA=A−補正点=dGを算出する。この演算は、補正部33dが演算器5を利用して実施する。
【0127】
制御部31dは、このようにして得られた変数Aの値を、指定された出力先に出力する(ステップS51)。変数Aの値は、例えば通信部11から外部に出力される場合もあれば、他の演算プログラムに出力されて処理に用いられる。
【0128】
以上述べたように、Windowテーブル75cにおいて通常のテーブル値に非ゼロのテーブル補正値を加算しておき、ステップS48及びS49でその分演算値に対して補正を行うことによって、どのようなスカラー値dに対しても同じ演算が繰り返されるようになる。すなわちPAが行われてもスカラー値dのビットを盗み取られることはない。また、RAM9において使用される容量は、PA対策なしの場合と同じである。ROM7において使用される容量も、PA対策なしの場合と同じである。すなわち、メモリ特にRAMの容量が限られているスマートカードのような実装形態において、本実施の形態は特に有用となる。
【0129】
[実施の形態3]
本実施の形態に係る楕円曲線暗号演算装置100の装置構成例を図29に示す。図21に示した楕円曲線暗号演算装置100と同じ構成要素については同じ参照番号が付されている。本楕円曲線暗号演算装置100では、バス1に、CPU(Central Processing Unit)3と、演算器5と、ROM7と、RAM9と、通信部11とが接続されている。ROM7は、以下で説明する処理をCPU3に実行させるための演算プログラム71eと、通常のWindow法のWindowテーブルをベースとしたものであって以下で述べるWindowテーブル75eとが記録されている。
【0130】
演算器5は、実施の形態1−Aと同じ加算演算部51及び2倍演算部53とを有する。また、演算プログラム71eをCPU3が実行すると、制御部31e及び以下で述べるようなスカラー値dの補正演算を実施する補正部33eが実現される。また、外部装置との通信を行うため通信部11を設ける例を示しているが、他の機能を実現するための装置が設けられる場合もある。RAM9は、CPU3が各種処理を実施する際に用いるデータを格納するものであり、本実施の形態では、楕円曲線におけるベースポイントGのスカラー値d倍を算出するために用いる変数Aのための領域が用意される。その他にも演算に必要なデータもRAM9には格納されるが、耐タンパ性を保持させるために追加で必要な領域は存在しない。
【0131】
まず、本実施の形態3についての演算処理を具体的な例を用いて説明する。本具体例のためのWindowテーブル75eの内容を図30Aに示す。図30Aの例では、楕円曲線上の点Gのスカラー値d倍を算出する場合を念頭に、スカラー値dが12ビットであり、Window幅が3ビットであるものとする。従って、このWindowテーブル75eの要素数は23=8個である。そして、図9に示したPA対策なしの場合と比較すると、各テーブル値にテーブル補正値xGが加えられていることが分かる。なお、xは非ゼロである。
【0132】
具体的には、索引「000」に対応付けてxGを設定し、索引「001」に対応付けて20G+xGを設定し、索引「010」に対応付けて21G+xGを設定し、索引「011」に対応付けて21G+20G+xGを設定し、索引「100」に対応付けて23G+xGを設定し、索引「101」に対応付けて22G+20G+xGを設定し、索引「110」に対応付けて22G+21G+xGを設定し、索引「111」に対応付けて22G+21G+20G+xGを設定するようになっている。テーブル補正値にxGを採用することによって、以下で述べるように、スカラー値dを単純なスカラーの演算によって補正するだけで、楕円曲線上の演算を削減することができるようになる。
【0133】
以下で一般的なテーブル値については数式で表すが、索引値の上位1ビットの値が22Gに対応し、索引値の2番目のビットの値が21Gに対応し、索引値の3番目のビットの値が20Gに対応している。従って、索引値の各ビットの0又は1に応じて、22G、21G及び20Gが加算されたりされなかったりする。なお、2のべき指数は、Window(すなわち索引値)において各ビットが担当する、スカラー値dにおける相対ビット位置に応じて設定される。すなわち、本実施の形態では、図9でも示したように(┌n/k┐−1)=3ビットおきにスカラー値dのビット値を読み出すので、Windowの最下位ビットについてのべき指数を「0」とすると、2番目のビットについてのべき指数は「1」であり、最上位のビットについてのべき指数は「2」である。
【0134】
このようなWindowテーブル75eを用いた具体的な演算手順は図30Bに示すとおりである。最初に、従来技術や実施の形態1−A乃至2−Bとは異なり、手順(0)において、スカラー値dを、d=d−x(001001001001)2で補正する。xGがそれぞれテーブル値に加算されているWindowテーブル75eを用いて演算を実施すると、最終的に変数Aに格納される値は、dG+(001001001001)2×Gとなる。従って、スカラー値dから、予め(001001001001)2×xだけ減算しておけば、最終的に得られる結果がdGとなり、テーブル補正値の影響を相殺することができる。なお、このような補正を実施することによって、後から楕円曲線上の演算が不要になって、演算速度が速くなる。
【0135】
次に、手順(1)において、補正後のd(以下、本実施の形態では単純にdと示す場合もある)の上位3ビットを索引として、Windowテーブル75のテーブル値を読み出す。これを変数Aに代入する。すなわち、(1)A=Tab[d11,d10,d9](Tab[x]は、[x]で指定されたテーブル値を表す)。
【0136】
次に、手順(2)において、Windowのシフト幅である3ビットに応じて、23Aを算出する。すなわち、(2)A=23A。また、手順(3)において、補正後のdの次の3ビットを索引として、Windowテーブル75のテーブル値を読み出し、Aに加算する。すなわち、(3)A=A+Tab[d8,d7,d6]。さらに、手順(4)において、Windowのシフト幅である3ビットに応じて、23Aを算出する。すなわち、(4)A=23A。また、手順(5)において、補正後のdの次の3ビットを索引として、Windowテーブル75のテーブル値を読み出し、Aに加算する。すなわち、(5)A=A+Tab[d5,d4,d3]。
【0137】
さらに、手順(6)において、Windowのシフト幅である3ビットに応じて、23Aを算出する。すなわち、(6)A=23A。手順(7)において、補正後のdにおいて次の3ビットを索引として、Windowテーブル75のテーブル値を読み出し、Aに加算する。すなわち、(7)A=A+Tab[d2,d1,d0]=dG。
【0138】
このように手順(0)を除き、PA対策なしの場合の手順と同じになる。但し、索引値「000」に対してもテーブル値「xG」が読み出されるので、ゼロの加算は絶対に行われない。すなわち、図12(B)のような消費電力波形は出現しない。また、ダミー演算のように変数のためのRAM領域を増加させる必要もない。
【0139】
次に、図30に示したWindowテーブル75eを一般化したものを図31に示す。ここで、索引値yを(yk-1||yk-2||・・・y1||y0)と表すものとする。そうすると、右からx番目のビットはyx-1と表される。また、Window幅はkビットとする。
【0140】
そうすると、図31に示すように、索引値yのテーブル値は、以下のように表される。
(yk-1×2k-1+yk-2×2k-2+・・・+y1×21+y0×20)G+xG
【0141】
上でも述べたように、kビットの索引値の右からj番目のビットは、yj-1×2j-1に対応する。Window法の場合には、スカラー値dから連続したkビットを読み出すので、kビットの索引値の右からj番目のビットについての2のべき指数は、当該j番目のビットが担当する、スカラー値dにおける相対ビット位置(j−1)となる。
【0142】
従って、索引値「0」のテーブル値はテーブル補正値の「xG」であり、索引値「1」のテーブル値は、y0のみ「1」であるから20+xGとなる。索引値「2」のテーブル値は、y1のみ「1」であるから21+xGとなる。さらに、索引値「2k−1」のテーブル値は、yk-1乃至y0の全てが「1」であるから、(2k-1+2k-2+・・・+21+20)G+xGとなる。
【0143】
次に、図32を用いて、楕円曲線暗号演算装置の処理フローについて説明する。まず、制御部31eは、RAM9又はROM7に格納されているnビットのスカラー値d及び楕円曲線上のベースポイントGを読み出す(ステップS61)。そして、補正部33eは、スカラー値dの補正を実施する(ステップS63)。すなわち、補正値としてkビットのうち最下位ビットのみが「1」であるビット列が┌n/k┐個連結された補正値(001001001...001)(全┌n/k┐*kビット)とスカラー値xの積を算出する。この処理は簡単な処理であるからCPU3で容易に実施することができる。その後、制御部31eは、補正後のスカラー値d(以下、本実施の形態において単にスカラー値dと略する場合がある)の最上位ビットからkビット幅のwindowで値を読み出して、索引値を取得する(ステップS65)。補正後のスカラー値dを{dn-1||dn-2||・・・d1||d0}のような形で表すとすると、dから読み出される値w┌n/k┐-1は、以下のように表される。
w┌n/k┐-1={dk*(┌n/k┐-1)+(k-1)||・・・dk*(┌n/k┐-1)+1||dk*(┌n/k┐-1)+0}
【0144】
なお、┌n/k┐は、n/kより大きい最小の整数を表す。
【0145】
そして、制御部31eは、Windowテーブル75eから索引値w┌n/k┐-1に対応するテーブル値を読み出し、変数Aに設定する(ステップS67)。すなわち、以下のように表される。
A=W[w┌n/k┐-1]
W[z]は、Windowテーブル75eにおいて索引値zに対応付けられているテーブル値である。
【0146】
そして、制御部31eは、カウンタiに、┌n/k┐−2を設定する(ステップS69)。
【0147】
さらに、制御部31eは、補正後のスカラー値dからカウンタiで規定されるビット位置からkビット幅のwindowで値を読み出して、索引値を取得する(ステップS71)。
【0148】
補正後のdから読み出される値wiは、以下のように表される。
wi={dk*i+(k-1)||・・・dk*i+1||dk*i+0}
これによって、windowの位置がkビット右シフトされることになる。
【0149】
そして、制御部31eは、変数Aの2倍演算を、windowの右シフト幅であるk回演算器5の2倍演算部53に実施させる(ステップS73)。図32では、ECDBL(A)で、楕円曲線上におけるAの2倍演算を表す。
【0150】
さらに、制御部31eは、変数Aと、索引値wiでWindowテーブル75eを検索することにより得られるテーブル値W[wi]との加算演算を、演算器5の加算演算部51に実施させる(ステップS75)。図32は、ECADD(A,W[wi])で、楕円曲線上におけるAとW[wi]の加算演算を表す。
【0151】
そして、制御部31eは、カウンタiの値を1デクリメントし(ステップS77)、iが0以上であるか判断する(ステップS79)。iが0以上であればステップS71に戻る。すなわち、iが0未満になるまでステップS71乃至S79を繰り返す。
【0152】
iが0未満になると、制御部31eは、このようにして得られた変数Aの値を、指定された出力先に出力する(ステップS81)。変数Aの値は、例えば通信部11から外部に出力される場合もあれば、他の演算プログラムに出力されて処理に用いられる。
【0153】
以上述べたように、Windowテーブル75eにおいて通常のテーブル値に非ゼロのテーブル補正値xGを加算しておくことによって、どのようなスカラー値dに対しても同じ演算が繰り返されるようになる。すなわちPAが行われてもスカラー値dのビットを盗み取られることはない。また、処理としてはステップS63だけが追加されているので、処理速度の面でもPA対策なしの場合に比してパフォーマンスが大幅に落ちることはない。また、RAM9において使用される容量は、PA対策なしの場合と同じである。ROM7において使用される容量もPAなしの場合と同様である。すなわち、メモリ特にRAMの容量が限られているスマートカードのような実装形態において、本実施の形態は特に有用となる。
【0154】
[実施の形態4]
本実施の形態は、実施の形態3の櫛形Window版である。本実施の形態に係る楕円曲線暗号演算装置100の装置構成例を図33に示す。図29に示した楕円曲線暗号演算装置100と同じ構成要素については同じ参照番号が付されている。本楕円曲線暗号演算装置100では、バス1に、CPU(Central Processing Unit)3と、演算器5と、ROM7と、RAM9と、通信部11とが接続されている。ROM7は、以下で説明する処理をCPU3に実行させるための演算プログラム71fと、櫛形Window法のWindowテーブルをベースとしたものであって以下で述べるWindowテーブル75fとが記録されている。
【0155】
演算器5は、実施の形態1−Aと同じ加算演算部51及び2倍演算部53とを有する。また、演算プログラム71fをCPU3が実行すると、制御部31f及び以下で述べるようなスカラー値dの補正処理を実施する補正部33fが実現される。また、外部装置との通信を行うため通信部11を設ける例を示しているが、他の機能を実現するための装置が設けられる場合もある。RAM9は、CPU3が各種処理を実施する際に用いるデータを格納するものであり、本実施の形態では、楕円曲線におけるベースポイントGのスカラー値d倍を算出するために用いる変数Aのための領域が用意される。その他にも演算に必要なデータもRAM9には格納されるが、耐タンパ性を保持させるために追加で必要な領域は存在しない。
【0156】
まず、本実施の形態4についての演算処理を具体的な例を用いて説明する。本具体例のためのWindowテーブル75fの内容を図34Aに示す。図34Aの例では、楕円曲線上の点Gのスカラー値d倍を算出する場合を念頭に、スカラー値dが12ビットであり、Window幅が3ビットであるものとする。従って、このWindowテーブル75fの要素数は23=8個である。そして、図9に示したPA対策なしの場合と比較すると、各テーブル値にテーブル補正値xGが加えられていることが分かる。すなわち、ベースポイントGのスカラー値x倍である。
【0157】
具体的には、索引「000」に対応付けて0G+xG=xGを設定し、索引「001」に対応付けて20G+xGを設定し、索引「010」に対応付けて24G+xGを設定し、索引「011」に対応付けて24G+20G+xGを設定し、索引「100」に対応付けて28G+xGを設定し、索引「101」に対応付けて28G+20G+xGを設定し、索引「110」に対応付けて28G+24G+xGを設定し、索引「111」に対応付けて28G+24G+20G+xGを設定するようになっている。テーブル補正値にxGを採用することによって、以下で述べるように、スカラー値dを単純なスカラーの演算によって補正するだけで、楕円曲線上の演算を削減することができるようになる。
【0158】
以下で一般的なテーブル値については数式で表すが、索引値の上位1ビットの値が28Gに対応し、索引値の2番目のビットの値が24Gに対応し、索引値の3番目のビットの値が20Gに対応している。従って、索引値の各ビットの0又は1に応じて、28G、24G及び20Gが加算されたりされなかったりする。なお、2のべき指数は、Window(すなわち索引値)において各ビットが担当する、スカラー値dにおける相対ビット位置に応じて設定される。すなわち、本実施の形態では、図9でも示したように(┌n/k┐−1)=3ビットおきにスカラー値dのビット値を読み出すので、Windowの最下位ビットについてのべき指数を「0」とすると、2番目のビットについてのべき指数は「4」であり、最上位のビットについてのべき指数は「8」である。
【0159】
このようなWindowテーブル75fを用いた具体的な演算手順は図34Bに示すとおりである。最初に、従来技術や実施の形態1−A乃至2−Bとは異なり、手順(0)において、スカラー値dを、d=d−x(1111)2で補正する。xGがそれぞれテーブル値に加算されているWindowテーブル75fを用いて演算を実施すると、最終的に変数Aに格納される値は、dG+(1111)2×Gとなる。従って、スカラー値dから、予め(1111)2×xだけ減算しておけば、最終的に得られる結果がdGとなり、テーブル補正値の影響を相殺することができる。なお、このような補正を実施することによって、後から楕円曲線上の演算が不要になって、演算速度が速くなる。
【0160】
そして、手順(1)において、補正後のスカラー値d(以下、本実施の形態において単にスカラー値dと略する場合がある)の最上位ビットから3ビットおきにビット値を読み出すことによって索引値を得て、Windowテーブル75fのテーブル値を読み出す。これを変数Aに代入する。すなわち、(1)A=Tab[d11,d7,d3](Tab[]は、[]で指定されたテーブル値を表す)。
【0161】
次に、手順(2)において、Windowのシフト幅である1ビットに応じて、2Aを算出する。すなわち、(2)A=2A。また、手順(3)において、補正後のスカラー値dの上位第2ビットから3ビットおきにビット値を読み出すことによって索引値を得て、Windowテーブル75fのテーブル値を読み出し、Aに加算する。すなわち、(3)A=A+Tab[d10,d6,d2]。さらに、手順(4)において、Windowのシフト幅である1ビットに応じて、2Aを算出する。すなわち、(4)A=2A。また、手順(5)において、補正後のスカラー値dの上位第3ビットから3ビットおきにビット値を読み出すことによって索引値を得て、Windowテーブル75fのテーブル値を読み出し、Aに加算する。すなわち、(5)A=A+Tab[d9,d5,d1]。
【0162】
さらに、手順(6)において、Windowのシフト幅である1ビットに応じて、2Aを算出する。すなわち、(6)A=2A。そして、手順(7)において、スカラー値dの上位第4ビットから3ビットおきにビット値を読み出すことによって索引値を得て、Windowテーブル75fのテーブル値を読み出し、Aに加算する。すなわち、(7)A=A+Tab[d8,d4,d0]=dG。
【0163】
このように手順(0)を除き、PA対策なしの場合の手順と同じになる。但し、索引値「000」に対してもテーブル値「xG」が読み出されるので、ゼロの加算は絶対に行われない。すなわち、図12(B)のような消費電力波形は出現しない。また、ダミー演算のように変数のためのRAM領域を増加させる必要もない。
【0164】
次に、図34に示したWindowテーブル75fを一般化したものを図35に示す。実施の形態1−Aなどと同様に、索引値yを(yk-1||yk-2||・・・y1||y0)と表すものとする。そうすると、右からx番目のビットはyx-1と表される。また、Window幅はkビットとする。
【0165】
そうすると、図35に示すように、索引値yのテーブル値は、以下のように表される。
(yk-1×2┌n/k┐*(k-1)+yk-2×2┌n/k┐*(k-2)+・・・+y1×2┌n/k┐*1+y0×2┌n/k┐*0)G+xG
【0166】
上でも述べたように、kビットの索引値の右からj番目のビットは、yj-1×2┌n/k┐*(j-1)に対応する。櫛形Window法の場合には、スカラー値dから(┌n/k┐−1)おきにkビットを読み出すので、kビットの索引値の右からj番目のビットについての2のべき指数は、当該j番目のビットが担当する、スカラー値dにおける相対ビット位置┌n/k┐*(j−1)となる。
【0167】
従って、索引値「0」のテーブル値はテーブル補正値の「xG」であり、索引値「1」のテーブル値は、y0のみ「1」であるから20+xGとなる。索引値「2」のテーブル値は、y1のみ「1」であるから2┌n/k┐*1+xGとなる。さらに、索引値「2k−1」のテーブル値は、yk-1乃至y0の全てが「1」であるから、(2┌n/k┐*(k-1)+2┌n/k┐*(k-2)+・・・+2┌n/k┐*1+2┌n/k┐*0)G+xGとなる。
【0168】
次に、図36を用いて、楕円曲線暗号演算装置の処理フローについて説明する。まず、制御部31fは、RAM9又はROM7に格納されているnビットのスカラー値d及び楕円曲線上のベースポイントGを読み出す(ステップS91)。そして、補正部33fは、スカラー値dの補正を実施する(ステップS93)。すなわち、補正値として「1」が┌n/k┐個連結された補正値(111...1)とスカラー値xの積を算出する。この処理は簡単な処理であるからCPU3で容易に実施することができる。従って、d=d−(111...1)xを算出する。
【0169】
また、制御部31fは、スカラー値dの最上位ビットから(┌n/k┐−1)ビットおきにkビット幅のwindowでビット値を読み出して、索引値を取得する(ステップS95)。補正後のスカラー値dを{dn-1||dn-2||・・・d1||d0}のような形で表すとすると、dから読み出される値w┌n/k┐-1は、以下のように表される。
w┌n/k┐-1={d┌n/k┐*(k-1)+┌n/k┐-1||・・・d┌n/k┐*1+┌n/k┐-1||d┌n/k┐*0+┌n/k┐-1}
【0170】
そして、制御部31fは、Windowテーブル75fから索引値w┌n/k┐-1に対応するテーブル値を読み出し、変数Aに設定する(ステップS97)。すなわち、以下のように表される。
A=W[w┌n/k┐-1]
W[z]は、Windowテーブル75fにおいて索引値zに対応付けられているテーブル値である。
【0171】
そして、制御部31fは、カウンタiに、┌n/k┐−2を設定する(ステップS99)。
【0172】
さらに、制御部31fは、補正後のスカラー値dからカウンタiで規定されるビット位置からkビット幅のwindowでビット値を(┌n/k┐−1)ビットおきに読み出して、索引値を取得する(ステップS101)。
【0173】
dから読み出される値wiは、以下のように表される。
wi={dk*i+(k-1)||・・・dk*i+1||dk*i+0}
すなわち、Windowが1ビット右シフトされることになる。
【0174】
そして、制御部31fは、変数Aの2倍演算を、windowの右シフト幅である1回だけ演算器5の2倍演算部53に実施させる(ステップS103)。図36では、ECDBL(A)で、楕円曲線上におけるAの2倍演算を表す。
【0175】
さらに、制御部31fは、変数Aと、索引値wiでWindowテーブル75fを検索することにより得られるテーブル値W[wi]との加算演算を、演算器5の加算演算部51に実施させる(ステップS105)。図36は、ECADD(A,W[wi])で、楕円曲線上におけるAとW[wi]の加算演算を表す。
【0176】
そして、制御部31fは、カウンタiの値を1デクリメントし(ステップS107)、iが0以上であるか判断する(ステップS109)。iが0以上であればステップS101に戻る。すなわち、iが0未満になるまでステップS101乃至S109を繰り返す。
【0177】
iが0未満になると、制御部31fは、このようにして得られた変数Aの値を、指定された出力先に出力する(ステップS111)。変数Aの値は、例えば通信部11から外部に出力される場合もあれば、他の演算プログラムに出力されて処理に用いられる。
【0178】
以上述べたように、Windowテーブル75fにおいて通常のテーブル値に非ゼロのテーブル補正値xGを加算しておくことによって、どのようなスカラー値dに対しても同じ演算が繰り返されるようになる。すなわちPAが行われてもスカラー値dのビットを盗み取られることはない。また、処理としてはステップS93だけが追加されているので、処理速度の面でもPA対策なしの場合に比してパフォーマンスが大幅に落ちることはない。また、RAM9において使用される容量は、PA対策なしの場合と同じである。ROM7において使用される容量もPAなしの場合と同様である。すなわち、メモリ特にRAMの容量が限られているスマートカードのような実装形態において、本実施の形態は特に有用となる。
【0179】
[実施の形態5]
本実施の形態では、最初に2つのWindowテーブルを用いてスカラー値d又は演算結果の補正なしでPA対策を実施する例を説明する。
【0180】
本実施の形態に係る楕円曲線暗号演算装置100の装置構成例を図37に示す。図17に示した楕円曲線暗号演算装置100と同じ構成要素については同じ参照番号が付されている。本楕円曲線暗号演算装置100では、バス1に、CPU(Central Processing Unit)3と、演算器5と、ROM7と、RAM9と、通信部11とが接続されている。ROM7は、以下で説明する処理をCPU3に実行させるための演算プログラム71gと、櫛形Window法のWindowテーブルをベースとしたものであって以下で述べるWindowテーブルa及びbとが記録されている。
【0181】
演算器5は、実施の形態1−Aと同じ加算演算部51及び2倍演算部53とを有する。また、演算プログラム71gをCPU3が実行すると、制御部31gが実現される。以下で詳細に述べるが、本実施の形態では、補正を行わない。
【0182】
また、外部装置との通信を行うため通信部11を設ける例を示しているが、他の機能を実現するための装置が設けられる場合もある。RAM9は、CPU3が各種処理を実施する際に用いるデータを格納するものであり、本実施の形態では、楕円曲線におけるベースポイントGのスカラー値d倍を算出するために用いる変数Aのための領域が用意される。その他にも演算に必要なデータもRAM9には格納されるが、耐タンパ性を保持させるために追加で必要な領域は存在しない。
【0183】
まず、本実施の形態5についての演算処理を具体的な例を用いて説明する。本具体例のためのWindowテーブルa及びbの内容を図38A(a)及び(b)に示す。図38A(a)及び(b)の例では、楕円曲線上の点Gのスカラー値d倍を算出する場合を念頭に、スカラー値dが18ビットであり、Window幅が3ビットであるものとする。また、スカラー値dの上位9ビットのブロックを、Windowテーブルaが担当し、下位9ビットのブロックを、Windowテーブルbが担当する。従って、このWindowテーブルa及びbの要素数は各々23=8個である。そして、図11に示したPA対策なしの場合と比較すると、図38A(a)の上側テーブルの方は、各テーブル値にテーブル補正値−Fが加えられていることが分かる。また、図38A(b)の下側テーブルの方は、各テーブル値にテーブル補正値+Fが加えられていることが分かる。すなわち、上側テーブルのテーブル補正値−Fと下側テーブルの補正値+Fによって、テーブル補正値が相殺されてゼロになるようにする。これによって、複数のWindowテーブルを用いる場合には、スカラー値d又は演算結果の補正を実施せずとも、PA対策ができるようになる。
【0184】
具体的には、上側テーブルであるWindowテーブルaにおいては、索引「000」に対応付けて0G−F=−Fを設定し、索引「001」に対応付けて29G−Fを設定し、索引「010」に対応付けて212G−Fを設定し、索引「011」に対応付けて212G+29−Fを設定し、索引「100」に対応付けて215G−Fを設定し、索引「101」に対応付けて215+29G−Fを設定し、索引「110」に対応付けて215+212−Fを設定し、索引「111」に対応付けて215+212+29−Fを設定するようになっている。Windowテーブルaのテーブル補正値−Fは、Windowテーブルbのテーブル補正値+Fとの加算結果が「0」になればよい。ここで、補正値Fは、楕円曲線上の点である。
【0185】
また、下側テーブルであるWindowテーブルbにおいては、索引「000」に対応付けて0G+F=+Fを設定し、索引「001」に対応付けて20G+Fを設定し、索引「010」に対応付けて23G+Fを設定し、索引「011」に対応付けて23G+20+Fを設定し、索引「100」に対応付けて26G+Fを設定し、索引「101」に対応付けて26+20G+Fを設定し、索引「110」に対応付けて26+23+Fを設定し、索引「111」に対応付けて26+23+20+Fを設定するようになっている。
【0186】
以下で一般的なテーブル値については数式で表すが、上側テーブルであるWindowテーブルaにおける索引値の上位1ビットの値が215Gに対応し、索引値の2番目のビットの値が212に対応し、索引値の3番目のビットの値が29に対応している。従って、索引値の各ビットの0又は1に応じて、215、212及び29が加算されたりされなかったりする。なお、2のべき指数は、Window(すなわち索引値)において各ビットが担当する、スカラー値dのブロックにおける相対ビット位置、及びスカラー値d中の当該ブロックの相対位置に応じて設定される。すなわち、下側テーブルであるWindowテーブルbは、スカラー値dの下位9ビットの下位ブロックを担当しており、その中で、図11でも示したように(┌n/2k┐−1)=2ビットおきにスカラー値dのビット値を読み出すので、下側テーブルであるWindowテーブルbについてのWindowの最下位ビットについてのべき指数が「0」とすると、2番目のビットについてのべき指数は「3」であり、最上位のビットについてのべき指数は「6」である。同様に、上側テーブルであるWindowテーブルaは、スカラー値dの上位9ビットの上位ブロックを担当しており、その中で、図11でも示したように(┌n/2k┐−1)=2ビットおきにスカラー値dのビット値を読み出すので、上側テーブルであるWindowテーブルaについてのWindowの最下位ビットについてのべき指数は「9」となり、2番目のビットについてのべき指数は「12」となり、最上位のビットについてのべき指数は「15」となる。
【0187】
このようなWindowテーブルa及びbを用いた具体的な演算手順は図38Bに示すとおりである。最初に、手順(1)において、dの上位半分のうち2ビットおきにdにおける3ビットを索引として抽出し、Windowテーブルaのテーブル値を読み出す。これを変数Aに代入する。すなわち、(1)A=TabH[d17,d14,d11]。TabHについては、上側テーブルであるWindowテーブルaのテーブル値を表す。次に、手順(2)において、dの下位半分のビットブロックのうち2ビットおきにdにおける3ビットを索引として抽出し、Windowテーブルbのテーブル値を読み出し、Aに加算する。すなわち、(2)A=A+TabL[d8,d5,d2]。TabLについては、下側テーブルであるWindowテーブルbのテーブル値を表す。
【0188】
本実施の形態のようなテーブル補正値を採用すれば、手順(1)及び(2)で−F+F=0(ゼロ)で、テーブル補正値が相殺されている。
【0189】
そして、Windowのシフト幅1ビットに応じて、2Aを算出する。すなわち、(3)A=2A。また、手順(4)において、dにおいて手順(1)の状態からwindowを1ビット右シフトさせて上位半分のビットブロックの次の3ビットを索引として抽出し、Windowテーブルのテーブル値を読み出し、Aに加算する。すなわち、(5)A=A+TabH[d16,d13,d10]。また、手順(5)において、dにおいて手順(2)の状態からwindowを1ビット右シフトさせて下位半分のビットブロックの次の3ビットを索引として抽出し、Windowテーブルのテーブル値を読み出し、Aに加算する。すなわち、(5)A=A+TabL[d7,d4,d1]。
【0190】
手順(1)及び(2)と同様に、手順(3)及び(4)においてもテーブル補正値−F+F=0(ゼロ)で、テーブル補正値が相殺されている。
【0191】
さらに、手順(6)において、Windowのシフト幅1ビットに応じて、2Aを算出する。すなわち、(6)A=2A。また、手順(7)において、dにおいて手順(4)の状態からwindowを1ビット右シフトさせて上位半分のビットブロックの次の3ビットを索引として抽出し、Windowテーブルのテーブル値を読み出し、Aに加算する。すなわち、(7)A=A+TabH[d15,d12,d9]。また、手順(8)において、dにおいて手順(5)の状態からwindowを1ビット右シフトさせて下位半分のビットブロックの次の3ビットを索引として抽出し、Windowテーブルのテーブル値を読み出し、Aに加算する。すなわち、(8)A=A+TabL[d6,d3,d0]=dG。
【0192】
手順(1)及び(2)と同様に、手順(7)及び(8)においてもテーブル補正値−F+F=0(ゼロ)で、テーブル補正値が相殺されている。
【0193】
このように、スカラー値d又は演算結果の補正を行わずとも、テーブル補正値が相殺されるので、演算処理が高速化される。なお、櫛形Windowを用いており且つWindowテーブルも2つ用いているので、より処理が高速化される。
【0194】
以上のように演算処理そのものは図11で説明したものと同じであるが、Windowテーブルa及びbの構成を上で述べたように変更しているため、ゼロの加算は絶対に行われない。すなわち、図12(B)のような消費電力波形は出現しない。また、ダミー演算のように変数のためのRAM領域を増加させる必要もない。
【0195】
次に、図38に示したWindowテーブルa及びbを一般化したものを図39及び図40に示す。実施の形態1−Aと同様に、索引値yを(yk-1||yk-2||・・・y1||y0)と表すものとする。そうすると、右からx番目のビットはyx-1と表される。また、Window幅は、各Windowテーブルについてkビットとする。スカラー値dはnビットであるものとする。
【0196】
そうすると、図40に示すように、下側テーブルであるWindowテーブルbにおける索引値yのテーブル値は、以下のように表される。
(yk-1×2┌n/2k┐*(k-1)+yk-2×2┌n/2k┐*(k-2)+・・・+y1×2┌n/2k┐*1+y0×2┌n/2k┐*0)G+F
【0197】
下側テーブルであるWindowテーブルbにおいて、kビットの索引値の右からi番目のビットは、yi-1×2┌n/2k┐*(i-1)に対応する。櫛形Window法の場合には、スカラー値dから(┌n/2k┐−1)おきにkビットを読み出すので、kビットの索引値の右からi番目のビットについての2のべき指数は、当該i番目のビットが担当する、スカラー値dの下位ビットブロックにおける相対ビット位置┌n/2k┐*(i−1)となる。
【0198】
一方、図39に示すように、上側テーブルであるWindowテーブルaにおける索引値yのテーブル値は、以下のように表される。
(yk-1×2┌n/2k┐*k+┌n/2k┐*(k-1)++yk-2×2┌n/2k┐*k+┌n/2k┐*(k-2)+・・・+y1×2┌n/2k┐*k+┌n/2k┐*1+y0×2┌n/2k┐*k+┌n/2k┐*0)G−F
【0199】
上側テーブルであるWindowテーブルaにおいて、kビットの索引値の右からi番目のビットは、yi-1×2┌n/2k┐*k+┌n/2k┐*(i-1)に対応する。Windowテーブル2つで櫛形Window法の場合には、スカラー値dから(┌n/2k┐−1)おきにkビットを読み出し、上側テーブルの場合にはスカラー値dの上位ビットブロックを担当するので、kビットの索引値の右からi番目のビットについての2のべき指数は、下側テーブルの場合に比して┌n/2k┐*kだけ上乗せされて、i番目のビットが担当する、スカラー値dの上位ビットブロックにおける相対ビット位置┌n/2k┐*k+┌n/2k┐*(i−1)となる。
【0200】
次に、図41を用いて、楕円曲線暗号演算装置の処理フローについて説明する。まず、制御部31gは、RAM9又はROM7に格納されているnビットのスカラー値d及び楕円曲線上のベースポイントGを読み出す(ステップS121)。そして、制御部31gは、スカラー値dの上位ビットブロックにおける最上位ビットから(┌n/2k┐−1)ビットおきにkビット幅のwindowでビット値を読み出して、上側テーブルであるWindowテーブルaのための索引値を取得する(ステップS123)。スカラー値dを{dn-1||dn-2||・・・d1||d0}のような形で表すとすると、dから読み出される値w┌n/2k┐-1,1は、以下のように表される。
w┌n/2k┐-1,1={d┌n/2k┐*(k-1)+┌n/2k┐-1+┌n/2┐||・・・d┌n/2k┐*1+┌n/2k┐-1+┌n/2┐||d┌n/2k┐*0+┌n/2k┐-1+┌n/2┐}
【0201】
上でも述べたが、┌n/2k┐は、n/2kより大きい最小の整数を表す。例えばスカラー値dは全体では18ビットであるがテーブル2つで上位半分のビットブロックのビット数は9である。そして、k=3であれば、┌n/2k┐-1=2となる。また、┌n/2k┐*(k-1)+┌n/2k┐−1+┌n/2┐=3*2+3−1+9=17となる。17は最上位ビットの番号である。
【0202】
また、制御部31gは、スカラー値dの下位ビットブロックにおける最上位ビットから(┌n/2k┐−1)ビットおきにkビット幅のwindowでビット値を読み出して、下側テーブルであるWindowテーブルbのための索引値を取得する(ステップS125)。dから読み出される値w┌n/2k┐-1,0は、以下のように表される。
w┌n/2k┐-1,0={d┌n/2k┐*(k-1)+┌n/2k┐-1||・・・d┌n/2k┐*1+┌n/2k┐-1||d┌n/2k┐*0+┌n/2k┐-1}
【0203】
例えばスカラー値dは全体では18ビットであるがテーブル2つで上位半分のビットブロックのビット数は9である。そして、k=3であれば、┌n/k┐-1=2となる。また、┌n/k┐*(k-1)+┌n/k┐−1=3*2+3−1=9となる。9は下位ビットブロックの最上位ビットの番号である。
【0204】
そして、制御部31gは、Windowテーブルaから索引値w┌n/2k┐-1,1に対応するテーブル値を読み出し、変数Aに設定する(ステップS127)。すなわち、以下のように表される。
A=W1[w┌n/2k┐-1,1]
W1[z]は、Windowテーブルaにおいて索引値zに対応付けられているテーブル値である。
【0205】
さらに、制御部31gは、Windowテーブルbにおいて索引値w┌n/2k┐-1,0に対応するテーブル値W0と、変数Aとの加算演算を、演算器5の加算演算部51に実施させる(ステップS129)。図41では、ECADD(A,W0[w┌n/2k┐-1,0])で、楕円曲線上におけるAとW0[w┌n/2k┐-1,0]の加算演算を表す。
【0206】
そして、制御部31gは、カウンタiに、┌n/k┐−2を設定する(ステップS131)。
【0207】
さらに、制御部31gは、スカラー値dの上位ビットブロックからカウンタiで規定されるビット位置からkビット幅のwindowでビット値を(┌n/2k┐−1)ビットおきに読み出して、索引値wi,1を取得する(ステップS133)。
【0208】
dから読み出される値wi,1は、以下のように表される。
wi,1={d┌n/2k┐*(k-1)+i+┌n/2┐||・・・d┌n/2k┐*1+i+┌n/2┐||d┌n/2k┐*0+i+┌n/2┐}
すなわち、Windowが1ビット右シフトされることになる。
【0209】
また、制御部31gは、スカラー値dの下位ビットブロックからカウンタiで規定されるビット位置からkビット幅のwindowでビット値を(┌n/2k┐−1)ビットおきに読み出して、索引値wi,0を取得する(ステップS135)。
【0210】
dから読み出される値wi,0は、以下のように表される。
wi,0={d┌n/2k┐*(k-1)+i||・・・d┌n/2k┐*1+i||d┌n/2k┐*0+i}
【0211】
そして、制御部31gは、変数Aの2倍演算を、windowの右シフト幅である1回だけ演算器5の2倍演算部53に実施させる(ステップS137)。図41では、ECDBL(A)で、楕円曲線上におけるAの2倍演算を表す。
【0212】
さらに、制御部31gは、変数Aと、索引値wi,1でWindowテーブルaを検索することにより得られるテーブル値W1[wi,1]との加算演算を、演算器5の加算演算部51に実施させる(ステップS139)。
【0213】
また、制御部31gは、変数Aと、索引値wi,0でWindowテーブルbを検索することにより得られるテーブル値W0[wi,0]との加算演算を、演算器5の加算演算部51に実施させる(ステップS141)。
【0214】
そして、制御部31cは、カウンタiの値を1デクリメントし(ステップS143)、iが0以上であるか判断する(ステップS145)。iが0以上であればステップS133に戻る。すなわち、iが0未満になるまでステップS133乃至S145を繰り返す。
【0215】
iが0未満になると、制御部31gは、このようにして得られた変数Aの値を、指定された出力先に出力する(ステップS147)。変数Aの値は、例えば通信部11から外部に出力される場合もあれば、他の演算プログラムに出力されて処理に用いられる。
【0216】
以上述べたように、Windowテーブルa及びbにおいて通常のテーブル値に非ゼロのテーブル補正値を加算しておけば、どのようなスカラー値dに対しても同じ演算が繰り返されるようになる。すなわちPAが行われてもスカラー値dのビットを盗み取られることはない。一方、テーブル補正値は、2つのテーブルで相殺されるように設定されるので、演算処理はPA対策なしの場合と完全に同じになっている。すなわち、処理速度の面で、PA対策なしと同じである。また、RAM9において使用される容量は、PA対策なしの場合と同じである。ROM7において使用される容量も同様に、PA対策なしの場合と同じである。すなわち、メモリ特にRAMの容量が限られているスマートカードのような実装形態において、本実施の形態は特に有用となる。
【0217】
[実施の形態6]
実施の形態5では、2つのWindowテーブルa及びbを用いる例を示したが、テーブルの数は2に限定されるものではない。例えば、一般的にt個設ける場合について説明する。
【0218】
本実施の形態に係る楕円曲線暗号演算装置100の装置構成例を図42に示す。図17に示した楕円曲線暗号演算装置100と同じ構成要素については同じ参照番号が付されている。本楕円曲線暗号演算装置では、バス1に、CPU3と、演算器5と、ROM7と、RAM9と、通信部11とが接続されている。ROM7は、以下で説明する処理をCPU3に実行させるための演算プログラム71hと、櫛形Window法のWindowテーブルをベースとしたものであって以下で述べるWindowテーブル0乃至(t−1)とが記録されている。
【0219】
演算器5は、実施の形態1−Aと同じ加算演算部51及び2倍演算部53とを有する。また、演算プログラム71hをCPU3が実行すると、制御部31hが実現される。実施の形態5と同様に、本実施の形態においては補正を行わない。
【0220】
また、外部装置との通信を行うため通信部11を設ける例を示しているが、他の機能を実現するための装置が設けられる場合もある。RAM9は、CPU3が各種処理を実施する際に用いるデータを格納するものであり、本実施の形態では、楕円曲線におけるベースポイントGのスカラー値d倍を算出するために用いる変数Aのための領域が用意される。その他にも演算に必要なデータもRAM9には格納されるが、耐タンパ性を保持させるために追加で必要な領域は存在しない。
【0221】
Windowテーブル0乃至(t−1)のうちのWindowテーブルjに格納されるテーブル値は、以下のように表される。なお、索引値yを(yk-1||yk-2||・・・y1||y0)と表すものとする。そうすると、右からx番目のビットはyx-1と表される。また、Window幅は、各Windowテーブルについてkビットとする。さらに、スカラー値dは、nビットであるものとする。
【0222】
【数1】
K(n, k, m, t, j)=┌n/(t*k)┐×k×j+┌n/(t*k)┐×m
なお、以下では、e=┌n/(t*k)┐を示すものとする。
【0223】
上記のK(n, k, m, t, j)において、┌n/(t*k)┐×k×jの項は、同じWindowテーブルであれば同じである。すなわち、スカラー値dにおける該当ビットブロックの相対位置に応じた値になる。mはymに対応する。従って、┌n/(t*k)┐×mは、該当ビットブロックにおいてwindowの各ビットが担当する相対ビット位置に応じた値となる。
【0224】
本実施の形態では、各Windowテーブルについてのテーブル補正値Fjの総和がゼロ点となるように設定する。すなわち、以下のように表される。
F0+F1+・・・+Ft-1=0
【0225】
次に、図43を用いて、楕円曲線暗号演算装置の処理フローについて説明する。まず、制御部31hは、RAM9又はROM7に格納されているnビットのスカラー値d及び楕円曲線上のベースポイントGを読み出す(ステップS161)。そして、制御部31hは、Windowテーブル0乃至(t−1)の各々が担当するスカラー値dのビットブロックの最上位ビットから(┌n/(t*k)┐−1)ビットおきにkビット幅のwindowでビット値を読み出して、索引値we-1,0乃至we-1,t-1を取得する(ステップS163)。より具体的には、以下のように表される。
we-1,0={de*k*0+e*(k-1)+e-1||de*k*0+e*(k-2)+e-1||・・||de*k*0+e*0+e-1}
we-1,j={de*k*j+e*(k-1)+e-1||de*k*j+e*(k-2)+e-1||・・||de*k*j+e*0+e-1}
we-1,t-1={de*k*(t-1)+e*(k-1)+e-1||de*k*(t-1)+e*(k-2)+e-1||・・||de*k*(t-1)+e*0+e-1}
【0226】
また、制御部31hは、スカラー値dの最下位ビットブロックを担当するWindowテーブル0から、索引値we-1,0に対応するテーブル値W0[we-1,0]を読み出し、変数Aに設定する(ステップS165)。すなわち、以下のように表される。
A=A+W0[we-1,0]
W0[we-1,0]は、Windowテーブル0において索引値(e−1)に対応付けられているテーブル値である。
【0227】
さらに、制御部31hは、j=1からj=t-1まで順番に、Windowテーブルjにおいて索引値(e−1)に対応付けられているテーブル値Wj[we-1,j]と、変数Aとの加算演算を、演算器5の加算演算部51に繰り返し実施させる(ステップS167)。図41は、ECADD(A,Wj[we-1,j])で、楕円曲線上におけるAとWj[we-1,j]の加算演算を表す。
【0228】
そして、制御部31hは、カウンタiに、e−2を設定する(ステップS169)。これによって、windowが1ビット右シフトされたことになる。
【0229】
さらに、制御部31hは、Windowテーブル0乃至(t−1)の各々が担当するスカラー値dのビットブロックの次のビットから(┌n/(t*k)┐−1)ビットおきにkビット幅のwindowでビット値を読み出して、索引値wi,0乃至wi,t-1を取得する(ステップS171)。より具体的には、以下のように表される。
wi,0={de*k*0+e*(k-1)+i||de*k*0+e*(k-2)+i||・・||de*k*0+e*0+i}
wi,j={de*k*j+e*(k-1)+i||de*k*j+e*(k-2)+i||・・||de*k*j+e*0+i}
wi,t-1={de*k*(t-1)+e*(k-1)+i||de*k*(t-1)+e*(k-2)+i||・・||de*k*(t-1)+e*0+i}
【0230】
そして、制御部31hは、変数Aの2倍演算を、windowの右シフト幅である1回だけ演算器5の2倍演算部53に実施させる(ステップS173)。図43では、ECDBL(A)で、楕円曲線上におけるAの2倍演算を表す。
【0231】
さらに、制御部31hは、j=0からj=t-1まで順番に、Windowテーブルjにおいて索引値iに対応付けられているテーブル値Wj[wi,j]と、変数Aとの加算演算を、演算器5の加算演算部51に繰り返し実施させる(ステップS175)。
【0232】
また、制御部31hは、カウンタiの値を1デクリメントし(ステップS177)、iが0以上であるか判断する(ステップS179)。iが0以上であればステップS171に戻る。すなわち、iが0未満になるまでステップS171乃至S179を繰り返す。
【0233】
iが0未満になると、制御部31hは、このようにして得られた変数Aの値を、指定された出力先に出力する(ステップS181)。変数Aの値は、例えば通信部11から外部に出力される場合もあれば、他の演算プログラムに出力されて処理に用いられる。
【0234】
以上述べたように、Windowテーブル0乃至(t−1)において通常のテーブル値に非ゼロのテーブル補正値を加算しておけば、どのようなスカラー値dに対しても同じ演算が繰り返されるようになる。すなわちPAが行われてもスカラー値dのビットを盗み取られることはない。一方、テーブル補正値は、t個のテーブルで相殺されるように設定されるので、演算処理はPA対策なしの場合と完全に同じになっている。すなわち、処理速度の面でもPA対策なしの場合と同じである。また、RAM9において使用される容量は、PA対策なしの場合と同じである。ROM7において使用される容量も同様に、PA対策なしの場合と同じである。すなわち、メモリ特にRAMの容量が限られているスマートカードのような実装形態において、本実施の形態は特に有用となる。
【0235】
以上本技術の実施の形態を説明したが、本技術はこれに限定されるものではない。例えば実施の形態5及び6については、櫛形Window法を前提としているが、通常のWindow法を採用することも可能である。
【0236】
さらに、実施の形態5及び6で各ビットブロックに用いられるwindow幅については統一されていたが、異なるビット幅にしてもよい。また、ビットブロックのサイズを異なるようにしても良い。
【0237】
また、上で述べた楕円暗号演算装置では、演算器5をCPU3とは別に設ける例を示しているが、例えばCPU3によりその機能を実施するようにしても良い。さらに、CPU3が複数設けられている場合には、演算器5が保持する機能を他のCPUで実現するようにしても良い。さらに1つのCPU3で複数のコアを有する場合にも同様である。
【0238】
以上述べた本実施の形態をまとめると以下のようになる。
【0239】
第1の態様に係る楕円曲線暗号演算装置(図44)は、楕円曲線上の所定の点Gのスカラー倍算を実施する楕円曲線暗号演算装置であって、(A)n(nは2以上の整数)ビットのスカラー値dに対するウィンドウのウィンドウ幅k(kは2以上の整数)ビットと同じビット数の各索引値に対応付けて、当該索引値の各ビットの値と当該ビットが担当するスカラー値d中の相対ビット位置に対応する値についての2のべき乗との積の和に点Gを乗じた基本テーブル値に対して非ゼロのテーブル補正値を加えたテーブル値が格納されているウィンドウテーブル(図44の1110)を格納するデータ格納部(図44の1100)と、(B)ウィンドウをシフトさせつつ当該ウィンドウの各ビットの担当ビット位置のビット値をスカラー値dから読み出すことにより索引値を生成して当該索引値でウィンドウテーブルを検索してテーブル値を読み出し、読み出したテーブル値を用いて2倍演算及び加算演算を実施する演算処理部(図44の1200)と、(C)演算処理部の演算結果に対してテーブル補正値に応じた所定の補正値で補正を実施する補正部(図44の1300)とを有する。
【0240】
このようなウィンドウテーブルを予め用意しておくことによって、どのような索引値であっても対応するテーブル値はゼロとならない。すなわち、補正部の処理以外は、PA対策無しの場合と同じ処理を実施しても、消費電力の波形はdのビット値に応じて変化することはないので、SPAに対する耐タンパ性が保持できている。また、余分なRAM領域も必要ない。
【0241】
また、上で述べた演算処理部が、変数に格納されている値に対して楕円曲線上における2倍演算を実施して演算結果を当該変数に格納する2倍演算部と、変数に格納されている値と読み出されたテーブル値との、楕円曲線上における加算演算を実施して、演算結果を当該変数に格納する加算演算部と、制御部とを有するようにしても良い。そのような場合には、制御部が、スカラー値dの最上位ビットから、ウィンドウの各ビットの担当ビット位置のビット値を読み出して索引値を生成し、当該索引値で前記テーブル格納部に格納されているウィンドウテーブルを検索して第1のテーブル値を読み出して、上記変数に格納するようにしてもよい。そして、ウィンドウを所定のビットシフト幅だけ右シフトさせると共に、2倍演算部に、所定のビットシフト幅に応じた回数分上記変数に格納されている値に対して2倍演算を実施させ、加算演算部に、スカラー値dからウィンドウの各ビットの担当ビット位置のビット値を読み出すことにより得られる索引値でウィンドウテーブルを検索して得られる第2のテーブル値について加算演算を実施させる処理を、スカラー値dの全てのビットを処理するまで繰り返し行わせるようにしてもよい。
【0242】
2倍演算部及び加算演算部は、専用の回路であっても良いし、CPUとプログラムの組み合わせにて実施するようにしても良い。また、演算処理部については、CPUと専用の演算器とプログラムとの組み合わせにて実施されるようにしても良い。
【0243】
さらに、第1の態様において、テーブル補正値をFとし、索引値をウィンドウ幅kビットのy(yk-1||yk-2||・・・y1||y0)とすると、対応するテーブル値を、以下のような値に設定するようにしても良い。
(yk-1×2k-1+yk-2×2k-2+・・・+y1×21+y0×20)G+F
また、上で述べた所定の補正値を、以下のような値に設定するようにしても良い。
(2k*0+2k*1+2k*2+・・・+2k*(┌n/k┐-1))F
(┌n/k┐は、n/k以上の最小の整数を表す)
さらに、上で述べた担当ビット位置がkビット連続しており且つ所定のビットシフト幅がkビットである場合もある。
【0244】
例えば、通常のWindow法を採用する場合には、このような構成が必要となる。
【0245】
また、第1の態様において、テーブル補正値をFとし、索引値をウィンドウ幅kビットのy(yk-1||yk-2||・・・y1||y0)とすると、対応するテーブル値を、以下のように設定しても良い。
(yk-1×2┌n/k┐*(k-1)+yk-2×2┌n/k┐*(k-2)+・・・+y1×2┌n/k┐*1+y0×2┌n/k┐*0)G+F
(┌n/k┐は、n/k以上の最小の整数を表す)
また、上で述べた所定の補正値を、以下のように設定するようにしても良い。
(2┌n/k┐−1)F
さらに、上で述べた担当ビット位置が┌n/k┐−1ビットおきであり且つ所定のビットシフト幅が1ビットであるようにしてもよい。
【0246】
例えば、櫛形Window法を採用する場合には、このような構成が必要となる。
【0247】
さらに、第1の態様において、所定の補正値が予め算出されており且つデータ格納部に格納されているようにしてもよい。このようにすれば、処理のパフォーマンスはあまり低下しない。また、その都度計算するようにしても良い。
【0248】
第2の態様に係る楕円曲線暗号演算装置(図44)は、(A)n(nは2以上の整数)ビットのスカラー値dに対するウィンドウのウィンドウ幅k(kは2以上の整数)ビットと同じビット数の各索引値に対応付けて、当該索引値の各ビットの値と当該ビットが担当するスカラー値d中の相対ビット位置に対応する値についての2のべき乗との積の和に点Gを乗じた基本テーブル値に対して点Gの第2のスカラー値x倍のテーブル補正値を加えたテーブル値が格納されているウィンドウテーブル(図44の1110)を格納するデータ格納部(図44の1100)と、(B)スカラー値dに対して第2のスカラー値xに応じた所定の補正値で補正を実施して、第3のスカラー値fを生成する補正部(図44の1300)と、(C)ウィンドウをシフトさせつつ当該ウィンドウの各ビットの担当ビット位置のビット値を第3のスカラー値fから読み出すことにより索引値を生成して当該索引値でウィンドウテーブルを検索してテーブル値を読み出し、読み出したテーブル値を用いて2倍演算及び加算演算を実施する演算処理部(図44の1200)とを有する。
【0249】
このように、ウィンドウテーブルの基本テーブル値に加算するテーブル補正値が、点Gの第2のスカラー値x倍である場合には、第1のスカラー値を補正することによって、楕円曲線上の演算が不要になって、補正の処理負荷を下げることができるようになる。なお、第1の態様においても、テーブル補正値をxGと設定することも可能である。当然、追加のRAMも不要である。
【0250】
また、上で述べた演算処理部が、変数に格納されている値に対して楕円曲線上における2倍演算を実施して演算結果を当該変数に格納する2倍演算部と、変数に格納されている値と読み出されたテーブル値との、楕円曲線上における加算演算を実施し、演算結果を当該変数に格納する加算演算部と、制御部とを有するようにしてもよい。そのような場合、上で述べた制御部が、第3のスカラー値fの最上位ビットから、ウィンドウの各ビットの担当ビット位置のビット値を読み出して索引値を生成し、当該索引値でテーブル格納部に格納されているウィンドウテーブルを検索して第1のテーブル値を読み出して、変数に格納するようにしてもよい。さらに、ウィンドウを所定のビットシフト幅だけ右シフトさせると共に、2倍演算部に、所定のビットシフト幅に応じた回数分変数に格納されている値に対して2倍演算を実施させ、加算演算部に、第3のスカラー値fからウィンドウの各ビットの担当ビット位置のビット値を読み出すことにより得られる索引値でウィンドウテーブルを検索して得られる第2のテーブル値について加算演算を実施させる処理を、第3のスカラー値fの全てのビットを処理するまで繰り返し行わせるようにしてもよい。
【0251】
2倍演算部及び加算演算部については、第1の形態と同様に、従来から用いられているものが使用できる。ハードウエアで実装しても良いし、ソフトウエアで実装しても良い。制御部は、CPUとプログラムとの組み合わせにて実施される場合もある。
【0252】
また、第2の態様において、索引値をウィンドウ幅kビットのy(yk-1||yk-2||・・・y1||y0)とすると、対応するテーブル値を、以下のように設定するようにしてもよい。
(yk-1×2k-1+yk-2×2k-2+・・・+y1×21+y0×20)G+xG
また、上で述べた所定の補正値を、以下のように設定するようにしてもよい。
(2k*0+2k*1+2k*2+・・・+2k*(┌n/k┐-1))x
(┌n/k┐は、n/k以上の最小の整数を表す)
さらに、担当ビット位置がkビット連続しており且つ所定のビットシフト幅がkビットであるようにしてもよい。
【0253】
例えば、第2の態様において通常のWindow法を採用する場合にはこのような構成となる。
【0254】
さらに、第2の態様において、索引値をウィンドウ幅kビットのy(yk-1||yk-2||・・・y1||y0)とすると、対応するテーブル値を、以下のように設定してもよい。
(yk-1×2┌n/k┐*(k-1)+yk-2×2┌n/k┐*(k-2)+・・・+y1×2┌n/k┐*1+y0×2┌n/k┐*0)G+xG
(┌n/k┐は、n/k以上の最小の整数を表す)
また、上で述べた所定の補正値を、以下のように設定してもよい。
(2┌n/k┐−1)x
さらに、担当ビット位置が┌n/k┐−1ビットおきであり且つ所定のビットシフト幅が1ビットであるようにしてもよい。
【0255】
例えば、第2の態様において櫛形Window法を採用する場合にはこのような構成が必要となる。
【0256】
第3の態様に係る楕円曲線暗号演算装置(図45)は、(A)スカラー値dのブロック毎に、当該ブロックに対するウィンドウのウィンドウ幅k(kは2以上の整数)ビットと同じビット数の各索引値に対応付けて、当該索引値の各ビットの値と当該ビットが担当するブロック中の相対ビット位置及び前記スカラー値d中の当該ブロックの相対位置に対応する値についての2のべき乗との積の和に前記点Gを乗じた基本テーブル値に対して非ゼロのブロックテーブル補正値を加えたテーブル値が格納されているウィンドウテーブル(図45の1610)を格納するデータ格納部(図45の1600)と、(B)ウィンドウをシフトさせつつ当該ウィンドウの各ビットの担当ビット位置のビット値をスカラー値dの各ブロックから読み出すことにより索引値を生成して当該索引値で各ブロックのウィンドウテーブルを検索してテーブル値を読み出し、読み出したテーブル値を用いて2倍演算及び加算演算を実施する演算処理部(図45の1700)とを有する。そして、各ブロックについてのブロックテーブル補正値の総和がゼロとなっている。
【0257】
このようなウィンドウテーブルを複数用意することによって、スカラー値dの補正も演算結果の補正も不要となるので、PA対策なしの場合と同様の処理負荷でPA対策を行うことができるようになる。当然、追加のRAMも不要である。
【0258】
また、上で述べた演算処理部が、変数に格納されている値に対して楕円曲線上における2倍演算を実施して演算結果を当該変数に格納する2倍演算部と、変数に格納されている値と読み出されたテーブル値との、楕円曲線上における加算演算を実施し、当該変数に格納する加算演算部と、制御部とを有するようにしても良い。そのような場合、上で述べた制御部が、スカラー値dの最上位ブロックの最上位ビットから、ウィンドウの各ビットの担当ビット位置のビット値を読み出して索引値を生成し、当該索引値でテーブル格納部に格納されている最上位ブロックについてのウィンドウテーブルを検索して第1のテーブル値を読み出して、上記変数に格納するようにしてもよい。さらに、上で述べた加算演算部に、スカラー値dの第2位ブロック以下の各ブロックの最上位ビットからウィンドウの各ビットの担当ビット位置のビット値を読み出すことにより得られる索引値により処理に係るブロックについてのウィンドウテーブルを検索して得られる第2のテーブル値と、変数に格納されている値との加算演算を最下位ブロックまで繰り返し実施させるようにしてもよい。そして、ウィンドウを所定のビットシフト幅だけ各ブロック内において右シフトさせると共に、上で述べた2倍演算部に、所定のビットシフト幅に応じた回数分変数に格納されている値に対して2倍演算を実施させ、加算演算部に、スカラー値dの各前記ブロックからウィンドウの各ビットの担当ビット位置のビット値を読み出すことにより得られる索引値により処理に係るブロックについてのウィンドウテーブルを検索して得られる第3のテーブル値についての加算演算を最下位ブロックまで繰り返し実施させる処理を、スカラー値dの全てのビットを処理するまで繰り返し行わせるようにしてもよい。
【0259】
なお、第3の態様においても、通常のWindow法を採用しても、櫛形Window法を採用してもよい。
【0260】
より具体的に、櫛形Window法を採用する場合には、ブロックの番号をjとし、スカラー値はnビットとし、ブロックの個数をtとし、ブロックの番号jの前記テーブル補正値をFjとし、索引値をウィンドウ幅kビットのy(yk-1||yk-2||・・・y1||y0)とすると、対応するテーブル値は、以下のように設定される。
【0261】
【数2】
K(n, t, m, t, j)=┌n/(t*k)┐×k×j+┌n/(t*k)┐×m
【0262】
(┌z┐は、z以上の最小の整数を表す)
また、担当ビット位置が┌n/(k*t)┐−1ビットおきであり且つ所定のビットシフト幅が1ビットである。
【0263】
第4の態様に係る楕円曲線暗号演算方法は、n(nは2以上の整数)ビットのスカラー値dに対するウィンドウのウィンドウ幅k(kは2以上の整数)ビットと同じビット数の各索引値に対応付けて、当該索引値の各ビットの値と当該ビットが担当するスカラー値d中の相対ビット位置に対応する値についての2のべき乗との積の和に楕円曲線上の所定の点Gを乗じた基本テーブル値に対して非ゼロのテーブル補正値を加えたテーブル値が格納されているウィンドウテーブルを格納するデータ格納部を有する装置により実行される。そして、本楕円曲線暗号演算方法は、(A)ウィンドウをシフトさせつつ当該ウィンドウの各ビットの担当ビット位置のビット値をスカラー値dから読み出すことにより索引値を生成して当該索引値でウィンドウテーブルを検索してテーブル値を読み出し、読み出したテーブル値を用いて2倍演算及び加算演算を実施するステップと、(B)演算処理部の演算結果に対してテーブル補正値に応じた所定の補正値で補正を実施するステップとを含む。
【0264】
第5の態様に係る楕円曲線暗号演算方法は、(A)n(nは2以上の整数)ビットのスカラー値dに対するウィンドウのウィンドウ幅k(kは2以上の整数)ビットと同じビット数の各索引値に対応付けて、当該索引値の各ビットの値と当該ビットが担当するスカラー値d中の相対ビット位置に対応する値についての2のべき乗との積の和に楕円曲線上の所定の点Gを乗じた基本テーブル値に対して点Gの第2のスカラー値x倍のテーブル補正値を加えたテーブル値が格納されているウィンドウテーブルを格納するデータ格納部を有する装置により実行される。そして、本楕円曲線暗号演算方法は、(B)スカラー値dに対して第2のスカラー値xに応じた所定の補正値で補正を実施して、第3のスカラー値fを生成するステップと、(C)ウィンドウをシフトさせつつ当該ウィンドウの各ビットの担当ビット位置のビット値を第3のスカラー値fから読み出すことにより索引値を生成して当該索引値でウィンドウテーブルを検索してテーブル値を読み出し、読み出したテーブル値を用いて2倍演算及び加算演算を実施するステップとを含む。
【0265】
第6の態様に係る楕円曲線暗号演算方法は、(A)n(nは2以上の整数)ビットのスカラー値dのブロック毎に、当該ブロックに対するウィンドウのウィンドウ幅k(kは2以上の整数)ビットと同じビット数の各索引値に対応付けて、当該索引値の各ビットの値と当該ビットが担当するブロック中の相対ビット位置及びスカラー値d中の当該ブロックの相対位置に対応する値についての2のべき乗との積の和に楕円曲線上の所定の点Gを乗じた基本テーブル値に対して非ゼロのブロックテーブル補正値を加えたテーブル値が格納されているウィンドウテーブルを格納するデータ格納部を有する装置により実行される。そして、本楕円曲線暗号演算方法は、(B)ウィンドウをシフトさせつつ当該ウィンドウの各ビットの担当ビット位置のビット値をスカラー値dの各前記ブロックから読み出すことにより索引値を生成して当該索引値で各ブロックのウィンドウテーブルを検索してテーブル値を読み出すステップと、(C)読み出したテーブル値を用いて2倍演算及び加算演算を実施するステップとを含む。そして、各ブロックについてのブロックテーブル補正値の総和がゼロとなっている。
【0266】
なお、上で述べたような処理をスマートカードなどの装置に実施させるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブル・ディスク、CD−ROM、光磁気ディスク、半導体メモリ(例えばROM)、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。なお、処理途中のデータについては、RAM等の記憶装置に一時保管される。
【0267】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【0268】
(付記1)
楕円曲線上の所定の点Gのスカラー倍算を実施する楕円曲線暗号演算装置であって、
n(nは2以上の整数)ビットのスカラー値dに対するウィンドウのウィンドウ幅k(kは2以上の整数)ビットと同じビット数の各索引値に対応付けて、当該索引値の各ビットの値と当該ビットが担当する前記スカラー値d中の相対ビット位置に対応する値についての2のべき乗との積の和に前記点Gを乗じた基本テーブル値に対して非ゼロのテーブル補正値を加えたテーブル値が格納されているウィンドウテーブルを格納するデータ格納部と、
前記ウィンドウをシフトさせつつ当該ウィンドウの各ビットの担当ビット位置のビット値を前記スカラー値dから読み出すことにより索引値を生成して当該索引値で前記ウィンドウテーブルを検索してテーブル値を読み出し、読み出した前記テーブル値を用いて2倍演算及び加算演算を実施する演算処理部と、
前記演算処理部の演算結果に対して前記テーブル補正値に応じた所定の補正値で補正を実施する補正部と、
を有する楕円曲線暗号演算装置。
【0269】
(付記2)
前記演算処理部が、
変数に格納されている値に対して前記楕円曲線上における2倍演算を実施して演算結果を当該変数に格納する2倍演算部と、
前記変数に格納されている値と読み出された前記テーブル値との、前記楕円曲線上における加算演算を実施して、演算結果を当該変数に格納する加算演算部と、
制御部と、
を有し、
前記制御部が、
前記スカラー値dの最上位ビットから、前記ウィンドウの各ビットの担当ビット位置のビット値を読み出して索引値を生成し、当該索引値で前記テーブル格納部に格納されている前記ウィンドウテーブルを検索して第1のテーブル値を読み出して、前記変数に格納し、
前記ウィンドウを所定のビットシフト幅だけ右シフトさせると共に、前記2倍演算部に、前記所定のビットシフト幅に応じた回数分前記変数に格納されている値に対して2倍演算を実施させ、前記加算演算部に、前記スカラー値dから前記ウィンドウの各ビットの担当ビット位置のビット値を読み出すことにより得られる索引値で前記ウィンドウテーブルを検索して得られる第2のテーブル値について加算演算を実施させる処理を、前記スカラー値dの全てのビットを処理するまで繰り返し行わせる
付記1記載の楕円曲線暗号演算装置。
【0270】
(付記3)
前記テーブル補正値をFとし、前記索引値を前記ウィンドウ幅kビットのy(yk-1||yk-2||・・・y1||y0)とすると、対応する前記テーブル値が、
(yk-1×2k-1+yk-2×2k-2+・・・+y1×21+y0×20)G+F
であり、
前記所定の補正値が、
(2k*0+2k*1+2k*2+・・・+2k*(┌n/k┐-1))F
(┌n/k┐は、n/k以上の最小の整数を表す)
であり、
前記担当ビット位置がkビット連続しており且つ前記所定のビットシフト幅がkビットである
付記1又は2記載の楕円曲線暗号演算装置。
【0271】
(付記4)
前記テーブル補正値をFとし、前記索引値を前記ウィンドウ幅kビットのy(yk-1||yk-2||・・・y1||y0)とすると、対応する前記テーブル値が、
(yk-1×2┌n/k┐*(k-1)+yk-2×2┌n/k┐*(k-2)+・・・+y1×2┌n/k┐*1+y0×2┌n/k┐*0)G+F
(┌n/k┐は、n/k以上の最小の整数を表す)
であり、
前記所定の補正値が、
(2┌n/k┐−1)F
であり、
前記担当ビット位置が┌n/k┐−1ビットおきであり且つ前記所定のビットシフト幅が1ビットである
付記1又は2記載の楕円曲線暗号演算装置。
【0272】
(付記5)
前記所定の補正値が予め算出されており且つ前記データ格納部に格納されている付記1乃至4のいずれか1つ記載の楕円曲線暗号演算装置。
【0273】
(付記6)
楕円曲線上の所定の点Gのスカラー倍算を実施する楕円曲線暗号演算装置であって、
n(nは2以上の整数)ビットのスカラー値dに対するウィンドウのウィンドウ幅k(kは2以上の整数)ビットと同じビット数の各索引値に対応付けて、当該索引値の各ビットの値と当該ビットが担当する前記スカラー値d中の相対ビット位置に対応する値についての2のべき乗との積の和に前記点Gを乗じた基本テーブル値に対して前記点Gの第2のスカラー値x倍のテーブル補正値を加えたテーブル値が格納されているウィンドウテーブルを格納するデータ格納部と、
前記スカラー値dに対して前記第2のスカラー値xに応じた所定の補正値で補正を実施して、第3のスカラー値fを生成する補正部と、
前記ウィンドウをシフトさせつつ当該ウィンドウの各ビットの担当ビット位置のビット値を前記第3のスカラー値fから読み出すことにより索引値を生成して当該索引値で前記ウィンドウテーブルを検索してテーブル値を読み出し、読み出した前記テーブル値を用いて2倍演算及び加算演算を実施する演算処理部と、
を有する楕円曲線暗号演算装置。
【0274】
(付記7)
前記演算処理部が、
変数に格納されている値に対して前記楕円曲線上における2倍演算を実施して演算結果を当該変数に格納する2倍演算部と、
前記変数に格納されている値と読み出された前記テーブル値との、前記楕円曲線上における加算演算を実施し、演算結果を当該変数に格納する加算演算部と、
制御部と、
を有し、
前記制御部が、
前記第3のスカラー値fの最上位ビットから、前記ウィンドウの各ビットの担当ビット位置のビット値を読み出して索引値を生成し、当該索引値で前記テーブル格納部に格納されている前記ウィンドウテーブルを検索して第1のテーブル値を読み出して、前記変数に格納し、
前記ウィンドウを所定のビットシフト幅だけ右シフトさせると共に、前記2倍演算部に、前記所定のビットシフト幅に応じた回数分前記変数に格納されている値に対して2倍演算を実施させ、前記加算演算部に、前記第3のスカラー値fから前記ウィンドウの各ビットの担当ビット位置のビット値を読み出すことにより得られる索引値で前記ウィンドウテーブルを検索して得られる第2のテーブル値について加算演算を実施させる処理を、前記第3のスカラー値fの全てのビットを処理するまで繰り返し行わせる
付記6記載の楕円曲線暗号演算装置。
【0275】
(付記8)
前記索引値を前記ウィンドウ幅kビットのy(yk-1||yk-2||・・・y1||y0)とすると、対応する前記テーブル値が、
(yk-1×2k-1+yk-2×2k-2+・・・+y1×21+y0×20)G+xG
であり、
前記所定の補正値が、
(2k*0+2k*1+2k*2+・・・+2k*(┌n/k┐-1))x
(┌n/k┐は、n/k以上の最小の整数を表す)
であり、
前記担当ビット位置がkビット連続しており且つ前記所定のビットシフト幅がkビットである
付記6又は7記載の楕円曲線暗号演算装置。
【0276】
(付記9)
前記索引値を前記ウィンドウ幅kビットのy(yk-1||yk-2||・・・y1||y0)とすると、対応する前記テーブル値が、
(yk-1×2┌n/k┐*(k-1)+yk-2×2┌n/k┐*(k-2)+・・・+y1×2┌n/k┐*1+y0×2┌n/k┐*0)G+xG
(┌n/k┐は、n/k以上の最小の整数を表す)
であり、
前記所定の補正値が、
(2┌n/k┐−1)x
であり、
前記担当ビット位置が┌n/k┐−1ビットおきであり且つ前記所定のビットシフト幅が1ビットである
付記6又は7記載の楕円曲線暗号演算装置。
【0277】
(付記10)
楕円曲線上の所定の点Gのスカラー倍算を実施する楕円曲線暗号演算装置であって、
スカラー値dのブロック毎に、当該ブロックに対するウィンドウのウィンドウ幅k(kは2以上の整数)ビットと同じビット数の各索引値に対応付けて、当該索引値の各ビットの値と当該ビットが担当する前記ブロック中の相対ビット位置及び前記スカラー値d中の当該ブロックの相対位置に対応する値についての2のべき乗との積の和に前記点Gを乗じた基本テーブル値に対して非ゼロのブロックテーブル補正値を加えたテーブル値が格納されているウィンドウテーブルを格納するデータ格納部と、
前記ウィンドウをシフトさせつつ当該ウィンドウの各ビットの担当ビット位置のビット値を前記スカラー値dの各前記ブロックから読み出すことにより索引値を生成して当該索引値で各前記ブロックの前記ウィンドウテーブルを検索してテーブル値を読み出し、読み出した前記テーブル値を用いて2倍演算及び加算演算を実施する演算処理部と、
を有し、
各前記ブロックについての前記ブロックテーブル補正値の総和がゼロとなっていることを特徴とする
楕円曲線暗号演算装置。
【0278】
(付記11)
前記演算処理部が、
変数に格納されている値に対して前記楕円曲線上における2倍演算を実施して演算結果を当該変数に格納する2倍演算部と、
前記変数に格納されている値と読み出された前記テーブル値との、前記楕円曲線上における加算演算を実施し、当該変数に格納する加算演算部と、
制御部と、
を有し、
前記制御部が、
前記スカラー値dの最上位ブロックの最上位ビットから、前記ウィンドウの各ビットの担当ビット位置のビット値を読み出して索引値を生成し、当該索引値で前記テーブル格納部に格納されている前記最上位ブロックについてのウィンドウテーブルを検索して第1のテーブル値を読み出して、前記変数に格納し、
前記加算演算部に、前記スカラー値dの第2位ブロック以下の各ブロックの最上位ビットから前記ウィンドウの各ビットの担当ビット位置のビット値を読み出すことにより得られる索引値により処理に係る前記ブロックについてのウィンドウテーブルを検索して得られる第2のテーブル値と前記変数に格納されている値との加算演算を最下位ブロックまで繰り返し実施させ、
前記ウィンドウを所定のビットシフト幅だけ各前記ブロック内において右シフトさせると共に、前記2倍演算部に、前記所定のビットシフト幅に応じた回数分前記変数に格納されている値に対して2倍演算を実施させ、前記加算演算部に、前記スカラー値dの各前記ブロックから前記ウィンドウの各ビットの担当ビット位置のビット値を読み出すことにより得られる索引値により処理に係る前記ブロックについてのウィンドウテーブルを検索して得られる第3のテーブル値についての加算演算を最下位ブロックまで繰り返し実施させる処理を、前記スカラー値dの全てのビットを処理するまで繰り返し行わせる
付記10記載の楕円曲線暗号演算装置。
【0279】
(付記12)
前記ブロックの番号をjとし、前記ブロックの個数をtとし、前記スカラー値dはnビットとし、前記ブロックの番号jの前記テーブル補正値をFjとし、前記索引値を前記ウィンドウ幅kビットのy(yk-1||yk-2||・・・y1||y0)とすると、対応する前記テーブル値が、
【数3】
K(n, k, m, t, j)=┌n/(t*k)┐×k×j+┌n/(t*k)┐×m
(┌z┐は、z以上の最小の整数を表す)
であり、
前記担当ビット位置が┌n/2k┐−1ビットおきであり且つ前記所定のビットシフト幅が1ビットである
付記10又は11記載の楕円曲線暗号演算装置。
【0280】
(付記13)
n(nは2以上の整数)ビットのスカラー値dに対するウィンドウのウィンドウ幅k(kは2以上の整数)ビットと同じビット数の各索引値に対応付けて、当該索引値の各ビットの値と当該ビットが担当する前記スカラー値d中の相対ビット位置に対応する値についての2のべき乗との積の和に楕円曲線上の所定の点Gを乗じた基本テーブル値に対して非ゼロのテーブル補正値を加えたテーブル値が格納されているウィンドウテーブルを格納するデータ格納部を有する装置により実行される楕円曲線暗号演算方法であって、
前記ウィンドウをシフトさせつつ当該ウィンドウの各ビットの担当ビット位置のビット値を前記スカラー値dから読み出すことにより索引値を生成して当該索引値で前記ウィンドウテーブルを検索してテーブル値を読み出し、読み出した前記テーブル値を用いて2倍演算及び加算演算を実施するステップと、
前記演算処理部の演算結果に対して前記テーブル補正値に応じた所定の補正値で補正を実施するステップと、
を含む楕円曲線暗号演算方法。
【0281】
(付記14)
n(nは2以上の整数)ビットのスカラー値dに対するウィンドウのウィンドウ幅k(kは2以上の整数)ビットと同じビット数の各索引値に対応付けて、当該索引値の各ビットの値と当該ビットが担当する前記スカラー値d中の相対ビット位置に対応する値についての2のべき乗との積の和に楕円曲線上の所定の点Gを乗じた基本テーブル値に対して前記点Gの第2のスカラー値x倍のテーブル補正値を加えたテーブル値が格納されているウィンドウテーブルを格納するデータ格納部を有する装置により実行される楕円曲線暗号演算方法であって、
前記スカラー値dに対して前記第2のスカラー値xに応じた所定の補正値で補正を実施して、第3のスカラー値fを生成するステップと、
前記ウィンドウをシフトさせつつ当該ウィンドウの各ビットの担当ビット位置のビット値を前記第3のスカラー値fから読み出すことにより索引値を生成して当該索引値で前記ウィンドウテーブルを検索してテーブル値を読み出し、読み出した前記テーブル値を用いて2倍演算及び加算演算を実施するステップと、
を含む楕円曲線暗号演算方法。
【0282】
(付記15)
n(nは2以上の整数)ビットのスカラー値dのブロック毎に、当該ブロックに対するウィンドウのウィンドウ幅k(kは2以上の整数)ビットと同じビット数の各索引値に対応付けて、当該索引値の各ビットの値と当該ビットが担当する前記ブロック中の相対ビット位置及び前記スカラー値d中の当該ブロックの相対位置に対応する値についての2のべき乗との積の和に楕円曲線上の所定の点Gを乗じた基本テーブル値に対して非ゼロのブロックテーブル補正値を加えたテーブル値が格納されているウィンドウテーブルを格納するデータ格納部を有する装置により実行される楕円曲線暗号演算方法であって、
前記ウィンドウをシフトさせつつ当該ウィンドウの各ビットの担当ビット位置のビット値を前記スカラー値dの各前記ブロックから読み出すことにより索引値を生成して当該索引値で各前記ブロックの前記ウィンドウテーブルを検索してテーブル値を読み出すステップと、
読み出した前記テーブル値を用いて2倍演算及び加算演算を実施するステップと、
を含み、
各前記ブロックについての前記ブロックテーブル補正値の総和がゼロとなっていることを特徴とする
楕円曲線暗号演算方法。
【0283】
(付記16)
n(nは2以上の整数)ビットのスカラー値dに対するウィンドウのウィンドウ幅k(kは2以上の整数)ビットと同じビット数の各索引値に対応付けて、当該索引値の各ビットの値と当該ビットが担当する前記スカラー値d中の相対ビット位置に対応する値についての2のべき乗との積の和に楕円曲線上の所定の点Gを乗じた基本テーブル値に対して非ゼロのテーブル補正値を加えたテーブル値が格納されているウィンドウテーブルを格納するデータ格納部を有する装置に、
前記ウィンドウをシフトさせつつ当該ウィンドウの各ビットの担当ビット位置のビット値を前記スカラー値dから読み出すことにより索引値を生成して当該索引値で前記ウィンドウテーブルを検索してテーブル値を読み出し、読み出した前記テーブル値を用いて2倍演算及び加算演算を実施するステップと、
前記演算処理部の演算結果に対して前記テーブル補正値に応じた所定の補正値で補正を実施するステップと、
を実行させるための楕円曲線暗号演算プログラム。
【0284】
(付記17)
n(nは2以上の整数)ビットのスカラー値dに対するウィンドウのウィンドウ幅k(kは2以上の整数)ビットと同じビット数の各索引値に対応付けて、当該索引値の各ビットの値と当該ビットが担当する前記スカラー値d中の相対ビット位置に対応する値についての2のべき乗との積の和に楕円曲線上の所定の点Gを乗じた基本テーブル値に対して前記点Gの第2のスカラー値x倍のテーブル補正値を加えたテーブル値が格納されているウィンドウテーブルを格納するデータ格納部を有する装置に、
前記スカラー値dに対して前記第2のスカラー値xに応じた所定の補正値で補正を実施して、第3のスカラー値fを生成するステップと、
前記ウィンドウをシフトさせつつ当該ウィンドウの各ビットの担当ビット位置のビット値を前記第3のスカラー値fから読み出すことにより索引値を生成して当該索引値で前記ウィンドウテーブルを検索してテーブル値を読み出し、読み出した前記テーブル値を用いて2倍演算及び加算演算を実施するステップと、
を実行させるための楕円曲線暗号演算プログラム。
【0285】
(付記18)
n(nは2以上の整数)ビットのスカラー値dのブロック毎に、当該ブロックに対するウィンドウのウィンドウ幅k(kは2以上の整数)ビットと同じビット数の各索引値に対応付けて、当該索引値の各ビットの値と当該ビットが担当する前記ブロック中の相対ビット位置及び当該ブロックの前記スカラー値d中の相対位置に対応する値についての2のべき乗との積の和に楕円曲線上の所定の点Gを乗じた基本テーブル値に対して非ゼロのブロックテーブル補正値を加えたテーブル値が格納されているウィンドウテーブルを格納するデータ格納部を有する装置に、
前記ウィンドウをシフトさせつつ当該ウィンドウの各ビットの担当ビット位置のビット値を前記スカラー値dの各前記ブロックから読み出すことにより索引値を生成して当該索引値で各前記ブロックの前記ウィンドウテーブルを検索してテーブル値を読み出すステップと、
読み出した前記テーブル値を用いて2倍演算及び加算演算を実施するステップと、
を実行させ、
各前記ブロックについての前記ブロックテーブル補正値の総和がゼロとなっていることを特徴とする
楕円曲線暗号演算プログラム。
【符号の説明】
【0286】
1 バス 3 CPU 5 演算器
7 ROM 9 RAM 11 通信部
71 演算プログラム 73 補正点データ
75 Windowテーブル
51 加算演算部 53 2倍演算部
【特許請求の範囲】
【請求項1】
楕円曲線上の所定の点Gのスカラー倍算を実施する楕円曲線暗号演算装置であって、
n(nは2以上の整数)ビットのスカラー値dに対するウィンドウのウィンドウ幅k(kは2以上の整数)ビットと同じビット数の各索引値に対応付けて、当該索引値の各ビットの値と当該ビットが担当する前記スカラー値d中の相対ビット位置に対応する値についての2のべき乗との積の和に前記点Gを乗じた基本テーブル値に対して非ゼロのテーブル補正値を加えたテーブル値が格納されているウィンドウテーブルを格納するデータ格納部と、
前記ウィンドウをシフトさせつつ当該ウィンドウの各ビットの担当ビット位置のビット値を前記スカラー値dから読み出すことにより索引値を生成して当該索引値で前記ウィンドウテーブルを検索してテーブル値を読み出し、読み出した前記テーブル値を用いて2倍演算及び加算演算を実施する演算処理部と、
前記演算処理部の演算結果に対して前記テーブル補正値に応じた所定の補正値で補正を実施する補正部と、
を有する楕円曲線暗号演算装置。
【請求項2】
前記演算処理部が、
変数に格納されている値に対して前記楕円曲線上における2倍演算を実施して演算結果を当該変数に格納する2倍演算部と、
前記変数に格納されている値と読み出された前記テーブル値との、前記楕円曲線上における加算演算を実施して、演算結果を当該変数に格納する加算演算部と、
制御部と、
を有し、
前記制御部が、
前記スカラー値dの最上位ビットから、前記ウィンドウの各ビットの担当ビット位置のビット値を読み出して索引値を生成し、当該索引値で前記テーブル格納部に格納されている前記ウィンドウテーブルを検索して第1のテーブル値を読み出して、前記変数に格納し、
前記ウィンドウを所定のビットシフト幅だけ右シフトさせると共に、前記2倍演算部に、前記所定のビットシフト幅に応じた回数分前記変数に格納されている値に対して2倍演算を実施させ、前記加算演算部に、前記スカラー値dから前記ウィンドウの各ビットの担当ビット位置のビット値を読み出すことにより得られる索引値で前記ウィンドウテーブルを検索して得られる第2のテーブル値について加算演算を実施させる処理を、前記スカラー値dの全てのビットを処理するまで繰り返し行わせる
請求項1記載の楕円曲線暗号演算装置。
【請求項3】
前記テーブル補正値をFとし、前記索引値を前記ウィンドウ幅kビットのy(yk-1||yk-2||・・・y1||y0)とすると、対応する前記テーブル値が、
(yk-1×2k-1+yk-2×2k-2+・・・+y1×21+y0×20)G+F
であり、
前記所定の補正値が、
(2k*0+2k*1+2k*2+・・・+2k*(┌n/k┐-1))F
(┌n/k┐は、n/k以上の最小の整数を表す)
であり、
前記担当ビット位置がkビット連続しており且つ前記所定のビットシフト幅がkビットである
請求項1又は2記載の楕円曲線暗号演算装置。
【請求項4】
前記テーブル補正値をFとし、前記索引値を前記ウィンドウ幅kビットのy(yk-1||yk-2||・・・y1||y0)とすると、対応する前記テーブル値が、
(yk-1×2┌n/k┐*(k-1)+yk-2×2┌n/k┐*(k-2)+・・・+y1×2┌n/k┐*1+y0×2┌n/k┐*0)G+F
(┌n/k┐は、n/k以上の最小の整数を表す)
であり、
前記所定の補正値が、
(2┌n/k┐−1)F
であり、
前記担当ビット位置が┌n/k┐−1ビットおきであり且つ前記所定のビットシフト幅が1ビットである
請求項1又は2記載の楕円曲線暗号演算装置。
【請求項5】
楕円曲線上の所定の点Gのスカラー倍算を実施する楕円曲線暗号演算装置であって、
n(nは2以上の整数)ビットのスカラー値dに対するウィンドウのウィンドウ幅k(kは2以上の整数)ビットと同じビット数の各索引値に対応付けて、当該索引値の各ビットの値と当該ビットが担当する前記スカラー値d中の相対ビット位置に対応する値についての2のべき乗との積の和に前記点Gを乗じた基本テーブル値に対して前記点Gの第2のスカラー値x倍のテーブル補正値を加えたテーブル値が格納されているウィンドウテーブルを格納するデータ格納部と、
前記スカラー値dに対して前記第2のスカラー値xに応じた所定の補正値で補正を実施して、第3のスカラー値fを生成する補正部と、
前記ウィンドウをシフトさせつつ当該ウィンドウの各ビットの担当ビット位置のビット値を前記第3のスカラー値fから読み出すことにより索引値を生成して当該索引値で前記ウィンドウテーブルを検索してテーブル値を読み出し、読み出した前記テーブル値を用いて2倍演算及び加算演算を実施する演算処理部と、
を有する楕円曲線暗号演算装置。
【請求項6】
楕円曲線上の所定の点Gのスカラー倍算を実施する楕円曲線暗号演算装置であって、
スカラー値dのブロック毎に、当該ブロックに対するウィンドウのウィンドウ幅k(kは2以上の整数)ビットと同じビット数の各索引値に対応付けて、当該索引値の各ビットの値と当該ビットが担当する前記ブロック中の相対ビット位置及び前記スカラー値d中の当該ブロックの相対位置に対応する値についての2のべき乗との積の和に前記点Gを乗じた基本テーブル値に対して非ゼロのブロックテーブル補正値を加えたテーブル値が格納されているウィンドウテーブルを格納するデータ格納部と、
前記ウィンドウをシフトさせつつ当該ウィンドウの各ビットの担当ビット位置のビット値を前記スカラー値dの各前記ブロックから読み出すことにより索引値を生成して当該索引値で各前記ブロックの前記ウィンドウテーブルを検索してテーブル値を読み出し、読み出した前記テーブル値を用いて2倍演算及び加算演算を実施する演算処理部と、
を有し、
各前記ブロックについての前記ブロックテーブル補正値の総和がゼロとなっていることを特徴とする
楕円曲線暗号演算装置。
【請求項7】
n(nは2以上の整数)ビットのスカラー値dに対するウィンドウのウィンドウ幅k(kは2以上の整数)ビットと同じビット数の各索引値に対応付けて、当該索引値の各ビットの値と当該ビットが担当する前記スカラー値d中の相対ビット位置に対応する値についての2のべき乗との積の和に楕円曲線上の所定の点Gを乗じた基本テーブル値に対して非ゼロのテーブル補正値を加えたテーブル値が格納されているウィンドウテーブルを格納するデータ格納部を有する装置により実行される楕円曲線暗号演算方法であって、
前記ウィンドウをシフトさせつつ当該ウィンドウの各ビットの担当ビット位置のビット値を前記スカラー値dから読み出すことにより索引値を生成して当該索引値で前記ウィンドウテーブルを検索してテーブル値を読み出し、読み出した前記テーブル値を用いて2倍演算及び加算演算を実施するステップと、
前記演算処理部の演算結果に対して前記テーブル補正値に応じた所定の補正値で補正を実施するステップと、
を含む楕円曲線暗号演算方法。
【請求項8】
n(nは2以上の整数)ビットのスカラー値dに対するウィンドウのウィンドウ幅k(kは2以上の整数)ビットと同じビット数の各索引値に対応付けて、当該索引値の各ビットの値と当該ビットが担当する前記スカラー値d中の相対ビット位置に対応する値についての2のべき乗との積の和に楕円曲線上の所定の点Gを乗じた基本テーブル値に対して非ゼロのテーブル補正値を加えたテーブル値が格納されているウィンドウテーブルを格納するデータ格納部を有する装置に、
前記ウィンドウをシフトさせつつ当該ウィンドウの各ビットの担当ビット位置のビット値を前記スカラー値dから読み出すことにより索引値を生成して当該索引値で前記ウィンドウテーブルを検索してテーブル値を読み出し、読み出した前記テーブル値を用いて2倍演算及び加算演算を実施するステップと、
前記演算処理部の演算結果に対して前記テーブル補正値に応じた所定の補正値で補正を実施するステップと、
を実行させるための楕円曲線暗号演算プログラム。
【請求項1】
楕円曲線上の所定の点Gのスカラー倍算を実施する楕円曲線暗号演算装置であって、
n(nは2以上の整数)ビットのスカラー値dに対するウィンドウのウィンドウ幅k(kは2以上の整数)ビットと同じビット数の各索引値に対応付けて、当該索引値の各ビットの値と当該ビットが担当する前記スカラー値d中の相対ビット位置に対応する値についての2のべき乗との積の和に前記点Gを乗じた基本テーブル値に対して非ゼロのテーブル補正値を加えたテーブル値が格納されているウィンドウテーブルを格納するデータ格納部と、
前記ウィンドウをシフトさせつつ当該ウィンドウの各ビットの担当ビット位置のビット値を前記スカラー値dから読み出すことにより索引値を生成して当該索引値で前記ウィンドウテーブルを検索してテーブル値を読み出し、読み出した前記テーブル値を用いて2倍演算及び加算演算を実施する演算処理部と、
前記演算処理部の演算結果に対して前記テーブル補正値に応じた所定の補正値で補正を実施する補正部と、
を有する楕円曲線暗号演算装置。
【請求項2】
前記演算処理部が、
変数に格納されている値に対して前記楕円曲線上における2倍演算を実施して演算結果を当該変数に格納する2倍演算部と、
前記変数に格納されている値と読み出された前記テーブル値との、前記楕円曲線上における加算演算を実施して、演算結果を当該変数に格納する加算演算部と、
制御部と、
を有し、
前記制御部が、
前記スカラー値dの最上位ビットから、前記ウィンドウの各ビットの担当ビット位置のビット値を読み出して索引値を生成し、当該索引値で前記テーブル格納部に格納されている前記ウィンドウテーブルを検索して第1のテーブル値を読み出して、前記変数に格納し、
前記ウィンドウを所定のビットシフト幅だけ右シフトさせると共に、前記2倍演算部に、前記所定のビットシフト幅に応じた回数分前記変数に格納されている値に対して2倍演算を実施させ、前記加算演算部に、前記スカラー値dから前記ウィンドウの各ビットの担当ビット位置のビット値を読み出すことにより得られる索引値で前記ウィンドウテーブルを検索して得られる第2のテーブル値について加算演算を実施させる処理を、前記スカラー値dの全てのビットを処理するまで繰り返し行わせる
請求項1記載の楕円曲線暗号演算装置。
【請求項3】
前記テーブル補正値をFとし、前記索引値を前記ウィンドウ幅kビットのy(yk-1||yk-2||・・・y1||y0)とすると、対応する前記テーブル値が、
(yk-1×2k-1+yk-2×2k-2+・・・+y1×21+y0×20)G+F
であり、
前記所定の補正値が、
(2k*0+2k*1+2k*2+・・・+2k*(┌n/k┐-1))F
(┌n/k┐は、n/k以上の最小の整数を表す)
であり、
前記担当ビット位置がkビット連続しており且つ前記所定のビットシフト幅がkビットである
請求項1又は2記載の楕円曲線暗号演算装置。
【請求項4】
前記テーブル補正値をFとし、前記索引値を前記ウィンドウ幅kビットのy(yk-1||yk-2||・・・y1||y0)とすると、対応する前記テーブル値が、
(yk-1×2┌n/k┐*(k-1)+yk-2×2┌n/k┐*(k-2)+・・・+y1×2┌n/k┐*1+y0×2┌n/k┐*0)G+F
(┌n/k┐は、n/k以上の最小の整数を表す)
であり、
前記所定の補正値が、
(2┌n/k┐−1)F
であり、
前記担当ビット位置が┌n/k┐−1ビットおきであり且つ前記所定のビットシフト幅が1ビットである
請求項1又は2記載の楕円曲線暗号演算装置。
【請求項5】
楕円曲線上の所定の点Gのスカラー倍算を実施する楕円曲線暗号演算装置であって、
n(nは2以上の整数)ビットのスカラー値dに対するウィンドウのウィンドウ幅k(kは2以上の整数)ビットと同じビット数の各索引値に対応付けて、当該索引値の各ビットの値と当該ビットが担当する前記スカラー値d中の相対ビット位置に対応する値についての2のべき乗との積の和に前記点Gを乗じた基本テーブル値に対して前記点Gの第2のスカラー値x倍のテーブル補正値を加えたテーブル値が格納されているウィンドウテーブルを格納するデータ格納部と、
前記スカラー値dに対して前記第2のスカラー値xに応じた所定の補正値で補正を実施して、第3のスカラー値fを生成する補正部と、
前記ウィンドウをシフトさせつつ当該ウィンドウの各ビットの担当ビット位置のビット値を前記第3のスカラー値fから読み出すことにより索引値を生成して当該索引値で前記ウィンドウテーブルを検索してテーブル値を読み出し、読み出した前記テーブル値を用いて2倍演算及び加算演算を実施する演算処理部と、
を有する楕円曲線暗号演算装置。
【請求項6】
楕円曲線上の所定の点Gのスカラー倍算を実施する楕円曲線暗号演算装置であって、
スカラー値dのブロック毎に、当該ブロックに対するウィンドウのウィンドウ幅k(kは2以上の整数)ビットと同じビット数の各索引値に対応付けて、当該索引値の各ビットの値と当該ビットが担当する前記ブロック中の相対ビット位置及び前記スカラー値d中の当該ブロックの相対位置に対応する値についての2のべき乗との積の和に前記点Gを乗じた基本テーブル値に対して非ゼロのブロックテーブル補正値を加えたテーブル値が格納されているウィンドウテーブルを格納するデータ格納部と、
前記ウィンドウをシフトさせつつ当該ウィンドウの各ビットの担当ビット位置のビット値を前記スカラー値dの各前記ブロックから読み出すことにより索引値を生成して当該索引値で各前記ブロックの前記ウィンドウテーブルを検索してテーブル値を読み出し、読み出した前記テーブル値を用いて2倍演算及び加算演算を実施する演算処理部と、
を有し、
各前記ブロックについての前記ブロックテーブル補正値の総和がゼロとなっていることを特徴とする
楕円曲線暗号演算装置。
【請求項7】
n(nは2以上の整数)ビットのスカラー値dに対するウィンドウのウィンドウ幅k(kは2以上の整数)ビットと同じビット数の各索引値に対応付けて、当該索引値の各ビットの値と当該ビットが担当する前記スカラー値d中の相対ビット位置に対応する値についての2のべき乗との積の和に楕円曲線上の所定の点Gを乗じた基本テーブル値に対して非ゼロのテーブル補正値を加えたテーブル値が格納されているウィンドウテーブルを格納するデータ格納部を有する装置により実行される楕円曲線暗号演算方法であって、
前記ウィンドウをシフトさせつつ当該ウィンドウの各ビットの担当ビット位置のビット値を前記スカラー値dから読み出すことにより索引値を生成して当該索引値で前記ウィンドウテーブルを検索してテーブル値を読み出し、読み出した前記テーブル値を用いて2倍演算及び加算演算を実施するステップと、
前記演算処理部の演算結果に対して前記テーブル補正値に応じた所定の補正値で補正を実施するステップと、
を含む楕円曲線暗号演算方法。
【請求項8】
n(nは2以上の整数)ビットのスカラー値dに対するウィンドウのウィンドウ幅k(kは2以上の整数)ビットと同じビット数の各索引値に対応付けて、当該索引値の各ビットの値と当該ビットが担当する前記スカラー値d中の相対ビット位置に対応する値についての2のべき乗との積の和に楕円曲線上の所定の点Gを乗じた基本テーブル値に対して非ゼロのテーブル補正値を加えたテーブル値が格納されているウィンドウテーブルを格納するデータ格納部を有する装置に、
前記ウィンドウをシフトさせつつ当該ウィンドウの各ビットの担当ビット位置のビット値を前記スカラー値dから読み出すことにより索引値を生成して当該索引値で前記ウィンドウテーブルを検索してテーブル値を読み出し、読み出した前記テーブル値を用いて2倍演算及び加算演算を実施するステップと、
前記演算処理部の演算結果に対して前記テーブル補正値に応じた所定の補正値で補正を実施するステップと、
を実行させるための楕円曲線暗号演算プログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11A】
【図11B】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18A】
【図18B】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24A】
【図24B】
【図25】
【図26】
【図27】
【図28】
【図29】
【図30A】
【図30B】
【図31】
【図32】
【図33】
【図34A】
【図34B】
【図35】
【図36】
【図37】
【図38A】
【図38B】
【図39】
【図40】
【図41】
【図42】
【図43】
【図44】
【図45】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11A】
【図11B】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18A】
【図18B】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24A】
【図24B】
【図25】
【図26】
【図27】
【図28】
【図29】
【図30A】
【図30B】
【図31】
【図32】
【図33】
【図34A】
【図34B】
【図35】
【図36】
【図37】
【図38A】
【図38B】
【図39】
【図40】
【図41】
【図42】
【図43】
【図44】
【図45】
【公開番号】特開2011−75720(P2011−75720A)
【公開日】平成23年4月14日(2011.4.14)
【国際特許分類】
【出願番号】特願2009−225534(P2009−225534)
【出願日】平成21年9月29日(2009.9.29)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
【公開日】平成23年4月14日(2011.4.14)
【国際特許分類】
【出願日】平成21年9月29日(2009.9.29)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
[ Back to top ]