Jason A. Donenfeld, autore di VPN WireGuard, ha presentato la prima release significativa del client WireGuard per Windows 1.0, insieme ai driver WireGuardNT 1.0. VPN WireGuard per i kernel di Windows 10 e 11, che supporta le architetture AMD64, x86 e ARM64. Il codice dei componenti per il kernel di Windows è rilasciato sotto licenza GPLv2, mentre il software client è sotto licenza MIT.
Il porting è basato sulla base di codice dell'implementazione principale di WireGuard per il kernel Linux, che è stata adattata per utilizzare le entità del kernel di Windows e lo stack di rete NDIS. Rispetto all'implementazione wireguard-go, che opera nello spazio utente e utilizza l'interfaccia di rete Wintun, WireGuardNT presenta un sostanziale aumento delle prestazioni grazie all'eliminazione delle operazioni di switching di contesto e alla copia del contenuto dei pacchetti dal kernel allo spazio utente. Analogamente alle implementazioni per Linux, OpenBSD e FreeBSD, in WireGuardNT, tutta la logica di gestione del protocollo opera direttamente a livello dello stack di rete.
La versione 1.0 è stata segnata come una sorta di pietra miliare, rappresentando la risoluzione di diverse problematiche e l'adempimento di obiettivi prefissati, come: l'uso della funzione NdisWdfGetAdapterContextFromAdapterHandle() invece di conservare in modo meno sicuro lo stato del driver nel campo Reserved e l'uso di offset non documentati; il tracciamento corretto e tempestivo della grandezza dell'MTU (Maximum Transmission Unit) attraverso l'intercettazione delle chiamate di sistema; l'introduzione nel codice dello standard C23.
Ricordiamo che il VPN WireGuard è implementato sulla base di metodi di crittografia moderni, offre prestazioni molto elevate, è facile da usare, privo di complicazioni e ha dimostrato di funzionare bene in una serie di grandi implementazioni che gestiscono grandi volumi di traffico. Il progetto è in fase di sviluppo dal 2015, ha superato audit e verifica formale dei metodi di crittografia utilizzati. In WireGuard si applica il concetto di instradamento basato su chiavi di crittografia, che implica l'associazione di una chiave privata a ciascuna interfaccia di rete e l'uso per la connessione di chiavi pubbliche.
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 di server VPN (roaming) senza interruzione 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 ottenere un tempo di esecuzione fisso senza richiedere un supporto hardware speciale. Per la generazione della chiave segreta condivisa viene utilizzato il protocollo Diffie-Hellman sulle curve ellittiche nell'implementazione Curve25519, anch'essa proposta da Daniel Bernstein. Per l'hashing viene utilizzato l'algoritmo BLAKE2s (RFC7693).
Fonte: opennet.ru
