概要

BitChatは、分散型のピアツーピアメッセージングアプリケーションで、セキュアでプライベート、検閲耐性のある通信を、短命でアドホックなネットワーク上で実現するよう設計されています。Twitter創業者でnostrの支援なども行っているJack Dorseyの週末プロジェクトとして開始。

BitChatプロトコルの設計目標:

  • 機密性(Confidentiality): 通信は第三者に解読されないこと。
  • 認証(Authentication): 通信相手の身元確認が可能であること。
  • 完全性(Integrity): メッセージが改ざんされていないこと。
  • 前方秘匿性(Forward Secrecy): 長期鍵が漏洩しても、過去の通信内容が漏洩しないこと。
  • 否認可能性(Deniability): 特定のメッセージが特定のユーザーから送られたことを暗号的に証明できないこと。

ホワイトペーパー: bitchat/WHITEPAPER.md at main · permissionlesstech/bitchat · GitHub

ユースケースと先行事例

  • 災害でネットが使えないとき
  • 政治的に検閲されている国
  • 山の中やWi-Fiがない場所

類似・先行事例:

  • FireChat
    • 香港の民主化デモやイラクでのインターネット遮断、災害時の連絡手段などに使われた
    • 暗号の設計が不透明であり、2020年頃にサービス終了
  • Briar
  • ession

インストール

構成

Bitchatは主に以下の4レイヤーで構成される:

 アプリの表示(メッセージなど)

 セッション管理(どの相手と通信しているか)

 暗号化(中身が見えないようにする)

 通信方法(Bluetoothなど)
 

通信ではNoise Protocolという比較的有名な手法を採用。

アプリケーション層:メッセージの中身

ここではユーザーがやり取りするメッセージや通知、確認応答などを定義します。
この層で定義される構造体の例:

  • BitchatMessage:実際のテキストメッセージ
  • DeliveryAck:メッセージ受信確認
  • PeerAnnouncement:相手の存在をネットワークに知らせる情報

この層の出力は、下の「セッション層」に渡されてパケット化されます。