聊聊 nostr 和 审查
这两天在网络上又有一个东西火了,Twitter 的创始人 @jack 新的社交 iOS App Damus 上苹果商店(第二天就因为违反中国法律在中国区下架了),这个软件是一个去中心化的 Twitter,使用到的是 nostr – Notes and Other Stuff Transmitted by Relays 的协议(协议简介,协议细节),协议简介中有很大的篇幅是在批评Twitter和其相类似的中心化的产品,如:Mastodon 和 Secure Scuttlebutt 。我顺着去看了一下这个协议,发现这个协议真是非常的简单,简单到几句话就可以讲清楚了。
目录
通讯过程
- 这个协议中有两个东西,一个是 client,一个是 relay,client 就是用户社交的客户端,relay 就是转发服务器。
- 用户不需要注册,用户只需要有一个密钥对(公钥+私钥)就好了,然后把要发的信息做签名,发给一组 relays
- 然后你的 Follower 就可以从这些 relays 上订阅到你的信息。
技术细节摘要
- 技术实现上,nostr 使用 websocket + JSON 的方式。其中主要是下面这么几个指令
- Client 到 Relay主要是下面这几个指令:
EVENT
。发出事件,可以扩展出很多很多的动作来,比如:发信息,删信息,迁移信息,建 Channel ……扩展性很好。REQ
。用于请求事件和订阅更新。收到REQ
消息后,relay 会查询其内部数据库并返回与过滤器匹配的事件,然后存储该过滤器,并将其接收的所有未来事件再次发送到同一websocket,直到websocket关闭。CLOSE
。用于停止被REQ
请求的订阅。
- Relay 到 Client 主要是下面几个指令:
EVENT
。用于发送客户端请求的事件。NOTICE
。用于向客户端发送人类可读的错误消息或其他信息
- Client 到 Relay主要是下面这几个指令:
- 关于
EVENT
下面是几个常用的基本事件:0
:set_metadata
:比如,用户名,用户头像,用户简介等这样的信息。1
:text_note
:用户要发的信息内容2
:recommend_server
:用户想要推荐给关注者的Relay的URL(例如wss://somerelay.com
)
如何对抗网络审查
那么,这个协议是如何对抗网络审查的?
- 识别你的身份是通过你的签名,所以,只要你的私钥还在,你是不会被删号的
- 任何人都可以运行一个或多个relay,所以,就很难有人控制所有的relay
- 你还可以很方便的告诉其中的 relay 把你发的信息迁到另一个 relay 上
- 你的信息是一次发给多个relay的,所以,只要不是所有的热门realy封了你,你就可以发出信息
- 每个relay的运营者都可以自己制定规则,会审查哪些类型内容。用户据此选择即可。基本不会有一个全局的规则。
- 如果你被全部的relay封了,你还是可以自建你的relay,然后,你可以通过各种方式告诉你身边的人你的relay服务器是什么?这样,他们把这个relay服务器加到他们的client列表中,你又可以从社死中复活了。
嗯,听起来很简单,整个网络是构建在一种 “社区式”的松散结构,完全可能会出现若干个 relay zone。这种架构就像是互联网的架构,没有中心化,比如 DNS服务器和Email服务器一样,只要你愿意,你完全可以发展出自己圈子里的“私服”。
其实,电子邮件是很难被封禁和审查的。我记得2003年中国非典的时候,我当时在北京,当时的卫生部部长说已经控制住了,才12个人感染,当局也在控制舆论和删除互联网上所有的真实信息。但是,大家都在用电子邮件传播信息,当时基本没有什么社交软件,大家分享信息都是通过邮件,尤其是外企工作的圈子,当时每天都要收很多的非典的群发邮件,大家还都是用公司的邮件服务器发……这种松散的,点对点的架构,让审查是基本不可能的。其实,我觉得 nostr 就是另外一个变种或是升级版的 email 的形式。
如何对抗Spam和骗子
但是问题来了,如果不能删号封人的话,那么如何对抗那些制造Spam,骗子或是反人类的信息呢?nostr目前的解决方案是通过比特币闪电网络。比如有些客户端实现了如果对方没有follow 你,如果给他发私信,需要支付一点点btc ,或是relay要求你给btc才给你发信息(注:我不认为这是一个好的方法,因为:1)因为少数的坏人让大多数正常人也要跟着付出成本,这是个糟糕的治理方式,2)不鼓励那些生产内容的人,那么平台就没有任何价值了)。
不过,我觉得也有可以有下面的这些思路:
- 用户主动拉黑,但很明显这个效率不高,而且体验不好
- 社区或是同盟维护一个黑名单,relay定期更新(如同email中防垃圾邮件也是这样搞的),这其实也是审查。
- 防Spam的算法过滤垃圾信息(如同email中干的),自动化审查。
- 增加发Spam的成本,如: PoW 工作量证明(比特币的挖矿,最早也是用于Email),发信息要花钱(这个对正常用户伤害太大了)等。
- ……
总之,还是有相应的方法的,但是一定没有完美解,email对抗了这么多年,你还是可以收到大量的垃圾邮件和钓鱼邮件,所以,我觉得 nostr 也不可能做到……
怎么理解审查
最后,我们要明白的是,无论你用什么方法,审查是肯定需要的,所以,我觉得要完全干掉审查,最终的结果就是一个到处都垃圾内容的地方!
我理解的审查不应该是为权力或是个体服务的,而是为大众和人民服务的,所以,审查必然是要有一个开放和共同决策的流程,而不是独断的。
这点可以参考开源软件基金会的运作模式。
- 最底端的是用户(User)参与开源社区的使用并提供问题和反馈。
- 用户在使用过程中了解项目情况后贡献代码和文档就可以晋升为贡献者(Contributors),
- 当贡献者提交一定数量贡献之后就可以晋升为提交者(Committers),此时你将拥有你参与仓库的代码读写权限。
- 当提交者Committers在社区得到认可后,由项目管理委员会(PMC)选举并产生PMC成员(类似于议员),PMC成员拥有社区相关事务的投票、提名和共同决策权利和义务。
注意下面几点
- 整个社区的决策者,是要通过自己贡献来挣到被选举权的。
- 社区所有的工作和决定都是要公开的。
- 社区的方向和决策都是要投票的,PMC成员有binding的票权,大众也有non-binding的投票权供参考。
- 如果出现了价值观的不同,那么,直接分裂社区就好了,不同价值观的人加入到不同的社区就好了。
如果审查是在这个框架下运作的话,虽然不完美,但至少会在一种公允的基础下运作,是透明公开的,也是集体决策的。
开源软件社区是一个很成功的示范,所以,我觉得只有技术而没有一个良性的可持续运作的社区,是不可能解决问题的,干净整齐的环境是一定要有人打扫和整理的。