VPN WireGuard inclus în nucleul Linux 5.6

Astăzi, Linus și-a mutat filiala net-next cu interfețe VPN WireGuard. Despre acest eveniment raportat pe lista de corespondență WireGuard.

VPN WireGuard inclus în nucleul Linux 5.6

Colectarea de coduri pentru noul kernel Linux 5.6 este în desfășurare. WireGuard este un VPN rapid de generație următoare care implementează criptografia modernă. A fost dezvoltat inițial ca o alternativă mai simplă și mai convenabilă la VPN-urile existente. Autorul este specialistul canadian în securitatea informațiilor Jason A. Donenfeld. În august 2018, WireGuard primit laude de Linus Torvalds. În acea perioadă, au început lucrările pentru includerea VPN în kernel-ul Linux. Procesul a durat puțin mai mult.

„Văd că Jason a făcut o cerere de extragere pentru a include WireGuard în kernel”, a scris Linus pe 2 august 2018. — Pot să-mi declar încă o dată dragostea pentru acest VPN și să sper la o fuziune în curând? Codul poate să nu fie perfect, dar m-am uitat la el și, în comparație cu ororile OpenVPN și IPSec, este o adevărată operă de artă.”

În ciuda dorințelor lui Linus, fuziunea a durat un an și jumătate. Problema principală s-a dovedit a fi legată de implementările proprietare ale funcțiilor criptografice, care au fost folosite pentru a îmbunătăți performanța. După lungi negocieri din septembrie 2019, așa a fost s-a luat o decizie de compromis traducă patch-uri la funcțiile Crypto API disponibile în kernel, la care dezvoltatorii WireGuard au plângeri în domeniul performanței și securității generale. Dar au decis să separe funcțiile cripto native WireGuard într-un API Zinc de nivel scăzut separat și, în cele din urmă, să le porteze în kernel. În noiembrie, dezvoltatorii de kernel și-au ținut promisiunea și de acord transferați o parte a codului din Zinc în nucleul principal. De exemplu, în API-ul Crypto inclus implementări rapide ale algoritmilor ChaCha20 și Poly1305 pregătiți în WireGuard.

În cele din urmă, pe 9 decembrie 2019, David S. Miller, responsabil pentru subsistemul de rețea al nucleului Linux, admis la ramura net-următoarea petice cu implementarea unei interfețe VPN din proiectul WireGuard.

Și astăzi, 29 ianuarie 2020, modificările au ajuns la Linus pentru a fi incluse în kernel.

VPN WireGuard inclus în nucleul Linux 5.6

Avantajele revendicate ale WireGuard față de alte soluții VPN:

  • Ușor de folosit.
  • Utilizează criptografia modernă: Noise protocol framework, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF etc.
  • Cod compact, lizibil, mai ușor de investigat pentru vulnerabilități.
  • Performanta ridicata.
  • Clar și elaborat specificație.

Toată logica de bază a WireGuard ocupă mai puțin de 4000 de linii de cod, în timp ce OpenVPN și IPSec necesită sute de mii de linii.

„WireGuard folosește conceptul de rutare a cheilor de criptare, care implică atașarea unei chei private la fiecare interfață de rețea și utilizarea cheilor publice pentru a o lega. Cheile publice sunt schimbate pentru a stabili o conexiune într-un mod similar cu SSH. Pentru a negocia cheile și a vă conecta fără a rula un daemon separat în spațiul utilizatorului, mecanismul Noise_IK de la Cadrul protocolului de zgomotsimilar 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 deconecta conexiunea cu reconfigurarea automată a clientului, - el scrie Opennet.

Pentru criptare utilizat stream cipher ChaCha20 și algoritm de autentificare a mesajelor (MAC) Poly1305, proiectat de Daniel Bernstein (Daniel J. Bernstein), Tanja Lange și Peter Schwabe. ChaCha20 și Poly1305 sunt poziționate ca analogi mai rapidi și mai siguri ai AES-256-CTR și HMAC, a căror implementare software permite obținerea unui timp de execuție fix fără utilizarea suportului hardware special. Pentru a genera o cheie secretă partajată, în implementare este utilizat protocolul Diffie-Hellman cu curbă eliptică Curve25519, propus tot de Daniel Bernstein. Algoritmul folosit pentru hashing este BLAKE2s (RFC7693)".

Constatări teste de performanță de pe site-ul oficial:

Lățime de bandă (megabit/s)
VPN WireGuard inclus în nucleul Linux 5.6

Ping (ms)
VPN WireGuard inclus în nucleul Linux 5.6

Configurație de testare:

  • Intel Core i7-3820QM și Intel Core i7-5200U
  • Carduri Gigabit Intel 82579LM și Intel I218LM
  • Linux 4.6.1
  • Configurație WireGuard: ChaCha256 pe 20 de biți cu Poly1305 pentru MAC
  • Prima configurație IPsec: ChaCha256 pe 20 de biți cu Poly1305 pentru MAC
  • A doua configurație IPsec: AES-256-GCM-128 (cu AES-NI)
  • Configurație OpenVPN: suită de criptare echivalentă AES pe 256 de biți cu HMAC-SHA2-256, mod UDP
  • Performanța a fost măsurată folosind iperf3, arată rezultatul mediu pe 30 de minute.

În teorie, odată integrat în stiva de rețea, WireGuard ar trebui să funcționeze și mai rapid. Dar, în realitate, acest lucru nu va fi neapărat cazul din cauza tranziției la funcțiile criptografice Crypto API încorporate în kernel. Poate că nu toate sunt încă optimizate la nivelul de performanță al WireGuard nativ.

„Din punctul meu de vedere, WireGuard este în general ideal pentru utilizator. Toate deciziile de nivel scăzut sunt luate în specificație, astfel încât procesul de pregătire a unei infrastructuri VPN tipice durează doar câteva minute. Este aproape imposibil să dai peste cap configurația - писали pe Habré în 2018. — Procesul de instalare descrisă în detaliu pe site-ul oficial, aș dori să notez separat excelentul Suport OpenWRT. Această ușurință în utilizare și compactitatea bazei de cod a fost obținută prin eliminarea distribuirii cheilor. Nu există un sistem complex de certificate și toată această groază corporativă; cheile scurte de criptare sunt distribuite la fel ca cheile SSH.”

Proiectul WireGuard se dezvoltă din 2015, a fost auditat și verificare formală. Suportul WireGuard este integrat în NetworkManager și systemd, iar corecțiile de kernel sunt incluse în distribuțiile de bază ale Debian Unstable, Mageia, Alpine, Arch, Gentoo, OpenWrt, NixOS, Subgraph și ALT.

Sursa: www.habr.com

Adauga un comentariu