概要
- Mullvad は複数のサーバー出口IPを提供する数少ないVPNプロバイダー
- 各サーバーで WireGuardキー に基づき出口IPが決定
- 実際には 組み合わせ数が限定的 で、ユーザー特定リスクあり
- 乱数生成アルゴリズム の仕様が原因
- 自己防衛策として キーのローテーション が推奨
Mullvadの出口IP割り当ての仕組みとリスク
- Mullvad は他のVPN(例:Proton VPN)に比べて サーバー数が少ない (578台)
- 各サーバーは 複数の出口IP を持ち、同じサーバーに接続しても異なるIPが割り当てられる
- 出口IPは WireGuardキー によって決定され、キーは1~30日ごとにローテーション
- サードパーティクライアント使用時は ローテーションなし
- サーバーごとに 独立して出口IPが割り当てられる ため、理論上はユーザーごとに一意のIP組み合わせが与えられるはず
- 実際には、 膨大な組み合わせ数(8.2兆以上) があるにもかかわらず、284通りの組み合わせしか割り当てられていない
割り当てアルゴリズムの調査と考察
- 出口IPの位置(プール内のインデックス)を計算し、 サーバーごとのプールサイズで割る と、ほぼ同じ比率(例:81%付近)になる
- 隣接した出口IP しか割り当てられない仕様
- これは seed(種)付き乱数生成器(RNG) の仕様によるものと推測
- Rustの乱数生成器(StdRng)が使われている可能性
- 同じseedとプールサイズで常に同じ結果を出す
- プールサイズが異なっても、最初のfloat値をスケーリングするだけで エントロピーは変わらない
- このため、 出口IPの組み合わせは極端に限定される
Deanonymization(匿名性の危険)
- 各ユーザーの出口IP組み合わせは意外と 多くのユーザーと共有されている
- 例:100,000人中0.34%(約340人)が同じIP組み合わせ
- しかし、 >99%の精度でユーザーを特定 できる場合もある
- フォーラム管理者やデータ流出時のIPログから ユーザーの相関分析 が可能
- 複数サーバー利用でもIP組み合わせの重複範囲で高確率で同一人物と推定される
Mullvadユーザー向けの自己防衛策
- 1つのWireGuardキーでサーバーを頻繁に切り替えない
- Mullvadアプリからログアウトし、キーを強制ローテーション する
- これにより、 同じIP組み合わせでの特定リスクを減少
まとめ
- Mullvadの出口IP割り当ては限定的な組み合わせに依存
- 乱数生成アルゴリズムの仕様 が想定外の匿名性リスクを生む
- キーのローテーション とサーバー切り替え頻度の制御が重要