Linux カーネル 5.6 に含まれる VPN WireGuard

今日、Linus は VPN インターフェイスを備えた net-next ブランチを自分自身に移動しました ワイヤガード。 このイベントについて сообщили WireGuard メーリング リストで。

Linux カーネル 5.6 に含まれる VPN WireGuard

新しい Linux 5.6 カーネルのコード収集は現在進行中です。 WireGuard は、最新の暗号化を実装した高速な次世代 VPN です。 これは元々、既存の VPN のよりシンプルで便利な代替手段として開発されました。 著者はカナダの情報セキュリティ専門家ジェイソン・A・ドネンフェルド氏。 2018 年 XNUMX 月、WireGuard 褒められた ライナス・トーバルズ著。 その頃、Linux カーネルに VPN を組み込む作業が始まりました。 このプロセスには少し時間がかかりました。

「Jason が WireGuard をカーネルに含めるプル リクエストを行ったようです」と Linus は 2 年 2018 月 XNUMX 日に書いています。 — この VPN に対する愛をもう一度宣言し、近いうちに合併することを願ってもいいですか? コードは完璧ではないかもしれませんが、私がそれを見たところ、OpenVPN や IPSec の恐ろしさに比べれば、これは本物の芸術作品です。」

ライナスの希望にもかかわらず、合併は2019年半も続いた。 主な問題は、パフォーマンスを向上させるために使用された独自の暗号化機能の実装に関係していることが判明しました。 XNUMX年XNUMX月に長い交渉を経て、 妥協的な決定がなされた カーネルで利用可能な Crypto API 関数にパッチを変換します。これに対して、WireGuard 開発者はパフォーマンスと一般的なセキュリティの分野で不満を抱いています。 しかし彼らは、ネイティブの WireGuard 暗号化機能を別の低レベル Zinc API に分離し、最終的にはそれらをカーネルに移植することを決定しました。 XNUMX 月、カーネル開発者は約束を守り、 同意した コードの一部を Zinc からメイン カーネルに転送します。 たとえば、暗号化 API では 含まれた WireGuard で準備された ChaCha20 および Poly1305 アルゴリズムの高速実装。

最後に、9 年 2019 月 XNUMX 日、Linux カーネルのネットワーク サブシステム責任者である David S. Miller 氏は次のように述べました。 受け入れた ネット次の支店へ パッチ WireGuard プロジェクトからの VPN インターフェイスの実装を使用します。

そして今日、29 年 2020 月 XNUMX 日、変更はカーネルに含めるために Linus に送られました。

Linux カーネル 5.6 に含まれる VPN WireGuard

他の VPN ソリューションに対する WireGuard の利点は次のとおりです。

  • 使いやすい。
  • 最新の暗号化を使用: ノイズ プロトコル フレームワーク、Curve25519、ChaCha20、Poly1305、BLAKE2、SipHash24、HKDF など。
  • コンパクトで読みやすいコードなので、脆弱性の調査が容易です。
  • ハイパフォーマンス。
  • 明確で精緻な 仕様.

WireGuard のコア ロジックはすべて 4000 行未満のコードを必要としますが、OpenVPN と IPSec には数十万行が必要です。

「WireGuard は、暗号化キー ルーティングの概念を使用しています。これには、各ネットワーク インターフェイスに秘密キーを添付し、公開キーを使用してそれをバインドすることが含まれます。 SSH と同様の方法で接続を確立するために公開キーが交換されます。 ユーザー空間で別のデーモンを実行せずにキーをネゴシエートして接続するには、Noise_IK メカニズムを使用します。 ノイズプロトコルフレームワークSSHでauthorized_keysを維持するのと似ています。 データ送信は、UDP パケットのカプセル化によって実行されます。 クライアントの自動再構成により、接続を切断せずに VPN サーバーの IP アドレスの変更 (ローミング) をサポートします。 пишет オープンネット。

暗号化用 中古 ストリーム暗号 ChaCha20 およびメッセージ認証アルゴリズム (MAC) Poly1305、ダニエル・バーンスタインによってデザインされました (ダニエル・J・バーンスタイン)、ターニャ・ランゲ、ピーター・シュワーベ。 ChaCha20 と Poly1305 は、AES-256-CTR と HMAC のより高速で安全な類似物として位置付けられており、そのソフトウェア実装により、特別なハードウェア サポートを使用せずに固定実行時間を達成できます。 共有秘密鍵を生成するために、実装では楕円曲線 Diffie-Hellman プロトコルが使用されます。 カーブ25519、これもダニエル・バーンスタインによって提案されました。 ハッシュ化に使用されるアルゴリズムは、 BLAKE2 (RFC7693)'。

結果 性能試験 公式ウェブサイトより:

帯域幅 (メガビット/秒)
Linux カーネル 5.6 に含まれる VPN WireGuard

ピン (ミリ秒)
Linux カーネル 5.6 に含まれる VPN WireGuard

テスト構成:

  • インテル Core i7-3820QM およびインテル Core i7-5200U
  • ギガビット カード Intel 82579LM および Intel I218LM
  • Linux 4.6.1
  • WireGuard 構成: MAC 用 Poly256 を備えた 20 ビット ChaCha1305
  • 最初の IPsec 構成: MAC 用 Poly256 を使用した 20 ビット ChaCha1305
  • 256 番目の IPsec 構成: AES-128-GCM-XNUMX (AES-NI を使用)
  • OpenVPN 構成: HMAC-SHA256-2、UDP モードを使用した AES 256 ビット同等の暗号スイート
  • パフォーマンスは以下を使用して測定されました iperf3、30 分間の平均結果を示します。

理論上、WireGuard はネットワーク スタックに統合されるとさらに高速に動作するはずです。 しかし実際には、カーネルに組み込まれている Crypto API 暗号化機能への移行により、これは必ずしも当てはまりません。 おそらく、それらのすべてがまだネイティブ WireGuard のパフォーマンス レベルに最適化されていない可能性があります。

「私の観点からすると、WireGuard は一般的にユーザーにとって理想的です。 すべての下位レベルの決定は仕様内で行われるため、一般的な VPN インフラストラクチャの準備プロセスには数分しかかかりません。 設定を台無しにすることはほぼ不可能です - писали 2018年のハブレで。 — インストールプロセス 詳細に説明されている 公式サイトでは、優れた点を別途記載したいと思います。 OpenWRTのサポート。 この使いやすさとコード ベースのコンパクトさは、キーの配布を排除することによって実現されました。 複雑な証明書システムや企業の恐怖は一切なく、SSH キーと同じように短い暗号化キーが配布されます。」

WireGuard プロジェクトは 2015 年から開発されており、監査を受けており、 正式な検証。 WireGuard サポートは NetworkManager と systemd に統合されており、カーネル パッチは Debian Unstable、Mageia、Alpine、Arch、Gentoo、OpenWrt、NixOS、Subgraph、ALT の基本ディストリビューションに含まれています。

出所: habr.com

コメントを追加します