Jason A. Donenfeld, autore del VPN WireGuard, ha presentato il progetto WireGuardNT, che sviluppa un porting ad alte prestazioni del VPN WireGuard per il kernel di Windows, compatibile con Windows 7, 8, 8.1 e 10, e supporta le architetture AMD64, x86, ARM64 e ARM. Il codice di implementazione è 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 consolidata dell'implementazione principale di WireGuard per il kernel Linux, che è stata adattata per utilizzare le entità del kernel di Windows e lo stack rete NDIS. Rispetto all'implementazione di wireguard-go precedentemente disponibile per Windows, che funziona nello spazio utente e utilizza l'interfaccia di rete Wintun, WireGuardNT presenta un significativo miglioramento delle prestazioni grazie all'eliminazione delle operazioni di switching di contesto e della 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 rete.
Sebbene ottimizzazioni specifiche non siano state ancora effettuate, WireGuardNT ha già consentito di raggiungere una massima prestazione di trasferimento dati di 7.5Gbps nell'attuale ambiente di test con Ethernet. Su sistemi utente reali con Wi-Fi, le prestazioni sono significativamente inferiori, ma non differiscono molto dalla trasmissione dati diretta. Ad esempio, in un sistema con una scheda wireless Intel AC9560, la larghezza di banda senza WireGuard è stata di 600Mbps e con WireGuardNT è rimasta a 600Mbps, mentre utilizzando wireguard-go/Wintun era di 95Mbps.
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
