7 ポイント 投稿者 GN⁺ 2026-02-28 | 1件のコメント | WhatsAppで共有
  • Tor ネットワーク経由で**音声とテキストを匿名・エンドツーエンド暗号化(E2EE)**でやり取りする、Bash ベースのウォーキートーキー型通信ツール
  • サーバー、アカウント、電話番号不要で、.onion アドレスだけで相手と直接接続し、音声メッセージを録音してから送信する**プッシュ・トゥ・トーク(PTT)**方式
  • AES、ChaCha20、Camellia、ARIA など 21 種類の暗号の選択、HMAC-SHA256 認証PBKDF2 鍵導出など強力なセキュリティ機能を提供
  • Linux と Android Termux の両環境をサポートし、sox・opus-tools・Tor・openssl などの標準ツールだけで動作
  • 単一スクリプトで構成されており、インストールと保守が簡単で、セキュリティ研究やプライバシー重視の通信実験に活用可能

概要

  • TerminalPhone は Tor Hidden Service を利用して、2 人のユーザーが匿名で音声とテキストを交換できるようにする Bash スクリプト
    • すべての通信は AES-256-CBC(デフォルト)などの選択可能な暗号で保護
    • .onion アドレスがユーザー識別子の役割を果たす
    • サーバーインフラやアカウント登録は不要

