Le noyau du système d'exploitation DragonFly BSD a reçu environ 100 modifications liées à l'implémentation du support pour le VPN WireGuard. Le pilote « wg » avec le support du protocole WireGuard a été transféré depuis FreeBSD, tandis que le code des fonctions cryptographiques, de l'interface réseau et de l'API ioctl (pour la gestion depuis l'espace utilisateur) a été emprunté à OpenBSD. Les modifications apportées à l'utilitaire ifconfig, nécessités pour la configuration du VPN, ont été transférées depuis OpenBSD. L'implémentation est compatible avec tous les clients officiels de WireGuard pour Linux, Windows, macOS, *BSD, iOS et Android. DragonFly BSD est devenue le cinquième système d'exploitation open source après Linux, OpenBSD, NetBSD et FreeBSD à intégrer le support de WireGuard.
WireGuard utilise le concept de routage par clés de chiffrement, qui implique l'association d'une clé privée à chaque interface réseau et l'utilisation de clés publiques pour établir des connexions. Pour l'accord des clés et la connexion sans lancer un daemon séparé dans l'espace utilisateur, le mécanisme Noise_IK du Noise Protocol Framework est utilisé, similaire au maintien de authorized_keys dans SSH. Le transfert des données se fait par encapsulation dans des paquets UDP. Le changement d'adresse IP - serveur (roaming) est pris en charge sans rupture de connexion avec une reconfiguration automatique du client. VPN- un serveur (roaming) sans rupture de connexion avec une reconfiguration 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
