首页 > 区块链 > 基于IPFS和区链实现文件安全共享
区块区分  

基于IPFS和区链实现文件安全共享

摘要:ipfs区块链实现区块链链技术非常火热,网上涌现了大量的关于区块链应用的讨论,如加密货币和ICO。抛开炒作电子货币不说,区块链技术本事也是一样很伟大的发明、具有很广阔的使用前景。区块链提供了复杂环境情况下的信任和验证协议,该协议已经在银行业务中得到验证,在一些跨境直连支付和结算实用。预计区块链技术对
基于IPFS和区链实现文件安全共享

实现区块链链技术非常火热,网上涌现了大量的关于区块链应用的讨论,如加密货币和ICO。抛开炒作电子货币不说,区块链技术本事也是一样很伟大的发明、具有很广阔的使用前景。区块链提供了复杂环境情况下的信任和验证协议,该协议已经在银行业务中得到验证,在一些跨境直连支付和结算实用。预计区块链技术对医疗保健,金融,社交应用都会有巨大的影响和变革。关于区块链的概念和电子货币等东西我们不说,本文我们以实例演示基于区块链技术的安全共享安全方案。

源起

我们说了区块链技术是一项很伟大的发明,也有很广阔的使用前景,但是区块链技术本身也并非完美的。区块链由于依赖于节点的大量的加密计算,其性能太低。要将数据写入链中需要十几甚至几十分钟,而且等节点的数据同步则需要更长的时间。所以想通过区块链存储数据或大文件基本基本上不可能。试想区块链连交换简单的字符记录都费劲,更何况大量的数据呢?那么有什么办法,让我们通过区块链存储大文件或图像呢?答案是肯定的,就像Git对大文件有git lfs解决方案一样,区块链也在努力实现这个目标。

IPFS

目前最有前途的解决方案是由Protocol实验室的创建的行星际文件系统(IPFS,Interplanetary File System)。该方案是一种点对点协议,每个节点都存储一组散列文件。通过一种抽象层,实现对这些文件检索和访问,客户端通过文件哈希获得文件存储的节点,IPFS梳理这些节点并向客户端提供文件。可以将其想象为一个分布式云盘,东西都存在大家的电脑上,需要时候从存的节点下载即可,文件都有提供了哈希值保存在区块链不怕被篡改。基本是于BT类似,BT种子就是文件的哈希,但是IPFS支持更多的控制和更丰富的程序交互。我们画一张图来看IPFS的工作流程。

基于IPFS和区链实现文件安全共享

1. 小虫想要将PDF文件上传到IPFS

2. 他把他的PDF文件拖到IPFS工作目录中

3. 执行命令,通知IPFS他想要添加这个文件,它会生成文件的哈希值(IPFS因为哈希总以Qm开头...)

4. 他的文件在IPFS网络上可用

现在假设小虫希望通过IPFS与他的同事小安分享该PDF。他只要告诉小安上面第3步生成的哈希,小安通过哈希在IPFS检索到PDF并下载副本。

基于IPFS和区链实现文件安全共享

安全问题

这里有一个明显的安全漏洞。只要有人拥有PDF哈希值,就可以从IPFS中检索并下载。因此一些敏感文件不适合通过上面的简单流程来进行共享。当然我们可以先对文件进行加密(比如设个密码)方式来保证一定安全。下面我们来说一种更加安全的通过非对称证书加密的方式。

输入非对称加密

如果简单的设置密码还不能保证安全,因为对简单密码的暴力破解还是非常容易,有很多现成工具可以直接使用。我们可以使用非对称加密,使用文件共享对象的公钥来加密文件,让后通过IPFS共享,对方下载并利用私钥解密。其他人没有密钥,无法阅读也没法对文件进行操作。非对称加密最常用的是GPG的方法,本文中我们也以GPG为例。加入非对称加密后,整个流程变成了:

基于IPFS和区链实现文件安全共享

1. 小虫将要分享的PDF文件放在工作目录

2. 小虫并使用小安的公钥对该PDF进行加密

3. 小虫告诉IPFS想要添加这个加密文件,该文件生成加密文件的哈希值

4. 加密文件在IPFS网络上传输,供下载

5. 小安可以检索下载并利用自己私钥解密文件

6. 其他人下载了一个无用的加密文件。

区块链

我们来看一个图,一个典型的区块链示意图:

基于IPFS和区链实现文件安全共享

注意BPM部分。这种简单的文本记录是现在的区块链可以真正处理的信息。这就是为啥加密货币天生是区块链的原因。我们只需需要记录的传输的发送者,接收者和比特币(或以太币等)的数量。因为需要计算和验证所有这些信息的哈希以保持链的完整性,所以区块链性能很低,在块中存储文件或大量数据是不可能的事情。

