U stablo izvornog koda FreeBSD prihvaćene su izmjene s novom implementacijom VPN WireGuard, temeljenom na kodu modula jezgre, koji su zajednički pripremili glavne ekipe programera FreeBSD i WireGuard uz sudjelovanje Jasona A. Donenfelda, autora VPN-a WireGuard, i Johna H. Baldwina, poznatog programera GDB-a i FreeBSD-a, koji je na početku 2000-ih godina implementirao podršku za SMP i NUMA u jezgru FreeBSD-a. Nakon prihvaćanja drajvera u sastav FreeBSD-a (sys/dev/wg), njegov razvoj i održavanje od sada će se voditi u repozitoriju FreeBSD.
Prije prihvaćanja koda uz podršku organizacije FreeBSD Foundation, provedena je potpuna recenzija izmjena, tijekom koje je također analizirana interakcija drajvera s ostalim podsustavima jezgre i ocijenjena mogućnost korištenja kriptografskih primitava koje pruža jezgra.
Za korištenje potrebnih kriptografskih algoritama za drajver proširen je API kriptosustava FreeBSD jezgre, u koji je dodata omotnica koja omogućava korištenje algoritama koji nisu podržani u FreeBSD-u putem standardnog kripto-API-a, koristeći implementaciju potrebnih algoritama iz biblioteke libsodium. Od algoritama ugrađenih u drajver ostavljen je samo kod za izračunavanje heševa Blake2, budući da se pružena implementacija ovog algoritma u FreeBSD-u oslanja na fiksnu veličinu heša.
Osim toga, tijekom recenzije provodila je optimizacija koda, koja je omogućila poboljšanje učinkovitosti raspodjele opterećenja na višejezgrene CPU-e (osigurana je ravnomjerna ravnoteža raspodjele zadataka šifriranja i dešifriranja paketa na jezgrima CPU-a). Na kraju, troškovi obrade paketa su dovedeni bliže implementaciji drajvera za Linux. U kodu je također osigurana mogućnost korištenja drajvera ossl za ubrzanje operacija šifriranja.
Za razliku od prethodnog pokušaja integracije WireGuard-a u FreeBSD, u novoj implementaciji korištena je standardna alatka wg, a ne modificirana verzija ifconfig, što je omogućilo usklađivanje postavki između Linux-a i FreeBSD-a. Alatka wg, kao i drajver, uključena je u izvorne kodove FreeBSD-a, što je postalo moguće zahvaljujući promjeni licenciranja koda wg (kod je sada dostupan pod MIT i GPL licencama). Prethodni pokušaj uključivanja WireGuard-a u FreeBSD dogodio se 2020. godine, ali je završio skandalom, kada je već dodani kod uklonjen zbog niskog kvaliteta, neurednog rada s baferima, korištenja zamjenskih rešenja umesto provjera, nepotpune implementacije protokola i povrede GPL licence.
Podsjećamo, da VPN WireGuard je implementiran na temelju modernih metoda enkripcije, pruža vrlo visoke performanse, jednostavan je za korištenje, oslobođen komplikacija i dobro se pokazao u nizu velikih implementacija koje obrađuju velike količine saobraćaja. Projekt se razvija od 2015. godine, prošao je reviziju i formalnu verifikaciju korišćenih metoda enkripcije. U WireGuard-u se koristi koncept rutiranja prema enkripcijskim ključevima, koji podrazumeva vezivanje zatvorenog ključa za svako mrežno sučelje i njegovo korištenje za povezivanje otvorenih ključeva.
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 servera (roaming) bez prekida veze uz automatsko rekonfigurisanje klijenta.
Za šifriranje se koristi stream cifra ChaCha20 i algoritam za autentifikaciju poruka (MAC) Poly1305, koje su razvili Daniel J. Bernstein, Tanja Lange i Peter Schwabe. ChaCha20 i Poly1305 predstavljaju brže i sigurnije alternative AES-256-CTR i HMAC, čija softverska implementacija omogućuje postizanje fiksnog vrijeme izvođenja bez angažiranja specijalizirane hardverske podrške. Za generiranje zajedničkog tajnog ključa koristi se protokol Diffie-Hellman na eliptičnim krivuljama s implementacijom Curve25519, također predloženom od strane Daniela J. Bernsteina. Za hashiranje se koristi algoritam BLAKE2s (RFC7693).
Izvor: opennet.ru
