Ad Nihilum 0.4.3 sürümü yayınlandı; bu, "oku ve yak" prensibine dayalı, minimalist, kendi sunucunuzda barındırılan, şifreli bir mesajlaşma hizmetidir.
Sunucu yalnızca sessiz bir depolama aygıtı görevi görür. Şifreleme ve şifre çözme işlemleri yalnızca istemci tarafında, tarayıcıda (AES-GCM kullanılarak) gerçekleşir.
Özellikler
- Yerel şifreleme ve şifre çözme işleminde sunucu anahtarı asla görmez;
- (1) Sunucunun bilemeyeceği, (2) iletilen bağlantıdan öğrenilemeyeceği ek bir parola şifreleme katmanı desteği;
- Proje, denetimi basitleştiren yaklaşık 2200 satır C dilinde sunucu kodu ve 600 satır JS dilinde istemci kodu içermektedir;
- Ad Nihilum yalnızca libmicrohttpd'ye bağımlıdır. QR kodları oluşturmak için QRCode.js'nin değiştirilmiş bir sürümü sağlanmıştır;
- Harici bir IP adresine ihtiyaç duymadan yerel bir hizmeti hızlı bir şekilde kurmaya yönelik talimatlar dahildir;
- Ad Nihilum'un çalışmaları şu alanlarda yoğunlaşıyor: AndroidTermux'ta derleme için ilgili komut dosyası ektedir;
- Tek iş parçacıklı ve senkron sunucu.
Değişiklikler
Büyük ölçekli yeniden tasarım
- Mesaj gönderme ve alma sayfaları ile bunlara karşılık gelen istemci kodları ayrı ayrı düzenlenmiştir.
- Genel olarak, tasarım Lorchan halkının istekleri dikkate alınarak büyük ölçüde değiştirildi ve düzenlendi.
- "Basit" ve yerel müşteriler:
- Müşteri sayfaları yerel olarak kaydedilebilir ve file:// adresinden kullanılabilir.
Tarayıcı politikaları
- XSS saldırılarıyla mücadele etmek için CSP uygulamaya konmuştur;
- Sunucu HSTS gönderiyor.
Diğer değişiklikler
- Projenin adı Epha-ots'tan değiştirildi;
- adnihilum.net alan adı satın alındı;
- TLS, Let's Encrypt kullanılarak sağlanmaktadır, bunu aklınızda bulundurmanızda fayda var (ücret gerektirmez);
- Dosyalarla çalışma basitleştirildi;
- şişman işaretçilere geçiş;
- Küçük hatalar düzeltildi;
- CMake ile derleme yaparken otomatik jsminify ve istemci dosyalarının oluşturulması.
Protokol özeti
Üç rastgele değer oluşturun: anahtar Kbaşlatma vektörü N ve tuz S. K — 256 bit, N — 96 bit, S — 128 bit.
çekilmek ID arasında K и S SHA-256 tabanlı HKDF kullanılarak.
Ek kimlik doğrulama verilerinden oluşan bir dize oluşturun. aad - Bu sadece şöyle bir dize: id=ID
Kullanıcı parola belirlemişse:
- ekran Pk şifreden ve S PBKDF2, SHA-256 ve 800000 yineleme kullanılarak;
- Her şey için aynı tuz kullanılır;
- Verileri AES-GCM kullanarak ve anahtarı kullanarak şifreleyin. PkIV/nonce N ve aktarmak aad.
Eğer parola varsa, zaten şifrelenmiş verilere iki baytlık bir etiket ekleyin; parola yoksa, orijinal verilere iki baytlık bir etiket ekleyin.
İlk bayt önemlidir: verinin parola ile şifrelenip şifrelenmediğini gösterir:
- 0x73 - veriler parola ile şifrelenmiştir;
- 0x13 - Veriler parola ile şifrelenmemiş.
İkinci bayt, 0x37 sabit değeridir.
Sonucu aynı iv = N ve aynı parametreleri kullanarak AES-GCM ile tekrar şifreleyin. aadBu, nihai şifreli metni verir. ct.
Baytları bir dize halinde birleştirme: blob = N .. S .. ct
Gönder damla sunucuya birlikte IDSunucu geri dönüş yapar. damla bu konuda ID ve değiştirilemez: istemci önce kontrol edecektir. ID ile N и K şifre çözmeden önce bile ve sonra - aracılığıyla aad.
Müşteri depoları K. K Sunucuya asla gönderilmez. Pk Ayrıca gönderilmez; parolayla ilgili her şey hafızadan silinir.
İstemci şu bağlantıyı oluşturur: origin/#ID/K
öyle ID и K — base64url formatındaki dizeler.
Alıcı bağlantıyı açtığında:
- Tarayıcı, # ile başlayan her şeyi yok sayar; buna location.hash denir;
- İstemci uygulaması sunucudan indirilir;
- Bence asıl sorun burada: Temelde yine "TLS'nin güvenlik açığı var" gerçeğiyle karşılaşıyoruz;
- Ancak, istemciyi çevrimdışı olarak saklamanıza hiçbir şey engel olmaz;
- İdeal olarak, ayrı ve bağımsız bir istemci olmalıdır.
İstemci tarafındaki JavaScript, location.hash'i kontrol eder ve eğer mevcutsa ID и KSunucudan veri indirir.
Ardından bunları kontrol eder, şifrelerini çözer ve gerekirse parolayı isteyip tekrar şifrelerini çözer.
Lisans
Proje GPLv3 lisansı altında dağıtılmaktadır.
Kaynak: linux.org.ru