主な機能

  • ウォーキートーキー方式の音声メッセージ: 録音後に送信し、リアルタイムストリーミングはなし
  • 通話中の暗号化チャット: T キーでテキストメッセージを送受信
  • 自動終了検知および相手の状態表示(録音中/待機中)
  • 21 種類の暗号選択とリアルタイム交渉表示通話中の暗号変更が可能
  • Snowflake ブリッジ対応で検閲回避が可能
  • QR コードでのアドレス共有ボイスチェンジャーPTT 通知音、**自動受信(auto-listen)**など多様な追加機能
  • HMAC-SHA256 プロトコル認証によりリプレイ攻撃を防止
  • Tor 回路経路の表示と特定国の除外設定をサポート
  • 単一の Bash ファイルroot 権限不要、**低帯域幅(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 Hidden Service 回路を通じて IP を露出せずに通信
  • トラフィック分析耐性: 不規則な送信パターンでフィンガープリント化を防止
  • 認証: 共有秘密鍵が一致しないと復号に失敗
  • HMAC-SHA256 署名: すべてのメッセージにランダムな nonce を含め、リプレイ攻撃を遮断
  • 制限事項:
    • 秘密鍵は外部の安全なチャネルで交換する必要がある
    • 前方秘匿性はなく、鍵が漏えいすると過去の通信を復号できる可能性がある
    • エンドポイントのセキュリティ侵害時は保護不可

ライセンス

  • MIT License

1件のコメント

 
GN⁺ 2026-02-28
Hacker Newsのコメント
  • v3 onionアドレスを暗号学的IDとNATトラバーサル層の両方として使う構造が本当に洗練されている
    STUN/TURNサーバーも、ホールパンチングも不要で、スクリプトを実行すればTorがルーティングを処理してくれる
    Torで約20KBのOpusオーディオチャンクを送るとき、実際の遅延がどれくらいなのか気になる — 2〜3秒程度なのか、それとももっとひどいのか

    • 実際の遅延は2〜3秒くらい。最初はフルデュプレックスで試したが、ひどすぎた
      ウォーキートーキー方式なら、ユーザーが「聞く→話す」の順序を守るので、遅延が大きな問題にならない
    • STUN/TUNは帯域効率の面で重要
      STUNではトラフィックは2台の機器間だけを流れるが、TorのようなVPNでは中間サーバーをすべて経由するため、トラフィックコストが大きい
      VPSで月あたり数GBの制限がある場合には大きな制約になる
    • わざわざ音声メッセージにして遅延を増やす必要があるのかという気もする
      むしろテキストメッセージの方がよさそうだ。それでもプロジェクト自体はすばらしい
    • ピッという音だけ残した
  • onionサービスをバックエンドとして活用した実例を見るのは興味深い
    近いうちに、RustライブラリとしてTorをアプリに直接埋め込めるArti onionクライアントもサポートされる予定
    こうした試みが増えるほど、ネットワークのカバートラフィックも増えるはず

    • Torが使いにくい理由のひとつは、多くのIT管理者がTorを違法行為と同一視しているからだ
      そのため、企業ネットワークや公共Wi-Fiのような統制された環境では、Torの利用はほぼ不可能
  • リアルタイムでないなら、受信側で再生速度調整や無音区間の除去を入れて遅延を減らすこともできる
    複数人が同時に送った音声を高速再生することも可能
    Opusを使っているなら、実験的機能であるDREDエラー復元スキームをコーデックとして試してみる価値がある
    転送中にTorが切れても、受信者が最低限の音声を受け取れるように、まずDREDデータを送る構成にもできる

  • 「21種類の暗号アルゴリズムが提供されている」という部分が興味深い。多すぎる気もする

    • OpenSSLを使っているからで、実際のところ「できるからやった」だけ
      AES-GCMを使いたかったが、OpenSSL単体では認証処理が難しかった
      Tor自体がすでにE2EEなので、この層は実質的に二重暗号化になっている。それでもネットワークに届く前にもう一度暗号化される点は気に入っている
    • 特定の暗号に執着するのは危険だ。攻撃者に狙いを明確に示してしまい、かえって脆弱性になり得る
  • GitLabが最近以前より速くなった気がするが、実際に最適化されたのか、それともlazy loadingによる錯覚なのか気になる

  • このプロジェクトは本当に気に入った。ユーザーが認証情報を安全に交換するにはどうすればいいのだろう? PGPメールはよい選択だろうか?

    • 私は、すでに信頼している相手と話している状況を想定している
      できれば直接会って交換するか、セキュアメッセンジャー経由で交換するのが理想
    • あるいは 0x.co のような「oh by code」サービスを使ってonionアドレスを書き残したり、
      物理的な空間(黒板、掲示板、看板など)に残しておく方法もある
      こうすれば完全にオフラインの状態でも将来の相手とつながれる
  • Tor回線で特定の国を**除外(Exclude Countries)**する機能は興味深い
    Five Eyes、Nine Eyes、Fourteen Eyesのようなプリセットもあり、torrc設定でExcludeNodesとStrictNodesを使う
    実際にセキュリティ向上に役立つのか気になる

    • これも「できるからやった」もののひとつ。Tor開発者がオプションとして入れている以上、何か理由はあるのだろう
      侵害されたノードが存在するのは事実なので、効果の有無は別として、制御権があるのは興味深い
    • 完全に支配されたノードを避けられなくても、その政府が支配するISPを迂回する助けにはなる
  • Torの遅延特性を考えると、ウォーキートーキーモデルは非常に賢い設計
    リアルタイム双方向音声は往復150msを超えると不自然になるが、Torはホップごとに50〜200msを追加する
    ストア・アンド・フォワード方式で設計すれば、ネットワーク特性と戦わずに済む
    どのコーデックを使っているのか気になる — リアルタイムでないならOpusのトレードオフも変わり得る

    • Opusを使用しており、6kbps〜64kbpsの間で品質を調整できる
      6kbpsでも音声認識率がかなり高くて驚いた
      Termuxではマイクにアクセスできないため、Termux APIアプリとffmpegを通して音声を変換する必要がある
    • 誰かがこのコメントをAIが自動生成したみたいだと冗談を言っていた
    • 私も、メールやテキストメッセージのように考えて話す時間を与えてくれるこの方式が好きだ
      数秒の遅延があるだけでも、不要な無駄話を減らせる
  • これをグループ通信のように、複数人が同じチャンネルに参加する形に設定できるのか気になる

    • 現状では1対1通信のみ対応しているが、グループ通話機能も検討中
    • E2EEの構造上、グループ通信はそう簡単ではない
  • 面白そうだったのでコードをざっと見てみたが、
    '|| true' が76回、'echo ""' が50回、' [ ' が261回、'=$(' が90回出てくる

    • 私もbashが好きなので気になる。'[' が非推奨とされる理由はわかるが、
      '|| true' のようなパターンはなぜ問題なのか知りたい。私は set -euo pipefail と組み合わせてカスタムエラー処理によく使う