所以,我们需要使用IPFS与区块链结合来实现更安全的文件共享。我们只需把上图中的BPM用IPFS文件的哈希来取代即可。这样我们保持区块链数据的简单性,同时享受IPFS的文件存储和分散的对等属性。由于我们还增加了非对称加密(GPG)的安全性,因此我们构成了一套非常安全、优雅的文件共享方案。

基于IPFS和区链实现文件安全共享

实例演示基本硬件

两台电脑或虚拟机。模拟你要与之安全共享文件的人。

一个PDF测试文件

将此文件放在你的工作目录中。

安装GPG

我们需要在两台电脑上都下载GPG。linux下可以通过包管理安装,比如centos通过yum install gpg;unbuntu通过apt install gpg;在Mac上通过 brew install gnupg。

安装GPG后,在两台计算机上生成密钥。步骤如下:

gpg --gen-key并按照提示选择默认选项。填写用户名和电子邮件,为你的证书设置一个密码。

基于IPFS和区链实现文件安全共享

基于IPFS和区链实现文件安全共享

继续,gpg要求你做一些随机的事情来产生熵。此处我们输一些随机字符,这些都会产生一个比较好随机数。注意证书生成过程等待时间比较长(几分钟到十几分钟),需要耐心一点点。。。。

基于IPFS和区链实现文件安全共享

在第二台计算机上生成密钥后,我们需要将其公钥钥添加到第一台计算机的密钥环中,这样我们才能实现第一个用公钥加密,第二台计算机利用自己的私钥解密。

使用你在创建密钥时选择的电子邮件地址将第二台计算机上的公钥导出为文件

gpg --export --armor -email > pubkey.asc

将pubkey.asc刚刚创建的文件移动到第一台电脑。确保安全地执行此操作。

请将其导入你的密钥环,就像这样

gpg --import pubkey.asc

基于IPFS和区链实现文件安全共享

可以通过gpg --list-keys检查是否已正确导入。

基于IPFS和区链实现文件安全共享

我们已经完成了GPG的安装和设置,接下来是IPFS。

IPFS

通过官网(需要代理)下载并安装适配本地操作系统IPFS版本。

基于IPFS和区链实现文件安全共享

完成后通过

ipfs init初始化IPFS,并启动守护程序ipfs daemon:

基于IPFS和区链实现文件安全共享

这样ipfs就搞定了,下面要做就是加密并将我们的PDF文件上传到IPFS。

加密

让我们本文章pdf版本的第一页,重命名为CC-IPFS.pdf,使用公钥加密该文件。

gpg --encrypt --recipient "chongchong1" CC-IPFS.pdf

这样就会生成加密文件CC-IPFS.pdf.gpg

基于IPFS和区链实现文件安全共享

该文件,只有chongchong1的私钥才能解密并查看,其他人都没法正常解密。

基于IPFS和区链实现文件安全共享

我们有了加密文件。我们将其上传到IPFS!

上传到IPFS

要上传到IPFS,我们在第一台计算机上需要做的就是

ipfs add CC-IPFS.pdf.gpg

我们得到这样的输出:

基于IPFS和区链实现文件安全共享

上图中的Qm...字符串是文件的哈希值。将此信息发送给你需要共享的人,他通过此哈希就可以从IPFS下载。

检查文件在IPFS上可用:ipfs pin ls

基于IPFS和区链实现文件安全共享

你可以看到我们文件的哈希在网络中存在,现在可以在IPFS上使用了!

从IPFS下载

现在切换到第二台电脑。在第二台计算机上,使用相同的哈希值从IPFS下载第一台计算机上发布的加密文件:

基于IPFS和区链实现文件安全共享

下载成功:

基于IPFS和区链实现文件安全共享

解密

由于我们在第二台计算机上,并且这个加密文件是使用第二台计算机的公钥加密的,理论上我们可以解密并查看此文件而不会出现任何问题。

解密下载的文件,输出文件为CC-IPFS.pdf

基于IPFS和区链实现文件安全共享

基于IPFS和区链实现文件安全共享

验证

让我们打开这个文件,可以看到文件没有问题。

基于IPFS和区链实现文件安全共享

总结

本文我们通过实例演示,解决了块链技术中的一些关键问题,实现了安全的文件共享方案。涉及关键点技术有:

区块链存在性能问题,不能存储大量数据和文件;

启动并运行IPFS,连接到网络;

使用GPG加密敏感文件并将其存储在IPFS上;

IPFS中的文件散列,在区块链中存储散列以将区块链的优势与分布式点对点文件存储结合。

免责声明
世链财经作为开放的信息发布平台,所有资讯仅代表作者个人观点,与世链财经无关。如文章、图片、音频或视频出现侵权、违规及其他不当言论,请提供相关材料,发送到:2785592653@qq.com。
风险提示:本站所提供的资讯不代表任何投资暗示。投资有风险,入市须谨慎。
世链粉丝群:提供最新热点新闻,空投糖果、红包等福利,微信:msy2134。