Noyau Linux inclus WireGuard VPN

Aujourd'hui, Linus a déménagé à lui-même une branche net-next avec des interfaces VPN WireGuard . Cet événement a été signalé sur la liste de diffusion WireGuard.



Actuellement, la collecte de code se poursuit pour le nouveau noyau Linux 5.6. WireGuard est un VPN rapide de nouvelle génération qui intègre la cryptographie moderne. Il a été initialement développé comme une alternative plus simple et plus pratique aux VPN existants. L'auteur est le spécialiste canadien de la sécurité de l'information Jason A. Donenfeld. En août 2018, WireGuard a été salué par Linus Torvalds. À peu près à l'époque, les travaux ont commencé sur l'incorporation d'un VPN dans le noyau Linux. Le processus a été un peu retardé.

«Je vois que Jason a fait une demande de pool pour inclure WireGuard dans le noyau», a écrit Linus le 2 août 2018. - Puis-je simplement déclarer à nouveau mon amour pour ce VPN et espérer une fusion rapide? Le code n'est peut-être pas parfait, mais je l'ai regardé, et comparé aux horreurs d'OpenVPN et d'IPSec, c'est une véritable œuvre d'art. »

Malgré les souhaits de Linus, la fusion a duré un an et demi. Le principal problème s'est avéré être lié à leurs propres implémentations de fonctions cryptographiques, qui ont été utilisées pour augmenter la productivité. Après de longues négociations en septembre 2019, un compromis a été trouvé pour transférer les correctifs vers les fonctionnalités principales de l'API Crypto, dont les développeurs de WireGuard se plaignent en termes de performances et de sécurité globale. Mais ils ont décidé de câbler les fonctions cryptographiques natives de WireGuard dans une API de zinc de bas niveau distincte et éventuellement de les porter sur le noyau. En novembre, les développeurs principaux ont tenu leur promesse et ont accepté de transférer une partie du code de Zinc vers le noyau principal. Par exemple, l'API Crypto comprend des implémentations rapides préparées par WireGuard des algorithmes ChaCha20 et Poly1305.

Finalement, le 9 décembre 2019, David S.Miller, responsable du sous-système de mise en réseau du noyau Linux, a accepté les correctifs avec la mise en œuvre de l'interface VPN du projet WireGuard dans la branche net-next.

Et aujourd'hui, le 29 janvier 2020, les changements sont allés à Linus pour être inclus dans le noyau.



Les avantages déclarés de WireGuard par rapport aux autres solutions VPN:

  • Facile à utiliser.
  • Utilise la cryptographie moderne: cadre de protocole de bruit, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF, etc.
  • Code lisible compact, plus facile à rechercher pour les vulnérabilités.
  • Haute performance.
  • Spécifications claires et détaillées.

Toute la logique de base de WireGuard occupe moins de 4000 lignes de code, tandis que OpenVPN et IPSec représentent des centaines de milliers de lignes.

«WireGuard utilise le concept de routage des clés de chiffrement, qui implique de lier une clé privée à chaque interface réseau et de l'utiliser pour lier des clés publiques. L'échange de clés publiques pour établir une connexion s'effectue par analogie avec SSH. Pour négocier des clés et se connecter sans démarrer un démon distinct dans l'espace utilisateur, le mécanisme Noise_IK du Noise Protocol Framework est utilisé , de la même manière que la conservation des authorized_keys dans SSH. Les données sont transmises par encapsulation dans des paquets UDP. Il prend en charge la modification de l'adresse IP du serveur VPN (itinérance) sans déconnecter la connexion avec une reconfiguration automatique du client, écrit Opennet.

Pour le chiffrement , le chiffrement de flux ChaCha20 et l'algorithme d'authentification de message (MAC) Poly1305 développé par Daniel J. Bernstein , Tanja Lange et Peter Schwabe sont utilisés. ChaCha20 et Poly1305 sont positionnés comme des analogues plus rapides et plus sûrs d'AES-256-CTR et HMAC, dont la mise en œuvre logicielle permet d'atteindre un temps d'exécution fixe sans impliquer de support matériel spécial. Pour générer une clé secrète partagée, le protocole Diffie-Hellman sur les courbes elliptiques est utilisé dans la mise en œuvre de Curve25519 , également proposé par Daniel Bernstein. Pour le hachage, l'algorithme BLAKE2s (RFC7693) est utilisé . »

Résultats des tests de performance sur le site officiel:

Bande passante (mégabits / s)


Ping (ms)


Configuration de test:


  • Intel Core i7-3820QM et Intel Core i7-5200U
  • Cartes Gigabit Intel 82579LM et Intel I218LM
  • Linux 4.6.1
  • Configuration WireGuard: ChaCha20 256 bits avec Poly1305 pour MAC
  • Première configuration IPsec: ChaCha20 256 bits avec Poly1305 pour MAC
  • Deuxième configuration IPsec: AES-256-GCM-128 (avec AES-NI)
  • Configuration OpenVPN: ensemble de cryptage AES 256 bits équivalent avec HMAC-SHA2-256, mode UDP
  • La performance a été mesurée en utilisant iperf3 , montrant un résultat moyen en 30 minutes.

Théoriquement, après l'intégration dans la pile réseau, WireGuard devrait fonctionner encore plus rapidement. Mais en réalité, ce ne sera pas nécessairement le cas en raison de la transition vers les fonctions cryptographiques intégrées au cœur de l'API Crypto. Peut-être que tous ne sont pas encore optimisés au niveau de performance du WireGuard natif.

«À mon avis, WireGuard est généralement idéal pour l'utilisateur. Toutes les décisions de bas niveau sont prises dans la spécification, donc le processus de préparation d'une infrastructure VPN typique ne prend que quelques minutes. Il est presque impossible de confondre la configuration, - ont - ils écrit sur Habré en 2018. - Le processus d'installation est décrit en détail sur le site officiel, je voudrais mentionner un excellent support pour OpenWRT . Cette facilité d'utilisation et la compacité de la base de code ont été obtenues en raison du rejet de la distribution des clés. Il n'y a pas de système de certificat compliqué et toute cette horreur d'entreprise; les clés de cryptage courtes sont distribuées approximativement comme les clés SSH.

Le projet WireGuard se développe depuis 2015, il a passé un audit et une vérification formelle . La prise en charge de WireGuard est intégrée dans NetworkManager et systemd, et les correctifs du noyau font partie des distributions de base de Debian Unstable, Mageia, Alpine, Arch, Gentoo, OpenWrt, NixOS, Subgraph et ALT.

Source: https://habr.com/ru/post/fr486046/


All Articles