18/09/05 17:53:08.80 .net
cipher.cの255行目、round00関数内の次の部分の処理時間がサイドチャネルになっています。
x ^= parity32(x & k) ? ~k : 0;
別の書き方だとこうなります。
if (parity32(x & k) != 0) { x = x ^ ~k; }
「x = x ^ ~k」を実行する/しないで時間差が生じ、そこからパリティーの状態が判ります。
あとは、
・パリティーの組み合わせと一致するサブキーを総当たりで求める (x4ラウンド)
・逆鍵スケジューラで元の鍵に戻す。 → (゚д゚)ウマー