ハードウェアセキュリティ
暗号の処理を「定数時間」で実装するときに守るべきこととして正しいものはどれか。
- A処理の全体を、必ず1秒で終わるようにする
- B処理の途中で、時計を止める
- C秘密の値によって、条件分岐の向き、繰り返しの回数、メモリを読み書きする番地が変わらないようにする
答えと解説を見る
正解:C. 秘密の値によって、条件分岐の向き、繰り返しの回数、メモリを読み書きする番地が変わらないようにする
定数時間とは、処理の時間が秘密の値によって変わらないという意味です。秘密の値でif文の向きが変われば時間が変わり、秘密の値で配列の添字が決まればキャッシュの痕跡が変わります。そのため、条件分岐の代わりにビット演算で両方の結果を計算して選ぶ、秘密の値で表を引かない、といった書き方をします。コンパイラの最適化で分岐が生まれないかを確かめることも必要です。
- A. 決まった秒数のことではありません。
- B. 時計を止めるわけではありません。
- C. 正しい。時間やキャッシュの痕跡を秘密から切り離します。