Summary

  • RFC 1750は、統計的に乱れて見える長い出力と、攻撃者が予測できない初期値を区別した。起動時刻をある程度知る相手には、時計を種にした生成器の候補が少なくなる。
  • 時計、機器の製造番号、人の操作、パケット到着時刻にはそれぞれ使い道と弱点がある。2005年のRFC 4086は、物理的な情報源やエントロピーの蓄積について議論を拡張した。

印字された鍵が長ければ、安心したくなる。桁数が多く、並びもでたらめに見える。ところが侵入者は桁を一つずつ当てようとしていない。「この機械は何時ごろ起動したのか」と尋ねている。時計を初期値に使ったのなら、長い鍵の背後にある選択肢は驚くほど少ない。

1994年12月のRFC 1750は、ネットワークで使われる暗号技術のその出発点を調べた。パスワードや暗号鍵には秘密の数値が必要だ。生成器が立派でも、材料の由来が推測できれば、攻撃者は材料の候補を順に入れて同じ出力が得られるか確かめられる。完成品の寸法を見て、原料の種類まで増えたと思い込むわけにはいかない。

RFCはまず、見た目の乱雑さと安全上の予測しにくさを分ける。擬似乱数の列が統計試験でよい成績を収めても、初期状態を知る人には再現できる。公開されたCRC表が例に挙げられる。数値の性質は立派でも、表そのものを相手も持っている。舞台衣装は華やかだが、台本は客席にも配られている。

時計は身近で扱いやすい。マイクロ秒まで表示する機械なら、下位の数字にも十分な変化がありそうに思える。しかしRFC 1750によれば、実際の時計の挙動は機種や設定で異なる。下位の値が同じまま続く場合も、ソフトウェアが連続する値を人工的に作る場合もある。ネットワーク機器の製造番号にもメーカーや製造上の規則が入る。値が長いこと、一台ごとに異なること、敵に予測されにくいことは、それぞれ別の性質だ。

人間や周囲の環境を利用すればどうか。文書はキー入力の間隔、マウス操作、ネットワークパケットの到着時刻を検討した。ただ、キーボードのバッファは細かな時間差をアプリケーションに渡さないことがある。同じ操作の繰り返しから得られる変化も限られる。パケットの到着は相手側が揺さぶれるかもしれない。情報源の名前を列挙するだけでは足りず、どの変化を実際に採取できたかを追う必要があった。

RFCの「複雑な処理の誤り」を扱う節は容赦がない。高度な生成器に現在時刻を渡し、大量のビットを作らせても、起動時刻を絞れる敵は少数の初期値を試せる。出力を増やしても、出発点の候補は増えない。料理を百皿作っても、食材が三種類しかなければ仕入れ伝票は短いままだ。分析のない複雑な処理は、よい種の性質を壊すことさえある、と文書は警告した。

当時のUSENETの大きなデータ群から一部を抜き出す例も鋭い。敵が同じデータ群を持っているなら、秘密になるのは主として抜き出し位置だ。RFCはその例の条件の下で、位置による不確かさを高く見ても約25ビットと見積もった。1994年の特定の仮定に結び付いた数値である。共有された巨大な倉庫は、どこか一か所を選んだだけで巨大な秘密の倉庫には変わらない。

そこで仕事は三段階になる。予測しにくい現象を集め、得られた情報を慎重に混ぜ、必要な長さの数値を生成する。物理的な揺らぎや外部の出来事を採る段階と、既にある秘密状態を伸ばす段階は役割が違う。後半の数学が優秀でも、採り損ねた最初の揺らぎを後から取り戻すことはできない。

2005年のRFC 4086はRFC 1750を置き換え、リング発振器やエントロピーの蓄積、当時のOSの仕組みを加えて議論を更新した。機械の設計は変わった。それでも鍵を評価するときの視線は同じ場所へ戻る。印字された最後の桁から逆にたどり、最初の一粒を誰が、どうやって得たのかを見る。時計を読むだけなら、泥棒にもできる。