最近大众对区块链的兴趣在持续升温。虽然大部分的讨论都围绕着区块链的各种应用,例如加密货币和ICO,但区块链技术本身同样令人感到兴奋。区块链提供了一个民主化的信任和验证协议,该协议已经对银行造成了冲击,并正在向医疗保健、金融服务、社交应用程序等领域全面渗透。
然而,从技术角度来看,区块链并非完美无瑕。目前的POW机制已经将交易速度放缓至几近瘫痪的水平。完成比特币交易所需要的等待使得该平台几乎无法使用,Cryptokitties也几乎使得Ethereum网络停滞不前。
这使得在区块链上存储数据或大文件成为一件不可能的事。如果区块链只支持记录交易双方余额转移的少字符文本,那么我们应该如何将大文件或图像存储在区块链中呢?我们是否必须将区块链的使用局限在只使用少字符文本的事物上?
进入IPFS
目前可用的最有前途的解决方案是由Protocol Labs人员创建的IPFS,也就是Interplanetary File System。这是一个点对点协议,其中每个节点存储哈希文件的集合。想要检索这些文件的用户端可以进入一个易用的抽象层,只需简单地调用想要的文件的哈希即可。然后IPFS将梳理许多节点并为客户端提供文件。
你可以认为它与BitTorrent相似。这是一种分散存储和引用文件的方式,但可以让您更加控制并通过散列来引用文件,从而实现更丰富的程序化交互。
你可以认为它与BitTorrent相似。这是一种分散存储并分散引用文件的方式,可以让您通过哈希更好地控制和引用文件,从而实现更丰富的程序化交互。
以下是一些简单的图表,您可以看到IPFS的工作流程。
1. John想上传一个PDF文件到IPFS上。
2. 他将他的PDF文件放到他的工作目录中。
3. 他告知IPFS他想添加这份文件,这将生成一个这份文件的哈希(你可以识别它是IPFS,因为这些哈希总是以Qm开始)。
4. 他的文件存在于IPFS网络上。
现在假设John要通过IPFS向同事Mary分享这个文件。他只需告诉Mary上面步骤3中产生的哈希。然后上面的步骤1-4将以相反的顺序为Mary工作。Mary所需要做的就是从IPFS调用哈希,并获得PDF文件的副本。这太酷了。
安全漏洞
这里有一个明显的安全漏洞。任何人只要知道了PDF文件的哈希,就可以从IPFS中检索它。因此,把敏感文件直接存在IPFS上是不合适的。除非我们对这些文件做些处理,否则共享那些诸如健康记录或图像之类的敏感文件对IPFS来说是不太合适的。
输入非对称加密
幸运的是,在把文件上传到IPFS之前,我们有可以用来加密文件的工具,并且这些工具可以与IPFS很好地进行配对。非对称加密让我们可以用目标收件人的公钥对文件进行加密,只有当他们使用IPFS来检索文件时,才对这些文件进行解密。恶意用户通过IPFS检索文件时是无法对其进行任何操作的,因为他们无法对其进行解密。对于本教程,我们将使用GPG进行非对称加密。
让我们编辑一下我们的工作流程图,以便加密和解密:
1.John想将PDF文件上传到IPFS,但只让Mary拥有访问权。
2.他将他的PDF文件放在他的工作目录中,并用Mary的公钥加密。
3.他告诉IPFS他想要添加这个加密文件,这生成了加密文件的哈希。
4.他的文件存在于IPFS网络上。
5.Mary可以检索并解密文件,因为她拥有用于加密文件的公钥相对应的私钥。
恶意用户无法解密该文件,因为他们缺少Mary的私钥。
区块链
那么区块链在哪方面适合这件事?在我们继续之前,我们鼓励您阅读我们热门的文章:使用GO语言通过不到200行的代码编写自己的区块链!
此图特别重要:
来自“使用GO语言通过不到200行的代码编写自己的区块链!”
注意BPM部分。目前的区块链所能处理的只有这种简单的文本记录。这就是为什么加密货币非常适合区块链的原因。需要记录的仅仅是发送者、接收者和正在传送的比特币(或以太坊等)的数量。因为所有这些哈希都需要进行计算和验证以保持链的完整性,所以区块链非常可怕,在将文件或大量数据存储于区块中这一点上更是可怕。
这就是为什么IPFS与区块链结合会如此强大的原因。除了上面的BPM,我们只需存储IPFS文件的哈希!这真是很酷的事。我们保存区块链所需的简单数据,但我们可以享受IPFS的文件存储和分布式点对点的属性!这是两全其美的。由于我们还通过非对称加密(GPG)增加了安全性,因此我们在区块链中“存储”、加密和共享大量数据和文件的方式将会非常优雅。
修订后的区块图
一个真实世界的应用程序将在每个区块中储存我们健康或实验记录的索引。当我们获得新的实验结果时,我们只需创建一个新块,它指向位于IPFS中的一份加密图像或关于实验结果的PDF文件。
说得够多了。告诉我如何做到吧!
在本教程中,我们将执行以下操作:
● 设置GPG
● 设置IPFS
● 用别人的公钥加密文件
● 将加密文件上传到IPFS
● 从另一台计算机(或虚拟机)下载文件并确保只有被授权者可以解密并查看该文件
你需要的东西
● 第二台计算机或虚拟机实例。第二台计算机模拟一个你想要安全地向他分享文件的人。
● 测试文件。我们建议您下载这份文件作为实验结果的PDF样本。这是我们需要保护的敏感的个人数据的特定的类型,因为我们是一家医疗保健公司,这是一个很好的例子。把这个文件放在你的工作目录中。
就这样!让我们开始吧。
建立
GPR
在我们的主要和辅助计算机上下载GPG。
按照本文中的说明对你的操作系统进行操作。在Mac上,最简单的方法是在安装了Homebrew的基础上打开您的终端,并运行 brew install gnupg。
在安装GPG之后在每台计算机上生成一个密钥。使用以下步骤:
按照提示运行gpg --gen-key并选择默认选项。确保安全地记住或存储您为用户名和电子邮件选择的密码。
你到了运行gpg的阶段,本阶段要求你做一些随机的事情来产生熵。我在这里输入了一堆随机字符,直到过程完成。
在第二台计算机上生成密钥后,我们需要将该密钥添加到第一台计算机的密钥环中,以便我们可以加密只有第二台计算机可以解密的文件。
使用您在创建密钥时选择的电子邮件地址,将第二台计算机上的公钥导出到装甲块中
gpg --export --armor -email> pubkey.asc
将刚刚创建的pubkey.asc文件移至第一台计算机。确保安全地做到这一点。使用U盘比通过电子邮件发送更好。
一旦pubkey.as文件在您的第一台计算机和您的工作目录中,将其导入到您的钥匙环中
gpg --import pubkey.asc
你可以检查它是否正确地用gpg --list-keys导入。我的第二台计算机的名字是Cory Heath,它显示正确:
很好!我们完成了GPG设置。现在来看看IPFS。
IPFS
按照说明在这里为两台计算机下载并安装适用于您的操作系统的IPFS。完成之后,在两台计算机上用ipfs init初始化IPFS,并在两台计算机上使用ipfs daemon启动守护进程:
棒极了!我们已经设定了一切。让我们开始加密并将我们的PDF文件上传到IPFS。
加密
还记得我们之前下载的实验结果的样本吗?确保它移到了第一台计算机上的工作目录中。
我们使用第二台计算机的公钥(在我举得例子中起名为Cory Heath)对该文件进行加密(我将其重命名为myriad.pdf,因为实验结果由Myriad Genetics产生)。
gpg --encrypt --recipient“Cory Heath”myriad.pdf
如果你现在用ls检查你的目录,你会看到一个名为myriad.pdf.gpg的新的加密文件。
只有您的第二台计算机可以解密并查看此文件。试一下吧!通过电子邮件发送给其他朋友,尽可能地尝试,他们将无法打开它!即使他们将其重命名为myriad.pdf也不行。
我们现在有了加密文件。可以上传到IPFS上了!
上传到IPFS
要上传到IPFS,我们需要在我们的第一台计算机上执行操作:
ipfs add myriad.pdf.gpg
我们得到这样的输出:
Qm...字符串就是文件的哈希。您可以将此内容发送给您的朋友或任何您希望提供访问权限的人,以便他们可以从IPFS下载。
让我们使用ipfs pin ls仔细检查以确保我们的文件存在于IPFS上。
高亮的哈希
您可以看到我们文件的哈希确实存在,现在可在IPFS上使用该哈希了!
从IPFS下载
现在让我们切换到我们的第二台电脑。请记住,我们正在模拟第二个人。为了使这更加真实,请将本教程中的第二台计算机与朋友交换!
在我们的例子中,我们使用的是带有Vagrant的Ubuntu VM,而不是第二台电脑。这不是要求。
在第二台计算机上,使用相同的散列从IPFS中的第一台计算机下载发布的加密文件:
ipfs get QmYqSCWuzG8Cyo4MFQzqKcC14ct4ybAWyrAc9qzdJaFYTL
这是成功下载时的样子:
解密
由于我们在第二台计算机上,而且这个加密文件是用第二台计算机的公钥加密的,理论上我们应该能够解密并查看这个文件,而不会有任何问题。
试一试吧。
解密下载的文件,并将其重命名为myriad.pdf
gpg --decrypt QmYqSCWuzG8Cyo4MFQzqKcC14ct4ybAWyrAc9qzdJaFYTL> myriad.pdf
真相时刻
让我们打开这个文件,如果一切顺利,我们应该能够在我们的第二台计算机上看到它。
打开myriad.pdf
啊哈!我们成功地下载、解密并打开了我们的文件,该文件在IPFS上完全加密存储,被保护着不让任何未经授权的人访问!
总结和下一步
骄傲地拍一下自己的胸膛。因为我们刚刚实现的功能非常强大,它解决了当今区块链技术中的一些关键问题。
让我们快速回顾一下我们所做的:
● 认识到区块链在存储大量数据和文件方面非常糟糕;
● 启动并运行IPFS,连接到网络;
● 使用GPG保护敏感文件并将其存储在IPFS上;
● 理解IPFS中的哈希,以及我们如何将哈希存储在区块链中,以将区块链的优势与分布式文件存储相结合。
从这其中学到了什么东西是完全取决于你自己的。有很多内容可以从中提取出来。考虑将这些示例部署到活动服务器,以充当您自己的IPFS节点来存储重要文件。IPFS的缺点是,如果您的文件不是非常热门,当您停止运行节点时,文件将从IPFS网络中消失。您可以通过将云服务器转变为自己的IPFS节点来防止这种情况发生,因此您可以自己托管它们,直到更多节点对您的文件感兴趣并开始存储它们。
本文原作者Coral Health,由IPFS.FUND翻译。
文章允许转载,但必须注明:原文来自于 http://IPFS.FUND。否则视为侵权。