deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak Hacker News – Front Page (native)

Firezone, Rust ile yazılmış sans-IO bir WireGuard uygulaması olan sanstun'u yayınladı

Firezone, WireGuard durum makinesini yerleşik IO olmadan uygulayan ve test edilebilirlik, tür güvenli protokol işleme ile paralelleştirmeye uygun şifrelemeyi hedefleyen sanstun adlı bir Rust kütüphanesi yayınladı.

Firezone, Rust ile yazılmış sans-IO bir WireGuard uygulaması olan sanstun'u yayınladı

Firezone, Rust ile yazılmış yeni bir userspace WireGuard protokolü uygulaması olan sanstun'u duyurdu. Kütüphane, WireGuard durum makinesini sans-IO bir bileşen olarak uyguluyor; yani kendi başına ağ, dosya, zaman veya rastgelelik işlemleri yapmıyor ve şirket tarafından paralelleştirmeye uygun ve deyimsel olarak nitelendirilen, kullanım kolaylığı, güvenlik ve performansa odaklanan bir API sunuyor.

Hiç IO yapmayan bir kütüphane

Sans-IO, yan etkilerin durum ve iş mantığından kesin biçimde ayrı tutulduğu bir tasarım felsefesidir. Firezone'nun açıkladığı gibi bu yalnızca dosya ve ağ işlemlerini değil, zamanı ve rastgeleliği de kapsıyor: sans-IO bir bileşene zaman damgaları ve rastgele değerler kendi almak yerine dışarıdan verilir. Duyuruya göre bu tür bileşenler iyi birleşir, görece kolay test edilir, async/await ile ilişkili fonksiyon boyama sorunlarından kaçınır ve Rust'ın sahiplik kurallarıyla doğal biçimde uyum sağlar. Firezone, bu örüntünün Rust'a özgü olmadığını ve herhangi bir dilde uygulanabileceğini belirtiyor.

boringtun'a iki yıllık yama deneyiminden doğdu

Sanstun, Firezone'nun başlangıçta benimsediği uygulama olan boringtun deneyiminden ortaya çıktı. İki yılı aşkın production kullanımı boyunca ekip, bağımlılık güncellemeleri hariç, fork'larında 70'ten fazla pull request biriktirdi; uç durumları düzelttiler, API'ler eklediler ve davranışı yapılandırılabilir hale getirdiler. Ürün gereksinimleri evrildikçe upstream ile tam API uyumluluğunu korumak giderek zorlaştı ve fork zamanla yepyeni bir kütüphanenin planı hâline geldi.

Yeni API'yi iki ders şekillendirdi. Birincisi, Firezone zaman işlemini sans-IO hale getirdi; açık bir zaman damgası kabul eden API varyantları ekledi ve bu da bir sistemi bütünüyle doğru biçimde simüle etmeyi mümkün kılıyor. İkincisi, iç buffering'i kaldırdılar. Boringtun, bir oturum kurulurken paketleri kuyruğa alıyor ve çağıran taraflardan boş bir datagram ile parse fonksiyonunu çağırarak bu tamponu boşaltmalarını istiyordu; Firezone bu yaklaşımı sezgisel olmayan ve tahsisat ağırlıklı buldu. Sanstun hiç buffer yapmaz: bir oturum var olmadan önce paket gönderirseniz, onu buffer'lamak çağıranın sorumluluğundadır.

WireGuard'ın kurallarını tür sisteminde dayatmak

API iki tür etrafında kurulmuş: tek bir anahtarla tanımlanan bir Interface ve arayüzler arasındaki bağlantıları temsil eden Tunnel'lar. Gelen her UDP datagramı, ham bir datagramı parse eden tek public fonksiyon olan Interface::receive'dan geçmek zorundadır. Bu fonksiyon başlığı parse eder, mesaj kimlik doğrulama kodunu doğrular, cookie'leri kontrol eder, hız sınırlarını uygular ve WireGuard mesaj türü başına bir varyant içeren bir enum döndürür; ya da arayüz yük altındaysa gönderilecek bir cookie yanıtı.

Tasarım, protokol değişmezlerini türlere eşler böylece belirli hatalar derlenemez. WireGuard, CPU tükenmesine karşı savunmasızdır: bir uç noktanın public anahtarını bilen bir saldırgan onu sahte handshake başlatmalarıyla boğabilir ve alıcı taraf, sahteciliği tespit etmeden önce Diffie-Hellman değişiminin kendi yarısını çalıştırmak zorundadır. Protokolün savunması, iddia edilen kaynak IP'nin sahipliğini kanıtlayan ve tüm bir arayüz genelinde uygulanan IP başına hız sınırlamasını mümkün kılan bir cookie mekanizmasıdır. Sanstun'da Interface::receive'ın döndürdüğü mesaj türlerinin (örneğin HandshakeInitiation) constructor'ları crate'e özeldir; yani birini elde etmenin tek yolu hız sınırlamalı giriş noktasıdır; limiter'ı unutmak gemiye çıkarabileceğiniz bir hata değildir. Yönlendirme hataları benzer muamele görür: handshake başlatmaları başlatıcının statik public anahtarıyla eşleştirilirken, diğer mesajlar hem tunnel'ı hem de içindeki oturumu tanımlayan bir oturum indeksi taşır.

Giden paketler tek bir kapsülleme giriş noktasından geçer, timer'lar açıkça ilerletilir ve yoklanır, handshake'ler ise herhangi bir zamanda başlatılabilir. Firezone ayrıca şifreleme ve şifre çözme için paralelleştirmeye uygun API'yi kütüphanenin öne çıkan özelliklerinden biri olarak vurguluyor.

Neden önemli

Kullanılabilir userspace WireGuard uygulamaları nadirdir ve Firezone'nun deneyimi, mevcut bir uygulamayı yeni gereksinimlere uydurmanın bakım maliyetini gözler önüne seriyor. WireGuard'ı VPN istemcilerine, gateway'lere veya test altyapılarına gömen geliştiriciler için protokol mantığını IO'dan ayıran, timer'ları açık hale getiren ve hız sınırlamasını tür düzeyinde dayatan bir kütüphane, hem test yükünü hem de incelikli protokol hatalarını gemiye çıkarma riskini azaltır. WireGuard'ın kendisinin ötesinde sanstun, sans-IO mimarisinin bir ağ protokolünü birleştirilebilir, deterministik ve güvenli bir yapı taşı hâline nasıl dönüştürebileceğinin somut bir örnek olayıdır.

  • #rust
  • #wireguard
  • #vpn
  • #networking
  • #security

İlgili yazılar