Noua implementare a VPN WireGuard adăugată la baza de cod FreeBSD

Arborele sursă FreeBSD a fost actualizat cu o nouă implementare a VPN WireGuard, bazată pe codul modulului de kernel produs în comun de echipele de dezvoltare FreeBSD și WireGuard cu contribuții de la Jason A. Donenfeld, autorul cărții VPN WireGuard și John H. Baldwin ), un dezvoltator binecunoscut de GDB și FreeBSD, care a implementat suport pentru SMP și NUMA în nucleul FreeBSD la începutul anilor 2000. După ce driverul este acceptat în FreeBSD (sys/dev/wg), dezvoltarea și întreținerea acestuia vor fi de acum înainte efectuate în depozitul FreeBSD.

Înainte ca codul să fie acceptat, a fost efectuată o revizuire completă a modificărilor cu sprijinul Fundației FreeBSD, timp în care a fost analizată interacțiunea driverului cu restul subsistemelor nucleului și a fost posibilă utilizarea primitivelor criptografice furnizate de nucleu. evaluat.

Pentru a utiliza algoritmii criptografici solicitați de driver, s-a extins API-ul cripto-subsistemului kernel FreeBSD, căruia i s-a adăugat un cablaj care permite utilizarea unor algoritmi nesuportați în FreeBSD prin intermediul cripto-API standard, folosind implementarea algoritmi necesari din biblioteca libsodium. Dintre algoritmii încorporați în driver, a rămas doar codul pentru calcularea hashurilor Blake2, deoarece implementarea acestui algoritm furnizat în FreeBSD este legată de o dimensiune hash fixă.

În plus, în timpul procesului de revizuire, a fost efectuată optimizarea codului, ceea ce a făcut posibilă creșterea eficienței distribuției sarcinii pe procesoarele cu mai multe nuclee (a fost asigurată echilibrarea uniformă a atribuirii sarcinilor de criptare și decriptare a pachetelor către nucleele CPU). Ca rezultat, suprasarcina la procesarea pachetelor a fost apropiată de cea a implementării driverului Linux. Codul oferă, de asemenea, posibilitatea de a utiliza driverul ossl pentru a accelera operațiunile de criptare.

Spre deosebire de încercarea anterioară de a integra WireGuard în FreeBSD, noua implementare folosește utilitarul standard wg, mai degrabă decât o versiune modificată a ifconfig, care face posibilă unificarea configurației pe Linux și FreeBSD. Utilitarul wg, precum și driverul, sunt incluse în codul sursă FreeBSD, ceea ce a fost posibil prin schimbarea licenței pentru codul wg (codul este acum disponibil sub licențele MIT și GPL). Ultima încercare de a include WireGuard în FreeBSD a fost făcută în 2020, dar s-a încheiat cu un scandal, în urma căruia codul deja adăugat a fost eliminat din cauza calității scăzute, a lucrului neglijent cu tampoane, a utilizării stub-urilor în loc de verificări, a implementării incomplete. a protocolului și încălcarea licenței GPL.

Reamintim că VPN WireGuard este implementat pe baza unor metode moderne de criptare, oferă performanțe foarte ridicate, este ușor de utilizat, lipsit de complicații și s-a dovedit într-o serie de implementări mari care procesează cantități mari de trafic. Proiectul se dezvoltă din 2015, a trecut de auditul și verificarea formală a metodelor de criptare utilizate. WireGuard folosește conceptul de rutare a cheilor de criptare, care implică legarea unei chei private la fiecare interfață de rețea și utilizarea cheilor publice pentru a le lega.

Schimbul de chei publice pentru a stabili o conexiune este similar cu SSH. Pentru a negocia cheile și a vă conecta fără a rula un daemon separat al spațiului utilizator, se folosește mecanismul Noise_IK al Noise Protocol Framework, similar cu menținerea authorized_keys în SSH. Transmiterea datelor se realizează prin încapsulare în pachete UDP. Acceptă schimbarea adresei IP a serverului VPN (roaming) fără a întrerupe conexiunea cu reconfigurarea automată a clientului.

Criptarea folosește codul de flux ChaCha20 și algoritmul de autentificare a mesajelor (MAC) Poly1305 dezvoltat de Daniel J. Bernstein, Tanja Lange și Peter Schwabe. ChaCha20 și Poly1305 sunt poziționate ca analoge mai rapide și mai sigure ale AES-256-CTR și HMAC, a căror implementare software permite obținerea unui timp de execuție fix fără a implica suport hardware special. Pentru a genera o cheie secretă partajată, se folosește protocolul de curbă eliptică Diffie-Hellman în implementarea Curve25519, propus și de Daniel Bernstein. Pentru hashing, se folosește algoritmul BLAKE2s (RFC7693).

Sursa: opennet.ru

Adauga un comentariu