世界を動かす技術を、日本語で。

Show HN: ターミナルフォン – コマンドラインからのE2EEウォーキートーキー

概要

  • TerminalPhone は、Bashスクリプトによる匿名通信ツール
  • Torネットワーク 経由でエンドツーエンド暗号化を実現
  • 音声・テキストの ウォーキートーキー型通信 方式
  • サーバーやアカウント不要、.onionアドレスがID
  • プライバシー重視 の安全なコミュニケーション手段

TerminalPhoneの特徴

  • Bashスクリプト のみで動作するシンプルな設計
  • 匿名性 を確保するため、Torネットワークを利用
  • エンドツーエンド暗号化 による安全な通信
  • 音声メッセージ を録音後、圧縮・暗号化し単位ごとに送信
  • テキストメッセージ も通話中に暗号化して送信可能
  • サーバーインフラ不要、中央管理者が存在しない仕組み
  • アカウントや電話番号の登録不要、個人情報の提供を回避
  • Tor hidden serviceの.onionアドレス がユーザーの唯一の識別子
  • ウォーキートーキー形式 でリアルタイム性と匿名性を両立
  • オープンソース として信頼性と透明性を確保

利用シーンとメリット

  • プライバシー重視のコミュニケーション を求めるユーザー向け
  • ジャーナリストや活動家 の安全な連絡手段
  • 検閲回避匿名性保持 が必要な状況での利用
  • 追加アプリや外部サービス不要、導入の手軽さ
  • シンプルな操作性 で誰でも扱いやすい設計

技術的なポイント

  • Bashスクリプト によるクロスプラットフォーム対応
  • Tor hidden service を自動で生成・管理
  • 音声データの圧縮・暗号化 処理を内蔵
  • テキスト通信 も同様に暗号化
  • 通信はすべてTor経由 で匿名性を最大化
  • .onionアドレスの共有のみ で接続可能

注意点

  • リアルタイム通話 ではなく、 録音・送信型 の通信方式
  • Torネットワークの特性 上、遅延が発生する場合あり
  • 音質や速度 はネットワーク状況に依存
  • 高い匿名性 と引き換えに利便性が制限される場合あり

Hackerたちの意見

これ好き!ユーザーはどうやって安全に認証情報を交換すると思う?PGPでメールとか?

ありがとう!現実的な使い方としては、すでに信頼できる誰かと話してるから、理想的には対面で認証情報を交換したいな。好みのセキュアメッセンジャーを使うのもいいかも。

v3オニオンアドレスを暗号的なアイデンティティとNATトラバーサル層の両方に使うのは、めっちゃクリーンなアーキテクチャの選択だよね。STUN/TURNサーバーもいらないし、ホールパンピングもなし。スクリプトを起動すれば、Torがルーティングを処理してくれる。ウェブブラウジング以外でTorを定期的に使ってる人に聞きたいんだけど、今のところTor経由で約20KBのOpusオーディオチャンクを送るのって、実際どれくらいの遅延があるの?2~3秒の遅れなのか、それとももっとひどいの?

ビープボップ

実際の遅延は約2~3秒だね、その通り。最初はフルデュプレックス版から始めたけど、めっちゃひどかった。ウォーキートーキーは受信、リスニング、レスポンスを強制するから、遅延の問題はあまりないよ。

STUN/TUNは帯域幅の関係で重要なんだ。STUNだと、使われる帯域幅は接続された二つのデバイス間だけなんだけど、TorみたいなVPNだと、データが通る全てのサーバーで帯域幅のコストがかかる。これは、月に数GBのトラフィックデータを扱うVPSでサービスをホスティングする人にとって大きな障害になるよ。

国を除外 -- Tor回路から特定の国を除外する。Five Eyes、Nine Eyes、Fourteen Eyesのアライアンス用のプリセットや、カスタム国コードを入力できる。torrcでExcludeNodesとStrictNodesを使ってる。こういうことする人がいるのは面白いね。どれくらいセキュリティが向上するのか気になるな。結局、真剣な監視には外国にリレーやエグジットを運営することが必要だし。

