🦊原文:Anatomy of a CID
🦊写在前面:本文属于搬运博客,自己留存学习。
1 CID
在分布式网络中与其他节点交换数据时,我们依赖于内容寻址(而不是中心化网络的位置寻址)来安全地定位和识别数据。
CID 规范起源于 IPFS,现在以 Multiformats 形式存在,并支持包括 IPFS、IPLD、libp2p 和 Filecoin 在内的系统。尽管我们在教程中会分享一些 IPFS 的例子,但本教程实际上是关于 CID 自身的结构,它作为这些分布式信息系统的核心标识符,用于引用内容。
内容标识符(CID)是一种自描述的内容寻址标识符。
自描述是指,标识符能够自行表达其含义或者数据类型。例如 HTTP 中的 URL就是一个自描述的标识符,因为它包含了指向资源的信息(如文件路径),并且基于协议和结构,用户和系统可以理解其含义。
CID 不指示内容存储的位置,而是基于内容本身形成一种地址。CID 的长度取决于内容的哈希,而不是内容本身的大小。由于在 IPFS 中大多数内容都使用 sha2-256
进行哈希处理,因此大多数 CID 都具有相同的大小,即 256 位或称 32 字节。
例如,如果我们在 IPFS 网络中存储 土豚 的图像,它的 CID 将如下所示:
QmcRD4wkPPi6dig81r5sLj9Zm1gDCL4zgpEj9CfuRrGbzF
访问方式:https://ipfs.io/ipfs/QmcRD4wkPPi6dig81r5sLj9Zm1gDCL4zgpEj9CfuRrGbzF
创建 CID 的第一步是使用 加密算法 转换输入的数据。具体来说,是将任意大小的输入映射到固定大小的输出。如下图所示:
这种转换称为 加密哈希摘要(cryptographic hash digest)或简称为 哈希。
个人理解:不管是文本、图片还是视频,它们在计算机中都是以二进制的形式进行存储的,即一个 01 字符串。而哈希函数要做的事,就是将不同文件不同长度的 01 字符串转换为固定长度的 01 字符串。
使用的 加密算法 必须生成具有以下特征的哈希:
- 确定性:对于任何给定的输入数据,加密算法必须始终产生相同的输出哈希,确保一致性。
- 抗碰撞性:即使输入数据发生微小变化,也应导致完全不同的哈希值,以保证数据的唯一性。
- 不可逆性:从哈希值应当无法反推出原始数据,确保数据的隐私和安全。
- 唯一标识:每份文件都应该有一个独特的哈希值,确保数据的不可篡改性和可追溯性。
当我们使用内容地址去获取数据时,我们可以保证看到数据的预期版本。这与中心化网络上的位置寻址有很大的不同,在中心化网络中,给定地址(URL)处的内容可能会随时间变化。
说明:在去中心化网络