明 細 書
電力解析攻撃に対する耐タンパ性を持った暗号化処理装置
技術分野
[0001] 本発明は、暗号化処理装置に関し、特に、 RSA暗号および楕円曲線暗号処理を 行うプロセッサにおける電力解析攻撃を防止する耐タンパ暗号処理装置に関する。 背景技術
[0002] 電子決済、住民基本台帳ネットワークなどのようにネットワークの利用を前提とした サービスが普及しつつある。これらのサービスにおいては、ユーザが正規のユーザで あることを証明するために、ユーザの秘密情報を格納した ICチップを含むスマート力 ード (ICカード)が利用されることがある。スマートカードは、暗号、ディジタル署名、認 証などの機能を有し、ユーザの秘密情報を鍵として用いる。スマートカードでは、秘 密情報は ICチップやメモリに格納されるため、第三者による不正なアクセスに対する 安全性または耐タンパ性が磁気カードに比べて非常に高い。
[0003] スマートカードのような暗号デバイスが使用する暗号方式には、公開鍵暗号方式と 共通鍵暗号方式が含まれる。公開鍵暗号方式は、暗号化と複号化とで異なる鍵 (キ 一)を用いる方式である。典型的には、暗号化を行うための鍵 (公開鍵)はあらかじめ 公開されていて、送信者はこの公開鍵を用いて平文を暗号化して受信者に送信する 。暗号文を復号化するための鍵 (秘密鍵)は受信者のみが知る秘密情報として保持さ れており、受信者がこの秘密鍵を用いて暗号文を復号化することにより平文を得るこ とができる。公開鍵暗号方式には RSA暗号方式及び楕円曲線暗号方式が含まれる
RSA暗号方式の処理を行う場合に必要とされる主たる演算機能にべき乗剰余計算 機能がある。ここでべき乗計算とは a d (modn) = a X a X… X a (d回) (mod n)とレヽぅ 形の演算である。ここで'はべき乗を表し、 a、 d、 nはある整数を表す。また" mod n" は nで割った余りを表す。 RSA暗号方式に基づく暗号機能には、暗号化'復号化'署 名生成'署名検証が含まれる。復号化および署名生成では、 dはユーザの秘密情報 に関連した値を用いる。
[0004] 楕円曲線暗号方式の処理を行う場合に必要とされる主たる演算機能にスカラー倍 算がある。ここでスカラー倍算とは、 d X P = P + P + " ' + P (d回)という形の演算であ る。また dはある整数、 Pはある楕円曲線上の点とする。楕円曲線暗号方式に基づく 暗号機能には、暗号化 ·複号化 ·署名生成 ·署名検証 ·鍵共有が含まれる。復号化、 署名生成および鍵共有では、 dはユーザの秘密情報に関連した値を用いる。 RSA喑 号におけるべき乗剰余演算と、楕円曲線暗号におけるスカラー倍算演算は、べき乗 演算と呼ばれる演算の例である。
[0005] 喑号分野における技術の一つに、解読技術 (タンパ技術)と呼ばれるものがある。
解読技術とは暗号文等入手可能な情報から秘密鍵等の秘密情報を推定する技術の ことであり、様々な手法が知られている。その中で最近注目されている技術に、サイド チャネル攻撃と呼ばれる手法がある。
[0006] サイドチヤネノレ攻撃は、 1996年に P. Kocher, "Timing attacks onimplementation of Diffie-Hellman, RSA, DSA and other systems", CRYPTO ' 96, Lecture Notes inComputer Science Vol. 1109, pp. 104_11<3, Springer-Verlag, 1996 (文献 [Koc96]) によって考案された解析手法で、スマートカード等に搭載された暗号プロセッサに様 々な入力データを与えた時のサイドチャネル情報(消費電力データ'消費時間データ •電磁波データ等)を収集 ·解析することにより、暗号プロセッサ内部の鍵情報を推定 する手法である。サイドチャネル攻撃を用いると、公開鍵暗号、共通鍵暗号共に暗号 プロセッサから秘密鍵を推定できる可能性があることが指摘されている。
[0007] このサイドチャネル攻撃の中で、消費電力データを用いる攻撃である電力解析攻 撃は強力な攻撃法である。この電力解析攻撃の中に、単純電力解析(SPA ; Single Power Analysis)と、 P. Kocher, J. Jaffe, B. Jun, Differential Power Analysys , し rypto ' 99, Lecture Notes in Computer Science Vol. 1666, pp.
388-397,Springer-Verlag, 1999 (文献 [KJJ99])によって提案された差分電力解析(D PA ; Differential PowerAnalysis)が含まれる。 SPAは喑号プロセッサにおける電力消 費データの特徴から秘密鍵の推定を行う方式であり、 DPAは多数の電力消費デー タの差分を解析することで秘密鍵の推定を行なう方式である。また楕円曲線暗号方 式を王たる攻撃対象とした L. Goubin, A Refined Power-analysis Attacks on
EllipticCurve Cryptosystems", PKC 2003, LectureNotes in Computer Science Vol. 2567, pp. 199-210, Springer-Verlag, 2003 (文献 [Gou03])によって提案された改良電 力解析(RPA ; Refined Power Analysis)や、 Τ· Akishita, T. Takagi, "Zero-value Point Attacks on Elliptic Curve Cryptosystems", ISC 2003, Lecture Notes in Computer Science Vol. 2851, pp.218-233, Springer-Verlag, 2003 (文献 [AT03])によ つて提案されたゼロ値電力解析 (ZVA ; Zero Value Power Analysis)も電力解析攻撃に 含まれる。
[0008] このような電力解析攻撃の脅威に対し、各種国際標準において防止技術の必要性 が指摘されている。例えば、セキュリティの国際標準 ISO15408によるスマートカード 用プロテクション.プロファイル(PP)では、電力解析攻撃への対策は必須とされてい る。また、暗号モジュールに関する米国標準 FIPS 140—2では、現在は電力解析攻 撃対策の必要性に対するコメントのみが記載されている力 S、将来的には必須になると 考えられている。
[0009] RSA暗号方式や楕円曲線暗号方式の暗号において、処理の中心となるのはべき 乗演算部分である。また、電力解析攻撃の攻撃対象となるのもべき乗演算部分であ る。以下、楕円曲線暗号方式におけるスカラー倍算 d X Pの実現方法について述べ る。
[0010] バイナリ法(Binary method)はスカラー倍算の演算方法である。バイナリ法には、最 下位ビット(Least Significant Bit ; MSB)から計算する方法(バイナリ法(LSB) )、最 上位ビット(MostSignificant Bit; MSB)から計算する方法(バイナリ法(MSB) )とが知 られており、特にバイナリ法 (MSB)の変形としてモンゴメリ鎖を用いた方法 (モンゴメ リ法)がある。
[0011] ここで、バイナリ法(LSB)のアルゴリズム例を(1)アルゴリズム 1に、又、バイナリ法( MSB)のアルゴリズム例を(2)アルゴリズム 2に、さらに、モンゴメリ法によるアルゴリズ ム例を(3)アルゴリズム 3に示す。なお、以下、特に断りの無い限り、小文字 (d等)は スカラー値を表わし、大文字 (P等)は楕円曲線上の点を表わすものとする。又、符号 " はべき乗算を表わすものとし、 "("ど') "とによって囲まれた数列は 2進数で表現
2
された数字を表わす。又、 "S1 : "等のように、 Sを付した数字はアルゴリズムを表わす
プログラム例におけるステップ数を示すものとする。更に、以下では、楕円曲線上の 四則演算は"「"と"」 "で囲うものとする。
(1)アルゴリズム 1レくイナリ法(LSB) ]
SI: T[0]― 0, T[l]― Ρ
S2: for i = 0 upto n-l{
S3: if ( d[i] == 1 ) {
S4: T[0]―「T[0]+ T[l]」 ―※
S5: }
S6: T[l]―「2*T[1]」
S7: }
S8: return T[0]
ここで、 T[0], T[l], T[2]は一時変数、 dは nビットのスカラー値で、 d[i]は dの下位 i番 目のビットのィ直である。
[0012] 例えば、 5ビットの整数 d=21=2"4+2 2+2 0=(10101) についてスカラー倍算「(1 ?」
2
を計算する場合を考える。ステップ S1においては変数 T[0]に点 0力 また、変数 T[l]に点 Ρが設定される。次のステップ S2— S7において i = 0, 1, 2, 3, 4に対応す る各処理が行なわれる。
[0013] i = 0のときには d[i] = d[0] = 1なので、ステップ S4では変数 T[0]に「Τ[0] + T[l]」 が設定され、処理後の変数 Τ[0]の値は Ρとなる。ステップ S6では変数 T[l]に「 2*Τ[1]」 が設定され、処理後の変数 T[l]の値は「2 Χ Ρ」 となる。
i = 1のときには d[i] = d[l] = 0なので、ステップ S3— S5はスキップされる。ステップ S6 では変数 T[l]に「2*Τ[1]」が設定され、処理後の変数 T[l]の値は「4 Χ Ρ」 となる。 i = 2のときには d[i] = d[2] = 1なので、ステップ S4では変数 T[0]に「Τ[0] + T[l]」 が設定され、処理後の変数 Τ[0]の値は「5 Χ Ρ」となる。ステップ S6では変数 T[l]に「 2*Τ[1]」 が設定され、処理後の変数 T[l]の値は「8 Χ Ρ」 となる。
i = 3のときには d[i] = d[3] = 0なので、ステップ S3— S5はスキップされる。ステップ S6 では変数 T[l]に「2*Τ[1]」が設定され、処理後の変数 T[l]の値は「16 Χ Ρ」 となる
i = 4のときには d[i] = d[0] = 1なので、ステップ S4では変数 T[0]に「Τ[0] + T[1]J が設定され、処理後の変数 T[0]の値は「21 Χ Ρ」 となる。ステップ S6では変数 T[l] に「2*Τ[1]」 が設定され、処理後の変数 T[l]の値は「32 Χ Ρ」 となる。
以上でステップ S2— S7の処理が終了し、最後のステップ S8において変数 Τ[0]の値
「21 Χ Ρ」 が出力される。
(2)アルゴリズム 2レイナリ法(MSB) ]
SI: T[0]― Ρ
S2: for i = n-2 downto 0{
S3: T[0]―「2*T[0]」
S4: if ( d[i] == 1 ) {
S5: T[0]―「T[0]+ P」 ―※
S6: }
S7: }
S8: return T[0]
ここで T[0]は一時変数、 dは nビットのスカラー値で、 d[i]は dの下位 i番目のビットの 値である。
[0014] 例えば、 5ビットの整数 d=21=2"4+2 2+2 0=(10101) についてスカラー倍算「(1 ?」
2
を計算する場合を考える。ステップ S1においては変数 T[0]に点 Ρが設定され、その 次のステップ S2— S7において i = 3, 2, 1, 0に対応する処理が行なわれる。
i = 3のとき、ステップ S3では変数 T[0]に「2*Τ[0]」 が設定され、処理後の変数 Τ[0] の値は「2 Χ Ρ」 となる。また i = 3のときには d[i] = d[3] = 0なので、ステップ S4— S6 はスキップされる。
i = 2のとき、ステップ S3では変数 T[0]に「2*Τ[0]」 が設定され、処理後の変数 Τ[0] の値は「4 Χ Ρ」 となる。また i = 2のときには d[i] = d[2] = 1なので、ステップ S5では 変数 T[0]に「Τ[0] + Ρ」 が設定され、処理後の変数 Τ[0]の値は「5 Χ Ρ」 となる。
[0015] i = 1のとき、ステップ S3では変数 T[0]に「2*Τ[0]」 が設定され、処理後の変数
Τ[0]の値は「10 Χ Ρ」 となる。また i = 1のときには d[i] = d[l] = 0なので、ステップ S4 一 S6はスキップされる。
i = 0とき、ステップ S3では変数 T[0]に「2*Τ[0]」 が設定され、処理後の変数 Τ[0] の値は「20 Χ Ρ」 となる。また i = 0のときには d[i] = d[0] = 1なので、ステップ S5では 変数 T[0]に「Τ[0] + PJ が設定され、処理後の変数 Τ[0]の値は「21 Χ Ρ」 となる。 以上でステップ S2— S7の処理が終了し、最後のステップ S8で変数 Τ[0]の値「21 Χ Ρ」 が出力される。
SI: Τ[0]― Ρ, T[l]―「2*Ρ」
S2: for i = n-2 downto 0{
S3: T[2]―「2*T[d[i]]」
S4: T[l]―「T[0] + T[l]」
S5: T[0]― T[2-d[i]]
S6: T[l]― T[l+d[i]]
S7: }
S8: return T[0]
ここで T[0], T[l], T[2]は一時変数、 dは nビットのスカラー値で、 d[i]は dの下位 i番 目のビットのィ直である。
例えば、 5ビットの整数 d=21=2"4+2 2+2 0=(10101) についてスカラー倍算「(1 ?」
2
を計算する場合を考える。ステップ S1においては変数 T[0]に点 Ρ 、また、変数 T[l]に点「2 Χ Ρ」 が設定され、その次のステップ S2— S7において i = 3, 2, 1, 0に対 応する処理が行なわれる。
i = 3のとき d[i] = d[3] = 0である。ステップ S3では変数 T[2]に「2*Τ[0]」 が設定さ れ、処理後の変数 Τ[2]の値は「2 Χ Ρ」 となる。ステップ S4では変数 T[l]に「Τ[0] + T[l]」 が設定され、処理後の変数 T[l]の値は「3 Χ Ρ」 となる。ステップ S5では変数 Τ[0]に Τ[2]が設定され、処理後の変数 Τ[0]の値は「2 Χ Ρ」 となる。ステップ S6では 変数 T[l]に T[l]が設定され、処理後の変数 T[l]は「3 Χ Ρ」 となる。
i = 2のとき d[i] = d[2] = 1である。ステップ S3では変数 T[2]に「2*Τ[1]」 が設定さ れ、処理後の変数 Τ[2]の値は「4 Χ Ρ」 となる。ステップ S4では変数 T[l]に「Τ[0] + T[l]」 が設定され、処理後の変数 T[l]の値は「6 Χ Ρ」 となる。ステップ S5では変数
T[0]に T[l]が設定され、処理後の変数 Τ[0]の値は「6 Χ Ρ」 となる。ステップ S6では 変数 T[l]に Τ[2]が設定され、処理後の変数 T[l]は「6 Χ Ρ」 となる。
i = 1のとき d[i] = d[l] = 0である。ステップ S3では変数 T[2]に「2*Τ[0]」 が設定さ れ、処理後の変数 Τ[2]の値は「10 Χ Ρ」 となる。ステップ S4では変数 T[l]に「Τ[0] + T[l]」 が設定され、処理後の変数 T[l]の値は「11 Χ Ρ」 となる。ステップ S5では変 数 Τ[0]に Τ[2]が設定され、処理後の変数 Τ[0]の値は「10 Χ Ρ」 となる。ステップ S6 では変数 T[l]に T[l]が設定され、処理後の変数 T[l]は「11 Χ Ρ」 となる。
i = 0のとき d[i] = d[0] = 0である。ステップ S3では変数 T[2]に「2*Τ[1]」 が設定さ れ、処理後の変数 Τ[2]の値は「22 Χ Ρ」 となる。ステップ S4では変数 T[l]に「Τ[0] + T[l]」 が設定され、処理後の変数 T[l]の値は「21 Χ Ρ」 となる。ステップ S5では変 数 Τ[0]に T[l]が設定され、処理後の変数 Τ[0]の値は「21 Χ Ρ」 となる。ステップ S6 では変数 T[l]に Τ[2]が設定され、処理後の変数 T[l]は Γ22 Χ Ρ] となる。
以上でステップ S2— S7の処理が終了し、最後のステップ S8で変数 Τ[0]の値「21 Χ Ρ」 が出力される。
またスカラー倍算「(1 ?」の実現手法としては、前述したバイナリ法(アルゴリズム 1
)と呼ばれる方法もある。例えば、幅 4ビットのウィンドウ法は、初期処理として Ρの 0— 15倍を計算し、その結果をテーブルとして保持し、次にスカラー値を 4ビット単位(ウイ ンド)に分割することにより、スカラー倍算を処理する。以下に、アルゴリズム 4としてゥ インドウ法(幅 4ビット)のァノレゴリズム ί列を示す。
SOI: W[0]― 0, W[l]― P
S02: for i = 2 upto 15{
S03: W[i] =「WD-1] + P」
S04: }
S05: T[0]— W[d[n-l,n— 4]]
S06: for i = n_5 downto3 step -4 {
S07: T[0]―「16*T[0]」
S08: T[0]―「Τ[0] + W[d[i,i-3]]J
S09: }
S10: return T[0]
ここで、 dは nビットのスカラー値で、 nは 4の倍数と仮定する。また d[U_3]は dの下位 i ビット目から (i一 3)ビットまでの 4ビット値とする。 W[i]はウィンドウ法で使用するテー ブノレである。
[0018] 例えば、 5ビットの整数 d=21=2~4+2 +2^)=(10101) =(0001 0101) に対するスカラー
2 2
倍算を考える。このとき dのビット長 5は 4の倍数ではないので、便宜上、その上位 3ビ ットに 0を揷入して 8ビットとみなす。つまり n= 8である。まず、初期値としてステップ S01において W[0] = 0と W[l] = Pが設定される。次に i = 2, 3,…, 15に対し、ステツ プ S02 S04が実行される。各 iに対し、ステップ S03で W[i]=「W[i-l] + P」 が設定され る。このとき W[i]に設定されている値は「i X P」 となる。ステップ S02 S04の処理の 終了後、ステップ S05で変数 T[0]に W[d[n-l,n- 4]コ = W[d[7,4]] = W[0001] =「1 X P」 が設定される。
次に i = 3に対してステップ S06— S09が処理される。ステップ S07では T[0] 「
16*Τ[0]」 が処理され、変数 Τ[0]には「16 Χ Ρ」 が登録される。ステップ S08では Τ[0] ―「T[0] + W[d[i,i- 3]コ」 =「T[0] + W[0101]」 =「「16 X P」+「5 X P」」 =「21 X P」 が 処理され、変数 T[0]に「21 Χ Ρ」 が登録される。
[0019] 以上でステップ S06— S09の処理が終了する。最後にステップ S10において変数 Τ[0 ]の値「21 Χ Ρ」 が出力される。このようにウィンドウ法では、あら力じめ作成したテー ブルを用レ、てスカラー倍算「d X Ρ」を計算する。
[0020] 上述したアルゴリズム 1 ·アルゴリズム 2を使用してスカラー倍算を計算した場合、レヽ ずれも※印を付したステップの処理は、 dのビット値 d[i]に応じて実行されたりされな 力、つたりする。単純消費電力解析(SPA)はこの性質を利用して秘密鍵 dを解析する 。多くの実験から、楕円曲線上の点の加算 (楕円加算)と 2倍算 (楕円 2倍算)の消費 電力波形は容易に区別可能であることが知られている。従って、プロセッサにおける アルゴリズム 1およびアルゴリズム 2の演算において発生する電力波形を測定すること によって、その波形力 楕円加算と楕円 2倍算の演算の順序と回数がわ力、るため、結
局は秘密鍵 dを求めることが可能となる。なおアルゴリズム 3とアルゴリズム 4はビット値 d[i]に依存した条件分岐を持たないため、 SPAに対する耐性を有している。
アルゴリズム 1 ·アルゴリズム 2に対する SPAへの対策として、アド'アンド 'ダブル'ォ ールウェイズ(add-and-double-always)と呼ばれる、加算と 2倍算とをアルゴリズムの 実 tr中 ¾に TTなつ力法力 J. Coron, Resistance against Differencial Power Analysis , Cryptographic Hardware and Embedded Systems 1999 (CHES 1999), Lecture Notes in Computer Science Vol. 1717, pp. 292-302, Springer-Verlag, 1999(文献
[Coron99])で提案されている。この方法では、常に楕円加算と楕円 2倍算とが交互 に計算されるため、 SPAに対して安全性を持つとされている。前述したアルゴリズム 1 およびアルゴリズム 2に対し、アド 'アンド'ダブル.オールウェイズを施したァルゴリズ ム例を(5)アルゴリズム 1,および(6)アルゴリズム 2,として示す。
(5)アルゴリズム 1,レイナリ法(LSB,アド'アンド'ダブル'オールウェイズ)] SI : T[0] 0, Τ[2] Ρ
S2: for i = 0 upto n_l{
S3: T[l]―「Τ[0] + Τ[2]」
S4: Τ[2]―「2*Τ[2]」
S5: Τ[0]― T[d[i]]
S6: }
S7: return T[0]
ここで T[0], T[l], T[2]はいずれも一時変数、 dは nビットのスカラー値で、 d[i]は dの 下位 iビット目のィ直である。
(6)アルゴリズム 2,レイナリ法(MSB,アド 'アンド 'ダブル.オールウェイズ)] SI : T[0]― 0, Τ[2]― Ρ
b : for l = n-1 downto 0{
S3: T[0]―「2*T[0]」
S4: T[l]―「T[0] + T[2]J
S5: T[0]― T[d[i]]
S6: }
S7: return T[0]
ここで T[0], T[l], T[2]はいずれも一時変数、 dは nビットのスカラー値で、 d[i]は dの 下位 iビット目のィ直である。
[0022] 上述したアルゴリズム 1,、アルゴリズム 2,、ァノレゴリズム 3、アルゴリズム 4などを用い ることにより SPAを防止することができる力 文献 [Coron99]には、これらのアルゴリ ズムに対する DPAについても述べられており、これらアルゴリズムを用いたとしても、 DPAによって秘密鍵を解析できることが示されてレ、る。また RPAや ZVAによる解析 法も提案されている。
[0023] SPA' DPA'RPA' ZVAに対しては、バイナリ法やモンゴメリ法は安全でなレ、。これ ら電力解析法に対する対策として C. Clavier, M. Joye, "Universal Exponentiation Algorithm -- A nrst Step towards Provaole SPA— resistance --, cryptographic Hardwareand Embedded Systems 2001 (CHES 2001), Lecture Notes in Computer Science Vol.2162, pp.300-308, Springer-Verlag, 2001 (文献 [Clavier- JoyeOl])にて 提案されている指数分割法(ExponentSplitting method ; ES)がある。この ESはスカラ 一値をランダムに変化させる手法であって、乱数 rによって、スカラー dを d=r+ (d-r )に分割し、 2つのスカラー倍算「で ?」と「(d— r) X P」とを別々に計算し、
「「r X P」 +「(d— r) X P」」 =「d X P」
が成り立つという性質を利用して、 2つのスカラー倍算の結果を足しあわせることで「d X P」を計算するものである。
[0024] ここで、 2つのスカラー倍算 ?」および「(d— r) X P」には、他の SPA/DPAに 耐性を有するアルゴリズムを用いる。
(7)アルゴリズム 5 [指数分割法]
bl : r <— randomO
S2: T[l]― scalar( r, P)
S3: T[2]― scalar( d_r,P )
S4: T[0]― 「T[1] + T[2]J
S5: return T[0]
ここで randomOは乱数を生成する関数である。又、 scalar( d, P )はスカラー倍算「(1
X P」を計算する関数であって、具体的には、前述したアルゴリズム 1,、アルゴリズム 2 ,、アルゴリズム 3、アルゴリズム 4等を用いて計算される。また、変数 r, T[0], T[l], Τ[2 ]はいずれも一時変数である。
[0025] ESは SPA' DPA'RPA'ZVAの全てに対して安全といえる力 計算効率上、ォー バーヘッドが大きくなる欠点がある。 特許文献 1には、楕円加算と楕円 2倍算を 1つの演算として定義し、その演算の中 で同じ種類の演算を並列に実行することで、サイドチャネル攻撃に対する耐性を持ち 、かつ、スカラー倍算を高速で計算できる演算手法が記載されている。
特許文献 1:特開 2004-53814号公報
発明の開示
[0026] 本発明の課題は、 SPA.DPA'RPA'ZVAに対して秘密情報の推定を困難にし、 暗号処理の安全性を高めることが可能な暗号ィヒ処理装置を提供することである。 本発明の第 1の暗号化処理装置は、個人鍵を用いて暗号化処理を行う暗号化処 理装置にぉレ、て、乱数に基づレ、たランダムな整数値を生成するランダム値生成手段 と、暗号化するためのアルゴリズムを実行する際において、該ランダムな整数値を本 来演算すべき値に含めて暗号化演算を行う暗号化演算手段と、該暗号化演算の実 行後、得られた値から、該ランダムな整数値を演算に含めた効果を相殺するランダム 化解除手段とを備えることを特徴とする。
[0027] 本発明の第 2の暗号化処理装置は、個人鍵を用いて楕円曲線暗号処理を行う喑 号化処理装置において、乱数に基づいて生成された楕円曲線上の点 Rを初期点に セットするランダム化手段と、この初期点、楕円曲線暗号のためのあるスカラー値 d、 楕円曲線上のある点 Pを用いてスカラー倍演算を演算する手段と、その演算によって 得られた点 Qから点 Rに関係する点 R'を用いて Q— R'を実行するランダム化解除手 段と、その結果を出力する手段とを備えることを特徴とする。
[0028] 本発明の第 3の暗号化処理装置は、個人鍵を用いて RS A暗号処理を行う喑号ィ匕 処理装置にぉレ、て、乱数に基づレ、て生成された整数 rを初期値にセットするランダム 化手段と、この初期値、 RSA暗号のためのあるべき指数 d、ある整数 pを用いてべき 乗剰余演算を演算する手段と、その演算によって得られた整数 qから rに関係する値 r
'を用いて乗算剰余演算 q/r'を実行するランダム化解除手段と、その結果を出力す る手段とを備えることを特徴とする。
[0029] 本発明によれば、アルゴリズムを実行して演算するたびに新たに生成されるランダ ムな整数値 (楕円曲線上の点の座標値、あるいは、有限体上の整数値)を含めて演 算するので、電力解析攻撃に遭っても、攻撃者が得る情報が毎回ランダムに異なる 情報となるので、秘密情報を推定することを難しくし、暗号処理の安全性を高めること ができる。
図面の簡単な説明
[0030] [図 1]楕円加算を説明するための図である。
[図 2]楕円 2倍算を説明するための図である。
[図 3]本発明に係る楕円曲線暗号装置の要部の構成を示す図である。
[図 4]本発明の一実施形態としての楕円曲線暗号装置の機能構成を示すブロック図 である。
[図 5]本発明の実施形態の暗号化処理装置のハードウェア環境図である。
発明を実施するための最良の形態
[0031] 本発明の実施形態によれば、個人鍵を用いて楕円曲線暗号処理を行う暗号装置 は、乱数に基づいて生成された楕円曲線上の点 Rを初期点にセットするランダムィ匕 手段と、この初期点、楕円曲線暗号のためのあるスカラー値 d、楕円曲線上のある点 Pを用いてスカラー倍演算を演算する手段と、その演算によって得られた点 Qから点 Rに関係する点 R'を用いて Q— R'を実行するランダム化解除手段と、その結果を出 力する手段とを備える。
[0032] あるいは、本発明の実施形態を RSA暗号処理に適用した場合は、個人鍵を用いて RSA暗号処理を行う暗号装置は、乱数に基づレ、て生成された整数 rを初期値にセッ トするランダム化手段と、この初期値、 RSA暗号のためのあるべき指数 d、ある整数 p を用いてべき乗剰余演算を演算する手段と、その演算によって得られた整数 qから r に関係する値 r'を用いて q/r'を実行するランダム化解除手段と、その結果を出力 する手段とを備える。
[0033] 本発明の実施形態によれば、楕円曲線暗号におけるスカラー倍算の処理量が少な
ぐかつ、 SPA、 DPA、 RPA、 ZVAに対して安全な処理法を実現できる。
また、本発明の実施形態の RSA暗号処理への適用においては、 SPA、 DPA、 RP A、 ZVAに対して安全な処理方法を提供できる。
(a)基本説明
本発明の一実施形態としての楕円曲線暗号装置は、例えば、楕円曲線暗号の専 用の情報処理装置,パーソナルコンピュータ, ICカード (スマートカード)等に内蔵さ れた ICチップ,携帯電話機,携帯情報端末装置(PDA (Personal Data Assistant)等 ) , DVDプレーヤ等として実現されるものであり、演算を行うプロセッサを有して構成 されるものである。
[0034] 以下の説明では、本発明の実施形態にかかる楕円曲線暗号演算方法を、 pを素数 、 mを 1以上の整数とし、要素数 mの有限体 GF ( m)上の楕円曲線に適用した 場合について説明する。なお、以下、特に断りの無い限り、小文字 (d等)はスカラー 値を表わし、大文字 , T等)は楕円曲線上の点を表わすものとする。又、符号"'" はべき乗算を表わすものとし、 "("ど') "とによって囲まれた数列は 2進数で表現され
2
た数字を表わす。又、 "S01 : "等のように、 Sを付した数字はアルゴリズムを表わすプロ グラム例におけるステップ数を示すものとする。更に、楕円曲線上の四則演算を"「"と "」"で囲んで示す。
[0035] GF (p"m)上の楕円曲線 Eは、以下の方程式を満たす点(x, y)の集合に、無限遠 点(以下、ゼロ点という場合もある)と呼ばれる点∞を加えた集合である。無限遠点∞ を 0と表わすこともある。
E : y" 2 + al X x X y + a3 X y=x"3 + a2 X x" 2 + a4 X x + a6
ここで al , a2, a3, a4, a6, x, yはそれぞれ GF (p m)の要素である。楕円曲線上の 点は (X, y)のような座標形式で表現できる力 無限遠点∞は (X, y)のような座標形 式で表現することができなレ、唯一の点である。
[0036] Pを GF (p m)上の楕円曲線 E上の点とし、以下のように Pの逆元「一 P」を定義する
(1) P =∞ならば、「一 P」=∞
(2) P≠∞ならば、 P= (x, y)としたときに、
「― P」 = (x, -y-alXx-a3)
また、 PI, P2を GF(p'm)上の楕円曲線 E上の 2点とし、以下に示すように PIと P2 との禾ロ P3 =「P1 + P2」を定義する。
(1) P1 =∞ならば、 P3 = P2
(2) P2 =∞ならば、 P3 = P1
(3) 1=「_ 2」ならば、 P3 = o
(4) 1≠「_?2」ならば?1=( 1, yl), P2= (x2, y2) , P3= (x3, y3)としたときに x3= λ "2 + al X -a2-xl-x2,
y3=-( +al) Xx3-v-a3,
ただし、
P1≠P2のとき
X = (y2-yl)/(x2-xl)
v = (yl Xx2-y2Xxl)/(x2-xl)
P1 = P2のとき
λ = (3Xxl"2 + 2Xa2Xx + a4-al Xyl) / (2 Xyl +al X xl + a3) v = (-xl"3 + a4Xxl + 2Xa6-a3Xyl)/(2Xyl + al Xxl+a3) と定める。
[0037] P1≠P2のときに、「P1+P2」を計算することを楕円加算、 P1 = P2のときに「P1 + P2」 =「2XP1」を計算することを楕円 2倍算という。楕円加算 ·楕円 2倍算は、有限 体 GF (p"m)での加減算 ·乗算 ·平方算 ·逆元計算の組み合わせによって計算される
[0038] pを素数とするとき、有限体 GF(p)を素体という。特に、 pが 5以上の素数の場合に は、素体 GF(p)上の楕円曲線 Eは、方程式
E:y"2 = x"3 + aXx + b
を満たす点 (x, y)の集合上に、無限遠点と呼ばれる点∞をカ卩えた集合である。無限 遠点∞を 0と表わすこともある。又、 a, b, x, yはそれぞれ GF(p)の要素である。楕円 曲線上の点は (x, y)のような座標形式で表現できる力 無限遠点∞は (x, y)のよう
な座標形式で表現することができない唯一の点である。
[0039] Pを GF(p)上の楕円曲線 E上の点とし、以下に示すように Pの逆元「一 P」を定義する
(1) P =∞ならば、「一 P」=∞
(2) P≠∞ならば、 P=(x, y)としたときに、「一 P」 = (x, -y)
また、 PI, P2を GF(p)上の楕円曲線 E上の 2点とし、以下に示すようにして P1と P2 との禾ロ P3 =「P1 + P2」を定義する。
(1) P1 =∞ならば、 P3 = P2
(2) P2 =∞ならば、 P3 = P1
(3) 1=「_ 2」ならば、 P3 = o
(4) P1≠_P2ならば、 Pl=(xl, yl), P2= (x2, y2) , P3=(x3, y3)としたときに x3= λ "2-xl-x2
y3=— λ Xx3— v ,
ただし
P1≠P2のとき
X = (y2-yl)/(x2-xl)
v = (yl Xx2-y2Xxl)/(x2-xl)
P1 = P2のとき
λ = (3Xxl'2 + a)/(2Xyl)
v = (-xl'3 + aXxl + 2Xb)/(2Xyl)
と定める。
[0040] P1≠P2のときに、「P1+P2」を計算することを楕円加算、 P1 = P2のときに「P1 + P2」 =「2XP1」を計算することを楕円 2倍算という。楕円加算 ·楕円 2倍算は、有限 体 GF (p)での加減算'乗算 ·平方算 ·逆元計算の組み合わせによって計算される。
[0041] 図 1は楕円加算を説明するための図、図 2は楕円 2倍算を説明するための図である 楕円加算は、図 1に示すように、楕円曲線上の点 Pl=(xl, yl)と P2=(x2, y2)と
を結ぶ直線と楕円曲線との交点を、 X軸で折り返した点 P3=「P1+P2」 = (x3, y3) として定義される。図 1では、素体上の楕円曲線として、式 y"2=x"3— Xで表される曲 線が示され、 X = ( (y -y ) / -X ) ) _x _x、 y = ( (y— y )
1 2 1 2 1 2 3 1 2 Z (x— x ) ) 一 x
3 1 2 1 3
)-yで定義されている。
1
[0042] 楕円 2倍算は、図 2に示されるように、楕円曲線上の点 Pl= (xl, yl)の接線と楕 円曲線との交点を、 X軸で折り返した点 P4=「P1 +P1」 =「2XP1」 = (x4, y4)とし て定義される。図 2では、素体上の楕円曲線として、 y 2 = x 3_xが示され、 X =((3
4
X "2-1) /(2y ))2-2x ,y =((3χ '2_1) Z (2y ) ) (x _x )_yで定義されてレ、
1 1 1 4 1 1 1 4 1
る。
[0043] 有限体上の楕円曲線 Eと、ベースポイントと呼ばれる曲線上の点 Pと、スカラーと呼 ばれる整数 dとに対して、点「d X P」 =「P + P + ·■ · + P」(d個の和)を計算することをス カラー倍算という。スカラー倍算は、楕円加算、楕円 2倍算の組み合わせによって実 現される。
[0044] 楕円加算、楕円 2倍算、スカラー倍算の計算時間は、有限体における乗算、平方 算、逆元計算の計算時間の和によって見積もられることが多い。これは実際の楕円 加算、楕円 2倍算、スカラー倍算の計算が、有限体における加減算'乗算 ·平方算 · 逆元計算の組み合わせで計算され、多くの場合、加減算の計算時間はその他の計 算時間に比べて無視できるほど短いからである。
一般に有限体 GF(p m)での逆元計算の計算時間は、乗算'平方算の計算時間に 比べて非常に大きくなることが多い。このため、楕円曲線の点を表現する上で射影座 標が使用されることがある。
射影座標では、 GF(p m)上の楕円曲線の点は (X:Y:Z)のような 3つの要素の組み 合わせで表される。ただし(X: Υ: Ζ)と r≠ 0である GF (p"m)の要素 rに対し(r X X: r XY:rXZ)は同じ点と考える。射影座標における楕円曲線の方程式は、元の方程式 に x = XZZ, y=YZZを代入して、
E:Y"2XZ = X"3 + aXXXZ"2 + bXZ"3
と表される。射影座標を用いると、楕円曲線上の全ての点は (X:Y:Z)のような座標 形式で表現することができる。無限遠点は∞ = (0:1:0)となる。
H. Cohen, A. Miyaji, and T. Ono, "Efficient Elliptic Curve Exponentiation Using Mixed Coordinates", Asiacrypt 1998, Lecture Notes in Computer Science vol. 1514,pp.51-65, Springer-Verlag, 1998 (文献 [CM098])によると、素体上の射景座 標における楕円加算の計算時間は 12M + 2S、楕円 2倍算の計算時間は 7M + 5S になることが報告されている。ここで 1M、 ISは、素体上で乗算'平方算を 1回計算す るのに必要な計算時間を表す。
射影座標の一種に、ヤコビアン座標がある。ヤコビアン座標では、 GF(p m)上の楕 円曲線の点は (X:Y:Z)のような 3つの要素の組み合わせで表される。ただし (Χ:Υ: Ζ)と r≠ 0である GF (p"m)の要素 rに対し(r2 X X: r3 X Y: r X Z)は同じ点と考える。ャ コビアン座標における楕円曲線の方程式は、元の方程式に X = XZZ2, y=YZZ3を 代入して、
E:Y"2XZ = X"3 + aXXXZ"4 + bXZ"6
と表される。ヤコビアン座標を用いると、楕円曲線上の全ての点は (X:Y:Z)のような 座標形式で表現することができる。無限遠点は∞ = (0:1:0)となる。
文献 [CM098]によると、素体上のヤコビアン座標における楕円加算の計算時間は 1 2M + 4S、楕円 2倍算の計算時間は 4M + 6Sになることが報告されている。ここで 1 M、 ISは、素体上で乗算'平方算を 1回計算するのに必要な計算時間を表す。 (b)実施形態の実現例
以下、本発明の実施形態に係る楕円曲線暗号演算方法を、 pを 5以上の素数とし、 要素数 Pの有限体 GF (p)上の楕円曲線に適用した場合について説明する。
[0045] GF(p)上の楕円曲線 Eは、以下の式で表わすことができる。
E:y"2 = x"3 + aXx + b
ここで a, b, x, yは GF(p)の要素で、 4Xa"3 + 27Xb'2≠0を満たす。
[0046] 図 3は、本発明に係る楕円曲線暗号装置 11の要部の構成を示す図である。
本楕円曲線暗号装置 11は、図 3に示すように、演算部(プロセッサ) 12と記憶部 16 とをそなえて構成されている。記憶部 16は、後述する楕円曲線暗号の楕円加算,楕 円 2倍算等の演算プログラムを記憶するものである。
[0047] 演算部 12は、演算器 13,レジスタ群 14および演算結果出力レジスタ群 15をそな
えて構成されている。演算器 13は、記憶部 16に格納された楕円曲線暗号プログラム をレジスタ群 14を用いて実行するものであって、その演算結果を演算結果出力レジ スタ群 15に出力するようになっている。
[0048] レジスタ群 14および演算結果出力レジスタ群 15は、いずれも複数のレジスタ力 な り、これらのレジスタに、演算を行なうための数値や、演算実行後の結果,現在実行し ているコードのメモリアドレス、 CPUの状態などを格納するものであり、演算結果出力 レジスタ群 15には、特に演算器 13による演算結果が格納されるようになってレ、る。
[0049] 図 4は、本発明の一実施形態としての楕円曲線暗号装置 11の機能構成を示すブ ロック図である。
本楕円曲線暗号装置 11は、図 4に示すように、乱数生成部 21、スカラー倍算処理 部 22、及び、 randompointO関す処理部 23をそなえて構成されている。本楕円曲線 喑号装置 11は、ベースポイント Pとベースポイントに乗算するスカラー dを入力し、ス カラー倍した楕円曲線上の点「d X P」を出力する。乱数生成部 21は、スカラー倍算 処理部 22が演算に使う数値をランダム化するために使用する乱数を生成する。 randompointO関数処理部 23は、乱数生成部 21の生成した乱数に基づいて楕円曲 線上のランダムな点の座標値を生成する処理部である。
楕円曲線暗号に対して、前述したアルゴリズム 1,、アルゴリズム 2,、アルゴリズム 3、 アルゴリズム 4において、本発明の実施形態の方法を適用した実現例について説明 する。以下では発明の実施形態の方法を RIPと記す。
まず、ノくイナリ法 (LSB)と組み合わせた実現例を示す。 (アルゴリズム 6)
(8)アルゴリズム 6 (RIP (LSB, 0) )
bl: R <— randompointO
S2: T[0]― R, T[2]― P
S3: for i = 0 upto n-l{
S4: T[l]―「T[0] + T[2]J
S5: T[2]―「2*T[2]」
S6: T[0]― T[d[i]]
S7: }
S8: return「T[0] - R」
ここで R, T[0], T[l], T[2]はいずれも一時変数、 dは nビットのスカラー値で、 d[i]は dの下位 iビット目の値である。また関数 randompointOは、楕円曲線上のランダムな点 を生成する関数である。ここで、アルゴリズムの動作の仕方は、前述のバイナリ法 (LS B)と同様であるが、演算する数値にランダムな値が加えられていることが分かる。この ランダムな値は演算毎に関数 randompointOによって生成されるために、アルゴリズム が同じ楕円曲線上の点の演算をしていても、電力解析攻撃によって電力値から分か るハミング重みが毎回違って観測される。したがって、電力解析攻撃によって重要な 情報が盗まれる可能性を低くすることができる。なお、ステップ S7終了時点で、 T[0] の値は、「「d X P」+R」となっている。
次にアルゴリズム 6における関数 randompointOの実現方法を述べる。
•方法 l : x座標値をランダムに生成。点 Rを生成する際に、 X座標をランダムに発生さ せ、対応する y座標値が存在するかどうかをチェックする。具体的には、例えば標数 力 ¾以上の有限体上の楕円曲線の方程式
y 2 = x ύ + a X x + b
が与えられているとき、 X座標用のランダム値 rを発生させる。このとき右辺に x=rを代 入した値 r 3 + a X r+bを求め、この値が平方根を持つかどうかをチェックする。平方 根を持つ場合にはその平方根を y座標として求め、 rとこの平方根の値の組を出力す る。平方根が存在しない場合には、ランダム値 rを求めるところからやり直す。
'方法 2 :テーブルの利用。あら力じめ Rの候補となるランダムな点の集合をテーブル として保持し、関数の呼び出しごとに、テーブルの中からランダムに Rを選んで出力 する。
•方法 3 :固定点の乱数倍。ある固定点 Qを保持し、関数の呼び出しごとにランダムな 値 rを生成し、スカラー倍算 0」を計算し、 Rとして「r X Q」を出力する。
•方法 4 :固定点の利用。ある固定点 Qを射影座標表現を (X: Y: Z)として保持し、関 数の呼び出しごとにランダムな値 rを生成し、各座標値を r倍ずつした結果 (r X X: r X
Y: r X Z)を Rとして出力する。ヤコビアン座標を用いても同様の効果を得ることができ る。
•方法 5 :ある固定点 Rを保持し、関数の呼び出しに対して Rを出力し、呼び出し後に R—「 2 X R」として更新する。
次にバイナリ法 (MSB)と組み合わせた実現例を示す。 (アルゴリズム 7)
(9)アルゴリズム 7 (RIP (MSB, 0) )
bl: R <— randompointO
S2: T[0]― R, T[2]― P
S3: for i = n-1 downto 0{
S4: T[0]―「2*T[0]」
S5: T[l]―「T[0] + T[2]J
S6: T[0]― T[d[i]]
S7: R―「2*R」
S8: }
S9: return「T[0] - R」
ここで R, T[0], T[l], T[2]はいずれも一時変数、 dは nビットのスカラー値で、 d[i]は d の下位 iビット目の値である。また関数 randompointOは、楕円曲線上のランダムな点 を生成する関数であり、実現方法については前述の方法 1一方法 5などが考えられる 。アルゴリズム 7において、アルゴリズムの動作の仕方は、前述のバイナリ法(MSB)と 同じである力 ランダムな点が計算に含まれているところが異なっている。
この場合も前述同様、ランダムな点 Rを演算の中に組み込むことにより、電力攻撃 に対する耐性を得る。ステップ S8の終了時点で T[0]の値は、「d X P + R」となる。 バイナリ法 (MSB)と組み合わせた別の実施例を示す。 (アルゴリズム 7' )
(10)ァノレゴリズム 7, (RIP (MSB, 0),)
bl: (R, R ノ randompointO
S2: T[0]― R, T[2]― P
S3: for i = n-1 downto 0{
S4: T[0]―「2*T[0]」
S5: T[l]―「T[0] + T[2]J
S6: T[0]― T[d[i]]
S7: }
S8: return 「T[0] - R' j
ここで R, R,,观 T[l], T[2]はいずれも一時変数、 dは nビットのスカラー値で、 d[i] は dの下位 iビット目の値である。また関数 randompointOは、楕円曲線上のランダム な点とそれに関連する点の 2点を生成する関数であり、実現方法は後述する。このァ ルゴリズムは、基本的にバイナリ法 (MSB)と同様に動作する力 S、ランダム点の用い方 が異なる。関数 randompointOは、耐タンパ性を獲得するための Rの値のほ力に、ステ ップ S7の終了時点で演算結果に余分に楕円加算されている値を取り除くための R' を生成する。上記アルゴリズムでは、ステップ S7の終了時点で、 T[0]の値は、「d X P + 2'n X R」となっている。
[0052] R'を得る方法としては、以下のような方法が考えられる。
•方法 1 '一方法 5':関数呼び出しごとに、方法 1一方法 5のそれぞれの方法によって 点 Rを求め、この点 Rをもとに点 R' =「2'n X R」を計算し、点のペア Rと R'を出力す る
•方法 6 ':ある固定点 Rと、 R' =「2 n X R」である固定点 R'を保持し、関数の呼び出 しに対して点のペア(R, R' )を出力する。呼び出し後に R—「2 X R」、 R'—「2 X R'」 として更新する。
[0053] 次にモンゴメリ法と組み合わせた実現例を示す。 (アルゴリズム 8)
(11)アルゴリズム 8 (RIP (Mon, 0 + 1) )
Si: (R,R ) randompointO
S2: T[0] 「P + R」, T[l] 「「2*P」 + RJ
S3: for i = n-2 downto 0{
S4: T[2]―「2*T[d[i]]」
S5: T[l]―「T[0] + T[l]」
S6: T[0]― T[2-d[i]]
S7: T[l]― T[l+d[i]]
S8: }
S9: return 「T[0] - R,」
ここで R, R,,观 T[l], T[2]は一時変数、 dは ηビットのスカラー値で、 d[i]は dの 下位 i番目のビットの値である。また関数 randompointOは、楕円曲線上のランダムな 点 Rとそれに関連する点 R'の 2点を生成する関数であり、以下のような実現方法が考 えられる。このアルゴリズムは、前述のモンゴメリ法と同様に動作するが、ランダム点が 使用されている。この場合もアルゴリズム 7と同様に、耐タンパ性を獲得するための R と演算後に正しい値を得るための R'を randompointOが生成する。ステップ S8の終了 時点で T[0]の値は、「d X P + 2' (n_l) X R」となっている。
R'を生成する方法として、以下のような方法が考えられる。
• 方法 1 ' '一方法 5 ' ':関数呼び出しごとに、方法 1一方法 5のそれぞれの方法によ つて点 Rを求め、この点 Rをもとに点 R' =「2" (n— 1) X R」を計算し、点のペア Rと R' を出力する。
• 方法 6 ' ':ある固定点 Rと、 R' =「2~ (n-1) X R」である固定点 R'を保持し、関数 の呼び出しに対して点のペア(R, R' )を出力する。呼び出し後に R 「2 X R」、 「2 X R'」として更新する。
次にウィンドウ法(ビット幅 4)と組み合わせた実現例を示す。 (アルゴリズム 9)
(12)アルゴリズム 9 [RIP (W) (幅 4ビット) ]
Si: R randompointO
S2: W[0] 0, W[l] P
S3: for i = 2 upto 15 {
S4: W[i] =「WD_1] + P」
S5: }
S6: T[0]―「R + W[d[n- l,n-4]]」
S7: for i = n_5 downto3 step -4 {
S8: T[0]―「16*T[0]」
S9: T[0]―「T[0] + W[d[i,i-3]]」
S10: }
Sl l: return「T[0] - R」
ここで、 dは nビットのスカラー値で、 nは 4の倍数と仮定する。また d[U_3]は dの下位
iビット目から(ト 3)ビットまでの 4ビット値とする。 W[i]はウィンドウ法で使用するテー ブルである。また関数 randompointOは、楕円曲線上のランダムな点を生成する関数 であり、実現方法については前述の方法 1一方法 5などが考えられる。
[0055] このアルゴリズムは、前述のウィンドウ法と同様に動作する力 ランダム点が用いら れている。この場合には、ステップ S10の終了時点で、 T[0]の値が「「d X P」 +R」とな つているので、ステップ S 11において、 T[0]力 Rを消去している。
[0056] また、上述した各実施形態においては、 ρを 5以上の素数とし、要素数 ρの有限体 G F (ρ)上の楕円曲線に適用した場合について説明しているが、これに限定されるもの ではなぐ本発明の趣旨を逸脱しない範囲で種々変形して実施することができる。
[0057] さらに、上述した各実施形態においては、本発明内容を楕円曲線暗号に適用した 場合について説明しているが、 RSA暗号に対しても、本発明の趣旨を逸脱しない範 囲で種々変形して実施することができる。ここで、変形においては、以下のような楕円 曲線暗号演算から RSA暗号演算 (有限体上の剰余演算)への置き換えを用いる: 楕円カロ算 + (3」→乗算剰余演算 p*q (mod n)
楕円 2倍算「2 X P」→ 2乗剰余演算 p 2 (mod n)
スカラー倍算「d X P」→べき乗剰余演算 p"d (mod n)
逆元「一 P」→ p*q=l (mod n)となる q。この qを p"(_l)と記載する。
[0058] なお、本発明の各実施形態が開示されていれば、本発明の楕円曲線暗号装置, 楕円曲線暗号方法,楕円曲線暗号プログラムおよび同プログラムを記録したコンビュ 一タ読取可能な記録媒体を当業者によって実施 ·製造することが可能である。
[0059] 図 5は、本発明の実施形態の暗号ィヒ処理装置のハードウェア環境図である。
外部記憶装置 33に格納された本発明の実施形態を実現するプログラムは、バス 3 9を介してメモリ 32にコピーされ、 CPU31によって実行される。ユーザからの入力は 、入力装置 36から入力される。入力装置 36は、キーボード、マウス、テンプレート等 力 なる。ユーザへの情報の提示は、出力装置 37によって行われる。出力装置 37は 、ディスプレイ等力もなる。また、当該プログラムは、ディスケットや CD— R〇M、 DVD 等の可搬記録媒体 35に格納することも可能であり、媒体駆動装置 34を使って、これ をメモリ 32に読み込み、 CPU31が実行することも可能である。あるいは、可搬記録
媒体 35として、前述した、スマートカードなどを使用し、媒体駆動装置 34で可搬記録 媒体 35の情報を読み込み、暗号解読処理を施して、ユーザの認証を行うことも可能 である。ネットワーク接続装置 38は、ネットワークと暗号化処理装置を接続するもので あり、ネットワークを介して、暗号化すべきデータや解読すべきデータを受け取って、 暗号化処理装置が処理することも可能である。あるいは、当該プログラムをネットヮー クを介して、外部記憶装置 33にダウンロードし、暗号化処理装置にインストールする ことによって、本発明の実施形態の処理を実現することも可能である。
[0060] H. Mamiya, A. Miyaji, H. Morimoto, Efficient Countermeasures against RPA, DPA and SPA", CHES 2004, Lecture Notes in Computer Science Vol. 3156, pp.343-356, Springer- Verlag, 2004 (文献 [MMM04])によると、素体上の楕円曲線を 用いた場合、 SPA'DPA'RPA'ZVAに耐性を持つスカラー倍演算アルゴリズムとし て指数分割法を用いた場合の 1ビットあたりの計算時間は 16M + 10Sと見積もられ ている。ここで 1M、 ISは、素体上で乗算'平方算を 1回計算するのに必要な計算時 間を表す。
[0061] 上で説明した実施形態はぃずれも ?八 ?八^?八 八に対して耐性を持っ。
また素体上の楕円曲線を用いて、モンゴメリ法による実現例を使用した場合の 1ビット あたりの計算時間は 13M + 4Sとなる。ここで 1M、 ISは、素体上で乗算'平方算を 1 回計算するのに必要な計算時間を表す。 1Mと 1Sの比率は計算環境によって異なる 、文献 [MMM04]で仮定されている 1S = 0. 8Sという換算値を用いた場合、既存 技術の計算時間は 24M、本発明の計算時間は 16. 2Sとなり、約 30%の高速化が 可能となる。
[0062] 以上のように、本発明の暗号化処理装置は、楕円曲線喑号処理や RSA喑号処理 を行なうのに有用であり、特にサイドチャネル攻撃に対して有効である。