Py学习  »  区块链

玩转这5大分布式存储平台,Facebook也能在区块链上跑起来!

区块链大本营 • 5 年前 • 342 次点击  

区块链和分布式技术的核心概念是共识算法和智能合约,但这两种技术并不能满足人们当前的需求。例如,你看到过Netflix(美国一家在线影片租赁提供商)、Facebook和区块链手游等类似应用在区块链上跑吗?


原因是,目前缺少一个强大、安全和去中心化的内容存储和分发系统。


基于此,本文详细探讨了Swarm、IPFS、Sia、Storj、MaidSafe这五种主要的分布式存储平台,帮助你了解区块链分布式存储现状。


译者 | 王柯凝

编辑 | 科科

         


区块链和分布式技术的核心概念是共识算法和智能合约:共识算法是作为一个整体的网络如何做出一个统一的决策;而智能合约则是实现去中心化应用程序的一个工具。


然而,共识算法和智能合约并不能满足人们当前的实际应用需求。如果仅仅依赖于以上这两个技术,我们就不能像在 Netflix上那样享受喜欢的电影或电视剧,也不会像在 Facebook 上那样存储或分享令人难忘的瞬间;更不会像玩Dota游戏那样在区块链上玩手游,等等。


因此,我们缺少的是一个强大、安全以及去中心化的内容存储和分发系统,服务于今天的应用程序。


现在,我们对一些当前最为流行的5种分布式存储平台进行综合性探索。



01

Swarm


             


状态:live


Swarm是一个分布式存储平台和内容分发服务。参与者能够有效地汇集储存和带宽资源,以便向网络所有的参与者提供这些服务,同时,作为回报,他们也会得到一部分以太坊奖励。


目标


Swarm平台旨在为去中心化应用开发者提供一套基础设施服务,如消息传递、数据流、点对点计数、可变资源更新、存储保险、支付渠道和数据库服务等。


从终端用户的角度来看,除了上传操作不是发生在特定服务器上外,Swarm与互联网并没有多少不同。它内置了一个激励系统,通过点对点计数,允许用户为交易资源进行支付,为用户提供了一种点对点存储和服务方案。Swarm具有零停机、容错、抗审查和独立等特点,它与以太坊的Devp2p 多协议网络层以及用于域名解析的以太坊区块链(使用ENS)整合为一个整体,服务于支付,保障了内容的可用性。


注意: 为了解析 ENS 的名称,必须将Swarm节点连接到一个以太坊区块链上,比如mainnet、testnet等。


概述


Swarm为新的去中心化网络提供基础层设施,它是一个点对点网络,向对方提供资源的方式提供分布式数字服务,比如存储、消息转发、支付处理等。类似于以太坊上的测试网络Ropsten,以太坊基金会也运行了一个Swarm测试网络来测试这些功能。不管是在服务器、桌面、笔记本,还是在移动设备上,每个人都可以运行 Swarm 客户端节点,然后加入网络。


此外,Swarm 平台是一个 Devp2p 网络节点的集合,每个节点都可以在同一个网络ID上运行 bzz 协议套件。Swarm节点可以连接到一个(或几个)用于域名分辨率的以太坊区块链上,还可以连接到一个用于带宽和存储补偿的以太坊区块链上。在同一个网络ID上运行的节点,会连接到相同的支付区块链上。通过Swarm的网络ID,用户可以识别任何一个Swarm网络,另外,该网络ID可以是任意整数。


Swarm允许上传(upload)和消失(disappear),这就意味着任何节点都可以将内容上传到 Swarm上,然后被允许离线。由于节点之间可以连续传递可用数据,只要节点不离线或不可用,内容仍然可以访问。


公共网关


Swarm提供了一个本地的 HTTP 代理 API,使用去中心化应用或命令行工具,用户就可以与 Swarm 进行交互。像发送消息等模块,就可以通过RPC-JSON API来实现。同时,Testnet 上的基础服务器为用户提供了公共网关,用户可以方便地使用演示功能,并进行免费访问。因此,在不运行自己的节点的情况下,用户可以很方便的使用Swarm平台。


Swarm公共网关的详细信息请查看链接:https: / / Swarm-gateways.net。


上传及下载数据


上传,即向本地 Swarm 节点"上传"内容,本地Swarm 节点与网络中的其他节点再"同步",产生数据块。下载,即下载在本地 Swarm 节点与网络中的其他节点组成的数据块到本地,再在本地对这些数据节点重组。


内容解析器: ENS(Ethereum Name Service)


注意: 为了成功解析 ENS 名称,Swarm 节点必须连接到一个以太坊区块链上,比如Mainnet、Testnet等。