これは「できるから作った」系のものの一つだね。正直、よくわからないけど、Torの開発者たちがtorrcにオプションとして組み込んだんだから、何か意味があるんだろうね。確実に侵害されたノードがあるのはわかってるし、効果があるかどうかは別として、あんなレベルのコントロールができるのは面白いと思う。

制御されたノードにはあまり効果がないかもしれないけど、そういう政府が管理しているISPから見られないようにするのには役立つね。

21のキュレーションされた暗号が利用可能 なんで!?それって約20個も多すぎじゃない?

ライブラリはopensslで、これらの暗号が利用できるのはそのため。特に他の理由はないよ、できるからやってるだけ!AES-GCMが使えたらいいのに…でもopensslだけじゃ認証を正しく解析するための依存関係が必要なんだ。実際、このレイヤーは完全に冗長だよ。Tor経由でopensslなしでもE2EEになってるし。ただ、ネットワークパイプに入る前に暗号化されてるのはいいね。

それは素晴らしいと思う。サイファーフィクセーションは脆弱性だし、敵が何を攻撃すべきか分かってしまうからね。

トランシーバーモデルは、Torのレイテンシープロファイルを考えると賢いデザイン選択だね。リアルタイムの双方向オーディオはかなり厳しい要件があるし(最大150msの往復時間を超えると不自然に感じる)、Torは通常、ホップごとに50-200ms追加するからね。ストア&フォワードにすることでその問題を回避できる。ネットワークの特性と戦うんじゃなくて、それに合わせて設計してるわけだ。音声圧縮にどのコーデックを使ってるのか気になるな。リアルタイムストリーミングじゃないなら、Opusがスピーチには明らかに良い選択だけど、トレードオフが少し変わるよね。

そうそう、opusでエンコードしてるんだ。オプションでエンコードの品質を6kbpsから64kbpsまで設定できるよ。6kbpsでも意外と聞き取りやすくてびっくりした。ただ、Termuxを使ってる場合は、音声をTermuxにパイプするために別のTermux APIアプリを使わなきゃいけないし、MP4をopusに変換するためにffmpegも必要なんだ。残念ながら、Termuxは自分でマイクを起動できないんだよね。

メールやテキストコミュニケーションが好きな理由と同じで、言いたいことを言う前に考えることができるから好きなんだ。無駄な話題を省いて、形式的なことや映画の引用、謙遜自慢、クリシェなんかを排除できる。数秒の遅れがあれば、最悪の人でも要点にたどり着けるからね。

すごくいいね!オンionサービスのリアルなアプリケーションがもっと増えてるのを見るのは嬉しい。Artiのオンionクライアントサポートがもうすぐ利用可能になるから、TorをRustライブラリとしてアプリに組み込めるようになるよ。これがさらに利用を促進してくれるといいな。ネットワークを使うアプリが増えれば、カバートラフィックも増えるしね。

ちょっと脱線するけど、Gitlabって前より速くなったの?それとも、あの遅延読み込みのせいで錯覚なのかな?

昔、TOR上でテキストチャットの開発をしてたんだ。正直、エコシステムがまだ続いてるのを見るとすごく嬉しいよ!

じゃあ、これも気に入るかも。似たような感じだけど、テキストだけで複数人が同時に接続できるんだ。誰でもホストやクライアントになれるように設定されてる。基本的にはIRCだけど、Tor用だよ。 https://gitlab.com/here_forawhile/torch

無知を許してほしいんだけど、これってグループで使えるように設定できるの?ウォーキートーキーみたいに全員が同じ周波数で話せる感じで。もしくは、一対一だけなのかな。どちらにしても、すごく面白いコンセプトだね。

E2EEはそんな風には機能しないと思うよ。

今のところは一対一だけど、グループ通話のシナリオも探ってみるつもりだよ。

