Açık Kaynak · Tamamen Şifreli · Bulut Yok

PlainApp Güvenlik Detaylı İncelemesi

PlainApp verilerinizi yerel Wi-Fi üzerinde nasıl koruyor — açık kaynak koddan kanıtlarla.

Android 9.0+ · Google Play · F-Droid · GitHub

İndir

Yerel Ağ Güvenliği Neden Önemlidir?

Android telefonunuzu bir PC tarayıcısından yönetmek için bir uygulama kullandığınızda SMS'leriniz, fotoğraflarınız, kişileriniz ve dosyalarınız Wi-Fi ağınız üzerinden gidip gelir. Çoğu uygulama tüm bu verileri okunabilir düz metin olarak gönderir. Aynı ağdaki herkes bunları görebilir.

"Ev Wi-Fi'ım, kim gözetleyecek ki?" diye düşünebilirsiniz. Ama şunları göz önünde bulundurun:

  • Halka Açık Wi-Fi — Kafeler, havalimanları, oteller — yakındaki herkes trafiği yakalayabilir
  • Paylaşılan ağlar — Ev arkadaşları, misafirler veya ele geçirilmiş IoT cihazları
  • Router açıkları — Bilinen güvenlik açıklarına sahip güncel olmayan yazılımlar

Bir uygulama SMS mesajlarınızı HTTP üzerinden düz metin olarak gönderiyorsa, Wireshark gibi ücretsiz bir araçla herkes bunları okuyabilir. Bu teorik bir şey değil — son derece kolaydır.

Çoğu telefon yönetim uygulaması tam olarak bunu yapar. Web arayüzlerini kullanırken Chrome DevTools'u (F12 → Network sekmesi) açın, her API çağrısını düz JSON olarak okuyabilirsiniz — SMS içerikleri, dosya yolları, kişi adları, her şey.

PlainApp Farkı

PlainApp birden fazla şifreleme ve kimlik doğrulama katmanı uygular. İşte her katmanın ne yaptığı, sade bir dille.

Security Architecture Comparison
1

GraphQL API — Yalnızca İhtiyacınız Olanı İsteyin

Çoğu uygulama eski tarz REST API'ler kullanır: her kaynak için bir URL, ihtiyacınız olsun ya da olmasın her şeyi döndürür. PlainApp, tarayıcının yalnızca ihtiyaç duyduğu veriyi istediği modern bir yaklaşım olan GraphQL kullanır.

Bunun önemi:

  • Daha az veri açığa çıkar — Yalnızca dosya adına ihtiyacınız varsa, yalnızca o gönderilir
  • Tek endpoint — Düzinelerce URL yerine tek bir /graphql URL'si vardır, bu da saldırı yüzeyini azaltır
  • Sorgu bazlı izinler — Her sorgu kendi iznini kontrol eder (örn. SMS okuma, giriş yaptıktan sonra bile READ_SMS izni gerektirir)
2

Şifreli API Çağrıları (XChaCha20-Poly1305)

Bu, PlainApp ile çoğu rakip arasındaki en büyük farktır.

Her API isteği ve yanıtı — HTTP ve WebSocket trafiği dahil — hem HTTP hem HTTPS modunda XChaCha20-Poly1305 ile şifrelenir. Bu, WireGuard VPN, Cloudflare ve Google'ın Tink kütüphanesi tarafından kullanılan modern bir AEAD şifreleme algoritmasıdır.

Basitçe anlatmak gerekirse:

  1. 1Tarayıcınız bir istek oluşturur (örneğin, "SMS'lerimi göster")
  2. 2Yeniden oynatma koruması için bir zaman damgası ve rastgele nonce ekler
  3. 3Tüm yükü XChaCha20-Poly1305 ile okunamaz ikili veriye şifreler
  4. 4Şifrelenmiş ikili veri ağ üzerinden gönderilir — base64 yok, JSON yok, saf ikili
  5. 5Yalnızca telefonunuz şifreyi çözebilir ve doğrulayabilir

Birisi trafiği yakalasa bile anlamsız ikili veri görür — okunabilir JSON değil.

Encrypted API Flow

Şifreleme hakkında:

  • 256-bit anahtar (son derece güçlü)
  • 192-bit nonce (diğer şifreleri etkileyen belirli saldırı türlerini önler)
  • Yerleşik müdahale algılama — birisi aktarım sırasında veriyi değiştirirse şifre çözme başarısız olur
  • Android tarafı: Google Tink tarafından desteklenir
  • Web tarafı: @noble/ciphers tarafından desteklenir (kapsamlı denetimden geçmiş bir JavaScript şifreleme kütüphanesi)
