Naisho · 内部のしくみ

どう動くのか、そして約束しないこと。

このページは、自分で確かめたい人のためのものです。各コンポーネントについて、何を守り、何を守らないかを書いています。

アーキテクチャを一行で

各デバイスにクライアント、コミュニティごとにハブ(Outpost)が1つ。ハブには Tor v3 onion service としてしか到達できず、クライアント間は MLS によるエンドツーエンド暗号化です。ハブは、読めないメッセージを順序づけ、一時的に保管し、転送します。中央サーバーはなく、データの経路に GiBSeS のコンポーネントはありません。

通信経路

Arti による Tor onion v3

Outpost とクライアントは Tor 経由でしか通信しません。Outpost は v3 onion service を公開します。アドレスはサービスの鍵から導かれるため、PC のネットワークや IP が変わっても同じままで、ルーターのポートを開ける必要もありません。Tor Project による Rust 製の Tor 実装 Arti をバイナリに組み込んでいるので、別途 Tor プロセスをインストールする必要はありません。

制約
  • 遅延は Tor の水準です。私たちのテストでは、ハブ経由のメッセージの往復時間は 168〜627 ms(シナリオごとの中央値)でした。大きな添付ファイルは、直接接続より時間がかかります。
  • Tor ネットワークがブロックされている場所では、Naisho は接続できません。ブリッジや検閲回避ツールは含めていません。

Web 版

Web 版は、Tor で通信する小さなローカルプログラムのインターフェースを、ブラウザで開いたものです。リモートの Web サーバーはありません。ブラウザが話す相手はあなたのパソコン上のプログラムだけで、そのプログラムが Tor 経由でメッセージを Outpost に届けます。

暗号化

OpenMLS による MLS(RFC 9420)

すべての会話は、1対1であっても RFC 9420 に基づく MLS グループで、OpenMLS で実装しています。スイート:鍵交換に X25519、暗号化に ChaCha20-Poly1305、署名に Ed25519。テキスト、写真、ボイスメッセージ、ファイル、さらに添付ファイルの名前と種類も、デバイス上で暗号化されます。

制約
  • 今のところ耐量子暗号はなし MLS のハイブリッドスイートはまだドラフト段階です。安定するまでは約束しません。
  • メッセージは否認できない 各メッセージには送信者の署名が付きます。受信者は、あなたが書いたことを第三者に証明できます。同じ署名によって、メッセージが本物である証拠つきで運営者に通報することもできます。

MLS はフォワードセキュリティとポストコンプロマイズセキュリティを提供します。今日盗まれた鍵では昨日の通信は復号できず、鍵の更新後は明日の通信も復号できません。守るのは送受信中のメッセージで、スマートフォンにすでに保存された履歴ではありません。履歴はローカルデータベースの暗号化とアプリのロック(PIN または生体認証)で守られます。

テスト用メッセージにセンチネル文字列を埋め込んで検証しました。ハブのデータ内での出現はゼロでした。

グループに参加した人は過去の履歴を読めません。退出した人や削除された人は、その後に書かれたものを読めません。100人のテストでは、メンバー1人の削除で 8.7 KB のコミットが 6.5 ms で生成されました。

ID と鍵

Outpost の鍵は、参加時に招待によって固定されます。個人 ID(QR または32文字のコード)には鍵のフィンガープリントが含まれます。誰かが(ハブも含めて)それを差し替えようとすると、アプリは送信を止め、全画面で警告を表示します。2人で60桁のセキュリティコードか QR を照合できます。コミュニティごとに別の ID と別の鍵を持ちます。

制約
  • 初回参加時、クライアントは運営者の証明書を信頼します。悪意のある運営者は、偽の新メンバーを見せることができます。対策はコードの照合で、大事な連絡先には照合をおすすめします。
  • コミュニティごとに ID を分けると結びつけは減りますが、不可能にはなりません。2人の運営者が接続時刻を長期間突き合わせれば、同じ人物だと結びつけられます。
  • 傍受された招待リンクは、受信者より先にそれを傍受した人が使える可能性があります。対面で見せる QR にはこの問題はありません。

ハブは中身を見られない。メタデータは見える。

この表は最後まで読んでください。Outpost に、つまりその管理者に当てはまる内容です。

データハブに見える?
テキスト、写真、ボイスメッセージ、ファイル、添付ファイルの名前と種類いいえ
会議の音声と映像(両モード)はい
クライアントの IPいいえ(Tor)。高画質モードの会議参加者を除く
クライアントから見たハブの IPいいえ(onion)。高画質モードの会議参加者を除く
メンバー一覧(鍵とラベルつき、非公開のメンバーも含む)はい
各自が選んだ公開範囲はい
誰がどのルームにいるか、ルーム名はい
1対1チャットで誰が誰に書いているかはい
ルームに誰がコンテンツをアップロードしたかはい
各自がいつ、どれくらいの頻度で接続しているかはい
メッセージのサイズはい
ルームから誰が誰とプライベートチャットを始めたかはい

