key=0 key=1 I(V1) →

🔬 暗号の「隙」を突く!

LTspiceで学ぶサイドチャネル攻撃(電力解析)

数学的に完璧な暗号でも、チップの「息遣い」が秘密を漏らす。
消費電流の差をLTspiceで可視化して、攻撃者の目線を体験しよう🐾

🔬 LtSpice (MOSFET・電力解析) 🔐 ハードウェアセキュリティ 💀 上級(スリリング)
🔬 LtSpiceシリーズ
1 チュア回路でカオス理論を体験する 2 LFSR:ストリーム暗号の心臓部を動かす 3 サイドチャネル攻撃:デバイスの「息遣い」から秘密を盗む 4 物理複製困難関数(PUF):デバイスの「指紋」を作る(準備中)
🔬
半導体研究でチップの電流特性を毎日見ているもふねこだけど、 今回はその知識が「攻撃者の目線」に変わるよ🐾
サイドチャネル攻撃は、暗号アルゴリズムそのものを解読するのではなく、 「暗号を実行しているハードウェアの物理的な振る舞い」から秘密を盗み出す攻撃。 チップが0を計算するときと1を計算するとき、実は電流の流れ方が微妙に違う。 LTspiceでその「差」を目で見てみよう。

🛠️ LtSpiceのインストール方法は vol.1(チュア回路)の冒頭をご確認ください。

01 数学的には完璧、でも物理的には?

AESやRSAといった現代の暗号は、数学的な観点から解読するには何兆年もかかるほど強固だ。 正面突破は不可能に近い。

しかし、暗号を実行するのは「ハードウェア」だ。 そしてハードウェアは、計算している内容によって 消費電力・電磁波・処理時間・発熱が微妙に変わる。 これを観測・分析して秘密鍵を暴くのが「サイドチャネル攻撃」だ。

💀 サイドチャネル攻撃の恐ろしさ

アルゴリズムに脆弱性がなくても攻撃できる。 数学的に完璧なコードを書いても、それを動かすチップが漏らしてしまう。 つまり「暗号の強さ」と「実装の安全性」は別物なのだ。

02 電力解析(SPA/DPA)の仕組み

コンピュータの頭脳であるトランジスタは、 スイッチが切り替わる瞬間に電流を消費する

KEY BIT = 0 のとき
55 µA
動くスイッチが少ない → 電流が少ない
KEY BIT = 1 のとき
78 µA
多くのスイッチが動く → 電流が多い

この差はナノアンペア〜マイクロアンペア単位の微細なものだ。 しかし攻撃者は、同じ処理を何千回・何万回と繰り返して測定し、 統計的にノイズを取り除くことで、確実に鍵ビットを特定する。 これを「差分電力解析(DPA: Differential Power Analysis)」と呼ぶ。

🚨 実際の事件:Xbox セキュリティチップ解読(2007年)

MicrosoftのゲームコンソールXboxのセキュリティチップが、電力解析によって解読された。 使用された装置の価格は数十万円、解析にかかった時間は数時間。 数学的に堅牢な暗号も、「チップの息遣い」の前には無力だった。 この事件はハードウェアセキュリティ研究の転換点として今も語られる。

03 LTspiceでのシミュレーション構成

実際の暗号チップを再現するのは複雑なので、 「データの違いで電流が変わる」ことを示すモデル回路を簡略化して作る。 これだけで電力解析の本質を体験できる。

STEP 1

2つのMOSFETスイッチで「鍵ビット」を表現

NチャネルMOSFET(nmos)を2つ用意する。

それぞれに異なる負荷抵抗(R1=10kΩ、R2=18kΩ)を直列に接続し、 消費電流に差が出るようにする。

STEP 2

シャント抵抗で電流を「見える化」

電源 V1(3.3V)と回路の間に、小さなシャント抵抗(Rshunt = 100Ω)を直列に挟む。 オームの法則 V = I × R により、この抵抗の両端電圧を測定すれば電流がわかる。

▶ シャント抵抗の電圧 → 電流変換
I(V1) = V(shunt_top) - V(shunt_bot) / Rshunt
💡 なぜシャント抵抗? オシロスコープやLTspiceでは「電圧」を測るのが基本。 電流を直接測るより、小さな抵抗を挟んで電圧差として測る方が精度が高い。 これは実際の攻撃装置でも使われるテクニックだ。
STEP 3

`.step param` で鍵=0/1を一度に比較

LTspiceの強力な機能 .step を使い、 1回のシミュレーションで2パターンを重ねて表示する:

▶ シミュレーションコマンド(回路図に記述)
.tran 1u .step param Key list 0 1

Key=0Key=1 の2つの波形が同一グラフに重なって表示される。 「どれだけ差があるか」が一目瞭然になる。

STEP 4

I(V1) をプロット → 差を観察

Run後、電源電流 I(V1) をクリックして波形を追加。 2本の波形が表示されたら 拡大 して差を確認しよう。

📊

ここにI(V1)の波形プロット(Key=0 vs Key=1)が入る予定
青い波形(key=0)より赤い波形(key=1)のピークが高いことが確認できる

🔐 物理層からのセキュリティ:ハードウェアが漏らす真実

暗号は数字のパズルだけではない。 LTspiceで波形を見ていると、「物理的な実体がある限り、100%完璧な隠蔽は難しい」 という現実が見えてくる。これこそがハードウェア・セキュリティの奥深さだ。

⚡ SPA(単純電力解析)

1回の測定で波形から直接情報を読む。 RSAのべき乗算など、操作ごとに明確に波形が変わる場合に有効。 今回のシミュレーションはSPAに相当する。

📈 DPA(差分電力解析)

同じ処理を何万回も測定し統計処理。 1回の測定では差がわからなくても、ノイズを平均化して差を抽出する。 AESなど高度な暗号への攻撃に使われる。

⏱️ タイミング攻撃

処理時間の差から情報を推測する。 「if文の分岐でかかる時間が違う」だけで鍵が漏れることがある。 定時間実装(Constant-Time)が対策として必須。

📡 電磁波解析(EMA)

チップから放射される電磁波を受信して解析。 接触不要で数センチ離れた場所からでも攻撃できる。 スマートカード・ICカードへの攻撃実績がある。

05 どうやって守るのか?防御策

サイドチャネル攻撃への対策は、暗号アルゴリズム自体ではなく、 実装レベルで施す必要がある

🎭

マスキング(Masking)

計算にランダムな値(マスク)を混ぜ、電流とデータの相関をバラバラにする。 攻撃者が電流を測っても、ランダムノイズにしか見えなくなる。

🤖

ダミー処理(Dummy Operations)

0のときも1と同じだけ電力を消費するダミー回路を追加。 電流の差をなくして、差分解析を無効化する。

⏱️

定時間実装(Constant-Time)

データの値に関係なく同じ時間・同じ電力で処理が完了するよう実装。 タイミング攻撃・電力解析の両方に効果がある。

🛡️

シールディング(Shielding)

チップを金属でシールドして電磁波の漏れを防ぐ。 物理的なハードウェア保護。高セキュリティICカードに採用されている。

06 まとめ

🔬
次回(vol.4)は物理複製困難関数(PUF)を取り上げるよ🐾
半導体製造のときに生まれる「製造バラつき」が、 実はデバイスごとに異なる「指紋」として使える…という もふねこの研究に一番近いテーマ。お楽しみに!

07 関連記事

🔙 vol.2 LFSRへ 🔬 暗号ラボへ戻る