時(shí)間:2023-06-27|瀏覽:221
CID(content identifier,內(nèi)容標(biāo)識(shí)符)是一種用于在分布式信息系統(tǒng)(如IPFS或Filecoin)中引用內(nèi)容的格式。在IPFS中,它是長(zhǎng)這樣的:
QmcRD4wkPPi6dig81r5sLj9Zm1gDCL4zgpEj9CfuRrGbzF
這串字符并不是表示內(nèi)容存儲(chǔ)的位置,而是根據(jù)內(nèi)容本身形成的一種地址。CID中的字符數(shù)取決于底層內(nèi)容的加密哈希,而不是內(nèi)容本身的大小。
如果要?jiǎng)?chuàng)建一個(gè)CID,第一步就是轉(zhuǎn)換輸入數(shù)據(jù),即使用加密算法將任何大小的輸入(數(shù)據(jù)與文件)映射到固定大小的輸出,這種轉(zhuǎn)換稱為密碼哈希摘要,簡(jiǎn)稱哈希。它的存在是為你創(chuàng)建出一個(gè)數(shù)字“指紋”。
使用加密算法生成的散列具有以下特征:
確定性:相同輸入應(yīng)該總是產(chǎn)生相同哈希。
不相關(guān):輸入中的一個(gè)小變化應(yīng)該會(huì)產(chǎn)生一個(gè)完全不同的散列。
單向:從哈希中重建數(shù)據(jù)應(yīng)該是不可行的。
獨(dú)特性:只有一個(gè)文件可以產(chǎn)生一個(gè)特定的哈希值。
并不是所有的哈希算法都是非常安全的,而不同系統(tǒng)使用的加密算法也有所區(qū)別。為了支持多種哈希算法,IPFS與Filecoin使用multihash,即多重哈希。
之前的文章中,星際云存曾簡(jiǎn)單介紹過(guò)多重哈希,它是一種自描述的哈希,本身包含描述其長(zhǎng)度和生成它加密算法的元數(shù)據(jù),支持多種哈希算法,而非依賴于某種特定的哈希算法,是一種面向未來(lái)的哈希。
多重哈希遵循TLV模式(type-length-value)。用于生成哈希的加密算法sha2-256的標(biāo)識(shí)符為type,哈希的實(shí)際長(zhǎng)度為length,實(shí)際的哈希值為value。在IPFS中首次創(chuàng)建文件時(shí),系統(tǒng)會(huì)使用base58btc編碼來(lái)創(chuàng)建CID。
base58btc與多重哈希開(kāi)啟了CID的第一個(gè)版本,即CIDv0,它的前綴仍然有被發(fā)現(xiàn)的風(fēng)險(xiǎn)。為了解決這些問(wèn)題,一個(gè)新版本CID出現(xiàn)了,即CIDv1。
但是當(dāng)我們?cè)噲D讀取數(shù)據(jù)本身時(shí),我們?cè)趺粗朗褂玫木幋a方法呢?該數(shù)據(jù)可能是使用CBOR、Protobuf、JSON進(jìn)行了編碼,哪個(gè)才是正確的呢?
CIDv1引入了另一個(gè)前綴,即唯一標(biāo)識(shí)所使用的編碼方法,叫做多編解碼器前綴(multicodec prefix),它指示了對(duì)數(shù)據(jù)使用的編碼。
多編解碼器支持不同類(lèi)型的編碼,每種編碼都有自己的短編解碼器標(biāo)識(shí)符,使用編解碼器編碼的數(shù)據(jù)前綴(以dag-pb為例)表示為紅色的部分。其他部分則分別代表了如下含義:
為了區(qū)分不同版本的CID,CIDv1還在這個(gè)基礎(chǔ)上添加了更多前綴,以表示自己目前使用的版本。
現(xiàn)在的CID是這樣的:
為了讓這串CID變得人類(lèi)更方便閱讀,需要將上述這些二進(jìn)制通過(guò)基本編碼轉(zhuǎn)換為字符串。上文提到過(guò),CIDv0中,哈希編碼使用的是base58btc,通過(guò)它可以安全地解釋CIDv0哈希。但有時(shí)由于一些限制,還需要一些能支持更多基本編碼的方式,也就意味著還需要加上新的前綴——Multibase前綴。
Multibase前綴用于表示在字符串和二進(jìn)制格式之間轉(zhuǎn)換CID時(shí)使用的基本編碼,它僅用于CID的字符串形式:
上文為二進(jìn)制,下文為字符串
上文以Qm開(kāi)頭的為base58btc編碼的CIDv0,下文以b開(kāi)頭的則為使用base32編碼,是大部分IPFS默認(rèn)使用的標(biāo)識(shí)符
任何CIDv0都可以轉(zhuǎn)換為CIDv1,但由于CIDv1支持multibase而CIDv0不支持,因此大部分時(shí)候都不能逆向轉(zhuǎn)換。在具有以下屬性的CIDv1才可轉(zhuǎn)化為CIDv0:
multibase=base58btc
multicodec=dag-pb
multihash-algorithm=sha2-256
multihash-length=32(32字節(jié),相當(dāng)于256位)
現(xiàn)在,你應(yīng)該了解一個(gè)CID具體包含了什么,不同CID之間的區(qū)別又是什么,在去中心化網(wǎng)絡(luò)中,這些都是非常基礎(chǔ)且重要的部分。CID代表著掌控?cái)?shù)據(jù)的“鑰匙”,由Multiformats項(xiàng)目定義的各種自描述值構(gòu)成。希望你能在這篇中有所收獲。
熱點(diǎn):ipfs 數(shù)據(jù)