右|サムネイル|300x300ピクセル|差分電力解析の図。 サムネイル|300x300ピクセル|電力解析を用いたRSA鍵ビットの観測。左のピークは二乗のみのステップにおける消費電力を示し、右の(より広い)ピークは乗算のステップを示しており、これにより指数ビットの0と1を区別することができる。 電力解析(でんりょくかいせき、英: Power analysis)および電力解析攻撃(でんりょくかいせきこうげき、英: Power analysis attack)は、攻撃者が暗号ハードウェアデバイスの消費電力を調査するサイドチャネル攻撃の一種である。これらの攻撃は、デバイスの基本的な物理的特性に依存している。半導体デバイスは物理法則に支配されており、デバイス内の電圧の変化には電荷の非常に小さな移動(電流)が必要となる。それらの電流を測定することにより、操作されているデータに関するわずかな情報を得ることが可能となる。

単純電力解析(Simple Power Analysis、SPA)は、電力の推移、すなわち時間経過に伴う電気的活動のグラフを視覚的に解釈する手法である。差分電力解析(Differential Power Analysis、DPA)は、より高度な電力解析の形態であり、複数の暗号操作から収集されたデータの統計解析を通じて、攻撃者が暗号計算内のいくつかの中間値を計算することを可能にする。SPAとDPAは、1998年にポール・コッチャー、ジョシュア・ジャフェ、ベンジャミン・ジュンによって公開暗号コミュニティに導入された。

背景 暗号理論において、サイドチャネル攻撃は、安全なデバイス(スマートカード、耐タンパ性のある「ブラックボックス」、または集積回路など)から秘密データを抽出するために使用される。サイドチャネル解析は通常、デバイスから暗号鍵やその他の秘密情報を非侵襲的に抽出しようとする。この簡単な例がドイツ戦車問題である。戦車のシリアル番号は、戦車の生産データの詳細を提供する。物理的セキュリティにおいて、非侵襲的攻撃はピッキング行為に似ており、攻撃が成功しても攻撃者が存在した痕跡は残らない。

単純電力解析 単純電力解析(Simple Power Analysis、SPA)は、時間経過とともにデバイスが使用する電流のグラフを視覚的に検査するサイドチャネル攻撃である。単純電力解析攻撃とも言われる。デバイスが異なる操作を実行すると、消費電力の変動が発生する。例えば、マイクロプロセッサによって実行される異なる命令は、異なる消費電力プロファイルを持つ。したがって、秘密の値に依存するコードフローは、消費電力の監視を通じてコードフローを漏洩させ、結果として秘密の値も漏洩させる。

