← CALLWHITE

Yapılan iş hakkındaYILMAZ MERT · TRGENCİ

Uzun sürüm: sistemin ne olduğu ve arkasındaki mühendislik.

SORUN

Uçtan uca şifreleme çözülmüş bir mühendislik problemi. Primitifler açık, kütüphaneler denetlenmiş ve yetkin bir ekip kimsenin okuyamayacağı bir messenger yayımlayabiliyor. Neredeyse herkes yayımladı.

Altında, kimsenin çözmediği katman çalışmaya devam etti. O sistemlerin hepsi hâlâ teslimatın hangi hesaba yapılacağını bilmek zorunda; bu da kimin kiminle konuştuğunun cevabını tutan bir sunucu demek. İçerik mühürlü; sosyal grafik bir tablo.

Bu ayrım akademik değil, maliyet farkı. Bir kişinin mesajlarını okumak mahkeme kararı, bir istismar ya da bir analist ister. Herkesin iletişim grafiğini okumak bir veritabanı sorgusu — ve içerikten farklı olarak iletişim grafiği küçüktür, yapılıdır, süresiz saklanabilir ve birinin senin hakkında tuttuğu her şeyle kolayca birleştirilebilir. Şifrelemenin tamamından sağ çıkar: bir gazeteciyle bir memurun belirli bir gece kırk mesaj alışverişi yaptığını bilmek, içeriğini bilmeyi gerektirmez.

Üstveri, ölçeklenen yarıdır — ve neredeyse kimsenin kaldırmadığı yarıdır, çünkü onu kaldırmak teslimatı kolaylaştıran sunucudan vazgeçmek demek. callwhite vazgeçti.

CALLWHITE NEDİR

Mesaj yolunda sunucu olmayan bir messenger. Bir relay var ve bilerek basit: bir adrese sabit boyutlu bir blob kabul eden, sorulduğunda sabit boyutlu bir blob dönen ve başka hiçbir şey bilmeyen opak bir anahtar-değer deposu. Sorulduğu adresleri türetemez, bir adresi bir gönderene bağlayamaz, bir okumayı bir okuyana bağlayamaz.

Adresler, iki tarafın yalnız kendilerinde olan anahtar malzemesinden birbirinden bağımsız türettiği dönen bir zincirden gelir. Dışarıdan hiçbir şey bir adresi bir sonrakine bağlamaz; her biri bir öncekiyle ilgisiz görünür. Yazma yetkisi hesaba değil slot başına körleştirilmiş bir anahtara bağlıdır: relay bir yazımın meşru olduğunu kimin yazdığını öğrenmeden doğrular. Bir şey bulamayan sorgu yem baytlar döner; relay, bir adresin kullanımda olup olmadığı için bir orakül olarak bile kullanılamaz.

Bunun etrafında bir messenger'ı messenger yapan her şey duruyor: göndermeden önce doğrulama numarasını karşılaştırmaya zorlayan eşleşme, yönetilen üyelik ve epoch başına sırla grup sohbetleri, metinle aynı sabit boyutlu blob'lara bölünen fotoğraf ve sesli notlar, boş bir sohbetle yoğun bir sohbetin aynı göründüğü sabit hızlı okuma trafiği, her yazımda bellek-sert iş kanıtı ve içindekiyle birlikte boyu değişmeyen bir kasa.

NASIL İNŞA EDİLDİ

Sekiz Rust crate, iki istemci, tek çekirdek. Kriptografinin bir kullanıcı arayüzü olduğundan haberi yok; arayüz de kendi başına kriptografik bir karar veremiyor. Bir kuralın iki platformda da tutması gerekiyorsa, o kural çekirdekte iki istemcinin de çağırdığı tek bir fonksiyon olarak yaşar.

  • Çekirdek — Rust. Ratchet, adresleme, çerçeveleme, grup epoch'ları, örtü trafiği, kasa. G/Ç yok, platform yok, arayüz yok.
  • Android — Kotlin ve Jetpack Compose; aynı çekirdeğe üretilmiş bir UniFFI köprüsüyle bağlanır.
  • Masaüstü — Tauri; arayüz düz HTML ve CSS, kararlar Rust'ta. Çatı yok, paketlenmiş tarayıcı motoru yok.
  • Relay — opak bir anahtar-değer deposu: bulamayınca yem bayt döner, her yazımda iş kanıtı ister ve iletişim grafiğine çevrilebilecek hiçbir şey tutmaz.
  • Derleme — sabitlenmiş araç zinciri, -D warnings ile Clippy, yayın başına CycloneDX bağımlılık envanteri ve tuttuğu makineden hiç çıkmayan bir imza anahtarı.

DİSİPLİN

Tek cümle: bir düzeltme, o olmadan bir şey düşene kadar sayılmaz.

Her davranış kuralı bir kapıyla çivilenir ve o kapılara kendilerine saldırılır: üretim kodu bilerek bozulur, kapının kırmızı yandığı görülür. Mutasyon altında yeşil kalan bir kapı sayılmaz. 1233 otomatik test dört katmanı — Rust çekirdek, masaüstü istemci, tarayıcı katmanı, Android — birden tutuyor.

Kod tabanı dokuz yapılandırılmış iç kırmızı-takım turundan geçti; dışarıdan bağımsız bir denetim yapılmadı. Bir bulgunun sayılması için önce çürütülme denemesinden sağ çıkması gerekir: bir tur 53 adayın 43'ünü, bir diğeri 123'ün 100'ünü doğruladı; son iki tur bağımsız bir çürütme turuyla koştu ve 300 mutant gerçekten çalıştırıldı. Kapanan kod bulguları, yazılabildiği her yerde adını taşıyan bir regresyon testi taşır.

İki istemci aynı çekirdeği çağırır. Bir kural iki platformda da tutmak zorundaysa çekirdekte tek bir fonksiyon olarak yaşar ve testler iki istemcinin aynı şeyi yaptığını doğrular — telefon ile masaüstü sessizce ayrışamaz.

İLETİŞİM

Sistem, kriptografi ve Rust üzerine uzaktan sözleşmeli ve tam zamanlı iş alıyorum. callwhite kaynağı münhasır devir için mevcut.

Yılmaz Mert · GitHub · LinkedIn