permissionlesstech/bitchat
GitHub: permissionlesstech/bitchat
bitchat 是一款结合蓝牙 mesh 离线网络与 Nostr 协议的去中心化聊天应用,无需账号或中心服务器即可实现隐私通信。
Stars: 27960 | Forks: 3891
## bitchat
一款采用双传输架构的去中心化对等消息应用:结合用于离线通信的本地蓝牙 mesh 网络与基于互联网的 Nostr 协议以实现全球覆盖。无需账号,无需手机号,没有中心服务器。这是你的秘密群聊工具。
[bitchat.free](http://bitchat.free)
📲 [App Store](https://apps.apple.com/us/app/bitchat-mesh/id6748219622)
## 许可证
本项目已发布至公共领域。详情请参阅 [LICENSE](LICENSE) 文件。
## 功能
- **双传输架构**:蓝牙 mesh 用于离线通信 + Nostr 协议用于基于互联网的消息传输
- **基于地理位置的频道**:利用全球 Nostr 中继上的 geohash 坐标实现的地理聊天室
- **智能消息路由**:自动选择最佳传输方式(蓝牙 → Nostr 备选)
- **去中心化 Mesh 网络**:通过蓝牙 LE 自动发现节点并进行多跳消息中继
- **隐私至上**:无需账号,无需手机号,无持久标识符
- **私信端到端加密**:mesh 网络使用 [Noise Protocol](https://noiseprotocol.org),Nostr 使用 NIP-17
- **IRC 风格命令**:熟悉的 `/slap`、`/msg`、`/who` 风格界面
- **通用应用**:原生支持 iOS 和 macOS
- **紧急擦除**:三击即可瞬间清除所有数据
- **性能优化**:LZ4 消息压缩、自适应电池模式及优化的网络处理
## [技术架构](https://deepwiki.com/permissionlesstech/bitchat)
BitChat 采用 **混合消息架构**,包含两个互补的传输层:
### 蓝牙 Mesh 网络(离线)
- **本地通信**:蓝牙范围内的直接点对点通信
- **多跳中继**:消息通过附近的设备进行路由(最多 7 跳)
- **无需互联网**:在灾难场景下可完全离线工作
- **Noise Protocol 加密**:具备前向保密性的端到端加密
- **二进制协议**:针对蓝牙 LE 限制优化的紧凑数据包格式
- **自动发现**:节点发现与连接管理
- **自适应电源管理**:针对电池优化的占空比控制
### Nostr 协议(互联网)
- **全球覆盖**:通过互联网中继与全球用户建立连接
- **地理频道**:使用 geohash 坐标的地理聊天室
- **290+ 中继网络**:遍布全球,确保可靠性
- **NIP-17 加密**:为互联网隐私提供封装式(gift-wrapped)私信
- **临时密钥**:每个 geohash 区域使用全新的加密身份
### 频道类型
#### `mesh #bluetooth`
- **传输方式**:低功耗蓝牙 mesh 网络
- **范围**:多跳范围内的本地设备
- **互联网**:非必需
- **用例**:离线通信、抗议活动、灾难救援、偏远地区
#### 地理频道(`block #dr5rsj7`、`neighborhood #dr5rs`、`country #dr`)
- **传输方式**:基于互联网的 Nostr 协议
- **范围**:由 geohash 精度定义的地理区域
- `block`(7 个字符):街区级别
- `neighborhood`(6 个字符):区/社区级别
- `city`(5 个字符):城市级别
- `province`(4 个字符):州/省级别
- `region`(2 个字符):国家/大区级别
- **互联网**:必需(连接到 Nostr 中继)
- **用例**:基于地理位置的社区聊天、本地活动、区域讨论
### 私信路由
私信采用 **智能传输选择**:
1. **蓝牙优先**(在可用时首选)
- 与已建立的 Noise 会话建立直接连接
- 最快且最私密的选项
2. **Nostr 备选**(在蓝牙不可用时)
- 使用接收者的 Nostr 公钥
- NIP-17 封装以保护隐私
- 通过全球中继网络路由
3. **智能排队**(在两者均不可用时)
- 消息排队等待,直到有可用的传输方式
- 建立连接后自动投递
有关详细的协议文档,请参阅 [技术白皮书](WHITEPAPER.md)。
## 设置
### 选项 1:使用 Xcode
```
cd bitchat
open bitchat.xcodeproj
```
要在设备上运行,需要执行以下几个步骤来准备代码:
- 克隆本地配置:`cp Configs/Local.xcconfig.example Configs/Local.xcconfig`
- 将你的 Developer Team ID 添加到新创建的 `Configs/Local.xcconfig` 中
- Bundle ID 将被设置为 `chat.bitchat.标签:iOS, Nostr协议, 即时通讯, 去中心化, 端到端加密, 蓝牙Mesh网络