本文へスキップ
ecdsa.com

サイドチャネル攻撃

計算の入力や出力ではなく、物理的・時間的なふるまい(処理時間、キャッシュアクセス、消費電力、電磁放射、意図的に引き起こしたフォールトへの反応)から秘密情報を得る攻撃です。
別表記side channeltiming attackconstant-timefault attack

古典的なチャネルには、秘密のビットに依存する実行時間(Kocher、1996年)、共有キャッシュを通じて観測される秘密に依存したメモリアクセス(Flush+Reload など)、スマートカードやマイクロコントローラーの消費電力や電磁放射の波形、そしてフォールト注入(電圧やクロックのグリッチ、レーザー、Rowhammer)があります。フォールト注入はデバイスに誤った署名を出力させ、その署名から鍵を計算できます。リモートからのタイミング攻撃も現実的で、Lucky Thirteen(2013年)はネットワーク越しに TLS の CBC パディングチェックを攻撃しました。

公開鍵暗号は、スカラー倍算やべき乗剰余が鍵や nonce のビットごとにループするため、特に狙われやすくなっています。対策は、定数時間のコード(秘密に依存する分岐、メモリインデックス、実行時間が変わる命令を使わない)、スカラーとメッセージのブラインディング、一様なラダーと完全な加算公式、そしてフォールト対策としての、署名を出力する前の検証とヘッジ付き nonce です。

開発者にとっての実践的なルールは、定数時間化に取り組んできた実績のある、保守されたライブラリ(BoringSSL、OpenSSL、libsodium、Go の crypto、RustCrypto、noble ライブラリ)を使い、演算を決して自前で実装し直さないことです。JIT コンパイラーやガベージコレクションのある言語では、定数時間の動作はベストエフォートにとどまり、これは共有ホストやブラウザーで問題になります。

規格と参考文献

すべての用語