
如果您对以下教程有任何疑问或想要申请未来的教程,请加入我们的电报聊天!问我们什么!
在阅读本文之前,我们建议您阅读我们之前的文章“ 在不到200行Go中编写您自己的区块链!”。
最近,区块链的兴趣达到了狂热水平。虽然很多嗡嗡声都围绕着区块链的应用,例如加密货币和ICO,但技术本身同样令人兴奋。区块链提供了民主化的信任和验证协议,该协议已经破坏了银行业务,并且即将对医疗保健,金融服务,社交应用等进行大修。
然而,从技术角度来看,区块链并非没有瑕疵。目前的工作共识机制已将交易速度降至接近严重的水平。等待比特币交易完成使得该平台几乎无法使用,而Cryptokitties几乎使以太坊网络停滞不前。
这使得在区块链上存储数据或大文件成为非启动者。如果区块链几乎不能支持简单记录双方之间的平衡转移的小字符串,那么我们究竟如何在区块链上存储大文件或图像?我们是否必须将区块链的效用限制在只能在微小文本字符串中捕获的东西?
输入IPFS
目前最有前途的解决方案是由协议实验室的人员创建的IPFS或行星际文件系统。它是一种点对点协议,每个节点都存储一组散列文件。想要检索任何这些文件的客户端可以访问一个很好的抽象层,它只需要调用它想要的文件的哈希值。然后IPFS梳理节点并向客户端提供文件。
您可以将其视为与BitTorrent类似。它是一种存储和引用文件的分散方式,但为您提供更多控制并通过哈希引用文件,从而实现更丰富的程序化交互。
以下是一些简单的图表,以便您可以看到IPFS的工作流程。

- John想要将PDF文件上传到IPFS
- 他把他的PDF文件放在他的工作目录中
- 他告诉IPFS他想要添加这个文件,它会生成文件的哈希值(你可以告诉它的IPFS,因为哈希总是以Qm开头…)
- 他的文件可在IPFS网络上找到
现在假设John希望通过IPFS与他的同事Mary分享这个文件。他只是告诉玛丽上面第3步的哈希。然后上面的步骤1-4对Mary进行反向工作。所有Mary需要做的是从IPFS调用哈希,并获得PDF文件的副本。很酷。

安全孔
这里有一个明显的安全漏洞。只要有人拥有PDF文件的哈希值,他们就可以从IPFS中检索它。因此敏感文件不适合其本机状态的IPFS。除非我们对这些文件执行某些操作,否则共享敏感文件(如健康记录或图像)不适合IPFS。
输入非对称加密
幸运的是,我们的一次性工具可以很好地与IPFS配对,以便在将文件上传到IPFS之前保护文件。非对称加密允许我们使用预期收件人的公钥加密文件,以便只有他们可以在使用IPFS检索它时对其进行解密。从IPFS检索文件的恶意方无法对其执行任何操作,因为它们无法对其进行解密。在本教程中,我们将使用GPG进行非对称加密。
让我们稍微编辑一下我们的工作流程图,以便我们加入和解密:

- John想要将PDF文件上传到IPFS,但只允许Mary访问
- 他将他的PDF文件放在他的工作目录中,并使用Mary的公钥对其进行加密
- 他告诉IPFS他想添加这个加密文件,它会生成加密文件的哈希值
- 他的加密文件可在IPFS网络上获得
- Mary可以检索并解密文件,因为她拥有用于加密文件的公钥的关联私钥
- 恶意方无法解密该文件,因为它们缺少Mary的私钥
区块链
那么区块链在哪里适合这个?在我们继续之前,我们鼓励您阅读我们的热门帖子:在不到200行Go中编写您自己的区块链!
这个图特别重要:

注意BPM部分。这种简单的文本记录是今天区块链可以真正处理的。这就是加密货币非常适合区块链的原因。您需要记录的只是传输的发件人,收件人和比特币(或以太币等)的数量。因为需要计算和验证所有这些哈希以保持链的完整性,所以区块链非常糟糕,在块中存储文件或大量数据时非常可怕。
这就是IPFS与区块链结合时如此强大的原因。我们只是存储IPFS文件的哈希,而不是上面的BPM!这真是很酷的东西。我们保持区块链所需的数据简单性,但我们可以享受IPFS的文件存储和分散的点对点属性!这是两全其美的。由于我们还增加了非对称加密(GPG)的安全性,因此我们有一种非常优雅的方式来“存储”,加密和共享区块链上的大数据和文件。

一个真实世界的应用程序将存储每个块中的健康或实验室记录的指示物。当我们获得新的实验室结果时,我们只需创建一个新块,该块指的是位于IPFS中的加密图像或我们实验室结果的PDF。
已经说够了。告诉我如何做到这一点!
在本教程中,我们将执行以下操作:
- 设置GPG
- 设置IPFS
- 使用其他人的公钥加密文件
- 将加密文件上传到IPFS
- 从另一台计算机(或虚拟机)下载该文件,并确保只有特权方可以解密和查看它
你需要的东西
- 第二台计算机或虚拟机实例。第二台计算机模拟您要与之安全共享文件的人。
- 一个测试文件。我们建议下载此文件,这是一个示例PDF实验室结果。这是我们需要保护的敏感,个人数据的确切类型,因为我们是一家医疗保健公司,这是一个很好的例子。将此文件放在您的工作目录中。
而已!让我们开始吧。
建立
GPG
我们在主计算机和辅助计算机上下载GPG。
按照本文中的说明操作您的操作系统。在Mac上,最简单的方法是打开终端并brew install gnupg
假设安装了Homebrew。
安装GPG后,在每台计算机上生成密钥。使用以下步骤:
gpg --gen-key
并按照提示选择默认选项。确保安全地记住或存储您为用户名和电子邮件选择的密码。
你将进入一个阶段,gpg
要求你做一些随机的事情来产生熵。我只输入了一堆随机字符,直到完成该过程。


