Dans l'arbre des textes sources de FreeBSD, des modifications ont été apportées avec la nouvelle implémentation VPN WireGuard, basée sur le code du module noyau, préparé conjointement par les principales équipes de développeurs de FreeBSD et de WireGuard, avec la participation de Jason Donenfeld, auteur de VPN WireGuard, et de John Baldwin, développeur reconnu de GDB et FreeBSD, qui a réalisé le support SMP et NUMA dans le noyau FreeBSD au début des années 2000. AprÚs l'adoption du pilote au sein de FreeBSD (sys/dev/wg), son développement et sa maintenance se poursuivront désormais dans le dépÎt FreeBSD.
Avant l'adoption du code avec le soutien de l'organisation FreeBSD Foundation, une révision complÚte des modifications a été réalisée, au cours de laquelle l'interaction du pilote avec les autres sous-systÚmes du noyau a également été analysée et la possibilité d'utiliser les primitives cryptographiques fournies par le noyau a été évaluée.
Pour utiliser les algorithmes cryptographiques nécessaires au pilote, une extension de l'API de la sous-systÚme cryptographique du noyau FreeBSD a été réalisée, dans laquelle un wrapper a été ajouté, permettant d'utiliser via l'API cryptographique standard des algorithmes non supportés dans FreeBSD, en utilisant l'implémentation des algorithmes nécessaires de la bibliothÚque libsodium. Parmi les algorithmes intégrés au pilote, seul le code pour le calcul des hachages Blake2 a été conservé, car l'implémentation fournie dans FreeBSD de cet algorithme est liée à une taille de hachage fixe.
De plus, au cours de la rĂ©vision, une optimisation du code a Ă©tĂ© rĂ©alisĂ©e, permettant d'amĂ©liorer l'efficacitĂ© de la rĂ©partition de la charge sur les CPU multicĆurs (un Ă©quilibrage uniforme de l'attribution des tĂąches de chiffrement et de dĂ©chiffrement des paquets aux cĆurs CPU a Ă©tĂ© assurĂ©). En consĂ©quence, les frais gĂ©nĂ©raux lors du traitement des paquets ont Ă©tĂ© rapprochĂ©s de l'implĂ©mentation du pilote pour Linux. Le code a Ă©galement permis d'utiliser le pilote ossl pour accĂ©lĂ©rer les opĂ©rations de chiffrement.
Contrairement Ă la prĂ©cĂ©dente tentative d'intĂ©gration de WireGuard dans FreeBSD, la nouvelle implĂ©mentation utilise l'outil standard wg, et non une version modifiĂ©e de ifconfig, ce qui a permis d'unifier la configuration dans Linux et FreeBSD. L'outil wg, tout comme le pilote, est inclus dans les sources de FreeBSD, ce qui a Ă©tĂ© rendu possible grĂące Ă un changement de licence du code wg (le code est dĂ©sormais disponible sous les licences MIT et GPL). La derniĂšre tentative d'inclure WireGuard dans FreeBSD a Ă©tĂ© effectuĂ©e en 2020, mais a abouti Ă un scandale, au cours duquel le code dĂ©jĂ ajoutĂ© a Ă©tĂ© supprimĂ© en raison de sa mauvaise qualitĂ©, de la gestion nĂ©gligente des tampons, de l'utilisation de bouchons au lieu de vĂ©rifications, de la mise en Ćuvre incomplĂšte du protocole et de violations de la licence GPL.
Rappelons que VPN WireGuard est basé sur des méthodes de chiffrement modernes, offre des performances trÚs élevées, est facile à utiliser, dépouillé de complications et a fait ses preuves dans un certain nombre de déploiements importants traitant de gros volumes de trafic. Le projet évolue depuis 2015, a été audité et a subi une vérification formelle des méthodes de chiffrement utilisées. WireGuard applique le concept de routage par clés de chiffrement, impliquant l'attribution d'une clé privée à chaque interface réseau et l'utilisation de clés publiques pour les liaisons.
L'échange de clés publiques pour établir une connexion se fait par analogie avec SSH. Pour la négociation des clés et la connexion sans lancer un démon distinct dans l'espace utilisateur, le mécanisme Noise_IK du Noise Protocol Framework est utilisé, similaire au maintien des authorized_keys dans SSH. Le transfert de données est effectué via encapsulation dans des paquets UDP. Le changement est pris en charge. adresses IP Serveurs VPN (itinérance) sans rupture de connexion avec réajustement automatique du client.
Le chiffrement utilise le chiffrement par flux ChaCha20 et l'algorithme de vérification de message (MAC) Poly1305, développés par Daniel Bernstein, Tanja Lange et Peter Schwabe. ChaCha20 et Poly1305 sont présentés comme des alternatives plus rapides et plus sûres à AES-256-CTR et HMAC, dont l'implémentation logicielle permet d'atteindre un temps d'exécution fixe sans nécessiter de support matériel spécial. Le protocole de Diffie-Hellman sur des courbes elliptiques en implémentation Curve25519, également proposé par Daniel Bernstein, est utilisé pour générer une clé secrÚte partagée. Pour le hachage, l'algorithme BLAKE2s (RFC7693) est utilisé.
Source : opennet.ru
