Vol.3 No.1 2010
65/100
研究論文:暗号モジュールの安全な実装を目指して(佐藤ほか)−62−Synthesiology Vol.3 No.1(2010)り返され、各ラウンドに入力される128ビット×10のラウンド鍵が生成される。このラウンド鍵はAddRoundKey関数においてデータとの排他的論理和XORに使用される。SubBytesは1バイトの非線形変換S-boxを16個集めたもので、4×4の各バイトで独立に変換が行われる。ShiftRowsでは4×4の各行が横方向に巡回シフトされ、MixColumnsは各列4バイト単位の線形変換である。なお、最終ラウンドだけはMixColumnsが実行されない。AESの回路実装では通常、ラウンド関数を1ブロック用意し、10回繰り返し利用するループアーキテクチャが用いられる。図8は、SASEBO-RとSASEBO-G上の暗号LSIとFPGAに実装されたAES回路の電力波形であり、各ラウンドに対応した鋸型の電力波形が確認できる。RSA暗号では、秘密鍵のビットパターンがそのまま電力波形に観測されるが、AESで128ビットの鍵がXORされる一瞬の電力波形の違いを読み取って、鍵を導出することは不可能である。そこで、数千~数万の電力波形を統計解析することによって、鍵を導出する手法がDPAである。DPAは鍵のビットをいくつか推定した電力モデルを立て、入力データを変えながら取得した複数の電力波形と最も高い相関を示したモデルを調べ、そのモデルの鍵ビットが最も確からしいと推定する手法である。SubBytesはバイト変換、ShiftRowsはバイト境界のシフト演算、AddRoundKeyはビット単位のXORなので、MixColmunsがスキップされるAESの最終ラウンドではバイト毎に独立した演算が行われることになる。したがって、128ビットの鍵を、バイト(8ビット)毎に独立に解析することが可能である。8ビットの値は0~255までの256パターンなので、8ビット部分鍵の推定には高々256個の電力モデルを調べればよく、128ビットの鍵全体では16回の独立した解析を行うだけでよい。8ビットの鍵を解析しているときに、残り120ビットの処理による消費電力はノイズとなる。しかし、暗号回路はある種の乱数生成器であるため、この消費電力は解析している部分鍵とは無相関になり、多くの波形を集めた統計処理によってその影響を低減することができる。図9は我々が開発した、AES回路に対する電力解析攻撃評価ツールである。ここでは中間データを保持するレジスタに注目し、最終ラウンドで値の変化したビット数(ハミング距離)が消費電力と比例関係にあると仮定した電力モデルによるCPA(Correlation Power Analysis) [25]を行っている。画面下の16個の箱が、16バイトの部分鍵それぞれに対応しており、箱の中に256本の縦棒が表示されている。この各棒の高さが、部分鍵が0~255であったときの各モデルと実際のAES回路の消費電力との相関値を表しており、最も相関の高い部分鍵を正解鍵と推定するようになっている。対策が施されていない回路に対しては、20万円程度のオシロスコープにより数千の波形を取得し、数万円のPCにより解析する環境でも、わずか数分で鍵の導出が可能である。AESに対する攻撃手法はCPA以外にも多数提案され、また対策手法も次々と登場している。我々は、これらの効果をSASEBOによって検証するのと同時に、評価ツールへの実装も順次行っている。暗号文平文秘密鍵鍵スケジュール部10ラウンドシフトなし3B右巡回シフト2B右巡回シフト1B右巡回シフト図7 AESの暗号化アルゴリズム図9 AES回路評価ツール図8 AES回路の電力波形(a) ASIC (b) FPGA
元のページ