TerminalPhone, il “telefono anonimo” su Tor: chiamate vocali cifrate senza numero e senza server

Avreste mai immaginato di poter scambiare messaggi vocali e attivare funzionalità walkie-talkie dalla finestra del terminale su Linux e su Android? TerminalPhone è un progetto sperimentale che fa proprio questo e si appoggia alla rete Tor per le comunicazioni crittografate.

L’interesse per strumenti privi di infrastrutture centralizzate è cresciuto parallelamente all’aumento dei sistemi di sorveglianza di rete e alla diffusione di tecniche di traffic analysis. TerminalPhone è uno script Bash (!) autosufficiente che permette a due interlocutori di scambiarsi messaggi vocali e testuali cifrati end-to-end sfruttando esclusivamente la rete Tor.

TerminalPhone si comporta come un walkie-talkie digitale. A differenza di una chiamata tradizionale, dove due interlocutori parlano contemporaneamente in tempo reale, qui la comunicazione è necessariamente sequenziale. L’utente registra un messaggio vocale, lo invia e attende la risposta. Il modello, ispirato alle radio portatili, non nasce per nostalgia ma per risolvere un limite reale: il ritardo inevitabile introdotto dall’onion routing, cioè il sistema di instradamento anonimo che fa transitare i dati attraverso più nodi e livelli di cifratura su Tor, aumentando i tempi di trasmissione.

Di converso, l’approccio adottato elimina completamente account, numeri telefonici e server intermedi, introducendo un modello di identità basato sull’indirizzo .onion e una trasmissione a basso bitrate compatibile con la capacità della rete Tor.

TerminalPhone walkie-talkie su rete Tor per chiamate cifrate end-to-end

TerminalPhone: architettura e modello di funzionamento

Abbiamo già anticipato in apertura che TerminalPhone opera come un sistema push-to-talk: l’utente registra un messaggio vocale completo che viene compresso, cifrato e inviato come singola unità dati.

L’intero processo si snoda partendo da un flusso audio PCM a 8 kHz e 16 bit, passa per la compressione tramite codec Opus a 16 kbps e termina con la cifratura applicativa prima dell’inoltro sulla rete Tor tramite socat.

socat (abbreviazione di SOcket CAT) è un potente strumento da riga di comando che consente di mettere in comunicazione due flussi di dati. È un “ponte universale” tra input e output: può collegare tra loro file, socket TCP/UDP, porte seriali, pipe, processi e persino connessioni cifrate.

Il destinatario esegue l’operazione inversa, decodificando il messaggio solo dopo la ricezione completa. Il protocollo di comunicazione basato su TCP include comandi per l’identificazione del chiamante, la negoziazione del cifrario, il controllo della sessione e il trasporto dei payload codificati in Base64.

L’assenza di streaming continuo riduce la prevedibilità dei pattern di traffico, mitigando alcune tecniche di fingerprinting tipiche dei flussi VoIP tradizionali. Il risultato è una trasmissione asincrona con dimensioni dei messaggi variabili e intervalli non regolari, più difficili da correlare a una specifica attività vocale.

Identità e instradamento su Tor

Ogni istanza avvia un proprio servizio nascosto Tor e genera un endpoint raggiungibile tramite indirizzo .onion. Tale indirizzo funge da identità permanente e instradabile, senza necessità di port forwarding o indirizzi IP pubblici.

Il traffico è interamente veicolato attraverso circuiti Tor, evitando esposizione dell’origine e della destinazione. Il sistema può opzionalmente visualizzare il percorso dei relay utilizzati, includendo nomi e Paesi.

TerminalPhone supporta anche l’utilizzo del bridge Snowflake per aggirare la censura, integrando informazioni di stato estratte dai log di Tor. L’opzione di esclusione dei nodi consente di limitare il passaggio attraverso specifici Paesi, sfruttando la direttiva ExcludeNodes del file di configurazione torrc con modalità StrictNodes.

Cifratura applicativa e negoziazione dei cifrari

La protezione dei dati è implementata a livello applicativo con algoritmi selezionabili tra 21 cifrari, dalle varianti a 256 bit fino a quelle a 128 bit, includendo AES, ChaCha20, Camellia e ARIA. Il valore predefinito è AES-256-CBC, con derivazione della chiave tramite PBKDF2, con 10.000 iterazioni a partire da un segreto condiviso. Il sistema permette la negoziazione dinamica del cifrario all’avvio della chiamata e la modifica in corso, con indicatori visivi che segnalano eventuali difformità tra i peer.