パスワードチェックの例 簡単な例として、次のようなパスワードチェックを考えてみよう。bool check_password(const char input[]) { const char correct_password[] = "hunter2";

if (strlen(input) != strlen(correct_password)) return false;

for (int i = 0; i < strlen(correct_password); i++) { if (input[i] != correct_password[i]) { return false;

return true; }実行時間が一定ではないため、このパスワードチェックにはタイミング攻撃が含まれる可能性がある。消費電力を観察することで、実行されたループの数が明らかになる。ただし、緩和策は可能である。例えば、応答が返される前に補償的な遅延がある場合、関数はユーザーに悪用可能な結果を出力しないかもしれない。あるいは、入力と秘密のパスワードの間で文字位置が一致しない場合でも、すべてのループを完了するようにコードが構成される。そのようなサンプルコードの1つは、タイミング攻撃のアルゴリズムセクションで見ることができる。

同様に、RSA実装における二乗演算と乗算演算はしばしば区別することができ、攻撃者が秘密鍵を計算することを可能にする。消費電力の変動の大きさが小さくても、標準的なデジタルオシロスコープは、データによって引き起こされる変動を簡単に表示することができる。周波数フィルタや平均化機能(オシロスコープに組み込まれているものなど)は、高周波成分を除去するためにしばしば使用される。

RSA暗号の復号過程の例 RSA暗号の復号過程において、以下のアルゴリズムが実行されたとする。秘密鍵に相当するdはバイナリ演算を行っていて、nビットの数値であるとする。すなわちd[i]は0or1である。

Calculate M=Cd mod N INPUT: d,C OUTPUT: M

int i; int T=C; for(i=n;i=>0;i--) { T=T*T; // ① if(d[i]==1){ T=T*C; // ②

return T; この場合d[i]=0の場合は①の自乗算の処理のみが行われるが、d[i]=1の場合は①に加え②の掛算の処理も行われる。自乗算と掛算の消費電力が異なることを利用すれば1個の消費電力波形から秘密鍵を導出できてしまう。SPAから秘密鍵を守るには以下の2種類のアルゴリズムが利用される。

Calculate M=Cd mod N INPUT: d,C OUTPUT: M

int i; int T[]; T=C; for(i=n;i=>0;i--) { T=T*T; // ① T=T*C; // ② T=T[d[i]]; // ③ } return T;

Calculate M=Cd mod N INPUT: d,C OUTPUT: M

int i; int T[]; T=C; T= C*C; for(i=n;i=>0;i--) { T = T[d[i]]*T[d[i]]; // ① T = T*T; // ② T = T[2-d[i]]; // ③ T = T[1+d[i]]; // ③ } return T;

上記のアルゴリズムは上から"Add-and-double-always method","Montgomery Ladder"(論文[IIT03]の呼び名)と呼ばれ、d[i]の値に関わらず①と②の演算を行い、③でd[i]の値に即した処理を行うのが特徴である。これにより理論上ただしハードウェアの回路構成によってはSPAに防御できないことがある(論文[ISO09]より)1個の消費電力波形から秘密鍵を導出することはできない。これら3つの暗号アルゴリズムはRSAのみにかかわらず、ElGamal暗号や楕円曲線暗号など公開鍵暗号全般に適用できる。

差分電力解析 差分電力解析(Differential Power Analysis、DPA)は、暗号系からの消費電力の測定値を統計的に解析するサイドチャネル攻撃である。差分電力解析攻撃とも言われる。この攻撃は、秘密鍵を使用して操作を実行する際の、マイクロプロセッサやその他のハードウェアの消費電力の変動の偏りを悪用する。DPA攻撃は、単純電力解析を使用して解析するにはノイズが多すぎる測定値から秘密を抽出できる、信号処理とエラー訂正の特性を持っている。DPAを使用すると、攻撃者は、脆弱なスマートカードやその他のデバイスによって実行された複数の暗号操作からの消費電力測定値を解析することにより、秘密鍵を取得することができる。

高次差分電力解析 高次差分電力解析(HO-DPA)は、DPAの高度な形態である。HO-DPAは、複数のデータソースと異なる時間オフセットを解析に組み込むことを可能にする。解析が複雑であり、ほとんどの脆弱なデバイスはSPAまたはDPAでより簡単に破ることができるため、HO-DPAはSPAやDPAほど広く実践されていない。

電力解析とアルゴリズムの安全性 電力解析は、そうでなければ「耐タンパ性」を持つハードウェアの「内部を見る」方法を提供する。例えば、DESの鍵スケジュールには、28ビットの鍵レジスタのローテーションが含まれる。多くの実装では、最下位ビットをチェックして1であるかどうかを確認する。そうであれば、デバイスはレジスタを右にシフトし、左端に1を先頭に追加する。ビットがゼロの場合、レジスタは1を追加せずに右にシフトされる。電力解析はこれらのプロセスを区別でき、攻撃者が秘密鍵のビットを決定することを可能にする。

数学的に強力であると考えられているAESやトリプルDESなどのアルゴリズムの実装は、電力解析攻撃を使用すると簡単に破られる可能性がある。結果として、電力解析攻撃は、アルゴリズムの暗号解読と実装のセキュリティの要素を組み合わせたものである。

標準規格と実用上のセキュリティの懸念 デバイスが攻撃者の物理的な所有物に陥る可能性のあるアプリケーションでは、電力解析に対する保護が一般的に主要な設計要件となる。電力解析は、有料テレビシステムで使用される限定受信モジュールに対しても使用されたと報告されている。

電力解析攻撃を実行するために必要な機器は広く入手可能である。例えば、ほとんどのデジタル・ストレージ・オシロスコープは必要なデータ収集機能を提供し、データ解析は通常、従来のPCを使用して実行される。

単純および差分電力解析攻撃の防止 攻撃者の監視は通常受動的であるため、電力解析攻撃は一般にデバイスによって検出することはできない。さらに、攻撃は非侵襲的である。結果として、物理的な筐体、監査機能、および攻撃検出器は効果がない。代わりに、暗号系のエンジニアは、デバイスの電力変動が攻撃者によって使用可能な情報を明らかにしないようにする必要がある。

条件分岐が実行されるかどうかに応じてデバイスが異なる処理(異なる電力を消費する)を行うため、単純電力解析は暗号ソフトウェアの実行における条件分岐の結果を簡単に区別することができる。このため、暗号ソフトウェアの実装内で条件分岐に影響を与える秘密の値がないことを確認するように注意する必要がある。マイクロコードの違い、コンパイラによって導入される分岐、乗算器における消費電力の変動など、他の変動要因も一般的にSPAの脆弱性につながる。

消費電力のわずかな偏りであっても悪用可能な弱点につながる可能性があるため、差分電力解析を防ぐことはより困難である。いくつかの対策戦略には、暗号操作が存続する何らかの数学的関係によって実際の値に関連するデータに対して暗号操作が行われるようなアルゴリズムの変更が含まれる。1つのアプローチとして、パラメータをブラインド化してその値をランダム化することがある。DPA攻撃の有効性を低下させるための他の対策戦略にはハードウェアの変更が含まれる。チップの内部クロック周波数を変化させることは、電気信号を非同期化するために検討されてきたが、これは結果として従来のDPAのアルゴリズムの強化につながる。

脚注

参考文献 [IIT03]:K. Itoh,T. Izu and M. Takenaka, "A Practical Countermeasure against Address-bit Differential Power Analysis", CHES 2003, LNCS 2779, pp. 382-396, 2003. [ISO09]:M. Izumi, K. Sakiyama, K. Ohta, "A New Approach for Implementing the MPL Method toward higher SPA Resistance", ARES 2009, pp.181-186, IEEE Computer Society, 2009

関連項目 サイドチャネル攻撃

en:Power analysis#Simple power analysis