
Tor 히든 서비스를 통한 암호화된 푸시투톡 음성 및 텍스트 통신, 종단간 암호화, 구성 가능한 암호화 방식, 그룹 통화를 위한 중계 모드, 그리고 포렌식 방지 데이터 파괴 기능.
Tor 히든 서비스를 통한 암호화된 푸시투토크 음성 통신.
TerminalPhone는 단일 자체 포함 Bash 스크립트로, Tor 네트워크를 통해 두 명 이상의 당사자 간에 익명의 종단간 암호화 음성 및 텍스트 통신을 제공합니다. 무전기처럼 작동합니다: 음성 메시지를 녹음하면 압축, 암호화되어 하나의 단위로 원격 당사자에게 전송됩니다. 통화 중에 암호화된 텍스트 메시지를 보낼 수도 있습니다. 서버 인프라, 계정, 전화번호가 필요 없습니다. Tor 히든 서비스 .onion 주소가 신원입니다.
T를 눌러 메시지를 입력합니다..onion 주소를 교환합니다. 원격 주소가 통화 헤더에 표시됩니다.S를 눌러 설정에 접근합니다. 즉시 암호를 변경할 수 있으며, 원격 측의 표시가 자동으로 업데이트됩니다.jq가 필요합니다(요청 시 설치됨). 각 트리거 후 볼륨이 자동으로 복원됩니다..onion 주소는 영구적인 라우팅 가능 엔드포인트 역할을 합니다. 포트 포워딩이나 공인 IP가 필요하지 않습니다..onion 주소를 스캔 가능한 QR 코드로 표시할 수 있습니다. qrencode가 설치되지 않은 경우 설치하라는 메시지가 표시됩니다. QR 코드는 대체 화면 버퍼에 렌더링되며 해제 시 사라집니다. 일부 QR 스캐너가 자동으로 http://를 앞에 추가한다는 경고가 있으며, 이 접두사는 전화 걸 때 자동으로 제거됩니다..tmp 확장자와 임의의 16진수 식별자를 사용합니다. 파일 유형이나 타이밍 메타데이터가 파일 시스템에 유출되지 않습니다.StrictNodes와 함께 ExcludeNodes를 사용합니다./dev/urandom의 임의 데이터로 덮어씁니다. 파일 크기를 읽고, 그만큼의 임의 데이터를 dd로 conv=notrunc를 사용하여 파일에 덮어쓰고, sync로 저장 장치에 쓰기를 플러시한 후 rm으로 파일을 제거합니다. 모든 민감한 런타임 파일을 포함합니다: 원시 PCM 녹음, Opus 인코딩 오디오, 암호화된 페이로드, 복호화된 인바운드 오디오 및 채팅, 음성 효과 중간 매체, 암호 및 HMAC 키 자료, nonce 로그, 세션 플래그, PID 파일, 네임드 파이프, Tor 히든 서비스 키 순환, 릴레이 세션 데이터. 디렉토리의 경우 내부의 모든 파일이 재귀적으로 덮어써집니다. 내장 테스트 옵션은 샘플 파일을 만들고, 원본 내용을 평문과 16진수로 표시한 후 덮어쓰고, 덮어쓰인 16진수를 표시하여 사용자가 데이터가 파괴되었음을 시각적으로 확인할 수 있게 합니다. 기본적으로 꺼져 있습니다 — 대부분의 사용자에게 표준 rm으로 충분합니다. TerminalPhone의 임시 파일은 작고 수명이 짧으며, 디스크 공간은 일반적으로 정상적인 시스템 활동으로 빠르게 재사용됩니다. 이 기능은 법의학적 복구에 대한 추가 보호 계층을 원하는 사용자를 위한 것입니다. 참고: SSD 및 플래시 스토리지에서 웨어 레벨링으로 인해 덮어쓰기가 다른 물리적 NAND 셀에 적용될 수 있습니다 — 플래시 미디어에서 유일하게 신뢰할 수 있는 방어는 전체 디스크 암호화입니다. 기존 HDD에서는 덮어쓰기가 동일한 물리적 위치의 데이터를 대체하며 모든 소프트웨어 기반 복구에 효과적입니다.RELAY:1 핸드셰이크를 통해 릴레이 모드를 자동 감지하고 실시간 그룹 발신자 수를 표시합니다. 한 발신자가 나가도 다른 사람은 연결이 끊어지지 않습니다. 운영자 대시보드에 발신자 수, 가동 시간, 데이터 처리량이 표시됩니다.지원 배포판: 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` | 온ion 라우팅 및 히든 서비스 |
| `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가 설치되어 있지 않으면 스크립트가 먼저 설치한 후 다음 패키지를 설치합니다:
참고: macOS는 ALSA 대신 sox를 녹음(rec) 및 재생(play)에 사용합니다. 추가 오디오 패키지가 필요하지 않습니다.
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이 작동합니다.
TerminalPhone은 Termux를 통해 Android 기기를 지원합니다. Android의 샌드박스 오디오 아키텍처로 인해 두 가지 추가 구성 요소가 필요합니다.
1단계: Termux 설치
F-Droid에서 Termux를 설치하세요. Play Store 버전은 오래되었고 더 이상 업데이트를 받지 않으므로 사용하지 마세요.
2단계: Termux:API 앱 설치
F-Droid에서 Termux:API를 설치하세요. 이는 Termux와 Android 시스템 API 간의 브리지를 제공하는 별도의 Android 애플리케이션(Termux 패키지 아님)입니다. 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 녹음을 Opus 인코딩을 위한 원시 PCM으로 변환 |
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
Linux (누르고 말하기):
| 키 | 동작 |
|---|---|
| SPACE 누르기 | 음성 메시지 녹음. 키를 놓으면 자동 전송. |
| T | 암호화된 텍스트 메시지 보내기. |
| S | 통화 중 설정 열기 (암호 변경, 품질 조정). |
| Q | 통화 종료 후 메뉴로 돌아가기. |
Termux (토글 모드):
Android 소프트웨어 키보드는 누를 때가 아닌 놓을 때 키 이벤트를 보냅니다. TerminalPhone은 Termux에서 토글 모드를 사용하여 이에 적응합니다.
| 키 | 동작 |
|---|---|
| SPACE 탭 | 녹음 시작. 다시 탭하면 중지 및 전송. |
| T | 암호화된 텍스트 메시지 보내기. |
| S | 통화 중 설정 열기 (암호 변경, 품질 조정). |
| Q |
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 연결을 통한 라인 기반 텍스트입니다:
Termux에서는 Android 기본 M4A 녹음 형식을 처리하기 위해 추가 변환 단계가 필요하며, ffmpeg를 사용하여 Opus 인코딩 전에 원시 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)가 포함되어 동일한 명령이 고유한 서명을 생성합니다. 통화별로 본 논스가 추적되고 중복은 거부되어 재생 공격을 방지합니다. HMAC 설정은 런타임 파일을 통해 통화 시작 시 고정되므로 통화 중 설정이 전환되더라도(설정 변경은 다음 통화에 적용됨) 송신 및 수신 경로가 항상 일치합니다. 수신 측에서 유효하지 않거나, 누락되었거나, 재생된 서명이 있는 메시지는 자동으로 삭제됩니다. 이는 Tor 회로를 손상시켰지만(공유 비밀을 가지고 있지 않은) 공격자가 명령을 주입하거나 재생하는 것을 방지합니다. 통화가 작동하려면 양 당사자가 HMAC을 활성화해야 합니다. 버전 1.1.3 이전과 호환되지 않습니다.
제한 사항:
릴레이 모드 보안: 릴레이는 아키텍처적으로 제로 지식입니다. 공유 비밀을 절대 보유하지 않으며 콘텐츠를 복호화할 수 없습니다. 오디오 데이터는 메모리에만 존재하는 커널 파이프 버퍼(FIFO)를 통해 흐릅니다. 디스크에 기록되는 것은 없습니다. 릴레이가 중지되면 모든 임시 파일이 삭제됩니다. 릴레이 운영자는 무슨 말이 오갔는지, 발신자가 누구인지 확인하거나 메시지를 읽을 수 없습니다. 릴레이는 모든 제어 신호(HANGUP, ID:, CIPHER:, PTT_START, PTT_STOP)를 필터링하고 AUDIO:, MSG:, PING만 전달합니다. 글로벌 수동적 공격자는 트래픽 상관 분석을 통해 발신자를 릴레이와 연관시킬 수 있지만 메시지 내용은 불투명합니다.
릴레이 용량: 주요 병목은 Tor 대역폭입니다. Tor 히든 서비스 처리량은 매우 가변적이며 회로 품질, 릴레이 혼잡 및 지리적 거리에 따라 달라집니다. 일반적인 10초 음성 메시지는 약 20KB 암호화되어 있으며, 각 전송은 N-1명의 수신자에게 분산됩니다.
현실적인 용량은 핸드폰(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 | 암호화 알고리즘 (설정에서 구성 가능) |
| `SNOWFLAKE_ENABLED` | 0 | 검열 우회를 위한 Snowflake 브리지 |
| `AUTO_LISTEN` | 0 | Tor 시작 시 통화 자동 수신 |
| `PTT_KEY` | SPACE | PTT 키 (설정에서 구성 가능) |
| `VOL_PTT` | 0 | 볼륨 낮추기 두 번 탭 PTT, Termux 전용 (실험적) |
| `EXCLUDE_NODES` | (비어 있음) | Tor ExcludeNodes 국가 목록 (예: `{US},{GB}`) |
| `HMAC_AUTH` | 0 | 모든 프로토콜 메시지 HMAC 서명 (선택 사항, 양쪽 일치 필요) |
| `OVERWRITE_DELETE` | 0 | 삭제 전 임시 파일을 임의 데이터로 덮어쓰기 (기본적으로 꺼짐) |
| `PTT_CHIME` | off | PTT 알림 차임 프리셋 (끄기, 톤, 더블, 짹짹, 딩, 클릭, 사용자 정의) |
| `SINGLE_HOP` | 0 | 단일 홉 Tor 모드 (지연 시간 감소, 서버 익명성 비활성화) |
| `SAMPLE_RATE` | 8000 | 오디오 샘플 레이트 (Hz) |
| `CHUNK_DURATION` | 1 | 오디오 테스트 청크 지속 시간 (초) |
---
## 문제 해결
**Tor 부트스트래핑 실패:**
`.terminalphone/tor_data/tor.log`에서 Tor 로그를 확인하세요. 일반적인 원인은 시계 오차, Tor를 차단하는 네트워크 제한, 또는 동일한 SOCKS 포트를 사용하는 다른 Tor 인스턴스입니다.
**Termux에서 오디오 없음:**
F-Droid에서 Termux:API 앱이 설치되었는지 확인하세요(`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
| 패키지 | 용도 |
|---|
tor | Onion 라우팅 및 히든 서비스 |
opus-tools | 음성 압축 (Opus 코덱) |
sox | 오디오 녹음 및 재생 (rec, play) |
socat | Tor SOCKS 프록시를 통한 양방향 TCP 릴레이 |
openssl | AES-256-CBC 암호화 및 복호화 |
| 통화 종료 후 메뉴로 돌아가기. |
| 볼륨 아래 ×2 | 볼륨 버튼으로 녹음 토글 (설정에서 볼륨 PTT 활성화 필요). |
| 메시지 | 설명 |
|---|
ID:<onion> | 발신자 ID -- 발신자의 .onion 주소 |
CIPHER:<name> | 발신자의 암호화 암호. 연결 시 및 변경 시 교환됨 |
PTT_START | 발신자가 녹음을 시작했습니다 |
PTT_STOP | 발신자가 완료했습니다. 오디오가 뒤따르거나 전송되었습니다 |
AUDIO:<base64> | 완전한 암호화된 오디오 메시지 |
MSG:<base64> | 암호화된 텍스트 메시지 |
HANGUP | 발신자가 연결을 끊고 있습니다 |
PING | 연결 유지 신호 |
RELAY:1 | 릴레이 인사말 -- 연결 시 릴레이가 전송하며, 그룹 모드를 활성화합니다 |
GROUP:<n> | 그룹 크기 업데이트 -- 발신자가 참여하거나 떠날 때 릴레이가 브로드캐스트합니다 |
| 발신자 수 | 메시지당 아웃바운드 | 예상 경험 |
|---|
| 2--3명 | 20--40KB | 대부분의 연결에서 안정적 |
| 3--5명 | 40--80KB | 안정적인 회로에서 좋음, 모바일 데이터에서 지연 가능 |
| 5--10명 | 80--180KB | 한계에 근접, 전송 간 눈에 띄는 지연 |
| 10명 이상 | 180KB 이상 | 신뢰할 수 없음, 상당한 큐잉 및 잠재적 메시지 손실 |