セキュリティとプライバシー

約束できること、できないこと

正確に言うと、Gather のメッセージ内容はエンドツーエンドで暗号化され、サーバーが平文を保持することはありません。以下に具体的な仕組みと、まだ足りない点を示します。

言葉はふさわしい人へ。鍵は、自分の手の中に。

暗号化方式

  • 1 対 1 チャット:X3DH 鍵合意 + ダブルラチェット(Signal プロトコルと同系統)。
  • グループ:送信者ごとに独立した鍵チェーン。メッセージには送信者の Ed25519 署名が付きます。
  • 暗号プリミティブ:Ed25519、X25519、AES-GCM、HKDF-SHA256。
  • 暗号化に失敗したメッセージは送信されず、平文に切り替わることはありません。

ID とアカウント

  • 電話番号、メールアドレス、本名は不要。ID は端末内で生成される鍵ペアです。
  • 秘密鍵とリカバリーフレーズは端末内にのみ保存され、ノードも私たちも取得できません。
  • そのため、リカバリーフレーズを紛失すると、誰もアカウントを復元できません。

ノードに見えるもの

メッセージを届けるには、ネットワークがある程度の情報を知る必要があります。それを隠すつもりはありません。

情報ノード
メッセージ本文、写真・音声・ファイルの内容とファイル名見えない
ニックネームやアイコンなどのプロフィール見えない
グループ名とお知らせ見えない
グループのメンバー一覧(ノードには保存されません)見えない
IP アドレスと接続 ID接続先の入口ノードには見える
いつ、どのくらいの頻度でメッセージを送ったか接続先の入口ノードには見える
メッセージの宛先接続先の入口ノードには見える

ノード間でメッセージを中継するときは送信者を隠し、オフライン保存のメッセージは毎日変わるメールボックス ID にのみ結び付けられます。ただし、あなたが接続している入口ノードは、誰とやり取りしているかを知っています。

オフラインメッセージの保存方法

相手がオフラインのとき、メッセージは暗号文のまま複数のノードに保存されます。保存ノードに見えるのは毎日変わるメールボックス ID と暗号文だけで、送信者も受信者もわかりません。受け取る権利を証明できるのは受信者だけです。保存期間は最長 30 日です。

実施済みのメタデータ保護

  • ノード間でメッセージを中継するときに送信者を隠します。
  • オンライン状態には毎日変わる識別子を使います。
  • プッシュ通知は端末を起こすためだけに使い、ID も内容も含みません。
  • ノードのログではアドレスを伏せ字にしています。

ノードネットワーク

  • ノード同士は libp2p と Kademlia DHT でピアツーピアに接続し、中央のデータベースやアカウントサーバーはありません。
  • ネットワークに参加するには、承認された運営者が発行した証明書が必要です(許可制)。各ノードがローカルで検証します。
  • アプリは署名付きの入口を複数持ち、現在のノードが使えないときは自動で切り替えます。

リリースとビルド

  • ノードのリリースマニフェストは、3 本のリリース鍵のうち任意の 2 本で署名されたときだけ有効で、ロールバック防止と有効期限があります。ノードソフトウェアが自動でアップデートをダウンロードすることはありません。
  • ノードソフトウェアは再現可能ビルドの手順で作られ、ソフトウェア部品表(SBOM)が付属します。

まだ実現できていないこと

限界も正直に示してこそ、セキュリティの説明には意味があります。

  • 接続先の入口ノードは、メッセージの宛先を知っています。このメタデータをさらに保護する仕組みは設計中です。
  • Gather は現時点で社内のセキュリティレビューのみを受けており、独立した第三者による監査はまだ受けていません。
  • ノードは現在私たちが運営しており、独立した運営者はまだいません。
  • 端末内のチャット履歴は、端末自体の暗号化と画面ロックで保護されます。画面ロックを設定してください。
  • 音声通話・ビデオ通話は、ネットワーク環境によってはつながらない場合があります。