Nel codice sorgente di FreeBSD sono state apportate modifiche con una nuova implementazione di VPN WireGuard, basata sul codice del modulo del kernel, preparato congiuntamente dai principali team di sviluppatori di FreeBSD e WireGuard con la partecipazione di Jason Donenfeld, autore di VPN WireGuard, e John Baldwin, noto sviluppatore di GDB e FreeBSD, che all'inizio degli anni 2000 ha implementato il supporto per SMP e NUMA nel kernel di FreeBSD. Dopo l'accettazione del driver nel FreeBSD (sys/dev/wg), il suo sviluppo e manutenzione saranno ora gestiti nel repository di FreeBSD.
Prima dell'accettazione del codice, con il supporto dell'organizzazione FreeBSD Foundation, è stata condotta una revisione completa delle modifiche, durante la quale è stata analizzata anche l'interazione del driver con le altre sottosistemi del kernel e valutata la possibilità di utilizzare i primitivi crittografici forniti dal kernel.
Per l'utilizzo degli algoritmi crittografici necessari al driver, è stata espansa l'API della sottosistema crittografico del kernel di FreeBSD, a cui è stata aggiunta una shell che consente di utilizzare attraverso l'API crittografica standard algoritmi non supportati in FreeBSD, utilizzando l'implementazione degli algoritmi necessari dalla libreria libsodium. Tra gli algoritmi incorporati nel driver, è stato lasciato solo il codice per il calcolo degli hash Blake2, poiché l'implementazione di questo algoritmo in FreeBSD è legata a dimensioni fisse dell'hash.
Inoltre, durante il processo di revisione è stata condotta un'ottimizzazione del codice, che ha permesso di migliorare l'efficienza della distribuzione del carico sui CPU multicores (è stata assicurata un'equa bilanciatura del legame tra i compiti di crittografia e decrittografia dei pacchetti e i core della CPU). Di conseguenza, le spese generali nella gestione dei pacchetti sono state avvicinate all'implementazione del driver per Linux. Nel codice è anche stata garantita la possibilità di utilizzare il driver ossl per accelerare le operazioni di crittografia.
A differenza del precedente tentativo di integrazione di WireGuard in FreeBSD, nella nuova implementazione è stata utilizzata l'utilità standard wg, anziché la versione modificata di ifconfig, che ha permesso di uniformare la configurazione tra Linux e FreeBSD. L'utilità wg, così come il driver, è inclusa nei sorgenti di FreeBSD, grazie alla modifica della licenza del codice wg (il codice è ora disponibile sotto le licenze MIT e GPL). Il precedente tentativo di inclusione di WireGuard in FreeBSD è stato effettuato nel 2020, ma è stato interrotto a causa di uno scandalo, che ha visto la rimozione del codice già aggiunto a causa della bassa qualità, della gestione disattenta dei buffer, dell'uso di stub anziché controlli, di un'implementazione incompleta del protocollo e delle violazioni della licenza GPL.
Ricordiamo che VPN WireGuard è implementato sulla base di metodi di crittografia moderni, garantisce prestazioni molto elevate, è semplice da usare, privo di complicazioni e si è dimostrato efficace in numerose grandi implementazioni che gestiscono elevati volumi di traffico. Il progetto è in sviluppo dal 2015, ha superato audit e verifica formale dei metodi di crittografia applicati. In WireGuard viene applicato il concetto di routing basato su chiavi di crittografia, che prevede l'associazione di una chiave privata a ciascuna interfaccia di rete e l'uso di chiavi pubbliche per la connessione.
Lo scambio di chiavi pubbliche per stabilire una connessione avviene in modo simile a SSH. Per l'accordo delle chiavi e la connessione senza l'avvio di un demone separato nello spazio utente viene utilizzato il meccanismo Noise_IK del Noise Protocol Framework, simile al mantenimento di authorized_keys in SSH. La trasmissione dei dati avviene tramite incapsulamento in pacchetti UDP. È supportato il cambio Indirizzi IP Server VPN (roaming) senza interruzione della connessione con ripristino automatico del cliente.
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
