Implementasi baru VPN WireGuard ditambahkan ke basis kode FreeBSD

Pohon sumber FreeBSD telah diperbarui dengan implementasi baru VPN WireGuard, berdasarkan kode modul kernel yang diproduksi bersama oleh tim pengembangan inti FreeBSD dan WireGuard dengan kontribusi dari Jason A. Donenfeld, penulis VPN WireGuard, dan John H. Baldwin ), pengembang GDB dan FreeBSD terkenal, yang mengimplementasikan dukungan untuk SMP dan NUMA di kernel FreeBSD pada awal tahun 2000-an. Setelah driver diterima di FreeBSD (sys/dev/wg), pengembangan dan pemeliharaannya selanjutnya akan dilakukan di repositori FreeBSD.

Sebelum kode diterima, tinjauan lengkap terhadap perubahan dilakukan dengan dukungan FreeBSD Foundation, di mana interaksi driver dengan subsistem kernel lainnya dan kemungkinan menggunakan primitif kriptografi yang disediakan oleh kernel juga dianalisis. dinilai.

Untuk menggunakan algoritma kriptografi yang diperlukan oleh pengemudi, API dari subsistem kriptografi kernel FreeBSD diperluas, yang mana harness telah ditambahkan yang memungkinkan penggunaan algoritma yang tidak didukung di FreeBSD melalui API kripto standar, menggunakan implementasi dari algoritma yang diperlukan dari perpustakaan libsodium. Dari algoritma yang dibangun ke dalam driver, hanya kode untuk menghitung hash Blake2 yang tersisa, karena implementasi algoritma yang disediakan di FreeBSD ini terikat pada ukuran hash yang tetap.

Selain itu, selama proses peninjauan, optimasi kode dilakukan, yang memungkinkan untuk meningkatkan efisiensi distribusi beban pada CPU multi-core (keseimbangan penugasan tugas enkripsi paket dan dekripsi ke inti CPU dipastikan). Akibatnya, overhead saat memproses paket mendekati biaya implementasi driver Linux. Kode ini juga menyediakan kemampuan untuk menggunakan driver ossl untuk mempercepat operasi enkripsi.

Berbeda dengan upaya sebelumnya untuk mengintegrasikan WireGuard ke FreeBSD, implementasi baru ini menggunakan utilitas wg standar, bukan versi ifconfig yang dimodifikasi, yang memungkinkan untuk menyatukan konfigurasi di Linux dan FreeBSD. Utilitas wg, serta drivernya, disertakan dalam kode sumber FreeBSD, yang dimungkinkan dengan mengubah lisensi untuk kode wg (kode tersebut sekarang tersedia di bawah lisensi MIT dan GPL). Upaya terakhir untuk memasukkan WireGuard ke FreeBSD dilakukan pada tahun 2020, tetapi berakhir dengan skandal, akibatnya kode yang sudah ditambahkan dihapus karena kualitas rendah, pekerjaan yang ceroboh dengan buffer, penggunaan stub sebagai ganti pemeriksaan, implementasi yang tidak lengkap protokol dan pelanggaran lisensi GPL.

Izinkan kami mengingatkan Anda bahwa VPN WireGuard diimplementasikan berdasarkan metode enkripsi modern, memberikan kinerja sangat tinggi, mudah digunakan, bebas komplikasi dan telah membuktikan dirinya dalam sejumlah penerapan besar yang memproses lalu lintas dalam jumlah besar. Proyek ini telah berkembang sejak tahun 2015, dan telah menjalani audit dan verifikasi formal terhadap metode enkripsi yang digunakan. WireGuard menggunakan konsep perutean kunci enkripsi, yang melibatkan pemasangan kunci pribadi ke setiap antarmuka jaringan dan menggunakannya untuk mengikat kunci publik.

Kunci publik dipertukarkan untuk membuat koneksi dengan cara yang mirip dengan SSH. Untuk menegosiasikan kunci dan terhubung tanpa menjalankan daemon terpisah di ruang pengguna, mekanisme Noise_IK dari Kerangka Protokol Kebisingan digunakan, serupa dengan mempertahankan kunci_otorisasi di SSH. Transmisi data dilakukan melalui enkapsulasi dalam paket UDP. Ini mendukung perubahan alamat IP server VPN (roaming) tanpa memutuskan koneksi dengan konfigurasi ulang klien otomatis.

Enkripsi menggunakan 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 aman dari AES-256-CTR dan HMAC, yang implementasi perangkat lunaknya memungkinkan pencapaian waktu eksekusi tetap tanpa menggunakan dukungan perangkat keras khusus. Untuk menghasilkan kunci rahasia bersama, protokol Diffie-Hellman kurva elips digunakan dalam implementasi Curve25519, juga diusulkan oleh Daniel Bernstein. Algoritma BLAKE2s (RFC7693) digunakan untuk hashing.

Sumber: opennet.ru

Tambah komentar