區塊鏈存證的技術實現

2022-02-03 14:08:14 字數 4199 閱讀 1962

眾所周知,區塊鏈具有時間戳特性和不可篡改特性,這兩個特性就用於資料的存證,這是區塊鏈誕生除了cryptocurrency之外,人們最容易想到的應用。區塊鏈存證的技術原理很簡單,在使用者簽名和傳送交易前,使用者將要存證的資料(如果資料量小,而且不用擔心隱私問題,可以直接儲存正文,如果資料量大,則計算該資料的hash)附加到交易中,然後再進行簽名廣播。記賬節點在驗證了交易的合法性後,將該交易打包到區塊中,並在區塊中附加上時間戳資訊。

目前主流的區塊鏈都具有將資料附加到交易中的特性。以位元幣為例,其支援在output中使用op_return來存放資料,不過由於位元幣網路比較擁堵,所以位元幣網路接受op_return存放的資料很有限,最多存放40個位元組,後來又有版本調整,改成了80位元組,總之是非常非常小,不過用於存放乙個hash值32位元組還是足夠了。以太坊是在交易中支援inputdata欄位,如果以太坊交易的接受位址是外部位址,那麼inputdata就是用於存證的資料內容,該資料內容就可以很長,而不是80位元組的限制,可以是一整篇文章、公開信等。palletone的交易是由不同型別的message組成,paymentpayload負責token的流轉,datapayload負責資料存放。當我們需要在palletone存證時,只需要建立具有paymentpayload和datapayload的交易,然後進行簽名,廣播。

使用區塊鏈進行資料存證,我們可以得到以下幾點共識:

在存證所在區塊的時間戳之前,該資料已經存在(區塊的時間戳特性)

拿到資料的內容,可以判斷該資料在存證後是否更改(hash函式的特性)

存證資料是由持有某私鑰的人存證的,該人不可抵賴,別人也不可冒充(區塊鏈的不可篡改和數字簽名的特性)

雖然區塊鏈存證具有以上的優勢,但是位元幣、以太坊等畢竟不是為資料存證而設計的鏈,所以在存證上只有乙個字段,對索引、擴充套件、引用的支援都沒有,需要第三方應用來實現。

基於區塊鏈的存證,主要是利用了區塊鏈的不可篡改特性和時間戳特性,但是我們怎麼能保證區塊鏈的不可篡改和時間戳是正確的呢?

如果存證資料是儲存在乙個私有鏈、聯盟鏈或者是dpos公鏈上,那麼從理論上來說,該區塊鏈沒有完全的去中心化,一旦聯合作惡,仍然有篡改歷史資料的可能。而以pow為共識演算法的位元幣、以太坊網路則更去中心化,更難以篡改歷史資料。所以,為了進一步加強存證所在鏈的安全性,我們可以定期將該區塊鏈的最新區塊hash,在位元幣或者以太坊進行存證,由他們來證明本存證鏈沒有被篡改,從而證明該鏈上的所有存證資料沒有被聯合作惡篡改,factom就是採用了類似的方式保證了本鏈的資料沒有被篡改的。以下圖右下角是factom進行位元幣網路的二次存證的示例:

區塊鏈的時間戳是指在每個區塊頭上,記賬節點在產塊時,寫入的乙個時間值。這個時間值並不要求十分精確,只要在一定的範圍內,其他節點也是可以接受的。以位元幣為例,大約每10分鐘產乙個塊,而且位元幣網路十分擁堵,所以要用位元幣進行存證,而費用給的不是很高的話,可能幾個小時,甚至幾天都不被打包。從發起存證交易到被最終打包花了幾天的時間,時間戳的誤差範圍就太大了。

對於要求更精確時間的存證,我們一方面使用高效能的公鏈或者聯盟鏈,另一方面可以國家認可的可信時間服務,比如: 等。我們並不需要對每個存證都請求時間戳服務,我們可以根據存證所需要精確到的時間範圍,每幾分鐘、幾小時請求一次可信時間服務,獲得簽名的證書,並將證書包含到區塊中即可。

以下是wosign的時間戳服務示意圖:

首先我們說索引,加入我有一張**,我記得之前在區塊上進行了存證,也就是將這張**檔案的hash放到了區塊鏈上,但是我並不記得是什麼時候放的了,那麼我怎麼查詢這張**的存證結果呢?因為位元幣和以太坊在底層資料結構上不支援,所以只有靠第三方的區塊鏈瀏覽器,或者寫個工具掃瞄全賬本,將所有存證資料放入資料庫建立索引,然後依靠資料庫索引來實現存證資料的查詢。

而palletone上進行存證資料則不需要依賴第三方工具,palletone在存證資料所使用的datapayload進行了專門的存證設計,其結構如下:

type datapayload struct

我們只需要將需要存證的**hash放到maindata中,簽名並廣播交易。當乙個全賬本在收到乙個新區塊,並儲存到本地賬本時,會解析其中包含的datapayload.maindata,並建立maindata與txhash的索引。而txhash本身也具有和unitheader之間的索引,所以我們只需要知道maindata,就可以很快的查詢到該存證所在的交易hash,所在的單元hash、高度、時間戳等。而通過交易hash作為key,又可以查詢到交易本身(包括存證人、存證花費的token、其他交易資訊等)。

在實際存證的過程中,大多數情況下,我們不可能只儲存乙個hash就完了,而是希望將該hash所對應的檔案的特徵、描述、標籤等作為附加資訊也存證起來。比如我們在做**的版權存證時,我們在maindata中存入**的hash,在extradata中以json格式存入了**的名字、作者、拍攝時間、拍攝地點以及其他的描述資訊,這些資訊不用太長,但也對**起到了很好的描述作用。擴充套件資訊由於是非標準化的,存證不同的內容,其extradata的格式和內容也千差萬別,所以並不需要建立通用的索引。

