
Comunicação de voz por push-to-talk e texto criptografada através de serviços ocultos Tor com criptografia de ponta a ponta, cifras configuráveis, modo de retransmissão para chamadas em grupo e destruição de dados antiforense.
# TerminalPhone
Comunicação de voz push-to-talk criptografada através de serviços ocultos Tor.
TerminalPhone é um único script Bash autocontido que fornece comunicação de voz e texto anônima e criptografada de ponta a ponta entre duas ou mais partes através da rede Tor. Funciona como um walkie-talkie: você grava uma mensagem de voz, e ela é comprimida, criptografada e transmitida à parte remota como uma única unidade. Você também pode enviar mensagens de texto criptografadas durante uma chamada. Sem infraestrutura de servidor, sem contas, sem números de telefone. Seu endereço `.onion` do serviço oculto Tor é sua identidade.
---
## Índice
- [Recursos](#recursos)
- [Instalação](#instalação)
- [Linux](#linux)
- [macOS](#macos)
- [Termux (Android)](#termux-android)
- [Início Rápido](#início-rápido)
- [Uso](#uso)
- [Opções do Menu](#opções-do-menu)
- [Controles Durante a Chamada](#controles-durante-a-chamada)
- [Modo CLI](#modo-cli)
- [Como Funciona](#como-funciona)
- [Modelo de Segurança](#modelo-de-segurança)
- [Configuração](#configuração)
- [Solução de Problemas](#solução-de-problemas)
- [Licença](#licença)
---
## Recursos
- **Modo Walkie-Talkie Push-to-Talk** -- Grave uma mensagem de voz completa e transmita-a ao soltar.
- **Chat Criptografado Durante a Chamada** -- Envie e receba mensagens de texto criptografadas durante uma chamada. Pressione `T` para digitar uma mensagem.
- **Identificação de Chamada** -- Ambas as partes trocam automaticamente endereços `.onion` ao conectar. O endereço remoto é exibido no cabeçalho da chamada.
- **Detecção Automática de Desligamento** -- Quando uma parte desliga, a outra é notificada imediatamente e a chamada termina automaticamente.
- **Cifra Configurável** -- Escolha entre 21 cifras selecionadas, classificadas por força (256 bits → 128 bits). Inclui as famílias AES, ChaCha20, Camellia e ARIA. Cifras fracas (DES, RC4, modos ECB) são excluídas.
- **Negociação de Cifra em Tempo Real** -- Ambas as partes trocam informações de cifra ao conectar. O cabeçalho da chamada mostra as cifras local e remota com indicadores verde (correspondência) ou vermelho (incompatibilidade), atualizados em tempo real.
- **Configurações Durante a Chamada** -- Pressione `S` durante uma chamada para acessar as configurações. Altere sua cifra em tempo real; a exibição da parte remota é atualizada automaticamente.
- **Informações da Bridge Snowflake** -- Ao usar Snowflake para contornar censura, a página da chamada exibe o nome do descritor da bridge, a impressão digital e o status da conexão de transporte extraídos dos logs do Tor.
- **Auto-Escuta** -- Quando habilitado, um ouvinte em segundo plano inicia automaticamente quando o Tor é inicializado. Chamadas recebidas são detectadas e aceitas a partir do menu principal sem precisar selecionar manualmente "Ouvir chamadas". Após uma chamada terminar, o ouvinte reinicia.
- **Tecla PTT Configurável** -- Altere a tecla push-to-talk da barra de espaço padrão para qualquer tecla através do menu Configurações.
- **Estatísticas de Mensagens** -- A tela de chamada exibe o tamanho do payload criptografado para mensagens enviadas e recebidas, atualizado no local.
- **Status PTT Remoto** -- A tela de chamada mostra um indicador estático para o estado da parte remota: "Idle" (verde) ou "● Recording" (vermelho). Reinicia imediatamente quando dados de áudio chegam, antes do início da reprodução.
- **Chime PTT** -- Som de notificação opcional quando a parte remota começa a gravar. Cinco presets integrados (tone, double, chirp, ding, click) gerados com sox, além da capacidade de gravar um chime personalizado de 2 segundos. Configurável via Configurações.
- **Animação de Conexão** -- Ao chamar um endereço remoto, uma animação cíclica é reproduzida até que a interface de chamada carregue.
- **Modificador de Voz** -- Aplique efeitos de voz ao áudio de saída. Inclui 6 presets (deep, high, robot, echo, whisper) e um modo personalizado totalmente configurável com pitch shift, overdrive, flanger, echo, filtro highpass e tremolo. Os efeitos são processados usando sox antes da codificação Opus.
- **PTT por Volume (Termux)** -- Modo experimental que permite tocar duas vezes no botão Volume Down para alternar a gravação, mesmo quando o Termux está em segundo plano. Requer `jq` (instalado sob demanda). O volume é restaurado automaticamente após cada acionamento.
- **Serviço Oculto Tor** -- Cada instância executa seu próprio serviço oculto Tor. Seu endereço `.onion` serve como um endpoint permanente e roteável. Sem necessidade de encaminhamento de portas ou IP público.
- **Criptografia de Ponta a Ponta** -- Todo o áudio e texto é criptografado usando uma cifra configurável (padrão: AES-256-CBC) com derivação de chave PBKDF2 a partir de um segredo pré-compartilhado antes de entrar na rede Tor.
- **Segredo Protegido por Passphrase** -- O segredo compartilhado pode ser criptografado em repouso usando uma passphrase escolhida pelo usuário (AES-256-CBC, 100.000 iterações PBKDF2). Segredos em texto simples existentes são detectados automaticamente com uma oferta de migração.
- **Baixa Largura de Banda** -- Codec Opus a 16kbps, 8kHz mono. Uma mensagem de voz típica de 10 segundos tem menos de 20KB, bem dentro da capacidade do Tor.
- **Compartilhamento por QR Code** -- A opção 3 pode exibir seu endereço `.onion` como um QR code escaneável no terminal. Se `qrencode` não estiver instalado, você será solicitado a instalá-lo. O QR code é renderizado no buffer de tela alternativo e é destruído quando descartado. Uma nota avisa que alguns scanners de QR code adicionam automaticamente `http://`; este prefixo é removido automaticamente ao discar.
- **Arquivos Temporários Opacos** -- Todos os arquivos temporários usam extensões genéricas `.tmp` e identificadores hexadecimais aleatórios. Nenhum tipo de arquivo ou metadado de temporização é vazado para o sistema de arquivos.
- **Exibição de Saltos do Circuito** -- Exibição opcional do caminho do seu circuito Tor durante as chamadas, mostrando nomes de relays e nomes completos de países. Atualiza automaticamente a cada 60 segundos. Configurável via Configurações → Configurações do Tor.
- **Excluir Países** -- Exclua países específicos dos seus circuitos Tor. Presets para as alianças Five Eyes, Nine Eyes e Fourteen Eyes, ou insira códigos de país personalizados. Usa `ExcludeNodes` com `StrictNodes` no torrc.
- **Autenticação de Protocolo HMAC** -- Assinatura HMAC-SHA256 opcional de todas as mensagens de protocolo (voz, texto, sinais de controle) usando o segredo compartilhado. Um nonce aleatório é incluído por mensagem, e nonces vistos são rastreados para rejeitar repetições. Mensagens não assinadas, forjadas ou repetidas são descartadas silenciosamente. O estado HMAC é congelado no início da chamada para evitar dessincronização durante a chamada. Configurável via Configurações → Segurança.
- **Sobrescrever Antes de Excluir** -- Alternância opcional em Configurações → Segurança que sobrescreve cada arquivo temporário com dados aleatórios de `/dev/urandom` antes da exclusão. O tamanho do arquivo é lido, essa quantidade de bytes de dados aleatórios é escrita sobre o arquivo com `dd` usando `conv=notrunc`, a escrita é sincronizada com o dispositivo de armazenamento com `sync`, e então o arquivo é removido com `rm`. Cobre todos os arquivos sensíveis em tempo de execução: gravações PCM brutas, áudio codificado em Opus, payloads criptografados, áudio e chat de entrada descriptografados, intermediários de efeitos de voz, material de chave de cifra e HMAC, logs de nonce, flags de sessão, arquivos PID, named pipes, chaves de serviço oculto Tor em rotação e dados de sessão de relay. Para diretórios, todos os arquivos dentro são sobrescritos recursivamente. Uma opção de teste integrada cria um arquivo de amostra, mostra o conteúdo original em texto simples e hexadecimal, sobrescreve-o e exibe o hexadecimal sobrescrito para que o usuário possa confirmar visualmente que os dados foram destruídos. Desativado por padrão — para a maioria dos usuários, o `rm` padrão é perfeitamente adequado. Os arquivos temporários do TerminalPhone são pequenos e de curta duração, e o espaço em disco é normalmente reutilizado rapidamente pela atividade normal do sistema. Este recurso é para usuários que desejam uma camada extra de proteção contra recuperação forense. Nota: em SSDs e armazenamento flash, o wear leveling significa que a sobrescrita pode atingir células NAND físicas diferentes — a criptografia de disco completo é a única defesa confiável em mídia flash. Em HDDs tradicionais, a sobrescrita substitui os dados no mesmo local físico e é eficaz contra toda recuperação baseada em software.
- **Modo Relay (Bridge de Grupo)** -- Execute um relay zero-knowledge que faz a ponte entre N chamadores anônimos. O relay encaminha áudio e chat criptografados sem descriptografar, não requer segredo compartilhado nem hardware de áudio. Os clientes detectam automaticamente o modo relay via handshake `RELAY:1` e exibem a contagem de chamadores do grupo em tempo real. A saída de um chamador não desconecta os outros. O painel do operador mostra a contagem de chamadores, tempo de atividade e throughput de dados.
- **Modo Tor de Salto Único** -- Modo opcional de latência reduzida para operadores de relay. Usa 1 salto Tor em vez de 3 para o serviço oculto, sacrificando o anonimato do servidor por menor latência. Ideal para operadores de relay que não precisam ocultar seu próprio IP.
- **Configuração de Portas** -- Configure a porta de escuta e a porta SOCKS juntas via Configurações → Configurações do Tor. Permite executar múltiplas instâncias no mesmo dispositivo com processos Tor separados. Principalmente útil para operadores de relay que também desejam participar da própria chamada de grupo -- execute o relay em uma instância, altere a porta SOCKS em uma segunda instância e disque como chamador.
- **Multiplataforma** -- Funciona em distribuições Linux padrão, macOS e Android via Termux. Backends de áudio específicos da plataforma são tratados de forma transparente.
- **Sem Necessidade de Root** -- A entrada PTT usa o modo raw do terminal. Nenhuma permissão especial ou módulo de kernel é necessário.
- **Script Único** -- Um arquivo Bash. Sem sistema de build, sem runtime, sem framework.
---
## Instalação
### Linux
**Distribuições suportadas:** Debian/Ubuntu (apt), Fedora/RHEL (dnf), Arch (pacman).``` bash
git clone https://gitlab.com/here_forawhile/terminalphone.git
cd terminalphone
bash terminalphone.sh
```
Selecione a opção **7** no menu para instalar todas as dependências automaticamente. Os seguintes pacotes serão instalados:
| Pacote | Finalidade |
|---|---|
| `tor` | Roteamento onion e serviço oculto |
| `opus-tools` | Compressão de voz (codec Opus) |
| `sox` | Utilitários de processamento de áudio |
| `socat` | Relay TCP bidirecional através do proxy SOCKS do Tor |
| `openssl` | Criptografia e descriptografia AES-256-CBC |
| `alsa-utils` | Gravação e reprodução de áudio (`arecord`, `aplay`) |
### macOS``` bash
git clone https://gitlab.com/here_forawhile/terminalphone.git
cd terminalphone
bash terminalphone.sh
```
Selecione a opção **7** para instalar todas as dependências automaticamente. Se o [Homebrew](https://brew.sh) não estiver instalado, o script irá instalá-lo primeiro e, em seguida, instalar os seguintes pacotes:
| Pacote | Finalidade |
|---|---|
| `tor` | Roteamento onion e serviço oculto |
| `opus-tools` | Compressão de voz (codec Opus) |
| `sox` | Gravação e reprodução de áudio (`rec`, `play`) |
| `socat` | Relay TCP bidirecional através do proxy SOCKS do Tor |
| `openssl` | Criptografia e descriptografia AES-256-CBC |
**Nota:** O macOS usa `sox` tanto para gravação (`rec`) quanto para reprodução (`play`) em vez do ALSA. Nenhum pacote de áudio adicional é necessário.
**Apple Silicon (M1/M2/M3+):** Se o seu terminal estiver sendo executado sob o Rosetta 2 (um processo `x86_64`) enquanto o Homebrew está instalado no prefixo ARM nativo (`/opt/homebrew`), o `brew install` normalmente falha com `Cannot install under Rosetta 2 in ARM default prefix`. O instalador de dependências agora detecta isso e reexecuta automaticamente o Homebrew sob `arch -arm64`, então a opção **7** funciona independentemente de como o script foi iniciado.
### Termux (Android)
O TerminalPhone suporta dispositivos Android através do Termux. Devido à arquitetura de áudio em sandbox do Android, dois componentes adicionais são necessários.
**Passo 1: Instalar o Termux**
Instale o [Termux](https://f-droid.org/en/packages/com.termux/) a partir do F-Droid. Não use a versão da Play Store, pois está desatualizada e não recebe mais atualizações.
**Passo 2: Instalar o aplicativo Termux:API**
Instale o [Termux:API](https://f-droid.org/en/packages/com.termux.api/) a partir do F-Droid. Este é um aplicativo Android separado (não um pacote do Termux) que fornece uma ponte entre o Termux e as APIs do sistema Android. O TerminalPhone requer ele para acessar o microfone do dispositivo e a reprodução de mídia.
Sem o aplicativo Termux:API instalado no dispositivo, os comandos `termux-microphone-record` e `termux-media-player` não funcionarão, e a gravação e reprodução de áudio falharão silenciosamente.
Após instalar o aplicativo Termux:API, conceda a ele permissões de microfone quando solicitado.
**Passo 3: Instalar o pacote Termux:API dentro do Termux**```bash
pkg install termux-api
```
Isso instala os utilitários de linha de comando que se comunicam com o aplicativo Termux:API.
**Passo 4: Executar o TerminalPhone**```bash
git clone https://gitlab.com/here_forawhile/terminalphone.git
cd terminalphone
bash terminalphone.sh
```
Selecione a opção **7** para instalar todas as dependências restantes. O instalador executará `pkg upgrade` primeiro para resolver quaisquer problemas de vinculação de pacotes, depois instalará `tor`, `opus-tools`, `sox`, `socat`, `openssl-tool`, `ffmpeg` e `termux-api`.
**Dependências específicas do Termux:**
| Pacote | Finalidade |
|---|---|
| `termux-api` | Ponte CLI para o microfone e reprodutor de mídia do Android |
| `ffmpeg` | Converte as gravações M4A do Android para PCM bruto para codificação Opus |
---
## Início Rápido```
1. Run: bash terminalphone.sh
2. Install deps: Select option 7
3. Start Tor: Select option 8 (wait for 100% bootstrap)
4. Set shared secret: Select option 4 (both parties must use the same secret)
5. 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 as partes devem ter o Tor em execução e o mesmo segredo compartilhado configurado antes de iniciar uma chamada.
---
## Uso
### Opções do Menu```
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 a Chamada
**Modo Full Duplex (WebSockets):**
| Tecla | Ação |
|---|---|
| M | Silenciar / Reativar microfone. |
| T | Enviar uma mensagem de texto criptografada durante a chamada. |
| Q | Desligar e retornar ao menu. |
**Modo Push-to-Talk (Linux / macOS):**
| Tecla | Ação |
|---|---|
| Segurar SPACE | Gravar mensagem de voz. Envia automaticamente ao soltar. |
| T | Enviar uma mensagem de texto criptografada. |
| S | Abrir configurações durante a chamada (alterar cifra, ajustar qualidade). |
| Q | Desligar e retornar ao menu. |
**Modo Push-to-Talk (Termux):**
O teclado virtual do Android envia eventos de tecla ao soltar, não ao pressionar. O TerminalPhone se adapta usando o modo de alternância no Termux.
| Tecla | Ação |
|---|---|
| Tocar SPACE | Iniciar gravação. Tocar novamente para parar e enviar. |
| T | Enviar uma mensagem de texto criptografada. |
| S | Abrir configurações durante a chamada (alterar cifra, ajustar qualidade). |
| Q | Desligar e retornar ao menu. |
| Vol Down ×2 | Alternar gravação pelo botão de volume (requer Volume PTT habilitado nas configurações). |
### 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)
```
## Como Funciona
O TerminalPhone usa um modelo de gravar e enviar. Quando você ativa o PTT, o microfone grava continuamente até você soltar. A gravação completa é então processada através do seguinte pipeline:```
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
```
O protocolo de rede é texto baseado em linhas sobre uma conexão TCP:
| Mensagem | Descrição |
|---|---|
| `ID:<onion>` | Identificação do chamador -- endereço `.onion` do remetente |
| `CIPHER:<name>` | Cifra de criptografia do remetente. Trocada na conexão e na alteração. |
| `PTT_START` | O remetente começou a gravar |
| `PTT_STOP` | O remetente terminou; o áudio segue ou já foi enviado |
| `AUDIO:<base64>` | Mensagem de áudio criptografada completa |
| `MSG:<base64>` | Mensagem de texto criptografada |
| `HANGUP` | O remetente está se desconectando |
| `PING` | Sinal de keepalive |
| `RELAY:1` | Saudação do relay -- enviada pelo relay na conexão, ativa o modo de grupo |
| `GROUP:<n>` | Atualização do tamanho do grupo -- transmitida pelo relay quando chamadores entram ou saem |
No Termux, uma etapa adicional de conversão lida com o formato de gravação M4A nativo do Android, usando `ffmpeg` para converter para PCM bruto antes da codificação Opus.
---
## Modelo de Segurança
**Criptografia:** Todo o áudio é criptografado com uma cifra configurável pelo usuário (padrão: AES-256-CBC) antes da transmissão. 21 cifras curadas estão disponíveis, classificadas da mais forte (256 bits) à adequada (128 bits). A chave é derivada de um segredo pré-compartilhado usando PBKDF2 com 10.000 iterações. A criptografia é aplicada na camada de aplicação, independente da criptografia de transporte do Tor. Os segredos são passados ao OpenSSL via descritores de arquivo (`-pass fd:3`), não como argumentos de linha de comando, de modo que nunca são expostos na tabela de processos.
**Negociação de cifra:** Ambas as partes trocam os nomes das cifras na conexão e sempre que uma cifra é alterada durante a chamada. Os nomes das cifras não são secretos (princípio de Kerckhoffs). Se as cifras local e remota não coincidirem, ambas as partes veem indicadores vermelhos no cabeçalho da chamada.
**Transporte:** Todos os dados são roteados através de circuitos de serviço oculto Tor. O endereço IP de nenhuma das partes é exposto. Não há tráfego clearnet. A conexão não pode ser atribuída a nenhuma das partes por um observador de rede.
**Resistência à análise de tráfego:** O modelo de gravar-e-enviar produz padrões de transmissão irregulares (mensagens de comprimento variável em intervalos irregulares), que são mais difíceis de identificar do que streaming contínuo.
**Autenticação:** O segredo compartilhado serve como autenticação implícita. Se ambas as partes não tiverem o mesmo segredo, a descriptografia falha e nenhum áudio é reproduzido. Na conexão, ambas as partes trocam endereços `.onion` para identificação do chamador. O segredo pode opcionalmente ser criptografado em repouso com uma passphrase; na inicialização, o script solicita a passphrase para desbloqueá-lo.
**Assinatura do protocolo HMAC (opcional):** Quando ativada, cada mensagem do protocolo de rede -- incluindo sinais de controle como HANGUP, PTT_START e PING -- é assinada com HMAC-SHA256 derivado do segredo compartilhado. Um nonce aleatório é incluído por mensagem para que comandos idênticos produzam assinaturas únicas. Nonces vistos são rastreados por chamada e duplicatas são rejeitadas, prevenindo ataques de replay. A configuração de HMAC é congelada no início da chamada através de um arquivo de runtime para que os caminhos de envio e recebimento sempre concordem, mesmo se a configuração for alternada durante a chamada (as alterações entram em vigor na próxima chamada). No lado receptor, qualquer mensagem com assinatura inválida, ausente ou repetida é silenciosamente descartada. Isso impede que um atacante que comprometa o circuito Tor (mas não possui o segredo compartilhado) injete ou reproduza comandos. Ambas as partes devem ativar o HMAC para que as chamadas funcionem. Não compatível com versões anteriores à 1.1.3.
**Limitações:**
- O segredo compartilhado deve ser trocado fora de banda através de um canal seguro (pessoalmente, mensagens criptografadas, etc.).
- Não há sigilo direto (forward secrecy). Se o segredo compartilhado for comprometido, todas as comunicações passadas e futuras usando esse segredo podem ser descriptografadas.
- O protocolo não protege contra um endpoint comprometido. Se qualquer um dos dispositivos for comprometido, o atacante tem acesso ao áudio em texto claro.
**Segurança do modo relay:** O relay é arquiteturalmente zero-knowledge. Ele nunca possui o segredo compartilhado e não pode descriptografar nenhum conteúdo. Os dados de áudio fluem através de buffers de pipe do kernel (FIFOs) que existem apenas na memória -- nada é escrito em disco. Quando o relay para, todos os arquivos temporários são excluídos. O operador do relay não pode determinar o que foi dito, quem são os chamadores ou ler quaisquer mensagens. O relay filtra todos os sinais de controle (HANGUP, ID:, CIPHER:, PTT_START, PTT_STOP) e encaminha apenas AUDIO:, MSG: e PING. Um adversário passivo global poderia realizar análise de correlação de tráfego para associar chamadores ao relay, mas o conteúdo das mensagens permanece opaco.
**Capacidade do relay:** O principal gargalo é a largura de banda do Tor. A taxa de transferência do serviço oculto Tor é altamente variável e depende da qualidade do circuito, congestionamento do relay e distância geográfica. Uma mensagem de voz típica de 10 segundos tem ~20KB criptografados, e cada transmissão se ramifica para N-1 ouvintes.
| Chamadores | Saída por mensagem | Experiência esperada |
|---|---|---|
| 2--3 | 20--40KB | Confiável na maioria das conexões |
| 3--5 | 40--80KB | Bom em circuitos estáveis, atrasos possíveis em dados móveis |
| 5--10 | 80--180KB | No limite, atrasos perceptíveis entre transmissões |
| 10+ | 180KB+ | Não confiável, enfileiramento significativo e possível perda de mensagens |
A capacidade realista é de **3--5 chamadores** para um relay rodando em um telefone (Termux), ou **5--10 chamadores** em uma máquina Linux dedicada com uma conexão estável. Relays rodando em dispositivos móveis enfrentam restrições adicionais: dados móveis adicionam latência sobre o Tor, o Android pode encerrar processos Termux em segundo plano para recuperar memória, e o consumo de bateria aumenta com cada chamador conectado. A largura de banda do circuito Tor pode variar de 50KB/s a 500KB/s dependendo da qualidade do caminho, e os circuitos podem degradar ou rotacionar no meio da sessão. O modo de salto único melhora a taxa de transferência, mas não elimina o congestionamento do relay Tor. Essas estimativas assumem o modelo PTT onde apenas uma pessoa transmite por vez -- transmissões simultâneas degradariam ainda mais o desempenho. Chamadores em uma chamada em grupo devem considerar reduzir seu bitrate Opus (Configurações → Codificação Opus) para reduzir os tamanhos das mensagens e aliviar a carga no relay.
---
## Configuração
Toda a configuração é armazenada em `.terminalphone/` relativo à localização do 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 áudio padrão (definidos no topo do script):
| Parâmetro | Padrão | Descrição |
|---|---|---|
| `LISTEN_PORT` | 7777 | Porta TCP para conexões de entrada |
| `TOR_SOCKS_PORT` | 9050 | Porta do proxy SOCKS do Tor |
| `OPUS_BITRATE` | 16 | Taxa de bits da codificação Opus em kbps |
| `CIPHER` | aes-256-cbc | Cifra de criptografia (configurável via Configurações) |
| `SNOWFLAKE_ENABLED` | 0 | Ponte Snowflake para contornar censura |
| `AUTO_LISTEN` | 0 | Escuta automática de chamadas quando o Tor inicia |
| `PTT_KEY` | SPACE | Tecla push-to-talk (configurável via Configurações) |
| `VOL_PTT` | 0 | PTT por toque duplo no volume, apenas Termux (experimental) |
| `EXCLUDE_NODES` | (vazio) | Lista de países para ExcludeNodes do Tor (ex.: `{US},{GB}`) |
| `HMAC_AUTH` | 0 | Assina com HMAC todas as mensagens do protocolo (opcional, ambos os lados devem corresponder) |
| `OVERWRITE_DELETE` | 0 | Sobrescreve arquivos temporários com dados aleatórios antes da exclusão (desativado por padrão) |
| `PTT_CHIME` | off | Predefinição do som de notificação PTT (off, tone, double, chirp, ding, click, custom) |
| `SINGLE_HOP` | 0 | Modo Tor de salto único para menor latência (desativa o anonimato do servidor) |
| `SAMPLE_RATE` | 8000 | Taxa de amostragem de áudio em Hz |
| `CHUNK_DURATION` | 1 | Duração dos blocos de teste de áudio em segundos |
---
## Solução de problemas
**O Tor falha ao inicializar:**
Verifique o log do Tor em `.terminalphone/tor_data/tor.log`. Causas comuns incluem desvio de relógio, restrições de rede que bloqueiam o Tor ou outra instância do Tor usando a mesma porta SOCKS.
**Sem áudio no Termux:**
Verifique se o aplicativo Termux:API está instalado a partir do F-Droid (não apenas o pacote `termux-api`). Conceda permissões de microfone ao aplicativo Termux:API nas configurações do Android. Execute o teste de loopback de áudio (opção 5) para verificar.
**A instalação do ffmpeg falha no Termux:**
Execute `pkg upgrade` antes de instalar as dependências. O instalador faz isso automaticamente, mas se você instalou pacotes manualmente, bibliotecas compartilhadas desatualizadas podem causar erros de vinculação.
**O teste de áudio funciona, mas as chamadas ficam silenciosas:**
Confirme que ambas as partes estão usando o mesmo segredo compartilhado. Segredos incompatíveis resultarão em falha de descriptografia sem mensagem de erro -- a chamada conecta, mas nenhum áudio é ouvido.
**A ponte Snowflake demora para conectar:**
O Snowflake roteia o tráfego através de proxies WebRTC, o que adiciona tempo extra de inicialização. É normal que o Tor leve 30--60 segundos (ou mais) para atingir 100% quando o Snowflake está ativado. O script exibirá um aviso de paciência durante a inicialização.
**A primeira inicialização do Tor é lenta:**
Na primeira execução, o Tor precisa baixar o consenso completo da rede do zero, o que pode levar um ou dois minutos. O script detecta isso e exibe um aviso. O tempo limite de inicialização é estendido automaticamente de 120 para 300 segundos na primeira execução. As execuções subsequentes usam dados de consenso em cache e são muito mais rápidas.
**Desligar não retorna ao menu:**
Se o script travar após pressionar Q, pressione Ctrl+C para forçar a limpeza e retornar ao shell.
**`Cannot install under Rosetta 2 in ARM default prefix` no macOS:**
Isso acontece em Apple Silicon quando o terminal está sendo executado sob Rosetta 2 (um processo `x86_64`), mas o Homebrew está no prefixo ARM nativo (`/opt/homebrew`). O instalador de dependências (opção **7**) agora detecta isso e executa novamente o `brew` automaticamente sob `arch -arm64`. Se você estiver instalando pacotes manualmente, prefixe-os você mesmo: `arch -arm64 brew install <pkg>`. Como alternativa, inicie o script nativamente com `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)
---
## Licença
MIT