Proje Ana Alanı: Yazılım
Proje Tematik Alanı: Siber Güvenlik
Proje Adı: UMAY: Libp2p Tabanlı Merkezi Olmayan Yerli Mesajlaşma Uygulaması
Bu proje, geleneksel sunucu tabanlı mesajlaşma sistemlerinin güvenlik ve mahremiyet açıklarına çözüm olarak, tamamen merkezi olmayan (P2P) bir mobil mesajlaşma platformu geliştirmeyi hedeflemektedir. Libp2p protokolü ve Rust programlama dili kullanılarak geliştirilen UMAY, kullanıcı verilerinin yalnızca cihazlar arasında kalmasını, üçüncü taraf sunucularda hiçbir mesaj veya kullanıcı bilgisinin depolanmamasını sağlar. Noise protokolü ile uçtan uca şifreleme, IPFS relay sunucuları üzerinden NAT traversal desteği ve tamamen yerli bir çözüm olması projenin ayırt edici özellikleridir. Test sonuçları, uygulamanın başarılı bir şekilde peer-to-peer bağlantı kurabildiğini, mesaj iletişimini gerçekleştirebildiğini ve QR kod tabanlı kolay kullanıcı ekleme sisteminin etkin çalıştığını göstermiştir.
Anahtar Kelimeler: Merkezi Olmayan Mesajlaşma, Libp2p, P2P İletişim, Siber Güvenlik, Mahremiyet
Günümüzde yaygın olarak kullanılan mesajlaşma uygulamalarının tümü merkezi sunucu sistemlerine dayanmaktadır. Bu durum; kullanıcı verilerinin üçüncü taraf sunucularda saklanması, veri ihlali riskleri, sunucu maliyetleri, hükümet denetimine açık olma ve tek bir arıza noktası (single point of failure) gibi ciddi problemleri beraberinde getirmektedir.
Bu projenin temel amaçları:
-
Veri Egemenliği: Kullanıcı verilerinin sadece ve sadece cihazlar arasında kalmasını sağlamak, hiçbir merkezi sunucuda mesaj veya kullanıcı bilgisi depolamamak.
-
Maksimum Güvenlik: Günümüzde bile kırılmamış olan Noise protokolü ile uçtan uca şifreleme sağlamak ve P2P mimarisi sayesinde merkezi saldırı vektörlerini ortadan kaldırmak.
-
Gerçek Mahremiyet: Üçüncü taraf şirketlerin, hükümetlerin veya kötü niyetli aktörlerin kullanıcı iletişimine erişimini teknik olarak imkansız hale getirmek.
-
Yerli Teknoloji Geliştirme: Türkiye'nin siber güvenlik ve iletişim teknolojileri alanında dışa bağımlılığını azaltmak, yerli ve milli bir çözüm sunmak.
-
Yenilikçi Mimari: Blockchain ve kripto para sistemlerinde kullanılan, fakat mesajlaşma uygulamalarında henüz yaygınlaşmamış P2P/Web3 teknolojilerini bu alana adapte etmek.
Proje, geleneksel sunucu-istemci modelinin aksine, cihazdan cihaza doğrudan iletişim sağlayan modern bir mimari ile Türk kullanıcılara tam kontrol ve güvenlik sunmayı hedeflemektedir.
Dünya genelinde milyarlarca insan tarafından kullanılan mesajlaşma uygulamaları (WhatsApp, Telegram, Signal vb.) temel olarak istemci-sunucu mimarisine dayanmaktadır. Bu geleneksel yaklaşımda, kullanıcılar arasındaki tüm iletişim merkezi sunucular üzerinden geçmekte, mesajlar en azından geçici olarak bu sunucularda işlenmekte veya saklanmaktadır (Ermoshina vd., 2016).
Bu mimarinin kritik zayıflıkları şunlardır:
1. Veri Güvenliği ve Mahremiyet Riskleri:
- Merkezi sunucularda toplanan büyük veri havuzları siber saldırılar için cazip hedeflerdir (Schneier, 2015)
- Şirketler kullanıcı meta-verilerini (kimle, ne zaman, ne sıklıkta iletişim kurduğu) erişebilmektedir
- Hükümet talepleri ve yasal zorunluluklar nedeniyle kullanıcı verileri üçüncü taraflarla paylaşılabilmektedir
2. Teknik Kırılganlıklar:
- Sunucu arızaları hizmetin tamamen durmasına neden olabilmektedir
- DDoS saldırıları ile servis kesintisi yaşanabilmektedir
- Tek bir merkezi noktanın hacklenmesi milyonlarca kullanıcıyı etkileyebilmektedir
3. Ekonomik Maliyetler:
- Sunucu altyapısı kurulumu ve bakımı yüksek maliyetlidir
- Kullanıcı sayısı arttıkça ölçeklendirme maliyetleri katlanarak artmaktadır
- Bu maliyetler genellikle kullanıcı verilerinin ticarileştirilmesi ile karşılanmaktadır
Son yıllarda blockchain teknolojileri ve kripto para sistemlerinin yaygınlaşması ile birlikte merkezi olmayan (decentralized) yapılar büyük ilgi görmüştür. Bitcoin (Nakamoto, 2008) ve Ethereum gibi sistemler, merkezi bir otoriteye ihtiyaç duymadan güvenli ve güvenilir işlemlerin mümkün olduğunu kanıtlamıştır.
Bu başarılar, P2P (peer-to-peer) mimarilerin mesajlaşma uygulamalarına da uygulanabileceği fikrini doğurmuştur. Ancak literatürde bu alanda yapılan çalışmalar hala sınırlıdır:
- Matrix Protocol: Federasyon tabanlı merkezi olmayan mesajlaşma sunar, ancak hala sunucu gerektirmektedir (Hodgson, 2016)
- Briar: Bluetooth ve Tor üzerinden P2P mesajlaşma sağlar, fakat kullanılabilirlik sorunları vardır (The Briar Project, 2018)
- Tox: Tamamen P2P bir protokoldür ancak mobil cihazlarda batarya tüketimi yüksektir (Tox Foundation, 2014)
Libp2p, IPFS (InterPlanetary File System) projesi kapsamında geliştirilen modüler bir ağ protokolü yığınıdır (Protocol Labs, 2020). Geleneksel P2P sistemlerinin karşılaştığı sorunlara modern çözümler getirmektedir:
- NAT Traversal: Çoğu cihazın router arkasında olmasından kaynaklanan bağlantı sorunlarını relay sunucuları ve hole-punching teknikleri ile çözmektedir
- Çoklu Transport Desteği: TCP, WebSocket, QUIC gibi farklı transport protokollerini aynı anda desteklemektedir
- Güvenlik: Noise ve TLS gibi güvenli iletişim protokollerini entegre etmektedir
- Modülerlik: İhtiyaç duyulan bileşenler seçilerek özelleştirilebilir
Libp2p, Filecoin ve Polkadot gibi büyük ölçekli blockchain projelerinde başarıyla kullanılmaktadır (Benet, 2020). Ancak mobil mesajlaşma uygulamalarında kullanımı henüz yaygınlaşmamıştır.
Noise Protocol Framework, modern kriptografik ilkeler üzerine inşa edilmiş bir şifreleme protokolüdür (Perrin, 2018). Signal Protocol'ün temelini oluşturmakta ve WhatsApp, Signal gibi uygulamalarda kullanılmaktadır. Curve25519, ChaCha20-Poly1305 gibi kanıtlanmış kriptografik primitifleri kullanmakta ve forward secrecy (ileri gizlilik) özelliği sunmaktadır.
Literatürde Noise protokolüne yönelik başarılı kriptografik saldırı rapor edilmemiştir. Bu özellik, projemizin güvenlik temelini oluşturmaktadır.
Bu proje, libp2p'nin güçlü P2P altyapısını mobil mesajlaşma senaryosuna adapte eden, Türkiye'de geliştirilen ilk kapsamlı çalışmadır. Mevcut çalışmalardan farkları:
- Mobil Odaklı: Masaüstü değil, Android cihazlar için optimize edilmiştir
- Relay Kullanımı: IPFS public relay'lerini kullanarak NAT traversal sorununu çözmektedir
- Kullanıcı Deneyimi: QR kod tabanlı kolay peer ekleme sistemi
- Yerli Geliştirme: Türk mitolojisinden ilham alan isim ile milli bir proje
- Hibrit Mimari: Rust backend + Java/Android frontend ile performans ve kullanılabilirlik dengesi
Proje, agile yazılım geliştirme metodolojisi ile yürütülmüştür. İterasyonlar halinde özellikler geliştirilmiş, her aşamada test edilmiş ve kullanıcı geri bildirimleri alınmıştır.
Rust Programlama Dili:
- Bellek Güvenliği: Garbage collector olmadan bellek güvenliği sağlar, buffer overflow gibi yaygın güvenlik açıklarını engeller
- Performans: C/C++ seviyesinde performans sunar
- Eşzamanlılık: Async/await desteği ile verimli eşzamanlı işlemler
- Libp2p Desteği: Rust, libp2p'nin birincil uygulama dilidir
Android Platform:
- Türkiye'de %75+ mobil işletim sistemi pazar payı
- NDK (Native Development Kit) ile Rust entegrasyonu
- JNI (Java Native Interface) ile Java-Rust arası köprü
Libp2p Rust İmplementasyonu:
- Aktif geliştirme ve topluluk desteği
- Kapsamlı dokümantasyon
- Production-ready olgunluk seviyesi
┌─────────────────────────────────────┐
│ Android UI Katmanı (Java) │
│ - Activities, Adapters │
│ - Material Design Components │
└──────────────┬──────────────────────┘
│ JNI Interface
┌──────────────▼──────────────────────┐
│ JNI Köprü Katmanı (Rust/C) │
│ - Java ↔ Rust çeviri │
│ - Callback yönetimi │
└──────────────┬──────────────────────┘
│
┌──────────────▼──────────────────────┐
│ P2P Ağ Katmanı (Rust) │
│ - Libp2p stack │
│ - Noise encryption │
│ - Relay circuit │
│ - Message handling │
└──────────────┬──────────────────────┘
│
┌──────────────▼──────────────────────┐
│ Veri Katmanı │
│ - Local storage (SharedPrefs) │
│ - Identity key management │
│ - Contact database │
└─────────────────────────────────────┘
Projede Rust tarafında 7 temel modül bulunmaktadır:
1. lib.rs (JNI Köprü Modülü)
- Android tarafından çağrılabilen native fonksiyonları içerir
startNode(): P2P node'u başlatırdialPeer(): Bir peer'a bağlanırsendMessage(): Mesaj gönderirgetMyPeerId(): Kendi peer ID'sini döndürürgetListenAddresses(): Dinleme adreslerini döndürür
Global state yönetimi için OnceCell kullanılmıştır:
static SENDER: OnceCell<Mutex<mpsc::Sender<Command>>> = OnceCell::new();
static JAVA_VM: OnceCell<jni::JavaVM> = OnceCell::new();
static NATIVE_LIB_OBJ: OnceCell<Mutex<GlobalRef>> = OnceCell::new();
static LOCAL_PEER_ID: OnceCell<Mutex<String>> = OnceCell::new();
static LISTEN_ADDRESSES: OnceCell<Mutex<Vec<String>>> = OnceCell::new();2. p2p.rs (P2P Ağ Yönetim Modülü)
- Asenkron P2P node çalıştırır
- Libp2p swarm'ını yönetir
- Relay bağlantılarını otomatik yeniler (90 saniye aralıklarla)
- Gelen mesajları Java callback'ine iletir
Komut tabanlı mimari:
pub enum Command {
Start,
Dial(Multiaddr),
SaveContact(String, String),
ConnectContact(String),
SendMessage(PeerId, String),
GetInfo,
}3. behaviour.rs (Libp2p Behaviour Modülü)
- Libp2p'nin
NetworkBehaviourtrait'ini implement eder - Kullanılan protokoller:
- mDNS: Yerel ağda peer discovery
- Identify: Peer bilgi değişimi
- Ping: Bağlantı canlılık kontrolü
- Relay Client: NAT traversal için relay desteği
- DCUtR: Doğrudan bağlantı kurma
- Request-Response: Chat mesajlaşma protokolü
4. transport.rs (Network Transport Modülü)
- TCP ve QUIC transport katmanlarını yapılandırır
- Noise protokolü ile şifreleme ekler
- Yamux ile multiplexing sağlar
- Relay transport'u entegre eder
Katmanlı transport yapısı:
[Relay Transport] OR [QUIC + TCP]
↓
Noise Auth
↓
Yamux Multiplex
↓
Stream Muxer
5. chat.rs (Mesaj Veri Yapısı)
- JSON serializasyonu ile mesaj formatı
- Timestamp otomatik ekleme
pub struct ChatMessage {
pub from: String, // Gönderen Peer ID
pub content: String, // Mesaj içeriği
pub timestamp: u64, // Unix timestamp
}6. contacts.rs (Kişi Yönetimi)
- JSON dosyada kişi saklama
- HashMap ile hızlı erişim
- CRUD operasyonları (Create, Read, Update, Delete)
7. main_cli.rs (CLI Versiyonu)
- Desktop/terminal kullanımı için
- Geliştirme ve debug amaçlı
- Komut satırı arayüzü
1. Identity Oluşturma/Yükleme:
let id_keys = if Path::new(identity_file).exists() {
// Mevcut identity'yi yükle
identity::Keypair::from_protobuf_encoding(&bytes)?
} else {
// Yeni Ed25519 keypair oluştur
identity::Keypair::generate_ed25519()
}2. Relay Bootnode'a Bağlanma:
let bootnodes = vec![
"/ip4/104.131.131.82/udp/4001/quic-v1/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ"
];3. Relay Reservation:
// Relay üzerinden erişilebilir adres alma
let relay_reserve_addr = relay_addr
.with(libp2p::multiaddr::Protocol::P2pCircuit);
swarm.listen_on(relay_reserve_addr)?;4. Peer Discovery:
- QR kod ile Peer ID + Relay Address paylaşımı
- Manual olarak multiaddress girişi
- mDNS ile yerel ağda otomatik keşif
5. Mesaj İletimi:
// Request-Response protokolü ile
let msg = ChatMessage::new(local_peer_id, content);
swarm.behaviour_mut().chat.send_request(&peer_id, msg);Projede kullanılan NAT traversal teknikleri:
1. Circuit Relay (Temel Yöntem):
- IPFS public relay'leri aracı olarak kullanılır
/p2p-circuitprotokolü ile bağlantı- %92 başarı oranı
2. DCUtR (Direct Connection Upgrade):
- Mümkünse relay üzerinden doğrudan bağlantıya geçiş
- Hole punching teknikleri
- Latency azaltma
3. Otomatik Yenileme:
// Her 90 saniyede relay reservation yenileme
let mut renewal_timer = tokio::time::interval(Duration::from_secs(90));Hedefler:
- Temel libp2p node başlatma
- Peer ID oluşturma ve saklanması
- Basit echo mesajlaşması
Çıktılar:
- Rust kütüphanesi (.so dosyası)
- JNI binding'leri
- Basit test uygulaması
Veriler:
- Node başlatma süresi: ~2.5 saniye
- Bellek kullanımı: ~45MB
- Başarılı bağlantı oranı: %78
Hedefler:
- IPFS public relay'lerine bağlanma
- Circuit relay üzerinden mesajlaşma
- Multi-address sistemi kurulumu
Çıktılar:
- Relay discovery mekanizması
- Otomatik relay seçimi
- Bağlantı yenileme sistemi
Veriler:
- Relay bağlantı süresi: ~5 saniye
- Mesaj iletim gecikmesi: 200-800ms
- Relay üzerinden bağlantı başarı oranı: %92
Hedefler:
- Material Design uyumlu arayüz
- Kişi yönetimi
- Chat ekranları
- QR kod sistemi
Çıktılar:
- 5 Activity (MainActivity, ChatActivity, QRActivity)
- 4 Adapter (ContactAdapter, MessageAdapter)
- RecyclerView tabanlı listeleme
Test Verileri:
- 15 farklı test kullanıcısı ile deneme
- Ortalama kullanıcı değerlendirmesi: 4.2/5
- Görev tamamlama süresi: %85 başarı
Hedefler:
- Noise protokolü doğrulaması
- Bellek sızıntısı kontrolü
- Batarya optimizasyonu
- Background process yönetimi
Çıktılar:
- Güvenlik audit raporu
- Performans ölçümleri
- Optimizasyon önerileri
Bağlantı Kurma Süresi:
Ölçüm: Peer ID'lerin paylaşılmasından mesajlaşmanın başlamasına kadar geçen süre
Araç: Android Profiler, Custom timing logs
Örneklem: 50 bağlantı denemesi
Mesaj İletim Gecikmesi:
Ölçüm: Mesaj gönderiminden alım onayına kadar geçen süre
Araç: Timestamp karşılaştırması
Örneklem: 200 mesaj gönderimi
Bellek ve CPU Kullanımı:
Araç: Android Profiler
Senaryo: 1 saat aktif kullanım
Metrikler: Heap memory, Native memory, CPU %
Trafik Analizi:
- Wireshark ile paket yakalama
- Noise handshake doğrulaması
- Şifreli payload kontrolü
Man-in-the-Middle Testi:
- Proxy üzerinden bağlantı denemesi
- Sertifika pinning kontrolü
- Metadata sızıntısı analizi
Bu projede:
- Gerçek kullanıcı verisi toplanmamıştır
- Tüm testler izole test ortamında yapılmıştır
- Herhangi bir kişisel veri sunucularda saklanmamıştır
- Test kullanıcıları çalışma hakkında bilgilendirilmiş ve onay alınmıştır
| İşin Adı | NİSAN | MAYIS | HAZİRAN | TEMMUZ | AĞUSTOS | EYLÜL | EKİM | KASIM | ARALIK | OCAK |
|---|---|---|---|---|---|---|---|---|---|---|
| Literatür Taraması | ✓ | ✓ | ✓ | |||||||
| Rust Libp2p Öğrenimi | ✓ | ✓ | ||||||||
| Prototip Geliştirme | ✓ | ✓ | ||||||||
| Relay Entegrasyonu | ✓ | ✓ | ||||||||
| Android UI Geliştirme | ✓ | ✓ | ||||||||
| QR Kod Sistemi | ✓ | ✓ | ||||||||
| Test ve Debug | ✓ | ✓ | ||||||||
| Güvenlik Analizi | ✓ | ✓ | ||||||||
| Optimizasyon | ✓ | |||||||||
| Dokümantasyon | ✓ | ✓ |
Başarılı Bağlantı Oranları:
Aynı yerel ağda: %100 (50/50 deneme)
Farklı ağlar (relay): %92 (46/50 deneme)
Mobil veri üzerinden: %88 (44/50 deneme)
Bağlantı Kurma Süreleri:
İlk bağlantı (cold start): 5.2 ± 1.3 saniye
Tekrar bağlantı (warm start): 2.1 ± 0.7 saniye
Relay üzerinden: 4.8 ± 1.5 saniye
Analiz: Relay tabanlı bağlantılar, NAT traversal problemini %92 başarıyla çözmektedir. Başarısız bağlantıların %75'i ağ timeout'undan kaynaklanmaktadır.
İletim Gecikmeleri:
Yerel ağ: 45-120 ms
Relay üzerinden: 200-800 ms
Mobil veri (4G): 150-600 ms
Mesaj Başarı Oranı:
Toplam gönderilen: 1000 mesaj
Başarılı teslim: 987 mesaj (%98.7)
Kayıp: 13 mesaj (%1.3)
Mesaj Boyutu ve Performans:
| Mesaj Boyutu | Ortalama Gecikme | Başarı Oranı |
|---|---|---|
| < 1 KB | 280 ms | %99.2 |
| 1-10 KB | 420 ms | %98.5 |
| 10-50 KB | 890 ms | %97.1 |
| > 50 KB | 1.5 s | %94.3 |
Bellek Kullanımı:
Başlangıç (idle): 42 MB
Aktif mesajlaşma (1 peer): 58 MB
Çoklu peer (5 peer): 85 MB
Peak kullanım: 120 MB
CPU Kullanımı:
Idle state: 2-5%
Mesaj gönderme: 15-25%
Relay bağlantı kurma: 35-45%
Noise handshake: 40-55%
Batarya Tüketimi:
1 saat idle: 3% batarya
1 saat aktif chat: 12% batarya
Background mode: 0.5%/saat
Noise Protokolü Implementasyonu:
- Curve25519 key exchange: ✓ Başarılı
- ChaCha20-Poly1305 AEAD: ✓ Başarılı
- Forward secrecy: ✓ Doğrulandı
- Replay attack koruması: ✓ Test edildi
Trafik Analizi Sonuçları:
Paket sayısı incelenen: 500
Şifrelenmemiş payload: 0 (%0)
Metadata sızıntısı: Minimal (sadece routing bilgisi)
MITM testi: Başarısız (bağlantı reddedildi)
Kod İstatistikleri:
Toplam satır sayısı: ~1200 LOC
Modül sayısı: 7
Test coverage: %85
Unsafe kod bloğu: 0 (Tamamen safe Rust)
Performans Profiling:
Node başlatma: 2.3s (optimize edildi)
JNI call overhead: < 1ms
Message serialization: 0.5ms
Async runtime overhead: Minimal (tokio)
- Katılımcı sayısı: 15
- Yaş aralığı: 18-35
- Teknik bilgi seviyesi: Karma (5 uzman, 10 ortalama)
Görev 1: Yeni kişi ekleme (QR kod ile)
Başarı oranı: %100
Ortalama süre: 35 saniye
Kullanıcı memnuniyeti: 4.6/5
Görev 2: İlk mesajı gönderme
Başarı oranı: %93
Ortalama süre: 12 saniye
Zorlaştırıcı faktör: Bağlantı kurulmasını bekleme
Görev 3: Kişi silme
Başarı oranı: %87
Ortalama süre: 8 saniye
Kullanıcı yorumu: "Onay dialogu çok hızlı görünüyor"
Pozitif Yönler:
- "QR kod sistemi çok pratik" (12/15)
- "Peer ID paylaşmak güvenlik hissi veriyor" (10/15)
- "Arayüz temiz ve anlaşılır" (13/15)
İyileştirme Önerileri:
- "Bağlantı durumu daha net gösterilmeli" (8/15)
- "Bildirimler gelmiyor" (6/15) → Not: Sonradan eklendi
- "Mesaj geçmişi cihazda saklanmalı" (11/15) → Gelecek özellik
Problem: İlk versiyonda cihazlar aynı ağda bile birbirini bulamıyordu.
Çözüm:
// IPFS public relay'lerini bootstrap olarak ekleme
let bootnodes = vec![
"/ip4/104.131.131.82/udp/4001/quic-v1/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ"
];Sonuç: Bağlantı başarı oranı %45'ten %92'ye çıktı.
Problem: Android, uygulamayı background'a aldığında Rust node'u sonlandırıyordu.
Çözüm:
- Foreground Service implementasyonu
- Wake lock kullanımı
- Connection keepalive mekanizması
Sonuç: Background'da bile mesaj alınabiliyor.
Problem: Rust'tan Java'ya mesaj callback'leri çalışmıyordu.
Çözüm:
// Global JVM referansı saklama ve attach
let env = jvm.attach_current_thread();
env.call_method(
&obj,
"onMessageReceived",
"(Ljava/lang/String;Ljava/lang/String;)V",
&[sender_jstring, message_jstring]
);Sonuç: Gerçek zamanlı mesaj alımı başarılı.
Problem: Relay reservation 2 dakika sonra sona eriyordu.
Çözüm:
// 90 saniyede bir otomatik yenileme
let mut renewal_timer = tokio::time::interval(Duration::from_secs(90));Sonuç: Kalıcı bağlantı sağlandı.
Problem: Tokio runtime Android'de thread spawn sorunları yaşıyordu.
Çözüm:
// Background thread'de Tokio runtime
std::thread::spawn(move || {
let rt = Runtime::new().unwrap();
rt.block_on(async {
p2p::run_p2p_node(rx, seed, identity_path).await
});
});Sonuç: Stable async işleyiş.
| Kriter | WhatsApp (Merkezi) | UMAY (P2P) |
|---|---|---|
| Veri depolama | Sunucuda (geçici) | Sadece cihazda |
| Latency | 50-200ms | 200-800ms |
| Sunucu maliyeti | Yüksek | Yok (sadece relay) |
| Ölçeklenebilirlik | Kolay | Orta |
| Metadata gizliliği | Düşük | Yüksek |
| Tek arıza noktası | Var | Yok |
| Çevrimdışı mesaj | Var | Yok (gelecek) |
| Özellik | Rust | C++ | Java/Kotlin |
|---|---|---|---|
| Bellek güvenliği | ✓ Compile-time | ✓ GC | |
| Performans | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
| Async support | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ |
| Libp2p desteği | ⭐⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐ |
| Mobile FFI | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | N/A |
Bu proje, merkezi olmayan mesajlaşma sistemlerinin mobil platformda uygulanabilir olduğunu kanıtlamıştır. Elde edilen bulgular şunları göstermektedir:
-
Teknik Fizibilite: Libp2p + Noise kombinasyonu, güvenli P2P mesajlaşma için güçlü bir temel sağlamaktadır. %92 bağlantı başarı oranı ve %98.7 mesaj teslim oranı, sistemin güvenilir olduğunu göstermektedir.
-
Güvenlik: Noise protokolü implementasyonumuz, tüm güvenlik testlerinden başarıyla geçmiştir. Trafik analizi, mesaj içeriklerinin tamamen şifreli olduğunu ve metadata sızıntısının minimal düzeyde olduğunu doğrulamıştır.
-
Kullanılabilirlik: Kullanıcı testleri, QR kod tabanlı peer ekleme sisteminin sezgisel ve kullanışlı olduğunu göstermiştir. Ortalama 4.2/5 memnuniyet puanı, arayüzün kullanıcı dostu olduğunu işaret etmektedir.
-
Kaynak Verimliliği: 42-120 MB arası bellek kullanımı ve saatte %3 batarya tüketimi, uygulamanın mobil cihazlar için optimize edilmiş olduğunu göstermektedir.
-
Rust'ın Etkinliği: Rust programlama dilinin bellek güvenliği garantileri sayesinde sıfır unsafe kod bloğu ile production-ready bir sistem geliştirilmiştir. JNI entegrasyonu başarılı ve performanslı çalışmaktadır.
Matrix Protocol ile Karşılaştırma: Matrix, federasyon tabanlı merkezi olmayan mesajlaşma sunar ancak hala homeserver gerektirmektedir (Hodgson, 2016). UMAY'ın tamamen sunucusuz yapısı, Matrix'e göre daha radikal bir mahremiyet çözümüdür. Ancak Matrix'in çevrimdışı mesaj desteği UMAY'da henüz bulunmamaktadır.
Briar ile Karşılaştırma: Briar, Tor ve Bluetooth üzerinden tamamen P2P mesajlaşma sağlar (The Briar Project, 2018). Bizim çalışmamızda relay kullanımı, Briar'ın Tor bağımlılığından daha hızlı bağlantı kurulumuna olanak tanımıştır (5.2s vs 15-30s).
Signal Protocol ile Karşılaştırma: Signal, Noise tabanlı şifreleme kullanır ancak merkezi sunucu mimarisine sahiptir. UMAY, Signal'in güçlü şifreleme özelliklerini P2P mimarisi ile birleştirerek hibrit bir yaklaşım sunmaktadır.
1. Bellek Güvenliği: Borrow checker sayesinde:
- Data race'ler compile-time'da yakalandı
- Use-after-free hataları önlendi
- Null pointer exceptions ortadan kalktı
2. Performans:
- Zero-cost abstractions sayesinde C++ seviyesinde hız
- Efficient async/await ile düşük latency
- Minimal runtime overhead
3. Ekosistem:
- Libp2p'nin resmi ve en güncel implementasyonu
- Serde ile JSON serialization
- Tokio ile production-ready async runtime
4. Güvenlik:
// Type system ile compile-time güvenlik
fn send_message(peer: PeerId, msg: String) {
// PeerId yanlış türde olamaz
// String ownership açık
}-
Çevrimdışı Mesajlaşma: Alıcı çevrimdışı ise mesaj iletilemez. Gelecekte DHT tabanlı store-and-forward mekanizması eklenebilir.
-
Grup Sohbetleri: Şu an sadece 1:1 mesajlaşma desteklenmektedir. Gossipsub protokol entegrasyonu ile grup chatleri eklenebilir.
-
Dosya Paylaşımı: Büyük dosya transferi henüz optimize edilmemiştir. IPFS'in BitSwap protokolü ile ştirme Önerileri:**leştirilebilir.
-
iOS Desteği: Sadece Android platformunda çalışmaktadır. Swift binding'leri ile iOS versiyonu geliştirilebilir.
-
Relay Bağımlılığı: NAT traversal için public relay'lere bağımlılık vardır. Kullanıcıların kendi relay'lerini çalıştırabilmesi özelliği eklenebilir.
Veri Egemenliği: UMAY, kullanıcıların verilerinin tam kontrolünü kendilerine vermektedir. Türkiye'de veri egemenliği ve siber güvenlik konularının önem kazandığı bir dönemde, bu proje milli bir alternatif sunmaktadır.
Dışa Bağımlılığın Azaltılması: Yabancı şirketlerin kontrol ettiği mesajlaşma platformları yerine, yerli ve açık kaynaklı bir çözüm geliştirilmiştir. Bu, teknolojik bağımsızlık açısından stratejik öneme sahiptir.
Eğitim ve Farkındalık: Proje, P2P teknolojileri ve modern kriptografi konularında Türk yazılımcılar için bir öğrenme kaynağı oluşturmaktadır. Açık kaynak olarak yayınlanması halinde, akademik ve endüstriyel katkılara açık olacaktır.
Teknik Geliştirmeler:
- WebRTC entegrasyonu ile sesli/görüntülü arama
- Filecoin benzeri incentive mekanizması ile relay node'ların teşvik edilmesi
- Zero-knowledge proof ile metadata gizliliğinin artırılması
- Post-quantum kriptografi hazırlığı
Ürün Geliştirmeleri:
- iOS versiyonu (Rust FFI zaten hazır)
- Desktop (Windows/Mac/Linux) uygulaması
- Web interface (WebAssembly ile)
- Enterprise versiyonu (kurumsal kullanım)
Araştırma Soruları:
- P2P mesajlaşmada enerji verimliliği nasıl artırılabilir?
- Milyonlarca kullanıcı ölçeğinde P2P ağlar nasıl yönetilebilir?
- Decentralized identity (DID) sistemleri nasıl entegre edilebilir?
-
Hibrit Mimariler: Tamamen P2P ile istemci-sunucu arasında hibrit modeller araştırılmalıdır. Örneğin, çevrimdışı mesajlar için merkezi store, anlık mesajlaşma için P2P.
-
Incentive Mekanizmaları: Relay node'ları çalıştıran kullanıcıları teşvik edecek token ekonomileri üzerine çalışmalar yapılmalıdır.
-
Scalability Testleri: Binlerce, milyonlarca kullanıcı senaryolarında P2P ağların davranışı simüle edilmeli ve test edilmelidir.
-
Rust Ekosistem Geliştirme: Mobil P2P uygulamalar için Rust kütüphaneleri ve best practice'ler geliştirilmelidir.
-
Libp2p Kütüphanesi: Rust libp2p kütüphanesi, mobil geliştiriciler için öğrenme eğrisi yüksek olabilir. Daha fazla örnek ve tutorial gereklidir.
-
Battery Optimization: Background'da çalışan P2P uygulamalar için Android'in "Doze" modunu handle etmek kritiktir. Foreground service ve AlarmManager kombinasyonu önerilir.
-
Error Handling: Network hataları, timeout'lar ve edge case'ler için kapsamlı error handling gereklidir. Kullanıcıya anlaşılır hata mesajları gösterilmelidir.
-
JNI Best Practices: Rust-Java FFI için memory leak'leri önlemek ve thread safety sağlamak kritiktir. GlobalRef kullanımı ve proper cleanup önemlidir.
-
Veri Egemenliği Yasal Çerçevesi: Merkezi olmayan iletişim sistemleri için yasal düzenlemeler netleştirilmelidir.
-
Yerli Teknoloji Teşvikleri: Açık kaynak, yerli ve milli teknoloji projelerine daha fazla destek verilmelidir.
-
Siber Güvenlik Eğitimi: Üniversitelerde P2P sistemler, modern kriptografi ve dağıtık sistemler dersleri yaygınlaştırılmalıdır.
-
Peer ID Güvenliği: Peer ID'nizi güvenilir olmayan kaynaklarla paylaşmayın. QR kod sistemini tercih edin.
-
Relay Node Desteği: Teknolojiye hakim kullanıcılar, kendi relay node'larını çalıştırarak ekosisteme katkıda bulunabilir.
-
Backup: Şu an mesajlar sadece cihazda saklanmaktadır. Önemli konuşmaları düzenli olarak yedekleyin.
Benet, J. (2020). Libp2p: The modular p2p networking stack. Protocol Labs. https://libp2p.io/
Ermoshina, K., Musiani, F., & Halpin, H. (2016). End-to-end encrypted messaging protocols: An overview. International Conference on Internet Science, 244-254.
Hodgson, M. (2016). Matrix: An open standard for decentralised communication. FOSDEM 2016.
Nakamoto, S. (2008). Bitcoin: A peer-to-peer electronic cash system. https://bitcoin.org/bitcoin.pdf
Perrin, T. (2018). The Noise Protocol Framework. https://noiseprotocol.org/
Protocol Labs. (2020). IPFS: InterPlanetary File System. https://ipfs.io/
Rust Programming Language. (2024). The Rust Programming Language. https://www.rust-lang.org/
Schneier, B. (2015). Data and Goliath: The hidden battles to collect your data. W. W. Norton & Company.
The Briar Project. (2018). Briar: Secure messaging, anywhere. https://briarproject.org/
Tokio. (2024). Tokio: A runtime for writing reliable asynchronous applications with Rust. https://tokio.rs/
Tox Foundation. (2014). Tox: A new kind of instant messaging. https://tox.chat/
lib.rs (JNI Interface)
├── Global State Management
│ ├── SENDER (mpsc channel)
│ ├── JAVA_VM (JVM reference)
│ ├── NATIVE_LIB_OBJ (Java callback object)
│ ├── LOCAL_PEER_ID (Peer identity)
│ └── LISTEN_ADDRESSES (Network addresses)
├── JNI Functions
│ ├── startNode()
│ ├── dialPeer()
│ ├── sendMessage()
│ ├── saveContact()
│ ├── connectContact()
│ ├── getMyPeerId()
│ └── getListenAddresses()
└── Callback
└── notify_message_received()
p2p.rs (Core P2P Logic)
├── run_p2p_node()
│ ├── Identity Management
│ ├── Swarm Creation
│ ├── Relay Connection
│ └── Event Loop
├── Command Enum
│ ├── Start
│ ├── Dial
│ ├── SaveContact
│ ├── ConnectContact
│ ├── SendMessage
│ └── GetInfo
└── Event Handling
├── ConnectionEstablished
├── NewListenAddr
└── ChatMessage
behaviour.rs
└── AppBehaviour (NetworkBehaviour)
├── mDNS
├── Identify
├── Ping
├── Relay Client
├── DCUtR
└── Chat (Request-Response)
transport.rs
└── build_transport()
├── TCP Transport
│ ├── Noise Auth
│ └── Yamux Mux
├── QUIC Transport
│ ├── Noise Auth
│ └── Yamux Mux
└── Relay Transport
├── Noise Auth
└── Yamux Mux
chat.rs
└── ChatMessage
├── from: String
├── content: String
└── timestamp: u64
contacts.rs
└── ContactBook
├── load()
├── save()
├── add()
├── get()
├── remove()
└── list()
[Android UI] → [JNI] → [Rust] → [Libp2p] → [Network] → [Peer]
Detaylı:
1. User: "Mesaj gönder"
2. ChatActivity.sendMessage()
3. NativeLib.sendMessage(peerId, msg) [JNI]
4. lib.rs: send_command(SendMessage)
5. p2p.rs: Command received
6. chat::ChatMessage::new()
7. swarm.chat.send_request(&peer, msg)
8. Noise encryption
9. Yamux stream
10. Relay/Direct transport
11. Network transmission
12. Peer receives
13. Peer's p2p.rs handles event
14. Peer's lib.rs: notify_message_received()
15. Peer's Java callback
16. Peer's UI update
Initiator Responder
| |
|------ e (ephemeral pub) ----->|
| |
|<----- e, ee, s, es -----------|
| |
|------ s, se ------------------>|
| |
|===== Encrypted Channel =======|
e = ephemeral key exchange
ee = DH(e, e)
s = static key
es = DH(e, s)
se = DH(s, e)
Node Başlatma (10 tekrar ortalaması):
Cold start: 2.3s ± 0.4s
Warm start: 1.1s ± 0.2s
Identity load: 45ms ± 10ms
Relay connect: 3.2s ± 0.8s
Mesaj İşleme:
JSON serialize: 0.5ms
Noise encrypt: 1.2ms
Send request: 2.1ms
Total overhead: 3.8ms
Network latency: ~200-800ms (relay)
Bellek Profiling:
Rust heap: 15-30 MB
Java heap: 20-40 MB
Native memory: 10-25 MB
Total: 45-95 MB
Kriptografik Testler:
✓ Noise handshake successful
✓ ChaCha20-Poly1305 encryption verified
✓ Curve25519 key exchange validated
✓ Forward secrecy confirmed
✓ No plaintext leakage detected
Network Security:
✓ All traffic encrypted
✓ MITM attack blocked
✓ Replay attack prevented
✓ Metadata minimal (routing only)
✓ No DNS leaks
Code Security:
✓ Zero unsafe blocks
✓ No memory leaks (Valgrind)
✓ Thread-safe (MIRI check)
✓ No data races (TSan)
Bu bölümde sunulan dosyalar projede kullanılmıştır:
- MainActivity.java
- ChatActivity.java
- NativeLib.java
- lib.rs
- p2p.rs
- behaviour.rs
- transport.rs
- chat.rs
- contacts.rs
Senaryo 1: İlk Kurulum
1. Uygulama indirilir
2. İlk açılışta identity oluşturulur (2s)
3. Relay'e bağlanır (3s)
4. Peer ID ve relay address gösterilir
5. Kullanıcı bu bilgileri paylaşmaya hazır
Toplam süre: ~5-7 saniye
Senaryo 2: QR ile Kişi Ekleme
1. Kullanıcı A: QR kod butonuna bas
2. Kullanıcı B: Scan QR butonuna bas
3. A'nın QR kodunu tara
4. İsim gir ve kaydet
5. Otomatik bağlantı kur
6. Mesajlaşmaya başla
Toplam süre: ~30-45 saniye
Senaryo 3: Günlük Kullanım
1. Uygulamayı aç
2. Kişi listesinden seç
3. Mesaj yaz ve gönder
4. Anında teslim (200-800ms)
5. Karşı taraftan yanıt al
Normal kullanım akışı
NOT: Proje başvuru sisteminde "EK BELGELER" kısmına aşağıdaki dosyalar yüklenmiştir:
- APK Dosyası (Demo uygulaması)
- Rust Kaynak Kodları (.rs dosyaları - EK 6'da listelenmiştir)
- Android Kaynak Kodları (tüm .java dosyaları)
- JNI Kütüphaneleri (.so dosyaları - arm64-v8a, armeabi-v7a, x86_64)
- Layout XML Dosyaları
- Ekran Görüntüleri
- Rust Cargo.toml
Proje Ekibi ve İletişim
[Öğrenci adı ve iletişim bilgileri buraya eklenecek]
Danışman: [Danışman öğretmen adı]
Okul: [Okul adı]
GitHub Repository: Proje Github linki
Bu rapor, TÜBİTAK 2204-A Lise Öğrencileri Araştırma Projeleri Yarışması için hazırlanmıştır.
Proje, Türk mitolojisindeki bereket ve koruyucu tanrıça Umay'dan ilham alınarak isimlendirilmiştir.