업데이트로 돌아가기
UpdatedSep 3, 2026

terminalphone — Updated!

Tor 히든 서비스를 통한 암호화된 푸시투톡 음성 및 텍스트 통신, 종단간 암호화, 구성 가능한 암호화 방식, 그룹 통화를 위한 중계 모드, 그리고 포렌식 방지 데이터 파괴 기능.

공유

TerminalPhone

Tor 히든 서비스를 통한 암호화된 푸시투토크 음성 통신.

TerminalPhone은 Tor 네트워크를 통해 두 명 이상의 당사자 간에 익명의 종단간 암호화된 음성 및 텍스트 통신을 제공하는 단일 자체 포함 Bash 스크립트입니다. 무전기처럼 작동합니다. 음성 메시지를 녹음하면 압축, 암호화되어 단일 단위로 원격 당사자에게 전송됩니다. 통화 중에 암호화된 텍스트 메시지를 보낼 수도 있습니다. 서버 인프라도, 계정도, 전화번호도 필요 없습니다. 귀하의 Tor 히든 서비스 .onion 주소가 곧 귀하의 신원입니다.


목차


기능

  • 무전기 푸시투토크 모드 -- 완전한 음성 메시지를 녹음하고 버튼을 놓으면 전송합니다.
  • 통화 중 암호화 채팅 -- 통화 중에 암호화된 텍스트 메시지를 주고받습니다. T를 눌러 메시지를 입력하세요.
  • 발신자 ID -- 연결 시 양측이 자동으로 .onion 주소를 교환합니다. 원격 주소는 통화 헤더에 표시됩니다.
  • 자동 통화 종료 감지 -- 한쪽이 전화를 끊으면 다른 쪽에 즉시 알림이 전달되고 통화가 자동으로 종료됩니다.
  • 구성 가능한 암호 -- 강도순(256비트 → 128비트)으로 정렬된 21개의 엄선된 암호 중에서 선택할 수 있습니다. AES, ChaCha20, Camellia, ARIA 계열을 포함합니다. 취약한 암호(DES, RC4, ECB 모드)는 제외됩니다.
  • 실시간 암호 협상 -- 연결 시 양측이 암호 정보를 교환합니다. 통화 헤더에는 로컬 및 원격 암호가 녹색(일치) 또는 빨간색(불일치) 표시와 함께 실시간으로 업데이트되어 표시됩니다.
  • 통화 중 설정 -- 통화 중 S를 눌러 설정에 접근합니다. 암호를 즉석에서 변경할 수 있으며, 원격 당사자의 화면이 자동으로 업데이트됩니다.
  • Snowflake 브리지 정보 -- 검열 우회를 위해 Snowflake를 사용할 때, 통화 페이지에 Tor 로그에서 파싱된 브리지 디스크립터 이름, 지문, 전송 연결 상태가 표시됩니다.
  • 자동 수신 대기 -- 활성화하면 Tor 부팅 시 백그라운드 리스너가 자동으로 시작됩니다. 메인 메뉴에서 "통화 대기"를 수동으로 선택할 필요 없이 수신 전화가 감지되고 수락됩니다. 통화가 종료되면 리스너가 재시작됩니다.
  • 구성 가능한 PTT 키 -- 설정 메뉴를 통해 기본 스페이스바에서 임의의 키로 푸시투토크 키를 변경할 수 있습니다.
  • 메시지 통계 -- 통화 화면에 송수신 메시지의 암호화된 페이로드 크기가 제자리에서 업데이트되어 표시됩니다.
  • 원격 PTT 상태 -- 통화 화면에 원격 당사자의 상태를 나타내는 정적 표시기가 표시됩니다: "Idle"(녹색) 또는 "● Recording"(빨간색). 오디오 데이터가 도착하면 재생이 시작되기 전에 즉시 초기화됩니다.
  • PTT 알림음 -- 원격 당사자가 녹음을 시작할 때 선택적 알림음이 울립니다. sox로 생성된 5가지 내장 프리셋(tone, double, chirp, ding, click)과 사용자 지정 2초 알림음을 녹음하는 기능을 제공합니다. 설정을 통해 구성할 수 있습니다.
  • 연결 애니메이션 -- 원격 주소로 전화를 걸면 통화 인터페이스가 로드될 때까지 순환 애니메이션이 재생됩니다.
  • 음성 변조기 -- 발신 오디오에 음성 효과를 적용합니다. 6가지 프리셋(deep, high, robot, echo, whisper)과 피치 시프트, 오버드라이브, 플랜저, 에코, 하이패스 필터, 트레몰로를 갖춘 완전히 구성 가능한 사용자 지정 모드를 포함합니다. 효과는 Opus 인코딩 전에 sox를 사용하여 처리됩니다.
  • 볼륨 PTT (Termux) -- Termux가 백그라운드에 있어도 볼륨 다운 버튼을 두 번 탭하여 녹음을 토글할 수 있는 실험적 모드입니다. jq가 필요합니다(요청 시 설치). 각 트리거 후 볼륨은 자동으로 복원됩니다.
  • Tor 히든 서비스 -- 각 인스턴스는 자체 Tor 히든 서비스를 실행합니다. 귀하의 .onion 주소는 영구적이고 라우팅 가능한 엔드포인트 역할을 합니다. 포트 포워딩이나 공인 IP가 필요하지 않습니다.
  • 종단간 암호화 -- 모든 오디오와 텍스트는 Tor 네트워크에 진입하기 전에 사전 공유 비밀에서 PBKDF2 키 파생을 사용하는 구성 가능한 암호(기본값: AES-256-CBC)로 암호화됩니다.
  • 암호로 보호되는 비밀 -- 공유 비밀은 사용자가 선택한 암호(AES-256-CBC, 100,000회 PBKDF2 반복)를 사용하여 저장 시 암호화할 수 있습니다. 기존 평문 비밀은 자동으로 감지되어 마이그레이션 제안이 표시됩니다.
  • 낮은 대역폭 -- 16kbps, 8kHz 모노의 Opus 코덱. 일반적인 10초 음성 메시지는 20KB 미만으로 Tor의 용량 내에 충분히 들어갑니다.
  • QR 코드 공유 -- 옵션 3은 .onion 주소를 터미널에서 스캔 가능한 QR 코드로 표시할 수 있습니다. qrencode가 설치되어 있지 않으면 설치하라는 메시지가 표시됩니다. QR 코드는 대체 화면 버퍼에 렌더링되며 닫으면 제거됩니다. 일부 QR 스캐너가 http://를 자동으로 앞에 붙인다는 경고가 표시되며, 이 접두사는 전화 걸기 시 자동으로 제거됩니다.
  • 불투명한 임시 파일 -- 모든 임시 파일은 일반적인 .tmp 확장자와 임의의 16진수 식별자를 사용합니다. 파일 유형이나 타이밍 메타데이터가 파일 시스템에 유출되지 않습니다.
  • 회로 홉 표시 -- 통화 중 Tor 회로 경로를 선택적으로 표시하며, 릴레이 이름과 전체 국가 이름을 보여줍니다. 60초마다 자동 새로 고침됩니다. 설정 → Tor 설정을 통해 구성할 수 있습니다.
  • 국가 제외 -- Tor 회로에서 특정 국가를 제외합니다. Five Eyes, Nine Eyes, Fourteen Eyes 동맹에 대한 프리셋 또는 사용자 지정 국가 코드를 입력할 수 있습니다. torrc에서 StrictNodes와 함께 ExcludeNodes를 사용합니다.
  • HMAC 프로토콜 인증 -- 공유 비밀을 사용한 모든 프로토콜 메시지(음성, 텍스트, 제어 신호)의 선택적 HMAC-SHA256 서명. 메시지마다 임의의 nonce가 포함되며, 확인된 nonce는 추적되어 재생을 거부합니다. 서명되지 않았거나 위조되었거나 재생된 메시지는 조용히 삭제됩니다. 통화 중 동기화 해제를 방지하기 위해 HMAC 상태는 통화 시작 시 고정됩니다. 설정 → 보안을 통해 구성할 수 있습니다.
  • 삭제 전 덮어쓰기 -- 설정 → 보안의 선택적 토글로, 삭제 전에 모든 임시 파일을 /dev/urandom의 임의 데이터로 덮어씁니다. 파일 크기를 읽고, conv=notrunc와 함께 dd를 사용하여 그만큼의 임의 데이터 바이트를 파일에 덮어쓰고, sync로 저장 장치에 쓰기를 플러시한 다음, rm으로 파일을 제거합니다. 모든 민감한 런타임 파일을 포함합니다: 원시 PCM 녹음, Opus 인코딩 오디오, 암호화된 페이로드, 복호화된 수신 오디오 및 채팅, 음성 효과 중간 파일, 암호 및 HMAC 키 자료, nonce 로그, 세션 플래그, PID 파일, 명명된 파이프, 교체 시 Tor 히든 서비스 키, 릴레이 세션 데이터. 디렉터리의 경우 내부의 모든 파일이 재귀적으로 덮어쓰여집니다. 내장 테스트 옵션은 샘플 파일을 생성하고, 원본 내용을 평문과 16진수로 표시하고, 덮어쓴 다음, 덮어쓴 16진수를 표시하여 사용자가 데이터가 파괴되었음을 시각적으로 확인할 수 있게 합니다. 기본적으로 꺼져 있습니다 — 대부분의 사용자에게는 표준 rm으로 충분합니다. TerminalPhone의 임시 파일은 작고 수명이 짧으며, 디스크 공간은 일반적으로 정상적인 시스템 활동에 의해 빠르게 재사용됩니다. 이 기능은 포렌식 복구에 대한 추가 보호 계층을 원하는 사용자를 위한 것입니다. 참고: SSD 및 플래시 저장 장치에서는 웨어 레벨링으로 인해 덮어쓰기가 다른 물리적 NAND 셀에 기록될 수 있습니다 — 플래시 미디어에서는 전체 디스크 암호화가 유일하게 신뢰할 수 있는 방어입니다. 기존 HDD에서는 덮어쓰기가 동일한 물리적 위치의 데이터를 대체하며 모든 소프트웨어 기반 복구에 효과적입니다.
  • 릴레이 모드 (그룹 브리지) -- N명의 익명 발신자를 연결하는 제로 지식 릴레이를 실행합니다. 릴레이는 복호화 없이 암호화된 오디오와 채팅을 전달하며, 공유 비밀이나 오디오 하드웨어가 필요하지 않습니다. 클라이언트는 RELAY:1 핸드셰이크를 통해 릴레이 모드를 자동 감지하고 실시간 그룹 발신자 수를 표시합니다. 한 발신자가 나가도 다른 발신자의 연결이 끊기지 않습니다. 운영자 대시보드는 발신자 수, 가동 시간, 데이터 처리량을 보여줍니다.
  • 단일 홉 Tor 모드 -- 릴레이 운영자를 위한 선택적 저지연 모드. 히든 서비스에 3개 대신 1개의 Tor 홉을 사용하여 서버 익명성을 희생하고 지연을 낮춥니다. 자신의 IP를 숨길 필요가 없는 릴레이 운영자에게 이상적입니다.
  • 포트 구성 -- 설정 → Tor 설정을 통해 수신 포트와 SOCKS 포트를 함께 구성합니다. 별도의 Tor 프로세스로 동일한 장치에서 여러 인스턴스를 실행할 수 있습니다. 주로 자체 그룹 통화에 참여하려는 릴레이 운영자에게 유용합니다 — 한 인스턴스에서 릴레이를 실행하고, 두 번째 인스턴스에서 SOCKS 포트를 변경한 다음, 발신자로 전화를 걸 수 있습니다.
  • 크로스 플랫폼 -- 표준 Linux 배포판, macOS, Termux를 통한 Android에서 실행됩니다. 플랫폼별 오디오 백엔드는 투명하게 처리됩니다.
  • 루트 불필요 -- 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가 설치되어 있지 않으면 스크립트가 먼저 Homebrew를 설치한 다음, 다음 패키지들을 설치합니다:

