IPFS地址和加密哈希的注释
由于我们花了一些时间来研究为什么这个内容寻址系统如此特别因此值得谈谈IPFS地址的构建方式。IPFS中的每个地址都是一个multihash,这意味着该地址将有关使用的散列算法和散列输出的信息组合成一个字符串。IPFS多哈希具有三个不同的部分:多哈希的第一个字节表示使用哪种哈希算法生成哈希;第二个字节表示散列的长度;剩下的字节是哈希函数输出的值。默认情况下,IPFS 使用SHA-256算法,该算法产生 32 字节的哈希值。这由Base58 中的字符串“Qm”表示 (IPFS 地址的默认编码),这就是为什么本文中所有示例 IPFS 地址都采用“Qm…”形式的原因。

虽然 SHA-256 是当今使用的标准算法,但这种多哈希格式允许 IPFS 协议支持其他哈希算法生成的地址。这允许 IPFS 网络转向不同的算法,如果世界在未来某个时候发现 SHA-256 的缺陷。如果有人使用另一种算法对文件进行哈希处理,则该文件的地址将以“Qm”以外的一些字符开头。
好消息是,至少就目前而言,人们认为 SHA-256 具有许多特性,使其成为强大的加密散列算法。其中最重要的是 SHA-256 是抗碰撞的。当两个不同的文件在运行 SHA-256 算法时产生相同的哈希值时,就会发生冲突。要了解为什么防止冲突很重要,请考虑这个简短的场景。想象一下,某个 IPFS 用户 Alice 上传了一个带有一些哈希值的文件,而另一个用户 Bob 上传了一个不同的文件,该文件恰好产生了完全相同的哈希值。如果发生这种情况,网络中将有两个具有完全相同地址的不同文件。因此,如果某个第三方 Carol 向该地址的内容发出 IPFS 请求,她不一定知道她将收到 Bob 的文件还是 Alice 的文件。
SHA-256 极不可能发生碰撞。由于 SHA-256 计算 256 位哈希,因此该算法可以生成 2^256 个可能的 IPFS 地址。因此,IPFS 中有两个文件产生冲突的可能性很低。非常低。如果你对更多细节感兴趣,生日攻击维基百科页面有一个很酷的表格,它准确地显示了碰撞的可能性,给定足够强大的散列算法。