Oggi Linus ha trasferito il ramo net-next con interfacce VPN . Questo evento è stato annunciato nella lista di distribuzione di WireGuard.

Attualmente è in corso la raccolta del codice per il nuovo kernel Linux 5.6. WireGuard è una VPN di nuova generazione che utilizza la crittografia moderna. È stato progettato inizialmente come un'alternativa più semplice e conveniente alle VPN esistenti. L'autore è Jason A. Donenfeld, un esperto canadese di sicurezza informatica. Nel agosto 2018, WireGuard da Linus Torvalds. Circa in quel periodo è iniziato il lavoro per includere la VPN nel kernel di Linux. Il processo ha richiesto un po' di tempo.
«Vedo che Jason ha fatto una richiesta di pull per includere WireGuard nel kernel», scrisse Linus il 2 agosto 2018. «Posso solo ribadire il mio amore per questa VPN e sperare in una fusione imminente? Forse il codice non è perfetto, ma l'ho esaminato e, rispetto agli orrori di OpenVPN e IPSec, è davvero un capolavoro».
Nonostante il desiderio di Linus, la fusione si è protratta per un anno e mezzo. Il problema principale si è rivelato essere l'integrazione con le proprie implementazioni delle funzioni crittografiche, utilizzate per migliorare le prestazioni. Dopo lunghi colloqui, a settembre 2019 è stata di tradurre le patch sulle funzioni Crypto API esistenti nel kernel, per le quali gli sviluppatori di WireGuard avevano sollevato preoccupazioni riguardo alle prestazioni e alla sicurezza generale. Tuttavia, si è deciso di separare le funzioni crittografiche native di WireGuard in un API a basso livello chiamato 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 in WireGuard implementazioni veloci degli algoritmi ChaCha20 e Poly1305.
Alla fine, il 9 dicembre 2019, David Miller, responsabile del sottosistema di rete del kernel Linux, ha incluso nella branch 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:
- Facile da usare.
- Utilizza crittografia moderna: Noise protocol framework, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF, ecc.
- Codice compatto e leggibile, più facile da esaminare per vulnerabilità.
- Alta prestazione.
- Chiara e ben sviluppata .
Tutta la logica principale di WireGuard occupa meno di 4000 righe di codice, mentre OpenVPN e IPSec contano centinaia di migliaia di righe.
WireGuard utilizza il concetto di instradamento tramite chiavi di crittografia, che implica l'associazione di una chiave privata a ciascuna interfaccia di rete e l'uso di chiavi pubbliche per stabilire una connessione. Lo scambio delle chiavi pubbliche per l'instaurazione della connessione avviene in modo simile a SSH. Per la sincronizzazione delle chiavi e la connessione senza l'avvio di un demone separato nello spazio utente viene impiegato il meccanismo Noise_IK del , simile alla gestione di authorized_keys in SSH. La trasmissione dei dati avviene tramite incapsulamento in pacchetti UDP. È supportato il cambio dell'indirizzo IP del server VPN (roaming) senza interruzione della connessione con ri-configurazione automatica del client, — Opennet.
Per la crittografia il cifrario a flusso e l'algoritmo di autenticazione dei messaggi (MAC) , sviluppati da Daniel Bernstein (), Tanja Lange e Peter Schwabe. ChaCha20 e Poly1305 sono presentati come equivalenti più veloci e sicuri rispetto ad AES-256-CTR e HMAC, la cui implementazione software permette di raggiungere un tempo di esecuzione fisso senza l'uso di supporto hardware speciale. Per generare la chiave segreta condivisa viene utilizzato il protocollo Diffie-Hellman sulle curve ellittiche. , proposta anche da Daniel Bernstein. Per l'hashing viene utilizzato l'algoritmo ».
Risultati dal sito ufficiale:
Banda passante (megabit/s)

Ping (ms)

Configurazione del test:
- Intel Core i7-3820QM e Intel Core i7-5200U
- Schede Intel gigabit 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: set di cifratura equivalente a AES a 256 bit con HMAC-SHA2-256, modalità UDP
- Le prestazioni sono state misurate con
iperf3, mostrando il risultato medio su 30 minuti.
Teoricamente, dopo l'integrazione nel stack di rete, WireGuard dovrebbe funzionare ancora più velocemente. Ma nella realtà, potrebbe non essere così a causa del passaggio alle funzioni crittografiche integrate nel kernel del Crypto API. È possibile che non tutte siano ancora ottimizzate al livello di prestazioni di WireGuard nativo.
«Dal mio punto di vista, WireGuard è ideale per l'utente. Tutte le soluzioni a basso livello sono state adottate nella specifica, quindi il processo di preparazione di un'infrastruttura VPN tipica richiede solo pochi minuti. È praticamente impossibile commettere errori nella configurazione, — su Habr nel 2018. — Il processo di installazione sul sito ufficiale; vorrei sottolineare l'ottima . Questa semplicità d'uso e la compattezza del codice sono state ottenute rinunciando alla distribuzione delle chiavi. Non c'è un complesso sistema di certificati e tutte queste complicazioni aziendali, le chiavi di crittografia brevi vengono distribuite in modo simile alle 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 di Debian Unstable, Mageia, Alpine, Arch, Gentoo, OpenWrt, NixOS, Subgraph e ALT.
Fonte: habr.com
