一天一个开源项目

每日一个开源项目(第168篇):BitChat - 蓝牙网状网络 + Nostr 去中心化通信,以及印度为何要封它

Jack Dorsey 开发的去中心化 P2P 通信应用,蓝牙 Mesh 网络(7跳)+ Nostr 协议双轨,断网仍可通信,端到端 XChaCha20-Poly1305 加密,无账号无服务器无电话号码。因在印度 NEET 抗议中被断网学生使用,印度内政部以 3 小时时限向 GitHub 发出下架令。30.4k Stars,Unlicense 公有领域协议。

·约 10 分钟阅读·AI 技术

引言

"政府不喜欢 BitChat 这类技术,并且想要让它下线。"
— Jack Dorsey,2026 年 7 月 24 日发布在 X 上的原文

这是"每日一个开源项目"系列的第168篇文章。今天的主角是 BitChat——Jack Dorsey 开发的去中心化 P2P 加密通信应用。

BitChat 在技术上是一个有意思的系统:蓝牙 Mesh 组网、Nostr 协议互联、端到端加密、无账号无服务器,断网状态下依然可以通信。这个项目已经积累了 30.4k Stars,但让它最近突然进入全球视野的,不是一篇技术文章,而是一张政府下架令截图。

2026 年 7 月 23 日,印度内政部通过印度网络犯罪协调中心(I4C)向 GitHub 发出通知,要求在 3 小时内下架 BitChat 的三个代码仓库,理由是该应用"可能被反国家分子、恐怖分子和有组织犯罪团伙用于规避合法监控"。

背后的直接触发因素:数万名印度学生在新德里 Jantar Mantar 广场抗议 NEET 考试泄题丑闻,政府一周内五次切断抗议现场的移动网络,而抗议者开始用 BitChat 通过蓝牙继续协调。

你将学到什么

  • BitChat 的双轨传输架构:蓝牙 Mesh(断网)+ Nostr(有网)
  • 7 跳蓝牙 Mesh 路由的工作原理
  • XChaCha20-Poly1305 + Noise Protocol 的加密设计
  • 印度 NEET 抗议事件背景:考试丑闻如何演变成政治危机
  • 印度政府封禁 BitChat 的法律依据和争议点
  • GitHub 的回应和数字权利组织的立场

前置知识

  • 了解 P2P 网络和加密通信的基本概念
  • 了解 Nostr 协议(或有概念)
  • 对数字权利和网络管控议题有基本认知

项目背景

项目简介

BitChat 的核心理念用三句话概括:无账号、无电话号码、无中央服务器。

它是一个双模式通信应用:

  • 蓝牙 Mesh 模式:设备之间直接通信,不需要互联网,最多 7 跳中继
  • Nostr 模式:通过 290+ 个全球分布的 Nostr 中继服务器通信

两种模式无缝切换,用户感知不到底层传输在用哪条路径。

作者/团队介绍

  • 开发者: Jack Dorsey(Twitter/X 联合创始人,Square/Block 创始人)
  • 组织: permissionlesstech
  • License: Unlicense(公有领域,最宽松的开源协议,代码完全属于公众)
  • 技术栈: Swift,iOS + macOS 通用

项目数据

  • ⭐ GitHub Stars: 30,400+
  • 🍴 Forks: 4,700+
  • 📄 License: Unlicense(公有领域)
  • 📱 平台: iOS、macOS

核心技术架构

双轨传输

用户发送消息
        ↓
        ├── 有互联网 → Nostr 协议
        │              290+ 中继节点全球分布
        │              去中心化,无单点故障
        │
        └── 无互联网(断网/关机/地下室)→ 蓝牙 Mesh
                       蓝牙 LE
                       最多 7 跳中继
                       覆盖半径随人群密度扩展

关键设计:BitChat 的私信信封格式是自定义协议,不兼容标准的 NIP-17/44/59 格式。这个选择换来了更强的隐私性——消息结构不符合任何已知的监控工具分析模式。

7 跳蓝牙 Mesh 路由

蓝牙 LE 在空旷环境下的直连距离大约 10-30 米,但 BitChat 支持 7 跳 Mesh 转发:

Alice [BLE] → 中继1 [BLE] → 中继2 [BLE] → ... → Bob
(每个设备同时是终端和路由节点)
 
理论覆盖:7 × 30m = 210m+(取决于人群密度)
实际效果:密集人群中覆盖范围显著扩展

在 Jantar Mantar 广场的抗议现场,数千人聚集的密度使这个机制格外有效——每一部运行 BitChat 的手机都自动成为 Mesh 网络的节点。

加密设计

私信(P2P):
  Noise Protocol 握手(身份验证 + 密钥协商)
  XChaCha20-Poly1305 对称加密
  
  → 前向保密(每次会话独立密钥)
  → 认证加密(AEAD,同时保证机密性和完整性)
  → 抗重放攻击
 
频道消息:
  LZ4 压缩(减小蓝牙传输体积)
  可选端到端加密

其他设计细节

  • 紧急擦除:三次快速点击立即清除所有本地消息和密钥
  • 基于地理位置的频道:使用 geohash 坐标(精度从街区到国家级可选)
  • 自适应电量模式:根据电池状态调整蓝牙扫描频率
  • IRC 风格命令:/msg 私信、/who 查看在线、/slap 等

快速开始

安装

