【たいみんぐこうげき】

タイミング攻撃 とは?

💡 正解ボタンを押した瞬間だけ「カチッ」と鳴る音で、答えを当てる
📌 このページのポイント
タイミング攻撃のイメージ 応答時間 試した文字 a b c d e f g h i j 攻撃者が検出 ここが正しい文字!
応答時間の微妙な差から正しい文字を推測できる
ひよこ ひよこ

タイミング攻撃って何をするの?

ペンギン先生 ペンギン先生

処理にかかる時間を測ることで秘密情報を推測する攻撃だよ。たとえばパスワード比較が1文字目で不一致だとすぐリターンするコードがあるとすると、合っている文字が多いほど比較に少し時間がかかる。その差を観察するんだ。

ひよこ ひよこ

でも時間の差ってすごく小さいんじゃないの?

ペンギン先生 ペンギン先生

1回だとわずかな差でも、何千回も繰り返して統計的に分析するとはっきりした差が見えてくるんだよ。ナノ秒〜マイクロ秒の差を検出できるツールも存在していて、実際に使える攻撃手法として認知されているんだ。

ひよこ ひよこ

どんな場面で問題になるの?

ペンギン先生 ペンギン先生

パスワード比較・HMACの検証・RSA復号など暗号操作全般が対象になりうるよ。ネットワーク越しでも攻撃が実証されていて、Lucky ThirteenというケースではTLSのMAC検証の時間差が悪用されたんだね。

ひよこ ひよこ

どうすれば防げるの?

ペンギン先生 ペンギン先生

定数時間比較(constant-time comparison)を使うんだよ。入力の内容に関わらず常に同じ時間で比較が終わるよう実装する。Pythonならhmac.compare_digest()、Node.jsならcrypto.timingSafeEqual()がその専用関数だね。

ひよこ ひよこ

「== で比較しない」だけなら簡単そうだけど、難しいことってあるの?

ペンギン先生 ペンギン先生

コンパイラの最適化が定数時間の保証を壊してしまうことがあるんだよ。ソースコードは一定時間に見えても、最適化後のマシン語が早期リターンを生み出すことがあるんだ。だから自前実装は危険で、専用のセキュリティライブラリを使うのが確実だね。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「タイミング攻撃」って出てきたら「処理時間の差から秘密情報を推測するサイドチャネル攻撃」と思えればだいたいOK!
📖 おまけ:英語の意味
「Timing Attack」 = タイミング攻撃
💬 処理の「タイミング(timing)」=所要時間の差を観察して秘密情報を割り出す攻撃で、直接データを盗むのではなく間接的に推測するのが特徴だよ。
← 用語集にもどる