当下互联网使用的Hyper Text Transfer Protocol(超文本传输协议)属于应用层的面向对象的协议。它拥有简捷、快速的方式,适用于分布式超媒体信息系统,工作于客户端-服务端架构为上,具有简单快速,灵活,允许传输任意类型的数据对象;无连接,无状态等特点。而缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。HTTP的中心化是低效的, 并且成本很高。使用HTTP协议每次需要从中心化的服务器下载完整的文件。Web文件经常被删除。目前的互联网应用高度依赖主干网,主干网受制于诸多因素的影响, 因此我们需要一种新的传输系统。IPFS的全称是InterPlanetary File System星际文件系统,是一个点对点的网络超媒体协议。它的目标是成为更快、更安全、更开放的下一代互联网。IPFS尝试解决HTTP目前存在的上述问题。在IPFS网络上,每个IPFS上的文件都具备一个唯一的哈希码。IPFS同时具备了文件去重和历史版本的功能,每个网络节点会存储自己感兴趣的内容,并且索引其它内容的位置,用户可以通过哈希码来寻找到每个文件的具体位置。此外IPFS本身还自带一个IPNS的域名,可以把你的内容和你的个人域名进行绑定。
IPFS可以使互联网应用极大的降低互联网应用对主干网的依赖。因为IPFS提供了文件的历史版本回溯功能(就像git版本控制工具一样), 可以很容易的查看文件的历史版本, 数据可以得到永久保存。
下面从IPFS文件存储原理以及IPFS路由系统谈及研究现状
IPFS文件的存储和读取与BitTorrent上传下载原理相似,采用的索引结构是DHT(分布式哈希表),数据结构是Merkle DAG(Merkle 有向无环图)。IPFS有两种文件存储方式,单文件存储和文件树存储。
单文件存储的时候,把单个文件拆分成若干个256KB大小的块;逐块(block)计算block hash,hashn = hash ( blockn );把所有的block hash拼凑成一个数组,再计算一次hash,便得到了文件最终的hash,并将这个 hash(file) 和block hash数组组成一个对象,当做一个索引结构;把block、索引结构全部上传给IPFS节点,文件便同步了。
IPFS支持目录结构,存储目录先把目录下所有的文件同步到IPFS网络中去,为所有的文件hash建立一个别名,把hash和别名“捆绑”在一起组建成一个名为 IPFSLink 的对象;
把该目录下所有的 IPFSLink 对象组成一个数组,对该数组计算一个目录hash,并将数组和目录hash拼成一个结构体,同步到IPFS网络;如果上层还有目录结构,则重复上述操作执行;目录hash可以打印出来,读取的时候用。
IPFS系统的节点查找有两个需求,第一找到其他节点地址,第二找到存储有特定数据的节点。IPFS综合了S/Kademlia 、Coral和Mainline等技术。利用 DHT的数据存储是根据数据的大小进行的:小于1KB的数据直接存储到DHT上面,大于1KB的数据在DHT中存储的是节点ID。IPFS系统提供了bootstrap命令来完成节点加入工作。
我们需要清楚如何有效的在数据共享系统的底层实现对文件的操作。基于区块链的存储结构,我们将调用ipfs api,利用nodejs语言编写的功能实现对文件的上传,复制,以及用户之间数据传输共享的过程,且传输过程中,维护数据的安全性以及可靠性。
核心词: ipfs特性 数据授权 分布式数据空间 数据转移 RSA算法
IPFS的网络是不固定的、细粒度的、分布式的网络,可以很好地适应内容分发网络(CDM)的要求。这样的设计可以很好地共享各类数据,包括图像、视频流、分布式数据库、整个操作系统、模块链等。IPFS是对等网络,没有节点拥有特权。IPFS节点仓库在本地存储IPFS对象。节点之间相互连接并传输对象。这些对象代表文件和其他数据结构。所述IPFS协议分为一堆子协议并各自负责不同的功能:
(1)特性:管理节点的身份生成和验证。
(2)网络:对连接到的其他节点进行管理,使用各种底层网络协议,并且是可配置的。
(3)路由:维护信息来定位特定的节点和对象。响应本地和远程查询。默认为一个DHT,但是可交换的。
(4)交换:可以使用一种新的分组交换协议(比特交换)来管理有效的块分布。建模为一个需求,弱化数据复制的刺激。可交换的贸易策略。
(5)对象:内容寻址的Merkle DAG不可变对象链接。用于表示任意的数据结构,例如文件层次结构和通信系统。
(6)文件:灵感来自Git版本控制文件系统的层次结构。
(7)命名:一个自认证的可变名称系统。
数据授权就是基于数据共享,让在不同地方使用不同计算机、不同软件的用户能够读取他人数据并进行各种操作运算和分析。虽然目前国内很多社交工具,譬如人人网、QQ、微博等都在不同程度上实现了文件共享的功能,但都有其各自的不足,亦或耗费流量,亦或操作繁琐,真正实现个人多种终端设备之间的文件共享功能的技术目前还不够完善与成熟。到目前为止,HTTP是有史以来最成功的“文件分布式系统”部署。它移动小文件是相对便宜的,即使对于小型组织也有大量的流量可以使用。数据分布的新时代具有如下特点:
(1) 托管和分发PB级数据集;
(2) 在大数据跨组织的计算;
(3) 大容量高清点播和实时媒体流;
(4) 版本控制和连接的大规模数据集;
(5) 防止重要文件意外失踪等。
因此,利用ipfs网络通过文件操作可以实现数据授权的功能。由于加密哈希是防篡改的,因此用户可以从附近的人那里下载副本,并确切知道它是否与用户请求的内容相同。系统会自动重新计算内容的哈希值,以验证内容是否符合用户的要求。
分布式的数据空间基于ipfs的分布式存储空间。由于IPFS内容不再通过中心服务器响应,而是以P2P的方式从邻近的对等节点拉取;同时全网维护一个统一的路由表,每个节点作自我调整,可以保证节点与数据的动态增删、完整性、去冗余等细节问题。IPFS 中的BitSwap协议受到BitTorrent 的启发,通过对等节点间交换数据块来分发数据。IPFS每一个节点都维护了两个列表:
1.已有的数据块(have_list)
2.想要的数据块(want_list)
当两个节点建立连接后,他们会根据hava_list和want_list互通有无。
PFS各节点本身使用类似git的版本控制系统,来管理本地文件与数据块。这既保证了数据块的去冗余,又提供了可追溯的历史版本。
利用ipfs网络中文件自带的拷贝,删除,上传,下载等操作根据用户需求实现用户转移功能。
RSA算法是一种非对称加密算法,即由一个私钥和一个公钥构成的密钥对,通过私钥加密,公钥解密,或者通过公钥加密,私钥解密。其中,公钥可以公开,私钥必须保密。RSA算法是1977年由Ron Rivest、Adi Shamir和Leonard Adleman共同提出的,所以以他们三人的姓氏的头字母命名。举一个简单的例子来说明此算法的原理。例如当小明给小红发送信息时,可以用小明自己的私钥加密,小红用小明的公钥解密,也可以用小红的公钥加密,小红用她自己的私钥解密,这就是非对称加密。利用非对称加密算法,可以保证传输信息的安全性。
非对称加密算法实现机密信息交换的基本过程是:
A要向B发送信息,A和B都要产生一对用于加密非对称加密算法和解密的公钥和私钥。
A的私钥保密,A的公钥告诉B;B的私钥保密,B的公钥告诉A。
A给B发送信息时,A用B的公钥加密信息,因为A知道B的公钥。
A将这个消息发给B(已经用B的公钥加密消息)。
B收到这个消息后,B用自己的私钥解密A的消息。其他所有收到这个报文的人都无法解密,因为只有B才有B的私钥。
由于加密哈希是防篡改的,因此用户可以从附近的人那里下载副本,并确切知道它是否与用户请求的内容相同。系统会自动重新计算内容的哈希值,以验证内容是否符合用户的要求。加密哈希实现对用户文件授权的过程。
经过授权认证的用户,利用ipfs文件系统自带拷贝模块,输入希望拷贝文件的哈希字符串和文件位置,即可实现文件从节点到自己管理系统的拷贝过程。
安全漏洞
这里有一个安全漏洞。任何人只要知道了PDF文件的哈希,就可以从IPFS中检索它。因此,把敏感文件直接存在IPFS上是不合适的。除非我们对这些文件做些处理,否则共享那些诸如健康记录或图像之类的敏感文件对IPFS来说是不太合适的。
对称加密与非对称加密结合的算法
非对称密码体制算法强度复杂、安全性依赖于算法与密钥。但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快。称密码体制中只有一种密钥,并且是非公开的,如果要解密就得让对方知道密钥。所以保证其安全性就是保证密钥的安全,而非对称密钥体制有两种密钥,其中一个是公开的,这样就可以不需要像对称密码那样传输对方的密钥了,安全性就大了很多。如果message字符串的长度增加到很长,例如1M(实际7k就不行了),这时,执行RSA加密会得到一个类似这样的错误:data too large for key size,这是因为RSA加密的原始信息必须小于Key的长度。因此,RSA并不适合加密大数据,而是先生成一个随机的AES密码,用AES加密原始信息,然后用RSA加密AES口令,这样,实际使用RSA时,给对方传的密文分两部分,一部分是AES加密的密文,另一部分是RSA加密的AES口令。对方用RSA先解密出AES口令,再用AES解密密文,即可获得明文。利用这种方法处理文件大大提高传输过程的可靠性。也是创新之处。
对文件存储的大小仍有限制,无法保证真正的数据只使用一次,易流失到第三方手中。采用定位或者周期性文件有效的方式不太合理。且技术成本等多方面原因。对被授权人身份验证的方法实现尚需考量。密钥的保存另需文件存储,繁琐复杂,需要改进。