要約
- RFC 1948が描いた攻撃者は、正規の接続でサーバーの初期番号を見た後、信頼されたホストのIPアドレスをかたり、見えない応答の番号を予測して三者間の開始手続きを終えた。
- 提案は、同じ接続の再開に必要な時刻の進行
Mを保ち、二つのIPアドレスと二つのポートの組ごとに秘密のずれFを加えた。一つの窓口で見た番号から隣の窓口の開始位置を読みにくくした。
泥棒の最初の訪問は正規のものだった。自分でTCP接続を開き、サーバーが示した初期番号を控える。1996年5月のRFC 1948は、その一枚の控えから次の接続を推測する攻撃を説明した。攻撃者はサーバーが信用する別のホストのIPアドレスを名乗る。サーバーの返事は本物のホストへ行き、攻撃者には見えない。それでも番号を当て、本物のホストが応答しないようにしておけば、最後の確認応答を送れる。IPアドレスを信用の証とする遠隔コマンドサービスは、偽物を知人として迎えてしまう。
問題は二つの会話のつながりにあった。正規の接続で初期シーケンス番号、ISNが見える。RFC 1948が取り上げたBerkeley系の実装では、その値が時刻と新しい接続の回数に応じて予測しやすい幅で増えた。偽の会話で必要なのは次のISNである。最初の値からそれを読めれば、見えない返事にも正しい確認を返せた。番号札の窓口が、次の札の出方まで教えていた。
新しい接続のたびに完全に無作為な数字を選べば済むようにも見える。しかしTCPの元の仕様RFC 793は、初期番号を進める時計を使った。同じ端末とポートの組が再び接続するとき、前回の古いパケットが新しいものとして紛れ込む確率を下げるためだ。RFC 1948はBSD系のTIME-WAIT処理にも触れた。異なる会話の出発点は互いに読めないほうがよい。同じ会話の再登場には前へ進む順序が要る。
RFC 1948は役割を分けた。接続は、ローカルIPアドレスとポート、相手のIPアドレスとポートという四つの値で識別される。初期番号をM + F(四つの値)とする。Mは進む時計、Fは接続の組と秘密から計算するずれだ。組ごとに別の番号の走路ができ、同じ組を後で使うときは時計がその走路を先へ送る。一つの走路の札を見ても、隣のスタート地点は見えない。
秘密が外から計算できては困る。RFC 1948は四つの値と秘密材料の暗号学的ハッシュを提案し、当時使いやすかったMD5を例に挙げた。乱数、機械固有の秘密、起動時刻、機械の識別情報も検討している。Fが読めれば窓口の配置図を泥棒に返すことになる。この方式なら、閉じたすべての接続について記録を持ち続ける必要も抑えられる。
鍵を替える場面には別の注意が要った。稼働中の機械で秘密を変えると、同じ四つの値で接続が再開した際の走路が移る。前回のパケットはまだ道中にあるかもしれない。RFC 1948は、その場合に終了済み接続の状態を保持するか、最大セグメント寿命の二倍だけ静かに待つよう求めた。秘密は走路同士を切り離し、時計は同じ走路の前後関係を守る。新しい錠前を付ける前に、前の客の荷物が戸口に残っていないかを見る。
2012年のRFC 6528はこの発想を標準化し、RFC 1948を置き換えてRFC 793を更新した。四つの値と秘密鍵を受け取る疑似乱数関数を明確にし、M + Fを維持しながら鍵の長さと更新も扱った。1996年の仕組みは生き残った。同じ接続の時間は進め、別の接続との関係は秘密で隠す。
泥棒は今日も一枚目の番号札を取れる。その札から別の窓口の開始位置を知る道は、RFC 1948が閉じた。隣の走路のずれはカウンターの奥にある。
会員向け解説
プロフィールの詳細
適切な会員レベルでログインすると、解説全文と出典メモをご覧いただけます。
Strategic Circle 限定
Strategic Circle
すべての読者に公開されています。参加してログインすると プロフィール解説 を閲覧できます。
Strategic Circle に参加Leadership Alliance 会員限定
Leadership Alliance
対象となる IP 資産の所有者・管理者向けです。ログインすると Leadership Alliance の解説を閲覧できます。
Leadership Alliance に参加





