
作为一个点对点数据存储和传输的协议,IPFS是一个公共网络:参与网络的节点存储与全球一致的内容地址(CID)相关的数据,并通过公开可见的分布式哈希表(DHT)宣传他们拥有可供其他节点使用的CID。这种范式是IPFS的核心优势之一——在最基本的情况下,它本质上是一个全球分布的网络可用数据的“服务器”,既可以通过内容本身(CID)引用,也可以被拥有或想要这些内容的参与者(节点)引用。
然而,这确实意味着IPFS本身并没有明确地保护关于CID和提供或检索它们的节点的知识。这并不是分布式网络独有的。在d-web和传统网络中,流量和其他元数据都可以被监控,从而推断出网络和用户的很多信息。下面概述了这方面的一些关键细节,但简而言之:虽然IPFS节点之间的流量是加密的,但这些节点发布到DHT上的元数据是公开的。节点宣布对DHT的功能至关重要的各种信息——包括它们的唯一的节点标识符(PeerIDs)和它们所提供的数据的CIDs——因此,关于哪些节点正在检索或重新提供哪些CID的信息是公开可用的。
那么,为什么IPFS协议本身没有明确地内置隐私层?这符合该协议高度模块化设计的关键原则——毕竟,在IPFS的生命周期中,IPFS的不同用途可能需要不同的隐私处理方法。由于缺乏模块化、灵活性和适应未来的能力,在IPFS核心中明确实施隐私方法可能会 “束缚 ”未来的建设者。另一方面,让那些建立在IPFS上的人能够自由地使用适合当前情况的最佳隐私方法,确保IPFS对尽可能多的人有用。
如果担心这样做的影响,那么就要采取额外措施,例如禁用再重新提供,加密敏感内容,甚至可以在合适的情况下运行私有的IPFS网络。
提示
虽然节点之间的IPFS流量是加密的,但节点发布到DHT的基本元数据包括它们唯一的节点标识符(PeerIDs)和他们所提供的数据的CID是公开的。如果担心这对个人使用情况产生影响,那么就要采取额外的措施。
IPFS上的公开内容
IPFS上的所有流量都是公开的,包括文件本身的内容,除非它们是加密的。为了理解IPFS的隐私,可以简单分成两部分:内容标识符(CIDs)和IPFS节点本身。
内容标识符
因为IPFS使用内容寻址而不是传统网络的位置寻址方法,所以存储在IPFS网络中的每一条数据都有自己唯一的内容标识符(CID)。与该CID相关的数据副本可以存储在全球任意数量的参与IPFS的节点上的任何位置上。为了使检索与特定的CID相关的数据变得高效和可靠,IPFS使用分布式哈希表(DHT)来跟踪存储的内容。使用IPFS检索一个特定的CID时,节点会查询DHT以找到与该项目最近的节点——并默认情况下还同意在有限的时间内将该CID重新提供给其他节点,直到定期的“垃圾收集”清除一段时间未使用的内容缓存。还可以“锁定”想确保永远不会被垃圾收集的CID——明确地使用IPFS的低级别API或隐含地使用可变文件系统(MFS)——这也意味着成为该数据的永久供应者。
这是IPFS相对于传统的网络托管的优势之一。它意味着检索文件——尤其是存在于网络中许多节点上的文件——可以更快、更节省带宽。但是,需要注意的是这些DHT查询是在公开进行的。因此,第三方有可能监控这些流量,以确定请求的CID时间和对象。随着IPFS的不断普及,这种监控很有可能存在。
节点可识别性
在考虑IPFS流量监控的前景时,等式的另一半是节点的唯一的标识符本身是公开的。就像CID一样,每个独立的IPFS节点都有自己的公共标识符(称为PeerID),例如QmRGgYP1P5bjgapLaShMVhGMSwGN9SfYG3CM2TfhpJ3igE。
虽然一长串的字母和数字可能不是人类可读的“Johnny Appleseed”级别,但PeerID仍然是节点的长期的唯一标识符,它可以对PeerID进行DHT查询,特别是节点经常在同一地点(比如你的家)运行,就可以找到你的IP地址。(如果有必要,可以重置PeerID,但类似于在传统的网络应用和服务上改变用户ID,可能需要格外努力。)此外,对公共IPFS网络的长期监测可能会产生有关节点正在请求和/或重新提供哪些CID以及何时提供的信息。
加强隐私
如果在某些情况下,需要保持隐私但仍然想使用IPFS,下面概述的方法可能会有帮助。在官方的IPFS论坛上,可以随时讨论隐私问题,并获得其他人的意见或想法。
控制共享内容
默认情况下,一个IPFS节点会向网络的其他部分宣布,它愿意分享其缓存中的每一个CID(换句话说,重新提供它从其他节点检索到的内容),以及你明确钉在MFS上的CID以及你明确钉住或添加到MFS的CID,使它们始终可用。如果你想停用这种行为,你可以在你的节点的配置文件的reprovider设置中这样做。
将reprovider设置改为“pinned”或“roots”,将使节点不会认为自己是缓存中的非固定的CID的提供者——所以仍然可以使用pinning来向其他节点提供你所关心的内容,并确保这些内容在IPFS上继续可用。
使用公共网关
使用公共IPFS网关是请求IPFS托管的内容的一种方法,而不会泄露有关本地节点的任何的信息——因为没有使用本地节点!然而,这种方法确实无法享受到作为IPFS网络中的完整参与者的所有好处。
公共IPFS网关主要作为传统Web和分布式Web之间的 "桥梁";它们允许普通Web客户端通过HTTP请求IPFS托管的内容。但如果只通过公共网关而不是直接通过IPFS请求内容,这实际上并不是IPFS网络的一部分;该网关是代表网络参与者。同样重要的是,网关运营商可能正在收集他们自己的私有指标,其中可能包括跟踪使用网关的IP地址,并将这些地址与请求的CID相关联。此外,通过网关请求的内容在公共DHT上是可见的,尽管无法知道是谁请求的。
使用Tor
熟悉Tor并能熟练使用命令行,就能通过配置节点的设置来尝试通过Tor传输运行IPFS。
如果是在IPFS上构建的开发者,那么值得注意的是,全球IPFS社区仍在继续尝试使用Tor传输(参阅电子商务组OpenBazaar的这个例子),并且可能已经有一个开源的代码库可以帮助你的项目实现这一目标。
加密
网络中有两种加密方式:传输加密和内容加密。
传输加密用于在两方之间发送数据。Albert对一个文件进行加密并发送给Laika,Laika在收到文件后对其进行解密。当数据从一个地方转移到另一个地方时,这可以阻止第三方查看数据。

