
terminalphone — 已更新!
通过 Tor 隐藏服务进行加密按键通话语音和文本通信,支持端到端加密、可配置密码、用于群组通话的中继模式以及反取证数据销毁。
TerminalPhone
通过 Tor 隐藏服务进行加密的按键通话语音通信。
TerminalPhone 是一个单一、自包含的 Bash 脚本,可在 Tor 网络上为两方或更多方提供匿名、端到端加密的语音和文本通信。它像对讲机一样工作:你录制一条语音消息,它会被压缩、加密,并作为一个整体单元传输给远程方。你还可以在通话期间发送加密文本消息。无需服务器基础设施,无需账户,无需电话号码。你的 Tor 隐藏服务 .onion 地址就是你的身份。
目录
功能特性
- 对讲机按键通话模式 -- 录制一条完整的语音消息,并在松开按键时传输。
- 通话中加密聊天 -- 在通话期间发送和接收加密文本消息。按
T输入消息。 - 来电显示 -- 双方在连接时自动交换
.onion地址。远程地址显示在通话标题中。 - 自动挂断检测 -- 当一方挂断时,另一方会立即收到通知,通话自动结束。
- 可配置加密算法 -- 从 21 种按强度排序(256 位 → 128 位)的精选加密算法中选择。包括 AES、ChaCha20、Camellia 和 ARIA 系列。弱加密算法(DES、RC4、ECB 模式)已被排除。
- 实时加密算法协商 -- 双方在连接时交换加密算法信息。通话标题显示本地和远程加密算法,并带有绿色(匹配)或红色(不匹配)指示器,实时更新。
- 通话中设置 -- 在通话期间按
S访问设置。可即时更改你的加密算法;远程方的显示会自动更新。 - Snowflake 网桥信息 -- 使用 Snowflake 进行审查规避时,通话页面会显示从 Tor 日志中解析出的网桥描述符名称、指纹和传输连接状态。
- 自动监听 -- 启用后,Tor 启动时会自动启动后台监听器。来电会从主菜单被检测并接受,无需手动选择“监听来电”。通话结束后,监听器会重新启动。
- 可配置 PTT 键 -- 通过设置菜单将按键通话键从默认的空格键更改为任意键。
- 消息统计 -- 通话屏幕显示已发送和已接收消息的加密负载大小,并就地更新。
- 远程 PTT 状态 -- 通话屏幕显示远程方状态的静态指示器:“空闲”(绿色)或“● 录音中”(红色)。当音频数据到达时,在播放开始之前立即重置。
- PTT 提示音 -- 当远程方开始录音时的可选通知声音。五个内置预设(tone、double、chirp、ding、click)使用 sox 生成,还可录制自定义的 2 秒提示音。可通过设置配置。
- 连接动画 -- 呼叫远程地址时,会播放循环动画,直到通话界面加载完成。
- 变声器 -- 对传出音频应用语音效果。包括 6 个预设(低沉、高亢、机器人、回声、耳语)以及一个完全可配置的自定义模式,具有变调、过载、镶边、回声、高通滤波器和颤音。效果在 Opus 编码之前使用 sox 处理。
- 音量 PTT(Termux) -- 实验性模式,允许你双击音量减键来切换录音,即使 Termux 在后台运行。需要
jq(按需安装)。每次触发后音量会自动恢复。 - Tor 隐藏服务 -- 每个实例运行自己的 Tor 隐藏服务。你的
.onion地址作为永久的、可路由的端点。无需端口转发或公网 IP。 - 端到端加密 -- 所有音频和文本在进入 Tor 网络之前,使用可配置的加密算法(默认:AES-256-CBC)和基于预共享密钥的 PBKDF2 密钥派生进行加密。
- 受密码短语保护的密钥 -- 共享密钥可以使用用户选择的密码短语(AES-256-CBC,100,000 次 PBKDF2 迭代)进行静态加密。现有的明文密钥会被自动检测,并提供迁移选项。
- 低带宽 -- Opus 编解码器,16kbps,8kHz 单声道。典型的 10 秒语音消息小于 20KB,完全在 Tor 的容量范围内。
- 二维码分享 -- 选项 3 可以在终端中将你的
.onion地址显示为可扫描的二维码。如果未安装qrencode,会提示你安装。二维码在备用屏幕缓冲区上渲染,并在关闭时销毁。一条注释警告某些二维码扫描器会自动添加http://前缀;拨号时会自动去除该前缀。 - 不透明的临时文件 -- 所有临时文件使用通用的
.tmp扩展名和随机十六进制标识符。不会向文件系统泄露任何文件类型或时间元数据。 - 电路跳数显示 -- 可选择在通话期间显示你的 Tor 电路路径,显示中继名称和完整的国家名称。每 60 秒自动刷新。可通过设置 → Tor 设置配置。
- 排除国家 -- 从你的 Tor 电路中排除特定国家。提供五眼、九眼和十四眼联盟的预设,或输入自定义国家代码。在 torrc 中使用
ExcludeNodes和StrictNodes。 - HMAC 协议认证 -- 可选的 HMAC-SHA256 签名,使用共享密钥对所有协议消息(语音、文本、控制信号)进行签名。每条消息包含一个随机 nonce,并跟踪已见的 nonce 以拒绝重放。未签名、伪造或重放的消息会被静默丢弃。HMAC 状态在通话开始时冻结,以防止通话中失步。可通过设置 → 安全配置。
- 删除前覆写 -- 设置 → 安全中的可选开关,在删除之前用来自
/dev/urandom的随机数据覆写每个临时文件。读取文件大小,使用dd和conv=notrunc将相应字节数的随机数据写入文件,使用sync将写入刷新到存储设备,然后使用rm删除文件。涵盖所有敏感的运行时文件:原始 PCM 录音、Opus 编码音频、加密负载、解密入站音频和聊天、语音效果中间文件、加密算法和 HMAC 密钥材料、nonce 日志、会话标志、PID 文件、命名管道、轮换时的 Tor 隐藏服务密钥以及中继会话数据。对于目录,内部所有文件都会被递归覆写。内置测试选项会创建一个示例文件,以明文和十六进制显示原始内容,覆写它,并显示覆写后的十六进制,以便用户直观确认数据已被销毁。默认关闭——对大多数用户来说,标准rm完全够用。TerminalPhone 的临时文件很小且生命周期短,磁盘空间通常会被正常的系统活动快速重用。此功能适用于希望对取证恢复增加额外保护层的用户。注意:在 SSD 和闪存存储上,磨损均衡意味着覆写可能落在不同的物理 NAND 单元上——全盘加密是闪存介质上唯一可靠的防御。在传统 HDD 上,覆写会在相同的物理位置替换数据,对所有基于软件的恢复都有效。 - 中继模式(群组桥接) -- 运行一个零知识中继,桥接 N 个匿名呼叫者。中继转发加密音频和聊天而不解密,不需要共享密钥或音频硬件。客户端通过
RELAY:1握手自动检测中继模式,并显示实时群组呼叫者数量。一个呼叫者离开不会断开其他呼叫者。操作员仪表板显示呼叫者数量、运行时间和数据吞吐量。 - 单跳 Tor 模式 -- 为中继操作员提供的可选低延迟模式。隐藏服务使用 1 个 Tor 跳而不是 3 个,牺牲服务器匿名性以换取更低延迟。非常适合不需要隐藏自己 IP 的中继操作员。
- 端口配置 -- 通过设置 → Tor 设置同时配置监听端口和 SOCKS 端口。支持在同一设备上使用单独的 Tor 进程运行多个实例。主要对同时想加入自己群组通话的中继操作员有用——在一个实例上运行中继,在第二个实例上更改 SOCKS 端口,然后作为呼叫者拨入。
- 跨平台 -- 在标准 Linux 发行版、macOS 和通过 Termux 的 Android 上运行。平台特定的音频后端被透明处理。
- 无需 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` | 通过 Tor SOCKS 代理的双向 TCP 中继 |
| `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 | 通过 Tor SOCKS 代理的双向 TCP 中继 |
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。依赖安装程序现在会检测到这种情况,并自动在 arch -arm64 下重新运行 Homebrew,因此无论脚本是如何启动的,选项 7 都能正常工作。
Termux (Android)
TerminalPhone 通过 Termux 支持 Android 设备。由于 Android 的沙盒音频架构,需要两个额外的组件。
步骤 1:安装 Termux
从 F-Droid 安装 Termux。不要使用 Play Store 版本,因为它已过时且不再接收更新。
步骤 2:安装 Termux:API 应用
从 F-Droid 安装 Termux:API。这是一个独立的 Android 应用程序(不是 Termux 软件包),它在 Termux 和 Android 系统 API 之间提供桥梁。TerminalPhone 需要它来访问设备麦克风和媒体播放。
如果设备上未安装 Termux:API 应用,termux-microphone-record 和 termux-media-player 命令将无法运行,音频录制和播放将静默失败。
安装 Termux:API 应用后,在提示时授予其麦克风权限。
步骤 3:在 Termux 内安装 Termux:API 软件包```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 | 连接 Android 麦克风和媒体播放器的 CLI 桥接 |
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):
| 按键 | 操作 |
|---|---|
| 按住 SPACE | 录制语音消息。松开后自动发送。 |
| T | 发送加密文本消息。 |
| S | 通话中打开设置(更改加密算法、调整音质)。 |
| Q | 挂断并返回菜单。 |
按键通话模式(Termux):
Android 的软键盘在松开时发送按键事件,而不是在按下时。TerminalPhone 通过在 Termux 上使用切换模式来适配。