项目详情
bitchat
蓝牙 mesh 聊天,IRC 的味道——断网也能聊、无账号无服务器
GitHub 地址
Unlicense(公有领域)
Swift
iOS / macOS
BLE Mesh + Nostr
更新于 2026-07-25 · App Store 已上架
← 返回汇总
项目速览
一句话定位
无网也能聊的去中心化群聊,断网时人就是网络
去中心化 P2P 聊天 App。双传输架构:本地蓝牙 mesh 网络负责离线通信,Nostr 协议负责联网全球可达。无账号、无手机号、无中心服务器——自称「the side-groupchat」。Swift 原生 iOS/macOS 通用 App,Noise Protocol 端到端加密。适合极端断网场景(抗议/灾情/偏远地区)、隐私极客、以及想研究 mesh 网络与 Noise 协议实战的开发者。
项目速览
核心数据
数据截至 2026-07-25。已上架 App Store,公有领域许可(Unlicense)。
为什么存在
主流聊天的三个硬伤
依赖中心服务器
服务器宕机、被关停或被审查,整张网瞬间失语。灾情/抗议现场网络一断,所有人失联。
身份强绑定
手机号、账号、持久标识符——服务商手里握着完整社交图谱与元数据。
断网即死
现有 IM 哪怕是「加密」的,没网就是砖头。离线场景几乎没有解。
核心理念
明文从不落盘
Ephemerality by default
四条设计目标贯穿全文:保密(端到端加密,中继只见密文)、认证(密钥即身份,公告签名验证)、韧性(在丢包/低带宽/网络分裂下仍工作)、最终送达(离线消息在有限保留窗口内必达)。持久化的只有密封密文或已公开广播流量——而这一切都会随「panic wipe」一键灰飞烟灭。
核心架构
双传输层 + 统一路由
BLE Mesh
↔
MessageRouter
↔
Nostr Relay
Transport A · 离线
Bluetooth LE Mesh
每台设备同时是 GATT central + peripheral,受控泛洪中继。无需基础设施、无需配对、无需账号。最多 7 跳,Noise XX 加密。
Transport B · 联网
Nostr Protocol
私信走 NIP-17/NIP-59 gift-wrap(kind 1059),用一次性临时密钥封装,relay 既不知发送者也不知内容。可选走 Tor。290+ 全球 relay。
两传输层实现同一 Transport 接口,由 MessageRouter 协调:优先活着的 mesh 链路,fallback 到 Nostr,两者都不通时启动 courier 系统。
智能路由
私信三级降级策略
① 蓝牙优先
可用时首选。与已建立 Noise 会话的 peer 直连——最快、最私密。中间节点只见密文。
② Nostr 兜底
蓝牙不可达时,用对方 Nostr 公钥走 NIP-17 gift-wrap,经全球 relay 网络路由。
③ 智能排队
两者都不通,消息入队等待。一旦有传输可用即自动投递。
BLE Mesh 细节
受控泛洪的五道阀门
- TTL 控制:包发出时 TTL=7。密集图(≥6 链)广播 TTL 压到 5,稀疏链(≤2 链)按完整深度中继
- 去重 LRU:1000 条目、5 分钟过期的 seen-set,按 sender+timestamp+type+payload digest 去重;重复包先到则取消已调度中继
- Jitter:中继随机等 10–220ms(密集时更宽),让去重常常获胜
- Fanout 子集:广播只发给 message-ID 播种的链子集(约 log₂(度数)),排除入站链路(split horizon)
- 定向流量:握手/私信/courier 信封确定性中继 TTL−1 + 紧 jitter,永不子集
BLE Mesh 细节
分片、路由与存在感
分片重组
超 MTU 包切 ~469B 片段,独立中继,每节点重组(128 并发、30s 超时、1MiB 上限)。
源路由
公告带最多 10 个直连邻居,构建浅拓扑图(60s 新鲜度)。有双向确认路径则源路由,否则回退泛洪。
存在感
签名公告多跳传播:孤立时每 4s,连上后退避到 15–30s。RSSI 门控 + 占空比扫描省电。
加密体系
三套加密覆盖三种场景
| 场景 | 模式 | 属性 |
| 在线会话 | Noise XX(X25519/ChaCha20-Poly1305/SHA-256) | 双向认证 + 前向保密 + 身份隐藏 |
| 离线密封 | Noise X(单向,密封到对方静态密钥) | 无前向保密——静态密钥泄露则暴露未投递邮件;prekey 是未来工作 |
| Nostr 私信 | NIP-17/NIP-59 gift-wrap | rumor(14)→seal(13)→wrap(1059),临时密钥封装,relay 不知发送者与内容 |
自动 rekey:每 1 小时或 10000 条消息后轮换会话密钥。peer ID 轮换时通过 fingerprint 映射保持会话连续。
Store and Forward
「对方不在」的四重保险
- 持久发件箱:发送方本地保留密封消息直到确认送达
- Opportunistic Couriers:移动的人(courier)携带消息,spray-and-wait 复制预算——遇到目标即投递
- Gossip 同步:公共频道历史通过 gossip 协议在 mesh 节点间同步
- Nostr Relay 邮箱:联网时把消息存到对方 Nostr relay 邮箱,对方上线即取
四机制覆盖「发送时对方不在范围内」问题,保证在有限保留窗口内最终送达。
频道模型
Mesh 频道 + 地理频道
mesh #bluetooth
- 传输:BLE mesh
- 范围:多跳内的本地设备
- 无需联网
- 场景:离线通信、抗议、灾情、偏远地区
Location Channels(geohash)
- 传输:Nostr over internet
- 精度分级:block(7字符)/neighborhood(6)/city(5)/province(4)/region(2)
- 临时密钥:每个 geohash 区域独立临时身份
- 场景:本地社区、活动、区域讨论
身份与隐私
密钥即身份
- 双长期密钥:Curve25519 静态密钥(Noise 密钥协商,SHA-256 指纹即稳定身份)+ Ed25519 签名密钥
- 短临时 ID:mesh 上用每会话派生的短 ID,收藏(favorite)才钉住完整 Noise 公钥
- 跨网桥接:互为 favorite 的 peer 交换 Nostr 公钥,打通 mesh ↔ internet 路径
- 线下验证:可选 QR 码把昵称绑定到指纹
- 无持久标识符:无账号、无手机号、无设备 ID
- 紧急擦除:三击瞬间清除所有数据(panic wipe)
技术栈
Swift 原生 + Apple 加密原语
- Swift + SwiftUI:iOS / macOS 通用 App,Xcode 工程,原生体验
- CoreBluetooth:GATT central + peripheral 双角色 BLE mesh 实现
- CryptoKit:Curve25519 密钥协商、Ed25519 签名、ChaChaPoly AEAD——全用 Apple 原生加密
- Noise Framework:自实现 XX/X 握手模式,NoiseEncryptionService + NoiseSession 线程安全
- Nostr 协议:NIP-17/NIP-59 gift-wrap,290+ relay 网络
- LZ4 压缩:消息体压缩,适配 BLE MTU 约束
- SwiftLint + Periphery:代码质量与死代码检测,Justfile 任务编排
快速上手
两种方式跑起来
# 方式 1:Xcode(要跑真机需配签名)
cd bitchat
open bitchat.xcodeproj
# 准备本地配置
cp Configs/Local.xcconfig.example Configs/Local.xcconfig
# 填入你的 Developer Team ID
# Bundle ID 自动设为 chat.bitchat.<TeamID>
# Entitlements 里 group.chat.bitchat 改成 group.chat.bitchat.<TeamID>
# 方式 2:用 just(macOS 上从源码跑)
brew install just
just run # 自动配置并从源码运行
just clean # 跑完恢复移动端构建环境
# 普通用户直接 App Store 下载
# apps.apple.com/us/app/bitchat-mesh/id6748219622
适用场景
适合谁用
- 极端断网场景:抗议、灾情、偏远地区、网络审查——蓝牙 mesh 是唯一生路时
- 隐私极客:拒绝手机号注册、拒绝中心服务器、要求元数据最小化的人
- 本地社区组织者:用 geohash 频道做街区/活动/区域即时沟通
- mesh 网络研究者:学习受控泛洪、store-and-forward、courier 路由的工程样本
- Noise 协议学习者:XX/X 模式在移动端 + BLE 约束下的完整 Swift 实现
- Nostr 生态构建者:NIP-17 gift-wrap 私信的实战参考
风险提示
需要权衡
- 离线密封无前向保密:Noise X 路径下,对方静态密钥泄露会暴露所有未投递邮件——官方白皮书自承,prekey 是未来工作
- 平台单一:仅 iOS/macOS,Android/Linux/Windows 用户无缘(CoreBluetooth 限制)
- BLE 物理约束:蓝牙范围有限,mesh 密度依赖人群——人少则网络稀疏,7 跳未必够用
- 无独立审计:加密实现未经第三方安全审计(白皮书 + BRING_THE_NOISE.md 为自述)
- 抗审查双刃剑:无账号无服务器的设计同样吸引非法用途,可能招致监管压力
- 早期项目:v2.0 协议,多设备支持/会话备份/群消息原语尚在 roadmap
潜力评估
未来空间
28.9k Stars 说明「断网可聊」击中了真实痛点。双传输架构(BLE mesh + Nostr)是同类中少见的完整工程实现,加上 Unlicense 公有领域许可,社区 fork/移植活跃(4.4k Forks)。若补齐 Android、引入独立安全审计、推进 prekey 前向保密,有潜力成为抗审查通信的事实开源标准之一。天花板取决于 mesh 网络效应能否在足够密集的人群中跑通。