WireGuardこれは、公開鍵で相互に確認された2つのデバイス間に暗号化された仮想ネットワーク接続(トンネル)を作成するVPNプロトコルです。
StageVPNアプリ(iPhone・iPad・Android)は、このWireGuardで機器全体のIPv4・IPv6通信とDNSクエリをVPNサーバーに送信します。この記事では、WireGuardがなぜ迅速でレビューが簡単であると評価されているのか、8つの質問で説明します。質問ごとに二つの文章の答えを先に書いて、その下に表と図式で原理を解きました。数値はWireGuardホワイトペーパーと公式プロトコル文書に基づいています。
- 約4,000ジュール
- 2017年ホワイトペーパー発表時のLinuxカーネル実装のコード規模
- 1回往復
- セッションキーを作成するハンドシェイクに必要なメッセージの往復回数
- 120秒
- 新しいハンドシェイクでセッションキーを変更し始める時点
- 1つ
- ネゴシエーションなしで固定して書き込むパスワードの組み合わせの数
下の図は、この記事で最も重要な3つの性質をまとめました。デバイスとサーバーは、1回の往復でセッションキーを合意します。その鍵は約2分ごとに新しいものに変わります。サーバーは相手のデバイスをIPアドレスではなく公開鍵として認識します。 3つの性質がそれぞれどんな質問の答えになるのかを読んでください。