3

Dijital İmzalar (Ed25519) — Cihazdan Cihaza

İki PlainApp cihazı birbiriyle iletişim kurduğunda (örneğin, telefondan telefona sohbet), yalnızca şifreleme yeterli değildir — her cihazın mesajın gerçekten diğer cihazdan geldiğini ve sahte olmadığını doğrulaması gerekir.

zaman damgası

Alıcı cihaz, gönderenin açık anahtarıyla imzayı doğrular ve zaman damgası 5 dakikayı aşan istekleri reddeder. Bu, hem sahtecilik hem de yeniden oynatma saldırılarını önler.

4

Güvenli Cihaz Eşleştirme (ECDH Anahtar Değişimi)

İki PlainApp cihazı birbiriyle eşleştiğinde (örn. iki telefon), paylaşılan bir şifreleme anahtarına ihtiyaç duyarlar. Ancak anahtarı ağ üzerinden göndermek amacı boşa çıkarır.

PlainApp bunu TLS, Apple'ın Secure Enclave'i ve WebAuthn'da kullanılan aynı matematiğe dayanan ECDH (Elliptic Curve Diffie-Hellman) anahtar değişimi ile çözer:

  1. 1Her cihaz bir anahtar çifti oluşturur (açık + özel)
  2. 2Yalnızca açık anahtarlarını birbirleriyle paylaşırlar
  3. 3Her cihaz kendi özel anahtarını diğerinin açık anahtarıyla birleştirir
  4. 4Her ikisi de aynı paylaşılan sırra ulaşır — bu sır hiçbir zaman ağ üzerinden geçmez
ECDH Pairing Flow
5

Şifreli URL'ler — Dosya Yollarını Gizleme

Çoğu kişinin fark etmediği bir ayrıntı: URL yolları da bilgi açığa çıkarır.

Bir dosya indirdiğinizde URL, sunucuya hangi dosyayı istediğinizi söyler. Birçok uygulamada URL şöyle görünür:

/fs?path=/sdcard/DCIM/Camera/photo_2024.jpg

Trafiği izleyen (veya tarayıcı geçmişine bakan) herkes tam olarak hangi dosyaya eriştiğinizi ve telefonunuzun klasör yapısını görebilir.

PlainApp, URL'deki dosya yolunu şifreler:

/fs?id=AxK9f2mQ7vR3xP8nWz...

id parametresi, URL Token adlı rastgele bir anahtar kullanılarak XChaCha20-Poly1305 ile şifrelenmiş dosya yoludur. Varsayılan olarak bu anahtar kalıcıdır ve uygulama yeniden başlatıldığında değişmez; böylece paylaşılan bağlantılar çalışmaya devam eder. Anahtar olmadan gerçek yolu tahmin etmek, dosyalarınızı listelemek veya indirme URL'si oluşturmak mümkün değildir.

URL Encryption Comparison
6

Kendinden İmzalı Sertifikalarla HTTPS

PlainApp telefonunuzda kendinden imzalı bir TLS sertifikası oluşturur. Bu, bankaların ve web sitelerinin kullandığı aynı teknoloji olan şifreli bir HTTPS tüneli oluşturur.

Sertifika şunları kullanır:

  • P-256 eğrisi ile ECDSA (büyük web siteleriyle aynı)
  • SHA256 imzası
  • Uygulamanın özel dizininde saklanır

Uygulama katmanındaki XChaCha20 şifreleme ile birleştiğinde, birbirinden bağımsız iki şifreleme katmanı elde edersiniz. Birini kırmak, diğerini de kırmadan işe yaramaz.

7

Giriş Koruması

PlainApp, parola tahmin saldırılarını önlemek için giriş denemelerini sınırlar:

  • IP adresi başına 60 saniyede 5 deneme
  • Ardından bağlantılar reddedilir
  • Eski hız sınırlama kayıtları otomatik olarak temizlenir

HTTP ve HTTPS: Dürüst Bir Açıklama

PlainApp hem HTTP hem de HTTPS modları sunar. İşte aralarındaki gerçek fark:

HTTP ModuHTTPS Modu
Dosya yolu URL'leriŞifreli (XChaCha20)Şifreli (XChaCha20)
API çağrılarıŞifreli (XChaCha20)Şifreli (XChaCha20 + TLS)
Dosya indirmeleriAktarımda şifrelenmezTLS ile şifreli
Kime yönelikBaşlangıç seviyesi kullanıcılar (tarayıcıda SSL uyarısı yok)Gizliliğe önem veren kullanıcılar

