跳到主要内容

Bitsocial 与 Secure Scuttlebutt

Secure Scuttlebutt(SSB)是 Dominic Tarr 于 2014 年创建的点对点社交协议。Manyverse 是它最知名的应用,支持 Android、iOS 和桌面端;Patchwork 在被归档之前一直是主要的桌面客户端。在本文档比较过的系统中,SSB 在理念上最接近 Bitsocial:数据路径中没有服务器,没有区块链,没有全局排序,并以 Ed25519 密钥作为身份。两者在每个对等点存储什么、以及在哪里拦截垃圾信息这两件事上,做出了相反的选择。

Scuttlebutt 的工作原理​

  • 信息流。 每个身份都是一个 Ed25519 密钥对,写作 @<public key>.ed25519。用户发布的一切都会进入其自己的信息流(feed),这是一个只追加(append-only)的日志,其中每条签名消息都带有一个序号和上一条消息的哈希。根据协议指南,消息一经发布便无法修改。
  • 复制。 对等点复制的是整个信息流,而不是单条帖子,由关注图决定一个对等点保留哪些信息流。例如,Patchwork 会显示两跳以内的信息流,并复制三跳以内的信息流。借助 epidemic broadcast trees(EBT),对等点会比较各自持有的每个信息流的最新序号,只发送缺少的部分。
  • 连接。 对等点通过 secret handshake(秘密握手)相互认证,并用 box stream 加密流量。握手与一个网络标识符绑定,因此使用不同标识符的独立 SSB 网络中的对等点无法连接到主网络。
  • 发现对等点。 对等点通过 UDP 广播在本地网络中宣告自己,并通过 LAN 同步;Manyverse 还支持通过 Bluetooth 同步。在互联网上,用户依赖 pubs 和 rooms:pubs 是始终在线的对等点,你兑换邀请码后它们会回关你,然后存储并提供你的信息流;rooms 不存储任何信息流,而是在其成员之间以隧道方式转接连接。
  • Blob 与私信。 图片和其他文件是从对等点获取的按内容寻址的 blob,在当前实现中默认大小上限为 5 MB。私信最多可加密给七位收件人,并以密文形式发布在作者的信息流中。

两者的区别​

对等点存储什么​

SSB 对等点会保留其复制范围内每个信息流的完整副本,从每个信息流的第一条消息开始,并把这些信息流提供给其他人。正是这一点让 SSB 可以离线工作,但存储会随着范围内的每条消息不断增长,新安装的客户端也必须先下载这些信息流,才能显示出较多内容。Bitsocial 客户端从社区的节点以及为其做种的对等点获取它所打开社区的最新状态,而网络只保留这一最新状态。参见点对点协议。

删除与设备​

由于信息流是一条哈希链,SSB 没有全网范围的删除:对等点可以从自己的数据库中删掉消息,但无法从其他对等点的副本中撤回它们。用同一把密钥从两台设备发帖,或从恢复的备份发帖,都会使信息流分叉,因此通常的做法是每台设备使用一个身份。PZP 是 Manyverse 团队推出的后继协议,它把删除、单个账号多设备以及能容忍分叉的信息流列为相对 SSB 的主要改动(发布文章)。Bitsocial 社区节点每次更新都会发布社区状态的新版本,因此被社区版主移除的内容会从最新状态中消失。

你能听到谁的声音​

SSB 的复制范围同时也是它的垃圾信息过滤器。只有当你跳数范围内有人关注某个陌生人时,这个陌生人的信息流才会到达你这里;屏蔽一个信息流后,你的节点就会停止复制它。垃圾信息被挡在外面,但新来的人在有人关注他们之前也同样被挡在外面。Bitsocial 允许任何人向社区发布内容,并由社区的节点通过其挑战来决定是否接受帖子。参见自定义反垃圾邮件挑战。

社区​

