当前位置:首页区块链本文探讨了CID的起源和发展

本文探讨了CID的起源和发展

当我们在去中心化的web上与对等方交换数据时,我们依靠内容寻址(而不是中心化的web位置寻址)来安全地定位和标识数据。在本文中,学习重要的去中心化web概念的基础知识,如内容寻址、加密哈希、内容标识符(content identifier,CID)和与对等方共享。

01

什么是CID?

CID规范起源于IPFs,目前采用多种格式,支持IPFs、ipld、libp2p和filecoin等多种项目。本节介绍CID本身的分析。这些分布式信息系统被用作参考内容的核心标识符。

内容标识符(CID)是自描述的内容寻址标识符。它不指明内容存储的位置,但基于内容本身形成一个地址。CID中的字符数取决于基础内容的加密哈希,而不是内容本身的大小。由于IPFs中的大部分内容都是使用散列的,所以您遇到的大多数cid大小相同(256位,相当于32字节)。这使它们更易于管理,特别是在处理多个内容时。沙2-256

例如,如果我们将Aardvark的图像存储在IPFs网络上,其CID将如下所示:

Qmcrd4wkppi6dig81r5slj9zm1gdcl4zgpej9cfurrgbzf公司

创建CID的第一步是使用加密算法转换输入数据,该算法将任意大小的输入(数据或文件)映射到固定大小的输出。这种转换称为加密的哈希摘要或只是哈希。

本文探讨了CID的起源和发展

使用的加密算法必须生成具有以下特征的哈希:

1确定性:相同的输入应该总是生成相同的散列。

2不相关:输入中的微小变化应该会产生完全不同的散列。

3一种方法:从散列重建数据应该是不可行的。

4唯一:只有一个文件可以生成特定的哈希。

请注意,如果我们更改Aardvark图像中的单个像素,我们的加密算法将为该图像生成完全不同的哈希值。当我们使用内容地址来获取数据时,我们保证看到数据的预期版本。这与中心化式web上的位置寻址非常不同,在中心化式web上,给定地址(URL)上的内容可能会随时间而变化。

加密的散列不是IPFs独有的,并且有许多散列算法,例如和,不再安全。默认情况下,IPFs使用sha2-256,但是CID几乎支持任何强加密散列算法。sha2-256湖泊BSHA3-256sha3-512sha1md5

02

多重散列

有时,哈希算法可能被证明是不安全的,这意味着它不再符合我们前面定义的特征。这已经发生了。随着时间的推移,对于IPFs和其他分布式信息系统中的内容寻址,其他算法可能还不够。因此,为了支持多种加密算法,我们需要知道使用哪种算法为特定内容生成哈希。

本文探讨了CID的起源和发展1

那么,我们该怎么办?为了支持多哈希算法,我们使用了多哈希算法。

多重散列格式

多重散列是一种自描述散列,它包含元数据,描述其长度并生成加密算法。多格式cid面向未来,因为它们使用散列来支持多种散列算法,而不是依赖于特定的散列算法。

多哈模式如下。本质上,quot;的前缀是应用hash算法和hash的结果。TLVtype长度值TypeLength

本文探讨了CID的起源和发展2

1类:用于生成哈希的加密算法的标识符(例如,的标识符将以十六进制表示)-所有标识符请参见多代码表sha2-256180×12

2长度:散列的实际长度(相当于32字节)sha2-256256

3Value:实际哈希值

为了将CID表示为压缩字符串而不是普通二进制(一系列S和S),我们可以使用基本编码。

当第一次创建ipf时,它使用编码来创建一个CIP,看起来像1:10base58btc

qmy7yh4uquoxhlpfo2xbhxkhbvfopwmqusa92pxnxjqpu公司

多散列格式和编码支持CID的第一个版本(现在称为版本0),其初始字符仍然很容易找到。base58btcCIDv0Qm。。。

然而,随着时间的推移,人们开始怀疑这种多哈希格式是否足够

1我们如何知道使用什么方法来编码数据?

2我们如何知道使用什么方法来创建CID的字符串表示?我们会一直用吗?基准58BTC

为了解决这些问题,有必要改进CID的下一个版本。

03

Cidv1:多代码前缀

Cidv0使用多个哈希来支持多个哈希函数。这意味着我们可以使用不同的哈希算法来成功地生成特定内容的哈希,并且我们可以在将来使用这个哈希来识别内容。

但是,当我们试图读取数据本身时,我们如何知道要使用的编码方法呢?它可以用CBOR、原、常规ON等进行编码。为了解决这个问题,引入另一个唯一标识所用编码方法的前缀。

多代码前缀指示要对数据使用的编码。

本文探讨了CID的起源和发展2

Multi-code C支持多种不同类的编码,每种类都有自己的短编解码器标识符,如完整的表所示。

在上面的示例中,我们可以看到使用编解码器编码的数据是如何在我们的CID中表示的。是许多不同类的ipld(行星间链路数据)编解码器之一。由于IPFs总是使用这些ipld格式中的一种作为数据,因此IPFs CID中的多代码前缀将始终是ipld编解码器。达格pb达格pb

但是,应该注意的是,multi-code不仅仅由IPFs和ipld使用。除了multi-hash和其他自描述协议之外,它也是multi-format项目的一部分,该项目与IPFs分离,现在支持各种其他项目和协议,包括我们在这里学习的CID规范。

