サイドチャネル攻撃とは?

情報処理試験

サイドチャネル攻撃(Side Channel Attack)とは、

暗号アルゴリズムやシステムの理論的な弱点ではなく、
「処理中に漏れる物理的な情報」から秘密情報を盗み出す攻撃です。

例えば、パスワードや暗号鍵そのものを解読するのではなく、
CPUの動作や電力消費などを観察して推測します。

代表的なサイドチャネル攻撃

攻撃手法利用する情報内容
タイミング攻撃処理時間暗号処理にかかる時間の違いから秘密鍵を推測
キャッシュ攻撃CPUキャッシュCPUキャッシュのヒット・ミスを観測し秘密情報を推測
電力解析(Power Analysis)消費電力ICカードや組み込み機器の電力変化から暗号鍵を解析
電磁波解析電磁波CPUから発生する電磁波を測定して情報を取得
音響解析動作音キーボードやCPUの微細な音から情報を推測
分岐予測攻撃CPU内部状態CPUの予測実行機能を悪用してメモリ内容を盗み出す

イメージ

例えば、ATMカードのICチップで暗号処理をしているとします。

暗号鍵は外部から読めません。

しかし、

  • 正しいビットを計算すると電力消費が少し増える
  • 間違ったビットでは電力消費が少し違う

この違いを数万回測定すると、

鍵:101101001...

という秘密鍵を復元できる場合があります。


有名な例

Spectre

2018年に公表されたCPUの脆弱性です。

CPUの「投機的実行」を利用し、

CPU
 ↓
キャッシュに秘密データが残る
 ↓
キャッシュアクセス時間を測定
 ↓
秘密データを取得

という攻撃でした。


Meltdown

こちらも2018年に公表されたCPUの脆弱性です。

本来アクセスできないOSカーネル領域を一時的に読み込み、

その痕跡をキャッシュから解析します。


なぜ暗号が破られるの?

例えばパスワード比較を

if (input[i] != password[i])
    return false;

のように書くと、

1文字目が違う → すぐ終了
5文字目が違う → 少し時間がかかる

となります。

攻撃者は何百万回も測定すると、

1文字目は正しい
2文字目も正しい
...

と推測できてしまいます。

そのため、暗号ライブラリでは比較時間が入力内容に依存しない「定数時間(constant-time)」実装がよく用いられます。


対策

  • Constant-Timeアルゴリズム(処理時間を一定にする)
  • キャッシュ利用を考慮した実装
  • CPUのマイクロコード・OSの更新(Spectre/Meltdown対策)
  • 暗号演算専用ハードウェアの利用
  • 電力・電磁波対策(シールド、ノイズ付加)
  • 秘密情報を扱う処理を分離・隔離する

一言でいうと

サイドチャネル攻撃とは、

「計算結果」ではなく、「計算するときに漏れる時間・電力・キャッシュ・電磁波などの副次的な情報(サイドチャネル)」を利用して、秘密情報を盗み出す攻撃です。

暗号アルゴリズム自体が安全でも、実装やハードウェアの振る舞いから情報が漏れるため、ソフトウェア・ハードウェアの両方で対策が重要になります。

コメント

タイトルとURLをコピーしました