LTspiceで学ぶサイドチャネル攻撃(電力解析)
数学的に完璧な暗号でも、チップの「息遣い」が秘密を漏らす。
消費電流の差をLTspiceで可視化して、攻撃者の目線を体験しよう🐾
🛠️ LtSpiceのインストール方法は vol.1(チュア回路)の冒頭をご確認ください。
AESやRSAといった現代の暗号は、数学的な観点から解読するには何兆年もかかるほど強固だ。 正面突破は不可能に近い。
しかし、暗号を実行するのは「ハードウェア」だ。 そしてハードウェアは、計算している内容によって 消費電力・電磁波・処理時間・発熱が微妙に変わる。 これを観測・分析して秘密鍵を暴くのが「サイドチャネル攻撃」だ。
コンピュータの頭脳であるトランジスタは、 スイッチが切り替わる瞬間に電流を消費する。
この差はナノアンペア〜マイクロアンペア単位の微細なものだ。 しかし攻撃者は、同じ処理を何千回・何万回と繰り返して測定し、 統計的にノイズを取り除くことで、確実に鍵ビットを特定する。 これを「差分電力解析(DPA: Differential Power Analysis)」と呼ぶ。
MicrosoftのゲームコンソールXboxのセキュリティチップが、電力解析によって解読された。 使用された装置の価格は数十万円、解析にかかった時間は数時間。 数学的に堅牢な暗号も、「チップの息遣い」の前には無力だった。 この事件はハードウェアセキュリティ研究の転換点として今も語られる。
実際の暗号チップを再現するのは複雑なので、 「データの違いで電流が変わる」ことを示すモデル回路を簡略化して作る。 これだけで電力解析の本質を体験できる。
NチャネルMOSFET(nmos)を2つ用意する。
それぞれに異なる負荷抵抗(R1=10kΩ、R2=18kΩ)を直列に接続し、 消費電流に差が出るようにする。
電源 V1(3.3V)と回路の間に、小さなシャント抵抗(Rshunt = 100Ω)を直列に挟む。
オームの法則 V = I × R により、この抵抗の両端電圧を測定すれば電流がわかる。
I(V1) = V(shunt_top) - V(shunt_bot) / Rshunt
LTspiceの強力な機能 .step を使い、
1回のシミュレーションで2パターンを重ねて表示する:
.tran 1u
.step param Key list 0 1
→ Key=0 と Key=1 の2つの波形が同一グラフに重なって表示される。
「どれだけ差があるか」が一目瞭然になる。
Run後、電源電流 I(V1) をクリックして波形を追加。
2本の波形が表示されたら 拡大 して差を確認しよう。
ここにI(V1)の波形プロット(Key=0 vs Key=1)が入る予定
青い波形(key=0)より赤い波形(key=1)のピークが高いことが確認できる
暗号は数字のパズルだけではない。 LTspiceで波形を見ていると、「物理的な実体がある限り、100%完璧な隠蔽は難しい」 という現実が見えてくる。これこそがハードウェア・セキュリティの奥深さだ。
1回の測定で波形から直接情報を読む。 RSAのべき乗算など、操作ごとに明確に波形が変わる場合に有効。 今回のシミュレーションはSPAに相当する。
同じ処理を何万回も測定し統計処理。 1回の測定では差がわからなくても、ノイズを平均化して差を抽出する。 AESなど高度な暗号への攻撃に使われる。
処理時間の差から情報を推測する。 「if文の分岐でかかる時間が違う」だけで鍵が漏れることがある。 定時間実装(Constant-Time)が対策として必須。
チップから放射される電磁波を受信して解析。 接触不要で数センチ離れた場所からでも攻撃できる。 スマートカード・ICカードへの攻撃実績がある。
サイドチャネル攻撃への対策は、暗号アルゴリズム自体ではなく、 実装レベルで施す必要がある。
計算にランダムな値(マスク)を混ぜ、電流とデータの相関をバラバラにする。 攻撃者が電流を測っても、ランダムノイズにしか見えなくなる。
0のときも1と同じだけ電力を消費するダミー回路を追加。 電流の差をなくして、差分解析を無効化する。
データの値に関係なく同じ時間・同じ電力で処理が完了するよう実装。 タイミング攻撃・電力解析の両方に効果がある。
チップを金属でシールドして電磁波の漏れを防ぐ。 物理的なハードウェア保護。高セキュリティICカードに採用されている。
.step param Key list 0 1 で鍵ビットごとの電流差を可視化できる