Nel kernel del sistema operativo DragonFly BSD sono stati introdotti circa 100 cambiamenti legati all'implementazione del supporto per VPN WireGuard. Il driver "wg" con supporto per il protocollo WireGuard è stato trasferito da FreeBSD, mentre il codice delle funzioni crittografiche, dell'interfaccia di rete e dell'API ioctl (per la gestione dallo spazio utente) è stato preso da OpenBSD. Le modifiche all'utilità ifconfig, necessarie per configurare la 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 il supporto integrato di WireGuard.
In WireGuard viene applicato il concetto di routing basato su chiavi di crittografia, che implica l'associazione di una chiave privata a ciascuna interfaccia di rete e l'uso di chiavi pubbliche per l'interconnessione. Per l'accordo delle chiavi e la connessione senza l'esecuzione di un demone separato nello spazio utente è stato utilizzato il meccanismo Noise_IK dal Noise Protocol Framework, simile al mantenimento di authorized_keys in SSH. La trasmissione dei dati avviene tramite incapsulamento in pacchetti UDP. È supportato il cambio dell'indirizzo IP VPN- del 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 presentati come alternative più veloci e sicure rispetto ad AES-256-CTR e HMAC, la cui implementazione software consente di ottenere tempi di esecuzione fissi senza l'uso di supporto hardware speciale. Per la generazione della chiave segreta condivisa viene applicato il protocollo di Diffie-Hellman su curve ellittiche nella implementazione Curve25519, anch'essa proposta da Daniel Bernstein. Per l'hashing viene utilizzato l'algoritmo BLAKE2s (RFC7693).
Fonte: opennet.ru
