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.
Amintiți-vă că VPN WireGuard este implementat folosind metode moderne de criptare, oferă performanțe excepționale, este ușor de utilizat și nu prezintă complicații. Și-a dovedit eficiența într-o serie de implementări la scară largă care gestionează volume mari de trafic. Proiectul este în dezvoltare din 2015 și a trecut printr-un audit și o verificare formală a metodelor sale de criptare. WireGuard utilizează un concept de rutare a criptării bazate pe chei, care implică legarea unei chei private la fiecare interfață de rețea și utilizarea cheilor publice pentru legarea cheilor.
Schimbul de chei publice pentru stabilirea unei conexiuni este similar cu SSH. Pentru negocierea cheilor și conectarea fără a rula un daemon separat în spațiul utilizatorului, se utilizează mecanismul Noise_IK din Noise Protocol Framework, similar cu întreținerea authorized_keys în SSH. Transferul de date se efectuează prin încapsulare în pachete UDP. Modificarea este acceptată. adrese IP Servere VPN (roaming) fără întrerupere a conexiunii cu reconfigurare 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
