【たいみんぐこうげき】

タイミング攻撃 とは?

最終更新:
💡 処理時間の小さな違いを手掛かりに、秘密を推測する

処理にかかる時間の差を計測することで、パスワードや暗号鍵などの秘密情報を推測するサイドチャネル攻撃の一種。

📌 このページのポイント
処理時間の差から秘密を推測 応答時間を観測する例 長い 短い a b c d e 比較が長く続いた可能性 同じ長さの候補を比較する仮の例 時間差は秘密の手掛かりになり得る 単発の差だけで正解とは断定しない 専用比較関数と、その周囲の処理も確認
棒は実測値ではなく、同じ長さの候補a〜eに対する応答時間の模式図。橙の候補cは比較が長く続いた可能性を示すが、正解の証明ではない。縦は相対的な時間で数値の単位は省略。実際には雑音があり、差の向きや大きさ、測定回数は実装・環境による。定数時間は毎回の応答時間が厳密に同じという意味ではない。
ひよこ ひよこ
タイミング攻撃って何をするの?
ペンギン先生 ペンギン先生
処理時間の差を秘密の手掛かりにする攻撃だよ。文字列を先頭から比べて不一致ですぐ終える実装なら、先頭から一致する部分が長いほど処理が増えることがある。全体で何文字合ったかではなく、比較がどこまで進んだかが問題なんだ。
ひよこ ひよこ
すごく小さい差でも分かるの?
ペンギン先生 ペンギン先生
一度の測定で明確に分かるとは限らないよ。繰り返しの観測と統計で差を推測するけれど、通信の揺れや他の処理も混ざる。どの程度の差を何回で見分けられるかは条件次第で、何千回なら必ず分かるというものではないんだ。
ひよこ ひよこ
どんな場面で問題になるの?
ペンギン先生 ペンギン先生
認証用の値の比較や暗号処理などだよ。2013年のLucky Thirteen研究では、TLS/DTLSのCBCモードで復号エラーが返る時間の差を利用する攻撃が報告された。ネットワーク越しでも実証された例だけれど、あらゆるTLS通信が今も同じ条件で攻撃できるという意味ではないよ。
ひよこ ひよこ
定数時間比較なら防げる?
ペンギン先生 ペンギン先生
比較する値の内容に応じた早期終了を避けるのに役立つよ。Pythonのhmac.compare_digest()やNode.jsのcrypto.timingSafeEqual()などがある。ただし実際の応答時間が毎回ぴったり同じになるという意味ではない。Node.jsの関数は同じバイト長が必要で、周囲の長さ判定やエラー処理が情報を漏らさないかも確認するんだ。
ひよこ ひよこ
専用関数だけで対策が終わるわけじゃないんだね?
ペンギン先生 ペンギン先生
そうだよ。比較以外の分岐や暗号処理でも差が出ることがある。保守されているライブラリを使い、処理全体で何が時間に影響するかを確認する。関数名を変えただけで安全が保証されるわけではないんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「タイミング攻撃」って出てきたら「処理時間の差から秘密情報を推測するサイドチャネル攻撃」と思えればだいたいOK!
📖 おまけ:英語の意味
「Timing Attack」 = タイミング攻撃
💬 処理の「タイミング(timing)」=所要時間の差を観察して秘密情報を割り出す攻撃で、直接データを盗むのではなく間接的に推測するのが特徴だよ。

参考資料

← 用語集にもどる