世界を動かす技術を、日本語で。

Mullvadの出口IPは意外にも特定可能です

2026年5月15日原文(tmctmt.com)

概要

  • 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割り当ては限定的な組み合わせに依存
  • 乱数生成アルゴリズムの仕様 が想定外の匿名性リスクを生む
  • キーのローテーション とサーバー切り替え頻度の制御が重要

Hackerたちの意見

驚くべきことに、サーバーに接続するたびに与えられる出口IPはランダムではなく、あなたのWireGuardキーに基づいて決定的に選ばれるんだって。これって何の意味があるの?サーバーレベルで出口IPをマッピングするより実装が複雑そうだけど、きっと何か良い理由があるんだよね?

これは、悪用するユーザーがいると、他のユーザーが大きなサービス(例えばGoogle)からVPN経由でボット行為をしてIPを常に回転させてブロックされないようにするためだと思う。実用的な対策だけど、プライバシーにはコストがかかるね。

インターネット上には、いろんなIPアドレスから接続しようとすると壊れるものがたくさんあると思う。CAPTCHAの仕組みとか、レート制限とか、IPの評判とかね。

それは、よりステートレスで実装が簡単だから、ユーザー体験も良くなるんだ。接続するたびに新しい出口IPをもらうと、「キー0xabcが出口IP1.2.3.4に対応する」みたいなNATテーブルが必要になって、アクティブなユーザー数分だけ大きくなって、NSAがそのIPを誰がどのくらい使ったかを聞いてきたときに答えられるように永遠に保存しなきゃいけない。キーから導き出された静的なマッピングがあれば、そんなテーブルは必要ない。VPNソフトを再接続しても(例えばWi-Fiホットスポットを切り替えたとき)、違うIPアドレスにならないから、SSHセッションが再開できるのもいいところだね。毎回違うパブリックIPだったら、それは無理だもん。

俺の予想だと、決定論的な割り当てが負荷分散やデバッグを楽にするんじゃないかな。でもプライバシー製品にとっては、その便利さを再考する必要があるかもね。

Mullvadはほぼ完璧なVPNホストだから、サイト運営者がこの特性を利用して禁止措置を取れるといいよね。解決策はシンプル(擬似乱数シードを追加するだけ)だから、Mullvadは数日以内に修正を出すと思う。1. TeamPCPのお気に入りのVPNだし。

ソースは?これについてググってるけど、関連情報が見当たらないんだよね。

驚くべきことに、サーバーに接続するたびに与えられる出口IPはランダムではなく、あなたのWireGuardキーに基づいて決定的に選ばれるんだって。キーは1日から30日ごとに回転する(サードパーティのクライアントを使うと回転しないけど)。これについてちょっと混乱してるんだけど…リポジトリにやり方が詳しく書いてあるなら、サードパーティがメインアプリのクライアントみたいにキーの回転をするのを止める理由は何?

サードパーティのクライアントには、LinuxカーネルのWireGuardドライバーなんかが含まれるよね。特定の商業サービスに対する攻撃を軽減するのは、ネットワークドライバーの仕事じゃないと思う。

サードパーティがキーのローテーションを行うのを妨げているのは何か 知っていること、主にそれだね。

VPNの目的には、ユーザーが訪れるサイトに対して匿名性を持たせることは含まれていないから、Mullvadがユニークな出口IPを強制しないのはあまり驚くことじゃないよ。匿名性を求めるユーザーはTorのようなネットワークを使うべきだね。

それがパブリックVPNの目的なんだよね。公衆VPNを使ってるときは、リクエストをしている人が誰か、終端のIPも含めて誰にも知られたくない。考えてみて。君の論理だと、VPNは終端のIPに対して匿名化すべきじゃないから、トレントには使うべきじゃないってことになる。でも、実際にはトレントにはめちゃくちゃ効果的なんだよね。プライベートVPNの話をしてるなら、Mullvadはそれに当たらないよ。

Hacker Newsで議論の続きを見る