新しい VPN 実装である WireGuard が FreeBSD コードベースに追加されました。

FreeBSD ソース ツリーは、VPN WireGuard の著者である Jason A. Donenfeld と John H. Baldwin の貢献により、コア FreeBSD と WireGuard 開発チームが共同で作成したカーネル モジュール コードに基づいて、VPN WireGuard の新しい実装で更新されました。 GDB と FreeBSD の有名な開発者であり、2000 年代初頭に FreeBSD カーネルに SMP と NUMA のサポートを実装しました。 ドライバーが FreeBSD (sys/dev/wg) に受け入れられた後、その開発とメンテナンスは FreeBSD リポジトリで実行されます。

コードが受け入れられる前に、FreeBSD Foundation の支援を受けて変更の完全なレビューが行われ、その際、ドライバーと残りのカーネル サブシステムとの相互作用や、カーネルが提供する暗号化プリミティブを使用する可能性も分析されました。評価されました。

ドライバーに必要な暗号アルゴリズムを使用するために、FreeBSD カーネル暗号サブシステムの API が拡張され、FreeBSD でサポートされていないアルゴリズムを標準の暗号 API を通じて使用できるようにするハーネスが追加されました。必要なアルゴリズムは libsodium ライブラリから取得します。 FreeBSD で提供されるこのアルゴリズムの実装は固定ハッシュ サイズに関連付けられているため、ドライバーに組み込まれているアルゴリズムのうち、Blake2 ハッシュを計算するためのコードのみが残されています。

さらに、検討の過程でコードの最適化が行われ、マルチコアCPUの負荷分散効率を向上させることができました(パケット暗号化タスクと復号タスクのCPUコアへの割り当ての均一なバランスが確保されました)。 その結果、パケット処理時のオーバーヘッドは Linux ドライバー実装のオーバーヘッドに近くなりました。 このコードは、ossl ドライバーを使用して暗号化操作を高速化する機能も提供します。

WireGuard を FreeBSD に統合するという以前の試みとは異なり、新しい実装では ifconfig の修正バージョンではなく標準の wg ユーティリティが使用されるため、Linux と FreeBSD 上の設定を統合することが可能になります。 wg ユーティリティとドライバーは、FreeBSD ソース コードに含まれています。これは、wg コードのライセンスを変更することで可能になりました (コードは現在、MIT および GPL ライセンスの下で利用可能です)。 WireGuard を FreeBSD に含める最後の試みは 2020 年に行われましたが、スキャンダルに終わりました。その結果、低品質、バッファの不注意な作業、チェックの代わりにスタブの使用、不完全な実装が原因で、既に追加されたコードが削除されました。プロトコルの違反と GPL ライセンスの違反。

VPN WireGuard は最新の暗号化方式に基づいて実装されており、非常に高いパフォーマンスを提供し、使いやすく、複雑さがなく、大量のトラフィックを処理する多数の大規模な実装で実証されているということを思い出してください。 このプロジェクトは 2015 年から開発されており、使用される暗号化方式の監査と正式な検証に合格しました。 WireGuard は、暗号化キー ルーティングの概念を使用します。これには、秘密キーを各ネットワーク インターフェイスにバインドし、公開キーを使用してバインドすることが含まれます。

接続を確立するための公開キーの交換は SSH に似ています。 別のユーザー空間デーモンを実行せずにキーをネゴシエートして接続するには、SSH でのauthorized_keys の維持と同様に、Noise Protocol Framework の Noise_IK メカニズムが使用されます。 データ送信は、UDP パケットのカプセル化によって実行されます。 自動クライアント再構成により、接続を切断せずに VPN サーバーの IP アドレスの変更 (ローミング) がサポートされます。

暗号化には、ChaCha20 ストリーム暗号と、Daniel J. Bernstein、Tanja Lange、Peter Schwabe によって開発された Poly1305 メッセージ認証 (MAC) アルゴリズムが使用されます。 ChaCha20 と Poly1305 は、AES-256-CTR と HMAC のより高速で安全な類似物として位置付けられており、そのソフトウェア実装により、特別なハードウェア サポートを必要とせずに固定実行時間を達成できます。 共有秘密鍵を生成するには、同じくダニエル・バーンスタインによって提案された、Curve25519 実装の楕円曲線 Diffie-Hellman プロトコルが使用されます。 ハッシュには BLAKE2s アルゴリズム (RFC7693) が使用されます。

出所: オープンネット.ru

コメントを追加します