Jason A. Donenfeld, autore di VPN WireGuard, ha presentato il progetto WireGuardNT, un porting ad alte prestazioni di WireGuard per il kernel di Windows, compatibile con Windows 7, 8, 8.1 e 10, e che supporta architetture AMD64, x86, ARM64 e ARM. Il codice sorgente è distribuito sotto licenza GPLv2. Il nuovo driver è già incluso nel client WireGuard per Windows, ma al momento è contrassegnato come sperimentale e non è attivato per impostazione predefinita.
Il porting si basa su una base di codice collaudata della normale implementazione di WireGuard per il kernel Linux, adattata per utilizzare entità del kernel di Windows e lo stack di rete NDIS. Rispetto all'implementazione di wireguard-go, già disponibile per Windows e che opera in spazio utente utilizzando l'interfaccia di rete Wintun, WireGuardNT offre un significativo miglioramento delle prestazioni eliminando le operazioni di commutazione di contesto e la copia dei contenuti dei pacchetti dal kernel allo spazio utente. Analogamente alle implementazioni per Linux, OpenBSD e FreeBSD, in WireGuardNT tutta la logica di elaborazione del protocollo funziona direttamente a livello dello stack di rete.
Sebbene non siano state ancora effettuate ottimizzazioni specifiche, WireGuardNT ha già consentito di raggiungere prestazioni di trasmissione dati di picco fino a 7.5Gbps nell'attuale ambiente di test con Ethernet. Su sistemi utente reali con Wi-Fi, le prestazioni sono notevolmente inferiori, ma non differiscono molto dalla semplice trasmissione dati. Ad esempio, in un sistema con una scheda wireless Intel AC9560, la larghezza di banda senza WireGuard era di 600Mbps e con WireGuardNT è rimasta allo stesso livello di 600Mbps, mentre con l'uso di wireguard-go/Wintun era di 95Mbps.
Ricordiamo che VPN WireGuard è implementato utilizzando metodi di crittografia moderni, offre prestazioni molto elevate, è facile da usare, privo di complessità e si è dimostrato efficace in numerose implementazioni su larga scala che gestiscono grandi volumi di traffico. Il progetto è in sviluppo dal 2015, ha subito audit e verifica formale dei metodi di crittografia impiegati. In WireGuard si applica il concetto di instradamento basato sulle chiavi di crittografia, il quale implica l'associazione di una chiave privata a ciascuna interfaccia di rete e l'uso di chiavi pubbliche per il collegamento.
Lo scambio di chiavi pubbliche per stabilire una connessione avviene per analogia con SSH. Per il protocollo di scambio 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 alla gestione di authorized_keys in SSH. La trasmissione dei dati avviene tramite incapsulamento in pacchetti UDP. È supportato il cambio Indirizzi IP Server VPN (roaming) senza interruzioni 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 posizionati come alternative più veloci e sicure a AES-256-CTR e HMAC, la cui implementazione software consente di raggiungere un tempo di esecuzione fisso senza richiedere supporto hardware speciale. Per generare la chiave segreta condivisa, viene utilizzato il protocollo Diffie-Hellman su curve ellittiche nell'implementazione Curve25519, anch'essa proposta da Daniel Bernstein. Per l'hashing viene utilizzato l'algoritmo BLAKE2s (RFC7693).
Fonte: opennet.ru