面白いコンセプトだね。 .onionアドレスをアイデンティティとして使うのはエレガントだし、「どうやって信頼を構築するか」って問題を回避できるから、ほとんどのP2Pコミュニケーションツールがダメになっちゃうんだ。隠れたサービスの鍵ペアが実質的に無料で非対称のアイデンティティになるんだね。ただ、ウォーキートーキーのトレードオフが気になる。プッシュ・トゥ・トークモデルは匿名性の理由で意図的なデザイン選択なのか(リアルタイムストリーム分析を避けるため)、それともTorを通して音声をルーティングする制約なのかな?リアルタイムの音声通話は遅延がひどいことで有名だから、回線によっては300〜800msの往復になると思うし、フルデュプレックスの会話は辛いだろうね。チャンク方式はそれをうまく回避してるけど、UXがかなり変わるよね。これを敏感なことに使う前に知りたいことがいくつかあるんだけど、どんな暗号と鍵交換を使ってるの?「エンドツーエンド暗号化」は広い意味を持つからね。二者が接続する時の認証ステップはどう処理してるの?相手が本当にその人かどうかの確認はあるのか、それとも完全に匿名なのか?録音と送信の間に音声チャンクはディスクにどうなるの?ディスクに書き込まれるのか、それともメモリに保持されるのか?「サーバーなし、アカウントなし」ってのは本当に魅力的だね。ほとんどの「プライベートコミュニケーション」ツールは、メッセージを読めなくてもメタデータを知ってるサーバーがあるから、これのアーキテクチャはそれを完全に回避してるのが正しい選択だと思う。

ちょっと気になるんだけど、AI生成のコメントを投稿することで何を得たいの?

プロトタイピングを始めたとき、最初はフルデュプレックスでやってみたんだ。挑戦したかったし、なんでこれがあんまり存在しないのか理解したかった。結果は最悪だったけどね。標準的なリアルタイム通話では、誰かに割り込んで話すことができるし、低遅延のおかげで会話がスムーズに続くんだ。でも、Torの遅延は本当に気まずくて、会話の仕方をほぼ再学習しなきゃいけないくらい。割り込もうとしたとき、相手がその割り込みを聞くまでに6秒も経ってるかもしれないし、もう全然別の話を考えてるかもしれない。トランシーバーのアーキテクチャは、メッセージを聞いて消化して、考えて、返事をすることを強制するんだ。ここには2層の暗号化があって、Torがデータを暗号化してるし、送信前にローカルでOpenSSLを使ってる。OpenSSLライブラリから21種類の暗号をプログラムしてあるんだ。ライブラリにはもっとたくさんの暗号があるけど、これが最強らしい。使ってる暗号は秘密じゃないから、通話中に自分の暗号やリモートの暗号をリアルタイムで見ることができる。認証は完全にユーザーの手に委ねられてる。キー交換をどうするかは彼ら次第だね。俺は、音声が通ってるってだけで、相手が本当にその人だって安心できる。できれば一度対面で接続を確立するのが理想だね。だって、.onionはデバイス上で生成されるから、攻撃者がそれを偽造することはできない。接続を確立するにはプライベートキーも必要だし。仮に攻撃者がエンドポイントのディレクトリをコピーしてプライベートキーを手に入れたとしても、あなたの静的アドレスでTorを立ち上げても無駄だよ。追加の共有秘密は、ユーザーだけが知ってる別のパスワードで暗号化されてるから、役に立たない。相手側はこのバリアのおかげで偽の音声を受け取ることはない。通話には参加できても、音声は再生されないからね。共有秘密がしっかり守られてるから。メッセージを攻撃者に渡しても、復号化は失敗するし、何も通らない。送信直後に、$raw_file、$opus_file、$enc_fileに対してrm -fを実行する。音声は/audioフォルダに受信される。音声が復号化されて再生されたら、$enc_file、$dec_fileに対してrm -fを実行する。ディスク上に存在するのはほんの一瞬だけで、すぐに消えちゃうんだ。