BitChat 目前是 iOS + macOS 原生应用(Swift),通过 GitHub 源码或 TestFlight 获取。

# 克隆源码
git clone https://github.com/permissionlesstech/bitchat.git
 
# 用 Xcode 打开
open bitchat.xcodeproj

使用模式

本地通信(完全断网):

  1. 打开应用,不需要注册
  2. 附近运行 BitChat 的设备自动组成 Mesh
  3. 加入或创建频道(可用 geohash 创建基于位置的频道)

全球通信(有网):

  1. 应用自动切换到 Nostr 模式
  2. 通过 290+ 全球中继节点通信
  3. 无需账号,使用密钥对身份

印度为何要封它

事件背景:NEET 泄题引发的学潮

2026 年,印度爆发了规模最大的学生抗议运动之一。直接导火索是 NEET(全国医学入学考试)泄题丑闻:

  • NEET 是印度学生进入医学院的唯一通道,竞争极为激烈
  • 2026 年 5 月,考试结果发布前突然取消,原因被证实是试题外泄
  • 一名 22 岁备考生在消息公布后数天内自杀
  • 多名学生因压力和绝望相继轻生
  • 学生群体将矛头指向教育腐败和官员渎职,要求教育部长辞职

抗议演变为更大范围的反腐运动,参与者自称"蟑螂人民党"(Cockroach Janta Party,CJP)——蟑螂在印度语境里象征顽强生存、打不死。

断网和 BitChat 的出现

印度政府一周内五次切断 Jantar Mantar 广场的移动网络,试图阻断抗议者的协调能力。

结果适得其反——部分抗议者开始使用 BitChat,通过蓝牙 Mesh 在断网状态下继续通信。这让政府意识到传统断网手段对这类应用无效。

政府的下架令

2026 年 7 月 23 日,内政部通过 I4C 向 GitHub 发出通知,核心内容:

  • 要求:3 小时内下架三个 BitChat 仓库
  • 理由:该应用可被"反国家分子、恐怖分子和有组织犯罪团伙"用于"规避合法监控"
  • 技术关切:应用可在互联网断网期间运行,没有中央服务器可用于追踪

Jack Dorsey 将通知截图发布在 X 上,附文:

"印度政府不喜欢 BitChat 这类技术,并且想要让它下线。"

法律依据的争议

印度政府通常援引《信息技术法》第 69A 条(IT Act Section 69A)封锁内容,该条款允许政府以国家安全、公共秩序等理由要求平台下架内容。

但多个数字权利组织指出这次援引有明显问题:

互联网自由基金会(IFF)的声明(2026 年 7 月 24 日):

"封锁 BitChat 在 GitHub 上的代码是违宪和威权主义的。删除代码仓库不会从已安装应用的手机上删除这个应用,反而阻止了公众对底层代码的审查。"

**SFLC.in(软件自由法律中心)**的意见:

第 69A 条的设计是针对特定违法内容,而不是针对某种软件的功能特性。"这个应用在断网时仍能工作"本身不构成可封锁的理由——这个逻辑等同于封锁所有支持离线功能的通信软件。

Access Now(获取渠道组织):

在互联网断网期间阻止离线通信工具,可能制造"通信全面断绝"的局面,侵犯宪法保障的基本权利。

GitHub 的回应

GitHub 没有公开确认收到通知。截至通知发出后,BitChat 的仓库在印度仍然可以访问。


更大的背景:围绕去中心化通信的张力

BitChat 事件不是孤立的。这是一个反复出现的冲突模式:

政府的立场:通信基础设施必须有"合法拦截"能力,这是情报机构和执法机构的基本要求。去中心化、加密、无服务器的通信工具,系统性地排除了这种能力。

技术社区和数字权利组织的立场:断网是对言论自由和集会自由的直接压制。在断网期间仍能通信的工具保护的是基本人权,不只是抗议权利。

Unlicense 协议的含义:BitChat 使用公有领域协议,这意味着任何人都可以自由复制、修改、重新分发,包括代码本身。即使 GitHub 仓库被下架,代码已经存在于全球数千个克隆中,理论上无法彻底删除。

这个设计决定在当前的政治事件中显示出了它的意图。


项目地址与资源


总结

BitChat 是一个在技术上相当精心的项目:蓝牙 Mesh + Nostr 双轨设计使它在任何网络条件下都能工作,XChaCha20-Poly1305 加密和无服务器架构使它在隐私保护上达到了相当高的水准,Unlicense 协议使它在法律上无法被真正"删除"。

印度封禁事件的意义不只在于一个应用和一个政府之间的冲突。它说明了一件事:当断网成为政府的惯常工具,工程上绕过断网的方案就会被开发出来;当这类方案出现,争议就从"能否断网"转向"能否封锁工具本身"。

IFF 的说法值得引用:删除代码仓库不会从手机上删除应用,反而阻止了公众对代码的审查。开源代码的透明性——让任何人都可以验证里面没有后门——恰恰是这类工具可信的基础。

30.4k Stars,Unlicense,全球 4,700+ 个 Fork。这段代码已经存在于太多地方,下架令能做的事情有限。


探索 PrimeSkills —— 精选 AI Agent 与技能的市场,每一个都经过真实企业工作流验证,去掉浮夸,留下真正有用的。

欢迎访问我的个人主页,发现更多有价值的见解和有趣的产品。