初涉区块链领域时,人们常常会提出这样的疑问:既然区块链是一个去中心化的网络,所有数据都记录在链上,那么去中心化应用(DAPP)所需的文件又该如何存储呢?难道这些文件也要存储在链上吗?如果将它们存放在传统的中心化服务器上,数据可能会遭受恶意篡改。即使采用校验机制确保数据正确性,一旦数据被删除,DAPP是否还能正常使用?又或者,在数据传输过程中,前端内容可能会受到DNS污染,这显然与去中心化的理念相悖。那么,这些文件究竟应该存储在哪里呢?
区块链上每个区块的空间都非常有限,想象一下,如果将一张普通图片的全部数据分割后写入主链,暂且可以认为没有问题。但如果将现实生活中使用的系统所有文件全部上传到主链上,这将造成极大的空间浪费,并严重影响出块速度。而且,当文件频繁修改时,由于区块链的特性,即使是微小的改动也需要重新写入链上,这既不科学也不现实。
在目前主流的中心化系统中,静态文件通常由服务器或服务器集群负责存储。以一个最基本的静态网站为例,前端文件包括网页源文件、CSS、JS、图片、视频等多种静态文件,这些文件通常集中存储在互联网公司的服务器上(当然,现在也有很多CDN)。当用户访问这个网站时,都会获取到相同的文件。但如果负责运行这个静态网站的服务器发生故障、遭受黑客攻击、被入侵修改文件等情况,导致网站无法正常运行时,用户将无法访问这个网站,更不用说其他大部分带有数据库的动态网站。
我认为,在区块链的世界里,真正的DAPP应该是完全去中心化的,包括DAPP的数据和文件。比如之前备受瞩目的加密猫,从原则上讲,它并不是一个真正的DAPP,因为整个加密猫的网页和一些网页素材都存储在中心化的服务器上。目前,区块链就像传统的分布式数据库,而要构建一个真正意义上的DAPP,也应该使用分布式文件系统来存储DAPP的相关数据。
IPFS
IPFS(InterPlanetary File System,星际文件系统)是一个旨在建立持久且分布式存储和共享文件的互联网传输协议,它是一种内容可寻址的对等超媒体分发协议(P2P)。IPFS网络中的节点将构成一个分布式文件系统。
请注意,IPFS并不是一种区块链,它的设计宗旨是与区块链结合协同运作。尽管IPFS使用与区块链中Merkle Tree类似的架构元素,但它并不是基于区块链的技术。
可以这样理解,使用IPFS时,整个互联网可以被当作一个种子Torrent文件(如果使用过BitTorrent,应该很熟悉),而任何文件、视频等资料都存在于同一个bt群组中,并通过同一个Git仓库访问,同时共享给全互联网上的用户。当需要某个文件时,IPFS将像bt一样为您找到最接近的用户获取文件。
那么,您可能会问,这和bt有什么区别呢?直接使用bt不就可以了吗?
在bt中,每个种子文件背后都是一组独立的用户,即使是同一段视频,只要该种子内其他文件稍有不同,就会产生两个种子,而彼此之间不能交叉互通共享。而且bt不支持所有数据类型,也不关心网络上的重复数据,因此会产生很多冗余数据,影响网络整体效率。
IPFS在技术上大量借鉴了Git版本管理控制和BitTorrent,因此,在IPFS上,假设A和B先后上传同一个文件,而在IPFS上存储数据时,只会有一份,文件是分块(Block)存储的,拥有相同Hash的Block只会存储一次。
IPFS文件的存储和读取原理与BitTorrent类似。IPFS采用的索引结构是DHT(Distributed Hash Table,分布式哈希表),与bt相同,而数据结构方面则是Merkle DAG(Merkle Directed Acyclic Graph,有向无环图)。
Merkle DAG具有以下特点:
1. 内容可寻址:所有内容都被多重Hash校验和作为整个网络上唯一的识别。
2. 无法篡改:由于所有内容都是经过多重Hash校验并被用作验证,如果文件有任何不同或被修改,就可以立即被识别出来;
3. 删除重复数据:由于根据内容进行Hash,所以可以识别出网络上是唯一存在的,也能确保只存储一次;
以下是一段IPFS的简单介绍视频,我认为介绍非常浅显易懂。
历史
2014年5月,IPFS协议由墨西哥人Juan Benet设计,他利用比特币区块链技术的特性和网络基础设施的优势来实现永久存储不可篡改的资料,移除网络上的重复文件,以及获取存储节点的地址信息以用于搜索网络中的文件。目标是让互联网速度更快、更安全、更开放,让全世界的使用者都能够从IPFS网络上对等地存储和提取文件。
以下是IPFS官方的视频介绍。
运作流程
以下用一个例子说明IPFS的运作流程。
John想将一个PDF文件上传到IPFS。他将PDF文件放在工作目录下,并使用IPFS命令添加这个文件,同时得到了一个以Qm开头的Hash值。这样,他的文件就已经在IPFS网络上,并可以被访问了。
接下来,John想将这个文件分享给他的同事Mary。他只需要将第3步得到的Hash值告诉Mary,Mary就可以通过这个Hash值,从IPFS下载这个PDF文件。
以上就是这个简单的IPFS存储和读取过程。
每上传一个文件到IPFS网络上,系统都会为文件分配一个永久不可改变的地址(一个与内容关联的唯一加密Hash值),IPFS会将这个地址写入不可篡改的区块链主链上。IPFS提供可公开访问的数据库,而区块链主链被设计为负责验证的部分。对于重复数据方面的处理,IPFS网络会自动删除重复数据并追踪数据的历史版本记录,根据文件地址和历史版本记录,可以有效避免数据被误删除。
“如果你将文件添加到IPFS,并使用这个Hash值将其放入一个区块中,然后你可以使用IPFS来浏览交易和直接在网络上浏览文件,”——IPFS创始人,Juan Benet
简单来说,IPFS以P2P的方式存储文件及其历史版本记录,同时给出与内容对应的唯一地址,而将这些地址写入区块链上,这样既能确保文件的完整性,同时又能存储大量文件,节省区块链主链的网络带宽。
安全性
一般来说,直接上传到IPFS网络上的文件,只要知道这个地址或者是这个文件的hash值,使用者都可以下载。
等等!这难道不是很有问题吗?如果是一些敏感资料或文件,其他人都能够正常访问下载,那么还有安全性可言吗?所以,在将一些敏感文件上传至IPFS时,就必须预先对这些文件进行加密处理。只要通过一些现成的加解密工具,就可以很好地解决文件暴露的问题,同时又能利用IPFS的特性。
然而,我们可以使用非对称加密技术对文件进行预先加密,然后将其上传到IPFS上。我们可以使用文件接收方的公钥加密文件,然后接收方从IPFS网络上下载了这个文件,再用自己的私钥解密。即使文件被其他人下载下来,没有接收方的私钥,也无法打开。
实际做法又是如何呢?我们可以通过修改上面的例子,加入加密和解密的过程:
John想将一个PDF文件上传到IPFS,但只想让Mary访问他。他将PDF文件放在工作目录下,并使用Mary的公钥进行加密。他使用IPFS命令添加这个加密文件,同时得到了一个以Qm开头的Hash值。这样,他的文件就已经在IPFS网络上,并可以被访问了。
Mary下载这个文件,通过相应的私钥解密,就可以正常访问这个文件。然而,其他知道这个hash值的人下载后,因为没有私钥,所以无法对文件解密,也就无法正常访问。
优缺点
优点
存储安全性高:与以往存储在中心化系统中,数据可能被监控、因管理不善而泄露、甚至被黑客恶意修改相比,IPFS可以在网络上存在多个副本区块,并通过文件内容的hash作为验证,避免了资料被恶意篡改,存储不稳定的情况,同时可以利用加密工具作为解决文件安全问题的方法;存储成本分散:与以往存储在中心化系统中,数据都被集中存储,由单一互联网公司内的服务器硬盘负责存储数据相比,IPFS将存储分布到网络上所有节点,共同构成一个庞大的存储空间;数据稳定性高:当中心化系统出现紧急情况时,集中的数据可能会丢失,同时未能被找回。几个月前,国内著名的云计算供应商腾讯云也曾经出现过类似情况;IPFS将风险分散到网络上所有节点,从长远来看,数据稳定性相对较稳定;节省网络带宽和成本:当所有使用者都向中心化系统读取数据时,由于系统的网络带宽有限且昂贵,因此可能会出现网络拥堵;IPFS可以利用网络上所有节点的网络带宽资源,同时确保能从最接近的节点读取数据,节省网络带宽和资源的使用率;
缺点
文件不可撤销,不可篡改:这个既是优点也是缺点,对于目前很多使用场景下,文件若不能被修改,可能也是不太适合的;大型文件风险:由于IPFS将文件分割成多个小块进行存储,如果其中一个小块不能使用,整个文件也将失效;激励机制
IPFS网络依赖激励机制来维护整个网络,IPFS网络内所有的节点都是由许多不同独立的节点组成,要让节点心甘情愿地贡献自己的存储空间和网络带宽,就需要一套有效合理的激励机制,就像比特币、以太坊等区块链一样,存储数据的节点就相当于区块链网络中的矿工,提供存储数据也就能够获得相应的奖励。而FileCoin则是一个基于IPFS的去中心化存储项目,它是一种运行在IPFS内的激励机制,IPFS是一个P2P网络,而众所周知,P2P内节点的数量越多,下载速度就越快,所以通过FileCoin这种激励机制,可以有效地保障IPFS网络的存储空间正常运作。
总结
IPFS实现了真正的分布式文件存储,对于当前区块链缺少一个文件存储方面的解决方案,两者就像IPFS作者所言,是一场“完美的婚姻”。真正的DAPP除了数据是去中心化外,DAPP的其他文件也应同样地是去中心化,IPFS将有可能成为未来区块链上,所有项目的存储搭配。IPFS结合了比特币区块链技术的不可篡改特性、大量参考Git和BitTorrent,构建整个分布式网络基础设施来实现永久存储不可篡改的资料,要实现让互联网速度更快、更安全、更开放的目标,并非不可能。而且在目前区块链世界中,主流都在讨论如何解决上层的交易速度,提出了很多解决方案,但个人认为,要实现真正去中心化的DAPP,一个分布式文件系统同样重要,至少目前来说,IPFS能够基本满足要求。
标签: 数字货币