Her iki mod da API çağrılarını XChaCha20-Poly1305 ile şifreler — SMS'leriniz, kişileriniz ve diğer verileriniz HTTP veya HTTPS fark etmeksizin her zaman şifrelidir.

HTTP modu, kendinden imzalı sertifikaların tarayıcıda uyarı tetiklemesi nedeniyle vardır ("Bağlantınız gizli değil"). Teknik bilgisi daha az olan kullanıcılar için bu uyarı kafa karıştırıcı ve ürkütücüdür. HTTP bu sürtünmeyi ortadan kaldırır.

Ancak HTTP modu dosya transferlerini şifrelemez. Paylaşılan veya halka açık bir ağdaysanız mutlaka HTTPS kullanın.

Öneri: Mümkün olduğunca HTTPS kullanın. Tarayıcının kendinden imzalı sertifika uyarısını kabul edin — yerel ağ uygulamaları için bu normal ve beklenen bir durumdur.

8

Tedarik Zinciri Güvenliği — Daha Az Bağımlılık, Daha Az Risk

Birçok kullanıcının düşünmediği bir güvenlik tehdidi: tedarik zinciri saldırıları. Bir uygulama yüzlerce üçüncü taraf kütüphane kullandığında, bunların herhangi biri ele geçirilebilir — veri çalan, kripto para madenciliği yapan veya arka kapı açan kötü amaçlı kod enjekte edebilir.

Bu özellikle JavaScript ekosisteminde tehlikelidir. Son yıllarda event-stream, ua-parser-js ve colors gibi popüler npm paketleri ele geçirilerek milyonlarca projeye kötü amaçlı kod enjekte edildi. Bir telefon yönetim uygulamasının web arayüzü yüzlerce JS paketi çekiyorsa, her biri potansiyel bir saldırı noktasıdır.

PlainApp bilinçli bir yaklaşım benimser: mümkün olduğunca az bağımlılık kullanmak ve mantıklı olduğunda özel kod yazmak.

Android Uygulaması (plain-app)

  • Dependency injection framework kullanılmaz (Hilt yok, Dagger yok) — basit singleton'lar kullanılır
  • Şifreleme yalnızca 3 tanınmış kütüphane ile yapılır: Google Tink, Bouncy Castle ve yerleşik Java Cryptography Extension
  • Sunucu Ktor üzerinde çalışır (JetBrains'in resmi Kotlin framework'ü) — belirsiz üçüncü taraf sunucu kütüphaneleri yoktur

Web Arayüzü (plain-desktop)

Yalnızca 28 çalışma zamanı bağımlılığı — tipik web uygulamalarından çok daha az. Normalde npm paketleri gerektiren birçok şey sıfırdan yazılmıştır:

ÖzellikTipik UygulamaPlainApp
Bildirim seslerihowler.js / tone.jsÖzel Web Audio API synth
UUID oluşturmauuid npm paketiElle yazılmış RFC 4122 implementasyonu
Dosya yüklemeleriuppy / axiosKuyruklu özel parçalı yükleme
WebRTC videoTwilio / Daily.co SDKElle yazılmış PeerConnection kodu
HTTP istemcisiaxios / kyYerel tarayıcı fetch

Web tarafında şifreleme, büyük ve şişkin alternatifleri kullanmak yerine kapsamlı denetimden geçmiş, sıfır bağımlılıklı bir JavaScript şifreleme kütüphanesi olan @noble/ciphers kullanır.

Bunun önemi

Eklediğiniz her bağımlılık, kontrol edemediğiniz koddur. PlainApp'in yaklaşımı şu anlama gelir:

  • Kötü amaçlı kodun gizlenebileceği daha az yer
  • Daha küçük saldırı yüzeyi
  • Denetimi daha kolay (tüm kod tabanı açık kaynaktır)
  • Terk edilmiş veya ele geçirilmiş npm paketleri riski yok

Birçok Rakibin Yanlış Yaptığı Şeyler

Bu belirli uygulamaları isimlendirmek değil. Bu kategorideki yaygın kalıplar hakkında:

