神ツールChipWhispererでAESの相関電力解析をする
本記事は↓の続きです。
概要
電力解析の神ツールの一つChipWhispererを使って、RHme3 Tracing the tracesを解きます。
ChipWhisperer
前回はAESの相関電力解析を実施する方法を勉強しましたが、 このような電力解析を簡単にやってくれるツールが世界には存在します。 そのようなツールの一つがChipWhispererです。
ChipWhisperer® – NewAE Technology Inc.
ChipWhispererは、電力をキャプチャするハードウェア部分とキャプチャした波形を解析するソフトウェア部分で構成されています。 このうちソフトウェア部分はオープンソース (GPLライセンス) で提供されています。 本記事ではこのソフトウェアを用いて、問題を解いていきます。
ちなみにハードウェア部分は販売されており、一番安いChipWhisperer Liteは下記サイトから250USD + カナダからの送料 + 税金で購入することが可能です。
ちなみに購入するとハートウォーミングなメッセージの書かれた領収書と、使い道のわからないトランプもついてきます。 こういう心遣いがうれしいですね。
ただ今回の問題は電力はすでにデータとして与えられており、キャプチャをする必要がないため、ハードウェアの購入は必要ありません。 以降はソフトウェア部分にフォーカスして説明していきます。
インストール
まず下記サイトからChipWhispererをインストールしましょう。
Installing ChipWhisperer - ChipWhisperer Wiki
Windows版、Linux版、Mac版と用意されていますが、パッケージが用意されていてインストールが容易なこと、処理が早い (気がする) ことから、個人的にはWindows版をおすすめします。
Tracing the traces
題材は前回と同様にRHme3のTracing the tracesです。 問題は下記を参照のこと。
ChipWhisperer形式への変換
前回を参考にmatlab形式の変換までは完了していることとします。 下記コマンドでmatlabフォーマットをchipwhispererフォーマットに変換しましょう。
import scipy.io as sio import numpy as np import os from chipwhisperer.common.traces.TraceContainerNative import TraceContainerNative traces = sio.loadmat("traces.2.mat") ntraces = len(traces['samples']) traceLen = len(traces['samples'][0]) inp = np.uint8(traces['inout'][:, 0:16]) out = np.uint8(traces['inout'][:, 16:32]) #Save as ChipWhisperer project tc = TraceContainerNative() for i in range(0, ntraces): tc.addWave(traces['samples'][i]) tc.addTextin(inp[i]) tc.addTextout(out[i]) tc.addKey([0]*16) os.mkdir('rhme3') tc.saveAllTraces('rhme3') tc.config.setConfigFilename('rhme3/rhme.cfg') tc.config.saveTrace()
ちなみTraceContainerNativeを利用してフォーマットを変換すると出来上がった設定ファイルrhme.cfgファイルの 設定値にprefix=Noneと書かれた行が自動的に付与されます。 ただ、なぜかこの値をChipWhispererはprefixが"不要"という意味ではなく、prefix="None"という文字列として解釈してしまいます。 Noneを削除したprefix=に値を変えておきましょう。
ファイルの読込
ChipWhispererがインストールされたフォルダのsoftware配下に存在するCWAnalyzer.pywを起動します。 trace managerを実行し、rhme.cfgファイルを読み込んでみたところ、下記波形が表示されました。
与えられたサンプル値を一つ表示しているみたいです。 たくさんのグラフを同時に表示してみましょう。 Resultタブのtrace to plotを0-100にしてみます。
これでジッターだらけではありますが、波形を表示することができました。
ジッターの排除
Attack Script Generatorでpre processingでResync: sum of differenceに設定してやり、次にpreprocessingタブに移動し、ref traceで特徴を抽出するトレースを指定し、特徴点(ピーク値等)をreference pointsの間にいれてやり、マッチングさせる範囲をinput windowとして設定してやりましょう。そして最後にenabledにチェックを入れれば、ある程度波形がきれいに表示されるはずです。
相関電力解析!
start attackをクリックしてください。
Results Tablesの最も上に並んでる値が、最も相関係数の高かった値、すなわちFlagとなるはずです。
まとめ
単純なAESに対する相関電力解析はツールで解けちゃいます。 低い得点で電力解析問が出たらとりあえずツールにかけてしまうのが勝ちパターンかもしれません。
次回は一風変わった電力解析問を紹介します。