要約

  • IPv6一時アドレスは、新しい外向き通信に選ばれる識別子の優先期間を限定し、同じインターフェース識別子で活動を結び付けられる期間を短くする。
  • 非推奨化と無効化は別の遷移である。非推奨アドレスは既存通信を継続できるが、適切な優先アドレスがあれば新しい通信には通常選ばれない。
  • ローテーションは匿名性、暗号化、認証を与えない。プレフィックス、安定アドレス、アカウント、Cookie、ログ、同一リンク上の観測は残る。

一つのインターフェースに、安定したアドレスと、いま新規接続に使われる一時アドレスがある。その一時アドレスの優先期間が終わる少し前、ホストは後継を生成し、重複していないか確認する。後継が使える状態になった後、先代は非推奨となる。しかし、先代を使っていたTCP接続までその瞬間に切れるわけではない。先代は有効期間の終わりまで残り得る。

この重なりは、利便性のための例外ではなく設計の中心である。識別子を早く変えたいという要求と、通信を壊したくないという要求を、二つの寿命で分離した。

長く残りすぎた識別子

IPv6のステートレス自動設定では、ルーターが通知するプレフィックスとインターフェース識別子を組み合わせてアドレスを作る。初期の方式では、世界的に一意なIEEE識別子からインターフェース識別子を導く場合があった。端末が別のネットワークへ移ればプレフィックスは変わるが、アドレスの下位部分は同じ端末を示し続け得た。

2001年1月のRFC 3041は、時間とともに変わる識別子から追加のグローバルアドレスを生成した。用途は主に外向きセッションの開始である。短い期間使った後に非推奨とし、新しい一時アドレスで置き換える。すでに確立した接続は古いアドレスを使い続けてもよいが、次の接続は新しいアドレスへ向かう。

ここで重要なのは、乱数だけではない。生成した一時アドレスを新規通信に選ばなければ、相手には安定アドレスが見え続ける。選んでも期限がなければ、その一時アドレスが新しい長期識別子になる。生成、送信元選択、期限の三つがそろって初めて相関の窓が短くなる。

2007年の管理境界

RFC 4941は2007年9月にRFC 3041を置き換えた。すべての一時アドレスに重複アドレス検出を実施し、プレフィックス単位の有効・無効設定を加えた。異なるプレフィックスで異なる識別子を使えるようにし、生成アルゴリズムをMD5だけに限定しなくなった。

一方で、一時アドレスは既定で無効にするという推奨を残した。推奨された優先寿命は一日、有効寿命は一週間だった。同じインターフェース上の複数プレフィックスに、同じランダム化識別子を既定で使う設計も残った。参加するマルチキャストグループを減らす利点はあったが、別プレフィックスのアドレスを結ぶ手掛かりにもなった。

2021年、ローテーションの癖を減らす

現行のRFC 8981は2021年2月に公開され、RFC 4941を廃止した。一時アドレスを既定で無効にするという推奨を削除した。ホスト上の一時アドレスは、異なるプレフィックスやインターフェースも含め、統計的に異なる識別子を持つことになった。DESYNC_FACTOR はアドレスごとに新しく計算され、更新が固定周期にならない。

既定の最大有効寿命は一週間から二日に短縮され、優先寿命の既定値は一日のままとされた。これにより、古いがまだ有効なアドレスの同時数も減る。RFC 8981が修正したのは、乱数生成の式だけではない。プレフィックス間の再利用、予測しやすい更新時刻、長すぎる残存期間という、ライフサイクル全体の結び付きである。

同仕様は、安定アドレスと一時アドレスの併用だけでなく、一時アドレスだけを設定する実装も認める。そのため、観測した一つの一時アドレスから、インターフェースに安定アドレスが必ずあるとも、必ずないとも言えない。

二つの寿命が分けるもの

RFC 4862によれば、優先アドレスは上位層が制限なく使用できる。優先寿命が切れると非推奨アドレスになる。使用は避けるべきだが禁止ではない。別の適切な優先アドレスがあれば、新しい通信の送信元には使わない。一方、アドレス変更で支障が出る既存通信は、そのまま使い続けられる。宛先が非推奨アドレスであるパケットも通常どおり処理される。