Güvenlik YönüPlainAppRakiplerde Yaygın Olan
API trafiğiHem HTTP hem HTTPS'te şifreli (XChaCha20)HTTP üzerinden düz JSON
WebSocket trafiğiŞifrelenmiş ikili çerçeveler (XChaCha20)Düz metin JSON veya WebSocket yok
Kimlik doğrulama token yönetimiŞifreleme anahtarı olarak kullanılır, başlıklarda asla yer almazHTTP başlıklarında gönderilir (kolayca sızar)
Dosya URL'leriŞifreli yol kimlikleriDüz metin yollar açığa çıkar
Anahtar değişimiECDH (P-256)Yok
İstek imzalamaEd25519 (yalnızca cihazlar arası)Yok
Yeniden oynatma koruması30 s + nonce (Web); 5 dk + imza (cihaz)Yok
Giriş korumasıHız sınırlama + iki faktörlü onaySınırsız deneme
Veri yönlendirme%100 yerel, bulut yokBazıları bulut üzerinden yönlendirir
BağımlılıklarMinimal, tanınmış kütüphanelerYüzlerce npm paketi
Kaynak koduAçık kaynak (GPL-3.0)Çoğunlukla kapalı kaynak

Herhangi bir uygulamayı kontrol etmenin en kolay yolu: uygulamayı kullanırken Chrome DevTools'u (F12) → Network sekmesini açın. API yanıtlarını JSON olarak okuyabiliyorsanız, uygulamada şifreleme yoktur.

Kendiniz Doğrulayın

PlainApp tamamen açık kaynaktır. Bu makaledeki her iddia kodda doğrulanabilir.

github.com/plainhub/plain-app (GPL-3.0)
Doğrulanabilir sürüm bütünlüğü

Otomatik, izlenebilir ve kurcalamaya dayanıklı sürüm hattı

Tüm kurulum paketleri GitHub ve F-Droid altyapısında otomatik olarak derlenir. Derlemeler izlenebilir, güvenlidir ve manuel derleme müdahalesi izi bırakmaz. PlainApp, doğrulanabilir derlemeler (SLSA) ve VirusTotal taramalı sürümler sunan az sayıdaki Android uygulamasından biridir.

GitHub ve F-Droid üzerinde otomatik derlemeler

Sürüm artefaktları yerel manuel paketleme yerine CI hatlarıyla üretilir. Her artefakt kaynak commit’lerine ve yeniden üretilebilir derleme iş akışlarına kadar izlenebilir.

SLSA Provenance (Seviye 3) + VirusTotal Taraması

Her sürüm SLSA provenance kanıtları ve VirusTotal tarama sonuçları içerir. Böylece tedarik zinciri denetlenebilir olur ve kullanıcılar kurulumdan önce bütünlüğü doğrulayabilir.

Sıkça Sorulan Sorular

HTTP modu kullandığımda PlainApp gerçekten şifreli mi?

Evet. Tüm API çağrıları (SMS, kişiler, dosya listesi vb.) hem HTTP hem de HTTPS modlarında XChaCha20-Poly1305 ile şifrelenir. HTTP modu yalnızca dosya indirmelerini şifrelemeden bırakır. Tam koruma için HTTPS kullanın.

Tarayıcım neden güvenlik uyarısı gösteriyor?

PlainApp şifreleme için kendinden imzalı bir TLS sertifikası kullanır. Bir kamu Sertifika Yetkilisi tarafından verilmediğinden tarayıcınız uyarı gösterir. Yerel ağ uygulamaları için bu normal ve beklenen bir durumdur. Devam etmek için 'Gelişmiş' ve 'Devam Et' seçeneklerine tıklayın.

Aynı Wi-Fi'daki biri verilerimi görebilir mi?

PlainApp ile hayır. API çağrıları XChaCha20-Poly1305 ile şifrelenir ve HTTPS modunda dosya transferleri de TLS ile şifrelenir. Çoğu rakip uygulamada evet — API çağrıları düz metin JSON olarak gönderilir.

PlainApp bir VPN ile nasıl karşılaştırılır?

VPN, cihazınız ile VPN sunucusu arasındaki trafiği şifreler. PlainApp, telefonunuz ile tarayıcınız arasındaki yerel ağ trafiğini şifreler. Farklı amaçlara hizmet ederler — PlainApp yerel cihaz yönetimini güvence altına alırken, VPN internet trafiğini güvence altına alır.

Kod gerçekten açık kaynak mı?

Evet. PlainApp GPL-3.0 lisansı altındadır. Tam kaynak kodu github.com/plainhub/plain-app adresinde mevcuttur. Her şifreleme implementasyonunu inceleyebilir, kaynaktan derleyebilir veya katkıda bulunabilirsiniz.

Telefonunuzun kontrolünü geri alın.

Bulut aracısı yok. Aylık ücret yok. Sadece telefonunuz ve tarayıcınız.