OnionChat
Messenger desktop su Tor, senza server, senza account e senza numero di telefono.
Contesto
OnionChat è un messenger desktop costruito attorno a una domanda: quanto poco serve davvero per far parlare due persone in modo privato? La risposta a cui sono arrivato è nessun server, nessun account, nessun numero di telefono. Il tuo indirizzo onion è la tua identità.
Come funziona
Non c’è un server centrale. Ogni utente ospita un proprio servizio onion, e i messaggi viaggiano direttamente da un onion all’altro dentro la rete Tor. Non c’è un punto in mezzo che possa leggere, registrare o scansionare le conversazioni, perché quel punto non esiste.
La cifratura è a doppio strato: quella di Tor più una cifratura end-to-end con la libreria NaCl (X25519 e XSalsa20-Poly1305), con firme Ed25519 e protezione contro il replay. Testi, foto, video, file e messaggi vocali sono cifrati, e sul disco sono cifrati anche il database e la tua identità, con una password d’avvio facoltativa.
Le scelte legate al modello di minaccia
È la parte a cui tengo di più, perché non è codice: è ragionare su cosa può andare storto.
Al primo contatto la chiave dell’altra persona viene fissata, così un tentativo successivo di sostituirla si nota. Dalle foto vengono tolti EXIF e posizione GPS, e l’immagine viene leggermente alterata per ostacolare il riconoscimento automatico. Le finestre sono protette dalla cattura dello schermo e l’indirizzo onion non compare mai nel titolo.
E soprattutto una cosa scritta chiaramente nella documentazione: contro gli scanner a livello di sistema operativo nessuna app può fare niente. Un progetto sulla privacy che finge di risolvere tutto è un progetto che non hai capito; questo dice dove finiscono le sue garanzie.
Scelte tecniche
Python, con PyNaCl per la crittografia, SQLite per i dati locali, un’interfaccia Tkinter e il Tor Expert Bundle incluso, così non bisogna configurare Tor a parte.
Stato
Finito, il codice è su GitHub. È un prototipo e non ha avuto un audit di sicurezza: per comunicazioni davvero delicate meglio strumenti maturi come Briar o Cwtch. Un limite noto: entrambe le persone devono essere online nello stesso momento.