En ny VPN-implementation, WireGuard, har lagts till i FreeBSD-kodbasen.

FreeBSD-källträdet har uppdaterats med en ny implementering av VPN WireGuard, baserad på kärnmodulkod som gemensamt produceras av FreeBSD och WireGuards kärnutvecklingsteam med bidrag från Jason A. Donenfeld, författare till VPN WireGuard, och John H. Baldwin ), en välkänd utvecklare av GDB och FreeBSD, som implementerade stöd för SMP och NUMA i FreeBSD-kärnan i början av 2000-talet. Efter att drivrutinen har accepterats i FreeBSD (sys/dev/wg), kommer dess utveckling och underhåll hädanefter att utföras i FreeBSD-förrådet.

Innan koden accepterades genomfördes en fullständig granskning av ändringarna med stöd av FreeBSD Foundation, under vilken interaktionen mellan drivrutinen och resten av kärnsubsystemen analyserades och möjligheten att använda kryptografiska primitiver från kärnan. Var bedömd.

För att använda de kryptografiska algoritmerna som krävs av drivrutinen utökades API:et för FreeBSD-kärnans krypto-undersystem, till vilket en sele lades till som tillåter användning av algoritmer som inte stöds i FreeBSD genom standardkrypto-API, med hjälp av implementeringen av nödvändiga algoritmer från libsodium-biblioteket. Av de algoritmer som är inbyggda i drivrutinen finns bara koden för att beräkna Blake2-hashar kvar, eftersom implementeringen av denna algoritm som tillhandahålls i FreeBSD är knuten till en fast hashstorlek.

Under granskningen genomfördes dessutom kodoptimering, vilket gjorde det möjligt att öka effektiviteten av belastningsfördelningen på flerkärniga processorer (enhetlig balansering av tilldelningen av paketkryptering och dekrypteringsuppgifter till CPU-kärnor säkerställdes). Som ett resultat var omkostnaden vid bearbetning av paket nära den för Linux-drivrutinimplementeringen. Koden ger också möjlighet att använda ossl-drivrutinen för att påskynda krypteringsoperationer.

Till skillnad från det tidigare försöket att integrera WireGuard i FreeBSD, använder den nya implementeringen standardverktyget wg, snarare än en modifierad version av ifconfig, vilket gör det möjligt att förena konfigurationen på Linux och FreeBSD. Wg-verktyget, såväl som drivrutinen, ingår i FreeBSD-källkoden, vilket gjordes möjligt genom att ändra licensen för wg-koden (koden är nu tillgänglig under MIT- och GPL-licenserna). Det senaste försöket att inkludera WireGuard i FreeBSD gjordes 2020, men slutade i en skandal, som ett resultat av vilken den redan tillagda koden togs bort på grund av låg kvalitet, slarvigt arbete med buffertar, användning av stubbar istället för kontroller, ofullständig implementering av protokollet och brott mot GPL-licensen.

Låt oss påminna dig om att VPN WireGuard är implementerat på basis av moderna krypteringsmetoder, ger mycket hög prestanda, är lätt att använda, fri från komplikationer och har bevisat sig i ett antal stora installationer som bearbetar stora trafikvolymer. Projektet har utvecklats sedan 2015 och har genomgått en revision och formell verifiering av de använda krypteringsmetoderna. WireGuard använder konceptet med krypteringsnyckeldirigering, vilket innebär att man fäster en privat nyckel till varje nätverksgränssnitt och använder den för att binda de offentliga nycklarna.

Publika nycklar utbyts för att upprätta en anslutning på liknande sätt som SSH. För att förhandla om nycklar och ansluta utan att köra en separat demon i användarutrymmet, används Noise Protocol Frameworks Noise_IK-mekanism, liknande att underhålla auktoriserade_nycklar i SSH. Dataöverföring sker genom inkapsling i UDP-paket. Den stöder ändring av IP-adressen för VPN-servern (roaming) utan att koppla från anslutningen med automatisk klientomkonfiguration.

Kryptering använder ChaCha20-strömchifferet och Poly1305-meddelandeautentiseringsalgoritmen (MAC), utvecklad av Daniel J. Bernstein, Tanja Lange och Peter Schwabe. ChaCha20 och Poly1305 är positionerade som snabbare och säkrare analoger till AES-256-CTR och HMAC, vars mjukvaruimplementering gör det möjligt att uppnå en fast exekveringstid utan användning av speciellt hårdvarustöd. För att generera en delad hemlig nyckel används det elliptiska kurvan Diffie-Hellman-protokollet i Curve25519-implementeringen, också föreslagen av Daniel Bernstein. BLAKE2s algoritm (RFC7693) används för hash.

Källa: opennet.ru

Lägg en kommentar