内容加密用于保护数据,直到有人需要访问它。Albert为他的月度预算创建了一个电子表格,并用密码保存。当Albert需要再次访问它时,必须输入密码来解密该文件。没有密码,Laika就无法查看这个文件。

IPFS使用传输加密,而不是内容加密。这意味着数据在从一个IPFS节点传送到另一个节点时是安全的。然而,如果拥有CID,任何人都可以下载和查看这些数据。缺乏内容加密是一个明智的决定。你可以自由选择最适合你的项目加密的方法,而不是强迫使用特定的加密协议。这种模块化设计使IPFS保持轻量级,并且不受厂商锁定的影响。
加密的最佳实践
隐私的问题不在于潜在的监控,而是更多关于IPFS提供内容本身的可见性,这可以通过在将内容添加到IPFS网络之前对其进行加密来缓解这种情况。虽然涉及加密内容的流量仍然可以被跟踪,但加密内容的CID所代表的数据仍然无法被没有解密能力的人读取。
加密不是牢不可破的
虽然现在的加密技术看来是很成熟的,但不能保证它不会在未来的某个时刻被破解。未来在计算方面的突破可能允许回溯并解密已经放在公共网络上的旧内容,如IPFS。如果想防范这种潜在的威胁,使用IPFS混合私人网络(在这种网络中,节点位于连接门后面,在给节点提供请求之前检查请求ACL)是一个潜在的设计方向。关于更多的细节,来自Pinata的这篇文章可能会有所帮助。
如果对使用IPFS大规模实施加密有兴趣,可以阅读关于Fleek的案例研究,这是一个快速增长的IPFS文件托管和交付服务。
基于IPFS的加密项目:
- Ceramic
- Fission.codes
- Fleek
- OrbitDB
- Peergos
- Textile
创建一个私有网络
私有IPFS网络提供全面的保护,不受公共监控,但可能缺乏公共IPFS网络所提供的规模优势。私有网络的运行方式与公共网络相同,但有一个关键的区别:它只能由已获得访问权的节点访问。而且只能扩展到这些节点。这意味着公共IPFS网络的大规模所带来的优势:例如地理弹性和高需求内容的快速检索,除非私有网络在设计和扩展时明确考虑到了这一点,否则无法实现。
对于IPFS的企业实施来说,运行私有网络是一个很好的选择。例如,请参阅Morpheus.Network上的案例研究——因为网络的拓扑结构可以完全按照需要指定和建立。
原文链接:https://docs.ipfs.io/concepts/privacy-and-encryption/
---煤油灯科技victorlamp.com翻译整理---