next up previous contents
Next: III.3.3 電力解析 Up: III.3.2 タイミング解析 Previous: III.3.2.2 タイミング解析の適用例

III.3.2.3 タイミング解析の対策

タイミング解析は暗号アルゴリズムの実装方法に対する攻撃法なので, 慎重に実装することで防ぐことができると考えられる. 実装の際のタイミング解析への対策として3つの方法を挙げる.また, この対策を行っているかがタイミング解析への耐性の1つの判断基準になる.

1番目の対策は最も基本的かつ重要である.これは実装アルゴリズムから 分岐処理をなくすことで実現できる.例えばRijndaelでの'02'倍算は, 以下のような手順で行えば分岐がなくなり,常に同じ時間で処理できる. ここで各レジスタは8ビットであるものとする.

図 III.19: 変更した'02'倍算アルゴリズム
\begin{figure}
\begin{center}
\begin{tabular}{ll}
\hline
入力:$A$\ & \\
出力:...
...lus B$\ & ($\oplus$はXORを表す) \\
\hline
\end{tabular}\end{center}\end{figure}

2番目の対策は,例えばランダムに遅延を挿入し,暗号化の処理時間を 実際の時間と異なるように見せることで実現できる.

3番目の対策のブラインド署名のアルゴリズムの応用とは,内部の処理において, 攻撃者が入力したメッセージとは異なるメッセージを用いる方法である. 例えばRSAで $x = m^d \bmod n$を計算するときに

  1. $M=mv_i \bmod n$
  2. $X=M^d \bmod n$
  3. $x=Xv_f \bmod n$
で計算するようにする.ここで$(v_i, v_f)$ $v_f^{-1}=v_i^d$をみたすもので, 秘密に保持しておく.このようにすると攻撃者の入力したメッセージ$m$とは 別の$M$がべき乗計算時に用いられているため,前節までに述べた攻撃法が適用 できなくなる.$(v_i, v_f)$は暗号化のたびに変更することが望ましく, 暗号化を行うときに, $v_i = v_i^2 \bmod n, v_f = v_f^2 \bmod n$を行って 更新していく方法が提案されている[Koc96].