Cidv1:版本前缀

现在我们添加了多个代码,版本1 CID包含以下字段:

但是,如果您还记得上一课中版本0 CID只包含组件,那么如何区分不同版本的CID?你猜对了,更多的前缀!

本文探讨了CID的起源和发展3

我们的CID如下:

表示CID的版本(0或1)。

04

Cidv1:多基前缀

因此,现在cidv1以二进制形式(0和1)为我们提供以下信息:-

由于二进制CIP不是很友好,我们可以用字符串的形式表示这些二进制CID(二进制数据用文本表示)。例子:

bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi公司

在二进制格式和字符串格式之间转换数据需要基本的编码,因此在使用字符串CD时,了解应用于二进制数据的基本编码类非常重要。但我们如何认识到这一点?

哈希值总是使用编码。这意味着我们可以安全地解释散列,假设它们正在使用中。但是,由于环境限制(如DNS名称),我们还需要支持其他基本编码功能。为此,我们可以添加另一个前缀!

CIDv0base58btcCIDv0base58btc

05

多基前缀

多基前缀表示用于在字符串格式和二进制格式之间转换CID的基本编码。它只用于CID的字符串格式

本文探讨了CID的起源和发展4

让我们以字符串形式检查两个CID示例:

本文探讨了CID的起源和发展5

我们知道第一个,因为它是从。所有从0开始的哈希都可以安全地解释为版本0的CID。

CIDv0Qm…Qmbase58btc

第二个示例从一个基本编码的前缀标识符开始,默认情况下大多数IPFs实现都使用这个标识符。bbase32数据库

有关标识符的完整列表,请参阅下图。

本文探讨了CID的起源和发展6

06

一个哈希,多个CID版本

您可以将任何IPFs CID粘贴到一个方便的CID检查器中,以可视化其所有前缀及其表示形式。

我们将使用cidv0和cidv1格式来查看这个工具的一些结果。

例1:cidv1

bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi公司

第一个例子是版本1 CID。

本文探讨了CID的起源和发展7

查看CID Checker工具的结果,我们可以看到该工具可以为我们分析的几个部分

1人类可读的CID:分解CID的每个部分,这样我们人类就可以很容易地阅读它

2多基:是基的标识符,在本例中为。代码BBase32

3Multicodec:编解码器的标识符。在本例中,ipld格式代码为0x70DAG Pb

4Multihash:将Multihash分解为所用哈希算法的代码(yes)、哈希长度(256位,相当于32字节)和内容哈希本身(抽象十六进制)。18沙2-256

从quot;人类可读的cidquot;细分中,我们可以看到内容的原始哈希是在添加适当的cidv1前缀之前。C3C4733EC8AFFD06CF9E9FF50FFC6BCD2EC85A6170004BB709669C31DE94391A

例2:cidv0

qmbwqxbekc8tqskc98xmwnzrzdtrlimpl8wbunr公司

本文探讨了CID的起源和发展8

版本0cid显示了一些不同的结果:和被列为quot;,隐式quot;。由于版本02d没有这些前缀,因此始终假定它们分别为和。

多基multicodecbase58btcdag-pb

在标签下面,我们看到:这与第一个示例中的CID相同!CID检查器为我们提供了从cidv0到cidv1的转换。

根据CIDV1bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi

还要注意的是,quot;人类可读的cidquot;的结尾(前缀之后)在本cidv0示例中与cidv1示例中完全相同。C3C4733EC8AFFD06CF9E9FF50FFC6BCD2EC85A6170004BB709669C31DE94391A

为什么?这两个cid指向相同的内容。基本上,它是两个不同版本的CID规范中表示的相同hash()。

C3C4733EC8AFFD06CF9E9FF50FFC6BCD2EC85A6170004BB709669C31DE94391A

转换CID版本

您可以将任何前缀转换为,因为隐式前缀在变为显式前缀之前变为显式前缀。但是,由于支持和不支持多个编解码器和基,因此并非所有代码都可以转换为。实际上,只有具有以下属性的才能转换为:

cidv0cidv1v0cidv1cidv0cidv1cidv0cidv0cidv1cidv0

1、 多基=base58btc

2、 多色dec=dag pb

3、 多哈希算法=sha2-256

4多哈希长度=32(32字节,256位)

为了验证这个理论,你可以在IPFs网络上看到我们心爱的土豚图片:https://ipfs.io/ipfs/QmcRD4wkPPi6dig81r5sLj9Zm1gDCL4zgpEj9CfuRrGbzF

1在浏览器中打开链接并从URL的末尾**CID(qmcrd4wkppi6dig81r5slj9zm1gdcl4zgpej9cfurgbzf)

2在新的浏览器窗口中,将其粘贴到CID Checker工具中,并查找屏幕底部显示的等效cidv1值

3返回Aardvark选项卡,用原始URL中转换的CID替换CID,并刷新页面v0v1

你应该看到我们奥尔德沃克的同一张照片。

温馨提示:

文章标题:本文探讨了CID的起源和发展

文章链接:https://www.btchangqing.cn/184849.html

更新时间:2022年11月19日

本站大部分内容均收集于网络,若内容若侵犯到您的权益,请联系我们,我们将第一时间处理。

区块链行情

2009年以来五种代币发行模式的演变

2021-1-25 20:38:54

区块链

新集团:探索比特币矿商的期权策略组合

2021-1-25 20:42:19

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索