ENS是Swarm用来允许引用一个可读名称内容的一个系统,如"theswarm.eth"。它和 DNS 系统一样,Swarm将可读的名称转换成机器标识符——在这种情况下,标识符指向 Swarm 哈希值。用户先注册一个名称,并将其设置为解析站点根源清单的内容散列值,然后,就可以通过URL(bzz: // theswarm.eth / ) 访问网站。


目前的主流浏览器(如 Chrome、 Firefox 或 Safari )并不支持 bzz 方案。如果想在浏览器中使用 bzz 方案,则必须使用 HTTP 网关,如 https: / / swarm-gateways.net / bzz: / theswarm.eth /,亦或者使用支持 bzz 方案的浏览器,如 Mist。


可变资源更新


可变资源更新(Mutable Resource Updates )是 Swarm POC3上另一项实验性的新功能,该功能还处于开发阶段。


如果我们对 Swarm 中的数据进行更改,当上传数据时,数据会以一种完全不可预测的方式改变。Swarm使用可变资源更新为用户提供了一种内置方案,并且对更改的数据保持一个持久的标识符。


为了保持与更改数据相同的指针,常用的方法就是使用ENS。但是,ENS 是一个链上功能,它在以下几个方面受到了限制:


  • 每更新 ENS 解析器一次,都会耗费一定的成本。

  • 更改数据的速度,不可能会比开采新区块速度更快。

  • 正确的 ENS 分辨率总是需要和块环链同步。


可变资源更新允许有一个非变量标识符来更改数据,而无需使用ENS 。像常规的 Swarm 对象一样,用户在创建资源时会获得密钥(MRU manifestkey),用户使用该密钥引用可变资源。当用户对资源的数据进行更新时,密钥MRU manifest key 将指向新的数据。


如果同时使用可变资源更新与ENS 解析合约,则只需要一个初始事务来注册 MRU manifestkey,而这个密钥则将解析到资源的最新版本(更新资源并不会改变密钥)。


支持可变资源更新有3种不同的方式: HTTP API、Golang API 和 Swarm CLI。详情请查看链接:

https://swarm-guide.readthedocs.io/en/latest/usage.html#creating-a-mutable-resource


注意事项:

1.只有创建资源的私钥(地址)才能对其进行更新。


2.创建可变资源时,提供的参数一定要是预期的更新频率frequency,表示更新资源的频率。尽管我们也能使用其他速率更新资源,但这样会减缓检索资源的过程。


Swarm加密


Swarm POC 0.3中引入了对称加密技术,可以随时使用 swarm up上传命令,该加密机制的目的是保护用户的信息,在处理任何Swarm节点时都无法读取分块数据。


Swarm 使用计数器模式加密技术对内容进行加密和解密。当用户向 Swarm 上传内容时,上传的数据会被分成4kb个块。这些块都将被编码为一个单独、随机生成的加密密钥。该加密过程发生在本地 Swarm 节点上,未加密的数据不会与其他节点共享。单个块(和整个内容)的引用将是编码数据的哈希值和解密密钥的组合。这就意味着该引用比标准的非加密 Swarm 引用(64字节而不是32字节)的字节要长。


当用户的节点与其他节点的加密块同步时,它不会与其他节点共享完整的引用(或解密密钥)。这就意味着其他节点将无法访问原始数据,另外,它们也将无法检测同步块是否加密。


当用户的数据被检索时,它只会在本地 Swarm 节点上解密。在整个检索过程中,数据块以加密形式遍历整个网络,所有的参与者都无法对其进行解密。这些数据只能在下载使用的 Swarm 节点上进行解密和重组。


注意事项:

1.Swarm 支持加密。Swarm并不支持上传未加密的敏感数据和私有数据,这些数据一旦上传就没有办法撤销,用户应该避免上传非法、有争议或不道德的内容。


2.Swarm使用--encrypt支持加密和非加密swarm up命令。后续,这种方式可能会改变。


3.加密功能是非确定性的(由于每次上传请求都会产生随机密钥) ,而且 API 的使用者不应依赖结果具有幂等性,因此,向Swarm上两次都上传相同的内容,也会有不同的引用。


消息传递协议——PSS


PSS (Postal Service over Swarm)是 Swarm 上的一种消息传递协议,具有很强的隐私性。我们在这里只对PSS API的基本概念和特点进行描述,更为详细的内容请查看链接:

https://swarm-guide.readthedocs.io/en/latest/apireference.rst#PSS。


PSS 仍然是一个实验性性的功能,目前正处于开发阶段。


基础知识


用户可以使用 PSS 协议向 Swarm 网络中的任何一个节点发送消息,消息的路由方式与对块的检索请求相同。与块哈希引用不同的是,PSS 消息在覆盖的地址空间中并不是指定消息有效负载,而是指定一个目标。如果该目标是一个完整的覆盖地址或者邻居,就可以将其描述为一个特定的节点。消息通过 DevP2P 对等连接使用forwarding kademlia 算法进行转发,forwarding kademlia 算法则通过使用 kademlia 路由的中继节点之间的半永久点对点 TCP 连接传递消息。在目标邻居中,消息可随意传播。


由于 PSS 消息是加密的,最终的接收者就是能够解密该消息的人。其加密方法可以使用非对称或对称加密技术。


消息有效负载由接收节点发送到消息处理程序,然后通过 API 发送给订阅者。


注意: PSS 并不能保证消息订购(最佳传递)和消息传递(如:离线节点的消息将不会被缓存和重播)。


隐私功能


正是得益于端对端加密技术,PSS 也为私人通信提供了服务。


PSS 使用了 forwarding kademlia算法,对发送者进行匿名化处理。


使用部分寻址,PSS 为接收者匿名性提供了一定的可调范围:目标邻居越多,显示的预期收件人覆盖地址的前缀越小,就越难识别真正的接收者;另一方面,由于dark routing效率低下,在匿名性、消息传递延迟、带宽及成本之间需要某种均衡,而这个均衡则由应用程序自行做决策。


如果使用 Handshakes 模块,PSS 则提供前向保密。更多详细信息请参照链接:

https://swarm-guide.readthedocs.io/en/latest/pss.html#usage


Swarm的架构


关于Swarm的架构,更多信息请查阅链接:

https://swarm-guide.readthedocs.io/en/latest/architecture.html


去中心化应用实例


Swarm去中心化应用实例的详细内容请参照:

https://swarm-gateways.net/bzz://swarmapps.eth


注意事项:

1.敏感内容请加密!对于加密过的内容,在上传过程中是"受保护的",即只有那些知道根块的引用,才能访问该加密内容——该引用即为文件的Swarm哈希值和解密密钥。在 ENS 或 MRU 上发布这个引用需要一个额外的加密步骤,用户只要使用加密,就会得到保护。没有明确受到保护的内容,Swarm会删除,这是因为Swarm中限制了存储容量,Swarm最终会将这些节点转到垃圾箱内。


2.在存储保护措施实现之前,Testnet 网络并不能保证一直存储上传的内容。所有参与的节点都被视为没有任何义务的自愿服务,以其意愿删除内容。因此,激励系统运行之前,在任何情况下,用户都不应将 Swarm 作为一个安全的存储介质。


3.Swarm 是一个持久性数据结构,因此在 Swarm 中没有删除或移除操作这一概念。这是因为用户将内容传播到Swarm节点,而这些节点通过某种激励,服务于这些内容。



02

IPFS


状态:live(在激励制度中,"Filecoin"的状态不是 live)


IPFS (星际文件系统)是一个点对点文件共享系统,旨在从根本上改变信息在全球范围内的传播方式,有点类似于 Swarm。


IPFS 由通信协议和分布式系统中的几个创新部分组成,这些通信协议和分布式系统被组合到一起,形成了一个独一无二的文件系统。


据说,IPFS 已经取代了 HTTP 协议。我们现在就来看看:今天的网络是如何运行的!


简单来说,互联网是一系列描述数据如何在网络中运行的协议的集合。开发人员使用这些协议,并在这个基础架构之上构建应用程序。作为网络主要的协议之一—— HTTP 协议,由蒂姆•伯纳斯-李(Tim Berners-Lee)于1991年创建。


             

OSI模型


HTTP 是一个请求-响应协议:客户端(web浏览器)向外部服务器发送请求,服务器返回一个响应消息(Google 主做出相应)。举个例子来说,在浏览器中输入 Google.com ,它会被转化成谷歌服务器的 IP 地址,最后,这个服务器启动请求-响应循环。


             

互联网的运行过程


HTTP协议的缺陷


我们来看个例子。假设你们在一个演讲厅里,教授让你们访问一个指定网站。在座的每个人都向网站发出请求,并得到响应。这就意味着网站要将同样的数据单独发送给房间里的每个学生。如果在座有100个学生,那就有100个请求和100个响应——很显然,效率并不高。理想情况下,学生可以利用他们的物理位置更有效的接收自己需要的信息。


如果通信线路出现问题,客户端无法与服务器连接, HTTP 也会带来一个问题,比如网络服务提供商发生故障、某个国家正在屏蔽某些内容、或者网站删除某些内容等,HTTP 网络的任何地方都存在这种断连。


基于位置的 HTTP 地址模型鼓励中心化。我们很容易让所有的数据信任应用程序,但是这样一来就浪费了网络上的大部分数据,供应商也得对这些数据负有巨大的责任。


HTTP协议有助于提高页面的加载速度,但并不适合传输较大的数据(如:音频和视频文件)。HTTP协议的这一缺陷就催生了 Napster (音乐共享软件)和 BitTorrent (电影视频共享软件)等系统的诞生。


直到2018年,随着高清视频流和大数据的普及,数据也越来越多,我们必须开发功能更为强大的计算机来处理这些数据。云计算技术使这一转变成为可能,可惜的是,处理这些数据的基础设计基本上没有什么进展。


解决方案


最初,Juan Benet创建了一个 P2P Swarm系统——一种经过良好测试网络技术的结合体,如 DHT、 Git 版本控制系统和 Bittorrent,允许 IPFS 对象进行交换。所有的 IPFS 对象形成了一个加密身份验证数据结构(称为Merkle DAG ),利用这种数据结构,我们就可以构建很多其他的数据结构。换句话来说:


“IPFS是一个分布式文件系统,它试图以同一个的文件系统将所有的计算设备连接起来。在某些方面,这类似于Web的原始目标,但是,IPFS实际上更类似于一个的Bittorrent集群,并在内部交换git对象。IPFS可以成为互联网的一个新的主要子系统。如果构建正确,它就可以补充甚至替代HTTP。感觉像在吹牛?没错,它就是这么NB!”


IPFS本质上是一个版本化的文件系统,它可以接收文件,并对其进行管理和存储,随着时间的推移,它还能跟踪版本变化。IPFS也记录了这些文件是如何在网络中进行传输的,所以,它也是一个分布式文件系统。


IPFS中的数据和内容在网络上的传输规则与 Bittorrent 极为相似。文件系统层也提供了非常有趣的属性,比如:


  • 完全分布式的网站。

  • 没有源服务器的网站。

  • 可以完全在客户端浏览器上运行的网站。

  • 网站不必和任何服务器有联系。


分布式哈希表


哈希表是一种数据结构,它将信息存储为键/值对。在分布式哈希表(DHT)中,数据在传输过程中会得到有效的协调,以便用户在节点间进行有效的访问和查找。


分布式哈希表的优势在于去中心化、容错和可扩展性。这些节点并不需要某个中心进行协调,即使节点出现故障或离线,系统也可以正常的运行,除此之外,分布式哈希表还可以进行扩展,供数百万个节点使用。基于这些特性,Swarm比客户端-服务器结构更具有弹性。


块的交换


凭借一个新颖的数据交换协议,当前较为流行的文件共享系统 Bittorrent 成功地协调了数百万节点之间的数据传输,但是它仅限于种子生态系统。IPFS 实现了 BitSwap 协议,是 Filecoin 的基础: 基于 IPFS 的 p2p 存储。


Merkle DAG


Merkle DAG 融合了 Merkle 树和有向无环图(DAG)。Merkle 树用来验证 p2p 网络上数据的正确性,即没有被损坏、没有被更改。验证方式则是使用加密哈希函数组织数据块——向这个哈希加密函数中输入一个与该输入相对应的哈希串(由数字和字母组成),并进行计算。给定一个输入哈希值,很容易计算输出,反之则不行。


单个数据块称为"叶节点",它被散列成“非叶节点”。 然后可以将这些非叶节点进行组合和散列,直到所有数据块都可以由单个根散列表示。 下面是一个更简单的概念化方法:


             


树和马尔可夫树


DAG是一种对没有周期的信息进行拓扑序列建模的方法,一个简单例子就是家族树。 Merkle DAG本质上是一种数据结构,其中散列用于引用DAG中的数据块和对象。它有几个功能:IPFS上的所有内容都可以唯一标识,因为每个数据块都有唯一的散列。另外,数据是防篡改的,因为改变数据会改变散列,如下所示:


             


版本控制系统


Merkle DAG的另一个优点是,它允许创建一个分布式版本控制系统(VCS)。最典型的例子就是GitHub,开发人员能够轻松地在GitHub上进行多人项目协作。GitHub存储文件的各种版本就是使用Merkle DAG——允许用户自主复制和编辑一个文件的多个版本,然后存储这些版本,最后合并。


对于数据对象,IPFS使用了一个类似的模型:只要是与原始数据对应的对象,用户可以访问任何一个新版本,也可以检索整个文件历史。由于数据块在网络中可以无限期的存储,那么对象就可以永久保存。


此外,IPFS并不依赖于网络协议。数据可以散布在覆盖网络上,在这里,覆盖网络是一种建立在另一个网络上的网络,这是审查网络的核心。IPFS可以对抗当前较为流行的网络审查,对促进言论自由很有效果,但是,我们也应该认识到滥用IPFS的一些不良行为。


自证明文件系统


IPFS最后一个重要组成部分是:自证明文件系统(SFS),它是一个分布式文件系统,不需要拥有数据交换这一特殊权限。“自证明”就是客户端是通过文件名进行认证(这是由服务器来签名),这样一来,用户就可以安全地访问本地存储的远程内容。


IPFS基于 SFS 创建了InterPlanetary命名系统(IPNS)。网络上的每个节点都有一套公钥,私钥和节点ID是公共密钥的哈希值。节点可以使用私钥用户发布的任何数据对象进行签名,该数据对象的真实性则可使用发送者的公钥进行验证。


我们来总结下:

  • 使用分布式哈希表,不需要中心服务器的协调,节点就可以存储和共享数据。

  • IPNS 允许使用公钥密码对交换数据进行预先验证。

  • Merkle DAG可以唯一标识、防篡改和永久存储数据。


注意事项:

1.敏感内容请使用加密软件!对于加密内容来说,上传的数据是“受到保护的”,也就是说,只有知道根哈希引用的用户,才能访问这些内容,根哈希引用即是文件的根散列和解密秘钥。


2. IPFS 是一个永久性数据结构,因此 IPFS 中没有删除 / 移除操作这一概念。


3.IPFS并不能保证上传内容在网络上是持续存在的。所有参与的节点都被视为没有任何义务的自愿服务,以其意愿对内容进行删除。因此,在激励系统运行之前,用户在任何情况下都不应将 IPFS 作为安全存储介质。



03

Sia


             


状态:live


很多租客都想使用更便宜、更快速的数据中心存储平台,作为一个去中心化的云存储平台,SIA的诞生则为他们提供了这一便利,这些数据中心向任何人开放,而不是由单一的权威中心管理。Siacoin 基于一个独立的 Sia 区块链,另外,租赁者和供应商之间也能达成了某种协议。


文件在上传之前被分割


在文件上传之前,Sia 软件将文件分割成30个片段,然后将每个片段分发给散布在全世界的30个不同的主机。这种分发保证了每个片段都分发给了全世界的主机。


Sia使用 Reed-Solomon erasure 编码技术来创建文件片段:以某种冗余的方式对文件进行分割,只要使用这30个片段中的10个片段,就可以完全恢复用户文件。


也就是说,即使其中20个主机离线,Sia用户仍然能够正确的下载文件。


每个文件片段都要被加密


Sia中的每个文件片段都是经过加密的,这就保证了主机只存储用户数据的加密片段。


这就不同于传统的云存储提供商(比如亚马逊),他们不会默认对用户数据进行加密。 Sia主机只存储加密文件片段,而不存储整个文件,因此,Sia要比现有的解决方案更安全。


使用智能合约将文件传输到主机


使用 Sia 区块链,租户与主机之间有一个智能合约,规定了租户和主机之间的价格、正常运行时间承诺等。


文件合约是一种智能合约,它允许我们创建存储在Sia区块链上的加密服务级协议(SLA)。


由于文件合约是网络自动执行的,所以 Sia 不需要中间人或可信赖的第三方。


租户和主机使用 Siacoin 付费

租户和主机都使用 Siacoin进行付费,这是一种建立在 Sia 区块链上的加密货币。租户使用 Siacoin 从主机上购买存储容量,而主机将 Siacoin 作为抵押物存入每个文件合约中。


租户和主机之间使用支付渠道技术进行微支付,这有点像比特币的闪电网络。并且,支付过程发生在链外,大大提高了网络的效率和可伸缩性。


由于主机需要为每一个存储合约支付一定的抵押品,所以他们特别不希望主机离线。


用户每次和主机供应商签订 Sia 合约时,都需要支付一定的费用,而供应商则必须为租户提供存款证明(确保其信用良好)。合约签订以后,软件会收取3.9% 的费用,并支付给 Siafunds 持有人,开发该协议的公司 Nebulous Labs 持有约90% 的 Siafunds。


这当然是一个有趣的长期供资模式,也是现在很流行的“一次性”ICO 模式替代品。但是,这一模式很可能会为该系统带来结构性成本,使其成本比竞争对手更加昂贵。这样一来,就可能会导致文件存储市场的竞争更加激烈,价格大幅度下降。一旦部署了几个不同的分散式云存储平台,这些平台之间就会存在竞争。Sia自己支撑了3.9% 的费用,而在其他大多数合约中,这项费用基本上由用户支付。并且,其他协议没有这种结构性成本,长期来说,价格可能更具有优势。


随着时间的推移,合约不断更新


租户在文件合约中需要预先支付存储费用,并留出一定数量的Siacoin,用来支付数据存储和传输,文件合约的有效期为90天。


当合约到期后,Sia会自动续签合约,如果没有续签,Sia会将未使用的Siacoin退给租户。


当单个主机离线时,Sia会自动将数据迁移到新的主机上,这一过程称为文件修复。


主机提交存储证明


合约到期后,主机就会向区块链提供一个存储证明。如果区块链上存在存储证明,主机就会收到费用,如果没有,主机将会面临损耗。


存储证明使用了 Merkle 树技术。 Merkle 树能够证明这一小部分数据是某个大文件的一部分。不管文件有多大,这些证明都很小,并且能够永久性的存储在区块链上。


Sia也有些缺点。就目前来说,用户必须购买比特币,然后用比特币购买Siacoins,再将 Siacoins 发送到 Sia 客户端,这个时候,用户才可以使用该网络。对于那些不使用加密货币的用户来说,这是一个最主要的障碍,同时也给企业用户带来了一个问题——目前,考虑到监管和金融风险,大多数企业都不会持有或者交易加密货币。令人感到遗憾的是。到目前为止,Sia团队并没有优先考虑这一问题。


注意事项:


1.与 Swarm 和 IPFS 不同,Sia 是一个分布式云存储系统。Sia并不致力于创建一个可替代http的基础设施,而是旨在为云存储创建一个分布式、自续和廉价的市场空间。


2.与 Swarm 和 IPFS 不同,Sia对存储用户和供应商都有一套完整的激励系统。因此,不管您是作为租户还是供应商,都能够对数据有更好的控制权。您完全可以保证上传到网络上的数据能够被存储,且不会丢失(如 Swarm 和 IPFS 中的数据)。 此外,您也可以从网络中删除内容,并且保证完全删除!



04

Storj


             


状态:live


Storj旨在构建一个抗审查、抗监控或不会停机的云存储平台,是第一个去中心化、端到端的加密云存储平台之一。


Storj由一系列相互连接的部件共同组成了一个统一的系统。每个用户与这个系统的各个部分进行交互体验,导致了他们对 Storj到底是什么会有各自不同的认识:对于一个家庭用户来说,在共享存储空间的时候,并不需要拥有任何网桥或协议知识;而对于开发者来说,在使用Storj API时,也不需要知道家庭用户的任何私人信息。说了这么多,Storj到底是个什么东西?实际上,它是一个协议,是一套软件,是那些设计、构建和使用它的人。


Storj协议


Storj的核心技术是一个可执行的、点对点存储合约,即两个人(或计算机)在不认识对方的情况下,同意使用定量的存储来换取金钱。我们称计算机销售空间为"农场主",计算机购买空间为"租户"。农场主和租户进行会面、就某个协议进行谈判,最后,租户将数据上传到农场主处存储。


合约&审核


合约有一个固定的有效期,在有效期内,租户会定期检查农场主是否还存储着数据。而农场主会回应一个加密证明,告诉租户他们还存储着数据。最后,租户向农场主支付他收到并核实的每一个加密证明。这一“质疑—证明—付款”的过程称为"审计",即租户审查农场主的存储。待合约有效期到期,农场主和租户就可以重新就协议进行谈判,或者结束这一合约。


虽然核心技术支持任何支付手段,但这其中也有几种较为理想的支付方式。ACH 或 SEPA等传统支付系统并不适合在每次审计时支付,因为这些支付手段速度很慢、很难验证、费用昂贵。Storj 协议的理想支付方式是加密货币的微支付通道,这种微支付允许非常小的支付,可以立即进行审查,并且费用很低,这样一来,支付和审计可以密切的进行配合。


Storj强制执行遵循一个很简单的模式: 如果农场主没有进行审计,即离线状态,或者不能证明仍然存储着数据,那么租户就没有必要付钱。毕竟,租户没有享受付费服务。同样的,如果租户离线、或者没有按时付款,农场主就可以删除数据,再与别人签订新的合约。只要双方都遵循合约条款,就会享受到各自应有的权益。


将付款直接与审计配对,可以最大限度地减少了与陌生人打交道的风险。如果文件在合约期内丢失,租户只需要支付实际服务的费用,审计就保证了这一点。这时候,租户就需要重新找一个新的农场主,但是并不需要支付大量的费用。如果合约期内租户消失或停止向农场主付款,农场主已经收到了以前所有服务的费用,在这个时候,农场主仅仅是少了了一笔最新的审计费用和找新租户购买这个存储空间的时间而已。


Storj网络


为了使租户和农场主相互见面,合约和谈判系统就构建在一个分布式哈希表(DHT)上。DHT 本质上是自发组织一堆节点到一个有用的网络上的一种方式。在这里,我们使用的是 Kademlia 改进算法。


与其让某个中央服务器对每个节点进行注册,协调所有的合约,还不如让农场主和租户将他们的合约分发给广大节点组。如果对这合约感兴趣,节点就很容联系到提供合约的人。通过这种方式,农场主和租户可以找到大量潜在的合作伙伴,还能够在这个无许可市场上购买或出售存储空间。


为了寻找合作伙伴,节点可以签署一个不完整的合约,将其发布到网络上。网络上的其他节点也可以订阅某些他们感兴趣的合约类型,并对这些发布的报价作出回应,这个模型就是“发布—订阅”。通过这种方式,节点可以很容易找到其感兴趣的合约,并将合约转发给他们认为可能感兴趣的其他节点。


最后,合约和网络就形成了我们所说的 Storj 协议。它描述了网络上节点的表现,即:节点之间如何进行通信、如何协商和执行合约以及在分布式系统上购买和销售存储空间所需的一切。任何人都可以用任何他们喜欢的方式来实现 Storj 协议。


Storj工具集


协议包含了安全制作存储所需的一切工具,但是也缺少了很多东西。为了对租户有用,系统需要可用性、带宽以及任何其他服务级协议承诺。而农场主需要管理功能,以避免使用过多的资源和自动化功能部署到多个主机上。我们并不是要将所有这些特性都放在核心协议中,而是选择在一个额外的软件层中解决这一问题。为了让这个网络变得有用和易于交互,Storj 公司发布了两个工具:Storj Share 和 Bridge。


StorjShare


StorjShare 是农场客户端,允许用户在任何机器上轻松的构建和运行一个农场。Storjshare 为用户提供了命令行界面(CLI) ,还可以实现自动化。不仅如此,它还允许用户设置参数,如共享的存储空间、存储位置和支付地址。另外,它还可以处理合约谈判、审计响应和所有其他网络通信。


Storj还发布了一个 StorjShare 图形用户界面(GUI) ,便于非技术用户使用。任何人都可以下载 StorjShare GUI,在里边填写一些字段,加入网络。StorjShare GUI是命令行界面的一个包装,在初始设置之后,用户很少需要与 StorjShare GUI 交互。他们要做的就是设置、最小化,然后让它在后台运行。


如果用户参与到数据收集中,StorjShare 也将收集系统勘测数据。这些数据可能包括硬盘容量、使用状况以及网络连接质量等信息。StorjShare将勘测数据送到Storj,Storj 开发者就可以用这些数据对网络和软件进行改进。在不久的将来,使用StorjShare ,人们甚至可以选择特殊的服务和项目。


Bridge


为了帮助租户有效的使用网络,Storj 还创建了 Bridge。将 Bridge 部署到生产服务器上,来处理合约谈判、审计、支付、可用性及其他一些需求。通过使用应用程序编程接口(API)和客户端扩展和存储资源,Bridge 公开了这些服务。而客户端可以集成到其他应用程序中,这样一来,无需成为网络的一部分,任何应用程序都可以使用 Bridge 服务器,存储 Storj 网络上的数据。


就像它的名字那样,Bridge 就是一座通向去中心化 Storj 网络的中心桥梁。就像与任何其他对象存储交互一样,它允许传统应用程序与 Storj 网络进行交互。它提炼了所有 p2p 通信和存储协议谈判的复杂性,以推动和拉动请求。然而,与大多数对象存储不同的是,Bridge 并不会直接存在对象里,而是引用对象。它将指针存储到分布式网络上对象的位置,并审计这些对象所需的信息。理想情况下,数据并不会通过Bridge进行传输,而是直接传输给网络上的农场主。


Bridge客户端使客户更加高效的使用网络。文件在进入网络时进行加密,保护了租户的隐私和安全。为了确保可用性,它会破坏文件,使用擦除编码,并将碎片分散到多个农场主头上。然后,客户端与 Bridge 进行通信,管理网络上每个分片位置,并帮助用户在本地管理他们的加密密钥。Bridge 客户端的初始实现是一个 Node.js 包,后续,它致力于使用其他多种语言实现。


Storj API


Storj的核心服务是一个对象存储,类似于 Amazon S3。这个对象存储由一组公共Bridge节点管理。基础设施用来洽谈合约、管理交易及审计工作等等。用户并不需要知道自己使用的是分布式网络,就可以通过Bridge客户端与Bridge交互。这个 API 是为可用性设计的,因此,所有复杂的事情都可以在幕后处理,以提供一个平滑、可扩展的开发体验。


Bridge根据与农场主的历史交流做出决策。Storj 使用它的性能数据、自我报告勘测数据,以便在网络中智能地分发数据。另外,Storj 也优化了正常运行时间和快速检索。


Bridge客户端和Storj 应用也有账户管理功能。另外,图形用户界面也有利于用户体验。Storj 认为,大部分开发者都忽视了用户体验(UX),在设计产品时,他们就考虑到了简单性和可用性。Storj 旨在为用户提供一个单一优雅的用户体验,而不是提供普通的云计算和存储服务。


Storj使用 Storj API 想为这些开发者创建一个理想的工具:他们更在乎代码质量和快速迭代,为小型团队、快速扩展的产品和单个开发人员提供工具和支持。Storj希望构建一个对象存储平台,以便开发者可以集中精力开发喜欢的项目。



05

MaidSafe



状态:live


SAFE网络是一个用于数据存储和通信的自动化分布式网络,它为每个人提供安全访问(SAFE)。储存在SAFE网络上的数据具有极高的高可用性、耐用性、隐私性和安全性。SAFE网络可以进行有效地扩展,并且,随着网络的扩展,存储在网络中的数据的安全性也随之增加。


为什么要使用SAFE网络?


现有的网络是基于服务器-客户端,它将数据的所有权交给操作服务器的人,而不是数据创建者。操作者可以限制、修改、删除或销售该数据,而不需要依赖于数据创建者。由于普通网络难以接受和提供有利于数据创建者的协议,便催生了SAFE网络的诞生。


客户端存储在SAFE网络上的数据使用强大的默认加密机制进行保护,并且可以灵活的控制访问权限。


在SAFE网络上进行检索数据的客户端,也会受到安全路由和地址系统的保护。


默认的加密机制保护了客户端的安全,包括内置端对端加密和安全身份验证。


该网络由一组独立运行的节点(称为vaults)组成,用于验证、存储和传输数据。通过为网络提供光盘空间和带宽,Vault 运营商保留了网络数据和网络性能,它可以在任何时候加入或离开网络,而不会影响网络上数据的安全性。


SAFE网络将网络通证Safecoin 分发给valt运营商,运营商用这些通证购买网络存储空间,供自己使用。这就保护了valt运营商免遭入侵。


该网络使用 SHA3-256标识符,并在这些标识符之间使用 XOR 地址距离,在全球范围内分发所有的数据和流量。


SAFE网络盖上了现有的大部分网络基础设施,包括地址、域名系统、传输层安全、分组路由、http web 服务器和 imap 邮件服务器等服器软件、oauth 和 openid等认证层。这些基础设施都已经被默认安全模块取代,保证了网络能够安全运行。


在现有网络基础设施上运行的SAFE网络取代了网络的OSI 3到7层。


             


客户端可以在SAFE网络上上传和下载数据。下面将介绍这些标识符是如何运行的。


资源标识符


想要从SAFE网络中下载数据,客户端需要一个能够将SAFE资源运算符解释为安全网络端点的软件,这就像浏览器如何将http url地址转换为服务器端点一样。下载数据并不需要特殊的权限,只需要定位和解释网络数据即可。


资源作为内容可寻址资源存储在网络上,这些资源的标识符是资源内容的 SHA3-256 哈希值,用于从网络中检索资源(从而与 IP 地址相似) ,允许客户端指定网络的哪一部分可以服务于他们的请求。


256位资源标识符可以使用内置的SAFE DNS,例如safe: //www.userx/video.mp4。网络使用能够解释 SAFE DNS 记录的软件,将该标识转换为256位标识符。


自加密


SAFE网络上的资源上限为1MB。用户将大于1MB的文件上传到网络,网络会自动将数据分割为1MB的数据块,然后分发到网络上。即,网络上的文件由几个部分组成:一个1MB的数据块和存储文件每一个部分的datamap。网络将 datamap 视为另一个数据块。


客户端保存 datamap 资源标识符的记录。尽管整个文件分散在很多单个资源上,我们也可以通过检索单个资源(例如 datamap) ,实现检索整个文件。这样一来,任何资源都可以用单个资源标识符处理。


datamap还可以作为指定块的加密密钥,指定块被加密后,valts就不能读取单个块获取初始文的信息。这就是所谓的自加密。


此外,在使用内置的加密功能上传之前,客户端可以对该文件进行加密。它使用了一个用户与网络进行身份验证的特殊的安全密钥。这就意味着解密文件的密钥永远不会离开客户端,也永远不会暴露在网络中,使数据更加安全的存储在网上。即便这些数据可以访问datamap,也无法被网络上的任何vault解密。


使用自加密对文件进行分割的好处如下:

  • 块本身是没用的,所以所有的块都是可替换的,且对网络有同等的价值。

  • 用于文件的块可以从客户端上并行下载,提高性能。

  • 块具有唯一且分布广泛的名称,因此不容易相互关联。

  • 当单个vault离线时,块的广泛分布大大减少了数据丢失的可能性。

  • 基于内容的黑名单是不可能存在的


不可变数据


资源标识符由该资源的内容决定,也就是说,一个资源的两个相同副本将有相同的标识符(如手机和电脑上保存的相同的照片)。 这带来了一些好处:

  • 资源标识符具有通用性、唯一性和永久性(这和当前网络 url不同)

  • 资源无法在网络上复制,提高了存储效率。

  • 资源的缓存规则极其简单、效率很高。

  • 相对于加密密钥来说,加密资源唯一。因此,这些加密资源不能通过存储他们的vault进行加密。


网络遍历


当客户端连接到网络时,网络会为其分配一个会话标识符。会话标识符确定哪个vault是其进入网络的入口点。


当客户端请求一个资源时,请求被发送到入口点vault,然后通过网络上的其他几个vault进行路由,到达存储所要请求的数据的vault。最后,数据传回客户端。


这种路由机制通过最近的 XOR 距离逐步跨越一个256位的命名空间。


请求的资源有一个唯一256位标识符,这个标识符由自加密确定。作为客户端入口点的 vault ,也有一个唯一256位标识符(和所有的vault一样)。


块标识符与带有入口点vault标识符进行XOR运算。其结果就是块和vault之间的XOR 距离。


如果一个邻居vault标识符与该块的 XOR 距离较小,则该请求将传递给这个邻居vault。


持续遍历下去,直到没有vault和块有较近的XOR距离。


该块将被存储在与块标识符最接近的vault中(用 XOR 距离测量)。


存储该块的vault检查是否有请求的块的副本,并按照请求路径返回响应。


这就形成了一个请求链,每个vault只知道距离最近的链节点中的详细信息。原始请求和存储数据块的vault被分隔开,以使请求匿名化。


当存储块时,也会进行同样的网络遍历。当块通过入口点vault进入网络时,直到块到达存储块最近的vault时才会继续进行传递。


路径上的节点可以缓存数据块。如果稍后有另外一个请求,可能就会经过不同的路径,以便更快的做出响应,而不需要将请求延伸到最终存储vault。


消息传递


电子邮件和即时通讯是当今互联网上最为常见的应用。SAFE网络代替了imap/smtp/xmpp服务器,实现了消息传递。


像任何网络资源一样,消息也可以以任何方式存储在网络上。为了保证消息的私有性,在发送之前可对其进行加密。同样的,消息之间的通讯链接在网络上也可以使用资源表示,这些资源的集合构成了信息安全传递平台的基础。


最一个步骤就是:在收到消息后,通知收件人。


在网络上,通常会在用户的收件箱中添加一条消息,以便提醒用户有新消息。收件箱只是一个消息列表,这个列表可以作为网络上的一个资源。 然而,在SAFE网络中,收件箱并不是作为一个不可变的数据来创建,而是作为一个可变数据来创建的。可变数据类型不依赖于资源内容的固定标识符。它与权限系统相结合,允许更新该标识符上的数据。


可变数据类型允许通过更新位于收件人收件箱标识符的数据,来通知收件人有新消息到来。另外,它也可以创建收件箱资源,允许任何人追加新的数据。消息的发送方将消息的标识符附加到收件人的收件箱,这样,收件人就能够定位新邮件。


这个消息传递系统促进了电子邮件和即时通讯等功能的实现,同时为其他基于信息传递的系统提供了基础,比如支付、智能合约、社交网络、互动信号、动态网络内容等。


可变数据


可变数据是网络中另外一种数据类型,它允许修改网络上固定位置的数据。



强大的权限层允许可变数据的所有者指定谁可以更改数据,以及如何更改数据。


使用数字签名,网络可以对所有权进行验证和对可变数据进行修改。可变数据的所有者可以指定哪些密钥能够对数据修改、哪些密钥不能对数据进行修改以及如何进行修改(比如“update”和“append”)。


通过将明确定义的权限与加密安全签名相结合,所有者可以严格控制对可变数据的修改。


可变数据的内容可以指向其他可变数据,也能创建用于其他目的的可变数据链,如版本控制和分支、可验证的历史以及数据恢复。


网络操作


为了让用户能够安全的进行数据存储和检索,网络可以执行以下几个操作,这些操作产生了一个可以自动自愈的网络,来抵抗网络攻击。


Close Group 共识


网络上的节点(称为vault)主要负责存储大量的数据,而块的可用性对网络至关重要。


由于任何人在任何时候都可以从网络上添加或删除vault,因此。在恶意行为导致数据丢失之前,网络必须检测到恶意行为,并作出相应的响应。这就需要强制执行一套规范,这套规范能够管理vault可接受的网络行为。这些规则的实施过程叫做" Close Group 共识"。


vault形成相互协调的群体,以便就网络上数据的状态达成共识。任何不符合这一规则vault将会被网络拒绝,并由另一个vault代替。


符合这一规则的数据必须满足以下条件:

  • 可以储存

  • 可以检索

  • 未经修订


这取决于集群中的vault:

  • 有可存储新数据的空间

  • 有可用于在需要时转发该数据的带宽

  • 充分参与实现与集群内其他成员的协商一致


vault命名


所有的vault在连接或重新连接网络时,网络都会为其分配一个随机的256位标识符。距离较近的vault形成一个分组,距离用标识符之间的 XOR 距离衡量。一个分组中的vault共同合作,形成网络数据共识,来存储和检索数据。一个组由8到22个近距离的vault组成,网络上的vault越多,分组就会越多。


如果一个组中的大部分vault不可靠,那么这个组中的数据将会很容易被破坏。


也就是说,组的规模需要达到某种权衡。一方面它的规模需要很大,这样就很难控制集群中的大部分vault;另一方面,它的规模需要足够小,能够快速达成共识。


网络的安全性需要得到关注,主要是由于攻击者可能不会为它的vault选择标识符。攻击者必须加入并重复离开,直到网络在他们试图控制的分组中分配一个标识符。为了控制这个组达成共识,大部分的vault都需要执行这一操作。


因此,控制一个组的难度取决于网络的规模。网络规模越大,就越难控制,同样的,组就越多,就更难加入任何一个特定的组。


Disjoint Sections


我们必须要考虑的一点是:分组间消息传递的效率,即集体成员的共识,而不是个别vault行为的共识。


这些分组是基于标识符主要位的相似性形成的,这一主要位被称为该节的前缀。


这样一来,连接或离开这个分组的vault协调变得更加简单。


如果分组要保留8个vault常量,就需要在新的vault连接或离开分组时,重新组织各个分组之间的单个vault。这可能会对附近的分组产生连锁效应。


与其进行这种级联重组,倒不如将分组的规模控制在8到22个vault之间:如果分组大小超过22个vault,就会被分成两个新的分组;如果大小低于8个vault,就会将其合并到最近的分组。


这就是 Disjoint section。


Churn


一个vault在被分配一个新的随机标识符后,就会被网络重定位。这样一来,这个vault就会离开现有的分组,成为新的组的一部分。其存储的块也会由群组共识机制自动处理。现在,重定位的vault必须存储最接近新标识符的块,并继续与一组新的vault达成共识。


该机制称为churn机制,即新的vault连接网络或现有vault离开网络的过程的延伸。


Farming


vault运营商加入网络和存储数据是由一个网络通证驱动。这个通证(称为 safecoin)可以用于网络上的资源,或者用于和网络上提供的其他资源相接触,这和区块链比较相似——确保合作参与,会比不合作参与更加合理。


通证表示网络上的可变数据。该网络将共有232个定义为safecoin对象的可变数据资源,这些对象最初并没有所有者,因为通证经济并不存在。


该网络间歇地使用资源证明机制,向网络参与者分配未使用的safecoins。随着时间的推移,通证总数会增长,成为了通证和网络存储经济的引导机制。


当用户使用safecoins交换网络资源时,safecoins的总量也会减少。为了存储数据,用户必须交换safecoins。这包括向网络提交safecoins,然后删除safecoins所有者,并为用户提供网络存储空间。这种机制被称为代币回收,它为通过资源证明分配的safecoins的增长提供了一种平衡。


使用数字签名,网络将safecoin可变数据资源的所有权转移给接收者密钥,使其在用户之间进行传输。使用存储在可变数据资源中的现有所有者的密钥,可以很容易地验证数字签名。 一旦所有者得到更新,转移就完成了,这样一来,safecoin的转移就变得更快速、高效和安全可靠。


资源证明


当网络观察到vault的合作行为时,vault就有权要求拥有一个safecoin。每个特定safecoin标识符都由网络随机生成。


如果这个标识符的safecoin目前不属于任何人,网络就会将其分配给vault所有者,从而为这个系统增加一个新的safecoin。


如果该标识符的safecoin已经有所归属,网络则不会采取进一步的行动。


这和区块链的工作证明很相似。


safecoin的分配和调整和区块链机制较为相似。调整旨在平衡网络上资源的可用性。它鼓励在需要时提供更多的资源,并在供应过剩时减少奖励,从而抑制过度浪费行为。


safecoin支付算法尚未实施。


网络将合作行为定义为带宽和存储空间的可靠供应,继续参与达成共识。与区块链工作证明不同的是,终端用户采矿能力增长,则报酬递减。随着网络资源的增长,资源证明机制为终端用户提供更多的实用性。



结论


SAFE网络是一种可靠的数据存储和通信自动化网络。数据存储和消息系统相结合,形成了一个安全和私密的替代方案,能够替代当前大部分现有的网络基础设施。


使用内容可寻址资源标识符和自加密技术,网络可以更加高效的存储数据。


数据能够在网络上存储而不被破坏,也可以使用close group共识和disjoint sections随时对数据检索。


网络为用户分发通证,以此来鼓励用户在商定的系统规范内提供资源,防止网络恶意行为,并确保为未来客户提供可持续的网络资源。该分布式是基于资源证明机制,这种机制难以被欺骗,并且有很积极的外部性。


随着vault的增加,网络在速度、安全性和可靠性方面都有所提高。


终端用户受益于安全的默认设定模块和灵活的权限层,以最适合自己的方式控制对资源的访问。SAFE网络将很多独立的模块结合在一起,创建一个网络,为每个人提供了安全访问。



最新热文:



大力戳↑↑↑  加入区块链大本营读者⑦号群

(群满加微信 qk15732632926 入群)

(内容转载请联系微信:qk15732632926)

(商务合作请联系微信:fengyan-1101)



今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/H6G3YGJT0m
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/24068
 
342 次点击