패키지용도
torOnion 라우팅 및 숨겨진 서비스
opus-tools음성 압축 (Opus 코덱)
sox오디오 녹음 및 재생 (rec, play)
socatTor SOCKS 프록시를 통한 양방향 TCP 릴레이
opensslAES-256-CBC 암호화 및 복호화

참고: macOS는 ALSA 대신 녹음(rec)과 재생(play) 모두에 sox를 사용합니다. 추가 오디오 패키지는 필요하지 않습니다.

Apple Silicon (M1/M2/M3+): Homebrew가 네이티브 ARM 접두사(/opt/homebrew)에 설치되어 있는데 터미널이 Rosetta 2(x86_64 프로세스)에서 실행 중인 경우, 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를 설치하세요. 이것은 Termux 패키지가 아닌 별도의 Android 애플리케이션으로, 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 앱과 통신하는 명령줄 유틸리티를 설치합니다.

**Step 4: Run 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-apiAndroid 마이크 및 미디어 플레이어로의 CLI 브리지
ffmpegAndroid의 M4A 녹음을 Opus 인코딩을 위한 원시 PCM으로 변환

빠른 시작```

  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)

양측 모두 통화를 시작하기 전에 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에서 토글 모드를 사용하여 이에 적응합니다.

키동작
SPACE 탭녹음 시작. 다시 탭하면 중지하고 전송합니다.
T암호화된 문자 메시지 전송.
S통화 중 설정 열기(암호 변경, 품질 조정).
Q통화를 종료하고 메뉴로 돌아갑니다.
Vol Down ×2볼륨 버튼으로 녹음 토글(설정에서 Volume 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>발신자 ID -- 발신자의 .onion 주소
CIPHER:<name>발신자의 암호화 암호. 연결 시 및 변경 시 교환됨.
PTT_START발신자가 녹음을 시작함
PTT_STOP발신자가 녹음을 마쳤음; 오디오가 뒤따르거나 이미 전송됨
AUDIO:<base64>완전한 암호화 오디오 메시지
MSG:<base64>암호화된 텍스트 메시지
HANGUP발신자가 연결을 끊는 중
PING연결 유지 신호
RELAY:1릴레이 인사 -- 연결 시 릴레이가 전송하며, 그룹 모드를 트리거함
GROUP:<n>그룹 크기 업데이트 -- 발신자가 참여하거나 떠날 때 릴레이가 브로드캐스트함

Termux에서는 추가 변환 단계가 Android의 기본 M4A 녹음 형식을 처리하며, Opus 인코딩 전에 ffmpeg를 사용하여 원시 PCM으로 변환합니다.


보안 모델

암호화: 모든 오디오는 전송 전에 사용자 구성 가능한 암호(기본값: AES-256-CBC)로 암호화됩니다. 가장 강력한(256비트)부터 적절한(128비트)까지 순위가 매겨진 21개의 선별된 암호를 사용할 수 있습니다. 키는 사전 공유 비밀에서 PBKDF2를 사용하여 10,000회 반복으로 파생됩니다. 암호화는 Tor의 전송 암호화와 독립적으로 애플리케이션 계층에서 적용됩니다. 비밀은 명령줄 인수가 아닌 파일 디스크립터(-pass fd:3)를 통해 OpenSSL에 전달되므로 프로세스 테이블에 노출되지 않습니다.

암호 협상: 양측은 연결 시 및 통화 중 암호가 변경될 때마다 암호 이름을 교환합니다. 암호 이름은 비밀이 아닙니다(케르크호프스의 원리). 로컬과 원격 암호가 일치하지 않으면 양측 모두 통화 헤더에 빨간색 표시가 나타납니다.

전송: 모든 데이터는 Tor 숨겨진 서비스 회로를 통해 라우팅됩니다. 어느 쪽의 IP 주소도 노출되지 않습니다. 클리어넷 트래픽은 없습니다. 네트워크 관찰자가 연결을 어느 쪽에도 귀속시킬 수 없습니다.

트래픽 분석 저항: 녹음 후 전송 모델은 불규칙한 전송 패턴(불규칙한 간격의 가변 길이 메시지)을 생성하므로 연속 스트리밍보다 지문 채취가 더 어렵습니다.

인증: 공유 비밀이 암시적 인증 역할을 합니다. 양측이 동일한 비밀을 가지고 있지 않으면 복호화가 실패하고 오디오가 재생되지 않습니다. 연결 시 양측은 발신자 식별을 위해 .onion 주소를 교환합니다. 비밀은 선택적으로 암호 문구로 저장 시 암호화할 수 있으며, 실행 시 스크립트가 암호 문구를 입력하라는 메시지를 표시하여 잠금을 해제합니다.

HMAC 프로토콜 서명(선택 사항): 활성화되면 HANGUP, PTT_START, PING과 같은 제어 신호를 포함한 모든 와이어 프로토콜 메시지가 공유 비밀에서 파생된 HMAC-SHA256으로 서명됩니다. 메시지마다 무작위 nonce가 포함되어 동일한 명령이 고유한 서명을 생성합니다. 확인된 nonce는 통화별로 추적되며 중복은 거부되어 재전송 공격을 방지합니다. HMAC 설정은 런타임 파일을 통해 통화 시작 시 고정되므로 설정이 통화 중에 토글되더라도(변경 사항은 다음 통화에 적용됨) 송신 및 수신 경로가 항상 일치합니다. 수신 측에서는 유효하지 않거나 누락되었거나 재전송된 서명이 있는 메시지는 조용히 삭제됩니다. 이는 Tor 회로를 손상시켰지만(공유 비밀은 없는) 공격자가 명령을 주입하거나 재전송하는 것을 방지합니다. 통화가 작동하려면 양측 모두 HMAC을 활성화해야 합니다. 1.1.3 이전 버전과 호환되지 않습니다.

제한 사항:

  • 공유 비밀은 보안 채널(대면, 암호화된 메시징 등)을 통해 대역 외로 교환해야 합니다.
  • 순방향 비밀성이 없습니다. 공유 비밀이 손상되면 해당 비밀을 사용하는 모든 과거 및 미래 통신을 복호화할 수 있습니다.
  • 프로토콜은 손상된 엔드포인트를 보호하지 않습니다. 어느 쪽 기기든 손상되면 공격자는 평문 오디오에 접근할 수 있습니다.

릴레이 모드 보안: 릴레이는 아키텍처적으로 제로 지식입니다. 공유 비밀을 절대 보유하지 않으며 어떤 콘텐츠도 복호화할 수 없습니다. 오디오 데이터는 메모리에만 존재하는 커널 파이프 버퍼(FIFO)를 통해 흐릅니다 -- 디스크에 아무것도 기록되지 않습니다. 릴레이가 중지되면 모든 임시 파일이 삭제됩니다. 릴레이 운영자는 무엇이 말해졌는지, 발신자가 누구인지 확인할 수 없으며 어떤 메시지도 읽을 수 없습니다. 릴레이는 모든 제어 신호(HANGUP, ID:, CIPHER:, PTT_START, PTT_STOP)를 필터링하고 AUDIO:, MSG:, PING만 전달합니다. 전역 수동적 공격자는 트래픽 상관 분석을 수행하여 발신자를 릴레이와 연관시킬 수 있지만 메시지 내용은 불투명하게 유지됩니다.

릴레이 용량: 주요 병목은 Tor 대역폭입니다. Tor 숨겨진 서비스 처리량은 매우 가변적이며 회로 품질, 릴레이 혼잡, 지리적 거리에 따라 달라집니다. 일반적인 10초 음성 메시지는 암호화 시 약 20KB이며, 각 전송은 N-1명의 수신자에게 팬아웃됩니다.

발신자메시지당 아웃바운드예상 경험
2--320--40KB대부분의 연결에서 안정적
3--540--80KB안정적인 회로에서 양호, 모바일 데이터에서 지연 가능
5--1080--180KB한계에 근접, 전송 간 눈에 띄는 지연
10+180KB+불안정, 상당한 대기열 및 잠재적 메시지 손실

현실적인 용량은 휴대폰(Termux)에서 실행되는 릴레이의 경우 3--5명의 발신자, 안정적인 연결을 갖춘 전용 Linux 머신의 경우 5--10명의 발신자입니다. 모바일 기기에서 실행되는 릴레이는 추가적인 제약에 직면합니다: 모바일 데이터는 Tor 위에 지연을 추가하고, Android는 메모리 회수를 위해 백그라운드 Termux 프로세스를 종료할 수 있으며, 연결된 발신자마다 배터리 소모가 증가합니다. Tor 회로 대역폭은 경로 품질에 따라 50KB/s에서 500KB/s까지 변할 수 있으며, 회로는 세션 중에 저하되거나 회전할 수 있습니다. 단일 홉 모드는 처리량을 향상시키지만 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 | Tor SOCKS 프록시 포트 |
| `OPUS_BITRATE` | 16 | Opus 인코딩 비트레이트(kbps) |
| `CIPHER` | aes-256-cbc | 암호화 암호(Settings를 통해 구성 가능) |
| `SNOWFLAKE_ENABLED` | 0 | 검열 우회를 위한 Snowflake 브리지 |
| `AUTO_LISTEN` | 0 | Tor 시작 시 통화 자동 수신 |
| `PTT_KEY` | SPACE | 푸시투토크 키(Settings를 통해 구성 가능) |
| `VOL_PTT` | 0 | 볼륨 다운 두 번 탭 PTT, Termux 전용(실험적) |
| `EXCLUDE_NODES` | (비어 있음) | Tor ExcludeNodes 국가 목록(예: `{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 | 오디오 샘플 레이트(Hz) |
| `CHUNK_DURATION` | 1 | 오디오 테스트 청크의 길이(초) |

---

## 문제 해결

**Tor 부트스트랩 실패:**
`.terminalphone/tor_data/tor.log`에서 Tor 로그를 확인하세요. 일반적인 원인으로는 시계 오차, Tor를 차단하는 네트워크 제한, 또는 동일한 SOCKS 포트를 사용하는 다른 Tor 인스턴스가 있습니다.

**Termux에서 오디오가 나오지 않음:**
Termux:API 앱이 F-Droid에서 설치되었는지 확인하세요(`termux-api` 패키지만으로는 안 됨). Android 설정에서 Termux:API 앱에 마이크 권한을 부여하세요. 오디오 루프백 테스트(옵션 5)를 실행하여 확인하세요.

**Termux에서 ffmpeg 설치 실패:**
의존성을 설치하기 전에 `pkg upgrade`를 실행하세요. 설치 프로그램이 이를 자동으로 수행하지만, 패키지를 수동으로 설치한 경우 오래된 공유 라이브러리로 인해 링크 오류가 발생할 수 있습니다.

**오디오 테스트는 작동하지만 통화가 무음:**
양쪽이 동일한 공유 비밀을 사용하고 있는지 확인하세요. 비밀이 일치하지 않으면 오류 메시지 없이 복호화가 실패합니다. 통화는 연결되지만 오디오가 들리지 않습니다.

**Snowflake 브리지 연결이 느림:**
Snowflake는 WebRTC 프록시를 통해 트래픽을 라우팅하므로 부트스트래핑 시간이 추가됩니다. Snowflake가 활성화된 경우 Tor가 100%에 도달하는 데 30~60초(또는 그 이상)가 걸리는 것은 정상입니다. 스크립트는 부트스트랩 중에 인내심 안내를 표시합니다.

**첫 Tor 부트스트랩이 느림:**
첫 실행 시 Tor는 전체 네트워크 컨센서스를 처음부터 다운로드해야 하므로 1~2분이 걸릴 수 있습니다. 스크립트는 이를 감지하고 안내를 표시합니다. 첫 실행 시 부트스트랩 타임아웃이 120초에서 300초로 자동 연장됩니다. 이후 실행에서는 캐시된 컨센서스 데이터를 사용하므로 훨씬 빠릅니다.

**전화 끊기가 메뉴로 돌아가지 않음:**
Q를 누른 후 스크립트가 멈추면 Ctrl+C를 눌러 강제로 정리하고 셸로 돌아가세요.

**macOS에서 `Cannot install under Rosetta 2 in ARM default prefix`:**
이는 Apple Silicon에서 터미널이 Rosetta 2(`x86_64` 프로세스)로 실행되지만 Homebrew가 네이티브 ARM 접두사(`/opt/homebrew`)에 있는 경우 발생합니다. 의존성 설치 프로그램(옵션 **7**)은 이제 이를 감지하고 `arch -arm64`로 `brew`를 자동으로 다시 실행합니다. 패키지를 수동으로 설치하는 경우 직접 접두사를 붙이세요: `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)


---

## 라이선스

MIT

카테고리