
terminalphone — Updated!
Зашифрованная голосовая связь (нажми и говори) и текстовая коммуникация через скрытые сервисы Tor со сквозным шифрованием, настраиваемыми шифрами, релейным режимом для групповых вызовов и анти-криминалистическим уничтожением данных.
TerminalPhone
Зашифрованная голосовая связь в режиме push-to-talk через скрытые сервисы Tor.
TerminalPhone — это единый автономный Bash-скрипт, обеспечивающий анонимную сквозную зашифрованную голосовую и текстовую связь между двумя и более сторонами через сеть Tor. Он работает как рация: вы записываете голосовое сообщение, и оно сжимается, шифруется и передаётся удалённой стороне как единый блок. Вы также можете отправлять зашифрованные текстовые сообщения во время вызова. Никакой серверной инфраструктуры, никаких аккаунтов, никаких телефонных номеров. Адрес вашего скрытого сервиса Tor .onion — это ваша идентичность.
Содержание
- Возможности
- Установка
- Быстрый старт
- Использование
- Как это работает
- Модель безопасности
- Конфигурация
- Устранение неполадок
- Лицензия
Возможности
- Полнодуплексная потоковая передача голоса (WebSockets) — потоковая передача двустороннего аудио в реальном времени через скрытые сервисы Tor с использованием WebSockets. Обе стороны могут говорить и слушать одновременно, не удерживая пробел. Настраивается через Настройки (пункт 9) со встроенным выбором маршрутизации:
- Стандартный режим (6 переходов): полная маршрутизация 3 перехода у звонящего + 3 перехода у скрытого сервиса, сохраняющая максимальную анонимность обеих сторон (~800–1200 мс RTT).
- Турбо-режим (один переход): сокращает маршрутизацию слушателя до 1 перехода (~450–700 мс RTT) для плавного разговорного голоса, с явными предупреждениями о компромиссах (анонимность расположения сервера отключена у слушателя; исходящий SOCKS-клиент отключён у узла слушателя).
- Режим рации Push-to-Talk — запись полного голосового сообщения и передача его при отпускании клавиши.
- Зашифрованный чат во время вызова — отправка и получение зашифрованных текстовых сообщений во время вызова. Нажмите
T, чтобы ввести сообщение. - Определитель звонящего — обе стороны автоматически обмениваются адресами
.onionпри подключении. Удалённый адрес отображается в заголовке вызова. - Автоматическое завершение вызова — когда одна сторона завершает вызов, другая получает немедленное уведомление, и вызов завершается автоматически.
- Настраиваемый шифр — выбор из 21 подобранного шифра, ранжированных по стойкости (256-бит → 128-бит). Включает семейства AES, ChaCha20, Camellia и ARIA. Слабые шифры (DES, RC4, режимы ECB) исключены.
- Живое согласование шифра — обе стороны обмениваются информацией о шифре при подключении. В заголовке вызова отображаются локальный и удалённый шифры с индикаторами зелёного (совпадение) или красного (несовпадение) цвета, обновляемые в реальном времени.
- Настройки во время вызова — нажмите
Sво время вызова, чтобы получить доступ к настройкам. Меняйте шифр на лету; отображение у удалённой стороны обновится автоматически. - Информация о мосте Snowflake — при использовании Snowflake для обхода цензуры страница вызова отображает имя дескриптора моста, отпечаток и статус транспортного соединения, извлечённые из журналов Tor.
- Авто-прослушивание — при включении фоновый слушатель запускается автоматически при загрузке Tor. Входящие вызовы обнаруживаются и принимаются из главного меню без необходимости вручную выбирать «Слушать вызовы». После завершения вызова слушатель перезапускается.
- Настраиваемая клавиша PTT — изменение клавиши push-to-talk с пробела по умолчанию на любую другую через меню настроек.
- Статистика сообщений — экран вызова отображает размер зашифрованной полезной нагрузки для отправленных и полученных сообщений, обновляемый на месте.
- Статус PTT удалённой стороны — экран вызова показывает статический индикатор состояния удалённой стороны: «Ожидание» (зелёный) или «● Запись» (красный). Сбрасывается немедленно при поступлении аудиоданных, до начала воспроизведения.
- Звуковой сигнал PTT — необязательный звук уведомления, когда удалённая сторона начинает запись. Пять встроенных пресетов (тон, двойной, чириканье, динь, щелчок), генерируемых с помощью sox, плюс возможность записать собственный 2-секундный сигнал. Настраивается через Настройки.
- Анимация подключения — при вызове удалённого адреса воспроизводится циклическая анимация до загрузки интерфейса вызова.
- Изменение голоса — применение голосовых эффектов к исходящему аудио. Включает 6 пресетов (глубокий, высокий, робот, эхо, шёпот) и полностью настраиваемый пользовательский режим со сдвигом тона, перегрузкой, фленджером, эхом, фильтром высоких частот и тремоло. Эффекты обрабатываются с помощью sox перед кодированием Opus.
- Громкость PTT (Termux) — экспериментальный режим, позволяющий дважды нажать кнопку уменьшения громкости для переключения записи, даже когда Termux работает в фоновом режиме. Требуется
jq(устанавливается по запросу). Громкость автоматически восстанавливается после каждого срабатывания. - Скрытый сервис Tor — каждый экземпляр запускает собственный скрытый сервис Tor. Ваш адрес
.onionслужит постоянной маршрутизируемой конечной точкой. Не требуется переадресация портов или публичный IP-адрес. - Сквозное шифрование — весь аудио- и текстовый трафик шифруется с помощью настраиваемого шифра (по умолчанию: AES-256-CBC) с выводом ключа PBKDF2 из предварительно согласованного секрета до входа в сеть Tor.
- Секрет, защищённый парольной фразой — общий секрет может быть зашифрован при хранении с помощью выбранной пользователем парольной фразы (AES-256-CBC, 100 000 итераций PBKDF2). Существующие открытые секреты автоматически обнаруживаются с предложением миграции.
- Низкая пропускная способность — кодек Opus на 16 кбит/с, 8 кГц моно. Типичное 10-секундное голосовое сообщение занимает менее 20 КБ, что вполне укладывается в возможности Tor.
- Обмен QR-кодом — пункт 3 может отображать ваш адрес
.onionв виде сканируемого QR-кода в терминале. Еслиqrencodeне установлен, вам будет предложено установить его. QR-код отображается на альтернативном экранном буфере и уничтожается при закрытии. Примечание предупреждает, что некоторые QR-сканеры автоматически добавляют префиксhttp://; этот префикс автоматически удаляется при наборе номера. - Непрозрачные временные файлы — все временные файлы используют общие расширения
.tmpи случайные шестнадцатеричные идентификаторы. Никакие метаданные о типе файла или времени не утекают в файловую систему. - Отображение цепочки переходов — опциональное отображение пути вашей цепочки Tor во время вызовов, показывающее имена ретрансляторов и полные названия стран. Автообновление каждые 60 секунд. Настраивается через Настройки → Настройки Tor.
- Исключение стран — исключение определённых стран из ваших цепочек Tor. Пресеты для альянсов Five Eyes, Nine Eyes и Fourteen Eyes, или ввод пользовательских кодов стран. Использует
ExcludeNodesсStrictNodesв torrc. - Аутентификация протокола HMAC — необязательная подпись HMAC-SHA256 всех сообщений протокола (голос, текст, управляющие сигналы) с использованием общего секрета. В каждое сообщение включается случайный nonce, а виденные nonce отслеживаются для отклонения повторов. Неподписанные, подделанные или повторные сообщения молча отбрасываются. Состояние HMAC фиксируется в начале вызова для предотвращения рассинхронизации в середине вызова. Настраивается через Настройки → Безопасность.
- Перезапись перед удалением — необязательный переключатель в Настройках → Безопасность, который перезаписывает каждый временный файл случайными данными из
/dev/urandomперед удалением. Считывается размер файла, поверх файла записывается столько же байт случайных данных с помощьюddсconv=notrunc, запись сбрасывается на устройство хранения с помощьюsync, а затем файл удаляется с помощьюrm. Охватывает все чувствительные файлы времени выполнения: необработанные записи PCM, аудио в кодировке Opus, зашифрованные полезные нагрузки, расшифрованные входящие аудио и чат, промежуточные файлы голосовых эффектов, ключевые материалы шифра и HMAC, журналы nonce, флаги сеанса, PID-файлы, именованные каналы, ключи скрытых сервисов Tor при ротации и данные сеанса ретрансляции. Для каталогов все файлы внутри рекурсивно перезаписываются. Встроенная тестовая опция создаёт образец файла, показывает исходное содержимое в открытом виде и в шестнадцатеричном формате, перезаписывает его и отображает перезаписанный шестнадцатеричный формат, чтобы пользователь мог визуально убедиться, что данные уничтожены. По умолчанию отключено — для большинства пользователей стандартногоrmвполне достаточно. Временные файлы TerminalPhone малы и недолговечны, а дисковое пространство обычно быстро переиспользуется обычной системной активностью. Эта функция предназначена для пользователей, которые хотят дополнительный уровень защиты от криминалистического восстановления. Примечание: на SSD и флеш-накопителях из-за выравнивания износа перезапись может попасть на другие физические ячейки NAND — полное шифрование диска является единственной надёжной защитой на флеш-носителях. На традиционных жёстких дисках перезапись заменяет данные в том же физическом месте и эффективна против любого программного восстановления. - Режим ретрансляции (групповой мост) — запуск ретранслятора с нулевым знанием, который соединяет N анонимных звонящих. Ретранслятор пересылает зашифрованное аудио и чат без расшифровки, не требует общего секрета или аудиооборудования. Клиенты автоматически определяют режим ретрансляции через рукопожатие
RELAY:1и отображают живой счётчик звонящих в группе. Уход одного звонящего не разрывает соединение остальных. Панель оператора показывает количество звонящих, время работы и пропускную способность данных. - Однопереходный режим Tor — необязательный режим с пониженной задержкой для операторов ретрансляции. Использует 1 переход Tor вместо 3 для скрытого сервиса, жертвуя анонимностью сервера ради меньшей задержки. Идеально для операторов ретрансляции, которым не нужно скрывать собственный IP-адрес.
- Настройка портов — настройка порта прослушивания и SOCKS-порта вместе через Настройки → Настройки Tor. Позволяет запускать несколько экземпляров на одном устройстве с отдельными процессами Tor. В первую очередь полезно для операторов ретрансляции, которые также хотят присоединиться к собственному групповому вызову — запустите ретранслятор на одном экземпляре, измените SOCKS-порт на втором экземпляре и наберите номер как звонящий.
- Кроссплатформенность — работает на стандартных дистрибутивах Linux, macOS и Android через Termux. Платформенные аудиобэкенды обрабатываются прозрачно.
- Не требуется root — ввод PTT использует сырой режим терминала. Не требуются специальные разрешения или модули ядра.
- Один скрипт — один файл Bash. Никакой системы сборки, никакого рантайма, никакого фреймворка.
Установка
Linux
Поддерживаемые дистрибутивы: Debian/Ubuntu (apt), Fedora/RHEL (dnf), Arch (pacman).``` bash
git clone https://gitlab.com/here_forawhile/terminalphone.git cd terminalphone bash terminalphone.sh
Выберите пункт **7** в меню, чтобы автоматически установить все зависимости. Будут установлены следующие пакеты:
| Пакет | Назначение |
|---|---|
| `tor` | Луковая маршрутизация и скрытый сервис |
| `opus-tools` | Сжатие голоса (кодек Opus) |
| `sox` | Утилиты обработки звука |
| `socat` | Двунаправленное TCP-реле через SOCKS-прокси Tor |
| `openssl` | Шифрование и дешифрование AES-256-CBC |
| `alsa-utils` | Запись и воспроизведение звука (`arecord`, `aplay`) |
### macOS``` bash
git clone https://gitlab.com/here_forawhile/terminalphone.git
cd terminalphone
bash terminalphone.sh
Выберите вариант 7, чтобы автоматически установить все зависимости. Если Homebrew не установлен, скрипт сначала установит его, а затем установит следующие пакеты:
| Пакет | Назначение |
|---|---|
tor | Луковая маршрутизация и скрытый сервис |
opus-tools | Сжатие голоса (кодек Opus) |
sox | Запись и воспроизведение звука (rec, play) |
socat | Двунаправленное TCP-реле через SOCKS-прокси Tor |
openssl | Шифрование и дешифрование AES-256-CBC |
Примечание: macOS использует sox как для записи (rec), так и для воспроизведения (play) вместо ALSA. Дополнительные аудиопакеты не требуются.
Apple Silicon (M1/M2/M3+): Если ваш терминал случайно работает под Rosetta 2 (процесс x86_64), а Homebrew установлен в нативный префикс ARM (/opt/homebrew), brew install обычно завершается ошибкой Cannot install under Rosetta 2 in ARM default prefix. Установщик зависимостей теперь обнаруживает это и автоматически перезапускает Homebrew через arch -arm64, поэтому вариант 7 работает независимо от того, как был запущен скрипт.
Termux (Android)
TerminalPhone поддерживает устройства Android через Termux. Из-за песочной аудиоархитектуры Android требуются два дополнительных компонента.
Шаг 1: Установите Termux
Установите Termux из F-Droid. Не используйте версию из Play Store, так как она устарела и больше не получает обновлений.
Шаг 2: Установите приложение Termux:API
Установите Termux:API из F-Droid. Это отдельное приложение для Android (не пакет Termux), которое обеспечивает мост между Termux и системными API Android. TerminalPhone требует его для доступа к микрофону устройства и воспроизведению медиа.
Без установленного на устройстве приложения Termux:API команды termux-microphone-record и termux-media-player не будут работать, а запись и воспроизведение звука будут завершаться молчаливой ошибкой.
После установки приложения Termux:API предоставьте ему разрешение на доступ к микрофону, когда появится запрос.
Шаг 3: Установите пакет Termux:API внутри Termux```bash pkg install termux-api
Устанавливает утилиты командной строки, которые взаимодействуют с приложением Termux:API.
**Шаг 4: Запуск TerminalPhone**```bash
git clone https://gitlab.com/here_forawhile/terminalphone.git
cd terminalphone
bash terminalphone.sh
Выберите вариант 7, чтобы установить все оставшиеся зависимости. Установщик сначала выполнит pkg upgrade для устранения проблем с компоновкой пакетов, а затем установит tor, opus-tools, sox, socat, openssl-tool, ffmpeg и termux-api.
Зависимости, специфичные для Termux:
| Пакет | Назначение |
|---|---|
termux-api | CLI-мост к микрофону и медиаплееру Android |
ffmpeg | Преобразует записи Android в формате M4A в сырой PCM для кодирования Opus |
Быстрый старт```
- 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)
Обе стороны должны запустить Tor и настроить один и тот же общий секрет перед началом звонка.
---
## Использование
### Параметры меню```
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
Управление во время звонка
Режим полного дуплекса (WebSockets):
| Клавиша | Действие |
|---|---|
| M | Включить / выключить микрофон. |
| T | Отправить зашифрованное текстовое сообщение во время звонка. |
| Q | Завершить звонок и вернуться в меню. |
Режим «нажми и говори» (Linux / macOS):
| Клавиша | Действие |
|---|---|
| Удерживать ПРОБЕЛ | Записать голосовое сообщение. Отправляется автоматически при отпускании. |
| T | Отправить зашифрованное текстовое сообщение. |
| S | Открыть настройки во время звонка (сменить шифр, настроить качество). |
| Q | Завершить звонок и вернуться в меню. |
Режим «нажми и говори» (Termux):
Программная клавиатура Android отправляет события нажатия клавиш при отпускании, а не при нажатии. TerminalPhone адаптируется, используя режим переключения в Termux.
| Клавиша | Действие |
|---|---|
| Нажать ПРОБЕЛ | Начать запись. Нажмите ещё раз, чтобы остановить и отправить. |
| T | Отправить зашифрованное текстовое сообщение. |
| S | Открыть настройки во время звонка (сменить шифр, настроить качество). |
| Q | Завершить звонок и вернуться в меню. |
| Громкость − ×2 | Переключить запись с помощью кнопки громкости (требуется включённая опция «PTT через громкость» в настройках). |
Режим 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)
---
## Как это работает
TerminalPhone использует модель «запись-затем-отправка». Когда вы активируете PTT, микрофон записывает непрерывно, пока вы не отпустите кнопку. Полная запись затем обрабатывается через следующий конвейер:```
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
Сетевой протокол основан на построчных текстовых сообщениях через TCP-соединение:
| Сообщение | Описание |
|---|---|
ID:<onion> | Идентификатор вызывающего — .onion-адрес отправителя |
CIPHER:<name> | Шифр отправителя. Обменивается при подключении и при смене. |
PTT_START | Отправитель начал запись |
PTT_STOP | Отправитель закончил; аудио следует или уже отправлено |
AUDIO:<base64> | Полное зашифрованное аудиосообщение |
MSG:<base64> | Зашифрованное текстовое сообщение |
HANGUP | Отправитель отключается |
PING | Сигнал поддержания соединения |
RELAY:1 | Приветствие ретранслятора — отправляется ретранслятором при подключении, запускает групповой режим |
GROUP:<n> | Обновление размера группы — рассылается ретранслятором при подключении или выходе вызывающих |
В Termux дополнительный этап конвертации обрабатывает нативный формат записи M4A в Android, используя ffmpeg для преобразования в сырой PCM перед кодированием Opus.
Модель безопасности
Шифрование: Весь аудиопоток шифруется настраиваемым пользователем шифром (по умолчанию: AES-256-CBC) перед передачей. Доступен 21 подобранный шифр, ранжированный от самого стойкого (256-бит) до достаточного (128-бит). Ключ выводится из заранее общего секрета с помощью PBKDF2 с 10 000 итераций. Шифрование применяется на уровне приложения, независимо от транспортного шифрования Tor. Секреты передаются в OpenSSL через файловые дескрипторы (-pass fd:3), а не через аргументы командной строки, поэтому они никогда не видны в таблице процессов.
Согласование шифров: Обе стороны обмениваются названиями шифров при подключении и при любой смене шифра во время звонка. Названия шифров не являются секретными (принцип Керкгоффса). Если локальный и удалённый шифры не совпадают, обе стороны видят красные индикаторы в заголовке звонка.
Транспорт: Все данные маршрутизируются через цепи скрытых сервисов Tor. IP-адрес ни одной из сторон не раскрывается. Трафик в открытой сети отсутствует. Сетевой наблюдатель не может связать соединение ни с одной из сторон.
Устойчивость к анализу трафика: Модель «запись-затем-отправка» создаёт нерегулярные паттерны передачи (сообщения переменной длины через нерегулярные интервалы), которые сложнее идентифицировать, чем непрерывный поток.
Аутентификация: Общий секрет служит неявной аутентификацией. Если у обеих сторон нет одинакового секрета, расшифровка не удаётся и аудио не воспроизводится. При подключении обе стороны обмениваются .onion-адресами для идентификации вызывающего. Секрет может быть дополнительно зашифрован парольной фразой; при запуске скрипт запрашивает парольную фразу для его разблокировки.
Подпись протокола HMAC (опционально): При включении каждое сообщение сетевого протокола — включая управляющие сигналы, такие как HANGUP, PTT_START и PING, — подписывается HMAC-SHA256, производным от общего секрета. В каждое сообщение включается случайный nonce, чтобы одинаковые команды давали уникальные подписи. Просмотренные nonce отслеживаются в рамках звонка, а дубликаты отклоняются, что предотвращает атаки повторного воспроизведения. Настройка HMAC фиксируется при начале звонка через файл времени выполнения, чтобы пути отправки и приёма всегда совпадали, даже если настройка переключается во время звонка (изменения вступают в силу со следующего звонка). На принимающей стороне любое сообщение с недействительной, отсутствующей или повторной подписью молча отбрасывается. Это предотвращает возможность атакующего, скомпрометировавшего цепь Tor (но не имеющего общего секрета), внедрять или повторять команды. Обе стороны должны включить HMAC для работы звонков. Несовместимо с версиями до 1.1.3.
Ограничения:
- Общий секрет должен передаваться вне канала через защищённый канал (лично, через зашифрованный мессенджер и т. д.).
- Отсутствует прямая секретность. Если общий секрет скомпрометирован, все прошлые и будущие сообщения с использованием этого секрета могут быть расшифрованы.
- Протокол не защищает от скомпрометированной конечной точки. Если любое устройство скомпрометировано, атакующий получает доступ к незашифрованному аудио.
Безопасность режима ретранслятора: Ретранслятор архитектурно является zero-knowledge. Он никогда не владеет общим секретом и не может расшифровать никакое содержимое. Аудиоданные проходят через буферы ядра (FIFO), которые существуют только в памяти — ничего не записывается на диск. При остановке ретранслятора все временные файлы удаляются. Оператор ретранслятора не может определить, что было сказано, кто вызывающие, или прочитать какие-либо сообщения. Ретранслятор фильтрует все управляющие сигналы (HANGUP, ID:, CIPHER:, PTT_START, PTT_STOP) и пересылает только AUDIO:, MSG: и PING. Глобальный пассивный противник может провести корреляционный анализ трафика, чтобы связать вызывающих с ретранслятором, но содержимое сообщений остаётся непрозрачным.
Пропускная способность ретранслятора: Основное узкое место — пропускная способность Tor. Пропускная способность скрытых сервисов Tor сильно варьируется и зависит от качества цепи, перегрузки ретрансляторов и географического расстояния. Типичное 10-секундное голосовое сообщение составляет ~20 КБ в зашифрованном виде, и каждая передача раздаётся N-1 слушателям.
| Вызывающие | Исходящие на сообщение | Ожидаемый опыт |
|---|---|---|
| 2–3 | 20–40 КБ | Надёжно на большинстве соединений |
| 3–5 | 40–80 КБ | Хорошо на стабильных цепях, возможны задержки на мобильных данных |
| 5–10 | 80–180 КБ | На пределе возможностей, заметные задержки между передачами |
| 10+ | 180 КБ+ | Ненадёжно, значительные очереди и возможная потеря сообщений |
Реалистичная ёмкость — 3–5 вызывающих для ретранслятора, работающего на телефоне (Termux), или 5–10 вызывающих на выделенной Linux-машине со стабильным соединением. Ретрансляторы на мобильных устройствах сталкиваются с дополнительными ограничениями: мобильные данные добавляют задержку поверх Tor, Android может завершать фоновые процессы Termux для освобождения памяти, а расход батареи растёт с каждым подключённым вызывающим. Пропускная способность цепи Tor может варьироваться от 50 КБ/с до 500 КБ/с в зависимости от качества пути, а цепи могут деградировать или ротироваться в середине сеанса. Одношаговый режим улучшает пропускную способность, но не устраняет перегрузку ретрансляторов Tor. Эти оценки предполагают модель PTT, где одновременно передаёт только один человек — одновременные передачи ещё больше ухудшат производительность. Вызывающим в групповом звонке следует рассмотреть снижение битрейта Opus (Настройки → Кодирование Opus), чтобы уменьшить размер сообщений и снизить нагрузку на ретранслятор.
Конфигурация
Вся конфигурация хранится в .terminalphone/ относительно расположения скрипта:```
.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
Параметры аудио по умолчанию (определены в начале скрипта):
| Параметр | По умолчанию | Описание |
|---|---|---|
| `LISTEN_PORT` | 7777 | TCP-порт для входящих соединений |
| `TOR_SOCKS_PORT` | 9050 | Порт SOCKS-прокси Tor |
| `OPUS_BITRATE` | 16 | Битрейт кодирования Opus в кбит/с |
| `CIPHER` | aes-256-cbc | Шифр шифрования (настраивается через Settings) |
| `SNOWFLAKE_ENABLED` | 0 | Мост Snowflake для обхода цензуры |
| `AUTO_LISTEN` | 0 | Автоматический приём звонков при запуске Tor |
| `PTT_KEY` | SPACE | Клавиша push-to-talk (настраивается через Settings) |
| `VOL_PTT` | 0 | PTT двойным нажатием клавиши громкости, только Termux (экспериментально) |
| `EXCLUDE_NODES` | (пусто) | Список стран для ExcludeNodes в Tor (например, `{US},{GB}`) |
| `HMAC_AUTH` | 0 | Подписывать все сообщения протокола HMAC (опционально, обе стороны должны совпадать) |
| `OVERWRITE_DELETE` | 0 | Перезаписывать временные файлы случайными данными перед удалением (по умолчанию выключено) |
| `PTT_CHIME` | off | Пресет звукового сигнала PTT (off, tone, double, chirp, ding, click, custom) |
| `SINGLE_HOP` | 0 | Одношаговый режим Tor для меньшей задержки (отключает анонимность сервера) |
| `SAMPLE_RATE` | 8000 | Частота дискретизации аудио в Гц |
| `CHUNK_DURATION` | 1 | Длительность тестовых аудиофрагментов в секундах |
---
## Устранение неполадок
**Tor не может завершить начальную загрузку:**
Проверьте журнал Tor в `.terminalphone/tor_data/tor.log`. Частые причины: рассинхронизация часов, сетевые ограничения, блокирующие Tor, или другой экземпляр Tor, использующий тот же SOCKS-порт.
**Нет звука в Termux:**
Убедитесь, что приложение Termux:API установлено из F-Droid (не только пакет `termux-api`). Предоставьте разрешение на доступ к микрофону приложению Termux:API в настройках Android. Запустите тест аудиопетли (вариант 5) для проверки.
**Установка ffmpeg в Termux завершается ошибкой:**
Выполните `pkg upgrade` перед установкой зависимостей. Установщик делает это автоматически, но если вы устанавливали пакеты вручную, устаревшие общие библиотеки могут вызывать ошибки компоновки.
**Аудиотест работает, но звонки беззвучные:**
Убедитесь, что обе стороны используют один и тот же общий секрет. Несовпадающие секреты приводят к сбою расшифровки без сообщения об ошибке — звонок устанавливается, но звук не слышен.
**Мост Snowflake медленно подключается:**
Snowflake маршрутизирует трафик через WebRTC-прокси, что добавляет дополнительное время начальной загрузки. Нормально, если Tor требуется 30–60 секунд (или больше), чтобы достичь 100% при включённом Snowflake. Скрипт выведет уведомление о терпении во время начальной загрузки.
**Первая начальная загрузка Tor медленная:**
При первом запуске Tor должен загрузить полный сетевой консенсус с нуля, что может занять минуту или две. Скрипт обнаруживает это и выводит уведомление. Тайм-аут начальной загрузки автоматически увеличивается со 120 до 300 секунд при первом запуске. Последующие запуски используют кэшированные данные консенсуса и выполняются гораздо быстрее.
**Завершение звонка не возвращает в меню:**
Если скрипт зависает после нажатия Q, нажмите Ctrl+C для принудительной очистки и возврата в оболочку.
**`Cannot install under Rosetta 2 in ARM default prefix` на macOS:**
Это происходит на Apple Silicon, когда терминал работает под Rosetta 2 (процесс `x86_64`), но Homebrew находится в нативном префиксе ARM (`/opt/homebrew`). Установщик зависимостей (вариант **7**) теперь обнаруживает это и автоматически перезапускает `brew` под `arch -arm64`. Если вы устанавливаете пакеты вручную, добавляйте префикс самостоятельно: `arch -arm64 brew install <pkg>`. Либо запускайте скрипт нативно с помощью `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)
---
## Лицензия
MIT