概要
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
インストール
- iOS: bitchat mesh on the App Store
- Android: permissionlesstech/bitchat-androidからapkをダウンロード
構成
Bitchatは主に以下の4レイヤーで構成される:
① アプリの表示(メッセージなど)
↓
② セッション管理(どの相手と通信しているか)
↓
③ 暗号化(中身が見えないようにする)
↓
④ 通信方法(Bluetoothなど)
通信ではNoise Protocolという比較的有名な手法を採用。
アプリケーション層:メッセージの中身
ここではユーザーがやり取りするメッセージや通知、確認応答などを定義します。
この層で定義される構造体の例:
BitchatMessage
:実際のテキストメッセージDeliveryAck
:メッセージ受信確認PeerAnnouncement
:相手の存在をネットワークに知らせる情報
この層の出力は、下の「セッション層」に渡されてパケット化されます。