鍵を用いた耐タンパ楕円曲線暗号処理
発明の分野
本発明は、 暗号処理の分野に関し、 特に、 楕円曲線暗号のためのプロセッサに おける S P Aおよび DP Aのような電力解析攻撃を防止する耐タンパ (tamper- proof) 暗号ィ匕 Z復号に関する。
明
発明の背景
暗号方式には一般的に公開鍵暗号方式田と共通鍵暗号方式が含まれる。 公開鍵暗 号方式は、 暗号化と復号に異なる鍵 (キー) を用いる。 典型的には、 公開鍵を用 いて平文 (plaintext) が暗号化され、 秘密鍵を用いて暗号文 (ciphertext) が復 号され、 それによつて暗号文が安全に送信できる。 または、 秘密鍵を用いて平文 が暗号化され、 公開鍵を用いて暗号文が復号され、 それによつて平文を暗号化し たユーザが識別される。 図 1は、 スマートカードのような暗号デバイスにおける 秘密鍵を用いた暗号化 Z復号の構成の例を示している。 図 1において、 暗号デバ イスは、 その内部の暗号化/復号ュニットにおいて周知の形態で秘密鍵を用いて 入力平文 Z暗号文メッセージを処理して出力暗号文 Z平文 ^ッセージを供給する 公開鍵暗号の 1つのタイプである楕円曲線暗号 (Elliptic Curve Cryptography) のためのプロセッサにおいては、 スカラー倍算が行われる。 点のスカラー倍算は 、 スカラー値 d、 および楕円曲線上の点 Aに対して、 - を満たす点尺を求 める。 例えば、 楕円曲線暗号における Diffe-Hellman (ディッフィ一'ヘルマン ) 鍵配送において、 V=d Aで表される点が秘密鍵 dを用いてスカラー倍算で生 成される。
バイナリ 'メソッド (binary method) を用いた点のスカラー倍算は、 2進値 dについて、 MSB (最上位ビット) から LSB (最下位ビット) まで順に点の 2倍算と点の加算を実行することによって、 Vを求める。 例えば d = 21=24 + 22+2。= (10101) 2について Vを求めるとき、 最初の MSB "1" に 対して初期値 V==0 (無限遠点) に Aの加算を実行して V = Aを生成し、 次のビ
ット "0" に対してその Vに 2倍算を実行して V = AX 2を生成し、 次のビッ ト "1" に対してその Vに 2倍算と Aの加算を実行して V= (AX 2) X 2 + Aを生成し、 次のビット "0" に対してその Vに 2倍算を実行して V= ( (A X 2) X 2 +A) X 2を生成し、 LS B "1" に対してその Vに 2倍算と Aの 加算を実行して、 V二 ( ( (AX 2) X 2+A) X 2) X 2 +A= (2 +22 + 2°) Aを生成する。
効率的な指数剰余演算のためのウィンドウ法 (window method) が知られて いる。 ウィンドウ法は、 Alfred J. Menezes他の "HANDBOOK OF APPLIED CRYPTOGRAPHY" (CRC press) , pp.615, Algorithm 14.82に記載されてい る。
図 2は、 ウィンドウ法を用いて楕円曲線暗号における点のスカラー倍算 V=d Aを求めるためのアルゴリズムを示している。 ここで、 dは 2進表現で d= (d u— du_2, . . . d0) 2と表記される。 そのァノレゴリズムは C言語で記述さ れている。
図 2のアルゴリズムを説明する。 まず、 0く x< 2
kの全ての整数 Xに対して 、 W [X] =xAを満た t iWのテーブル Wを作成する。 テーブル Wの作成後、 uビットの値 d= (d.
u— " d
u—
2, . . . d。)
2を分割して m個の kビット ' シーケンス b
;= (d
ik+k— " . . . d
ik)
2 ( i =0, 1, 2, . . . ) を生 成する。 ここで、 m= c e i l i n g (u/k) 。 その b iに対する値 W [b
t ] (=b
tA) をテーブル Wでルックアップすることによる加算 V = V+W [b と、
から下位シー ケンス b 0へ順に実行することによって、 V=dAを求める。
暗号解読 (分析) またはタンパ (tamper) は、 暗号文のような入手可能な情 報から秘密鍵を含めた秘密情報を推定する。 暗号解読の 1つである電力解析攻撃 が、 1998年に Paul Kocher (ポール コーチャ) によって考案された。 この 電力解析攻搫は、 スマートカードのような暗号デバイスに含まれる暗号プロセッ サに相異なる入力データを与え、 例えば図 1に示されているようにオシロスコー プ等を用いてその処理中における時間に対する消費電力の変化を測定し、 統計的 に充分な数の消費電力変化の曲線を収集しそれを解析し、 それによつて暗号プロ
セッサ内部の鍵情報を推定する。 これは、 共通鍵暗号と公開鍵暗号の双方に適用 できる。
電力解析攻撃には、 単純電力解析 (以下、 S P Aという) (Simple Power Analysis) および電力差分攻撃 (以下、 D P Aという) (Differential Power Analysis) が含まれる。 S P Aは暗号プロセッサにおける 1つの消費電力変化曲 線の特徴から秘密鍵の推定を行う。 D P Aは相異なる多数の消費電力変化曲線の 差分 (以下、 電力差分曲線という) を用いて解析することによって秘密鍵の推定 を行う。 一般的には D P Aの方が強力である。
例えば D E S ( Data Encryption Standard) および A E S (Advanced Encryption Standard) 等の共通鍵暗号に対する S P Aおよび D P Aが、 Paul Kocher, Joshua daffe, and Benjamin Jun, Difterential Power Analysis in proceedings of Advances in Cryptology- CRYPTO' 99, Lecture Notes in Computer Science, vol. 1666, Springer-Verlag, 1999, pp. 388-397に記載されて いる。
例えば R S A暗号おょぴ楕円曲線暗号等の公開鍵暗号に対する S P Aおよび D P A力 例えば、 Thomas S. Messerges, Ezzy A. Dabbish and Robert H. Sloan
Power Analysis Attacks oi Modular Exponentiation in Smartcards Cryptographic Hardware and Embedded Systems ( CHES'99 ) , Lecture Notes in Computer Science Vol. 1717, Springer-Verlag, pp. 144-157 (以下、 Messerges 99という) 、 ぉょぴ Jean-Sebastein Coron "Resistance against Differential Power Analysis for Elliptic Curve Crytosystems" Cryptographic Hardware and Embedded Systems (CHES'99) , Lecture Notes in Computer Science Vol.1717, Springer-Verlag, pp. 292-302, 1999 (以下、 Coron 99という ) に記載されている。
楕円曲線暗号法は、 楕円曲線の離散対数問題に基づくもので, N. KobHtz ( " Elliptic Curve Cryptosystems , Mathematics of Computers, Vol. 48, pp. 203-209, 1987.)と V. Miller ( "Use of elliptic curves in cryptography" , Advances in Cryptology-Proceedings of Grypto'85, Lecture Notes in Computer Science, 218 (1986), Springer-Verlag, pp 417-426) により提案された。
楕円曲線暗号は、 楕円曲線上の点のスカラー倍算に基づく演算である。 例えば
、 公開鍵点 Pは、 公開されたベースポイントと呼ばれる楕円曲線上の点 Gに対し て、 スカラー値である秘密鍵 dを用いた楕円曲線上の点のスカラー倍算 P = d G で計算された楕円曲線上の点である。 また、 楕円曲線上の Diffie-Helmaii鍵共 有を用いた Aと Bの間での鍵共有では、 Aの秘密鍵と公開鍵の対を dA, PAと し、 Bの秘密鍵と公開鍵の対を dB, PBとして、 X=dAPB=dBPAの関係を 利用する。 楕円曲線上における点のスカラー倍算は、 「点の加算 (ECADD) 」 と 「点の 2倍算 (ECDBL) 」 の,操り返し力 らなる。 スカラー倍 R=dQ の最も単純な実現法に次の基本的アルゴリズム Algorithm 1および Algorithm 2 にそれぞれ示されたバイナリ 'メソッド (MSB) およぴパイナリ ·メソッド ( LSB) がある。 以下の記載において、 特に断らない限り、 小文字 (d等) をス カラー値とし、 大文字 (R、 Q等) を楕円曲線上の点を表すものとする。
(Algorithml: Binary Method (MSB))
T:=Q
for l =n-2 downto 0 \
T:=ECDBL(T)
if(di==0){
T:= EGADD(T, Q) …氺
}
}
R:=T
ここで、 Tは一時的変数、 dは nビットのスカラー値で、 ! は の!番目のし SB (最下位ビット) (下位 i番目のビット) の値である。
<Algorithm2: Binary Method (LSB))
T[l] - Q
T[0〗 := 0
fori = 0 pton-l{
if(di==l){
t[0]: = ECADD( T[0], T[l] ) … *
}
T[l] :=ECDBL( T[l])
}
R := T[0]
ここで、 レジスタ Τ [0] および Τ [1] は一時的変数であり、 dは ηビットの スカラー値であり、 d iは dの i番目の LS Bの値である。
点のスカラー倍算に Algorithm 1および Algorithm 2を使用したとき、 *で 示された演算は d中のビット値に応じて実行されたりされなかったりする。 S P Aは、 この性質を利用して秘密鍵 dを解析する。 多くの実験から ECDBL演算 と E C ADD演算の電力波形は、 特徴的で容易に区別可能であることが知られて いる。 従って、 プロセッサにおける Algorithm 1および Algorithm 2の演算に おいて発生する電力波形を測定することによって、 その波形から ECDBLと E CADDの演算の順序と回数が変化するので、 秘密鍵 dを解析して求めることが できる。
この S P Aへの対策として、 アド ·アンド'ダブル ·オールウェイズ (add- and-double-always, 常に加算と 2倍算を行う) と呼ばれる方法が Coron 99で 提案されている。 この方法は、 常に EC ADD演算と ECDBL演算が交互に行 われるので、 SPAに対して安全である。 次に、 Algorithm 1および Algorithm 2に対してァド ·アンド ·ダプル ·オールウェイズを施したものを Algorithm 3 および Algorithm 4として示す。
(Algoritlim3: Binary Method (MSB, add-and-double-always))
T[0] := Q
for i = n-2 downto 0 {
T[0] := ECDBL(T[0] )
T[l] := ECADD(T[0], Q)
T[0] := T[di]
}
R := T[0]
ここで、 レジスタ T [0] および T [1] は一時的変数であり、 dは nビットの
スカラー値であり、 d iは dの i番目の LSBの値である。
(Algorit m4: Binary Method (LSB, add- and- double- lways))
T[0] := O
T[2]:=Q
fori = 0upton-l{
T[l〗 := ECADD(T[0], T[2])
T[2] := ECDBL( T[2] )
T[0] := T[di]
}
R := T[0]
ここで、 レジスタ T [0] 、 T [1] および T [2] は一時的変数であり、 dは nビットのスカラー値であり、 d iは dの i番目の LSBの値である。
Algorithm 3および Algorithm 4を用いて S P Aを防止することができる。 し かし、 Coron 99 には、 これらのアルゴリズムに対する D P Aについても述べら れており、 Algorithm 3および Algorithrat 4では D P Aで秘密鍵を解析して求め ることができることが示されている。 さらに、 Coron 99 には、 ランダムィ匕射影 Randomized Projective Coordinates (RPC) と呼ばれる、 乱数を使用し た楕円曲線上の点の表現を導入することによって、 Algorithm 3 および Algorithm 4に対する D P Aへの対策が提案されている。 Algorithm 3および Algorithm 4に対して RPCを施したものを Algorithm 5およぴ Algorithm 6と して示す。 R PCで表現された楕円曲線上の点はダッシュ (prime) (') 付きの 変数で示されている。
く Algoritlim5: Binary Method (MSB, add-and-double-always, RPC))
T'[2] := RPC(Q)
T'[0]:=T'[2]
for i = n-2 downto 0 {
T'[0] :=ECDBL(T'[0])
T'[l] := ECADD( T'[0〗, T'[2] )
T'[0] :=T'[di]
}
R T'[0]
ここで、 Τ' [0]、 Τ' [1] および Τ, [2] は一時的変数であり、 dは η ビットのスカラー値であり、 d iは d中の i番目の LSBである。 "—" は RP C表現からの逆変換を示している。
図 3は、 01に示されているような暗 "^化 Z復号ュニットまたはプロセッサに よつて実行される Algorithm 5のフロー図を示している。 図 4は、 Algorithm 5 を実装したブロック図を示している。
図 3を参照すると、 ステップ 302において、 プロセッサは R PC変換した点 Qの座標の値をレジスタ T [2] に代入する。 ステップ 304において、 プロセ ッサはレジスタ T [2] の値をレジスタ T [0] に代入する。 ステップ 306は 変数 i = (n— 1) , (n— 2) , . . . 0に対するループ処理である。 ステツ プ 306中のステップ 308において、 プロセッサはレジスタ Τ [0] の値を Ε CDBL演算 (点の 2倍算) してその 2倍値をレジスタ Τ [0] に代入する。 ス テツプ 310において、 プロセッサはレジスタ Τ [0] とレジスタ Τ [2] の値 を ECADD演算 (点の加算) してその加算値をレジスタ Τ [1] に代入する。 ステップ 312において、 プロセッサは鍵の i番目のビットの値 d iの値に従つ てレジスタ T [d i] の値をレジスタ T [0] に代入する。 ステップ 312はァ ドレス · ビット DPAの標的になる。 ステップ 314において、 プロセッサは i = i— 1とセットする。 その後、 手順はステップ 308に戻る。 i = (n— 1) , (n~2) , . . . 0についてステップ 306を実行した後、 ステップ 316 において、 プロセッサはレジスタ T [0] の値を R PC逆変換して出力する。
<Algorithm6: Binary Method (LSB, add-and-double-always, RPC))
T'[0] := O
T'[2] :=RPC(Q)
for i = 0 upto n-1 {
T'[l] := ECADD( T'[0], T'[2] )
T*[2] := ECDBL(T'[2])
Τ'ΓΟΙ := T*[di]
}
R <~ T'[0]
ここで、 T' [0] 、 T, [1] および T' [2] は一時的変数であり、 dは n ビットのスカラー値であり、 d iは d中の i番目の LSBである。 " " は RP C表現からの逆変換を表している。
図 5は、 図 1に示されているような暗号化 7復号ュ二ットまたはプロセッサに よつて実行される Algorittim 6のフロー図を示している。 図 6は、 Algorithm 6 を実装したプロック図を示している。
図 5を参照すると、 ステップ 502において、 プロセッサは 0点の座標の値を レジスタ T [0] に代入する。 ステップ 504において、 プロセッサは RPC変 換した点 Q座標値をレジスタ T [2] に代入する。 ステップ 506は変数 i = 0 , 1, . . . (n— 1) に対するループ処理である。 ステップ 506中のステツ プ 508において、 プロセッサはレジスタ T [0] と T [2] の値を ECADD 演算してその加算値をレジスタ T [1] に代入する。 ステップ 510において、 プロセッサはレジスタ T [2] の値を ECDB L演算してその 2倍値をレジスタ T [2] に代入する。 ステップ 512において、 プロセッサは鍵の i番目の LS Bの値 d iの値に従ってレジスタ T [d i] の値をレジスタ T [0] に代入する 。 ステップ 512はァドレス · ビット DPAの標的になる。 ステップ 514にお いて、 プロセッサは i = i +1とセットする。 その後、 手順はステップ 508に 戻る。 i =0, 1, . . . (n— 1) についてステップ 506を実行した後、 ス テツプ 516において、 プロセッサはレジスタ T [0] の値を RPC逆変換して 出力する。
Algorithm 5および Algorithm 6を用いて、 S P Aおよび D P Aを防止するこ とができることが、 Coron 99に述べられている。 同様の効果をもつ方式として は、 S P Aを防止するモンゴメリ 'ラダー (Montgomery-Ladder) と RPCの 双方を用いる方法が、 T. Izu, and T. Takagi, "A Fast Parallel Elliptic Curve Multiplication Resistant against Side Channel Attacks", PKC 2002, LNCS 2274, pp.280-296, Springer-Verlag, 2002. (Izu-Takagl)において提案されている 。 これは、 アド'アンド ·ダブノレ ·オールウェイズを用いたバイナリ 'メソッド
(Algorithm 3および Algorithm 4) の代わりに S P A対策を施したモンゴメリ •ラダーと呼ばれるスカラー倍算を用いるのが特徴である。 モンゴメリ ·ラダー では、 スカラー倍算 R=dQにおいて、 常に ECADD演算とECDBL演算を 行うことにより、 差が 1 Qとなるような 2点の計算を行う。 SPA対策を施した モンゴメリ 'ラダーと R p cを使用したスカラー倍算を Algoiitiim7として示す
(Algorithm?: Montgomery-Laader (SPA-co nterineasure, PC))
T'[0] := RPC(Q)
T'[l] := ECDBL(T'[0])
for i = n-2 downto 0 {
T'[2] = ECDBL(T'[di])
T'[l] = ECADD(T'[0]} T'[l])
T'[0〗 = T'[2-di]
T'[l] = T'[l+di] #
}
R― T'[0]
ここで、 T, [0] 、 Τ, [1] および Τ' [2] は一時的変数であり、 dは η ビットのスカラー値であり、 d iは d中の i番目の LSBである。 "—" は RP C表現からの逆変換を示している。
図 7は、 図 1に示されているような暗号化/復号ュニットまたはプロセッサに よって実行される Algorithm 7のフロー図を示している。 図 8は、 Algorithm 7 を実装したプロック図を示している。
図 7を参照すると、 ステップ 702において、 プロセッサは RPC変換した点 Qの座標の値をレジスタ T [0] に代入する。 ステップ 704において、 プロセ ッサは、 レジスタ T [0] の値を ECDBL演算してその 2倍値をレジスタ T [ 1] に代入する。 ステップ 706は変数 i = (η-2) , (η— 1) . . . 0に 対するループ処理である。 ステップ 706中のステップ 708において、 プロセ ッサは鍵の i番目の LSBの値 d iに従ってレジスタ T [d i] の値を ECDB L演算してその加算値をレジスタ T [2] に代入する。 ステップ 710において
、 プロセッサはレジスタ T [0] と Τ [1] の値を ECADD演算してレジスタ T [1] に代入する。 ステップ 712において、 プロセッサは鍵の i番目の LS Bの値 d iに従ってレジスタ T [2-d i] の値をレジスタ T [0] に代入する 。 ステップ 714において、 プロセッサは鍵の i番目の L SBの値 d iに従って レジスタ T [1 +d i] の値をレジスタ丁 [1] に代入する。 ステップ 708、 712および 714はァドレス ·ビット DP Aの標的になる。 ステップ 716に おいて、 プロセッサほ i = i一 1とセットする。 その後、 手順はステップ 708 に戻る。 i = (n— 2) , (n— 1) . . . 0についてステップ 706を実行し た後、 ステップ 718において、 プロセッサはレジスタ T [0] の値を RPC逆 変換して出力する。
R P Cと同様の効果を持つ方式として M. Joye, and C. Tymen, "Protections against differential analysis for elliptic curve ciyptography", CHES 2001, LNCS 2162, pp.377- 390, Springer-Verlag, 2001. ( J TO 1) において提案されたランダム化曲線 Randomized Curve (RC) 法がある。 RCは、 R P Cと同様に乱数を用いた点 の表現を用いることによる DPA対策である。 RCの適用方法は R P Cと同じで ある。 アルゴリズム Algorithm 5〜Algoritlim 7につレ、て R P Cの代わりに R C を用いたものを、 ", " を付加して Algorithm 5'〜^ 0!¾111117'として示す。 な お、 RCで表現された楕円曲線上の点は (" ) 付の変数で表す。
(Algorithm5': Binary Method (MSB, add-and-double-always, RC))
T"[2] :=RC(Q)
T"[0] :=T"[2]
for i = n-2 downto 0 {
T"[0] := ECDBL(T"[0])
T"[l] := ECADD( T"[0], [2] )
T"[0] :=T"[di]
}
R― T'[0]
ここで、 T" [0] 、 T" [1] および T,, [2] は一時的変数であり、 dは n ビットのスカラー値であり、 d iは d中の i番目の LSBである。 " " は RP
c表現からの逆変換を表している。
図 4は、 Algorithm 5'のプロック図をも示している。
<Algorit m6': Binary Method (LSB, add-and-double-always, RC)〉
T"[0] :=0
T"[2]:=RC(Q)
for i = 0 upto n-1 {
T"[l] := ECADD( T"[0], T"[2] )
[2] :=ECDBL(T"[2])
T"[0] :=T"[di]
}
R― T"[0]
ここで、 T" [0] 、 T" [1] および T" [2] は一時的変数であり、 dは n ビットのスカラー値であり、 d iは d中の i番目の LSBである。 " "は RC表 現からの逆変換を示している。
図 6は、 Algorithm 6'を実装したプロック図をも示している。
(Algorithm 7': Montgomery-Ladder (SPA-countermeasure, RC)>
T'[0]:=RC(Q)
T"[l] :=ECDBL(T"[0])
for i = n-2 aownto 0 \
T'[2] :=ECDBL(T"[di]) …氺
T"[l] := ECADD( T,'[0], T"[l] )
T"[0] :=r[2-di] ·→
[l] :=T"[l+di] ···#
}
R― T,[0]
ここで、 T" [0] 、 T" [1] および!:" [2] は一時的変数であり、 dは n ビットのスカラー値であり、 d iは d中の ί番目の LSBである。 "—" は RC 表現からの逆変換を示して 、る。
図 8は、 Algorithm 7,を実装したプロック図をも示している。
前述のように、 スカラー倍算 R= d Qの実現法には Algorithm 1 および Algorithm 2以外にウインドウ ·メソッドと呼ばれる方法も存在する。 例えば 4 ビットのウィンドウ .メソッドは、 初期処理として Qの 0 15倍を計算し、 そ の結果をテープノレとして持っておき、 秘密鍵を 4ビット ·ウィンドウ単位で処理 する。 次の Algorithm 8は 4ビットのウィンドウ 'メソッドの最も基本的なァ ルゴリズムである。
<Algorithm8: Window Method (4-bits)>
W[0] = 0
W[l] = Q
W[2] =ECDBL(Q)
f or i = 3 pto 15 {
W[i]=ECADD(W[i-l], Q)
}
R = WK.lin-4]
for i = n-5 downto 0 step -4 {
R = ECDBL(R)
R = ECDBL(R)
R = ECDBL(R)
R = ECDBL(R)
R = ECADD( R, )
}
ここで、 dは nビットのスカラー値であり、 説明を簡単にするために、 nは 4の 倍数と仮定する。 また、 d i 3は、 d中の iビット目から (i一 3) ビット目 までの 4ビットの値とする。 W [i] はウィンドウ 'メソッドで使用されるテー プルである。
点のスカラー倍算に Algorithm 8が使用される場合、 dのビット値に応じて 行われたり行われなかつたりするような演算は無レ、。 従って、 ウィンドウ 'メソ ッドは、 バイナリ 'メソッドとは異なり、 一般に SPAに対して安全であるとい われている。 し力 し、 ウィンドウ 'メソッドは、 バイナリ 'メソッドと同様に D
PAに対して安全でなく、 Coron 99 の手法で解析可能であるが、 バイナリ ·メ ソッドと同様にウィンドウ ·メソッドの DPA対策も RPCや RCが有効である ことが知られている。 次の Algorithm 9および Algorithm 9'は、 Algorithm 8に 対して R PCおよび RCを施したものである。
く Algorithms Window Method (4-bit, RPC))
W'[0] = O
W'[1]=EPC(Q)
W'[2]=ECDBL(W[1])
for i = 3 upto 15 {
W'[iJ = ECADD(W'[i-l], W[l])
}
w'u
for i二 n-5 downto 0 step -4 {
R' := ECDBL( R' )
R':=ECDBL(R')
R':=ECDBL(R')
R' := ECDBL( R')
R' := ECADD( R', W'U ) … *
}
R ^ R'
ここで、 dは nビットのスカラー値であり、 説明を簡単にするために、 nは 4の 倍数と仮定する。 また、 (! 卜 3は、 d中の iビット目から (i— 3) ビット目 までの 4ビットの値とする。 R, 、 Q, 、 T' [0] および Τ, [1] は一時 的変数であり、 W, [i] はウィンドウ ·メソッドで使用されるテープノレであり 、 "—"は R PC表現からの逆変換を示している。
く Algorithms': Window Method (4-bit, RPC)>
W"[0] = 0
W"[l] = RC(Q)
W"[2] = ECDBL(W"[1])
W 200
for i = 3 upto 15 {
W"[i]=ECADD(W"[i-l]) W"[l])
}
R":= W" [ .
for i = n-5 downto 0 step -4 {
" := ECDBL(R")
R" := ECDBL( R" )
R" :=ECDBL(R")
R" :=ECDBL( ")
R" := ECADD( R", W" .3] ) … *
}
R— R'
ここで、 dは nビットのスカラー値であり、 説明を簡単にするために、 nは 4の 倍数と仮定する。 また、 d i, i—3は、 d中の iビット目から (i— 3) ビット目 までの 4ビットの値とする。 R"、 Q" 、 T" [0] および T [1] は一時的 変数であり、 W" [ i ] はウィンドウ♦メソッドで使用されるテーブルであり、 "―" は RC表現からの逆変換を示している。
図 9および 10は、 図 1に示されているような暗号化/復号ュ二ットまたはプ 口セッサによって実行される Algorithm 9およぴ Algorithm 9'のフロー図を示 している。 図 11および 12は、 Algorithm 9および Algorithm 9'を実装したブ ロック図を示している。
図 9および 10を参照すると、 ステップ 902において、 プロセッサは 0点の 座標 iS:をテープノレ W [0] に代入する。 ステップ 904において、 プロセッサは R PC変換した点 Qの座標値をテーブル W [1] に代入する。 ステップ 906に おいて、 プロセッサはテーブル W [1] の値を E CD B L演算してテーブル W [ 2] に代入する。 ステップ 908は変数 i =3, 4, . . . 15に対するループ 処理である。 ステップ 910において、 プロセッサはテーブル" W [ i— 1] と W [1] の値を ECADD演算して W [ i] に代入する。 ステップ 912において 、 プロセッサは i == i + 1とセットする。 ステップ 914において、 プロセッサ
は、 鍵の: n— 1, -2, . . . n— 4ビット目の値 dn— n— 4に従ってテ一 プル W idn_lt n一 J の値を Rに代入する。
ステップ 916は変数 i = (n— 5) , (n— 6) , . . . 0に対するループ 処理である。 ステップ 916中のステップ 918は 4回反復ループ処理である。 ステップ 920において、 プロセッサはレジスタ Rの値を ECDBL演算して R に代入する。 ステップ 920は 4回繰り返される。 ステップ 922において、 プ 口セッサは鍵の i〜 ( i一 3) ビット目の値 d 3に従ってテーブル W [d s i一 3] の値とレジスタ Rの値を EC ADD演算してその加算値をレジスタ に 代入する。 ステップ 922はアドレス ·ビット DPAの標的になる。 ステップ 9 24において、 プロセッサは i = i—4とセットする。 その後、 手順はステップ 918に戻る。 i = (n—5) , (n— 6) , . . . 0についてステップ 924 を実行した後、 ステップ 926において、 プロセッサはレジスタ Rの値を RPC 逆変換して出力する。
従来、 Algorithm 5〜 Algorithm 7および Algoritiim 5'〜 Algorithm T、 Algorithm 9およぴ Algorithm 9'を用いれば、 S P Aおよび D P Aに対して安全 であると考えられて!/ヽた。 しかし、 K, Itoh, T. Izu, and M. Takenaka "Address- bit Differential Power Analysis of Cryptographic Schemes OK-ECDH and OK-ECDSA", Cryptographic Hardware and Embedded Systems (CHES2002), Pre-proceeding, pp.129- 143 (以下、 I I T 02という) で Algorithm 7を解析し て求める手法が発表された。 通常の DP A (データビット DPA(data-bit DPA) ) は、 データの変ィヒがもたらす消費電力に注目するのに対して、 このアドレス ' ビット DP A (address-bit DPA) は、 アドレスの変ィ匕がもたらす消費電力に注 目した解析手法である。
例えば、 Algorithm7において、 *の演算 dでは、 d iの値に応じて、 T' [ 0] が使用されるかまたは T, [1] が使用されるかが決定される。 従って、 Ε CDBL演算で使用されるデータが格納されているアドレスは d iと相関関係を 有する。 同様のことが #で示された演算においても生じている。 アドレス 'ビッ ト D P Aでは、 その関係を利用して秘密鍵情報 dを解析可能としている。
文献 I I TO 2では、 モンゴメリ 'ラダー (Algorithm7) に対して、 ァドレ
ス ·ビット D P Aを行っているが、 同様の解析は、 Algorithm 5、 Algorithm 6 および Algorithm 5'〜Algorithm 7'に対しても適用可能である。 Algorithm 9お よび Algorithm 9*でも *で示された演算において、 秘密鍵情報 dの値と使用す るテーブルとが強い相関関係を有するので、 同様の攻撃が可能であると考えられ る。 そのためアドレス · ビット D P Aを用いれば、 Algorithm 5〜7および Algorithm 5'〜Algorithm 7\ Algorithm 9〜 Algorithm 9'ίま D P Aに対して安 全であるとはいえない。
I I T O 2には、 アドレス♦ビット D P Aへの対策について述べられている。 I I T O 2で述べられているのは、 Algorithm 5〜 Algorithm 7に対して Coron 99や Messages 99で提案されてレ、るェクスポーネント ·プラインデイング ( exponent-blinding) 、 C. Clavier, and M. Joye, "Universal exponentiation algorithm - A first step towards provable SPA-resistance -", Cryptographic Hardware and Embedded Systems (CHES2001), Lecture Notes in Computer Science vol. 2162, Springer-Verlag, pp.300-308 (以下、 C J 0 1という) にお ヽて提案されているェクスポーネント 'スプリツティング (exponent-splitting ) 、 .J. Yajima, K. Itoh, Μ, Takenaka, and N, Torii "DPA contermeasure by improving the window method", Cryptographic Hardware and Embedded Systems (CHES2002), Pre-proceeding, pp.304-319 (以下、 Y I T T 0 2という ) において提案されているオーバラップ'ウィンドウ法 (overlapped window method) 等のスカラー値をランダムに変ィヒさせる手法を適用することである。
しかし、 これらの手法は、 その手法単独で S P A対策、 データ ·ビット D P A 対策およびアドレス ·ビット D P A対策であるので、 既に S P A対策とデータ · ビット D P A対策済みの Algorithm 5~Algorithm 7に適用するには無駄が多い 。 特にこれらの手法を適用すると、 楕円曲線上の点の加算および 2倍算を、 適用 前と比較して余分に処理しなければならず、 処理オーバーへッドが大きくなる欠 点がある。
発明者たちは、 アドレス 'ビット D P Aに対して安全な耐タンパ性の点のスカ ラー倍算を実現することの必要性 (ニーズ) を認識した。
本発明の 1つの目的は、 秘密鍵の推定を困難にし、 暗号処理の安全性を高める
P T/JP2002/013269
ことである。
本発明の別の目的は、 効率的な耐タンパ性の点のスカラー倍算を実現すること である。
本発明のさらに別の目的は、 アドレス . ビット D P Aに対して効率的で安全な 耐タンパ性の点のスカラー倍算を実現することである。
発明の概要
本発明の特徴によれば、 喑号装置 (は秘密鍵を用いて楕円曲線暗号処理を行う 。 その暗号装置は、 楕円曲線上の点のスカラー倍の演算手段と、 複数のデータ格 納領域を有する格納手段と、 或る値のビット 'シーケンスと乱数とに従って、 ス 力ラー倍の演算ごとにその演算手段に結合すべきその複数のデータ格納領域の中 の 1つのァドレスを決定するァドレス決定手段と、 を具えている。
本発明の別の特徴によれば、 情報処理装置において使用するための、 秘密鍵を 用いて楕円曲線暗号処理を行うプログラム (これは記憶媒体に格納されていても よい) は、 楕円曲線上の点のスカラー倍を求めるステップと、 或る値 dのビット • シーケンスと乱数とに従って、 スカラー倍の演算ごとに使用される複数のデー タ格納領域の中の 1つのァドレスを決定するステップと、 を実行させるよう動作 可能である。
本発明のさらに別の特徴によれば、 情報処理装置において、 秘密鏈を用いて楕 円曲線暗号処理を行う方法は、 楕円曲線上の点のスカラー倍を求めるステップと 、 或る値 dのビット 'シーケンスと乱数とに従って、 スカラ一倍の演算ごとに使 用される複数のデータ格納領域の中の 1つのァドレスを決定するステップと、 を 含んでいる。
本発明によれば、 秘密鍵の推定を困難にし、 暗号処理の安全性を高めることが でき、 効率的な耐タンパ性の点のスカラー倍算を実現できる。
全ての図面を通して、 同じ参照番号は同じ要素を示している。
図面の簡単な説明
図 1は、 暗号デバイスにおける秘密鍵を用いた暗号処理を例示している。
図 2は、 ウィンドウ法を用いた点のスカラー倍算 V = d Aのアルゴリズムを示 している。
図 3は、 暗号化 Z復号ュニッ トまたはプロセッサによって実行される
Algorithm 5のフロー図を示している。
図 4は、 Algorithm 5を実装したプロック図を示してレヽる。
図 5は、 暗号化 Z復号ュニットまたはプロセッサによって実行される
Algorithm 6のフロ一図を示している。
図 6は、 Algorithm 6を実装したプロック図を示している。
図 7は、 暗号化 Z復号ュニッ トまたはプロセッサによって実'行される
Algorithm 7のフロー図を示している。
図 8は、 Algorithm 7を実装したブロック図を示している。
図 9および 1 0は、 暗号化 Z復号ユニットまたはプロセッサによって実行され る Algorithm 9および Algorithm 9'のフロー図を示している。
図 1 1および 1 2は、 Algorithm 9および Algorithm 9'を実装したプロック図 を示している。
図 1 3 Aおよび Bは、 本発明の原理を説明するのに役立つ。
図 1 4は、 暗号化 復号ュニットまたはプロセッサによって実行される
Algorithm 10および Algorithm 10'のフロー図を示している。
図 1 5は、 Algorithm 10および Algorithm 10'を実装したプロック図を示して いる。
図 1 6は、 暗号化/復号ュニットまたはプロセッサによって実行される Algorithm 11およぴ Algorithm 1Γのフロー図を示している。
図 1 7は、 Algorithm 11および Algorithm 11'を実装したプロック図を示して いる。
図 1 8は、 暗号化ノ復号ユニットまたはプロセッサによって実行される Algorithm 12および Algorithm 12'のフロー図を示している。
図 1 9は、 Algorithm 12および Algorithm 12'を実装したプロック図を示して いる。
図 2 0および 2 1は、 暗号化 Z復号ュニットまたはプロセッサによって実行さ れる Algorithm 13および Algorithm 13'のフロー図を示している。
図 2 2および 2 3は、 Algorithm 13および Algorithm 13'を実装したプロック
図を示している。
図 2 4は、 各アルゴリズムの関係を示している。
好ましい実施形態の説明
前述の Algorithm 7において *で示された演算では、 変数レジスタ T, [ x ] の格納アドレスが秘密鍵 d iに依存して変化することが問題である。 即ち、 d i = 0に対してレジスタ T, [ 0 ] 力 d i = 1に対してレジスタ Τ, [ 1 ] が それぞれ使用されるので、 アドレス 'ビット D Ρ Αで鍵を解析して求めることが できる。 従って、 d iの値と使用される変数 T, [ 0 ] および Τ, [ 1 ] がラン ダムに変化すればァドレス ·ビット D P Αで解析できなくなる。 #で示された演 算についても、 同様である。
図 1 3 Aおよび Bは、 本発明の原理を説明するのに役立つ。 入力値が、 鍵のビ ット ·シーケンスに従って制御されるスィツチを介して 2つのレジスタ 1および 2に供給されて格納される。 図 1 3 Aに示されているように、 通常は、 鍵のビッ ト *シーケンスに従って、 値を格納すべきレジスタの順序が入れ替わったり、 使 用するレジスタが決定されるのを防止するために、 本発明によれば、 図 1 3 Bに 示されているように、 演算すべき値を格納するレジスタを鍵の値だけで決定せず に、 鍵と乱数の X O R (排他的論理和) をとることによってアドレス 'ビット D P Aに対して高い耐性を有する暗号処理を実現する。
次に、 本発明の実施形態による、 Algorithm 7 と Algorithm 7'において *と #で示された演算に乱数を導入したアルゴリズムを次の Algorithm 10および Algorithm 10'として示す。 本宪明による変数をランダムに決定する方法を、 ラ ンダマイズド .アドレシング (Randomized Addressing ( R A) 、 乱数ァドレ ス制御) と呼ぶ。
(AlgorithmlO: Montgomery-Ladder (SPA-countermeasure, RPC, RA)〉 T'[rn-1]:= RPC(Q)
T'tl- ^J - ECDBLCT'tr^J)
for i = n-2 downto 0 {
T'[2] := EGDBL( Τ'[(¾ Θ ri+1] ) … *
T'[l] := ECADD( T'[0], T'[l] )
T*[0] '^ ^ά,Θτ,)] '··#
Τ'[1] :=1'[1+((¾«^)] '··#
}
R― T'[r0]
ここで、 T' [0] 、 Τ' [1] および Τ, [2] は一時的変数、 dは ηビット のスカラー値で、 d iは dの i番目の LSBの値を表す。 1-は nビットの乱数を 表し、 r;は rの i番目の L S Bの値である。 "—" は RP C表現からの逆変換 を示している。
(Algorithmic)': Montgomery-Ladder (SPA-countermeasure, RC, RA)>
T"[r„.1] :=RP(Q)
for i = n-2 downto 0 {
T" [2] := ECDBL( T [<¾ Φ riH] ) ― *
:= ECADD( T"[0], T"[l] )
T"[0] - ^ά,Φτ^] — #
T" [リ ㊉ ] — #
}
ここで、 T" [0] 、 Τ " [1] および Τ " [2] は一時的変数であり、 dは nビットのスカラー値であり、 d;は dの i番目の L SB (最下位ビット) の値 である。 rは nビットの乱数で、 r iは rの i番目の LSBの値とする。 また、 "―" は RC表現からの逆変換を表す。
Algorithm 10および Algorithm 10'において、 *の部分はィンデッタスが秘密 鍵 dと乱数 rの XORなので、 変数レジスタ T' [0] と T, [1] のどちらが 使用されるかは秘密鍵 dに無関係に決定される。 同様に、 #で示された演算は、 インデックスそのものが秘密鍵 dと無関係である。 従って、 Algorithmic)およ ぴ Algorithm 10,はァドレス ·ビット D P Aに対して安全である。 オーバへッド について、 AlgorithmlOおよび Algorithm 10'における楕円曲線上の点の演算 ( ECDBLと; ECADD) の数は、 Algorithm7および Algorithm 7,の場合と等
しく、 増カ卩した部分は *で示された演算におけるインデックスだけである。 従つ て、 Algorithmic)および Algorithm 10'におけるオーバへッドは僅かである。 図 14は、 図 1に示されているような暗号化 Z復号ユニットまたはプロセッサ によって実行される Algorithm 10および Algorithm 10'のフロー図を示してい る。 Algorithm 10および Algorithm 10'の違いは R P Cと R Cのうちのいずれを 使用するかだけである。
図 14を参照すると、 ステップ 1402において、 プロセッサは、 &数 rの n — 1番目のビットの値 r n— に従って、 RPCまたは RC変換した点 Qの座標値 をレジスタ T [r n_J に代入する。 ステップ 1404において、 プロセッサは 、 乱数 rの n— 1番目の LSBの値 r n— iに従って、 レジスタ T [1 - r n_x} の値を ECDBL演算してその 2倍値をレジスタ T [r n_J に代入する。 ステ ップ 1402および 1404は初期化のための処理である。
ステップ 1406は、 ステップ 1408〜 1416を含んでおり、 変数 i = n 一 2, . . . 0に対するループ処理である。
ステップ 1408において、 プロセッサは、 乱数]:の i +1番目の L SBの値 r i +1と鍵の i番目の LSBの値 d iに従って、 レジスタ T [d i ] の値を EC DBL演算してレジスタ T [2] に代入する。 ステップ 1410において、 プロ セッサは、 レジスタ T [0] および T [1] の値を EC ADD演算してその加算 値をレジスタ T [1] に代入する。 ステップ 1412において、 プロセッサは、 乱数 rの i番目の L S Bの値 r ,と鍵の i番目の L S Bの値 d iに従ってレジス タ T [2 - (d i®r 5) ] の値を ECDBL演算してその 2倍値をレジスタ T [0] に代入する。 ステップ 1414において、 プロセッサは、 乱数 rの i番目 の LSBの値 r iと鍵の i番目の LS Bの値 d iの値に従って、 レジスタで [1 + (d i ®r j) ] の値をレジスタ T [1] に代入する。 ステップ 1416にお いて i = i— 1とセットする。 i =n— 2, . . . 0についてステップ 1406 のループ処理が終了したとき、 手順はステップ 1418に進む。
ステップ 1418において、 プロセッサは、 レジスタ T [0] の値を RPCま たは RC逆変換して出力する。
図 15は、 Algorithm 10および Algorithm 10'を実装したプロック図を示して
いる。 図 15、 および後で説明する図 17、 19、 22および 23において、 " T [x] " は一時的変数格納レジスタを表し、 "W[x]', はテーブル変数格納レ ジスタを表し、 "X" は格納レジスタのアドレスであり、 "d" および "d, " は秘密情報を格納するレジスタであり、 " r " は乱数 rを格納するレジスタを表 し、 "R" は出力値を格納するレジスタを表し、 E CD BL演算は楕円曲線上の 点の 2倍算演算処理プロックを表し、 "ECADD" は楕円曲線上の点の加算演 算処理プロックを表し、 "SEL" は複数の入力のうち 1つを選択し出力する セレクタを表し、 "D" は 1つの入力を複数の出力先のうちどれかを選択して出 力するデマルチプレクサを表し、 "RNG" は乱数生成プロックを表し、 "Θ" はビット毎の XOR演算を表し、 ">>1" は 1ビット右シフト演算を表し、 " Δ" は NOT演算を表す。
暗号化装置は、 さらに、 プロセッサ 62と、 ROMのようなプログラム ·メモ リ 64とを含んでいる。 プロセッサ 62は、 メモリ 64に格納されているプログ ラムに従って図 15に示された諸要素を制御する。 代替構成として、 プロセッサ 62は、 その諸要素に対応する機能を実現するメモリ 64中のプログラムを実行 することによってその諸要素を実現してもよい。
図 15のブロック図のフローを次に示す。
Step 01: T[0]=T[1]= RPC(Q) or RC(Q) ]
Step 02: T[2] = ECDBL(T[0]) 初期化処理
Step 03: T[l- rn.J = T[2]
Step 04: r = RNGO 秘密鍵のランダム化処理
Step 05: d' = d θ ((d ® r)» 1)
Step 06: i = n - 2
Step 07: T[2] = ECDBL( T[d'J ) 点の 2倍算、 加算処理
Step 08: T[l] = ECADD( T[0], T [リ)
Step 09: T[0]=T[2-rJ データのコピ
Step 10: T[l] = T[l+rJ
Step ll:i = i- 1
Step 12:if(i>=0)go Step 07
Step 13: E=逆変換 (T[do Θ r0 ]) }逆変換 ·出力
Algorithm 10および Algorithm 10'とこのフローの相違は以下の通りである。 一 初期化処理において、 Algorithm 10および Algorithm 10'では Qと E C D B
L (Q) を代入するレジスタ T [0] および T [1] を、 r n— によって直接指 定したが、 このフローでは、 いったんレジスタ T [0] および T [1] の両方に Qを代入し、 ECDB Lを計算してレジスタ T [2] に格納して、 次いでレジス タ T [2] の値をコピーして格納するべきレジスタを r。一 によって決定すると いう、 3つのステップで構成している。
― Algorithm 10およぴ Algorithm 10'ではノレ一プ処理内で秘密鍵 dと乱数 rの 演算を行っているが、 このフローでは、 ループ処理の前の秘密鍵のランダム化と ループ処理後の逆変換において秘密鍵 dと乱数 rの XOR演算を行う。 これに伴 つて、 点の 2倍算とデータのコピーにおけるィンデッタスが変更される。 Algorithm 10および Algorithm 10'とこのフローの処理は等価であり、 同系変換 可能である。
― 図 15では、 このフローにおけるインデックスの計算をセレクタで構成して いる。 これはハードウェアで表現するためであり、 共に効果は同じである。 図 8の Algorithm 7およぴ Algorithm 7'のプロック図と比較すると、 図 15 の Algorithm 10および Algorithm 10'のブロック図では、 秘密鍵のランダム化 処理が増加するのみで、 楕円曲線上の点の加算と 2倍算の回数は変わらない。 次の Algorithm 11および Algorithm 1 は、 それぞれ Algorithm 5および Algorithm 5'に対して同様のアドレス ·ビット D P A対策を施したものである。
(Algoritlimll: Binary Method (MSB, add-and-double-always, PC, RA)> T'[2]:=:EPC(Q)
for i = n-2 downto 0 {
T'[ri+1]:=ECDBL(T'[ri+1])
T'[l- ri+J := ECADD( T'[ri+1], T'[2] )
}
R― T'[r0]
ここで、 T" [0] 、 T ,, [1] および Τ " [2] は一時的変数であり、 ま ηビットのスカラー値であり、 d;は dの i番目の LS Βの値である。 rは nビ ットの乱数であり、 r は rの i番目の LSBの値とする。 また、 " " は RP C表現からの逆変換を表す。
(Algorithmll': Binary Method (MSB, add-and-double-always, RC, RA)> T"[2] :=RC(Q)
T"[rn-1] :=T"[2]
for i二 n-2 downto 0 {
T¾+1] :=ECDBL(r[ri+J)
T"[l- ri+1] := ECADD( T"[ri+1], T'[2] )
}
R― T"[r0]
ここで、 T,, [0] 、 T " [1] および T " [2] は一時的変数であり、 dは nビットのスカラー値であり、 d iは dの i番目の LSBの値である。 rは nビ ットの乱数であり、 r iは rの i番目の LSBの値とする。 また、 " " は RC 表現からの逆変換を表す。
図 16は、 図 1に示されているような暗号化 Z復号ュニットまたはプロセッサ によって実行される Algorithm 11および Algorithm 1Γのフロー図を示してい る。
ステップ 1502において、 プロセッサは、 RPCまたは RC変換した点 Qの 座標値をレジスタ T [2] にイ弋入する。 ステップ 1504において、 プロセッサ は、 乱数 rの n— 1番目の LSBの値 r に従ってレジスタ T [2] の値を E CDBL演算してその 2倍値をレジスタ T [rn— Jに代入する。 ステップ 15 02および 1504は初期化のための処理である。
ステップ 1506は、 ステップ 1508〜 1514を含んでおり、 変数 i = n 一 2, . . . 0に対するループ処理である。
ステップ 1508において、 プロセッサは、 乱数 rの i +1番目の LSBの値
r i +1に従ってレジスタ T [r ί + 1] の値を E CD BL演算してその 2倍値をレ ジスタ T [r ί + 1] に代入する。 ステップ 1510において、 プロセッサは、 乱 数 rの i +1番目の LSBの値 r i +1に従ってレジスタ T [r i + と T [2] の値を ECDBL演算してその 2倍値をレジスタ Τ [1一 r i+1] に代入する。 ステップ 1512において、 プロセッサは、 乱数 の i +1番目おょぴ i番目の LSBの値 r iぉょぴ r i+1と鍵の i番目の LSBの値 d iに従って、 レジスタ T [d Ϊ ΘΓ の値を ECDBL演算してその 2倍値をレジスタ f [0] に 代入する。 i =n— 2, . . . 0についてステップ 1516のループ処理が終了 したとき、 手順はステツプ 1516に進む。
ステップ 1516において、 プロセッサは乱数 rの 0番目の L SBの値 r。に 従って、 レジスタ T [r 0] の値を RPCまたは RC逆変換して出力する。
図 17は、 Algorithm 11および Algorithm 1Γを実装したプロック図を示して いる。
暗号化装置は、 さらに、 プロセッサ 62と、 ROMのようなプログラム 'メモ リ 64とを含んでいる。 プロセッサ 62は、 メモリ 64に格納されているプログ ラムに従って図 17に示された諸要素を制御する。 代替構成として、 プロセッサ 62は、 その諸要素に対応する機能を実現するメモリ 64中のプログラムを実行 することによってその諸要素を実現してもよい。
図 17のブロック図のフローを次に示す。
〈実施例 2のフロー: Algorithmic 11'の実施例フロー〉
Step 01: T[0] = T[l] = Τ[2] = RPC(Q) or RC(Q) ]"初期化処理
Step 04: i = n - 2
Step 05: T[ri+1] =
Step 07: TfrJ = T[d*] }·データのコピ'
Step 08:i = i- 1
Step 09: if ( i >= 0 ) go Step 05
Step 10: R =逆変換 (T[do Φ r0 ]) ]·逆変換 ·出力 このフローは Algorithm 11および Algorithm 1Γのどちらにも適応可能であ る。 Algorithm 11および Algorithm 11'とこのフローの相違は以下の通りである 一 Algorithm 11および Algorithm 11'では、 初期化処理において r n— iによつ て指定されるレジスタ T [ 0 ] および Τ [ 1 ] のどちらかを Qで初期化するが、 このフローでは、 レジスタ Τ [ 0 ] および Τ [ 1 ] の両方を Qで初期匕する。 ― Algorithm 11および Algorithm 1Γでは、 コピーにおいて秘密鍵 dと乱数 r の演算を行うが、 このフローではループ処理の前の!^鍵のランダム化処理とル ープ処理後の逆変換処理において秘密鍵 dと乱数 rの X O R演算を行う。 これに 伴って、 データのコピーにおけるインデックスが変更される。 Algorithm 11お よぴ Algorithm 11'とこのフローの処理は等価であり、 同系変換可能である。 一 図 1 7では、 このフローにおけるインデックス計算をセレクタとデマルチプ レクサで実現している。 これはハードウェアで表現するためであり、 共に効果は 同じである。
図 4の Algorithm 5および Algorithm 5'のブロック図と比較すると、 図 1 7 の Algorithm 11および Algorithm 1Γのプロック図では.、 秘密鍵のランダム化 処理、 データの出力先を選択するセレクタ、 およぴデマルチプレクサが増加する のみで、 楕円曲線上の点の加算と 2倍算の回数は変わらない。
次の Algorithm 12およぴ Algorithm 12'は、 それぞれ Algorithm 6および Algorithm 6'に対して同様のァドレス ·ビット D P A対策を施したものである。
(Algorithml2: Binary Method (LSB, add-and-double-always, RPC, RA)> T'[r0] := O
T'[2] := RPC(Q)
for i = 0 upto n- 1 {
T'[l - rj := ECADD( T'[rJ, T'[2] )
T'[2] := ECDBL( T'[2] )
T'[ri+1] := T'[di ® rJ
}
R― T'[rJ
ここで、 T" [0] 、 T " [1] および Τ " [2] は一時的変数であり、 dは nビットのスカラー値であり、 d iは dの i番目の L S Bの値である。 rは (n + 1) ビットの乱数であり、 r は rの i番目の LSBの値とする。 また、 "― " は R PC表現からの逆変換を表す。
(Algorithmic: Binary Method (LSB, add-and-double-always, RC, RA)) T"[r0]:=O '
'[2] := RPC(Q)
for i = 0 upto n-1 {
T,[l - rj := ECADD( T"[rJ, [2] )
T"[2] :=ECDBL(T"[2])
}
R― T"[rJ
ここで、 T" [0] 、 T " [1] および T " [2] は一時的変数であり、 dは nビットのスカラー値であり、 d;は dの i番目の LSBの値である。 rは (n + 1) ビットの乱数であり、 r;は rの i番目の LS Bの値とする。 また、 " " は RC表現からの逆変換を表す。
図 18は、 図 1に示されているような暗号化 Z復号ユニットまたはプロセッサ によって実行される Algorithm 12およぴ Algorithm 12'のフロー図を示してい る。
ステップ 1602において、 プロセッサは、 乱数 rの 0番目の LSBの値 r。 に従って 0 (ゼロ) 点の座標をレジスタ T [r 0] に代入する。 ステップ 1 60 4において、 プロセッサは、 R PCまたは RC変換した点 Qの座標値をレジスタ T [2] に代入する。 ステップ 1602および 1604は初期化のための処理で ある。
ステップ 1606は、 ステップ 1608〜1616を含んでおり、 変数 i =0 , . . . n—1に対するループ処理である。
ステップ 1608において、 プロセッサは、 乱数 rの i番目の LS Bの値 r i
に従ってレジスタ T [r J および T [2] の値を ECDBL演算してレジスタ T [1 - r J に代入する。 ステップ 1 610において、 プロセッサは、 レジス タ T [2] の値を ECDBL演算してレジスタ T [2] に代入する。 ステップ 1 612において、 プロセッサは、 乱数 rの iおよび i +1番目の LSBの値 I" ; および r i +1と鍵の i番目の L S Bの値 d iに従ってレジスタ T [d i Θ Γ J +1 ] の値をレジスタ Τ [r に代入する。 ステップ 1614において、 プロセ ッサは、 i = i +1とセットする。 i =0, . . . n— 1についてステップ 16 06のループ処理が終了したとき、 手順はステップ 1616に進む。
ステップ 1 616において、 プロセッサは、 乱数 rの n番目の LS Bの値 r n に従って、 レジスタ T [r J の値を RPCまたは RC逆変換して出力する。 . 図 19は、 Algorithm 12および Algorithm 12'を実装したプロック図を示して いる。
暗号化装置は、 さらに、 プロセッサ 62と、 ROMのようなプログラム ·メモ リ 64とを含んでいる。 プロセッサ 62は、 メモリ 64に格納されているプログ ラムに従って図 19に示された諸要素を制御する。 代替構成として、 プロセッサ 62は、 その諸要素に対応する機能を実現するメモリ 64中のプログラムを実行 することによってその諸要素を実現してもよい。
図 19のプロック図のフローを次に示す。
Step 05: i = 0
Step 06: T[l-
Step 08: T[ri+1] = T[d'] ·データのコピ'
Step 09: i = i + 1
Ste 10: if ( iく = n-1 ) go Step 06
Step 11: R=逆変換 (T[do@r0]) ·逆変換 ·出力
このフローは Algorithm 12および Algorithm 12'のどちらにも適応可能であ る。 Algorithm 12および Algorithm 12'とこのフローの相違は以下の通りである 一 Algorithm 12および Algorithm 12'では、 初期化処理において r n— によつ て指定されるレジスタ T [ 0 ] および T [ 1 ] のどちらかを 0に初期化している が、 このフローでは、 レジスタ T [ 0 ] および T [ 1 ] の两方を 0に初期化する
― Algorithm 12および Algorithm 12'では、 コピー処理にお 、て秘密鍵 dと乱 数 rの演算を行う力 S、 このフローではループ処理の前の秘 鍵のランダム化とル ープ処理後の逆変換において秘密鍵 dと乱数 rの X O R演算を行う。 これに伴つ て、 データのコピーにおけるィンデックスが変更ざれる。 Algorithm 12およぴ Algorithm 12'とこのフローの処理は等価であり、 同系変換可能である。
一 図 1 9においては、 このフローにおけるインデックス計算をセレクタとデマ ルチプレクサで構成している。 これはハードウェアで表現するためであり、 共に 効果は同じである。
図 6の Algorithm 6および Algorithm 6'のブロック図と比較すると、 図 1 9 の Algorithm 12および Algorithm 12'のプロック図では、 秘密讎のランダム化 とデータの出力先を選択するセレクタ、 およぴデマルチプレクサが増加するのみ で、 楕円曲線上の点の加算と 2倍算の回数は変わらない。
次の Algorithm 13および Algorithm 13'は、 それぞれ Algorithm 9および Algorithm 9'に対して同様のァドレス ·ビット D P A対策を施したものである。
(Algorithml3: Window Method (4-bit, RPC, RA)〉
W'[r] = 0
W[i er] = RPC(Q)
W'[2 © r] = ECDBL(W'[1 Θ r])
for i = 3 upto 15 {
W[i e r = ECADD(W'[(i-l) Θ r], W'[l Θ r])
}
W 200
for i = n-5 downto 0 step -4{
R':=ECDBL(R')
R' := ECDBL( R' )
R':=ECDBL(R')
R':-ECDBL(R')
R' := ECADD( R,, ν'|¾.3 Φ r] ) *
}
R R'
ここで、 dは nビットのスカラー値であり、 説明を簡単にするために、 nは 4の 倍数と仮定する。 また、 <^, 卜3は、 dの iビット目のから i一 3ビット目のま での 4ビットの値とする。 R, 、 Q, 、 T' [0] および Τ, [1] は一時的変 数であり、 W' [ i ] はウィンドウ♦メソッドで使用されるテーブルを表し、 r は 4ビットの乱数であり、 "—"は EPC表現からの逆変換を表す。
<Algorithml3': Window Method (4-bit, RC, RA))
W"[r] = O
W"[ier]=RC(Q)
W"[2 ®r]= ECDBL(W"[1 Θ r])
f or i = 3 upto 15 {
W"[i ®r]= ECADD(W"[(i-l) ® r], W'[l Θ r])
}
R":=W '[も- 1>n.4 ]
for i = n-5 downto 0 step -4 {
R":=ECDBL(R")
R" :=ECDBL( R")
R":=ECDBL(R")
R" :=EGDBL(E")
R" := ECADD( R", W '[ 3 ΘΓ]) ト *
}
R ^ R'
ここで、 dは nビットのスカラー値であり、 説明を簡単にするために、 nは 4の 倍数と仮定する。 また、 (! は、 d中の iビット目から (i—3) ビット目 までの 4ビットの値とする。 R" 、 Q" 、 T" および T" [1] は一時的変数で あり、 W" [i] はウィンドウ ·メソッドで使用されるテーブルを表し、 rは 4 ビットの乱数である。 "―" は R C表現からの逆変換を表す。
図 20および 21は、 図 1に示されているような暗号化 Z復号ュニットまたは プロセッサによって実行される Algorithm 13および Algorithm 13'わフロー図 を示している。
ステップ 1702において、 プロセッサは、 乱数値に従って 0点の座標値をテ 一プル W [r] に代入する。 ステップ 1704において、 プロセッサは、 乱数値 rに従い R PCまたは RC変換した点 Qの座標値を W [ΙΦΓ] に代入する。 ス テツプ 1706において、 乱数値 rに従って W [ΙΦιτ] の値を ECDBL演算 し W [2®r] に代入する。
ステップ 1 708は、 ステップ 1710〜1 712を含んでおり、 変数 i =3 , . . . 15に対するループ処理である。
ステップ 1710において、 プロセッサは、 乱数値 rに従って W [ ( i - 1) ΘΓ ] および W [ i ΘΓ] の値を EC ADD演算して W [ i ] に代入する。 ステ ップ 1712において、 プロセッサは、 i = i +lとセットする。 ステップ 1 7 02〜: 1712は、 テーブル作成のための処理である。 i =3, . . . 15につ いてステップ 1708のループ処理が終了したとき、 手順はステップ 1714に 進む。
ステップ 1714において、 プロセッサは、 乱数値 rと鍵 n— 1, . . . n— 4番目の値 n— 4の値に従って、 W [dn一 η_4θτ] の値を Rに代入する 。 ステップ 1714は、 初期化のための処理である。
ステップ 1716は、 ステップ 1718〜1724を含んでおり、 変数 i =n — 5, . . . 0に対するループ処理である。
ステップ 1718は 4回繰り返されるループ処理である。 ステップ 1 720に おいて、 プロセッサはレジスタ Rの値を ECDBL演算して Rに代入する。 ステ ップ 1722において、 乱数値 rと鍵の i, . · . i—3番目のビットの値に従
つて W [d i, ;_3ΦΓ ] の値と Rの値を EC ADD演算して Rに代入する。 ステ ップ 1 724において、 プロセッサは i = iー4とセットする。 i =n—5, . . . 0についてステップ 1 71 6の処理が終了したとき、 手 fiはステップ 1 72 6に進む。'
ステップ 1 726において、 プロセッサは、 レジスタ Rの値を RPCまたは R C逆変換して出力する。 。
図 22および 23は、 Algorithm 13および Algorithm 13'を実装したブロック 図を示している。
暗号ィ匕装置は、 さらに、 フ。口セッサ 62と、 ROMのようなプログラム 'メモ リ 64とを含んでいる。 プロセッサ 62は、 メモリ 64に格納されているプログ ラムに従って図 22および 23に示された諸要素を制御する。 代替構成として、 プロセッサ 62は、 その諸要素に対応する機能を実現するメモリ 64中のプログ ラムを^^することによってその諸要素を実現してもよい。
図 22および 23のプロック図のフローを次に表す。
Step 01: r = RNGO }乱数生成処理
Step 02: W[08r] =O
Step 03: W[l Φ r] = RPC(Q) or RC(Q)
Step 04: W[2 @ ] = ECDBL( W[l Θ r] )
Step 05: i = 3 テーブル作成処理
Step 06: W[i ΘΓ]= ECADD( W[(i - 1) Φ r], W[l Θ r] )
Ste 07:i=i+ 1
Step 08: if ( i >= 15 ) go Step 06
StepO9:R = W[du.1I1.40r] }初期化処理
Ste 10: i = n-5
Step 11:R = ECDBL(R)
Step 12:R = ECDBL(R)
Step 13:R = ECDBL(R) 点の 2倍算、 加算処理
Step 14:R = ECDBL(R)
Step 15: R ECADD( R, Θ r] )
Step 16:i = i-4
Step 17:if(i>=0)go Ste 11
Ste 18: R =逆変換 ( R ) 変換 ·出力
このフローは Algorithm 13および Algorithm 13'のどちらにも適応可能であ る。 Algorithm 13および Algorithm 13'とこのフローの相違は以下の通りである
― 図 20およぴ 2 1においては、 このフローにおけるインデックス計算をセレ クタとデマルチプレクサで構成している。 これはハードウエアで表現するためで あり、 共に効果は同じである。
図 1 1の Algorithm 9および Algorithm 9'のプロック図と比較すると、 図 2 2および 23のプロック図では、 インデックスとランダム値の X O Rが增加する のみで、 楕円曲線上の点の加算と 2倍算の回数は変わらない。
本発明による Algorithmll、 Algorithmll\ Algorithm 12および Algorithm 12,、 Algorithm 13および Algorithm 13'は、 Algorithm 10および Algorithm 10, と同様に、 アドレス ·ビット DP Aに対して安全である。 オーバへッドについて も、 Algorithm 11、 Algorithm 12 およひ Algorithm 10' "^Algorithm 12,、 Algorithl3、 およぴ Algorithm 13'は、 Algorithms, Algorithm 6 およぴ Algorithm 〜 Algorithm 7 Algorithm 9、 および Algorithm 9'と比較すると 、 楕円曲線上の点の演算 (ECDBLと ECADD) の数は等しく、 増加したの はインデックスの計算だけである。 そのため、 Algorithm 8と同様、 本対策によ る、 オーバへッドはほぼ無視できるものである。
図 24は、 各アルゴリズムの関係を示している。
以上説明した本発明の実施彤態の手法を用いることにより Algorithm 5- Algorithm 7 およぴ Algorithm 5'- Algorithm 7、 Algorithm 9 および Algorithm 9'に対してァドレス ·ビット DP A対策を施すことができる。 その場 合のオーバヘッドは、 スカラー値の計算 (シフトと XOR) のみで、 楕円曲線上 の点の演算は生じない。 楕円曲線暗号の処理の場合、 点の演算以外の処理量はほ ぼ無視できるので、 本手法を用いた場合のオーバへッドは無視できる。 Coron 99、 Messerges 99、 C J 01および Y I TT02の方法を使用された場合、
楕円曲線上の点の演算は 5 %〜15%程度だけ増加するので、 本発明の手法は速 度低下を起こすことなくアドレス ·ビット DPA対策を実現でき、 SPA、 デー タ ·ビット DP Aおよびァドレス ·ビット DP Aに対して安全な楕円曲線暗号実 装方法を提供できる。
以上説明した実施形態は典型例として挙げたに過ぎず、 その変形およびバリエ ーションは当業者にとって明らかであり、 当業者であれば本発明の原理および請 求の範囲に記載した発明の範囲を逸脱することなく上述の実施形態の種々の変形 を行えることは明らかである。