在第二台计算机上生成密钥后,我们需要将该密钥添加到第一台计算机的密钥环中,这样我们就可以加密只有第二台计算机才能解密的文件。
使用您在创建密钥时选择的电子邮件地址将第二台计算机上的公钥导出为装甲blob
gpg --export --armor -email > pubkey.asc
将pubkey.asc
刚刚创建的文件移动到第一台计算机。确保安全地执行此操作。USB记忆棒比通过电子邮件发送更好。
一旦pubkey.asc
文件在您的第一台计算机和您的工作目录上,请将其导入您的密钥环,就像这样
gpg --import pubkey.asc
您可以检查是否已正确导入gpg --list-keys
。我的第二台电脑的名字是Cory Heath,它显示正确:

大!我们完成了GPG设置。让我们转到IPFS。
IPFS
按照说明下载并为您的操作系统安装IPFS说明这里的两台计算机。完成后,ipfs init
在两台计算机上初始化IPFS并在两台计算机上启动守护程序ipfs daemon
:

太好了!我们已经把一切都搞定了。让我们加密并将我们的PDF文件上传到IPFS。
加密
还记得我们之前下载的示例实验结果吗?确保将其移动到第一台计算机上的工作目录中。
让我们myriad.pdf
使用第二台计算机的公钥(在我的例子中,名为Cory Heath)加密该文件(我将实验室结果由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上可用 ipfs pin ls

你可以看到我们文件的哈希确实存在,现在可以在IPFS上使用了!
从IPFS下载
我们现在切换到我们的第二台电脑。记住,我们正在模拟第二个人。为了使这更加真实,请在整个教程中与朋友交换第二台计算机!
在我们的例子中,我们使用的是带有Vagrant的Ubuntu VM,而不是第二台计算机。这不是必需的。
在第二台计算机上,使用相同的哈希值从IPFS下载第一台计算机上发布的加密文件:
ipfs get QmYqSCWuzG8Cyo4MFQzqKcC14ct4ybAWyrAc9qzdJaFYTL
这是成功下载后的样子:
解密
由于我们在第二台计算机上,并且此加密文件是使用第二台计算机的公钥加密的,理论上我们应该能够解密并查看此文件而不会出现任何问题。
试一试吧。
解密下载的文件,然后将其重命名为 myriad.pdf
gpg --decrypt QmYqSCWuzG8Cyo4MFQzqKcC14ct4ybAWyrAc9qzdJaFYTL > myriad.pdf
关键时刻:
让我们打开这个文件,如果一切顺利,我们应该可以在我们的第二台计算机上看到它。
open myriad.pdf

TADA!我们成功下载,解密并打开了我们的文件,该文件在IPFS上完全加密存储,受到任何不应该访问的人的保护!
回顾和后续步骤
给自己轻拍一下。我们刚刚完成的工作非常强大,解决了今天区块链技术中的一些关键问题。
让我们快速回顾一下我们做了什么:
- 认识到区块链在存储大量数据和文件方面非常糟糕
- 已启动并运行IPFS,已连接到网络
- 使用GPG保护敏感文件并将其存储在IPFS上
- 理解IPFS中的散列以及我们如何在区块链中存储散列以将区块链的优势与分布式文件存储相结合
你从这里学到的东西完全取决于你。有很多地方可以从中分支出来。考虑将这些示例部署到实时服务器,以充当您自己的IPFS节点来存储重要文件。IPFS的缺点是,如果您的文件不是很受欢迎,当您停止节点时,您的文件将从IPFS网络中消失。您可以通过启动云服务器作为自己的IPFS节点来防止这种情况,因此您可以自己托管它们,直到更多节点对您的文件感兴趣并开始存储它们。
看看我们以前的“典自己blockchain”教程,零件1 ,2和3和4。完成这些后,尝试将IPFS和区块链与您自己的大型加密文件集成。您还可以在此处了解拜占庭容错,图灵完整性和其他高级区块链概念。如果你是如此倾向,这里是如何开始你自己的Hyperledger区块链,这里是如何在Hyperledger上构建DApp。
https://medium.com/
点对点科技简介
点对点科技深耘IPFS与Filecoin技术,坚持区块链技术改变未来的信念。点对点 IPFS 数据中心是目前国内技术领先,性价比高、保障优的投资标的。自建杭州数据中心,合作数据中心分布于上海、宁波、河北、香港、斯德哥尔摩(瑞典)等地。点对点数据中心具有优秀的硬件配置与目前国内优质的网络节点资源。点对点科技力求将IPFS爱好者升级为IPFS领军者与受益者,让IPFS颠覆传统互联网,共同开启 WEB 3.0时代。
想了解更多区块链知识吗?关注我吧!
原创文章,作者:Haskell,如若转载,请注明出处:http://ipfsdrop.com/tech/learn-to-share-files-on-the-block-chain-safely-using-ipfs/