8.8 KiB
Gemini Advanced Roadmap: Beyond the Basics
Tento dokument obsahuje pokročilé návrhy na vylepšení bezpečnosti, architektury a UX aplikace encrypted_chat. Tyto body jdou nad rámec běžného "best practice" a směřují k funkcionalitě profesionálních secure messengerů (Signal, Threema, Wire) se zaměřením na ochranu metadat a anti-forenzní techniky.
1. Ochrana Metadat & Traffic Analysis Resistance
Cíl: Server by neměl vědět, KDO s KÝM komunikuje, ani JAKÝ typ dat si posílají.
Sealed Sender (Odesílatel v obálce)
- Koncept: Server zná pouze
recipient_id. Identita odesílatele (sender_id) je zašifrována uvnitř zprávy (v "obálce"), kterou server nedokáže přečíst. - Implementace:
- Odesílatel vygeneruje klíč pro obálku (např. z profilu příjemce).
- Zabalí
sender_ida payload do šifrovaného bloku. - Server doručí blob příjemci bez ověření odesílatele (ověření proběhne až na klientovi po rozbalení).
- Výhoda: Při kompromitaci serveru útočník nevidí sociální graf (kdo se s kým baví).
Traffic Padding & Constant Bitrate
- Problém: Délka paketu prozrazuje obsah (krátký paket = "Ahoj", dlouhý paket = obrázek/klíč). Intervaly prozrazují aktivitu.
- Řešení:
- Padding: Všechny zprávy doplňovat náhodnými daty na fixní velikosti (např. bloky 4KB).
- Dummy Traffic (Chaff): Klient náhodně odesílá "falešné" pakety na server, které server zahodí nebo vrátí (echo).
- Výhoda: Pro síťového analytika (ISP) vypadá tok dat jako konstantní šum.
2. Anti-Forenzní Ochrana (Client-side)
Cíl: Minimalizovat dopad fyzického zabavení zařízení nebo vynuceného odemčení.
Duress Password (Heslo pod nátlakem)
- Funkce: Uživatel si nastaví druhé heslo.
- Chování: Pokud se přihlásí tímto heslem:
- Varianta A (Decoy): Odemkne se prázdná nebo falešná databáze s neškodnými konverzacemi.
- Varianta B (Panic): Aplikace na pozadí tiše provede secure wipe (přepis) privátních klíčů a reálné DB, zatímco uživateli zobrazí "Connection Error".
Secure Deletion & DB Vacuuming
- Problém: SQL
DELETEdata nesmaže fyzicky, jen označí místo jako volné. - Řešení:
- Před smazáním zprávy přepsat obsah náhodnými byty (
UPDATE messages SET content = random_blob WHERE id = ...). - Pravidelně spouštět
VACUUM(u SQLite) nebo optimalizaci tabulek. - Pro soubory (obrázky) použít bezpečné mazání (overwrite passes) před
os.unlink().
- Před smazáním zprávy přepsat obsah náhodnými byty (
Disappearing Messages (TTL)
- Funkce: Odesílatel nastaví životnost zprávy (např. 1 minuta).
- Implementace: Odpočet začíná okamžikem zobrazení (Read Receipt). Po uplynutí času klient data nenávratně smaže z disku (včetně secure wipe). Server maže ihned po doručení.
3. Infrastruktura & Škálování
Cíl: Odlehčit Python procesu a databázi pro podporu tisíců uživatelů.
Object Storage (MinIO / S3) + Presigned URLs
- Problém:
server.pyblokuje I/O při příjmu velkých souborů. - Řešení:
- Klient požádá server o upload.
- Server vygeneruje Presigned PUT URL (časově omezený token pro přímý upload do MinIO/S3).
- Klient nahrává data přímo do úložiště (obchází aplikační server).
- Server ukládá pouze odkaz (URL/Key).
- Výhoda: Masivní zrychlení, server řeší jen metadata.
Read/Write Splitting (MySQL Replication)
- Architektura:
- Master DB: Pouze pro
INSERT,UPDATE,DELETE. - Read Replicas (Slaves): Pro těžké
SELECTdotazy (historie zpráv, hledání).
- Master DB: Pouze pro
- Implementace v
db.py: Router, který podle typu dotazu volí connection pool.
4. Protokol & Funkce
Cíl: Rozšíření možností komunikace bez nutnosti centralizovaného streamování.
P2P Volání (WebRTC Signalizace)
- Koncept: Využít existující bezpečný kanál (Double Ratchet) pro výměnu SDP (Session Description Protocol) paketů.
- Flow:
- Alice pošle Bobovi zašifrovanou zprávu typu
CALL_OFFERs parametry WebRTC. - Bob odpoví
CALL_ANSWER. - Klienti si vymění
ICE_CANDIDATES(IP adresy/porty) a naváží přímé P2P spojení (UDP). - Audio/Video stream (SRTP) jde mimo server.
- Alice pošle Bobovi zašifrovanou zprávu typu
Diferenciální Synchronizace (Merkle Trees)
- Problém: Stahování seznamu kontaktů (
get_user_contacts) je pomalé při velkém množství dat. - Řešení: Klient a server si udržují Hash Tree (Merkle Tree) stavu. Při synchronizaci porovnají pouze root hash. Pokud se liší, stahují se jen změněné větve stromu (delta update).
5. UI/UX (PyQt Speciality)
Cíl: Ochrana soukromí na úrovni OS a skrytá komunikace.
Privacy Overlay (Task Switcher)
- Funkce: Detekovat událost ztráty fokusu okna (
QEvent.WindowDeactivate) nebo minimalizace. - Akce: Překrýt obsah okna rozmazaným efektem (
QGraphicsBlurEffect) nebo logem aplikace. - Důvod: Zabrání operačnímu systému (Windows/Linux/macOS) vytvořit čitelný náhled okna v Alt+Tab menu nebo v historii aktivit.
Steganografie
- Funkce: Ukrýt šifrovanou zprávu do obrazových dat nevinného obrázku (např. meme kočky).
- Implementace: Modifikace LSB (Least Significant Bit) pixelů obrázku.
- Výhoda: Pro síťového admina nebo forenzní analýzu to vypadá jako běžné posílání obrázků, přítomnost šifrované komunikace je popiratelná.
6. High Availability Architecture (Distribuovaný Cluster)
Cíl: Zajištění provozu i při výpadku/napadení serveru (Active-Active "RAID 1 přes síť").
Architektura: Geograficky Distribuovaný "Zero-Trust" Cluster
1. Vstupní brána (Global Traffic Manager)
- Funkce: Rozděluje klienty mezi dostupné servery (Round Robin / Geo-DNS).
- Self-Healing: Při výpadku Serveru A okamžitě přesměruje provoz na Server B. Uživatel nic nepozná.
2. Aplikační vrstva (Stateless Servers)
- Stav: Servery jsou bezstavové.
server.pyneukládá nic důležitého v RAM. - Škálování: Můžete spustit N instancí serveru. Je jedno, ke kterému se uživatel připojí.
- Komunikace: Servery spolu mluví přes rychlý Message Bus (Redis Pub/Sub) pro doručování real-time zpráv mezi uživateli na různých uzlech.
3. Datová vrstva (Zrcadlení Dat - "RAID 1")
- Databáze (MySQL Galera Cluster): Synchronní multi-master replikace. Zápis na Serveru A se potvrdí, až když je fyzicky zapsán i na Serveru B (a C).
- Efekt: Ztráta serveru neznamená ztrátu dat (klíčů, zpráv).
- Soubory (MinIO Cluster): Distribuovaný Object Storage s Erasure Coding. Soubory jsou matematicky rozprostřeny přes všechny servery. Výpadek disku/serveru nevadí.
4. Bezpečnostní pojistky ("Poisoned Node")
- Soft Delete: Databáze nemaže data ihned, ale označuje je jako smazané (ochrana proti
DELETE *od útočníka). - Client-Side Verification: I kdyby kompromitovaný server posílal podvržené klíče, klienti ověřují digitální podpisy (Identity Keys). Server nemůže zfalšovat identitu uživatelů.
7. Technický Upgrade pro Stateless Architekturu
Cíl: Odstranit závislost na paměti procesu (RAM) pro umožnění horizontálního škálování.
1. Redis jako Distribuovaná Paměť
Nahrazení Python dict struktur, které jsou lokální pro jeden proces, za centrální Redis úložiště přístupné všem serverům.
- Párovací Session:
- Stav:
pairing_sessions(dict) -> Redis Keypair:{code}(Hash/String s TTL). - Efekt: Uživatel může vyžádat kód na Serveru A a potvrdit ho na Serveru B.
- Stav:
- Rate Limiting:
- Stav:
rate_limits(dict) -> Redis Keyrl:{ip}:{action}(Counter s EXPIRE). - Efekt: Limity platí globálně pro celý cluster, ne jen per server.
- Stav:
2. Redis Pub/Sub pro Real-Time Routing
Doručení zprávy uživateli, který je připojen k JINÉMU serveru než odesílatel.
- Princip:
- Server A (odesílatel) zjistí, že příjemce Bob není připojen lokálně.
- Server A publikuje zprávu do Redis kanálu
user:{bob_user_id}. - Server B (kde je Bob připojen) tento kanál poslouchá (subscribe).
- Server B přijme zprávu z Redisu a pošle ji Bobovi do otevřeného TCP socketu.
3. Session Sticky vs. Stateless Uploads
Řešení pro nahrávání souborů po částech (chunks).
- Varianta A (Infrastructure - Sticky Sessions): Load Balancer (HAProxy/Nginx) zajistí, že všechny požadavky od jedné IP jdou vždy na stejný server. Nejjednodušší, nevyžaduje změnu kódu.
- Varianta B (Architectural - Direct Upload): Viz bod 3 "Object Storage + Presigned URLs". Server vůbec nepřijímá data souboru, pouze vygeneruje token. Plně stateless řešení.