Q. WireGuardとは何ですか、なぜ作成したのですか?
WireGuardは、Jason A. Donenfeldが設計し、2017年に公開したVPNプロトコルであり、その実装です。設定項目を減らしてパスワード方式をひとつに固定し、専門家がコード全体を読んで検討できる大きさにすることが目標でした。
VPNプロトコルとは、デバイスとサーバーがお互いを確認し、暗号化キーを分け、データをパックして送受信するルールです。既存のプロトコルは、さまざまな環境に合わせるためのオプションと交渉の段階をたくさん持っていました。オプションが多いとコードが大きくなります。設定 誤って弱い構成が作られる余地も大きくなります。 WireGuardは反対方向を選んだ。選べるものを減らし、減らした分だけコードを短くしました。
| 視点 | イベント | 意味 |
|---|---|---|
| 2017年 | NDSS協会でホワイトペーパーを発表 | 設計目標、ハンドシェイク、暗号鍵ルーティングが公開文書にまとめられている |
| 2020年3月 | Linux 5.6カーネルにデフォルトを含める | 別のモジュールをインストールせずにLinuxサーバーで利用可能 |
| ホワイトペーパー発表以降 | Windows、macOS、iOS、Android用の公式実装を公開 | スマートフォンアプリが同じプロトコルでサーバーに接続する |
| 現在 | Tamarin、CryptoVerifなどの形式検証研究の蓄積 | プロトコル設計の安全性が学術的に検討されている |
コードの規模は実装と時点によって異なります。だから、「約4,000行」は正確な現在値ではなく、「他のVPN実装よりも桁数が小さい」という意味で読んでください。 StageVPNアプリはiPhone・iPadとAndroidでこのWireGuard実装を使用します。 Chrome拡張機能StageVPN for Chromeは、WireGuardではなくHTTPSプロキシ方式です。 2つの方法の違い ブラウザVPNとアプリVPNの比較で扱います。
Q. WireGuard接続はどのような順序で行われますか?
接続は2つのメッセージ、つまり1回の往復ハンドシェイクで行われます。イニシエータが開始メッセージを送信し、応答者が応答メッセージを返すと、両方が同じセッションキーを計算してすぐにデータを送受信します。
- スタートメッセージ開始者(機器)が一時公開鍵、暗号化した自己公開鍵、暗号化したタイムスタンプを送信します
- 応答メッセージ回答者(サーバー)が自己一時公開鍵を送信し、開始者を確認します
- セッションキーの計算両方が鍵交換結果から送り用・受け取り用対称鍵の一対を誘導します
- データ転送パケットごとにChaCha20-Poly1305で暗号化してシーケンス番号(カウンタ)を付けます
ハンドシェイクとは、通信を開始する前にお互いを確認し、暗号鍵を合意する手順です。 WireGuardのハンドシェイクは、NoiseフレームワークのIKパターンに従います。 IKパターンでは、イニシエータは回答者の公開鍵を事前に知っておく必要があります。 StageVPNアプリは、接続するサーバーの公開鍵をVPN設定として受け取るため、この条件を満たします。
| メッセージ | サイズ | 入れる内容 | 役割 |
|---|---|---|---|
| ハンドシェイク開始(タイプ1) | 148バイト | 一時公開鍵、暗号化された静的公開鍵、暗号化されたタイムスタンプ、MAC 2個 | イニシエータの身元証明、再送信攻撃のブロック |
| ハンドシェイク応答(タイプ2) | 92バイト | 回答者一時公開鍵、確認用空の暗号文、MAC 2個 | 鍵合意完了 |
| クッキー応答(タイプ3) | 64バイト | 暗号化されたクッキー | サーバー過負荷時の出発アドレスの確認 |
| データ(タイプ4) | ヘッダー16バイトと暗号文 | 受信側番号、カウンタ、暗号化されたIPパケットと認証タグ | 実際の通信配信 |
開始メッセージのタイムスタンプは再送信攻撃を防ぎます。再送信攻撃とは、攻撃者が正常なメッセージを録音しておき、後で再送する攻撃です。サーバーは、同じデバイスが以前に送信したタイムスタンプより古い値が来ると、そのメッセージを破棄します。
最初のMACはサーバーの公開鍵を知っている必要があります。そのため、サーバーの公開鍵を知らないスキャナーが送信したパケットには、サーバーが応答しません。外部から見ると、そのポートにVPNサーバーがあるかどうかもわかりにくいです。サーバーが過負荷状態の場合は、重い計算を行う前にクッキー応答を最初に送信してください。出発アドレスが本物であると確認された要求のみ処理し、偽造アドレスでサーバーを忙しくする攻撃に備えた装置です。
Q. WireGuardはどのような暗号技術を使いますか?
役割ごとに暗号技術を一つずつ決めておき、交渉なしで使用します。何らかのテクニックに問題がある場合は、オプションを追加するのではなく、プロトコルバージョンを変更して、すべての実装が一緒に移動するように設計しました。
公式文書に書かれたハンドシェイクの正式名はNoise_IKpsk2_25519_ChaChaPoly_BLAKE2sです。名前はまもなくスキームです。 IKはハンドシェイクパターン、psk2はオプションの事前共有キー、25519はキー交換曲線、ChaChaPolyはデータ暗号、BLAKE2sはハッシュを意味します。
| 役割 | 技術 | 根拠文書 | 特徴 |
|---|---|---|---|
| ハンドシェイクデザイン | Noise_IKpsk2パターン | Noise Protocol Framework | 1回往復で相互認証と鍵合意、開始者ID保護 |
| キー交換 | Curve25519(X25519) | RFC 7748 | 32バイト公開鍵、実装ミスが少なくなるように設計された楕円曲線 |
| データ暗号化と整合性 | ChaCha20-Poly1305 | RFC 8439 | 暗号化と変調検査を一度に処理、ハードウェアアクセラレーションなしで高速 |
| クッキー暗号化 | XChaCha20-Poly1305 | WireGuardプロトコルドキュメント | 長い乱数値を安全に書き込むための変形 |
| ハッシュとMAC | BLAKE2s | RFC 7693 | 高速ハッシュ、キー付きMAC計算にも使用 |
| キー誘導 | HKDF | RFC 5869 | 鍵交換結果からセッション鍵を抜く |
| 内部ハッシュテーブル | SipHash24 | Aumasson・Bernstein論文 | ハッシュテーブルを狙った操作攻撃防止 |
交渉段階がないことが重要です。 TLSやIKEv2のように暗号リストを送受信するプロトコルでは、攻撃者が弱いパスワードを選ぶように誘導するダウングレード攻撃が研究されてきました。 WireGuardには選ぶリスト自体はありません。したがって、このような攻撃が成立する点もありません。
psk2、つまり事前共有キーは選択機能です。公開鍵暗号の上に対称鍵をさらに重ねて、将来の量子コンピュータがCurve25519を壊しても通信内容を守ろうとする追加防御です。選択機能なので、サービスごとに使用するかどうかが異なります。 StageVPNは、量子耐性暗号化を提供機能に導きません。
設計の安全性は数回学術的に検討されています。 WireGuardプロジェクトは、Tamarin証明書を使用した記号的検証、CryptoVerifを使用した計算的証明など、形式検証研究を公式サイトにまとめました。ただし、型検証はプロトコル設計の証明です。各アプリの実装品質やサーバー運用まで保証するものではありません。そのため、アプリを最新バージョンに保ち、オペレータの履歴ポリシーを確認する必要があります。
Q. セッションキーはどれくらいの頻度で変更されますか?
セッションキーは約2分ごとに新しいハンドシェイクに置き換えられます。交換は既存のキーで通信中に進行するため、ユーザーは途切れることはありません。
- 0秒ハンドシェイク完了
新しいセッションキーでデータ転送を開始します。
- 120秒新しいハンドシェイクを開始
送信するデータがある場合は、新しいキーを作成します(REKEY_AFTER_TIME)。メッセージを2の60平方個送信した場合でも、キーを置き換えます。
- 180秒前のキーの拒否
この時間が経過したキーからのパケットは受信されません(REJECT_AFTER_TIME)。
- 540秒アイドル状態の整理
新しいハンドシェイクなしで180秒の3倍が経過すると、一時キーとセッション状態の両方を消去します。
鍵を頻繁に変更する理由は、前方のセキュリティのためです。前方のセキュリティとは、後で機器の長期秘密鍵が公開されても、すでに終了したセッションの通信内容は解けないようにする性質です。 WireGuardはハンドシェイクごとに新しい一時キーを作成し、書き込んだキーはメモリから消去します。たとえ1つのセッションキーが漏れても、影響範囲はそのキーを書き込んだ数分に制限されます。
ハンドシェイクの試みにもルールがあります。応答がない場合は、5秒間隔(REKEY_TIMEOUT)で再試行してください。 90秒(REKEY_ATTEMPT_TIME)の間に応答がない場合は、試行を停止します。データを受信して10秒(KEEPALIVE_TIMEOUT)以内に送信するデータがない場合は、空のキープアライブパケットを送信して相手が応答を確認できるようにします。
WireGuardは、送信するデータがないとハンドシェイクしないように設計されています。ただし、ルータや通信会社機器(NAT)の背後にある機器は、接続情報が消去されないように一定間隔で空のパケットを送信する設定(PersistentKeepalive)を書くことが多いです。公式案内はこの時25秒間隔をお勧めします。 StageVPNアプリのVPN設定もデフォルトで25秒を書き込みます(2026年9月現在)。

