- Tor 네트워크를 통해 음성과 텍스트를 익명·종단간 암호화(E2EE) 방식으로 주고받는 Bash 기반 워키토키형 통신 도구
-
서버, 계정, 전화번호 없이
.onion주소만으로 상대와 직접 연결하며, 음성 메시지를 녹음 후 전송하는 푸시투토크(PTT) 구조 - AES, ChaCha20, Camellia, ARIA 등 21종 암호 선택, HMAC-SHA256 인증, PBKDF2 키 파생 등 강력한 보안 기능 제공
- Linux와 Android Termux 환경 모두 지원하며, sox·opus-tools·Tor·openssl 등 표준 도구만으로 동작
- 단일 스크립트로 구성되어 설치와 유지보수가 단순하며, 보안 연구·프라이버시 중심 통신 실험에 활용 가능
개요
- TerminalPhone은 Tor 히든 서비스를 이용해 두 사용자가 익명으로 음성과 텍스트를 교환할 수 있게 하는 Bash 스크립트
- 모든 통신은 AES-256-CBC(기본값) 등 선택 가능한 암호로 보호
-
.onion주소가 사용자 식별자 역할을 수행 - 서버 인프라나 계정 등록이 필요 없음
주요 기능
- 워키토키 방식 음성 메시지: 녹음 후 전송하며 실시간 스트리밍 없음
-
통화 중 암호화 채팅:
T키로 텍스트 메시지 송수신 - 자동 종료 감지 및 상대방 상태 표시(녹음 중/대기 중)
- 21종 암호 선택 및 실시간 협상 표시, 중간 통화 중 암호 변경 가능
- Snowflake 브리지 지원으로 검열 회피 가능
- QR 코드 주소 공유, 음성 변조(voice changer), PTT 알림음, 자동 수신(auto-listen) 등 다양한 부가 기능
- HMAC-SHA256 프로토콜 인증으로 재전송 공격 방지
- Tor 회로 경로 표시 및 특정 국가 제외 설정 지원
- 단일 Bash 파일, 루트 권한 불필요, 저대역폭(16kbps) 환경에서도 작동
설치
-
Linux:
git clone후bash terminalphone.sh실행, 메뉴 7번으로 의존성 자동 설치- 설치 패키지:
tor,opus-tools,sox,socat,openssl,alsa-utils
- 설치 패키지:
-
Android Termux:
- F-Droid에서 Termux와 Termux:API 앱 설치
-
pkg install termux-api후bash terminalphone.sh실행 - 추가 패키지:
ffmpeg,openssl-tool,tor,sox,socat등
사용법
-
기본 절차
-
bash terminalphone.sh실행 - 메뉴 7번으로 의존성 설치
- 메뉴 8번으로 Tor 시작
- 메뉴 4번에서 공유 비밀키 설정
-
.onion주소를 상대에게 전달
-
- 수신: 메뉴 1번 “Listen for calls”
- 발신: 메뉴 2번 “Call an onion address”
-
CLI 모드 명령 예시:
-
bash terminalphone.sh call ADDRESS -
bash terminalphone.sh listen
-
작동 방식
-
녹음 후 전송(record-then-send) 모델
- 녹음된 음성은 Opus 인코딩 → AES 암호화 → Base64 인코딩 → Tor 전송
- 수신 측은 역순으로 복호화 및 재생
-
프로토콜 메시지는 텍스트 기반으로
ID,CIPHER,PTT_START,AUDIO,MSG,HANGUP,PING등을 포함 -
Termux에서는
ffmpeg로 M4A를 PCM으로 변환 후 처리
보안 구조
- 암호화: PBKDF2(10,000회 반복)로 파생된 키를 사용, Tor 전송 암호화와 별개로 애플리케이션 계층에서 추가 보호
- 암호 협상: 연결 시 및 변경 시 상호 교환, 불일치 시 헤더에 빨간 표시
- 전송 경로: Tor 히든 서비스 회로를 통해 IP 노출 없이 통신
- 트래픽 분석 저항성: 불규칙한 전송 패턴으로 지문화 방지
- 인증: 공유 비밀키가 일치하지 않으면 복호화 실패
- HMAC-SHA256 서명: 모든 메시지에 난수 nonce 포함, 재전송 공격 차단
-
제한 사항:
- 비밀키는 외부 안전 채널로 교환 필요
- 전방 비밀성 없음, 키 유출 시 과거 통신 복호화 가능
- 엔드포인트 보안 침해 시 보호 불가
라이선스
- MIT License