GiBSeS にはこれらのどれも見えません。サーバー、アカウント、テレメトリ、クラッシュレポート、オンラインアクティベーションを持たないからです。「自分の ID を知っている人にだけ表示」にした人も、参加したルームのメンバーには見えます。

ストア・アンド・フォワード

受信者がオフラインなら、暗号化されたメッセージは最大30日間(変更可)Outpost に残り、その後期限切れになります。配信されるとすぐに削除されます。Outpost は中継だけを行い、メッセージのアーカイブは持ちません。ディスクに残るのはメンバーとルームの一覧、未受信のキューで、運営者のパスワード(Argon2id)で保存時暗号化されたフォルダに入っています。1対1チャットでは「待機中」「配信済み」「期限切れ」が表示されます。添付ファイルは分割して送られ、中断しても再開でき、1件あたり最大 100 MB です。

プッシュなし

Android や iOS のプッシュサービスを通る通知はありません。モードは2つ。バックグラウンドでの確認なし(デフォルト)か、Tor 経由で15、30、60、240分ごとに定期確認し、内容を含まないローカル通知を出すか。Android では省電力機能が確認を遅らせることがあります。iOS ではシステムがバックグラウンド動作を制限するため、完全に受信できるのはアプリを開いているときです。

音声通話

通話は1対1でも、約10人までのグループでも、Tor を通りハブを経由します。ハブはメモリ上で転送するだけで、ディスクには書き込みません。遅延は onion の2区間分です。体感できる遅れがあり、普通の電話よりトランシーバーに近い感覚です。相手につながらない場合は不在着信になり、ボイスメッセージを残せます。軽量な画面共有も使えます。

Outpost Video

2つのモード

オプションのコンポーネントで、デフォルトではオフです。ハブ上で SFU(Selective Forwarding Unit)として動きます。メディアは転送中は暗号化されていますが、SFU は転送のために復号します。つまり、どちらのモードでもハブには会議の音声と映像が見えます。SFrame は使っていません。ビデオについては、ハブ、つまりその管理者を信頼することになります。

保護モード

メディアは Tor を通り、Outpost がリレーとして転送します。onion 回線の帯域と遅延に収まるよう低解像度です。IP は一切露出しません。参加者のものもハブのものも。追加のネットワーク設定も不要です。

高画質モード

クライアントと Outpost を Tor の外で WebRTC で直接接続します。暗号化は DTLS-SRTP、TURN も含まれます。ハブにパブリック IP と、開いたポートが1つか2つ必要です。証明書は自己署名で、そのフィンガープリントとアドレスは Tor 経由でクライアントに届きます。外部サービスは使いません。参加者の IP が見えるのはコミュニティの Outpost だけで、ほかの参加者には見えません。参加者にはハブの IP がわかります。他の直接接続と同じく、各自のネットワークプロバイダーには、そのアドレスへの接続があることが見えます。

ビデオでどちらのモードを選んでも、チャットは常に Tor を通ります。

動作要件

ハブが行う重い暗号処理はわずかです。暗号化されたメッセージを転送し、MLS のコミットを順序づけるだけです。本当の負荷はディスク(最大30日分の添付ファイルのキュー)と Tor の帯域です。作業用ディスクは SSD にしてください。キューは絶えず書き込みます。計測したノードの定常時の RAM 使用量は 34〜46 MB でした。

コミュニティ推奨構成
約25人まで電源の入ったPCかノートPC、RAM 4 GB、SSD の空き 32 GB
約25〜100人パソコンかミニPC、RAM 8 GB、SSD 64〜128 GB
100人超複数の Outpost
高画質ビデオ、参加者5人ハブの上り約 10 Mbit/s、パブリック IP、ポート1〜2個
高画質ビデオ、参加者10人ハブの上り約 45 Mbit/s、8 GB のパソコン
保護モードのビデオ追加のネットワーク要件なし。画質は Tor の帯域に制限されます

Outpost は Windows 10/11 x64 と Linux x86_64 に対応。自動起動し、電源を入れてから3分以内にオンラインになります。チャットなら家庭用の数 Mbit/s の上り回線で十分です。実際の限界はハードウェアではなく Tor の遅延です。

コード

クライアントと Outpost は Rust で書かれています。Tor には Arti、暗号化には OpenMLS を使っています。Outpost は単一のバイナリで、インストールも管理者権限も不要です。

続けて読む

あなたとグループのために

子どもの写真も、おばあちゃんのボイスメッセージも、サークルのチャットも、仲間うちだけに。グループの管理者がやることと、Chat Control があなたに関係する理由がわかります。

あなたの会社のために

NDA 案件、ビデオ会議、同僚とのチャット。データはオフィスのパソコンに残ります。Naisho は今お使いのツールと併用できます。

お問い合わせ