Q. WireGuardはOpenVPN、IKEv2/IPsecと何が違うのですか?
WireGuardは選択肢を減らし、コードを小さくしたプロトコルです。 OpenVPNとIKEv2 / IPsecは、さまざまな環境に合わせてネゴシエーションとオプションを備えたプロトコルです。
上の図は、コードスケール、転送方式、およびパスワードネゴシエーション方式の違いを示しています。下の表は、画像に含まれていない残りの違いをまとめたものです。三つとも現在広く使われており、どちらが無条件に優れているというより設計哲学が異なります。
| アイテム | WireGuard | OpenVPN | IKEv2/IPsec |
|---|---|---|---|
| 公開・標準 | 2017年のホワイトペーパー、2020年のLinuxカーネルを含む | 2001年初公開、自己オープンソースプロトコル | IETF規格(IKEv2はRFC 7296) |
| 相対確認方式 | 32バイト公開鍵 | 主にX.509証明書、ユーザー名・パスワード並行可能 | 証明書、事前共有鍵、EAPなど、さまざまな |
| 鍵合意往復 | 1回往復(メッセージ2個) | TLSハンドシェイクを含む数回 | 少なくとも2回交換(メッセージ4個) |
| ネットワークの変更 | 基本動作につながる(ローミング) | 通常、再接続、設定によって一部サポート | MOBIKE(RFC 4555)をサポートすると続く |
| 設定項目 | キー、アドレス、許可IPなどの数行 | 証明書とオプションが多い | 認証方式とポリシー項目が多い |
| オペレーティングシステム内蔵 | Linuxカーネル内蔵、その他はアプリとして提供 | 個別プログラムのインストール | Windows、iOS、Androidなどに内蔵 |
速度はプロトコルだけでは決まりません。サーバーまでの距離、ローカル回線の品質、サーバーの混雑度、デバイスのパフォーマンスが一緒に影響します。 WireGuardは、手続きが簡単で、パスワード操作が軽く、同じ条件下で高速であることがよくあります。だからいつも速いとは言えません。体感速度が低い場合は、近い場所のサーバーに置き換えて比較してみるのがまずです。
Q.公開鍵がすぐに住所となる「暗号鍵ルーティング」とは何ですか?
暗号鍵ルーティングとは、相手の公開鍵とその相手が使えるIPアドレス範囲(AllowedIPs)を一つにまとめておき、パケットを送るときと受け取るときともにこの束で判断する方式です。送信するときは宛先アドレスでどの公開鍵で暗号化するかを決め、受け取るときは復号化に成功した公開鍵がその出発アドレスを書く資格があるか確認します。
この構造には2つの利点がある。まず、サーバーは、実際にトンネルIPからのパケットがそのIPに囲まれた公開鍵で復号化された場合にのみ認識します。他のデバイスがトンネルIPをまねても復号化されないため、パケットが破棄されます。第二に、ファイアウォールルールとパスワードルールが1つにまとめられます。管理者は、「この公開鍵はこのアドレス範囲」という1行だけを管理できます。
ユーザ機器側で AllowedIPs を 0.0.0.0/0 と ::/0 のままにすると、すべての IPv4・IPv6 通信が 1 つのサーバへの全体トンネルになります。 StageVPNアプリはこの方法を書き込みます。アプリがサーバーから受信するWireGuard設定の主な項目は次のとおりです。
| 構成項目 | StageVPNアプリの設定 | ユーザーに与える意味 |
|---|---|---|
| AllowedIPs | 0.0.0.0/0, ::/0 | IPv4・IPv6通信全体がトンネルで行く機器全体の保護 |
| DNS | VPN設定で指定したDNSサーバー、クエリもトンネルに転送 | キャリアまたはWi-Fiオペレータが閲覧したドメインを見るのが難しい |
| トンネルIP(Address) | サーバー内の内部アドレスをアカウントごとに割り当てる | サーバーが公開鍵と内部アドレスで端末を区別 |
| MTU | デフォルト値1280、サーバー設定によって異なる場合があります | モバイルネットワークとデュアルカプセル化でパケットが切り捨てられる問題を軽減 |
| PersistentKeepalive | デフォルト値25秒 | ルーター・通信会社機器の背後でも接続情報を維持 |
| 接続位置 | オペレーターが管理するサーバーの国から選択または自動選択 | 訪問したサイトには、選択したサーバーのIPが表示されます |
MTUは、一度に送信できるパケットの最大サイズです。 WireGuardは元のパケットを暗号化してUDPパケットに戻すので、ヘッダーと同じサイズになります。したがって、トンネル内のMTUを回線MTUよりも小さくする必要があり、パケットが断片化されたり破棄されたりすることはありません。接続履歴で何を保管するか 接続記録保管通知に公開されています。
Q. WireGuardが頑丈であれば、インターネット使用全体が安全ですか?
いいえ。 WireGuardが保護する区間は私のデバイスからVPNサーバーまでです。
- マイデバイスStageVPNアプリ
- WireGuard暗号化
- 共用Wi-Fi・通信網カフェ・LTE
- WireGuard暗号化
- VPNサーバーStageVPN
- HTTPS
- ウェブサイト・アプリサーバー銀行・メール
- VPN暗号化
- サイトHTTPS
- 露出できる区間
図の左の2つの区間では、公衆Wi-Fiの他のユーザー、Wi-Fiオペレータ、および通信事業者が通信内容と目的地を見にくいです。 VPNサーバーを出た後は、通常のインターネットと同じです。そのため、アドレスがhttps://で始まるサイトであることが再び重要になります。プロトコル外のリスクは別々に備えなければなりません。
- VPNサーバー以降の区間: HTTPS を使用しないサイトは、VPN サーバーからサイトまで暗号化されません。
- オペレーターに対する信頼:WireGuardサーバーは、構造上、各機器の公開鍵、トンネルIP、最後の接続アドレスを知っています。接続の宛先IPを表示できる場所でもあります。 StageVPNは通信秘密保護法に従って接続記録を93日保存した後、自動的に削除し、通信内容は記録しません。理由は アクセス履歴保持ポリシーを公開する理由で説明しました。
- 端末内の脅威:悪意のあるアプリやフィッシングページはトンネルの内側、つまり私のデバイスで起こる問題です。プロトコルがブロックされていません。区分は VPNがブロックするものとブロックできないものを参照してください。
- 切断された瞬間:トンネルが途切れている間の通信は、通常の経路に出ることができます。機密性の高い作業の前に、アプリの接続状態を確認してください。公共ネットワークでの習慣は 公衆無線LANの安全規則にまとめました。
- DNSとIPv6: 別の VPN アプリや端末の個別の DNS 設定がパスを変更すると、クエリがトンネルから出る可能性があります。確認方法は DNSリークとWebRTCリークガイドにあります。
初めて接続すると、iPhoneはVPN設定を追加し、AndroidはVPN接続要求を許可するように求めます。これを許可する必要があり、アプリはWireGuardトンネルを作成できます。デバイス固有の順序は iPhone・iPadから始めると Androidで始めるにあり、提供範囲は 機能と提供範囲で確認できます。
Q. Wi-FiからLTEに変わっても接続が維持されるのはなぜですか?
これは、WireGuardが端末をIPアドレスではなく公開鍵で識別するためです。ネットワークが変わってIPが変わっても、サーバーは正常に復号されたパケットが最後に到着したアドレスを記憶し、そのアドレスで応答します。
IPアドレスで接続を区切る方法
- ネットワークが変わると既存の接続が失われる
- 再認証して鍵を合意する必要がある
- 移行瞬間アプリ通信が止まりやすく
WireGuard(公開鍵で区切る)
- 新しいアドレスからのパケットも同じ公開鍵で復号されると、同じ相手として認識されます
- サーバーが応答するアドレスを新しいアドレスに更新
- キー寿命が残っているとハンドシェイクなしですぐに続く
この動作をローミングと呼びます。スマートフォンは家Wi-Fi、カフェWi-Fi、移動中のLTE・5Gの間を一日にも何度も行きます。そのたびにVPNが最初から再接続されると、メッセンジャーとストリーミングが停止する瞬間が発生します。 WireGuardはこの遷移をプロトコルのデフォルト動作として扱います。別途設定は不要です。
WireGuardはUDPのみを使用します。 UDPは、接続確立手続きのない軽量伝送方式です。トンネル内で行き来するTCP通信の再送制御と重ならない。 TCPの上にTCPを再び乗せると、損失が生じたときに2つの層が同時に再送信し、速度が著しく低下するという問題が知られている。 WireGuardはこの問題を構造的に回避します。
一方、StageVPNは法令による接続記録の一つで、機器がVPNサーバに接続してきたIPアドレスが変わったときにそのアドレスを記録します。ローミングが起こったという事実自体は、サーバーに残るという意味です。
知っておいてください UDPだけを書く設計には限界もあります。ホテル、会社、学校ネットワークの中には、Webアクセス以外のUDP通信を防ぐ場所があります。そのような場所では、WireGuard接続にならない可能性があります。この時は他のWi-Fiやモバイルデータに変えてみてください。継続しなければ、デバイスモデル、オペレーティングシステムとアプリバージョン、発生時刻を整理して カスタマーサポートにお問い合わせください。

