
terminalphone — Actualizado!
Comunicación cifrada de voz push-to-talk y texto a través de servicios ocultos de Tor con cifrado de extremo a extremo, cifrados configurables, modo de retransmisión para llamadas grupales y destrucción de datos anti-forense.
TerminalPhone
Comunicación de voz push-to-talk cifrada a través de servicios ocultos de Tor.
TerminalPhone es un único script Bash autocontenido que proporciona comunicación de voz y texto anónima, cifrada de extremo a extremo, entre dos o más partes a través de la red Tor. Funciona como un walkie-talkie: grabas un mensaje de voz y este se comprime, cifra y transmite a la parte remota como una sola unidad. También puedes enviar mensajes de texto cifrados durante una llamada. Sin infraestructura de servidores, sin cuentas, sin números de teléfono. Tu dirección .onion del servicio oculto de Tor es tu identidad.
Tabla de Contenidos
- Características
- Instalación
- Inicio Rápido
- Uso
- Cómo Funciona
- Modelo de Seguridad
- Configuración
- Solución de Problemas
- Licencia
Características
- Transmisión de Voz Full Duplex (WebSockets) -- Transmisión de audio bidireccional continua en tiempo real a través de Servicios Ocultos de Tor usando WebSockets. Ambas partes pueden hablar y escuchar simultáneamente sin mantener pulsada la barra espaciadora. Configurable mediante Ajustes (opción 9) con selección de enrutamiento integrada:
- Modo Estándar (6 Saltos): Enrutamiento completo de 3 saltos para el llamante + 3 saltos para el servicio oculto, preservando la máxima anonimidad para ambas partes (~800–1200ms RTT).
- Modo Turbo (Salto Único): Reduce el enrutamiento del oyente a 1 salto (~450–700ms RTT) para una conversación fluida, con avisos explícitos de compensación (anonimidad de ubicación del servidor deshabilitada en el oyente; marcación SOCKS saliente deshabilitada en el nodo oyente).
- Modo Walkie-Talkie Push-to-Talk -- Graba un mensaje de voz completo y lo transmite al soltar.
- Chat Cifrado Durante la Llamada -- Envía y recibe mensajes de texto cifrados durante una llamada. Pulsa
Tpara escribir un mensaje. - Identificación del Llamante -- Ambas partes intercambian automáticamente sus direcciones
.onional conectar. La dirección remota se muestra en el encabezado de la llamada. - Detección Automática de Cuelgue -- Cuando una parte cuelga, la otra es notificada inmediatamente y la llamada finaliza automáticamente.
- Cifrado Configurable -- Elige entre 21 cifrados seleccionados clasificados por fortaleza (256-bit → 128-bit). Incluye las familias AES, ChaCha20, Camellia y ARIA. Los cifrados débiles (DES, RC4, modos ECB) están excluidos.
- Negociación de Cifrado en Vivo -- Ambas partes intercambian información del cifrado al conectar. El encabezado de la llamada muestra los cifrados local y remoto con indicadores verde (coincidencia) o rojo (discrepancia), actualizados en tiempo real.
- Ajustes Durante la Llamada -- Pulsa
Sdurante una llamada para acceder a los ajustes. Cambia tu cifrado sobre la marcha; la pantalla de la parte remota se actualiza automáticamente. - Información del Puente Snowflake -- Al usar Snowflake para la evasión de censura, la página de llamada muestra el nombre del descriptor del puente, la huella digital y el estado de la conexión de transporte analizados de los registros de Tor.
- Auto-Escucha -- Cuando está habilitada, un oyente en segundo plano se inicia automáticamente al arrancar Tor. Las llamadas entrantes se detectan y aceptan desde el menú principal sin necesidad de seleccionar manualmente "Escuchar llamadas". Después de que una llamada finaliza, el oyente se reinicia.
- Tecla PTT Configurable -- Cambia la tecla push-to-talk de la barra espaciadora predeterminada a cualquier tecla mediante el menú de Ajustes.
- Estadísticas de Mensajes -- La pantalla de llamada muestra el tamaño del payload cifrado de los mensajes enviados y recibidos, actualizado en el lugar.
- Estado PTT Remoto -- La pantalla de llamada muestra un indicador estático del estado de la parte remota: "Inactivo" (verde) o "● Grabando" (rojo). Se restablece inmediatamente cuando llegan datos de audio, antes de que comience la reproducción.
- Timbre PTT -- Sonido de notificación opcional cuando la parte remota comienza a grabar. Cinco presets integrados (tono, doble, chirrido, ding, clic) generados con sox, además de la capacidad de grabar un timbre personalizado de 2 segundos. Configurable mediante Ajustes.
- Animación de Conexión -- Al llamar a una dirección remota, se reproduce una animación cíclica hasta que se carga la interfaz de llamada.
- Cambiador de Voz -- Aplica efectos de voz al audio saliente. Incluye 6 presets (grave, agudo, robot, eco, susurro) y un modo personalizado totalmente configurable con cambio de tono, overdrive, flanger, eco, filtro paso alto y trémolo. Los efectos se procesan con sox antes de la codificación Opus.
- PTT por Volumen (Termux) -- Modo experimental que permite pulsar dos veces el botón de Bajar Volumen para alternar la grabación, incluso cuando Termux está en segundo plano. Requiere
jq(instalado bajo demanda). El volumen se restaura automáticamente después de cada activación. - Servicio Oculto de Tor -- Cada instancia ejecuta su propio servicio oculto de Tor. Tu dirección
.onionsirve como un endpoint permanente y enrutable. No se requiere reenvío de puertos ni IP pública. - Cifrado de Extremo a Extremo -- Todo el audio y texto se cifra usando un cifrado configurable (predeterminado: AES-256-CBC) con derivación de clave PBKDF2 a partir de un secreto precompartido antes de entrar en la red Tor.
- Secreto Protegido por Frase de Paso -- El secreto compartido puede cifrarse en reposo usando una frase de paso elegida por el usuario (AES-256-CBC, 100,000 iteraciones PBKDF2). Los secretos en texto plano existentes se detectan automáticamente con una oferta para migrarlos.
- Bajo Ancho de Banda -- Códec Opus a 16kbps, 8kHz mono. Un mensaje de voz típico de 10 segundos ocupa menos de 20KB, muy por debajo de la capacidad de Tor.
- Compartir Código QR -- La opción 3 puede mostrar tu dirección
.onioncomo un código QR escaneable en la terminal. Siqrencodeno está instalado, se te solicita instalarlo. El código QR se renderiza en el buffer de pantalla alternativo y se destruye al descartarlo. Una nota advierte que algunos escáneres QR añaden automáticamentehttp://; este prefijo se elimina automáticamente al marcar. - Archivos Temporales Opacos -- Todos los archivos temporales usan extensiones
.tmpgenéricas e identificadores hexadecimales aleatorios. No se filtra al sistema de archivos ningún metadato de tipo de archivo ni de tiempo. - Visualización de Saltos del Circuito -- Visualización opcional de tu ruta de circuito de Tor durante las llamadas, mostrando los nombres de los relays y los nombres completos de los países. Se actualiza automáticamente cada 60 segundos. Configurable mediante Ajustes → Ajustes de Tor.
- Excluir Países -- Excluye países específicos de tus circuitos de Tor. Presets para las alianzas Five Eyes, Nine Eyes y Fourteen Eyes, o introduce códigos de país personalizados. Usa
ExcludeNodesconStrictNodesen el torrc. - Autenticación de Protocolo HMAC -- Firma opcional HMAC-SHA256 de todos los mensajes del protocolo (voz, texto, señales de control) usando el secreto compartido. Se incluye un nonce aleatorio por mensaje, y los nonces ya vistos se rastrean para rechazar reproducciones. Los mensajes sin firmar, falsificados o reproducidos se descartan silenciosamente. El estado HMAC se congela al inicio de la llamada para evitar desincronización a mitad de llamada. Configurable mediante Ajustes → Seguridad.
- Sobrescribir Antes de Borrar -- Alternativa opcional en Ajustes → Seguridad que sobrescribe cada archivo temporal con datos aleatorios de
/dev/urandomantes de su eliminación. Se lee el tamaño del archivo, se escriben esa cantidad de bytes de datos aleatorios sobre el archivo conddusandoconv=notrunc, la escritura se vacía al dispositivo de almacenamiento consync, y luego el archivo se elimina conrm. Cubre todos los archivos sensibles en tiempo de ejecución: grabaciones PCM crudas, audio codificado en Opus, payloads cifrados, audio y chat entrantes descifrados, intermediarios de efectos de voz, material de claves de cifrado y HMAC, registros de nonces, flags de sesión, archivos PID, named pipes, claves de servicios ocultos de Tor en rotación y datos de sesión de relays. Para directorios, todos los archivos internos se sobrescriben recursivamente. Una opción de prueba integrada crea un archivo de muestra, muestra el contenido original en texto plano y hexadecimal, lo sobrescribe y muestra el hexadecimal sobrescrito para que el usuario pueda confirmar visualmente que los datos están destruidos. Desactivado por defecto — para la mayoría de los usuarios, elrmestándar es perfectamente suficiente. Los archivos temporales de TerminalPhone son pequeños y de corta duración, y el espacio en disco normalmente se reutiliza rápidamente por la actividad normal del sistema. Esta función es para usuarios que quieren una capa extra de protección contra la recuperación forense. Nota: en SSDs y almacenamiento flash, el nivelado de desgaste significa que la sobrescritura puede aterrizar en celdas NAND físicas diferentes — el cifrado de disco completo es la única defensa fiable en medios flash. En HDDs tradicionales, la sobrescritura reemplaza los datos en la misma ubicación física y es efectiva contra toda recuperación basada en software. - Modo Relay (Puente de Grupo) -- Ejecuta un relay de conocimiento cero que conecta N llamantes anónimos. El relay reenvía audio y chat cifrados sin descifrarlos, no requiere secreto compartido ni hardware de audio. Los clientes detectan automáticamente el modo relay mediante el handshake
RELAY:1y muestran el recuento en vivo de llamantes del grupo. Que un llamante se vaya no desconecta a los demás. El panel del operador muestra el recuento de llamantes, el tiempo de actividad y el rendimiento de datos. - Modo Tor de Salto Único -- Modo opcional de latencia reducida para operadores de relay. Usa 1 salto de Tor en lugar de 3 para el servicio oculto, sacrificando la anonimidad del servidor por una menor latencia. Ideal para operadores de relay que no necesitan ocultar su propia IP.
- Configuración de Puertos -- Configura el puerto de escucha y el puerto SOCKS juntos mediante Ajustes → Ajustes de Tor. Permite ejecutar múltiples instancias en el mismo dispositivo con procesos de Tor separados. Principalmente útil para operadores de relay que también quieren unirse a su propia llamada de grupo — ejecuta el relay en una instancia, cambia el puerto SOCKS en una segunda instancia y marca como llamante.
- Multiplataforma -- Se ejecuta en distribuciones Linux estándar, macOS y Android mediante Termux. Los backends de audio específicos de cada plataforma se manejan de forma transparente.
- Sin Requisito de Root -- La entrada PTT usa el modo raw de la terminal. No se necesitan permisos especiales ni módulos del kernel.
- Script Único -- Un solo archivo Bash. Sin sistema de compilación, sin runtime, sin framework.
Instalación
Linux
Distribuciones compatibles: Debian/Ubuntu (apt), Fedora/RHEL (dnf), Arch (pacman).``` bash
git clone https://gitlab.com/here_forawhile/terminalphone.git cd terminalphone bash terminalphone.sh
Selecciona la opción **7** del menú para instalar todas las dependencias automáticamente. Se instalarán los siguientes paquetes:
| Paquete | Propósito |
|---|---|
| `tor` | Enrutamiento onion y servicio oculto |
| `opus-tools` | Compresión de voz (códec Opus) |
| `sox` | Utilidades de procesamiento de audio |
| `socat` | Relé TCP bidireccional a través del proxy SOCKS de Tor |
| `openssl` | Cifrado y descifrado AES-256-CBC |
| `alsa-utils` | Grabación y reproducción de audio (`arecord`, `aplay`) |
### macOS``` bash
git clone https://gitlab.com/here_forawhile/terminalphone.git
cd terminalphone
bash terminalphone.sh
Selecciona la opción 7 para instalar todas las dependencias automáticamente. Si Homebrew no está instalado, el script lo instalará primero y luego instalará los siguientes paquetes:
| Paquete | Propósito |
|---|---|
tor | Enrutamiento onion y servicio oculto |
opus-tools | Compresión de voz (códec Opus) |
sox | Grabación y reproducción de audio (rec, play) |
socat | Relé TCP bidireccional a través del proxy SOCKS de Tor |
openssl | Cifrado y descifrado AES-256-CBC |
Nota: macOS utiliza sox tanto para grabar (rec) como para reproducir (play) en lugar de ALSA. No se necesitan paquetes de audio adicionales.
Apple Silicon (M1/M2/M3+): Si tu terminal se ejecuta bajo Rosetta 2 (un proceso x86_64) mientras Homebrew está instalado en el prefijo ARM nativo (/opt/homebrew), brew install normalmente falla con Cannot install under Rosetta 2 in ARM default prefix. El instalador de dependencias ahora detecta esto y vuelve a ejecutar Homebrew automáticamente bajo arch -arm64, por lo que la opción 7 funciona independientemente de cómo se haya lanzado el script.
Termux (Android)
TerminalPhone es compatible con dispositivos Android a través de Termux. Debido a la arquitectura de audio aislada de Android, se requieren dos componentes adicionales.
Paso 1: Instalar Termux
Instala Termux desde F-Droid. No uses la versión de Play Store, ya que está desactualizada y ya no recibe actualizaciones.
Paso 2: Instalar la aplicación Termux:API
Instala Termux:API desde F-Droid. Esta es una aplicación de Android independiente (no un paquete de Termux) que proporciona un puente entre Termux y las API del sistema Android. TerminalPhone la requiere para acceder al micrófono del dispositivo y a la reproducción multimedia.
Sin la aplicación Termux:API instalada en el dispositivo, los comandos termux-microphone-record y termux-media-player no funcionarán, y la grabación y reproducción de audio fallarán silenciosamente.
Después de instalar la aplicación Termux:API, concédele permisos de micrófono cuando se te solicite.
Paso 3: Instalar el paquete Termux:API dentro de Termux```bash pkg install termux-api
This installs the command-line utilities that communicate with the Termux:API app.
**Step 4: Run TerminalPhone**```bash
git clone https://gitlab.com/here_forawhile/terminalphone.git
cd terminalphone
bash terminalphone.sh
Selecciona la opción 7 para instalar todas las dependencias restantes. El instalador ejecutará pkg upgrade primero para resolver cualquier problema de enlace de paquetes, y luego instalará tor, opus-tools, sox, socat, openssl-tool, ffmpeg y termux-api.
Dependencias específicas de Termux:
| Paquete | Propósito |
|---|---|
termux-api | Puente CLI hacia el micrófono y el reproductor multimedia de Android |
ffmpeg | Convierte las grabaciones M4A de Android a PCM sin procesar para la codificación Opus |
Inicio rápido```
- Run: bash terminalphone.sh
- Install deps: Select option 7
- Start Tor: Select option 8 (wait for 100% bootstrap)
- Set shared secret: Select option 4 (both parties must use the same secret)
- Share your .onion address with the other party (option 3)
To receive a call: Select option 1 (Listen for calls) To make a call: Select option 2 (Call an onion address)
Ambas partes deben tener Tor en ejecución y el mismo secreto compartido configurado antes de iniciar una llamada.
---
## Uso
### Opciones del Menú```
1 Listen for calls Wait for an incoming connection
2 Call an onion address Connect to a remote .onion endpoint
3 Show my onion address Display your .onion address (with optional QR code)
4 Set shared secret Configure the pre-shared encryption key
5 Test audio (loopback) Record and play back audio locally
6 Show status Display Tor, secret, and connection status
7 Install dependencies Install all required packages
8 Start Tor Start the Tor process and hidden service
9 Stop Tor Stop the Tor process
10 Restart Tor Stop and restart Tor
11 Rotate onion address Generate a new .onion address (destroys the old one)
12 Settings Configure Opus quality, PTT chime, Snowflake, auto-listen, PTT key, voice changer, security, Tor settings
13 Relay mode Start a zero-knowledge group bridge for N callers
0 Quit Stop Tor and exit
Controles Durante la Llamada
Modo Full Duplex (WebSockets):
| Tecla | Acción |
|---|---|
| M | Silenciar / Reactivar micrófono. |
| T | Enviar un mensaje de texto cifrado durante la llamada. |
| Q | Colgar y volver al menú. |
Modo Push-to-Talk (Linux / macOS):
| Tecla | Acción |
|---|---|
| Mantener ESPACIO | Grabar mensaje de voz. Se envía automáticamente al soltar. |
| T | Enviar un mensaje de texto cifrado. |
| S | Abrir ajustes durante la llamada (cambiar cifrado, ajustar calidad). |
| Q | Colgar y volver al menú. |
Modo Push-to-Talk (Termux):
El teclado de software de Android envía eventos de tecla al soltar, no al pulsar. TerminalPhone se adapta usando el modo de alternancia en Termux.
| Tecla | Acción |
|---|---|
| Tocar ESPACIO | Iniciar grabación. Tocar de nuevo para detener y enviar. |
| T | Enviar un mensaje de texto cifrado. |
| S | Abrir ajustes durante la llamada (cambiar cifrado, ajustar calidad). |
| Q | Colgar y volver al menú. |
| Vol Down ×2 | Alternar grabación mediante el botón de volumen (requiere PTT por volumen habilitado en ajustes). |
Modo CLI```bash
bash terminalphone.sh install # Install dependencies bash terminalphone.sh test # Audio loopback test bash terminalphone.sh status # Show status bash terminalphone.sh listen # Listen for incoming calls bash terminalphone.sh call ADDRESS # Call a .onion address bash terminalphone.sh relay # Start relay mode (group bridge)
---
## Cómo Funciona
TerminalPhone utiliza un modelo de grabar-y-enviar. Cuando activas PTT, el micrófono graba continuamente hasta que lo sueltas. La grabación completa se procesa luego a través del siguiente flujo:```
SENDER RECEIVER
────── ────────
Microphone Speaker
│ ▲
▼ │
Raw PCM (8kHz, 16-bit, mono) Opus decode
│ ▲
▼ │
Opus encode (16kbps) AES-256-CBC decrypt
│ ▲
▼ │
AES-256-CBC encrypt Base64 decode
│ ▲
▼ │
Base64 encode ──▶ socat ──▶ Tor ──▶ socat ──▶ Receive
El protocolo de cable es texto basado en líneas sobre una conexión TCP:
| Mensaje | Descripción |
|---|---|
ID:<onion> | ID de llamante -- dirección .onion del remitente |
CIPHER:<nombre> | Cifrado del remitente. Se intercambia al conectar y al cambiar. |
PTT_START | El remitente ha comenzado a grabar |
PTT_STOP | El remitente ha terminado; el audio sigue o ya se ha enviado |
AUDIO:<base64> | Mensaje de audio cifrado completo |
MSG:<base64> | Mensaje de texto cifrado |
HANGUP | El remitente se está desconectando |
PING | Señal de mantenimiento de conexión |
RELAY:1 | Saludo del relay -- enviado por el relay al conectar, activa el modo grupal |
GROUP:<n> | Actualización del tamaño del grupo -- transmitido por el relay cuando los llamantes se unen o salen |
En Termux, un paso de conversión adicional maneja el formato de grabación M4A nativo de Android, usando ffmpeg para convertir a PCM sin procesar antes de la codificación Opus.
Modelo de Seguridad
Cifrado: Todo el audio se cifra con un cifrado configurable por el usuario (predeterminado: AES-256-CBC) antes de la transmisión. Hay 21 cifrados seleccionados disponibles, clasificados desde el más fuerte (256 bits) hasta el adecuado (128 bits). La clave se deriva de un secreto precompartido usando PBKDF2 con 10,000 iteraciones. El cifrado se aplica en la capa de aplicación, independiente del cifrado de transporte de Tor. Los secretos se pasan a OpenSSL mediante descriptores de archivo (-pass fd:3), no mediante argumentos de línea de comandos, por lo que nunca se exponen en la tabla de procesos.
Negociación de cifrado: Ambas partes intercambian nombres de cifrado al conectar y cada vez que se cambia un cifrado a mitad de llamada. Los nombres de cifrado no son secretos (principio de Kerckhoffs). Si los cifrados local y remoto no coinciden, ambas partes ven indicadores rojos en el encabezado de la llamada.
Transporte: Todos los datos se enrutan a través de circuitos de servicios ocultos de Tor. La dirección IP de ninguna de las partes queda expuesta. No hay tráfico en la red clara. La conexión no puede atribuirse a ninguna de las partes por un observador de red.
Resistencia al análisis de tráfico: El modelo de grabar-y-enviar produce patrones de transmisión irregulares (mensajes de longitud variable a intervalos irregulares), que son más difíciles de identificar que la transmisión continua.
Autenticación: El secreto compartido sirve como autenticación implícita. Si ambas partes no tienen el mismo secreto, el descifrado falla y no se reproduce audio. Al conectar, ambas partes intercambian direcciones .onion para la identificación del llamante. El secreto puede cifrarse opcionalmente en reposo con una frase de contraseña; al iniciar, el script solicita la frase de contraseña para desbloquearlo.
Firma de protocolo HMAC (opcional): Cuando está habilitado, cada mensaje del protocolo de cable -- incluidos los señales de control como HANGUP, PTT_START y PING -- se firma con HMAC-SHA256 derivado del secreto compartido. Se incluye un nonce aleatorio por mensaje para que comandos idénticos produzcan firmas únicas. Los nonces vistos se rastrean por llamada y los duplicados se rechazan, evitando ataques de repetición. La configuración de HMAC se congela al inicio de la llamada mediante un archivo en tiempo de ejecución para que tanto la ruta de envío como la de recepción siempre coincidan, incluso si la configuración se alterna a mitad de llamada (los cambios surten efecto en la siguiente llamada). En el extremo receptor, cualquier mensaje con una firma inválida, faltante o repetida se descarta silenciosamente. Esto evita que un atacante que comprometa el circuito de Tor (pero no tenga el secreto compartido) inyecte o repita comandos. Ambas partes deben habilitar HMAC para que las llamadas funcionen. No es compatible con versiones anteriores a la 1.1.3.
Limitaciones:
- El secreto compartido debe intercambiarse fuera de banda a través de un canal seguro (en persona, mensajería cifrada, etc.).
- No hay secreto directo hacia adelante. Si el secreto compartido se ve comprometido, todas las comunicaciones pasadas y futuras que usen ese secreto pueden descifrarse.
- El protocolo no protege contra un punto final comprometido. Si cualquiera de los dispositivos se ve comprometido, el atacante tiene acceso al audio en texto plano.
Seguridad del modo relay: El relay es arquitectónicamente de conocimiento cero. Nunca posee el secreto compartido y no puede descifrar ningún contenido. Los datos de audio fluyen a través de buffers de tubería del kernel (FIFOs) que existen solo en memoria -- nada se escribe en disco. Cuando el relay se detiene, todos los archivos temporales se eliminan. El operador del relay no puede determinar qué se dijo, quiénes son los llamantes, ni leer ningún mensaje. El relay filtra todos los señales de control (HANGUP, ID:, CIPHER:, PTT_START, PTT_STOP) y solo reenvía AUDIO:, MSG: y PING. Un adversario pasivo global podría realizar análisis de correlación de tráfico para asociar llamantes con el relay, pero el contenido de los mensajes permanece opaco.
Capacidad del relay: El cuello de botella principal es el ancho de banda de Tor. El rendimiento de los servicios ocultos de Tor es muy variable y depende de la calidad del circuito, la congestión del relay y la distancia geográfica. Un mensaje de voz típico de 10 segundos es de ~20KB cifrado, y cada transmisión se distribuye a N-1 oyentes.
| Llamantes | Saliente por mensaje | Experiencia esperada |
|---|---|---|
| 2--3 | 20--40KB | Confiable en la mayoría de las conexiones |
| 3--5 | 40--80KB | Buena en circuitos estables, retrasos posibles en datos móviles |
| 5--10 | 80--180KB | Llegando al límite, retrasos notables entre transmisiones |
| 10+ | 180KB+ | No confiable, colas significativas y posible pérdida de mensajes |
La capacidad realista es de 3--5 llamantes para un relay que se ejecuta en un teléfono (Termux), o 5--10 llamantes en una máquina Linux dedicada con una conexión estable. Los relays que se ejecutan en dispositivos móviles enfrentan restricciones adicionales: los datos móviles añaden latencia sobre Tor, Android puede matar procesos de Termux en segundo plano para recuperar memoria, y el consumo de batería aumenta con cada llamante conectado. El ancho de banda del circuito de Tor puede variar de 50KB/s a 500KB/s dependiendo de la calidad de la ruta, y los circuitos pueden degradarse o rotarse a mitad de sesión. El modo de salto único mejora el rendimiento pero no elimina la congestión del relay de Tor. Estas estimaciones asumen el modelo PTT donde solo una persona transmite a la vez -- las transmisiones simultáneas degradarían aún más el rendimiento. Los llamantes en una llamada grupal deberían considerar reducir su tasa de bits de Opus (Configuración → Codificación Opus) para reducir los tamaños de mensaje y aliviar la carga en el relay.
Configuración
Toda la configuración se almacena en .terminalphone/ relativo a la ubicación del script:```
.terminalphone/
tor_data/ Tor data directory and hidden service keys
audio/ Temporary audio files (cleaned on exit)
pids/ Process ID tracking
shared_secret Encrypted shared secret file
torrc Generated Tor configuration
Parámetros de audio predeterminados (definidos al inicio del script):
| Parámetro | Valor predeterminado | Descripción |
|---|---|---|
| `LISTEN_PORT` | 7777 | Puerto TCP para conexiones entrantes |
| `TOR_SOCKS_PORT` | 9050 | Puerto del proxy SOCKS de Tor |
| `OPUS_BITRATE` | 16 | Tasa de bits de codificación Opus en kbps |
| `CIPHER` | aes-256-cbc | Cifrado (configurable mediante Ajustes) |
| `SNOWFLAKE_ENABLED` | 0 | Puente Snowflake para evadir la censura |
| `AUTO_LISTEN` | 0 | Escucha automática de llamadas cuando Tor se inicia |
| `PTT_KEY` | ESPACIO | Tecla de pulsar para hablar (configurable mediante Ajustes) |
| `VOL_PTT` | 0 | PTT con doble pulsación de bajar volumen, solo Termux (experimental) |
| `EXCLUDE_NODES` | (vacío) | Lista de países ExcludeNodes de Tor (p. ej. `{US},{GB}`) |
| `HMAC_AUTH` | 0 | Firmar todos los mensajes del protocolo con HMAC (opcional, ambos lados deben coincidir) |
| `OVERWRITE_DELETE` | 0 | Sobrescribir archivos temporales con datos aleatorios antes de eliminarlos (desactivado por defecto) |
| `PTT_CHIME` | off | Ajuste predefinido de aviso sonoro de PTT (off, tone, double, chirp, ding, click, custom) |
| `SINGLE_HOP` | 0 | Modo Tor de un solo salto para menor latencia (desactiva el anonimato del servidor) |
| `SAMPLE_RATE` | 8000 | Frecuencia de muestreo de audio en Hz |
| `CHUNK_DURATION` | 1 | Duración de los fragmentos de prueba de audio en segundos |
---
## Solución de problemas
**Tor no logra arrancar (bootstrap):**
Revisa el registro de Tor en `.terminalphone/tor_data/tor.log`. Las causas comunes incluyen desviación del reloj, restricciones de red que bloquean Tor u otra instancia de Tor usando el mismo puerto SOCKS.
**Sin audio en Termux:**
Verifica que la aplicación Termux:API esté instalada desde F-Droid (no solo el paquete `termux-api`). Concede permisos de micrófono a la aplicación Termux:API en los ajustes de Android. Ejecuta la prueba de bucle de retorno de audio (opción 5) para verificarlo.
**La instalación de ffmpeg falla en Termux:**
Ejecuta `pkg upgrade` antes de instalar las dependencias. El instalador lo hace automáticamente, pero si instalaste los paquetes manualmente, las bibliotecas compartidas desactualizadas pueden causar errores de enlace.
**La prueba de audio funciona pero las llamadas son silenciosas:**
Confirma que ambas partes usan el mismo secreto compartido. Los secretos no coincidentes provocarán un fallo de descifrado sin mensaje de error: la llamada se conecta pero no se escucha audio.
**El puente Snowflake tarda en conectarse:**
Snowflake enruta el tráfico a través de proxies WebRTC, lo que añade tiempo adicional de arranque. Es normal que Tor tarde 30--60 segundos (o más) en alcanzar el 100% cuando Snowflake está habilitado. El script mostrará un aviso de paciencia durante el arranque.
**El primer arranque de Tor es lento:**
En el primer lanzamiento, Tor debe descargar el consenso completo de la red desde cero, lo que puede tardar uno o dos minutos. El script lo detecta y muestra un aviso. El tiempo de espera de arranque se extiende automáticamente de 120 a 300 segundos en la primera ejecución. Los lanzamientos posteriores usan datos de consenso en caché y son mucho más rápidos.
**Colgar no vuelve al menú:**
Si el script se bloquea después de pulsar Q, pulsa Ctrl+C para forzar la limpieza y volver al shell.
**`Cannot install under Rosetta 2 in ARM default prefix` en macOS:**
Esto ocurre en Apple Silicon cuando la terminal se ejecuta bajo Rosetta 2 (un proceso `x86_64`) pero Homebrew reside en el prefijo ARM nativo (`/opt/homebrew`). El instalador de dependencias (opción **7**) ahora lo detecta y vuelve a ejecutar `brew` automáticamente bajo `arch -arm64`. Si instalas los paquetes manualmente, prefíjalos tú mismo: `arch -arm64 brew install <paquete>`. Alternativamente, lanza el script de forma nativa con `arch -arm64 bash terminalphone.sh`.
---
[MIRROR V1.0.0](https://bin.disroot.org/?e1356291b098cb75#FMQ4gxFwgdr3rjR1dpGS2csLmDPzDEkQW16fQ5P2Vt4y)
[MIRROR V1.0.1](https://bin.disroot.org/?d3bc0b8976113f58#AuUm4ev4vfeVmPyrh2KjAdhDP6WN4UX6yKQh9ERGD5Qt)
[MIRROR V1.0.2](https://bin.disroot.org/?6bc5b2fd046de1d7#G7TmnytrMeaM5AZYWth6BjjdqUb9RDf3K9erHUExKcGX)
[MIRROR V1.0.3](https://bin.disroot.org/?c5010f039e4693fd#Brp1w7LRQH9d5Ye5npZDPxNVR855SW9QUAk9cJaUuLYX)
[MIRROR V1.0.4](https://bin.disroot.org/?1831f6b78e349142#7zaAMVPNJL3MfbGJzjtm6cCPcvQftf4ULXupdne5dRKw)
[MIRROR V1.0.5](https://bin.disroot.org/?edfcfc844987ed03#56LuBbqbkfNDXfHpydyaB3VcWYhYenX18dtSvNumERY9)
[MIRROR V1.0.6](https://bin.disroot.org/?6c7b4774108b0c1c#GQPst46zjAYidndmNvytforX7MK2LyHanL4d829vVcv4)
[MIRROR V1.0.7](https://bin.disroot.org/?047003637623b4fa#EwmaysciDpiDkht8xV7ce3QcR9oxFXaxSikh4cLheXBB)
[MIRROR V1.0.8](https://bin.disroot.org/?06e38bd64e6fbdad#88MYs3dmq9rSMkmocpW3NYaaG4YfSdRCc9LJnEEzqGYp)
[MIRROR V1.0.9](https://bin.disroot.org/?950218a9a7c71c66#E7Z94VCGBZozrfXYhGwKyAdMeTxuavg92tA1pn2DbrrB)
[MIRROR V1.1.0](https://bin.disroot.org/?0b0da14f31521b3a#B1c23J8xFoZZKErvGG28PgbtfgtMUcDABWmQEoSZfXgh)
[MIRROR V1.1.1](https://bin.disroot.org/?d8e2d4f0300eb5af#9Y1C8CkcH9jAmv1fh4GZs1yYpJmWCG5xG3SvDYdwnJam)
[MIRROR V1.1.2](https://bin.disroot.org/?b1059616f880925f#8ef2oscZXUkPAsJZwGfWvLPQagVAk5GgW4DyssmLvQpG)
[MIRROR V1.1.3](https://bin.disroot.org/?b02658801518aaa7#JE6CsBLWUwAnTdBqeHgeXL7QF5UExgi9rnygcfyMZjCJ)
[MIRROR V1.1.4](https://bin.disroot.org/?d31248fc44c287a0#HQELFWFEMpM9kfTZSGDXTdGFMVKTejox5CajF9Vm4Www)
[MIRROR V1.1.5](https://bin.disroot.org/?284b723ed6aad15f#8VCrrri6yRpdg3uVDSY94wpx7LYkw5uYhm4Vbhka83sM)
[MIRROR V1.1.5.1](https://bin.disroot.org/?26aaef1eff20c271#4GxQQPSDhrszTu1RmERySNVqD2fZW5GZwm3JeL1parpB)
[MIRROR V1.1.6](https://bin.disroot.org/?ae8270578cd9e081#BbcDLU49XqhecvwviHRcdfrZ4vhKdL2AMeKaT5v9oLV1)
[MIRROR V1.1.7](https://bin.disroot.org/?457e4308abe582d8#B9LJG88rmUwrGHHuCof8WpE8CXGmkc2tyrXXicEiJFWk)
[MIRROR V1.1.8](https://bin.disroot.org/?ef81486d3a5141a1#EN1YuLPqqs2FAEsvXkGbZdiWXt3vxvGTw845C4QsYmSn)
[MIRROR V1.1.9](https://bin.disroot.org/?fbcca457ac58964f#DsUCbJwgBRhnL1FK3a6VpwE5sCRNProXvk86u7RpWQM9)
---
## Licencia
MIT