IT用語集 › セキュリティ › 定数時間プログラミング

定数時間プログラミング

セキュリティ Svenska → 更新: 2026-10-21

実行時間とメモリアクセスのパターンが秘密の値に依存しない暗号コードを書くこと。ストップウォッチが鍵の代わりにならないようにする。

規則は少ないが厄介だ。秘密データで分岐しない、鍵から求めた添字でテーブルを引かない、秘密のオペランドに遅延が変動する命令を使わない。典型的な失敗はMACの比較にmemcmpを使うことで、最初の不一致で止まるため、何バイト合っていたかを自ら漏らしてしまう。正しい版は全バイトをXORして結果を蓄積し、最後にだけ確認する。

1996年にPaul KocherがRSAへのタイミング攻撃が現実に通用することを示して以来、この分野は時間が漏れる新しい場所を見つける歴史だったといってよい。難しいのは、コンパイラが同じ目標を共有していないことだ。答えがすでに分かったと見抜いた最適化器は、苦心して分岐を排したコードに、平然と早期脱出を挿入する。そのため重要なルーチンはアセンブリで書かれたり、後から秘密依存の分岐を探すツールで検査されたりする。

← 用語集に戻る