- 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 포함, 재전송 공격 차단
-
제한 사항:
- 비밀키는 외부 안전 채널로 교환 필요
-
전방 비밀성 없음, 키 유출 시 과거 통신 복호화 가능
-
엔드포인트 보안 침해 시 보호 불가
설정 구조
- 설정 폴더 .terminalphone/ 내에 Tor 데이터, 오디오 임시파일, PID, 공유 비밀키, torrc 저장
- 기본값 예시:
- 포트 7777, 샘플레이트 8kHz, 기본 암호 aes-256-cbc
-
AUTO_LISTEN, SNOWFLAKE_ENABLED, HMAC_AUTH 등 옵션 설정 가능
문제 해결
-
Tor 부팅 실패: .terminalphone/tor_data/tor.log 확인
-
Termux 무음 문제: Termux:API 앱 설치 및 마이크 권한 확인
-
ffmpeg 오류: pkg upgrade 실행
-
통화 무음: 공유 비밀키 불일치 확인
-
Snowflake 연결 지연: 초기 부팅 30~60초 소요 가능
-
첫 Tor 실행 지연: 네트워크 합의 데이터 다운로드로 1~2분 소요
-
통화 종료 오류: Ctrl+C로 강제 종료 가능
라이선스