除了常見的對最終結果的存證,對乙個資料的多個版本進行存證也是常見的需求。比如我們有個多人協同寫作的文件,每個人都可以在別人完成的文件的基礎上進行進一步的修改和完善,而每一次修改的發布就是乙個版本,我們可以將該文件的所有版本每次在發布時都存證起來。對文件的多個版本進行存證,就要求每次存證時,指定乙個引用關係,比如我們必須指定本次存證的上乙個版本hash是什麼,如果沒有指定就可以認為是該文件的第乙個版本,這是一種鏈式引用關係。當然我們也可以使用另一種引用方法,即第乙個版本存證時沒有引用關係,接下來所有版本的存證,都指定引用為第乙個版本的hash;因為區塊鏈本身提供了時間戳服務,所以我們可以通過時間戳對所有後續版本進行排序,而確定先後順序。reference欄位不僅僅可以和其他存證建立引用關係,也可以和tokenid建立引用關係,我們甚至可以進一步擴充套件reference欄位的內容,形成引用的dag結構,以適配更複雜的應用場景。

對區塊鏈和位元幣有點了解的都知道,utxo是位元幣的記賬模型,在一筆交易中採用input和output來表示位元幣的流轉情況,每個input指向另乙個output。而utxo這種鏈式模型,就天然適合於溯源的底層模型。

如果我們要對某個物品進行溯源跟蹤,那麼首先要給該物品進行唯一標識,可以給該物品貼上全球唯一的***/條形碼,然後在區塊鏈系統中,我們有乙個與該物品唯一標識對應的token被創造出來。接下來只要該物品流轉到下乙個環節,那麼區塊鏈系統中也對該token進行一次轉賬,交給下乙個人。

以基於palletone區塊鏈為基礎的「藝溯鏈」為例,該區塊鏈應用主要是實現了對藝術品、工藝品的溯源。比如玉雕的溯源。當乙個玉雕大師(工作室)完成了乙個玉雕作品時,玉雕大師會為作品拍照,測量、填寫材質、尺寸、重量等資訊,並以此資訊建立乙個唯一的token。建立後的token是在玉雕大師的位址賬戶下,當玉雕要投放市場時,玉雕大師將玉雕交到門店,同時將token轉移給門店的位址。門店如果希望對玉雕進行鑑定,可以將token自己轉移給自己,同時在本次交易中,把鑑定證書的**hash,證書鏈結等作為datapayload新增到token的交易中。最終消費者在購買玉雕時,可以查詢該玉雕對應token的流轉歷史和存證資訊,並在購買玉雕後,由商家將玉雕的token轉移到使用者的位址賬戶名下。這樣可以增加消費者對玉雕作品的信任。

基於區塊鏈的存證,可以使用位元幣網路的二次存證實現存證鏈的不可篡改的可信。配合國家認可的可信時間戳服務,對區塊的時間戳進行可信證明,保證了從法律層面認可區塊鏈的存證時間戳。將存證資料分為可索引的maindata,可附加更多資料的extradata和可以建立引用關係的referencedata,可以實現大部分企業級的存證需求。存證資料和token的utxo模型結合,以及非同質化通證的支援,可以實現溯源功能的原生支援。

在溯源的技術實現上,雖然和utxo結合,使用非同質化token的方式進行溯源具有底層優勢,但是對於大批量的商品並不合適。比如藥品的溯源,如果我們為每一盒藥都建立乙個對應的token,那麼在藥品出廠,一卡車一卡車的運到經銷商時,相當於要做幾萬幾十萬個token的轉賬,這種大批量的token轉移,每乙個都需要單獨簽名和驗籤,嚴重制約了溯源的併發數,所以token化的溯源更適合藝術品、珠寶等**值,但量不大的場景。

如果針對單純的存證場景,在聯盟鏈中,token和gas就不是必須的了,如果每次存證都需要token的轉移或者gas的消耗,則嚴重影響併發。所以聯盟鏈的存證,是可以去掉對token的依賴,使用者發起的交易只需要包含2條message:datapayload和signaturepayload即可。當然在公鏈場景下,gas仍然是必須的!

區塊鏈錢包技術上怎麼實現 區塊鏈錢包的技術原理

區塊鏈錢包實現的技術原理用一句話表示就是 錢包助記詞生成了種子,種子發芽結果,果實就是私鑰,私鑰推導出了公鑰,公鑰資料的節選部分成了錢包位址。同時錢包提供了key store,他也是私鑰加密後的檔案為了配合正常的密碼使用,便捷使用者的錢包使用。我們首先要清楚幾個概念 1.私鑰 公鑰和位址產生的方法。...

區塊鏈技術

區塊鏈本質上是乙個對等網路 peer to peer 的分布式賬本資料庫。位元幣的底層就採用了區塊鏈的技術架構。區塊鏈本身其實是一串鏈結的資料區塊,其鏈結指標是採用密碼學雜湊演算法對區塊頭進行處理所產生的區塊頭雜湊值。每乙個資料塊中記錄了一組採用雜湊演算法組成的樹狀交易狀態資訊,這樣保證了每個區塊內...

區塊鏈技術

目前,比較火的區塊鏈逐漸被重視起來,其根源與其說是其技術上帶來的人類的共識與寫作機制的轉變,不如說是由位元幣炒作帶來的利潤衝擊了投機者的內心。不過,這並不一定就是壞事,對於區塊鏈這個技術而言,是有利的,因為這樣的環境下,會帶來無數的開發者磨刀立馬,為其注入力量。區塊鏈是一種能夠包含交易資訊的從前往後...