用語辞書
この記事に出てきた用語を一文ずつまとめました。他のVPNドキュメントを読むときも同じ意味で書かれています。
- ハンドシェイク
- 通信を開始する前に、2 台の端末がお互いを確認し、暗号鍵を合意する手順です。
- 1-RTT(1回往復)
- メッセージが一度行ってから戻ってくるだけで手続きが終わるという意味です。
- 静的キー(公開キー・秘密キー)
- 端末に長期間保管し、身元確認に使用する鍵ペアです。公開鍵は相手に通知し、秘密鍵は端末からエクスポートしません。
- 一時キー
- ハンドシェイクごとに新しく作成し、セッションが終了すると消去するキーです。
- セッションキー
- ハンドシェイクの結果として作成され、実際のデータを暗号化する対称キー。
- 前方セキュリティ
- 長期秘密鍵が後で公開されても、すでに終わったセッションの内容は解けないようにする性質です。
- AEAD
- 暗号化と変調チェックを一度に処理する暗号方式として、ChaCha20-Poly1305がここに属します。
- MAC
- メッセージが偽造されていないことを確認するためにキーで計算して貼り付ける短い値です。
- 再送信攻撃
- 通常のメッセージを録音しておき、後で再送してシステムをだます攻撃です。
- 暗号鍵ルーティング
- 公開鍵と許容IP範囲を結び、どの鍵で暗号化してどのパケットを受け入れるかを決めるWireGuardの方式です。
- AllowedIPs
- 特定の公開鍵の相手が送受信できるIPアドレス範囲で、0.0.0.0/0と::/0はすべてのアドレスを意味します。
- エンドポイント
- 相手の実際のインターネットアドレスとUDPポートであり、ローミングが発生するとサーバーはこの値を更新します。
- ローミング
- デバイスのIPアドレスが変わっても同じトンネルが続く動作です。
- NAT
- ルーターや通信会社の機器が複数の機器のアドレスを1つの認定アドレスに置き換えてエクスポートする方式です。
- keepalive
- 接続情報が消去されないように定期的に送信する内容のないパケット。
- MTU
- 一度に送信できるパケットの最大サイズ。
- UDP
- 接続確立手順と再送なしでパケットを送信する軽い伝送方式です。
参考資料
- Protocol & Cryptography — メッセージ形式とサイズ、パスワード技術、タイマー値(WireGuardプロジェクト)
- WireGuard: Next Generation Kernel Network Tunnel — 設計目標、コードスケール、暗号鍵ルーティング、ローミング(Jason A. Donenfeld、NDSS 2017ホワイトペーパー)
- Formal Verification — Tamarin、CryptoVerifなどの形式検証研究リスト(WireGuardプロジェクト)
- クイックスタート — PersistentKeepaliveの設定と推奨間隔(WireGuardプロジェクト)
- The Noise Protocol Framework — IKハンドシェイクパターンの定義(ノイズプロジェクト)
- RFC 8439: ChaCha20 and Poly1305 for IETF Protocols — データ暗号化方式(IETF)
- RFC 7748: Elliptic Curves for Security — Curve25519 キー交換 (IETF)
- RFC 7693: The BLAKE2 Cryptographic Hash and MAC — ハッシュとMAC計算(IETF)
- RFC 7296: Internet Key Exchange Protocol Version 2 (IKEv2) - IKEv2交換手順(IETF)
- RFC 4555: IKEv2 Mobility and Multihoming Protocol (MOBIKE) — IKEv2のネットワーク変更処理(IETF)