SSB 没有社区对象。频道和话题标签只是单条帖子上的标签,一个帖子串中的回复存放在各自作者的信息流里,你能看到帖子串的多少,取决于你的节点拥有其中哪些信息流。Rooms 可以有版主和成员列表,但它们控制的是谁可以通过 room 连接,而不是发布什么。Bitsocial 社区则是一等对象,拥有自己的密钥对、规则、版主和挑战。

基础设施​

两者都把服务器排除在数据路径之外,也都依赖辅助角色。Pubs 是 SSB 中最接近托管服务的东西:它们存储并提供自己所关注的每个人的信息流。Rooms 更接近 Bitsocial 的 HTTP 路由器,因为两者都不存储内容;但 room 会中继成员之间的连接,而路由器只返回提供者地址,不参与传输。和 SSB 对等点一样,Bitsocial 社区节点运行在消费级硬件上,而且必须在线才能接受新帖子。

离线与本地网络​

这是 SSB 更强的地方。同一 Wi-Fi 网络中的两个 SSB 对等点,或者在 Manyverse 中通过 Bluetooth 连接的两个对等点,无需互联网连接即可同步,而且已经复制过来的所有内容在离线时依然可读。Manyverse 公开表示,其首要目标是让社交网络摆脱对互联网连接的依赖。Bitsocial 需要互联网连接才能发现对等点和发布内容。

浏览器​

主要的 SSB 应用都自带完整的 SSB 节点:Manyverse 在其移动端和桌面端应用中都内置了一个节点。ssb-browser-demo 曾在浏览器中运行 SSB,采用部分复制并通过 rooms 建立连接,已于 2022 年归档。Bitsocial 应用在普通浏览器标签页中运行点对点节点。参见浏览器点对点网络。

私信​

SSB 内置加密私信。Bitsocial 专注于公开社区,目前还没有原生私信。

项目现状​

Manyverse 的开发者 André Staltz 于 2024 年 4 月退出了 SSB、Manyverse 以及它们计划中的后继项目(他的最后一次更新)。2024 年 7 月,Jacob Karlsson 以 PZP 之名发布了这个后继项目,并表示他不会再为 Manyverse 做任何工作,也不知道还有谁打算接手。截至 2026 年 10 月,Codeberg 上的 PZP 代码仓库在 2024 年 12 月之后没有任何更新。Patchwork 的代码仓库已归档,最后一个版本是 v3.18.1;iOS 上的 SSB 应用 Planetary 背后的团队则在 2023 年带着他们的 Nos 应用转向了 Nostr。SSB 网络仍运行在人们保持在线的对等点和 pubs 上,但它的主要应用已不再开发。

对比​

问题Secure ScuttlebuttBitsocial
类别点对点 gossip 协议点对点社区网络
身份每台设备一个 Ed25519 密钥对用户和社区各自使用 Ed25519 密钥对
帖子存放在哪里作者的只追加信息流,由每个复制它的对等点拷贝社区所有者的节点,以及读取并为其做种的对等点
对等点保留什么关注范围内每个信息流的完整历史它读取或做种的社区的最新状态
社区没有社区对象;频道和话题标签为帖子打标签一等对象,由其节点接受或拒绝帖子
垃圾信息控制基于关注图的复制范围,以及屏蔽帖子被接受之前须通过所在社区的挑战
审核每个用户的关注和屏蔽社区所有者审核自己的社区;应用自行决定显示什么
辅助服务器Pubs 存储并提供信息流;rooms 以隧道方式转接连接HTTP 路由器返回提供者对等点,不存储任何内容
离线无需互联网,通过 LAN 和 Bluetooth 同步需要互联网连接
浏览器应用内置完整的 SSB 节点普通浏览器标签页中的点对点节点
网络仍在运行,但主要应用已不再开发已上线的网络,拥有 5chan 和 Seedit 等应用
主要取舍可离线工作且无需托管,但信息流会无限增长,陌生人始终不可见开放发布并支持浏览器,但需要互联网,且只保留最新状态