Kernel Linux termasuk WireGuard VPN

Hari ini, Linus telah pindah ke cabang berikutnya dengan antarmuka WireGuard VPN. Acara ini dilaporkan di milis WireGuard.



Saat ini, pengumpulan kode berlanjut untuk kernel Linux 5.6 yang baru. WireGuard adalah VPN cepat generasi baru yang menggabungkan kriptografi modern. Awalnya dikembangkan sebagai alternatif yang lebih sederhana dan nyaman untuk VPN yang ada. Penulis adalah spesialis keamanan informasi Kanada Jason A. Donenfeld. Pada bulan Agustus 2018, WireGuard dipuji oleh Linus Torvalds. Sekitar waktu, pekerjaan mulai memasukkan VPN ke dalam kernel Linux. Prosesnya sedikit tertunda.

"Saya melihat bahwa Jason melakukan permintaan gabungan untuk memasukkan WireGuard ke dalam inti," tulis Linus pada 2 Agustus 2018. - Dapatkah saya sekali lagi menyatakan cinta saya untuk VPN ini dan berharap untuk merger yang cepat? Kode mungkin tidak sempurna, tapi saya melihatnya, dan dibandingkan dengan kengerian OpenVPN dan IPSec, ini adalah karya seni yang nyata. "

Terlepas dari keinginan Linus, merger berlanjut selama satu setengah tahun. Masalah utama ternyata terkait dengan penerapan fungsi kriptografi mereka sendiri, yang digunakan untuk meningkatkan produktivitas. Setelah negosiasi panjang pada September 2019, kompromi dilakukan untuk mentransfer tambalan ke fitur inti API Crypto, yang dikeluhkan oleh pengembang WireGuard dalam hal kinerja dan keamanan keseluruhan. Tetapi mereka memutuskan untuk menyambungkan fungsi kripto WireGuard asli ke dalam API Zinc tingkat rendah yang terpisah dan akhirnya mengirimnya ke kernel. Pada bulan November, pengembang inti menepati janji mereka dan setuju untuk mentransfer sebagian kode dari Zinc ke inti utama. Sebagai contoh, Crypto API termasuk implementasi cepat yang disiapkan oleh algoritma ChaCha20 dan Poly1305 yang disiapkan oleh WireGuard.

Pada akhirnya, pada 9 Desember 2019, David S. Miller, yang bertanggung jawab untuk subsistem jaringan kernel Linux, menerima tambalan dengan implementasi antarmuka VPN dari proyek WireGuard ke cabang net-next.

Dan hari ini, 29 Januari 2020, perubahan pergi ke Linus untuk dimasukkan dalam kernel.



Keuntungan yang dinyatakan dari WireGuard dibandingkan solusi VPN lainnya:

  • Mudah digunakan.
  • Menggunakan kriptografi modern: Kerangka protokol suara, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF, dll.
  • Kode yang mudah dibaca, lebih mudah untuk menyelidiki kerentanannya.
  • Performa tinggi.
  • Spesifikasi yang jelas dan terperinci.

Semua logika inti dari WireGuard membutuhkan kurang dari 4000 baris kode, sementara OpenVPN dan IPSec adalah ratusan ribu baris.

“WireGuard menggunakan konsep perutean kunci enkripsi, yang melibatkan pengikatan kunci pribadi untuk setiap antarmuka jaringan dan menggunakannya untuk mengikat kunci publik. Pertukaran kunci publik untuk membangun koneksi dilakukan dengan analogi dengan SSH. Untuk menegosiasikan kunci dan terhubung tanpa memulai daemon terpisah di ruang pengguna, mekanisme Noise_IK dari Noise Protocol Framework digunakan , mirip dengan mempertahankan otor_keys di SSH. Data dikirim melalui enkapsulasi dalam paket UDP. Ini mendukung perubahan alamat IP dari server VPN (roaming) tanpa memutuskan koneksi dengan konfigurasi ulang otomatis dari klien, tulis Opennet.

Untuk enkripsi , digunakan stream cipher ChaCha20 dan algoritma otentikasi pesan Poly1305 (MAC) yang dikembangkan oleh Daniel J. Bernstein , Tanja Lange, dan Peter Schwabe. ChaCha20 dan Poly1305 diposisikan sebagai analog yang lebih cepat dan lebih aman dari AES-256-CTR dan HMAC, implementasi perangkat lunak yang memungkinkan untuk mencapai jangka waktu yang tetap tanpa melibatkan dukungan perangkat keras khusus. Untuk menghasilkan kunci rahasia bersama, protokol Diffie-Hellman pada kurva eliptik digunakan dalam implementasi Curve25519 , juga diusulkan oleh Daniel Bernstein. Untuk hashing, digunakan algoritma BLAKE2s (RFC7693) . ”

Hasil tes kinerja dari situs web resmi:

Bandwidth (megabit / s)


Ping (ms)


Konfigurasi tes:


  • Intel Core i7-3820QM dan Intel Core i7-5200U
  • Kartu Gigabit Intel 82579LM dan Intel I218LM
  • Linux 4.6.1
  • Konfigurasi WireGuard: ChaCha20 256-Bit dengan Poly1305 untuk MAC
  • Konfigurasi Pertama IPsec: ChaCha20 256-bit dengan Poly1305 untuk MAC
  • Konfigurasi IPsec Kedua: AES-256-GCM-128 (dengan AES-NI)
  • Konfigurasi OpenVPN: Set Enkripsi AES 256-bit Setara dengan HMAC-SHA2-256, Mode UDP
  • Performa diukur menggunakan iperf3 , menunjukkan hasil rata-rata dalam 30 menit.

Secara teoritis, setelah integrasi ke dalam tumpukan jaringan, WireGuard akan bekerja lebih cepat. Namun pada kenyataannya, ini tidak harus menjadi kasus karena transisi ke fungsi kriptografi yang dibangun ke inti API Crypto. Mungkin tidak semuanya masih dioptimalkan ke tingkat kinerja WireGuard asli.

“Menurut saya, WireGuard umumnya ideal untuk pengguna. Semua keputusan tingkat rendah dibuat dalam spesifikasi, sehingga proses mempersiapkan infrastruktur VPN khas hanya membutuhkan beberapa menit. Hampir tidak mungkin untuk membingungkan konfigurasi, - mereka menulis di Habré pada tahun 2018. - Proses instalasi dijelaskan secara rinci di situs web resmi, saya ingin menyebutkan dukungan yang sangat baik untuk OpenWRT . Kemudahan penggunaan dan kekompakan basis kode ini dicapai karena penolakan distribusi kunci. Tidak ada sistem sertifikat yang rumit dan semua ini horor perusahaan; kunci enkripsi pendek didistribusikan kira-kira seperti kunci SSH. "

Proyek WireGuard telah berkembang sejak 2015, telah melewati audit dan verifikasi formal . Dukungan WireGuard diintegrasikan ke dalam NetworkManager dan systemd, dan patch kernel adalah bagian dari distribusi dasar Debian Unstable, Mageia, Alpine, Arch, Gentoo, OpenWrt, NixOS, Subgraph, dan ALT.

Source: https://habr.com/ru/post/id486046/


All Articles