メインコンテンツまでスキップ

8.1. Side-Channel Leaks (サイドチャネル漏えい)

8.1. Side-Channel Leaks (サイドチャネル漏えい)

署名を行う実装では, 秘密鍵 (private key) の秘匿が根本的に重要である。実装が秘密鍵の値に関わらず常に同一の命令列を実行し, 同一のメモリアクセスを行うようにすることで, 一部のサイドチャネル攻撃 (side-channel attacks) から保護できる。

このように実装をサイドチャネル上で無音 (side-channel silent) にするには, 法 p 剰余演算に, 例えばキャリーの伝播に関するような, データ依存の分岐を用いてはならない。統一公式 (unified formulas) により, サイドチャネル無音の点加算は素直である。

スカラー乗算 (scalar multiplication), すなわち点に整数を掛ける演算は, サイドチャネル無音に実装するには追加の工夫が必要である。単純な手法の一つは, サイドチャネル無音の条件付き代入 (conditional assignment) を実装し, それと二進アルゴリズムを組み合わせて整数の 1 ビットずつを調べることである。

他の署名方式と比べると, データ依存分岐の回避は容易である。推奨曲線では法 p 剰余演算のサイドチャネル無音化がしやすく, 多数の特例ではなく完全な加算公式 (complete addition formulas) を持つためである。

なお, 本書の参考実装は, サイドチャネル無音を目指していない。