Free and open-source VPN protocol
WireGuardは、暗号化された 仮想プライベートネットワーク (VPN)を実装する 通信プロトコル であり、 無料のオープンソース ソフトウェア です。 [5] 一般的な トンネリングプロトコルである IPsec と OpenVPN よりも軽量でパフォーマンスに優れていることを目指しています 。 [6] WireGuardプロトコルは UDP 経由でトラフィックを転送します。 [7]
2020年3月、このソフトウェアのLinux版は安定した製品リリースに到達し、Linux 5.6カーネルに組み込まれ、一部の Linuxディストリビューション の以前のLinuxカーネルに バックポートされました 。 [4] Linuxカーネルコンポーネントは、 GNU General Public License (GPL)バージョン2の下でライセンスされています。その他の実装は、GPLv2またはその他のフリー/オープンソースライセンスの下でライセンスされています。 [5]
プロトコル
WireGuardプロトコルは、 ホワイトペーパーの10ページに記載されている 構築 文字列の値として が選択されていることからもわかるように、 ノイズプロトコルフレームワークのハンドシェイクパターンのバリエーションです。 [8] IKNoise_IKpsk2_25519_ChaChaPoly_BLAKE2s
鍵 交換、またはハンドシェイクでは、 Curve25519 を使用して長期および一時的なDiffie-Hellman値を組み合わせます 。 [9] 各ペアはCurve 25519を使用して公開鍵と秘密鍵のペアのセットを生成し、公開鍵が交換され、各ペアに WireGuardトンネルで使用するIPアドレス(通常は RFC 1918 )が割り当てられます。 [10] 両方のピアによって鍵が確認されると、ノイズプロトコルを使用して、 Poly1305 で 認証された 対称暗号化用の共有 ChaCha20 セッションキーが生成されます 。 [10]ハッシュテーブルキーには SipHash24 が使用され、 SHA-3 のより高速でコンパクトなバージョンである BLAKE2s 暗号ハッシュ関数 が組み込まれています。 [11] [12] 鍵導出関数は、 HKDF および Base64 でエンコードされた秘密鍵、公開鍵、事前共有鍵 を使用して処理されます。 [11]
WireGuard の証明は、 2 メッセージのノイズベース ハンドシェイク (およびオプションの PSK) を CryptoVerif の暗号ゲーム計算でモデル化することから始まります。ChaCha20 - Poly1305 、 Curve25519 、 HKDF 、ハッシュ チェーン、および関連プリミティブを標準の IND-CPA /INT-CTXT およびランダム オラクル仮定の下で抽象化します。 [13] そのモデルから、CryptoVerif の自動ゲーム ホップは、無制限の並列セッションにわたって、プロトコルが相互認証、 IND-CCA セッション キーの秘密、 前方秘匿性 、 および侵害後のセキュリティを、長期キーが後で漏洩して状態が消去された場合でも保証することを示しています。 [13] 2019 年 5 月、 INRIAの研究者は CryptoVerif 証明アシスタント を使用して作成した、WireGuard プロトコルの機械チェック済み証明を公開しました 。 [14]
オプションの事前共有対称鍵モード
WireGuardは、量子コンピューティングの将来の進歩を緩和するために、対称 暗号化 の追加レイヤーを提供する 事前共有対称鍵モードをサポートしています。これは、量子コンピュータが Curve25519を 破れるまでトラフィックが保存され 、その時点でトラフィックが復号化されるというリスクに対処します。事前共有鍵は「通常、鍵管理の観点から面倒であり、盗難される可能性も高い」ものの、短期的には、対称鍵が侵害された場合でも、Curve25519鍵で十分以上の保護を提供します。 [15]
ネットワーキング
WireGuardはTCP over TCPの潜在的な欠点のため [7] UDP のみを使用します 。 [5] [7] [ 16] [17] TCPベースの接続上で TCPを トンネリングすることを「TCP over TCP」と呼びますが、これを行うと TCPメルトダウン問題 により伝送性能が大幅に低下する可能性があります 。 [18]
デフォルトのサーバーポートはUDP 51820です。 [19]
WireGuardはトンネルの内外を問わず、IPv6を完全にサポートしています。IPv4 と IPv6 の 両方において レイヤー3 のみをサポートし、 v4-in-v6 のカプセル化 (逆もまた同様)が可能です。 [20]
MTUオーバーヘッド
WireGuardのオーバーヘッドは次のように分類されます。 [21]
20バイトのIPv4ヘッダーまたは40バイトのIPv6ヘッダー
8バイトのUDPヘッダー
4バイト型
4バイトのキーインデックス
8バイトのノンス
Nバイト暗号化データ
16バイトの認証タグ
MTUの運用上の考慮事項
WireGuardパケットを転送するアンダーレイネットワークが1500バイトのMTUを維持していると仮定すると、WireGuardインターフェースをすべてのピアに対して1420バイトのMTUに設定することが、IPv6 + IPv4で転送する場合に理想的です。ただし、従来のIPv4トランスポートのみを利用する場合は、WireGuardインターフェースのMTUを1440バイトに設定すれば十分です。 [21]
運用上の観点とネットワーク構成の統一性の観点から、WireGuardインターフェースのネットワーク全体でデフォルトの1420バイトMTUを維持することが有利です。 [22] このアプローチは一貫性を確保し、将来的にWireGuardピアとインターフェースでIPv6を有効にする際のスムーズな移行を促進します。
しかし、ネットワーク接続の形態が様々で、多数のネットワーク接続間でMTUが変化するモバイルクライアントの場合、トンネル内でIPv6トランスポートを可能にする1280のMTUが有益であり、これが最小許容MTUであるため、WireGuardトンネルがほとんどの接続形態で機能することを可能にする。 [23]ホストは PMTUDの 信頼性のために1280を超える送信を避けることが多い 。 [24]
WireGuardインターフェースのMTUは、トンネル内で伝送されるIPバージョンではなく、カプセル化( 外側の )IPプロトコルによって決定されます。WireGuardパケットがIPv4で転送される場合、外側のヘッダーのオーバーヘッドは60バイト(20バイトのIPv4ヘッダー、8バイトのUDPヘッダー、32バイトのWireGuardヘッダー)です。IPv6で転送される場合、外側のヘッダーのオーバーヘッドは80バイトに増加します。 [25] この違いは、ピアがIPv4経由でしか到達できない場合でも、同じメッシュ内の他のピアはIPv6経由または変換メカニズムを介して接続できることを意味します。変換によりヘッダーサイズが増加し、IPv6の最小パスMTUである1280バイトが強制されるため、実装者は一貫したインターフェースMTUを設定する際に、80バイトのIPv6オーバーヘッドを考慮する必要があります。 [26] [27]
拡張性
WireGuardは、サードパーティのプログラムやスクリプトによって拡張できるように設計されています。 [28] これにより、よりユーザーフレンドリーな管理インターフェース(キーの設定が容易になるなど)、ログ記録、動的なファイアウォール更新、動的なIP割り当て、 [29] 、 LDAP 統合など、さまざまな機能がWireGuardに追加されました 。 [30] WireGuardはネイティブサポートされており、 IPVanish や TunnelBear などの多くの商用VPNサービスでもサポートされています 。 [31] [32]
このような複雑な機能を最小限のコアコードベースから排除することで、安定性とセキュリティが向上します。セキュリティを確保するために、WireGuardは暗号化制御の実装オプションを制限し、 鍵交換 プロセスの選択肢を限定し、アルゴリズム [11]を最新の 暗号化プリミティブ の小さなサブセットにマッピングします 。プリミティブのいずれかに欠陥が見つかった場合、問題を解決した新バージョンをリリースできます。
受付 Ars Technica
によるレビューで は、WireGuardは設定と使用が簡単で、強力な暗号を使用し、攻撃対象領域が小さい最小限のコードベースを備えていることが分かりました。 [33]このレビューには、 Linus Torvalds 氏の次の発言が引用されていました 。
「もう一度、[WireGuard]への愛を述べて、すぐに統合されることを願っています。コードは完璧ではないかもしれませんが、ざっと目を通しただけで、 OpenVPN や IPSec の恐ろしさと比べると、芸術作品のようです。」 [33]
2024年の報告書では、WireGuardはIoT セキュリティのための軽量かつ堅牢なソリューションとしての可能性を秘めていると結論付けられました 。 [34]
WireGuardは、 Open Technology Fund [35]からの資金提供と、 Jump Trading 、 Mullvad 、 Tailscale 、 Fly.io 、 NLnet Foundation からの寄付を 受けています 。 [36]
オレゴン州 上院議員 ロン・ワイデンは 、国立標準技術研究所 (NIST)に対し、WireGuardを既存の技術の代替として評価するよう 勧告した。 [37]
可用性
実装
WireGuard プロトコルの実装には以下が含まれます。
DonenfeldによるCとGoで書かれた最初の実装。 [38]
Cloudflare のBoringTunは Rust で書かれた ユーザー空間 実装である。 [39] [40]
Matt DunwoodieによるOpenBSDの実装。C言語で書かれている。 [41]
尾崎良太氏によるNetBSD用のwg(4)実装。C言語で書かれている。 [42]
FreeBSD実装はC言語で書かれており、OpenBSD実装とデータパスの大部分を共有している。 [43]
2021年8月以降、「wireguard-nt」と名付けられた ネイティブ Windowsカーネル実装。 [44]
Fritz!OSバージョン7.39以降をサポートするAVM Fritz!Box モデムルーター。バージョン7.50以降ではサイト間WireGuard接続が可能です。 [45]
C言語で書かれたベクトルパケット処理の ユーザー空間実装。 [46]
歴史
コードベースの初期のスナップショットは2016年6月30日から存在します。 [47] ロゴは、ジェイソン・ドネンフェルドが デルフィ の博物館を訪れた際に見た 神話上のパイソン の石の彫刻からインスピレーションを得ています。 [48]
2019年12月9日、Linuxネットワークスタックの主要メンテナーであるDavid Millerは、WireGuardのパッチを「net-next」メンテナーツリーに受け入れ、次期カーネルに組み込むことを決定した。 [49] [50] [51]
2020年1月28日、 リーナス・トーバルズは デイビッド・ミラーのnet-nextツリーをマージし、WireGuardはメインラインLinuxカーネルツリーに加わった。 [52]
2020年3月20日、 Debian 開発者はDebian 11バージョン(テスト版)のカーネル設定でWireGuardのモジュールビルドオプションを有効にしました。 [53]
2020年3月29日、WireGuardはLinux 5.6リリースツリーに組み込まれました。Windows版はまだベータ版のままです。 [5] [4] これを受けて、 Android 開発者は2020年3月30日に汎用カーネルイメージにWireGuardのネイティブカーネルサポートを追加しました。 [54]
2020年4月22日、 NetworkManager 開発者のBeniamino Galvaniは WireGuardの GUIサポートを GNOME に統合しました。 [55] [56]
2020年5月12日、Matt Dunwoodieは OpenBSD でWireGuardのネイティブカーネルサポートのためのパッチを提案しました。 [57] 2020年6月22日、Matt DunwoodieとJason A. Donenfeldの作業の後、WireGuardのサポートがOpenBSDにインポートされました。 [58]
2020年11月23日、ジェイソン・A・ドネンフェルドは、インストール、安定性、 ARM サポート、 エンタープライズ機能を改善した Windows パッケージのアップデートをリリースしました 。 [59]
2020年11月29日、WireGuardのサポートが FreeBSD 13カーネルにインポートされました。 [43]
2021年1月19日、 pfSense Community Edition (CE) 2.5.0開発スナップショットにWireGuardのサポートがプレビューとして追加されました。 [60]
2021年3月、FreeBSD WireGuardの緊急コードクリーンアップがすぐに完了できなかったため、カーネルモードのWireGuardサポートは、まだテスト中のFreeBSD 13.0から削除されました。 [61] FreeBSDベースのpfSense Community Edition(CE)2.5.0とpfSense Plus 21.02もカーネルベースのWireGuardを削除しました。 [62]
2021年5月、WireGuardのサポートは、pfSenseコミュニティのメンバーであるChristian McDonald氏によって作成された実験的なパッケージとして、pfSense CEおよびpfSense Plusの開発スナップショットに再導入されました。pfSense用のWireGuardパッケージには、Netgateが当初支援していたJason A. Donenfeld氏によるカーネルモードWireGuardの開発作業が組み込まれています。 [63] [60] [64]
2021年6月には、pfSense CE 2.5.2とpfSense Plus 21.05の両方の公式パッケージリポジトリにWireGuardパッケージが含まれていました。 [65]
2023年、WireGuardはドイツの ソブリン・テック・ファンド から209,000ユーロ以上の支援を受けた。 [66]
2025年6月、 IPFireは Linuxカーネル実装を使用したWireGuardのサポートを追加しました。 [67]
参照
注記
^ すべてのプラットフォームに現在リリースされているバージョンがあるわけではなく、一部はベータ版である可能性があります。 [ 更新が必要ですか? ]
参考文献
^ ヤエル・グラウアー(2021年1月16日)「インターネットの安全確保を目指す一人のハッカーの取り組みが、Mac、Linux、Windowsオペレーティングシステムの重要な一部となった経緯」 Business Insider 2022年 11月25日 閲覧 。
^ "wireguard-linux-compat" . 2022年 11月4日 閲覧 。
^ 「インストール」. WireGuard . 2020年 4月23日 閲覧 。
^ abc Salter, Jim (2020年3月30日). 「WireGuard VPN が 1.0.0 にリリース、次期 Linux カーネルにも採用」。2020年3月31日時点のオリジナルよりアーカイブ。 2020年 4月23日 閲覧 。
^ abcd 「WireGuard:高速、最新、安全なVPNトンネル」WireGuard. 2018年4月28日時点のオリジナルよりアーカイブ。 2021年 3月31日 閲覧 。
^ バート、プレニール;フェルコーテレン、フレデリック編。 (2018年6月11日)。応用暗号化とネットワーク セキュリティ。スプリンガー。 ISBN 978-3-319-93387-0 . 2019年2月18日時点のオリジナルよりアーカイブ 。 2018年 6月25日 閲覧。
^ abc Donenfeld, Jason A. 「既知の制限事項 - WireGuard」 www.wireguard.com . 2020年 6月1日 閲覧 。
^ Kobeissi, Nadim (2018年8月23日). 「Noise Explorer: 任意のノイズプロトコルのための完全自動モデリングと検証」 (PDF) . パリ: フランス情報科学・自動化研究所.
^ ダウリング、ベンジャミン、パターソン、ケネス(2018年1月23日)「WireGuardプロトコルの暗号分析」 (PDF) ロンドン大学ロイヤル・ホロウェイ校。
^ ab Master, Alexander (2021年7月28日)、「WireGuardの探究」、 CERIAS技術レポート 、パデュー大学
^ abc Donenfeld, Jason A. 「プロトコルと暗号化 - WireGuard」 www.wireguard.com . 2023年 5月14日 閲覧 。
^ Tibouchi, Mehdi (2023). 応用暗号とネットワークセキュリティ:第21回国際会議、ACNS 2023、京都、日本、2023年6月19日~22日、議事録、パートI . コンピュータサイエンスシリーズの講義ノート. XiaoFeng Wang (第1版). Cham: Springer. pp. 120– 135. ISBN 978-3-031-33487-0 。
^ ab Medley, Liam; Loe, Angelique Faye; Quaglia, Elizabeth A. (2023). 「SoK: 遅延ベース暗号」. 2023 IEEE 第36回コンピュータセキュリティ基盤シンポジウム (CSF) . IEEE. pp. 169– 183. doi :10.1109/csf57540.2023.00028. ISBN 979-8-3503-2192-0 。
^ リップ、ベンジャミン、ブランシェ、ブルーノ、バーガヴァン、カーティケヤン(2019年)、WireGuard仮想プライベートネットワークプロトコルの機械化された暗号証明(レポート)、研究報告書RR-9269、パリ:Inria、p. 49、hal-02100345
^ Donenfeld, Jason (2021年5月2日). 「WireGuard: 次世代カーネルネットワークトンネル」 (PDF) . Wireguard.com .
^ Titz, Olaf (2001年4月23日). 「TCP Over TCPはなぜ悪い考えなのか」 . 2015年 10月17日 閲覧 。
^ 本田 修、大崎 博之、今瀬 誠、石塚 美香、村山 純一 (2005年10月). 「TCP over TCPの理解:TCPトンネリングがエンドツーエンドのスループットと遅延に与える影響」. Atiquzzaman, Mohammed; Balandin, Sergey I (編). 次世代通信・センサーネットワークの性能、サービス品質、制御 III . 第6011巻. 書誌コード :2005SPIE.6011..138H. CiteSeerX 10.1.1.78.5815 . doi :10.1117/12.630496. S2CID 8945952.
^ 本田 修、大崎 博之、今瀬 誠、石塚 美香、村山 純一。「TCP over TCPの理解:TCPトンネリングがエンドツーエンドのスループットとレイテンシに与える影響」 (PDF) 。
^ Pavan, Gunda (2020). 「KubernetesクラスターにおけるWireguardのパフォーマンス評価」 (PDF) . カールスクルーナ:ブレーキンゲ工科大学.
^ Donenfeld, Jason A. 「Introduction & Motivation」 (PDF) . WireGuard: 次世代カーネルネットワークトンネル (PDF) . 2018年3月4日時点のオリジナルより アーカイブ (PDF) 。
^ ab Donenfeld, Jason A. (2017年12月11日). 「[WireGuard] Wireguardのヘッダー/MTUサイズ」 . 2024年 1月13日 閲覧 。
^ Goethals, Tom. 「Warrens: エッジコンテナネットワーク向けの分散型コネクションレストンネル」 (PDF) 。
^ シャノン、コリーン、ムーア、クラフィー、KC (2002年12月1日). 「民間伝承を超えて:断片化されたトラフィックに関する観察」 . IEEE/ACM Trans. Netw . 10 (6): 709– 720. Bibcode :2002ITNet..10..709S. doi :10.1109/TNET.2002.805028. ISSN 1063-6692.
^ Bonica, Ron; Kamite, Yuji; Alston, Anew; Henriques, Daniam; Jalil, Luay (2024). IPv6コンパクトルーティングヘッダー(CRH)(レポート). Internet Engineering Task Force.
^ Wu, Peter (2019年6月17日). 「WireGuardプロトコルの分析」 (PDF) . アイントホーフェン工科大学 数学・コンピュータサイエンス学部.
^ Lam, Vincent. 「SPINにおけるIPv6/IPv4プロトコル変換」 (PDF) . ワシントン大学.
^ Bao, C.; Li, X.; Baker, F.; Anderson, T.; Gont, F. (2016). RFC 7915: IP/ICMP変換アルゴリズム. 米国: RFC Editor. doi :10.17487/rfc7915.
^ Ramezanpour, Reza (2021年8月31日). 「kOpsを使用したCalicoとWireGuardの統合」. Tigera - Calicoの開発者. 2025年 8月20日 閲覧 。
^ Wireguard Dynamic IP Configuration Tool、WireGuard、2023年5月14日、 2023年 5月14日 閲覧
^ WireGuard Portal – LDAP の使用法、WireGuard Portal Project 、 2025年 8月7日 閲覧
^ 「IPVanishレビュー:無制限接続を備えた米国ベースのVPN」 PCWorld . 2025年 8月20日 閲覧 。
^ Eddy, Max (2024年6月4日). 「最高のVPNサービス」. ニューヨーク・タイムズ . ISSN 0362-4331 . 2025年 8月20日 閲覧 。
^ ab Salter, Jim (2018年8月26日). 「WireGuard VPNレビュー:新しいタイプのVPNが大きなメリットを提供」 Ars Technica . 2025年 8月20日 閲覧 。
^ Jumakhan, Haseebullah; Mirzaeinia, Amir (2024), Wireguard: IoTデバイス接続を保護するための効率的なソリューション , CSCI-RTMC, arXiv : 2402.02093
^ 「より安全でアクセスしやすく、回復力のあるWireGuard VPNプロトコルの構築」 www.opentech.fund . 2022年1月4日. 2022年 6月20日 閲覧 。
^ “寄付”. WireGuard. 2018年4月28日時点のオリジナルよりアーカイブ 。 2018年 4月28日 閲覧。
^ 「米国上院議員、政府VPNとしてオープンソースのWireGuardをNISTに推奨」 Phoronix . 2018年6月30日. 2018年8月5日時点のオリジナルよりアーカイブ 。 2018年 8月5日 閲覧。
^ Donenfeld, Jason (2019年6月7日). 「WireGuard: 高速で最新、安全なVPNトンネル」 . 2019年 6月16日 閲覧 。
^ Krasnov, Vlad (2018年12月18日). 「BoringTun、Rustによるユーザー空間WireGuard実装」. Cloudflareブログ . 2019年4月4日時点のオリジナルよりアーカイブ。 2019年 3月29日 閲覧 。
^ 「CloudFlare、Rustで書かれたWireGuardユーザー空間実装として「BoringTun」をリリース」 phoronix.com . 2019年 3月29日 閲覧 。
^ Johansson, Janne (2020年6月21日). 「WireGuardをOpenBSDにインポート」
^ "wg(4) - NetBSDマニュアルページ". 2020年8月20日.
^ ab 「カーネル WireGuard サポートをインポート」。
^ 「WireGuardNT:Windowsカーネル向けの高性能WireGuard実装」。2021年8月2日。
^ 「WireGuard: VPN がこんなに簡単になったことはかつてない」。
^ 「FD.io VPP: src/plugins/wireguard/wireguard.c ファイルリファレンス」. s3-docs.fd.io . 2025年 8月26日 閲覧 。
^ 「/モノリシック-歴史的/の索引」。
^ 「インターネットの安全確保を目指す一人のハッカーの取り組みが、Mac、Linux、Windowsオペレーティングシステムの重要な一部となった経緯」 Business Insider 2021年1月16日。2021年1月16日時点のオリジナルよりアーカイブ。
^ "e7096c131e5161fa3b8e52a650d7719d2857adfd - pub/scm/linux/kernel/git/davem/net-next - Google の Git". kernel.googlesource.com 。
^ 「LKML: David Miller: Re: [PATCH net-next v2] net: WireGuard セキュアネットワークトンネル」. lkml.org .
^ 「[お知らせ] WireGuardがnet-nextに統合され、Linux 5.6に搭載へ」2020年1月9日. オリジナルより2020年1月9日時点のアーカイブ。
^ Torvalds, Linus. "index : kernel/git/torvalds/linux.git". Linuxカーネルソースツリー . Kernel.org . 2020年 2月2日 閲覧 。
^ "drivers/net: WIREGUARDをモジュールとして有効化". 2020年3月21日.
^ 「ANDROID: GKI: CONFIG_WIREGUARD を有効にする」。
^ “merge branch 'bg/wireguard' (d321d0df) · Commits · GNOME / network-manager-applet”. gitlab.gnome.org . 2020年4月22日. 2020年 5月30日 閲覧 。
^ 「NetworkManagerを使用してWireguard VPNサーバーに接続する | dbeley」。dbeley.ovh 。 2025年 8月21日 閲覧 。
^ 「WireGuard for OpenBSDカーネルパッチを公開」2020年5月12日。
^ 「WireGuard VPN通信用のカーネル内ドライバーであるwg(4)を追加します」。
^ 「[お知らせ] WireGuard for Windows 0.3: ARMサポート、エンタープライズ機能など」2020年11月23日。
^ ab Paxson, Audian (2021年1月19日). 「pfSenseソフトウェア向けWireGuard」. Netgate . 2021年 6月9日 閲覧 。
^ アンダーソン、ティム(2021年3月23日)「FreeBSD 13.0はWireGuardサポートなしで出荷へ。開発者が初期実装の「重大な問題」を修正するため介入」 The Register 、 Situation Publishing 。 2021年 3月31日 閲覧 。
^ Thompson, Jim (2021年3月18日). 「WireGuardがpfSense® CEおよびpfSense® Plusソフトウェアから削除されました」. Netgateブログ . Rubicon Communications . 2021年 3月20日 閲覧 。
^ Long, Scott (2021年5月5日). 「pfSense: WireGuardが実験的パッケージとして復活」. Netgate - セキュアネットワークはここから始まる . 2021年 6月9日 閲覧。
^ 「wireguard-freebsd - FreeBSDカーネル用のWireGuard実装」. git.zx2c4.com . 2021年 6月9日 閲覧 。
^ Pingle, Jim (2021年6月2日). 「pfSense Plus 21.05-RELEASE 発売開始」. Netgate - セキュアネットワークはここから始まる. 2021年 6月9日 閲覧 。
^ "WireGuard". Sovereign Tech Fund . 2024年 5月26日 閲覧 。
^ 「IPFire 2.29 - コアアップデート195リリース - WireGuard Inside」 IPFireブログ。 2025年 10月16日 閲覧 。