터미널폰 – 명령줄에서 사용하는 종단간 암호화 워키토키

3 hours ago 2

  • 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에서 TermuxTermux:API 앱 설치
    • pkg install termux-api 후 bash terminalphone.sh 실행
    • 추가 패키지: ffmpeg, openssl-tool, tor, sox, socat 등

사용법

  • 기본 절차
    1. bash terminalphone.sh 실행
    2. 메뉴 7번으로 의존성 설치
    3. 메뉴 8번으로 Tor 시작
    4. 메뉴 4번에서 공유 비밀키 설정
    5. .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로 강제 종료 가능

라이선스

  • MIT License

Read Entire Article