Il kernel del sistema operativo DragonFly BSD include circa 100 modifiche legate all'implementazione del supporto per il VPN WireGuard. Il driver «wg», che supporta il protocollo WireGuard, è stato trasferito da FreeBSD, mentre il codice delle funzioni crittografiche, dell'interfaccia di rete e dell'API ioctl (per il controllo dallo spazio utente) è stato preso da OpenBSD. Le modifiche all'utilità ifconfig, necessarie per la configurazione del VPN, sono state trasferite da OpenBSD. L'implementazione è compatibile con tutti i client ufficiali di WireGuard per Linux, Windows, macOS, *BSD, iOS e Android. DragonFly BSD è diventato il quinto sistema operativo open source dopo Linux, OpenBSD, NetBSD e FreeBSD con supporto integrato per WireGuard.
WireGuard utilizza il concetto di instradamento basato su chiavi di crittografia, il quale implica l'associazione di una chiave privata a ciascuna interfaccia di rete e l'uso di chiavi pubbliche per la connessione. Per la negoziazione delle chiavi e la connessione senza l'avvio di un demone separato nello spazio utente, viene impiegato il meccanismo Noise_IK del Noise Protocol Framework, simile al mantenimento di authorized_keys in SSH. Il trasferimento dei dati avviene tramite incapsulamento in pacchetti UDP. È supportato il cambio di indirizzo IP. VPN-server (roaming) senza interruzione della connessione con riconfigurazione automatica del client.
Per la crittografia, viene utilizzato il cifrario a flusso ChaCha20 e l'algoritmo di autenticazione dei messaggi (MAC) Poly1305, sviluppati da Daniel Bernstein, Tanja Lange e Peter Schwabe. ChaCha20 e Poly1305 sono posizionati come alternative più veloci e sicure a AES-256-CTR e HMAC, la cui implementazione software consente di raggiungere un tempo di esecuzione fisso senza richiedere supporto hardware speciale. Per generare la chiave segreta condivisa, viene utilizzato il protocollo Diffie-Hellman su curve ellittiche nell'implementazione Curve25519, anch'essa proposta da Daniel Bernstein. Per l'hashing viene utilizzato l'algoritmo BLAKE2s (RFC7693).
Fonte: opennet.ru
