
Bluetoothメッシュネットワーク上での分散型・暗号化されたピアツーピアメッセージングアプリ。インターネット、サーバー、電話番号は不要。X25519 + AES-256-GCM暗号化、IRCスタイルのコマンド、iOSとのクロスプラットフォーム互換性を備えています。
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/10897/4adee5766836e3812e7f0051931df8c63da05d8d8db9a77f8c491d1ea45d195b.png" alt="Bitchat Android ロゴ" width="480">
</p>
> [!WARNING]
> このソフトウェアは外部のセキュリティレビューを受けておらず、脆弱性が含まれている可能性があり、記載されたセキュリティ目標を必ずしも達成しているとは限りません。重要な用途には使用せず、セキュリティがレビューされるまでは頼りにしないでください。開発中です。
# Android向けbitchat
安全で分散型のピアツーピアメッセージングアプリ。Bluetoothメッシュネットワーク上で動作します。メッシュチャットにはインターネット不要、サーバー不要、電話番号不要。暗号化された純粋な通信を実現します。また、bitchatはジオハッシュチャンネルもサポートしており、インターネット接続を利用して同じ地理的エリアの他のユーザーとつながります。
本アプリは、オリジナルの [bitchat iOSアプリ](https://github.com/jackjackbits/bitchat) の **Android移植版** であり、クロスプラットフォーム通信のための100%プロトコル互換性を維持しています。
## bitchatのインストール
Android向けbitchatの最新バージョンは [GitHub Releases ページ](https://github.com/permissionlesstech/bitchat-android/releases) からダウンロードできます。
または以下からも入手可能です。
[<img alt="Google Playで入手" height="60" src="https://assets.kitploit.com/production/public/readmes/10897/f72611e2df8e88204009fd896d05d5e8e83c77009c63943bbffa169559934849.png"/>](https://play.google.com/store/apps/details?id=com.bitchat.droid)
**手順:**
1. **APKをダウンロード:** Android端末で上記リンクにアクセスし、最新の`.apk`ファイルをダウンロードして開きます。
2. **不明なアプリのインストールを許可:** 一部の端末では、APKをインストールする前に、端末の設定で「不明なアプリのインストール」を有効にする必要があります。通常は**設定 > セキュリティ** または **設定 > アプリと通知 > 特別なアプリアクセス** にあります。
3. **インストール:** ダウンロードした`.apk`ファイルを開いてインストールを開始します。
## ライセンス
このプロジェクトはパブリックドメインとして公開されています。詳細は [LICENSE](https://github.com/permissionlesstech/bitchat-android/blob/main/LICENSE.md) ファイルを参照してください。
## 機能
- **✅ クロスプラットフォーム互換**: iOS版bitchatと完全なプロトコル互換性
- **✅ 分散型メッシュネットワーク**: Bluetooth LE上での自動ピア発見とマルチホップメッセージ中継
- **✅ エンドツーエンド暗号化**: プライベートメッセージにX25519鍵交換 + AES-256-GCM
- **✅ チャンネルベースのチャット**: トピックベースのグループメッセージング、オプションのパスワード保護
- **✅ ストア&フォワード**: オフラインのピア向けにメッセージをキャッシュし、再接続時に配信
- **✅ プライバシー最優先**: アカウント不要、電話番号不要、永続的な識別子なし
- **✅ IRCスタイルコマンド**: おなじみの `/join`, `/msg`, `/who` 形式のインターフェース
- **✅ メッセージ保持**: チャンネル所有者が制御するオプションのチャンネル全体のメッセージ保存
- **✅ 緊急ワイプ**: ロゴを3回タップですべてのデータを即座に消去
- **✅ モダンなAndroid UI**: Jetpack Compose + Material Design 3
- **✅ ダーク/ライトテーマ**: iOS版に合わせたターミナル風の美観
- **✅ バッテリー最適化**: 適応型スキャンと電力管理
## Androidセットアップ
### 前提条件
- **Android Studio**: Arctic Fox (2020.3.1) 以上
- **Android SDK**: APIレベル26 (Android 8.0) 以上
- **Kotlin**: 1.8.0 以上
- **Gradle**: 7.0 以上
### ビルド手順
1. **リポジトリをクローン:**
```bash
git clone https://github.com/permissionlesstech/bitchat-android.git
cd bitchat-android
```
2. **Android Studioで開く:**
```bash
# Android Studioを開き、「既存のプロジェクトを開く」を選択
# bitchat-androidディレクトリに移動
```
3. **プロジェクトをビルド:**
```bash
./gradlew build
```
4. **端末にインストール:**
```bash
./gradlew installDebug
```
### 開発ビルド
デバッグを有効にした開発ビルドの場合:
```bash
./gradlew assembleDebug
adb install -r app/build/outputs/apk/debug/app-debug.apk
```
### リリースビルド
プロダクションリリースの場合:
```bash
./gradlew assembleRelease
```
## Android固有の要件
### 権限
アプリは以下の権限を必要とします(自動的に要求されます):
- **Bluetooth**: BLEのコア機能
- **位置情報**: AndroidでのBLEスキャンに必要
- **ネットワーク**: 公開インターネットリレーを介したメッシュの拡張
- **通知**: メッセージアラートとバックグラウンド更新
### ハードウェア要件
- **Bluetooth LE (BLE)**: メッシュネットワーキングに必須
- **Android 8.0+**: APIレベル26以上
- **RAM**: 最適なパフォーマンスには2GB推奨
## 使い方
### 基本コマンド
- `/j #channel` - チャンネルに参加または作成
- `/m @name メッセージ` - プライベートメッセージを送信
- `/w` - オンラインユーザー一覧
- `/channels` - 発見したすべてのチャンネルを表示
- `/block @name` - ピアからのメッセージをブロック
- `/block` - ブロック中のピア一覧
- `/unblock @name` - ピアのブロックを解除
- `/clear` - チャットメッセージを消去
- `/pass [パスワード]` - チャンネルのパスワードを設定/変更(所有者のみ)
- `/transfer @name` - チャンネル所有権を移譲
- `/save` - チャンネルのメッセージ保持を切り替え(所有者のみ)
### はじめに
1. **アプリをインストール**(Android 8.0+が必要)
2. **Bluetoothと位置情報の権限を許可**(求められたら)
3. **bitchatを起動** - 自動的にメッシュネットワーキングが開始
4. **ニックネームを設定**するか、自動生成されたものを使用
5. **近くのiOS/Androidのbitchatユーザーに自動接続**
6. `/j #general` でチャンネルに参加するか、パブリックでチャット開始
7. **メッセージはメッシュネットワークを通じて中継**され、遠くのピアに届く
### Android UI機能
- **Jetpack Compose UI**: モダンなMaterial Design 3インターフェース
- **ダーク/ライトテーマ**: iOSに合わせたターミナル風の美観
- **触覚フィードバック**: 操作や通知に対する振動
- **アダプティブレイアウト**: 様々なAndroid画面サイズに最適化
- **メッセージステータス**: リアルタイムの配送確認と既読通知
- **RSSI表示**: 各ピアのシグナル強度を色で表示
### チャンネル機能
- **パスワード保護**: チャンネル所有者は`/pass`でパスワード設定可能
- **メッセージ保持**: 所有者は`/save`でメッセージ保存を強制可能
- **@メンション**: `@ニックネーム`でユーザーに言及(オートコンプリート対応)
- **所有権移譲**: `/transfer`で信頼できるユーザーに管理権を移行
## セキュリティとプライバシー
### 暗号化
- **プライベートメッセージ**: X25519鍵交換 + AES-256-GCM暗号化
- **チャンネルメッセージ**: Argon2idパスワード導出 + AES-256-GCM
- **デジタル署名**: Ed25519によるメッセージの真正性保証
- **前方秘匿性**: セッションごとに新しい鍵ペアを生成
### プライバシー機能
- **登録不要**: アカウント、メール、電話番号は不要
- **デフォルトでエフェメラル**: メッセージは端末のメモリ上のみに存在
- **カバートラフィック**: ランダムな遅延とダミーメッセージでトラフィック分析を防止
- **緊急ワイプ**: ロゴを3回タップですべてのデータを即座に消去
- **Torバンドルサポート**: インターネット接続が利用可能な場合、内蔵Torネットワーク統合でプライバシー強化
## パフォーマンスと効率性
### メッセージ圧縮
- **LZ4圧縮**: 100バイト超のメッセージは自動圧縮
- **一般的なテキストメッセージで30-70%の帯域削減**
- **スマート圧縮**: 既に圧縮されたデータはスキップ
### バッテリー最適化
- **アダプティブパワーモード**: バッテリーレベルに応じて自動調整
- パフォーマンスモード: 充電中またはバッテリー60%超でフル機能
- バランスモード: デフォルト動作(バッテリー30-60%)
- 省電力モード: バッテリー30%未満でスキャン制限
- 超低消費電力: バッテリー10%未満で緊急モード
- **バックグラウンド効率**: アプリがバックグラウンドのとき自動省電力
- **設定可能なスキャン**: デューティサイクルをバッテリー状態に適応
### ネットワーク効率
- **最適化ブルームフィルター**: 少ないメモリで高速な重複検出
- **メッセージ集約**: 小さなメッセージをバッチ処理して送信回数削減
- **適応型接続制限**: 電力モードに応じてピア接続数を調整
## 技術アーキテクチャ
### バイナリプロトコル
bitchatはBluetooth LE向けに最適化された効率的なバイナリプロトコルを使用:
- コンパクトなパケット形式、1バイトのタイプフィールド
- TTLベースのメッセージルーティング(最大7ホップ)
- 大きなメッセージの自動分割
- ユニークIDによるメッセージ重複排除
### メッシュネットワーキング
- 各デバイスがクライアントとペリフェラルの両方の役割を担う
- 自動ピア発見と接続管理
- オフラインメッセージ配信のためのストア&フォワード
- バッテリー最適化のためのアダプティブデューティサイクル
### Android固有の最適化
- **Coroutineアーキテクチャ**: メッシュネットワーキングの非同期操作
- **Kotlin Coroutines**: スレッドセーフな同時メッシュ操作
- **EncryptedSharedPreferences**: ユーザー設定の安全な保存
- **ライフサイクル対応**: Androidアプリのライフサイクルを適切に処理
- **バッテリー最適化**: フォアグラウンドサービスとアダプティブスキャン
## Android技術アーキテクチャ
### コアコンポーネント
1. **BitchatApplication.kt**: アプリケーションレベルの初期化と依存性注入
2. **MainActivity.kt**: 権限処理とUIホスティングを行うメインアクティビティ
3. **ChatViewModel.kt**: MVVMパターンでアプリ状態とビジネスロジックを管理
4. **BluetoothMeshService.kt**: BLEメッシュネットワーキングの中核(セントラル+ペリフェラル)
5. **EncryptionService.kt**: BouncyCastleを使用した暗号操作
6. **BinaryProtocol.kt**: iOS形式に合わせたバイナリパケットのエンコード/デコード
7. **ChatScreen.kt**: Material Design 3のJetpack Compose UI
### 依存関係
- **Jetpack Compose**: モダンな宣言的UI
- **BouncyCastle**: 暗号操作(X25519, Ed25519, AES-GCM)
- **Nordic BLE Library**: 信頼性の高いBluetooth LE操作
- **Kotlin Coroutines**: 非同期プログラミング
- **LZ4**: メッセージ圧縮(有効時)
- **EncryptedSharedPreferences**: 安全なローカルストレージ
### バイナリプロトコルの互換性
Android実装はiOSと100%のバイナリプロトコル互換性を維持:
- **ヘッダー形式**: 同一の13バイトヘッダー構造
- **パケットタイプ**: 同じメッセージタイプとルーティングロジック
- **暗号化**: 同一の暗号アルゴリズムと鍵交換
- **UUID**: 同じBluetoothサービスとキャラクタリスティック識別子
- **分割**: 大きなコンテンツ向けに互換性のあるメッセージ分割
## Google Playへの公開
### 準備
1. **バージョン情報を更新:**
```kotlin
// app/build.gradle.kts 内
defaultConfig {
versionCode = 2 // リリースごとにインクリメント
versionName = "1.1.0" // ユーザー表示バージョン
}
```
2. **署名付きリリースビルドを作成:**
```bash
./gradlew assembleRelease
```
3. **アプリバンドルを生成(Play Store推奨):**
```bash
./gradlew bundleRelease
```
### Play Storeの要件
- **ターゲットAPI**: 最新のAndroid API(現在は34)
- **プライバシーポリシー**: 機密性の高い権限を要求するアプリに必須
- **アプリの権限**: Bluetoothと位置情報の使用理由を説明
- **コンテンツレーティング**: 年齢適切なコンテンツのアンケートに回答
### 配布
- **Google Play Store**: 主要な配布チャネル
- **F-Droid**: オープンソース配布用
- **直接APK**: テストおよび開発用
## クロスプラットフォーム通信
このAndroid移植版により、オリジナルのiOS版bitchatアプリとのシームレスな通信が可能:
- **iPhone ↔ Android**: 完全な双方向メッセージング
- **混合グループ**: 同じチャンネルでのiOS/Androidユーザー
- **機能パリティ**: すべてのコマンドと暗号化がプラットフォーム間で動作
- **プロトコル同期**: 同一のメッセージ形式とルーティング動作
**iOS版**: iPhone/iPadユーザー向けのオリジナルbitchatは [github.com/jackjackbits/bitchat](https://github.com/jackjackbits/bitchat) から入手してください。
## 貢献
貢献を歓迎します! 主な改善分野:
1. **パフォーマンス**: バッテリー最適化と接続信頼性
2. **UI/UX**: 追加のMaterial Design 3機能
3. **セキュリティ**: 強化された暗号機能
4. **テスト**: 単体テストと統合テストのカバレッジ
5. **ドキュメント**: APIドキュメントと開発ガイド
## サポートと問題
- **バグ報告**: 端末情報とログを添えて [Issueを作成](../../issues)
- **機能リクエスト**: [ディスカッションを開始](https://github.com/orgs/permissionlesstech/discussions)
- **セキュリティ問題**: セキュリティに関する懸念は非公開でメール送信
- **iOS互換性**: [オリジナルのiOSリポジトリ](https://github.com/jackjackbits/bitchat) と相互参照
iOS固有の問題については、[オリジナルのiOS版bitchatリポジトリ](https://github.com/jackjackbits/bitchat) を参照してください。