Ny implementering af VPN WireGuard tilføjet til FreeBSD kodebase

FreeBSD-kildetræet er blevet opdateret med en ny implementering af VPN WireGuard, baseret på kernemodulkode, der er produceret i fællesskab af FreeBSD- og WireGuard-udviklingsteamene med bidrag fra Jason A. Donenfeld, forfatter til VPN WireGuard, og John H. Baldwin ), en velkendt udvikler af GDB og FreeBSD, som implementerede understøttelse af SMP og NUMA i FreeBSD-kernen i begyndelsen af ​​2000'erne. Efter at driveren er accepteret i FreeBSD (sys/dev/wg), vil dens udvikling og vedligeholdelse fremover blive udført i FreeBSD-lageret.

Før koden blev accepteret, blev der udført en fuldstændig gennemgang af ændringerne med støtte fra FreeBSD Foundation, hvorunder driverens interaktion med resten af ​​kerneundersystemerne også blev analyseret og muligheden for at bruge kryptografiske primitiver leveret af kernen blev vurderet.

For at bruge de kryptografiske algoritmer, der kræves af driveren, blev API'et af FreeBSD-kernens krypto-undersystem udvidet, hvortil der blev tilføjet en sele, der tillader brugen af ​​algoritmer, der ikke understøttes i FreeBSD gennem standard krypto-API, ved hjælp af implementeringen af nødvendige algoritmer fra libsodium-biblioteket. Af de algoritmer, der er indbygget i driveren, er kun koden til beregning af Blake2-hashes tilbage, da implementeringen af ​​denne algoritme, der leveres i FreeBSD, er bundet til en fast hashstørrelse.

Derudover blev der under gennemgangsprocessen gennemført kodeoptimering, hvilket gjorde det muligt at øge effektiviteten af ​​belastningsfordelingen på multi-core CPU'er (ensartet afbalancering af tildelingen af ​​pakkekrypterings- og dekrypteringsopgaver til CPU-kerner blev sikret). Som et resultat var overheaden ved behandling af pakker tæt på den for Linux-driverimplementeringen. Koden giver også mulighed for at bruge ossl-driveren til at fremskynde krypteringsoperationer.

I modsætning til det tidligere forsøg på at integrere WireGuard i FreeBSD, bruger den nye implementering standard wg-værktøjet, snarere end en modificeret version af ifconfig, som gør det muligt at forene konfigurationen på Linux og FreeBSD. Wg-værktøjet såvel som driveren er inkluderet i FreeBSD-kildekoden, hvilket blev muliggjort ved at ændre licensen til wg-koden (koden er nu tilgængelig under MIT- og GPL-licenserne). Det sidste forsøg på at inkludere WireGuard i FreeBSD blev lavet i 2020, men endte i en skandale, som et resultat af, at den allerede tilføjede kode blev fjernet på grund af lav kvalitet, skødesløst arbejde med buffere, brugen af ​​stubs i stedet for checks, ufuldstændig implementering af protokollen og overtrædelse af GPL-licensen.

Lad os minde dig om, at VPN WireGuard er implementeret på basis af moderne krypteringsmetoder, giver meget høj ydeevne, er nem at bruge, fri for komplikationer og har bevist sig selv i en række store implementeringer, der behandler store mængder trafik. Projektet har været under udvikling siden 2015 og har gennemgået en revision og formel verifikation af de anvendte krypteringsmetoder. WireGuard bruger konceptet med krypteringsnøgle routing, som involverer at knytte en privat nøgle til hver netværksgrænseflade og bruge den til at binde de offentlige nøgler.

Offentlige nøgler udveksles for at etablere en forbindelse på samme måde som SSH. For at forhandle nøgler og oprette forbindelse uden at køre en separat dæmon i brugerrummet, bruges Noise Protocol Frameworks Noise_IK-mekanisme, svarende til at opretholde autoriserede_nøgler i SSH. Datatransmission udføres gennem indkapsling i UDP-pakker. Det understøtter ændring af IP-adressen på VPN-serveren (roaming) uden at afbryde forbindelsen med automatisk klientomkonfiguration.

Kryptering bruger ChaCha20-strømchifferet og Poly1305-meddelelsesgodkendelsesalgoritmen (MAC), udviklet af Daniel J. Bernstein, Tanja Lange og Peter Schwabe. ChaCha20 og Poly1305 er placeret som hurtigere og sikrere analoger af AES-256-CTR og HMAC, hvis softwareimplementering gør det muligt at opnå en fast udførelsestid uden brug af speciel hardwaresupport. For at generere en delt hemmelig nøgle bruges den elliptiske kurve Diffie-Hellman protokol i Curve25519 implementeringen, også foreslået af Daniel Bernstein. BLAKE2s-algoritmen (RFC7693) bruges til hashing.

Kilde: opennet.ru

Tilføj en kommentar