Oggi Linus ha trasferito il ramo net-next con interfacce VPN. . Su questo evento nella mailing list di WireGuard.

Attualmente è in corso la raccolta del codice per il nuovo kernel Linux 5.6. WireGuard è un VPN di nuova generazione, caratterizzato da una crittografia moderna. È stato inizialmente sviluppato come un'alternativa più semplice e user-friendly rispetto alle VPN esistenti. L'autore è Jason A. Donenfeld, un esperto canadese di sicurezza informatica. Nell'agosto 2018, WireGuard da Linus Torvalds. Circa in quel periodo è iniziato il lavoro per l'inclusione del VPN nel kernel di Linux. Il processo si è un po' allungato.
«Vedo che Jason ha fatto una richiesta di pull per includere WireGuard nel kernel», scriveva Linus il 2 agosto 2018. «Posso semplicemente ribadire il mio affetto per questo VPN e sperare in una rapida fusione? Forse il codice non è perfetto, ma l'ho esaminato e, rispetto agli orrori di OpenVPN e IPSec, è una vera opera d'arte».
Nonostante il desiderio di Linus, la fusione è slittata di un anno e mezzo. Il problema principale si è rivelato essere il legame con le proprie implementazioni delle funzioni crittografiche, utilizzate per migliorare le prestazioni. Dopo prolungate trattative, a settembre 2019 è stata per trasferire le patch sulle funzioni Crypto API esistenti nel kernel, alle quali i programmatori di WireGuard avevano obiezioni per quanto riguarda le prestazioni e la sicurezza generale. Tuttavia, hanno deciso di separare le funzioni crittografiche native di WireGuard in un API di basso livello chiamata Zinc e di portarle nel kernel nel tempo. A novembre, gli sviluppatori del kernel hanno mantenuto la promessa e di trasferire nel kernel principale parte del codice da Zinc. Ad esempio, nel Crypto API sono state preparate implementazioni rapide degli algoritmi ChaCha20 e Poly1305 in WireGuard.
Infine, il 9 dicembre 2019, David S. Miller, responsabile del sottosistema di rete del kernel di Linux, ha incluso nel ramo net-next l'implementazione dell'interfaccia VPN del progetto WireGuard.
E oggi, 29 gennaio 2020, le modifiche sono state inviate a Linus per l'inclusione nel kernel.

I vantaggi dichiarati di WireGuard rispetto ad altre soluzioni VPN sono:
- Facile da usare.
- Utilizza crittografia moderna: Noise protocol framework, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF, ecc.
- Codice compatto e leggibile, più facile da analizzare per vulnerabilità.
- Elevate prestazioni.
- Chiarezza e attenzione ai dettagli .
Tutta la logica principale di WireGuard occupa meno di 4000 righe di codice, mentre OpenVPN e IPSec ne richiedono centinaia di migliaia.
In WireGuard viene applicato il concetto di routing basato sulle chiavi di crittografia, che implica l’associazione di una chiave privata a ciascun’interfaccia di rete e l’utilizzo per collegare le chiavi pubbliche. Lo scambio delle chiavi pubbliche per stabilire una connessione avviene in modo simile a SSH. Per la negoziazione delle chiavi e la connessione senza avviare un demone separato nello spazio utente, viene utilizzato il meccanismo Noise_IK di , simile al mantenimento di authorized_keys in SSH. La trasmissione dei dati avviene mediante incapsulamento in pacchetti UDP. È supportato il cambio dell’indirizzo IP del server VPN (roaming) senza disconnessione, con riconfigurazione automatica del client, — Opennet.
Per la crittografia un cifrario a flusso e un algoritmo di autenticazione dei messaggi (MAC) , 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 permette di ottenere un tempo di esecuzione fisso senza necessità di supporto hardware specifico. Per generare una chiave segreta condivisa viene utilizzato il protocollo di Diffie-Hellman su curve ellittiche nell’implementazione , proposta anche da Daniel Bernstein. Per l'hashing viene utilizzato l'algoritmo ».
Risultati dal sito ufficiale:
Larghezza di banda (megabit/s)

Ping (ms)

Configurazione del test:
- Intel Core i7-3820QM e Intel Core i7-5200U
- Schede Gigabit Intel 82579LM e Intel I218LM
- Linux 4.6.1
- Configurazione di WireGuard: ChaCha20 a 256 bit con Poly1305 per MAC
- Prima configurazione IPsec: ChaCha20 a 256 bit con Poly1305 per MAC
- Seconda configurazione IPsec: AES-256-GCM-128 (con AES-NI)
- Configurazione OpenVPN: insieme di cifratura equivalente a AES a 256 bit con HMAC-SHA2-256, modalità UDP
- Le prestazioni sono state misurate utilizzando
iperf3, mostrando il risultato medio su 30 minuti.
Teoricamente, dopo l'integrazione nello stack di rete, WireGuard dovrebbe funzionare ancora più velocemente. Ma in realtà non è detto che sarà così a causa del passaggio alle funzioni crittografiche integrate nel kernel tramite il Crypto API. Potrebbe non essere che tutti siano ancora ottimizzati al livello delle prestazioni native di WireGuard.
Dal mio punto di vista, WireGuard è perfetto per l’utente. Tutte le decisioni a basso livello sono state adottate nella specifica, quindi il processo di preparazione di un'infrastruttura VPN tipica richiede solo pochi minuti. Non è praticamente possibile commettere errori nella configurazione, — su Habr nel 2018. — Il processo di installazione sito ufficiale, desidero sottolineare l'ottimo . Una tale semplicità d'uso e compattezza della base di codice è stata raggiunta grazie all'abbandono della distribuzione delle chiavi. Qui non esiste un complicato sistema di certificati e tutto quel terribile corporativo, le chiavi di crittografia brevi vengono distribuite più o meno come le chiavi SSH».
Il progetto WireGuard è in sviluppo dal 2015, ha superato un audit e . Il supporto per WireGuard è integrato in NetworkManager e systemd, e le patch per il kernel sono incluse nella distribuzione di base dei sistemi operativi Debian Unstable, Mageia, Alpine, Arch, Gentoo, OpenWrt, NixOS, Subgraph e ALT.
Fonte: habr.com
