発明の背景
暗号方式には一般的に公開鍵暗号方式と共通鍵暗号方式が含まれる。公開鍵暗号方式は、暗号化と復号に異なる鍵(キー)を用いる。典型的には、公開鍵を用いて平文(plaintext)が暗号化され、秘密鍵を用いて暗号文(ciphertext)が復号され、それによって暗号文が安全に送信できる。または、秘密鍵を用いて平文が暗号化され、公開鍵を用いて暗号文が復号され、それによって平文を暗号化したユーザが識別される。図1は、スマートカードのような暗号デバイスにおける秘密鍵を用いた暗号化/復号の構成の例を示している。図1において、暗号デバイスは、その内部の暗号化/復号ユニットにおいて周知の形態で秘密鍵を用いて入力平文/暗号文メッセージを処理して出力暗号文/平文メッセージを供給する。
公開鍵暗号の1つのタイプである楕円曲線暗号(Elliptic Curve Cryptography)のためのプロセッサにおいては、スカラー倍算が行われる。点のスカラー倍算は、スカラー値d、および楕円曲線上の点Aに対して、V=dAを満たす点Rを求める。例えば、楕円曲線暗号におけるDiffe-Hellman(ディッフィー・ヘルマン)鍵配送において、V=dAで表される点が秘密鍵dを用いてスカラー倍算で生成される。
バイナリ・メソッド(binary method)を用いた点のスカラー倍算は、2進値dについて、MSB(最上位ビット)からLSB(最下位ビット)まで順に点の2倍算と点の加算を実行することによって、Vを求める。例えばd=21=24+22+20=(10101)2についてVを求めるとき、最初のMSB“1”に対して初期値V=O(無限遠点)にAの加算を実行してV=Aを生成し、次のビット“0”に対してそのVに2倍算を実行してV=A×2を生成し、次のビット“1”に対してそのVに2倍算とAの加算を実行してV=(A×2)×2+Aを生成し、次のビット“0”に対してそのVに2倍算を実行してV=((A×2)×2+A)×2を生成し、LSB“1”に対してそのVに2倍算とAの加算を実行して、V=(((A×2)×2+A)×2)×2+A=(24+22+20)Aを生成する。
効率的な指数剰余演算のためのウィンドウ法(window method)が知られている。ウィンドウ法は、Alfred J. Menezes他の“HANDBOOK OF APPLIED CRYPTOGRAPHY”(CRC press), pp. 615, Algorithm 14.82に記載されている。
Alfred J. Menezes et al."HANDBOOK OF APPLIED CRYPTOGRAPHY"(CRC press), pp. 615, Algorithm 14.82
図2は、ウィンドウ法を用いて楕円曲線暗号における点のスカラー倍算V=dAを求めるためのアルゴリズムを示している。ここで、dは2進表現でd=(du−1,du−2,...d0)2と表記される。そのアルゴリズムはC言語で記述されている。
図2のアルゴリズムを説明する。まず、0<x<2kの全ての整数xに対して、W[x]=xAを満たす値WのテーブルWを作成する。テーブルWの作成後、uビットの値d=(du−1,du−2,...d0)2を分割してm個のkビット・シーケンスbi=(dik+k−1,...dik)2(i=0,1,2,...)を生成する。ここで、m=ceiling(u/k)。そのbiに対する値W[bi](=biA)をテーブルWでルックアップすることによる加算V=V+W[bi]と、V=2kVで表される2k倍算とを、上位シーケンスbm−1から下位シーケンスb0へ順に実行することによって、V=dAを求める。
暗号解読(分析)またはタンパ(tamper)は、暗号文のような入手可能な情報から秘密鍵を含めた秘密情報を推定する。暗号解読の1つである電力解析攻撃が、1998年にPaul Kocher(ポール コーチャ)によって考案された。この電力解析攻撃は、スマートカードのような暗号デバイスに含まれる暗号プロセッサに相異なる入力データを与え、例えば図1に示されているようにオシロスコープ等を用いてその処理中における時間に対する消費電力の変化を測定し、統計的に充分な数の消費電力変化の曲線を収集しそれを解析し、それによって暗号プロセッサ内部の鍵情報を推定する。これは、共通鍵暗号と公開鍵暗号の双方に適用できる。
電力解析攻撃には、単純電力解析(以下、SPAという)(Simple Power Analysis)および電力差分攻撃(以下、DPAという)(Differential Power Analysis)が含まれる。SPAは暗号プロセッサにおける1つの消費電力変化曲線の特徴から秘密鍵の推定を行う。DPAは相異なる多数の消費電力変化曲線の差分(以下、電力差分曲線という)を用いて解析することによって秘密鍵の推定を行う。一般的にはDPAの方が強力である。
例えばDES(Data Encryption Standard)およびAES(Advanced Encryption Standard)等の共通鍵暗号に対するSPAおよびDPAが、Paul Kocher, Joshua Jaffe, and Benjamin Jun,“Differential Power Analysis”in proceedings of Advances in Cryptology-CRYPTO’99,Lecture Notes in Computer Science, vol. 1666, Springer-Verlag, 1999, pp. 388-397に記載されている。
Paul Kocher, Joshua Jaffe, and Benjamin Jun,"Differential Power Analysis"in proceedings of Advances in Cryptology-CRYPTO’99,Lecture Notes in Computer Science, vol. 1666, Springer-Verlag, 1999, pp. 388-397
例えばRSA暗号および楕円曲線暗号等の公開鍵暗号に対するSPAおよびDPAが、例えば、Thomas S. Messerges, Ezzy A. Dabbish and Robert H. Sloan“Power Analysis Attacks of 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という)に記載されている。
Thomas S. Messerges, Ezzy A. Dabbish and Robert H. Sloan"Power Analysis Attacks of Modular Exponentiation in Smartcards"Cryptographic Hardware and Embedded Systems(CHES’99),Lecture Notes in Computer Science Vol. 1717,Springer-Verlag,pp. 144-157
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
楕円曲線暗号法は、楕円曲線の離散対数問題に基づくもので、N. Koblitz (“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 Crypto'85, Lecture Notes in Computer Science, 218 (1986), Springer-Verlag, pp 417-426)により提案された。
N. Koblitz ("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 Crypto'85, Lecture Notes in Computer Science, 218 (1986), Springer-Verlag, pp 417-426)
楕円曲線暗号は、楕円曲線上の点のスカラー倍算に基づく演算である。例えば、公開鍵点Pは、公開されたベースポイントと呼ばれる楕円曲線上の点Gに対して、スカラー値である秘密鍵dを用いた楕円曲線上の点のスカラー倍算P=dGで計算された楕円曲線上の点である。また、楕円曲線上のDiffie-Helman鍵共有を用いた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等)を楕円曲線上の点を表すものとする。
〈Algorithm1: Binary Method (MSB)〉
ここで、Tは一時的変数、dはnビットのスカラー値で、diはdのi番目のLSB(最下位ビット)(下位i番目のビット)の値である。
〈Algorithm2: Binary Method (LSB)〉
ここで、レジスタT[0]およびT[1]は一時的変数であり、dはnビットのスカラー値であり、diはdのi番目のLSBの値である。
点のスカラー倍算にAlgorithm 1およびAlgorithm 2を使用したとき、*で示された演算はd中のビット値に応じて実行されたりされなかったりする。SPAは、この性質を利用して秘密鍵dを解析する。多くの実験からECDBL演算とECADD演算の電力波形は、特徴的で容易に区別可能であることが知られている。従って、プロセッサにおけるAlgorithm 1およびAlgorithm 2の演算において発生する電力波形を測定することによって、その波形からECDBLとECADDの演算の順序と回数が変化するので、秘密鍵dを解析して求めることができる。
このSPAへの対策として、アド・アンド・ダブル・オールウェイズ(add-and-double-always、常に加算と2倍算を行う)と呼ばれる方法がCoron 99で提案されている。この方法は、常にECADD演算とECDBL演算が交互に行われるので、SPAに対して安全である。次に、Algorithm 1およびAlgorithm 2に対してアド・アンド・ダブル・オールウェイズを施したものをAlgorithm 3およびAlgorithm 4として示す。
〈Algorithm3: Binary Method (MSB, add-and-double-always)〉
ここで、レジスタT[0]およびT[1]は一時的変数であり、dはnビットのスカラー値であり、diはdのi番目のLSBの値である。
〈Algorithm4: Binary Method (LSB, add-and-double-always)〉
ここで、レジスタT[0]、T[1]およびT[2]は一時的変数であり、dはnビットのスカラー値であり、diはdのi番目のLSBの値である。
Algorithm 3およびAlgorithm 4を用いてSPAを防止することができる。しかし、Coron 99には、これらのアルゴリズムに対するDPAについても述べられており、Algorithm 3およびAlgorithm 4ではDPAで秘密鍵を解析して求めることができることが示されている。さらに、Coron 99には、ランダム化射影座標Randomized Projective Coordinates(RPC)と呼ばれる、乱数を使用した楕円曲線上の点の表現を導入することによって、Algorithm 3およびAlgorithm 4に対するDPAへの対策が提案されている。Algorithm 3およびAlgorithm 4に対してRPCを施したものをAlgorithm 5およびAlgorithm 6として示す。RPCで表現された楕円曲線上の点はダッシュ(prime)(')付きの変数で示されている。
〈Algorithm5: Binary Method (MSB, add-and-double-always, RPC)〉
ここで、T’[0]、T’[1]およびT’[2]は一時的変数であり、dはnビットのスカラー値であり、diはd中のi番目のLSBである。“←”はRPC表現からの逆変換を示している。
図3は、図1に示されているような暗号化/復号ユニットまたはプロセッサによって実行されるAlgorithm 5のフロー図を示している。図4は、Algorithm 5を実装したブロック図を示している。
図3を参照すると、ステップ302において、プロセッサはRPC変換した点Qの座標の値をレジスタT[2]に代入する。ステップ304において、プロセッサはレジスタT[2]の値をレジスタT[0]に代入する。ステップ306は変数i=(n−1),(n−2),...0に対するループ処理である。ステップ306中のステップ308において、プロセッサはレジスタT[0]の値をECDBL演算(点の2倍算)してその2倍値をレジスタT[0]に代入する。ステップ310において、プロセッサはレジスタT[0]とレジスタT[2]の値をECADD演算(点の加算)してその加算値をレジスタT[1]に代入する。ステップ312において、プロセッサは鍵のi番目のビットの値diの値に従ってレジスタT[di]の値をレジスタT[0]に代入する。ステップ312はアドレス・ビットDPAの標的になる。ステップ314において、プロセッサはi=i−1とセットする。その後、手順はステップ308に戻る。i=(n−1),(n−2),...0についてステップ306を実行した後、ステップ316において、プロセッサはレジスタT[0]の値をRPC逆変換して出力する。
〈Algorithm6: Binary Method (LSB, add-and-double-always, RPC)〉
ここで、T’[0]、T’[1]およびT’[2]は一時的変数であり、dはnビットのスカラー値であり、diはd中のi番目のLSBである。“←”はRPC表現からの逆変換を表している。
図5は、図1に示されているような暗号化/復号ユニットまたはプロセッサによって実行されるAlgorithm 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]の値をECDBL演算してその2倍値をレジスタT[2]に代入する。ステップ512において、プロセッサは鍵のi番目のLSBの値diの値に従ってレジスタT[di]の値をレジスタT[0]に代入する。ステップ512はアドレス・ビットDPAの標的になる。ステップ514において、プロセッサはi=i+1とセットする。その後、手順はステップ508に戻る。i=0,1,...(n−1)についてステップ506を実行した後、ステップ516において、プロセッサはレジスタT[0]の値をRPC逆変換して出力する。
Algorithm 5およびAlgorithm 6を用いて、SPAおよびDPAを防止することができることが、Coron 99に述べられている。同様の効果をもつ方式としては、SPAを防止するモンゴメリ・ラダー(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-Takagi)において提案されている。これは、アド・アンド・ダブル・オールウェイズを用いたバイナリ・メソッド(Algorithm 3およびAlgorithm 4)の代わりにSPA対策を施したモンゴメリ・ラダーと呼ばれるスカラー倍算を用いるのが特徴である。モンゴメリ・ラダーでは、スカラー倍算R=dQにおいて、常にECADD演算とECDBL演算を行うことにより、差が1Qとなるような2点の計算を行う。SPA対策を施したモンゴメリ・ラダーとRPCを使用したスカラー倍算をAlgorithm7として示す。
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
〈Algorithm7: Montgomery-Ladder (SPA-countermeasure, RPC)〉
ここで、T’[0]、T’[1]およびT’[2]は一時的変数であり、dはnビットのスカラー値であり、diはd中のi番目のLSBである。“←”はRPC表現からの逆変換を示している。
図7は、図1に示されているような暗号化/復号ユニットまたはプロセッサによって実行されるAlgorithm 7のフロー図を示している。図8は、Algorithm 7を実装したブロック図を示している。
図7を参照すると、ステップ702において、プロセッサはRPC変換した点Qの座標の値をレジスタT[0]に代入する。ステップ704において、プロセッサは、レジスタT[0]の値をECDBL演算してその2倍値をレジスタT[1]に代入する。ステップ706は変数i=(n−2),(n−1)...0に対するループ処理である。ステップ706中のステップ708において、プロセッサは鍵のi番目のLSBの値diに従ってレジスタT[di]の値をECDBL演算してその2倍値をレジスタT[2]に代入する。ステップ710において、プロセッサはレジスタT[0]とT[1]の値をECADD演算してレジスタT[1]に代入する。ステップ712において、プロセッサは鍵のi番目のLSBの値diに従ってレジスタT[2−di]の値をレジスタT[0]に代入する。ステップ714において、プロセッサは鍵のi番目のLSBの値diに従ってレジスタT[1+di]の値をレジスタT[1]に代入する。ステップ708、712および714はアドレス・ビットDPAの標的になる。ステップ716において、プロセッサはi=i−1とセットする。その後、手順はステップ708に戻る。i=(n−2),(n−1)...0についてステップ706を実行した後、ステップ718において、プロセッサはレジスタT[0]の値をRPC逆変換して出力する。
RPCと同様の効果を持つ方式としてM. Joye, and C. Tymen, “Protections against differential analysis for elliptic curve cryptography”, CHES 2001, LNCS 2162, pp. 377-390, Springer-Verlag, 2001.(JT01)において提案されたランダム化曲線Randomized Curve(RC)法がある。RCは、RPCと同様に乱数を用いた点の表現を用いることによるDPA対策である。RCの適用方法はRPCと同じである。アルゴリズムAlgorithm 5〜Algorithm 7についてRPCの代わりにRCを用いたものを、“’”を付加してAlgorithm 5’〜Algorithm 7’として示す。なお、RCで表現された楕円曲線上の点は(”)付の変数で表す。
M. Joye, and C. Tymen, "Protections against differential analysis for elliptic curve cryptography", CHES 2001, LNCS 2162, pp. 377-390, Springer-Verlag, 2001.
〈Algorithm5’: Binary Method (MSB, add-and-double-always, RC)〉
ここで、T”[0]、T”[1]およびT”[2]は一時的変数であり、dはnビットのスカラー値であり、diはd中のi番目のLSBである。“←”はRC表現からの逆変換を表している。
図4は、Algorithm 5’のブロック図をも示している。
〈Algorithm6’: Binary Method (LSB, add-and-double-always, RC)〉
ここで、T”[0]、T”[1]およびT”[2]は一時的変数であり、dはnビットのスカラー値であり、diはd中のi番目のLSBである。"←"はRC表現からの逆変換を示している。
図6は、Algorithm 6’を実装したブロック図をも示している。
〈Algorithm7’: Montgomery-Ladder (SPA-countermeasure, RC)〉
ここで、T”[0]、T”[1]およびT”[2]は一時的変数であり、dはnビットのスカラー値であり、diはd中のi番目のLSBである。“←”はRC表現からの逆変換を示している。
図8は、Algorithm 7’を実装したブロック図をも示している。
前述のように、スカラー倍算R=dQの実現法にはAlgorithm 1およびAlgorithm 2以外にウィンドウ・メソッドと呼ばれる方法も存在する。例えば4ビットのウィンドウ・メソッドは、初期処理としてQの0〜15倍を計算し、その結果をテーブルとして持っておき、秘密鍵を4ビット・ウィンドウ単位で処理する。次のAlgorithm 8は4ビットのウィンドウ・メソッドの最も基本的なアルゴリズムである。
〈Algorithm8: Window Method (4-bits)〉
ここで、dはnビットのスカラー値であり、説明を簡単にするために、nは4の倍数と仮定する。また、di,i−3は、d中のiビット目から(i−3)ビット目までの4ビットの値とする。W[i]はウィンドウ・メソッドで使用されるテーブルである。
点のスカラー倍算にAlgorithm 8が使用される場合、dのビット値に応じて行われたり行われなかったりするような演算は無い。従って、ウィンドウ・メソッドは、バイナリ・メソッドとは異なり、一般にSPAに対して安全であるといわれている。しかし、ウィンドウ・メソッドは、バイナリ・メソッドと同様にDPAに対して安全でなく、Coron 99の手法で解析可能であるが、バイナリ・メソッドと同様にウィンドウ・メソッドのDPA対策もRPCやRCが有効であることが知られている。次のAlgorithm 9およびAlgorithm 9'は、Algorithm 8に対してRPCおよびRCを施したものである。
〈Algorithm9: Window Method (4-bit, RPC)〉
ここで、dはnビットのスカラー値であり、説明を簡単にするために、nは4の倍数と仮定する。また、di,i−3は、d中のiビット目から(i−3)ビット目までの4ビットの値とする。R’、Q’、T’[0]およびT’[1]は一時的変数であり、W’[i]はウィンドウ・メソッドで使用されるテーブルであり、"←"はRPC表現からの逆変換を示している。
〈Algorithm9': Window Method (4-bit, RC)〉
ここで、dはnビットのスカラー値であり、説明を簡単にするために、nは4の倍数と仮定する。また、di,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点の座標値をテーブルW[0]に代入する。ステップ904において、プロセッサはRPC変換した点Qの座標値をテーブルW[1]に代入する。ステップ906において、プロセッサはテーブルW[1]の値をECDBL演算してテーブルW[2]に代入する。ステップ908は変数i=3,4,...15に対するループ処理である。ステップ910において、プロセッサはテーブルW[i−1]とW[1]の値をECADD演算してW[i]に代入する。ステップ912において、プロセッサはi=i+1とセットする。ステップ914において、プロセッサは、鍵のn−1,n−2,...n−4ビット目の値dn−1,n−4に従ってテーブルW[dn−1,n−4]の値をRに代入する。
ステップ916は変数i=(n−5),(n−6),...0に対するループ処理である。ステップ916中のステップ918は4回反復ループ処理である。ステップ920において、プロセッサはレジスタRの値をECDBL演算してRに代入する。ステップ920は4回繰り返される。ステップ922において、プロセッサは鍵のi〜(i−3)ビット目の値di,i−3に従ってテーブルW[di,i−3]の値とレジスタRの値をECADD演算してその加算値をレジスタRに代入する。ステップ922はアドレス・ビットDPAの標的になる。ステップ924において、プロセッサはi=i−4とセットする。その後、手順はステップ918に戻る。i=(n−5),(n−6),...0についてステップ924を実行した後、ステップ926において、プロセッサはレジスタRの値をRPC逆変換して出力する。
従来、Algorithm 5〜Algorithm 7およびAlgorithm 5’〜Algorithm 7’、 Algorithm 9およびAlgorithm 9'を用いれば、SPAおよびDPAに対して安全であると考えられていた。しかし、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 (以下、IIT02という) でAlgorithm 7を解析して求める手法が発表された。通常のDPA(データビットDPA(data-bit DPA))は、データの変化がもたらす消費電力に注目するのに対して、このアドレス・ビットDPA(address-bit DPA)は、アドレスの変化がもたらす消費電力に注目した解析手法である。
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
例えば、Algorithm7において、*の演算dでは、diの値に応じて、T’[0]が使用されるかまたはT’[1]が使用されるかが決定される。従って、ECDBL演算で使用されるデータが格納されているアドレスはdiと相関関係を有する。同様のことが#で示された演算においても生じている。アドレス・ビットDPAでは、その関係を利用して秘密鍵情報dを解析可能としている。
文献IIT02では、モンゴメリ・ラダー(Algorithm7)に対して、アドレス・ビットDPAを行っているが、同様の解析は、Algorithm 5、 Algorithm 6およびAlgorithm 5’〜Algorithm 7’に対しても適用可能である。Algorithm 9および Algorithm 9' でも*で示された演算において、秘密鍵情報dの値と使用するテーブルとが強い相関関係を有するので、同様の攻撃が可能であると考えられる。そのためアドレス・ビットDPAを用いれば、Algorithm 5〜7およびAlgorithm 5’〜Algorithm 7’、Algorithm 9〜Algorithm 9'はDPAに対して安全であるとはいえない。
IIT02には、アドレス・ビットDPAへの対策について述べられている。IIT02で述べられているのは、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 (CHES 2001), Lecture Notes in Computer Science vol. 2162, Springer-Verlag, pp.300-308(以下、CJ01という)において提案されているエクスポーネント・スプリッティング(exponent-splitting)、.J. Yajima, K. Itoh, M. Takenaka, and N, Torii “DPA countermeasure by improving the window method”, Cryptographic Hardware and Embedded Systems (CHES2002), Pre-proceeding, pp.304-319 (以下、YITT02という)において提案されているオーバラップ・ウィンドウ法(overlapped window method)等のスカラー値をランダムに変化させる手法を適用することである。
C. Clavier, and M. Joye, "Universal exponentiation algorithm - A first step towards provable SPA-resistance -", Cryptographic Hardware and Embedded Systems (CHES 2001), Lecture Notes in Computer Science vol. 2162, Springer-Verlag, pp.300-308
J. Yajima, K. Itoh, M. Takenaka, and N, Torii "DPA countermeasure by improving the window method", Cryptographic Hardware and Embedded Systems (CHES 2002), Pre-proceeding, pp.304-319
前述のAlgorithm 7において*で示された演算では、変数レジスタT’[x]の格納アドレスが秘密鍵diに依存して変化することが問題である。即ち、di=0に対してレジスタT’[0]が、di=1に対してレジスタT’[1]がそれぞれ使用されるので、アドレス・ビットDPAで鍵を解析して求めることができる。従って、diの値と使用される変数T’[0]およびT’[1]がランダムに変化すればアドレス・ビットDPAで解析できなくなる。#で示された演算についても、同様である。
図13Aおよび13Bは、本発明の原理を説明するのに役立つ。入力値が、鍵のビット・シーケンスに従って制御されるスイッチを介して2つのレジスタ1および2に供給されて格納される。図13Aに示されているように、通常は、鍵のビット・シーケンスに従って、値を格納すべきレジスタの順序が入れ替わったり、使用するレジスタが決定されるのを防止するために、本発明によれば、図13Bに示されているように、演算すべき値を格納するレジスタを鍵の値だけで決定せずに、鍵と乱数のXOR(排他的論理和)をとることによってアドレス・ビットDPAに対して高い耐性を有する暗号処理を実現する。
次に、本発明の実施形態による、Algorithm 7 とAlgorithm 7’において*と#で示された演算に乱数を導入したアルゴリズムを次のAlgorithm 10 およびAlgorithm 10’として示す。本発明による変数をランダムに決定する方法を、ランダマイズド・アドレシング(Randomized Addressing(RA)、乱数アドレス制御)と呼ぶ。
〈Algorithm10: Montgomery-Ladder (SPA-countermeasure, RPC, RA)〉
ここで、T’[0]、T’[1]およびT’[2]は一時的変数、dはnビットのスカラー値で、diはdのi番目のLSBの値を表す。rはnビットの乱数を表し、riはrのi番目のLSBの値である。“←”はRPC表現からの逆変換を示している。
〈Algorithm10’: Montgomery-Ladder (SPA-countermeasure, RC, RA)〉
ここで、T”[0]、T ”[1]およびT”[2]は一時的変数であり、dはnビットのスカラー値であり、diはdのi番目のLSB(最下位ビット)の値である。rはnビットの乱数で、riはrのi番目のLSBの値とする。また、“←”はRC表現からの逆変換を表す。
Algorithm 10およびAlgorithm 10’において、*の部分はインデックスが秘密鍵dと乱数rのXORなので、変数レジスタT’[0]とT’[1]のどちらが使用されるかは秘密鍵dに無関係に決定される。同様に、#で示された演算は、インデックスそのものが秘密鍵dと無関係である。従って、Algorithm10およびAlgorithm 10’はアドレス・ビットDPAに対して安全である。オーバヘッドについて、Algorithm10およびAlgorithm 10’における楕円曲線上の点の演算(ECDBLとECADD)の数は、Algorithm7およびAlgorithm 7’の場合と等しく、増加した部分は*で示された演算におけるインデックスだけである。従って、Algorithm10およびAlgorithm 10’におけるオーバヘッドは僅かである。
図14は、図1に示されているような暗号化/復号ユニットまたはプロセッサによって実行されるAlgorithm 10およびAlgorithm 10’のフロー図を示している。Algorithm 10およびAlgorithm 10'の違いはRPCとRCのうちのいずれを使用するかだけである。
図14を参照すると、ステップ1402において、プロセッサは、乱数rのn−1番目のビットの値rn−1に従って、RPCまたはRC変換した点Qの座標値をレジスタT[rn−1]に代入する。ステップ1404において、プロセッサは、乱数rのn−1番目のLSBの値rn−1に従って、レジスタT[1−rn−1]の値をECDBL演算してその2倍値をレジスタT[rn−1]に代入する。ステップ1402および1404は初期化のための処理である。
ステップ1406は、ステップ1408〜1416を含んでおり、変数i=n−2,...0に対するループ処理である。
ステップ1408において、プロセッサは、乱数rのi+1番目のLSBの値r
i+1と鍵のi番目のLSBの値diに従って、レジスタT[di]の値をECDBL演算してレジスタT[2]に代入する。ステップ1410において、プロセッサは、レジスタT[0]およびT[1]の値をECADD演算してその加算値をレジスタT[1]に代入する。ステップ1412において、プロセッサは、乱数rのi番目のLSBの値r
iと鍵のi番目のLSBの値diに従ってレジスタ
の値をECDBL演算してその2倍値をレジスタT[0]に代入する。ステップ1414において、プロセッサは、乱数rのi番目のLSBの値r
iと鍵のi番目のLSBの値diの値に従って、レジスタ
の値をレジスタ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”は出力値を格納するレジスタを表し、ECDBL演算は楕円曲線上の点の2倍算演算処理ブロックを表し、“ECADD”は楕円曲線上の点の加算演算処理ブロックを表し、“SEL”は複数の入力のうち1つを選択し出力するセレクタを表し、“D”は1つの入力を複数の出力先のうちどれかを選択して出力するデマルチプレクサを表し、“RNG”は乱数生成ブロックを表し、
はビット毎のXOR演算を表し、“>>1”は1ビット右シフト演算を表し、“△”はNOT演算を表す。
暗号化装置は、さらに、プロセッサ62と、ROMのようなプログラム・メモリ64とを含んでいる。プロセッサ62は、メモリ64に格納されているプログラムに従って図15に示された諸要素を制御する。代替構成として、プロセッサ62は、その諸要素に対応する機能を実現するメモリ64中のプログラムを実行することによってその諸要素を実現してもよい。
図15のブロック図のフローを次に示す。
Algorithm 10およびAlgorithm 10'とこのフローの相違は以下の通りである。
− 初期化処理において、Algorithm 10およびAlgorithm 10'ではQとECDBL(Q)を代入するレジスタT[0]およびT[1]を、rn−1によって直接指定したが、このフローでは、いったんレジスタT[0]およびT[1]の両方にQを代入し、ECDBLを計算してレジスタT[2]に格納して、次いでレジスタT[2]の値をコピーして格納するべきレジスタをrn−1によって決定するという、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 11’は、それぞれAlgorithm 5およびAlgorithm 5’に対して同様のアドレス・ビットDPA対策を施したものである。
〈Algorithm11: Binary Method (MSB, add-and-double-always, RPC, RA)〉
ここで、T”[0]、T ”[1]およびT”[2]は一時的変数であり、dはnビットのスカラー値であり、diはdのi番目のLSBの値である。rはnビットの乱数であり、riはrのi番目のLSBの値とする。また、“←”はRPC表現からの逆変換を表す。
〈Algorithm11’: Binary Method (MSB, add-and-double-always, RC, RA)〉
ここで、T”[0]、T ”[1]およびT”[2]は一時的変数であり、dはnビットのスカラー値であり、diはdのi番目のLSBの値である。rはnビットの乱数であり、riはrのi番目のLSBの値とする。また、“←”はRC表現からの逆変換を表す。
図16は、図1に示されているような暗号化/復号ユニットまたはプロセッサによって実行されるAlgorithm 11およびAlgorithm 11’のフロー図を示している。
ステップ1502において、プロセッサは、RPCまたはRC変換した点Qの座標値をレジスタT[2]に代入する。ステップ1504において、プロセッサは、乱数rのn−1番目のLSBの値rn−1に従ってレジスタT[2]の値をECDBL演算してその2倍値をレジスタT[rn−1]に代入する。ステップ1502および1504は初期化のための処理である。
ステップ1506は、ステップ1508〜1514を含んでおり、変数i=n−2,...0に対するループ処理である。
ステップ1508において、プロセッサは、乱数rのi+1番目のLSBの値r
i+1に従ってレジスタT[r
i+1]の値をECDBL演算してその2倍値をレジスタT[r
i+1]に代入する。ステップ1510において、プロセッサは、乱数rのi+1番目のLSBの値r
i+1に従ってレジスタT[r
i+1]とT[2]の値をADD演算してその加算値をレジスタT[1−r
i+1]に代入する。ステップ1502において、プロセッサは、乱数rのi+1番目およびi番目のLSBの値r
iおよびr
i+1と鍵のi番目のLSBの値diに従って、レジスタ
の値をECDBL演算してその2倍値をレジスタT[0]に代入する。i=n−2,...0についてステップ1506のループ処理が終了したとき、手順はステップ1516に進む。
ステップ1516において、プロセッサは乱数rの0番目のLSBの値r0に従って、レジスタT[r0]の値をRPCまたはRC逆変換して出力する。
図17は、Algorithm 11およびAlgorithm 11’を実装したブロック図を示している。
暗号化装置は、さらに、プロセッサ62と、ROMのようなプログラム・メモリ64とを含んでいる。プロセッサ62は、メモリ64に格納されているプログラムに従って図17に示された諸要素を制御する。代替構成として、プロセッサ62は、その諸要素に対応する機能を実現するメモリ64中のプログラムを実行することによってその諸要素を実現してもよい。
図17のブロック図のフローを次に示す。
〈実施例2のフロー:Algorithm11、11'の実施例フロー〉
このフローはAlgorithm 11およびAlgorithm 11'のどちらにも適応可能である。Algorithm 11およびAlgorithm 11'とこのフローの相違は以下の通りである。
− Algorithm 11およびAlgorithm 11'では、初期化処理においてrn−1によって指定されるレジスタT[0]およびT[1]のどちらかをQで初期化するが、このフローでは、レジスタT[0]およびT[1]の両方をQで初期化する。
− Algorithm 11およびAlgorithm 11'では、コピーにおいて秘密鍵dと乱数rの演算を行うが、このフローではループ処理の前の秘密鍵のランダム化処理とループ処理後の逆変換処理において秘密鍵dと乱数rのXOR演算を行う。これに伴って、データのコピーにおけるインデックスが変更される。Algorithm 11およびAlgorithm 11'とこのフローの処理は等価であり、同型変換可能である。
− 図17では、このフローにおけるインデックス計算をセレクタとデマルチプレクサで実現している。これはハードウェアで表現するためであり、共に効果は同じである。
図4のAlgorithm 5およびAlgorithm 5’のブロック図と比較すると、図17のAlgorithm 11およびAlgorithm 11'のブロック図では、秘密鍵のランダム化処理、データの出力先を選択するセレクタ、およびデマルチプレクサが増加するのみで、楕円曲線上の点の加算と2倍算の回数は変わらない。
次のAlgorithm 12およびAlgorithm 12’は、それぞれAlgorithm 6およびAlgorithm 6’に対して同様のアドレス・ビットDPA対策を施したものである。
〈Algorithm12: Binary Method (LSB, add-and-double-always, RPC, RA)〉
ここで、T”[0]、T ”[1]およびT”[2]は一時的変数であり、dはnビットのスカラー値であり、diはdのi番目のLSBの値である。rは(n+1)ビットの乱数であり、riはrのi番目のLSBの値とする。また、“←”はRPC表現からの逆変換を表す。
〈Algorithm12’: Binary Method (LSB, add-and-double-always, RC, RA)〉
ここで、T”[0]、T ”[1]およびT”[2]は一時的変数であり、dはnビットのスカラー値であり、diはdのi番目のLSBの値である。rは(n+1)ビットの乱数であり、riはrのi番目のLSBの値とする。また、“←”はRC表現からの逆変換を表す。
図18は、図1に示されているような暗号化/復号ユニットまたはプロセッサによって実行されるAlgorithm 12およびAlgorithm 12’のフロー図を示している。
ステップ1602において、プロセッサは、乱数rの0番目のLSBの値r0に従って0(ゼロ)点の座標をレジスタT[r0]に代入する。ステップ1604において、プロセッサは、RPCまたはRC変換した点Qの座標値をレジスタT[2]に代入する。ステップ1602および1604は初期化のための処理である。
ステップ1606は、ステップ1608〜1616を含んでおり、変数i=0,...n−1に対するループ処理である。
ステップ1608において、プロセッサは、乱数rのi番目のLSBの値r
iに従ってレジスタT[r
i]およびT[2]の値をECADD演算してレジスタT[1−r
i]に代入する。ステップ1610において、プロセッサは、レジスタT[2]の値をECDBL演算してレジスタT[2]に代入する。ステップ1612において、プロセッサは、乱数rのiおよびi+1番目のLSBの値r
iおよびr
i+1と鍵のi番目のLSBの値diに従ってレジスタ
の値をレジスタT[r
j+1]に代入する。ステップ1614において、プロセッサは、i=i+1とセットする。i=0,...n−1についてステップ1606のループ処理が終了したとき、手順はステップ1616に進む。
ステップ1616において、プロセッサは、乱数rのn番目のLSBの値rnに従って、レジスタT[rn]の値をRPCまたはRC逆変換して出力する。
図19は、Algorithm 12およびAlgorithm 12’を実装したブロック図を示している。
暗号化装置は、さらに、プロセッサ62と、ROMのようなプログラム・メモリ64とを含んでいる。プロセッサ62は、メモリ64に格納されているプログラムに従って図19に示された諸要素を制御する。代替構成として、プロセッサ62は、その諸要素に対応する機能を実現するメモリ64中のプログラムを実行することによってその諸要素を実現してもよい。
図19のブロック図のフローを次に示す。
このフローはAlgorithm 12およびAlgorithm 12'のどちらにも適応可能である。Algorithm 12およびAlgorithm 12'とこのフローの相違は以下の通りである。
− Algorithm 12およびAlgorithm 12'では、初期化処理においてrn−1によって指定されるレジスタT[0]およびT[1]のどちらかを0に初期化しているが、このフローでは、レジスタT[0]およびT[1]の両方を0に初期化する。
− Algorithm 12およびAlgorithm 12'では、コピー処理において秘密鍵dと乱数rの演算を行うが、このフローではループ処理の前の秘密鍵のランダム化とループ処理後の逆変換において秘密鍵dと乱数rのXOR演算を行う。これに伴って、データのコピーにおけるインデックスが変更される。Algorithm 12およびAlgorithm 12'とこのフローの処理は等価であり、同型変換可能である。
− 図19においては、このフローにおけるインデックス計算をセレクタとデマルチプレクサで構成している。これはハードウェアで表現するためであり、共に効果は同じである。
図6のAlgorithm 6およびAlgorithm 6’のブロック図と比較すると、図19のAlgorithm 12およびAlgorithm 12'のブロック図では、秘密鍵のランダム化と、データの出力先を選択するセレクタおよびデマルチプレクサが増加するのみで、楕円曲線上の点の加算と2倍算の回数は変わらない。
次のAlgorithm 13およびAlgorithm 13’は、それぞれAlgorithm 9およびAlgorithm 9’に対して同様のアドレス・ビットDPA対策を施したものである。
〈Algorithm13: Window Method (4-bit, RPC, RA)〉
ここで、dはnビットのスカラー値であり、説明を簡単にするために、nは4の倍数と仮定する。また、di,i−3は、dのiビット目のからi−3ビット目のまでの4ビットの値とする。R’、Q’、T’[0]およびT’[1]は一時的変数であり、W’[i]はウィンドウ・メソッドで使用されるテーブルを表し、rは4ビットの乱数であり、"←"はRPC表現からの逆変換を表す。
〈Algorithm13': Window Method (4-bit, RC, RA)〉
ここで、dはnビットのスカラー値であり、説明を簡単にするために、nは4の倍数と仮定する。また、di,i−3は、d中のiビット目から(i−3)ビット目までの4ビットの値とする。R”、Q”、T”およびT”[1]は一時的変数であり、W”[i]はウィンドウ・メソッドで使用されるテーブルを表し、rは4ビットの乱数である。“←”はRC表現からの逆変換を表す。
図20および21は、図1に示されているような暗号化/復号ユニットまたはプロセッサによって実行されるAlgorithm 13およびAlgorithm 13’のフロー図を示している。
ステップ1702において、プロセッサは、乱数値に従って0点の座標値をテーブルW[r]に代入する。ステップ1704において、プロセッサは、乱数値rに従いRPCまたはRC変換した点Qの座標値を
に代入する。ステップ1706において、乱数値rに従って
の値をECDBL演算し
に代入する。
ステップ1708は、ステップ1710〜1712を含んでおり、変数i=3,...15に対するループ処理である。
ステップ1710において、プロセッサは、乱数値rに従って
の値をECADD演算してW[i]に代入する。ステップ1712において、プロセッサは、i=i+1とセットする。ステップ1702〜1712は、テーブル作成のための処理である。i=3,...15についてステップ1708のループ処理が終了したとき、手順はステップ1714に進む。
ステップ1714において、プロセッサは、乱数値rと鍵n−1,...n−4番目の値d
n−1,n−4の値に従って、
の値をRに代入する。ステップ1714は、初期化のための処理である。
ステップ1716は、ステップ1718〜1724を含んでおり、変数i=n−5,...0に対するループ処理である。
ステップ1718は4回繰り返されるループ処理である。ステップ1720において、プロセッサはレジスタRの値をECDBL演算してRに代入する。ステップ1722において、乱数値rと鍵のi,...i−3番目のビットの値に従って
の値とRの値をECADD演算してRに代入する。ステップ1724において、プロセッサはi=i−4とセットする。i=n−5,...0についてステップ1716の処理が終了したとき、手順はステップ1726に進む。
ステップ1726において、プロセッサは、レジスタRの値をRPCまたはRC逆変換して出力する。
図22および23は、Algorithm 13およびAlgorithm 13'を実装したブロック図を示している。
暗号化装置は、さらに、プロセッサ62と、ROMのようなプログラム・メモリ64とを含んでいる。プロセッサ62は、メモリ64に格納されているプログラムに従って図22および23に示された諸要素を制御する。代替構成として、プロセッサ62は、その諸要素に対応する機能を実現するメモリ64中のプログラムを実行することによってその諸要素を実現してもよい。
図22および23のブロック図のフローを次に表す。
このフローはAlgorithm 13およびAlgorithm 13'のどちらにも適応可能である。Algorithm 13およびAlgorithm 13'とこのフローの相違は以下の通りである。
− 図20および21においては、このフローにおけるインデックス計算をセレクタとデマルチプレクサで構成している。これはハードウェアで表現するためであり、共に効果は同じである。
図11のAlgorithm 9およびAlgorithm 9’のブロック図と比較すると、図22および23のブロック図では、インデックスとランダム値のXORが増加するのみで、楕円曲線上の点の加算と2倍算の回数は変わらない。
本発明によるAlgorithm11、Algorithm11’、Algorithm 12およびAlgorithm 12’、Algorithm 13およびAlgorithm 13'は、Algorithm 10およびAlgorithm10’と同様に、アドレス・ビットDPAに対して安全である。オーバヘッドについても、Algorithm 11、Algorithm 12およびAlgorithm10’〜Algorithm 12’、Algorith13、およびAlgorithm 13'は、Algorithm5、Algorithm 6およびAlgorithm 5’〜Algorithm 7’、Algorithm 9、およびAlgorithm 9'と比較すると、楕円曲線上の点の演算(ECDBLとECADD)の数は等しく、増加したのはインデックスの計算だけである。そのため、Algorithm 8と同様、本対策による、オーバヘッドはほぼ無視できるものである。
図24は、各アルゴリズムの関係を示している。
以上説明した本発明の実施形態の手法を用いることによりAlgorithm 5- Algorithm 7およびAlgorithm 5’- Algorithm 7’、 Algorithm 9およびAlgorithm 9'に対してアドレス・ビットDPA対策を施すことができる。その場合のオーバヘッドは、スカラー値の計算(シフトとXOR)のみで、楕円曲線上の点の演算は生じない。楕円曲線暗号の処理の場合、点の演算以外の処理量はほぼ無視できるので、本手法を用いた場合のオーバヘッドは無視できる。Coron 99、Messerges 99、 CJ01およびYITT02の方法に使用された場合、楕円曲線上の点の演算は5%〜15%程度だけ増加するので、本発明の手法は速度低下を起こすことなくアドレス・ビットDPA対策を実現でき、SPA、データ・ビットDPAおよびアドレス・ビットDPAに対して安全な楕円曲線暗号実装方法を提供できる。
以上説明した実施形態は典型例として挙げたに過ぎず、その変形およびバリエーションは当業者にとって明らかであり、当業者であれば本発明の原理および請求の範囲に記載した発明の範囲を逸脱することなく上述の実施形態の種々の変形を行えることは明らかである。