Una nuova implementazione VPN, WireGuard, è stata aggiunta al codice base di FreeBSD.

L'albero dei sorgenti di FreeBSD è stato aggiornato con una nuova implementazione di VPN WireGuard, basata sul codice del modulo kernel prodotto congiuntamente dai team di sviluppo principali di FreeBSD e WireGuard con il contributo di Jason A. Donenfeld, autore di VPN WireGuard, e John H. Baldwin ). un noto sviluppatore di GDB e FreeBSD, che ha implementato il supporto per SMP e NUMA nel kernel di FreeBSD all'inizio degli anni 2000. Dopo che il driver è stato accettato in FreeBSD (sys/dev/wg), il suo sviluppo e la sua manutenzione saranno d'ora in poi effettuati nel repository di FreeBSD.

Prima che il codice fosse accettato, è stata condotta una revisione completa delle modifiche con il supporto della FreeBSD Foundation, durante la quale è stata analizzata anche l'interazione del driver con il resto dei sottosistemi del kernel e la possibilità di utilizzare primitive crittografiche fornite dal kernel è stata valutata.

Per utilizzare gli algoritmi crittografici richiesti dal driver, è stata estesa l'API del critto-sottosistema del kernel di FreeBSD, a cui è stato aggiunto un cablaggio che permette l'utilizzo di algoritmi non supportati in FreeBSD attraverso la critto-API standard, utilizzando l'implementazione del algoritmi necessari dalla libreria libsodium. Degli algoritmi integrati nel driver, rimane solo il codice per il calcolo degli hash Blake2, poiché l'implementazione di questo algoritmo fornita in FreeBSD è legata a una dimensione hash fissa.

Inoltre, durante il processo di revisione, è stata effettuata l'ottimizzazione del codice, che ha permesso di aumentare l'efficienza della distribuzione del carico sulle CPU multi-core (è stato garantito il bilanciamento uniforme dell'assegnazione delle attività di crittografia e decrittografia dei pacchetti ai core della CPU). Di conseguenza, il sovraccarico durante l'elaborazione dei pacchetti era vicino a quello dell'implementazione del driver Linux. Il codice prevede anche la possibilità di utilizzare il driver ossl per velocizzare le operazioni di cifratura.

A differenza del precedente tentativo di integrare WireGuard in FreeBSD, la nuova implementazione utilizza l'utilità wg standard, piuttosto che una versione modificata di ifconfig, che rende possibile unificare la configurazione su Linux e FreeBSD. L'utilità wg, così come il driver, è inclusa nel codice sorgente di FreeBSD, cosa resa possibile modificando la licenza per il codice wg (il codice è ora disponibile sotto le licenze MIT e GPL). L'ultimo tentativo di includere WireGuard in FreeBSD è stato fatto nel 2020, ma si è concluso con uno scandalo, a seguito del quale il codice già aggiunto è stato rimosso a causa della bassa qualità, del lavoro imprudente con i buffer, dell'uso di stub invece dei controlli, dell'implementazione incompleta del protocollo e violazione della licenza GPL.

Ricordiamo che VPN WireGuard è implementato sulla base di moderni metodi di crittografia, offre prestazioni molto elevate, è facile da usare, privo di complicazioni e ha dato prova di sé in numerose grandi implementazioni che elaborano grandi volumi di traffico. Il progetto è in sviluppo dal 2015, ed è stato sottoposto ad audit e verifica formale dei metodi di crittografia utilizzati. WireGuard utilizza il concetto di instradamento della chiave di crittografia, che prevede il collegamento di una chiave privata a ciascuna interfaccia di rete e il suo utilizzo per associare le chiavi pubbliche.

Le chiavi pubbliche vengono scambiate per stabilire una connessione in modo simile a SSH. Per negoziare le chiavi e connettersi senza eseguire un demone separato nello spazio utente, viene utilizzato il meccanismo Noise_IK del Noise Protocol Framework, simile al mantenimento delle authentic_keys in SSH. La trasmissione dei dati avviene tramite incapsulamento in pacchetti UDP. Supporta la modifica dell'indirizzo IP del server VPN (roaming) senza interrompere la connessione con riconfigurazione automatica del client.

La crittografia utilizza il cifrario a flusso ChaCha20 e l'algoritmo di autenticazione dei messaggi (MAC) Poly1305, sviluppato da Daniel J. Bernstein, Tanja Lange e Peter Schwabe. ChaCha20 e Poly1305 sono posizionati come analoghi più veloci e sicuri di AES-256-CTR e HMAC, la cui implementazione software consente di ottenere un tempo di esecuzione fisso senza l'uso di un supporto hardware speciale. Per generare una chiave segreta condivisa, nell'implementazione Curve25519 viene utilizzato il protocollo Diffie-Hellman della curva ellittica, proposto anch'esso da Daniel Bernstein. Per l'hashing viene utilizzato l'algoritmo BLAKE2s (RFC7693).

Fonte: opennet.ru

Aggiungi un commento