有効寿命が切れた時点で、アドレスは無効になる。インターフェースに割り当てられておらず、送信元にも宛先にも使えない。非推奨化を接続終了と書けば連続性を誤解し、無効化を単なる選好の変化と書けば利用可能性を誤解する。

後継の生成は REGEN_ADVANCE だけ早く始まる。識別子生成と重複アドレス検出には時間がかかる可能性があり、先代が非推奨になる前に後継を優先状態へ入れる必要があるからだ。通常は一つのプレフィックスとインターフェースにつき、非推奨でない一時アドレスは一つであり、引き継ぎの短い期間だけ重なる。非推奨だが有効な先代は、上位層が使い終わるまで複数残り得る。

一日の TEMP_PREFERRED_LIFETIME と二日の TEMP_VALID_LIFETIME は変更可能な既定値である。実際の寿命は通知されたプレフィックス寿命を超えられず、アドレスごとの DESYNC_FACTOR で優先寿命はさらに短くなる。既定値だけで実機の更新時刻を断定できない。

異なるリンクへ接続した場合、インターフェース上の既存一時アドレスは削除され、新しいリンク用に再生成される。これにより二つのリンクで異なるランダム識別子を使う。実装は、真のリンク変更と同じリンクの一時的な切断を区別して、不要な再生成を避けてもよい。

減る観測と残る観測

IPアドレスは通信相手にも経路上の装置にも見える。ログにも残る。同じ識別子が何か月も続けば、関係のないように見える取引を結ぶ安価なキーになる。一時アドレスは、そのキーを短い区間に分ける。後の新規セッションは後継を使うため、識別子だけで長期の活動をまとめる作業は難しくなる。通信で知られたアドレスが到達可能である期間も短くなる。

しかし、プレフィックスが同じなら家庭や小規模ネットワークをまとめられる場合がある。別の通信では安定アドレスが見えるかもしれない。DNS名、Cookie、ログイン済みアカウント、サービス側ログは複数アドレスを結べる。同一リンク上のデフォルトルーターは、ホストが使う新旧すべてのアドレスを観測できる。経路上の観測者は、上位層が暗号化されていてもパケットの大きさと時刻を比較できる。

一時アドレスは暗号化ではない。IPv6ヘッダーは見える。利用者、端末、通信相手を認証しない。匿名性を保証せず、すでに渡した情報も消さない。利用者がサービスへログインすれば、サービスはその認証と当時の一時アドレスを結び付けられる。

したがって、アドレス変更だけから「追跡不能」と判断してはならない。正確な結論は、特定の観測者にとって、長期に使える一つのインターフェース識別子が失われた、という範囲にとどまる。

運用証拠を時間で囲む

一時アドレスは運用にも負担を移す。同じホストがログ上では複数に見える。繰り返す障害が複数端末の問題に見える。セキュリティ装置が頻繁な再生成を送信元偽装と誤認することがある。複数の有効アドレスは近隣キャッシュとマルチキャスト状態を消費する。複数接続で同じ送信元を期待するアプリケーションは、選択変更や最終的な無効化に弱い。

必要なのは恒久アドレスへの後退ではなく、観測の範囲を明示することだ。送信元アドレスに時刻、プレフィックス、インターフェースまたはリンク、選択時の状態、必要ならフローや認証済みセッションを組み合わせる。正午に見たアドレスは正午の通信を示すが、永久の端末名ではない。非推奨アドレスが既存接続を運ぶのは失敗ではなく、規定された移行である。

権限も分かれている。ルーターはプレフィックス寿命を通知し、ホストは生成・非推奨化・無効化を実行する。管理者は全体またはプレフィックスごとの方針を決め、OSとアプリケーションは送信元選択に関与する。相手側は独自のログを持つ。標準は遷移を定めるが、一者に完全な利用者像を与えない。

一時アドレスの歴史的な功績は、見える識別子にも終わりを設計できると示したことにある。消したのは通信の事実ではなく、古い識別子が次の通信にも選ばれ続けるという前提だった。

情報源