这个名字是IPFS和ZeroNet的结合,InterPlanetary ZeroNet。

动机

IPFS有哪些利弊:

  • 没有动态交互内容,因此官方的网站仅限于维基备份
  • 内容编址,意味着更好的内容重复利用效率
  • 模块化,层次化

相比零网,简直完美互补。

IPZN改进了什么

零网Hash方式固定,加密方式固定。
IPZN使用multihash,不过公钥加密部分暂时还找不到合适的库,暂时使用nacl。加密方法更加安全,采用EdDSA算法,相比零网的比特币的加密算法更进一步。

最重要的一点是IPZN不局限于一个网络,这点比较类似于像js/java之类的语言,提取各平台的共性。
IPZN也是将P2P网络抽象为两部分,文件系统和节点通讯。
基本上大多数网络都符合这个模型。

零网不能文件去重,网络整体效率降低。
由于IPZN不是实现于特定网络之上,这个不能比较。若是要说基于IPFS的IPZN,这个去重能力分为两部分:

  • IPFS的去重,只限于比对dag对象的hash
  • 插件层次的去重,比对前后两个版本的差异,乃至更复杂的算法。

还是得益于层次化的设计,这点我多次强调过。

零网站点很容易被删除,一旦删除就没了。在IPZN这里是不可能的,哪怕私钥被偷了都没问题,站点一经广播无法收回。

核心原理,元数据链

这个不能称为区块链,区块链着重于实现共识。

零网中有content.json,从格式上说,这个json结构是非常低效的。因此所有元数据都是以messagepack编码,至于为什么不用protobuf,大概是因为懒吧。外层又加一层multicodec,便于后续支持protobuf。

每个元数据标识了一个版本的站点。用户数据也是一个站点,在零网一般是/data/users/yourPubKey

PrevHash指向每个网络中的上一个元数据,在多站点拥有者的情况下,PrevHash通常指向同一公钥。

访问某个版本的站点直接顺着PrevHash往前找就行了。

IPZN Path是为支持多个网络而创造的内容寻址方式,简单来说,就是把几个网络的地址搅合在了一块,虽然看着没啥用,还是很有必要的。

比如某天IPFS挂了,因为同一IPZN Path包含多个网络的地址,直接用Dat部分就行了。

元数据内也包含IPZN Path,这个地址指向所有除了所在网络的同一个元数据。若是不除去,不得有递归hash嘛。

在IPFS访问这个元数据用的地址就是其IPZN Path的IPFS部分。

地址也可以不是字符串,例如IPFS的地址由两部分组成,hash和节点公钥。

事例:私钥被偷

盗窃者为了彻底删除这个站点,只能断了PrevHash,如图。

那么只要有任何一个节点有前一个版本的元数据,然后广播,更多节点就也有了。

出现PrevHash为空的情况直接判定为非法元数据,忽略。攻击失败

这时,如果一开始有备份私钥,根据初始元数据的条件就可以开始使用了。

初始元数据里的条件可以写为脚本,比如,如果私钥A 3个月内不在活跃,私钥B生效。

剖析零网的机制

零网可以视为是文件系统和内容发布功能的组合,从你修改文件,零网更新元数据,然后发布,别的节点等着下载。

那么其中比较重要的部分就是内容发布,虽然说两者底层方面有重合的,但还是分开来更清晰一点。

零网的发布模式可以概述为,“一传十,十传百”,是不是挺形象的。

可能也会有主动更新,就是主动问询其他节点。

在IPFS上怎样实现:

  • 主动内容发布可以通过Pubsub,广播元数据
  • 被动的可以用IPNS,这个就像域名一样,只不过每次发布就是更新域名,查询就是查询域名。

举例的这个机制只适用于内容编址网络。