Jason Donenfeld, autor VPN WireGuard, predstavio je prvo značajno izdanje klijentskog softvera WireGuard za Windows 1.0, kao i drajvere WireGuardNT 1.0 s portom. VPN WireGuard za jezgru Windows 10 i 11, podržava AMD64, x86 i ARM64 arhitekture. Izvorni kod komponenti za jezgru Windows distribuiran je pod GPLv2 licencom, dok se klijentski softver distribuira pod MIT licencom.
Port se temelji na kodnoj bazi glavne implementacije WireGuard za jezgru Linux, koja je prevedena za korištenje entiteta jezgre Windows i mrežnog stoga NDIS. U usporedbi s implementacijom wireguard-go, koja radi u korisničkom prostoru i koristi mrežni sučelje Wintun, WireGuardNT pruža značajna poboljšanja performansi eliminacijom operacija prebacivanja konteksta i kopiranja sadržaja paketa iz jezgre u korisnički prostor. Kao i implementacije za Linux, OpenBSD i FreeBSD, u WireGuardNT cijela logika obrade protokola radi izravno na razini mrežnog stoga.
Verzija 1.0 označena je kao svojevrsna prekretnica, koja je bila usmjerena na rješavanje niza problema i izvršenje postavljenih ciljeva, poput: korištenja funkcije NdisWdfGetAdapterContextFromAdapterHandle() umjesto manje sigurnog skladištenja stanja drajvera u polju Reserved i korištenje nedokumentiranih pomaka; ispravnog i pravovremenog praćenja veličine MTU (Maximum Transmission Unit) putem presretanja sistemskih poziva; korištenja u kodu standarda C23.
Podsjetimo, VPN WireGuard temelji se na modernim metodama šifriranja, osigurava vrlo visoke performanse, jednostavan je za korištenje, ne sadrži komplikacije i dobro se pokazao u nizu velikih implementacija koje obrađuju velike količine prometa. Projekt se razvija od 2015. godine, prošao je audite i formalnu verifikaciju primijenjenih metoda šifriranja. U WireGuardu se primjenjuje koncept usmjeravanja prema šifrirajućim ključevima, koji podrazumijeva povezivanje svakog mrežnog sučelja sa privatnim ključem i korištenje javnih ključeva za povezivanje.
Razmena otvorenih ključeva za uspostavljanje veze vrši se analogno kao kod SSH. Za usklađivanje ključeva i povezivanje bez pokretanja posebnog demona u korisničkom prostoru koristi se mehanizam Noise_IK iz Noise Protocol Framework-a, sličan održavanju authorized_keys u SSH. Prijenos podataka vrši se kroz enkapsulaciju u UDP pakete. Podržava se prebacivanje IP adrese VPN poslužitelji (roaming) bez prekida veze s automatskom ponovnom konfiguracijom klijenta.
Za šifriranje se koristi strujni šifrir ChaCha20 i algoritam za autentikaciju poruka (MAC) Poly1305, koje su razvili Daniel J. Bernstein, Tanja Lange i Peter Schwabe. ChaCha20 i Poly1305 se pozicioniraju kao brži i sigurniji analogni AES-256-CTR i HMAC, čija softverska implementacija omogućava postizanje fiksnog vremena izvođenja bez upotrebe specijalizirane hardverske podrške. Za generiranje zajedničkog tajnog ključa koristi se protokol Diffie-Hellman na eliptičnim krivuljama u implementaciji Curve25519, također predloženoj od strane Daniela J. Bernsteina. Za heširanje se koristi algoritam BLAKE2s (RFC7693).
Izvor: opennet.ru