Il segreto condiviso può essere memorizzato in forma cifrata a riposo e protetto da passphrase, utilizzando sempre AES-256-CBC. Le credenziali non transitano mai come argomenti di processo ma sono passate a OpenSSL tramite file descriptor, evitando esposizioni potenzialmente pericolose.

Come provare TerminalPhone su Linux e Android

Nonostante il carattere sperimentale, TerminalPhone rappresenta un esempio concreto di come sia possibile costruire un sistema di comunicazione vocale cifrata utilizzando esclusivamente strumenti open source standard e un linguaggio minimale come Bash. L’integrazione di Tor hidden services, cifratura configurabile, autenticazione opzionale tramite HMAC e compressione a basso bitrate dimostra che anche soluzioni leggere possono offrire un livello di riservatezza significativo se usate correttamente.

Per comprendere realmente le potenzialità e i limiti di TerminalPhone è utile provarlo in prima persona in un ambiente controllato. Lo script è progettato per funzionare su sistemi Linux standard e su Android tramite Termux.

Prova pratica su Linux

Su una distribuzione Linux (Debian, Ubuntu, Fedora o Arch), il primo passaggio consiste nel clonare il repository di TerminalPhone e avviare lo script con il comando bash terminalphone.sh.

Una volta avviato, dal menu interattivo si seleziona l’opzione 7 per installare automaticamente tutte le dipendenze necessarie come tor, opus-tools, sox, socat, openssl e alsa-utils.

Terminata l’installazione, si avvia Tor dal menu scegliendo l’opzione 8 e si attende il bootstrap completo al 100%. Successivamente si imposta il segreto condiviso con l’opzione 4: lo stesso valore deve essere inserito su entrambi i dispositivi che si vogliono mettere in comunicazione. L’indirizzo onion locale può essere visualizzato con l’opzione 3 e condiviso con l’altro interlocutore.

Per ricevere una chiamata si seleziona l’opzione 1 (listen), mentre per avviare una comunicazione si utilizza l’opzione 2 inserendo l’indirizzo .onion del peer. Durante la chiamata si tiene premuta la barra spaziatrice per registrare il messaggio vocale e lo si invia automaticamente al rilascio; il tasto T consente di inviare messaggi di testo cifrati e il tasto Q di terminare la sessione.

Prova pratica su Android con Termux

Su Android è necessario installare Termux e Termux:API da F-Droid. Dopo l’installazione, si apre Termux e si esegue il comando pkg update seguito da pkg install git per ottenere gli strumenti di base. A questo punto si clona il repository e si avvia lo script con bash terminalphone.sh, come su Linux.

Dal menu si seleziona nuovamente l’opzione 7 per installare le dipendenze, che in ambiente Android includono ffmpeg e termux-api oltre ai componenti Tor e Opus.

Dopo aver concesso i permessi per l’uso del microfono all’app Termux:API, si procede avviando Tor (opzione 8), configurando il segreto condiviso (opzione 4) e recuperando l’indirizzo onion (opzione 3).

La gestione del push-to-talk avviene in modalità toggle: si tocca la barra spaziatrice per iniziare la registrazione e la si tocca di nuovo per inviare il messaggio. Anche in questo caso i comandi T e Q permettono rispettivamente di inviare testo cifrato e chiudere la chiamata.

Ambiente di test e sicurezza operativa

L’uso di TerminalPhone dovrebbe essere limitato a dispositivi di test o ambienti isolati.

Lo script è distribuito come singolo file Bash e al momento non può contare su un processo di auditing strutturato o su revisioni di sicurezza indipendenti. Inoltre, la presenza di cifratura applicativa e routing anonimo non sono sufficienti a garantire sicurezza operativa se il sistema host è compromesso o se il segreto condiviso è gestito in modo improprio.

L’assenza di forward secrecy comporta che la compromissione della chiave consenta la decifrazione retroattiva delle comunicazioni. Inoltre, la necessità di scambiare il segreto condiviso attraverso un canale di comunicazione differente, introduce un punto critico nella catena di fiducia.

In un contesto di studio o laboratorio, TerminalPhone offre un terreno utile per comprendere nel dettaglio il funzionamento delle comunicazioni anonime, della cifratura applicativa e dei meccanismi di autenticazione distribuiti.

Ti consigliamo anche

Link copiato negli appunti