在BT,Dat,SSB,IPFS上构建去中心化社交网络
时间:2023-03-15 00:08:01 | 来源:电子商务
时间:2023-03-15 00:08:01 来源:电子商务
本文将从社交网络的场景出发去分析和比较BT,Dat Protocol, Secure Scuttlebutt(SSB),IPFS四个有代表性的P2P网络协议,这些协议对Web 3.0的构造有着
奠基性的意义。相比于Defi(去中心化金融)的热度,DeSNS(去中心化社交网络)的关注和实践甚少,但潜在价值相当。
摘要(本文近8千字,太长不想读的读这里)
- BT与SSB没有NAT穿透的设计,不能实现全球连接,其中SSB选择公共服务节点的方式处理,相对中心化。
- BT专注于文件分享,IPFS专注于文件发布,两者都没有信息流同步的设计,不适合用于社交网络,但IPFS的底层协议libp2p支持这种拓展。
- SSB 与 Dat 两个协议更适合做社交网络,但两者的发展理念骤然不同。SSB让新用户必须与朋友连接到同一个公共节点才能连接,认为多中心的结构符合社交网络图谱,并反对DHT与区块链的同步方式。Dat追随DHT的应用,致力于让每台计算机参与P2P网络,并且支持信息流的部分验证,网络相对去中心化和机动。
- SSB强制使用户聚合到不同的中心节点将是错误的设计。P2P网络的拓扑结构应该用引导的手段去干预,而不是设计的手段去生成。
- 使用Gossip(八卦)协议的网络也能实现隐私的细粒度控制,节点Gossip的不是数据本身而是数据的元数据。
- 在P2P协议里面,由于种子的存在数据将不可能丢失或完全删除。
- Dat,SSB,IPFS上数据都是本地发布,用户拥有充足的数据主权。公共服务节点虽然可能聚集很多用户数据,但这些数据是公开的,服务节点对用户的客户端也没有控制力,减少了99%的作恶动机。
- 在P2P网络里构建网络信任的方式只能通过接入一些信任源实现,网络中可以引入证书的概念来标记数据与用户。
- P2P网络避免的是来自平台的过度审查,但不是要逃离法律的监管。通过应用端过滤消息和节点拒绝路由违法消息能维护健康的网络环境。
- Web3社交网络中,我们依然可以在保持通讯和发布的去中心化的同时去容纳中心化的内容聚合和索引。用户将能自由选择他们信任的应用来实现搜索、内容榜单和推荐。
- 去中心化社交网络的核心优势是:永久的内容、永续的社区、无广告和跨越不同应用的超级身份的实现。
SNS三个基本条件
一、让用户在网络中拥有身份需要用户拥有一个
固定能代表自己的ID,与证明数据是属于这个ID所产生的
证明途径。前者4个协议都可以做到,后者BT做不到,因为BT没有引入公钥/私钥,故用户不能对数据进行签名以代表这个数据的来源。
二、能从网络中找到任意一个用户并建立连接在网络中找到一个用户需要知道她的TCP/IP信息。但很多人并没有固定的IP,导致外界无法联系这个人。这个问题被称为NAT穿透问题,或者hole punching问题。针对这个问题,
BT没有做相应的改善措施。Dat目前使用了中心化的Tracker来解决,但以后会用上hole punching的协议Hyperswarm来解决这个问题。
ssb直接放弃了攻破这个问题,它选择让用户直接连接到一些拥有服务器主机的公共节点(有固定IP),会形成一定的中心化。IPFS采用了TURN,STUN,ICE多种针对性方案来解决hole punching问题。
三、满足发布/订阅的信息同步场景在社交网络中人们往往需要知道所关注的人的最新消息,这其实就是一个信息流同步的过程。
BT没有这个设计,因为文件分享是一次性行为双方不需要长期对话。
IPFS也没有信息流同步的设计,访问IPFS的一个链接的时候它只会指向文件的最新状态,虽然IPFS也会记录文件的修改历史,但是协议不会把这些历史状态都同步过来,这也跟IPFS专注于做去中心化的互联网有关,这是不适合用于做发布/订阅的,但IPFS的底层协议libp2p则有一定这样的设计。
Dat和ssb都专注于信息流同步,协议都会主动把用户所关注的信息流(feed)的所有新消息按一个append-only的log同步过来。ssb是immutable的,每条新消息都是一个新文件,比如你发了一篇文章,则你发布了一个文件,如果你修改了文章,则你又发布了一个文件,你的个人主页会出现两篇文章,当然你可以手动删掉一篇。Dat很灵活的解决了这个问题。Dat的mutable的,首先Dat用文件夹表示一个ID(Dat里面一个用户可以有多个文件夹对应多个feed,ssb一个用户就是一个ID就是一个feed),然后Dat文件夹里面文件以txt名字表示,文件的新版本会自动覆盖旧版本,跟我们电脑里面的文件夹是一致的。同时每当你对文件夹里的文件做增删改时,每一个动作都会变成一条消息发表到你的feed里面,这就成了一个metadata log。这样做的好处有两个,一是你的文件夹时刻处于最新状态,二是别人可以从你的metadata log里面有选择的同步消息,而不像ssb那样一概而论都算新消息同步过来。
(BT,SSB,Dat,IPFS的比较)从整体上看,
BT与IPFS均不能满足构建社交网络的基础条件,但IPFS离这个实现距离不远,有拓展的空间。接下来我们将对SSB和Dat协议展开简短的分析。
Secure Scuttlebutt
有数据流的概念:
一个ID一个feed,这个ID所有发布的新消息都归入feed里面。这个feed消息本地发布,用户拥有独立发布的能力。Feed消息是一个
append-only log,消息只能增加不能删除和修改。节点同步信息时会互相询问对方有没有我感兴趣的feed的新消息,如果有则开始同步,
如果没有对方将会将这个消息转发给自己认识的节点继续询问。一个节点如果想要得到一个具体的消息,或一个文件,需要知道消息或文件对应的ID,并开始向自己认识的节点询问。至于旧消息,订阅节点可以本地储存,也可以不储存。
当你丢失一条消息时也可以从网络中重现找到备份重新下载,沿着你曾经得到这条消息的路由路径,你最终能找到消息的来源,这个源头不需要是作者本人,可以是作者的其中一位读者,也能给你提供这个文件。每个消息都由作者签名后再公布,当你收到一条消息时只需要验证消息的签名,就可以确认这条消息的作者身份和消息的完整性,无论这条消息来自于哪个节点。
SSB没有DHT和NAT穿透设计,所以SSB为IP贫困户引入了
公共节点(Pub)的设计。Pub应该是拥有固定IP的,允许任何人与其建立TCP连接的ssb公共节点,其与普通节点表现唯一的不同是,当你Follow这个节点时它会自动Follow back,其余都一样(Pub也有可能随时下线,所有人都可以运营Pub)。
SSB故意避开了DHT和区块链的设计,因为SSB认为DHT和区块链都是P2P的Singletons(单例模式),相当于P2P版本的中心化系统。除此之外,global区块链要求每个节点储存整个账本,非常浪费资源,而DHT容易受到Sybil攻击。因此在SSB上,你必须与朋友在同一个Pub上才能建立连接,并且你的信息发现范围无法超越Pub的社交图谱,即使你知道一个目标信息的ID,若Pub的社交图谱里面没有节点储存了这个信息你也没办法获取到这个信息。总而言之,ssb设计了一套为博客而生的信息同步协议,但应用场景受限于Pub,而Pub的出现和衍变非常随缘,令网络变得非常“佛”。
Dat Protocol
Dat也有数据流的概念,所有数据也是本地发布,并且有版本的概念:dat中的数据以文件和文件夹的方式储存在本地,每个文件夹都有自己的数据流,也称为feed,订阅文件夹的公钥等于订阅文件夹的feed更新。Dat允许一个用户创建多个文件夹,订阅者可以订阅其中某个文件夹。feed的里面的消息按chunk来分段,以chunk的序列来表示。两个节点建立会话连接后,开始互相发布各自想要的chunk和拥有的chunk,然后互相同步,并记住对方需要什么,一旦自己有了这个chunk就告诉对方。
区别于ssb,Dat的设计里面还包括文件夹的metadata feed(元数据记录),记录着文件夹里文件的状态,包括增/删/改。同一个文件可以从metadata feed里面找到历史版本。每次metadata feed有新的消息作者都会对feed里面所有消息的根哈希进行签名,这样下载者可以阅读metadata feed并从哈希树里面找到所需的部分文件来下载,
不需下载全部信息。节点不单止可以询问其所感兴趣的文件夹有什么新的feed message,还可以告诉对方自己需要从哪里开始,到哪里结束的对应的chunks就行。利用chunks的根哈希可以验证所收到的chunk是否完整。比如A文件夹发布了一部电影,可以一段一段的上传,下载者一段一段的下载的时候可以通过根哈希知道自己下载了多少,还剩下多少,而在ssb里面,下载一段之后无法判断是否还有下一段,需要把新消息全部下载下来解析之后才知道哪里是头哪里是尾。类似的场景还可以套用于长期离线后重新上线时只接收最近的某一段时间的消息,或请求某一段历史聊天记录。Dat目前使用Multicast DNS局域网发现和tracker式的网络发现。Multicast DNS的使用场景非常狭窄,你能用它和同一个Wifi的朋友连接上以及发现附近的人。Tracker式的网络发现很global,但也非常中心化,长远来说不可行。长期来说Dat打算更换这两种方式,接入Hyperswarm的Kademlia式DHT寻址,能单单通过分享文件夹的公钥就能从网络中找到文件夹的下载信息(与BT类似),并且能实现hole punching。
SSB vs DatDat和ssb除了在网络寻址的发展方向(与其导致的拓扑结构)不一样之外,信息的同步机制都是类似的,ssb中同步通过三种gossip,一种询问有没有这个feed的新消息,一种询问有没有这个ID的消息,一种询问有没有某个blob(指大文件);Dat中同步通过两种gossip,一种询问谁有这个feed,找到对应的节点后询问有没有这些chunks(指任何文件,包括文字消息)。对于博客和论坛等社交场景来说,ssb更细致一点,将一条消息里的大文件作为附件处理,在请求时可以分开加载。但Dat额外支持一个feed中内容的部分下载(Partial download),这个设计对初始化消息流和长时间离线后进行消息同步时在加载过程做一些体验优化是非常有用的。
在社交网络上,SSB比Dat先迈进一步,但
仍然只是勾勒了社交网络的雏形,与Facebook,Twitter相比还差很多,很多方面欠缺考虑和优化。下文将继续比较SSB和Dat两个协议在社交网络一些重要维度中的优劣,并且提出一些优化的思考。
合理的去中心化社交网络
一、通讯效率由于让所有人与所有人建立连接的通讯效率十分低下,根本没办法与现在的网络(Web2)相比,所以在P2P中一般会使用Gossip式(八卦)的通讯协议,即通过
一传十,十传百的方式收到新消息,而在传输数据的时候,往往不会直接Gossip数据本身,而是数据的metadata,比如它的ID,它存在哪里,而已经存了这个数据的节点就可以直接把自己的备份发给所需的人,通过这样的扩散传播可以大大提高通讯效率,这点从bittorrent的运行已经得到过验证。实际上,加上有效的激励机制,繁荣健壮的节点网络能达到的网络传输速度
能比Web2高5-10倍(参考PT网络的速度)。SSB和Dat都忠于Gossip理念,ssb甚至按gossip命名,以gossip行为思考网络的拓扑结构。但两个协议都没有刻意对节点网络进行积极的引导和激励。
ssb认为社交网络本身就是多中心的,小节点围绕着大节点是与社交网络图谱本身相吻合的拓扑结构,所以ssb引入了Pub公共节点。一个用户可以连接多个Pub,但两个孤立的用户相遇必须连接到同一个Pub,离开Pub后他们才用gossip去联系。但实际上Pub作为服务节点会一直订阅着这两个用户,所以一般情况下这两个用户会永远经过这个Pub去同步信息。
但Pub不一定是两个用户地理位置之间的最佳Relay,当两个用户想要在ssb上成为朋友时,双方只想赶紧找到一个可用的节点相互关注起来,这个节点是谁host的,干什么的,上面有什么人,什么内容这些因素根本来不及考虑,
勉强的聚合使用户被动放弃了很多选择的可能,特别在ssb的官方应用patchwork中,加入Pub时初始化Pub中的公共数据会出现很恐怖的加载等待,而这些信息与我相关的少之又少。
我认为这是ssb一个错误的设计。SSB看到了社交网络图谱的结构,想通过P2P网络还原一个真实自然的社交网络,这是一个很好的理念,但它忽略“真实自然”本身是自己繁衍出来的,强制让两个用户用同一个Relay节点恰恰本末倒置,违反了“真实自然”本身。Dat在这层则没有任何干预。Dat默认用户自己的计算机参与P2P网络,并任由用户自己发现和连接网络中的节点。
P2P网络的拓扑结构应该用引导的手段去干预,而不是设计的手段去生成,因为一个单方面的决定不可能满足所有人的需求,把自主权交给用户本身才能让网络衍生出合理高效的拓扑结构。但在网络初期阶段,能够参与网络路由的节点很少,而且用户的计算机经常处于离线状态,节点的地理分布也不均匀,会出现通讯效率十分低下的尴尬情况,对节点网络的激励和引导将是一个必要环节。
二、隐私在Gossip的网络中,虽然节点都在互相“八卦”,但隐私是可以得到保障的。首先,
大家在gossip中传输的“八卦”不是消息本身,是消息的Metadata(元数据),这并不包含消息内容。然后再gossip的过程中数据传输是加密的,类似于http的handshake,ssb和Dat的节点在建立会话的时候也会经过handshake,中间由加密算法保证监听者不可以偷听所传输的数据,但监听者可以看到这些会话的建立。不过,任何一个节点都可以向内容的所有者请求数据。由于gossip协议本身的特性,节点会诚实告诉陌生人自己有没有这个内容的信息。但要想知道网络中随意两个节点正在交谈什么,必须自己亲自去参与gossip,并且知道它们所讨论的数据ID,去询问它们“你知不知道这个消息?”或者“你有没有这个消息的地址?”才可以达到目的。在社交网络里面,你对外发布的数据是公开的,谁都可以访问和请求,这里没有隐私问题。如果要做细粒度的隐私设置,可以对协议进行一些改良。比如你想把一条消息调为只给自己看,那么应该在本地增加一个加密数据和自动解密的功能;比如你想发一条消息只给部分人看,那么应该在访问者请求的时候加上授权的证书验证才开放数据。
三、冗余与永续在P2P网络中,还有一个叫seed的操作,指节点主要为目标数据提供备份的
“存种”行为。
由于种子的存在,数据不可能丢失和完全删除,而且节点通过gossip可以自动的把丢失的数据从网络中
“搜刮”回来,对于信息流形成了一种永续性的效果。ssb和Dat都不会主动引导用户去seed,但当它们用户发布/订阅场景的时候,数据就会在订阅者中形成一些冗余,这些都属于种子,当然订阅者可以主动删除这些数据。如果想要加强内容的冗余,可以加入一些引导和激励。
四、数据主权在ssb和Dat中,用户自己的数据都保存在本地,可以说是拥有
绝对的数据主权。但订阅者会收到你的数据,像ssb里面的超级relay,既是你的首要gossip对象也规定是你的订阅者,那么你所有的数据超级relay都有一份,当一个超级relay上面服务着很多用户时,情况似乎回到了Web2。但其实不然,情况和web2大有区别。首先relay只是节点,它并不是你的应用控制者,意味着它不能给你的timeline或者其他地方发送广告,也不能修改你的信息流顺序(feed 是个append-only log,并且经过作者签名),所以
relay没有主动权,也丧失了99%作恶的动机。另外,用户可以随时换relay和屏蔽节点,也就是用户有选择权,relay作恶的动机就更减小了。
五、网络信任在去中心化的网络里面,创建账户必须是独立的,即人人都可以创建账户,不需要经过审核,也就是说
创建账户的成本几乎为0。再加上P2P网络的开放性设计,用户的数据很容易被全部复制,在Dat上的某些应用甚至加入了
“一键Fork”的功能,复制一个账户的门槛比Web2大大降低。假设一个作恶者想模仿你去行骗,那么她在复制你的数据之后,再用大量的小号关注自己,形成很多粉丝的假象,就可以制造出容易让人误认的账户。
这个问题在现有的社交网络中也普遍存在,“真相”是很难判断的。信任在现实生活中是非常中心化的,我们会有“信任背书”这个词语,是因为建立信任本来就需要中间人去保证的。在社交网络中,网络信任是不可缺失的一环,就算是去中心化的网络也应该在这点上加入中心化的控制,但这个角色肯定不是一个网络控制者,而是一些证书、凭证的设计。
网络中可以引入一些证书的颁发者对内容进行监管,当他们对一个信息或者一个用户做标记时,应用和节点去识别这些标记并且作屏蔽、拒绝路由等处理。这些证书颁发者应该足够中立(达到全球程度的中立),并且有足够的信任担保(比如假如这些机构作恶,人们将可以把他们告上法庭)。
六、审查与监管区块链项目在自我介绍的时候经常用一个词“抗审查”,这可能是有些项目的确是为抗审查而生的,有些可能是觉得抗审查是一个绝对的优势。但在社交网络里面,抗审查的意义是相对的。
抵抗Web2中平台的审查是个绝对的优势,但抵抗法律的审查绝对是劣势。一个不能被法律监管的社交网络注定是失败的。
在P2P的网络中,内容的发布和订阅都是用户自由的行为,但网络也是开放的,网络中的数据依然在监管的范围内,
用户与节点为自己储存于传播的数据负责。与Web2不同的是,网络中没有实际控制者,这是因为网络不容忍权力滥用的空间,但网络并不是要排斥权力的实施,
我们可以让网络变得更容易被监管。比如上述证书的设计,就可以用于标记一些违法账户或违法信息,并且要求应用端和节点拒绝违法信息,如果拒绝实施则同样属于违法行为。虽然开通账户并不需要任何身份证明,还网络不是完全匿名的,IP地址依然可以定位到用户。
七、发现与搜索线上社交网络的其中一个迷人之处是它让人们可以突破空间的限制去认识朋友,在网上,人们会因为兴趣爱好、言论观点走到一起。Web2的产品已经把这些可能性发挥得淋漓尽致,给用户带来了很大的价值。不难发现,P2P网络缺失了这样一个“媒人”的角色,中间没有人去创造一些“偶遇”的机会,也没有人给用户指引去认识新的人,当一个新用户刚刚加入一个P2P网络时,她既没有朋友可以订阅,也没有内容可以浏览,进入了一个与世隔绝的状态。SSB选择坦然接受这个特性,他们认为人们在加入社交网络的时候本来就应该是有其他人带的,所以他们加入SSB的时候也应该已经有朋友,或者他们像走进一个酒吧一个连接到一个Pub,通过研究别人的资料来认识新的朋友。用过的朋友都知道这是很扯的。Web2的产品通过挖掘用户需求给用户带来优质的产品和服务,这部分价值是值得肯定的,只是他们在提供服务的同时侵犯用户的利益,才让他们变成坏人。然而
在Web3社交网络中,我们依然可以在保持通讯和发布的去中心化的同时去容纳中心化的内容聚合和索引。我们把身份账户、订阅/发布、gossip路由看做网络的第一层的话,第二层就是对第一层网络数据的curation(策展)。不同于Web 2的是,这个网络中再也没有用户围墙,在同一个社交网络中,用户可以选择不同的搜索引擎,使用不同的推荐服务,查看不同的推荐榜单,参与不同的激励模型……
DeSNS核心优势
DeSNS vs Facebook, Twitter, Instagram, Reddit……
一、永存的内容P2P的魅力不仅仅在于让文件无法永久删除,更在于让文件永久拥有了可以被访问的入口。在P2P网络中,你可以为一篇文章生成永久链接,不管文章保存在哪里也可以通过同一个链接访问。又或者你给出了一条负面评价,没有人可以删除或者隐藏这个内容,这就是content addressing的强大之处。不难想象,这是一个给予言论足够的重视的网络,你的
一言一行将成为永久的记录,一方面这约束了大家在网上更加为自己的言论负责,一方面可以为个人的信息资产形成永久的存证。
二、永续的社区当人们在P2P网络聚集在一起时,他们对同一个意识上的主题形成了节点上的聚合,是一个紧密gossip的群体。这个意识上的主题是形而上的概念,比如一个论坛应用,专注于同步一系列数据列表的最新状态,这时候这个社区将具有永续性:
社区不能被关闭,成员之间的通讯不依赖中心化节点,历史消息可以自动被恢复。三、无广告由于P2P在协议层已经实现了点对点的信息同步,所以用户在接收信息的过程完全是独立的,自定义的。也就是说,没有人可以控制和修改你的feed信息流,
除了你自己没有人可以决定你下一条信息看什么。这完全减除了现在我们在使用社交网络产品中平台方强制我们看广告的烦恼。
四、超级身份开放和兼容是P2P网络与Web 2.0的Walled Garden最本质的差异,在P2P网络中没有用户围墙,核心的价值锁定在底层协议,上层应用不需要管理用户的身份和数据,用户可以用同一个身份使用不同的应用并且可以实现互操作,因为数据归用户所有,用户可以自由授权应用使用自己的任何数据。由于账户体系的一致,
不同的P2P网络的身份可以相互绑定,其中也包括了区块链的身份,配合签名的使用可以实现链上链下数据的交互。结合内容的永久性,Web 3.0将有可能打造出用户的超级身份,甚至比线下身份更可靠。
结语
Web 3.0 SNS将是一个完全的颠覆,
影响的将是人们参与社交网络活动秩序,甚至是互联网的秩序。这里充满了机会和空间,同时也是一片稚嫩和理想的土地,有太多的基础设施需要被完善,太多的价值需要被诠释和演绎。所幸是区块链、IPFS这样的技术和项目已经慢慢走向主流,Web 3.0 网络的开放和兼容将会翻涌更大的革新浪潮,Web 2.0 公司在竞相抢夺用户时间的局面还能持续多久?
公众号:区块主义
微信:kkkayla (请标明来源)