IPFS是星际文件系统,它用于在分布式文件系统中存储和共享数据的协议和对等网络。IPFS使用内容寻址,来唯一标识连接所有计算设备的每个文件。
最近,NodeJS中的IPFS文件加密示例项目,实现了加密、解密文件,并将其存储在IPFS网络上。这是托管和保护任何敏感数据的理想解决方案。
今天,我们看一下,如何在将文件上传到IPFS之前对其进行加密。同样,它可以解密和下载这些文件。该解决方案同时使用RSA和AES加密算法来实现最大的安全性。
首先,安装:
1)下载并安装IPFS CL
2)初始化IPFS: ipfs init
3)启动IPFS: ipfs daemon
4)在另一个提示下运行以下命令:
git clone github.com/healzer/ipfs-file-encryption.git
cd ipfs-file-encryption
npm install
node index.js
其次,我们可以使用提供的_testing()功能来测试和验证以下功能:
最后,配置:
您可能要index.js根据您的环境更改这些变量:
ipfsEndPoint (default: 'localhost:5001')
rest_port (default: 3000)
总的来说,加密策略同时使用RSA和AES来实现最大的安全性。加密文件进行上传,所有这些操作均在内存中进行。对于非常大的文件,可能需要在磁盘上执行此操作。
同时,根据AES加密算法的要求,将16字节密钥和8字节IV值转换为十六进制,并得到32字节密钥和16字节IV。输出文件由:头文件,RSA加密密钥+ IV和原始文件的AES加密数据组成。
另一方面,文件的解密步骤如下:
1)下载文件(内存中)。
2)从标题中提取加密密钥。
3)使用您的RSA私钥解密密钥。
4)从标题中提取IV值。
5)使用步骤3中的解密密钥和IV值解密文件数据。
注意:
我们同时使用RSA和AES算法:RSA只能加密有限数量的数据,但不能超过其密钥大小,因此我们可以使用它来加密AES的秘密密钥。然后,对称AES策略用于加密潜在的大量数据,即文件的数据本身。
出于简化原因,也可以单独使用AES。但是,包含RSA的好处是我们可以为最终用户生成许多RSA解密密钥(=私钥),而只有一个加密密钥(=公钥);而不是与所有用户共享一个密钥。
我们为什么要选择IPFS?
在可用性和性能方面,IPFS优于bittorrent。由于内容寻址,IPFS可以防止文件重复。
1)单个文件可以很容易地从某个“源”下载。而使用Bittorrent,则必须创建一个“ .torrent”文件,将其提交给跟踪器并进行种子植入。
2)另一方面,IPFS在使文件可共享方面要快得多。IPFS文件可以分发和负载均衡,使其成为完美的CDN解决方案。而使用BitTorrent完全不可能。
3)在IPFS中,文件流通过HTTP可以直接使用。而BitTorrent中的流媒体是一项付费功能。
4)大文件在IPFS中被分块/分片,因此,人们可以从不同的节点下载块,并最大限度地利用带宽。这在IPFS和BitTorrent中都可以实现。
5)对于尝试共享文件的新人来说,BitTorrent的进入门槛很高。而IPFS很轻松集成到拖放界面。
6)使用IPFS,用户可以选择他/她要的“种子”的文件。而BitTorrent要求您在torrent中为所有文件设定种子。