數據上鍊的原則與方式

由於區塊鏈技術衆所周知的不可篡改的特性,很多人就將區塊鏈作爲一個數據庫來使用,在傳統項目進行區塊鏈改造的過程中,將所有本來存入傳統RDBMS(關係數據庫)的數據,全部改成存入區塊鏈中,以爲這就是區塊鏈項目了。實際上,我們在對傳統項目進行鏈改的過程中,由於區塊鏈的特殊特性,並不能作爲傳統數據庫使用,而是要將關係數據庫、區塊鏈結合,進行業務分析,將能上鍊的,有必要上鍊的數據進行區塊鏈上鍊改造。那麼到底哪些數據適合上鍊,哪些數據不適合上鍊,到底用什麼方式上鍊?

一、哪些數據不適合直接上鍊

1. 大文件不直接上鍊。

比如視頻、圖片等。主要是因爲區塊鏈作爲一種分佈式賬本技術,在多個節點(甚至所有節點)都在本地存儲了區塊鏈完整的歷史數據。如果我們將1GB的視頻直接上鍊,那麼這個視頻將會在每個節點都佔用1GB的磁盤空間,而且一旦上鍊是無法刪除該交易的,所以我們還不能去刪除該數據,強行刪除將會導致區塊鏈數據不完整,新節點加入同步並檢查歷史賬本數據時將會因爲數據丟失而校驗失敗。所以我們一般來說區塊鏈都會限制交易的大小和區塊的大小,比如我們要求每個交易不能超過1MB,每個區塊不能超過8MB,從而杜絕大文件直接上鍊導致的磁盤急劇膨脹的問題。如果我們的大文件有上鍊的需求,可以採用哈希上鍊的方式,要麼直接計算哈希值,然後將哈希上鍊,要麼結合IPFS去中心化存儲技術,將大文件存儲到IPFS網絡中,然後IPFS會給出一個特殊的哈希值,將該哈希值上鍊。

2. 機密、敏感數據不直接上鍊。

比如合同內容、訂單內容。因爲我們的區塊鏈賬本是分佈式存儲在各個節點的,所以如果我們將機密敏感的數據直接上鍊了,那麼所有節點都會同步到上鍊的數據,在他們本地節點就可以查看上鍊後的敏感機密信息。如果有上鍊的需求,我們可以將數據存儲在私有的數據庫或者IPFS中,然後哈希上鍊,也可以通過密碼學的方法進行加密,然後密文上鍊。

3. 大量、冗餘重複的數據不直接上鍊。

比如系統日誌。一般系統日誌如果開到DEBUG級別,每秒幾千幾萬筆日誌記錄是很正常的,而且這些日誌的價值信息很低,基本都是很細節的,冗餘重複的日誌。而區塊鏈本身是一個性能有限的網絡,一般TPS都是在千級別,能做到上萬TPS的都已經是很厲害的了。而如果我們將大量冗餘重複的數據上鍊,那麼將會佔用大量帶寬,導致真正有價值的數據淹沒在日誌交易中,排隊等待打包,從而影響我們正常業務的運行。而且大量日誌上鍊也會導致區塊鏈磁盤佔用快速膨脹,對所有節點的存儲也是挑戰。我們如果有日誌上鍊的需求,一般可以按批次,將日誌進行IPFS存儲、計算哈希,或者通過一種叫KSI(無密鑰簽名基礎設施)的方式,對批量日誌建立哈希樹,將哈希根上鍊。

二、哪些數據適合上鍊

1.有價值含義的數據上鍊。

比如積分、票據、禮品卡、遊戲金幣、遊戲道具等。區塊鏈天然可用於構建價值網絡,在區塊鏈中可以很容易的支持通證(Token)的創建、流轉、銷燬等操作。一般通證分爲兩種:同質化通證(fungible Token)和非同質化通證(NFT全稱是non-fungible Token)。通證並不是公有鏈獨有的技術,在聯盟鏈中,也可以通過合約實現這兩種通證。

同質化通證用於表示同一種類型的,彼此沒有區分的價值符號,比如你有1000個國航里程積分和我有1000個國航里程積分是沒有區別的,我們都可以去兌換相同的禮品,其價值是一樣的。所以某商家的積分、某遊戲金幣都可以用同質化通證在區塊鏈上實現。

非同質化通證用於表示彼此之間有區別,具有唯一性的符號。比如遊戲道具,不同的道具可能具有不同的屬性,從而在遊戲中具有不同的表現。

對於這些有價值,而且可以看得出來是有流通需求的數據,就可以用通證來表示。

2. 有共享需求的數據上鍊。

比如黑名單共享。行業中經常有數據共享的需求,比如在銀行之間希望能夠共享信用黑名單,如果在一個人在某個銀行失信,進入了銀行的黑名單,那麼其他銀行肯定也不願意貸款給這個人。於是銀行之間可以建立區塊鏈,每個銀行將黑名單共享到區塊鏈中,利用區塊鏈共享賬本的特點,所有上鍊數據同步到每個銀行的區塊鏈節點中。當然出於隱私保護和法律法規的要求,我們不會直接明文上鍊,可以通過一些密碼學的方法,將黑名單數據在各個銀行之間共享,同時也保證不泄露更多隱私信息。

3. 有協同處理需求的數據上鍊。

比如商品溯源。一件商品從生成出廠到後面經過總經銷商、分銷商、各個物流公司、零售商纔會到達消費者手中,如果是跨境貿易,那麼中間還會經過海運、海關等環節,中間經手的環節多,參與方又是獨立的不同的公司和政府部門,所以我們想要知道每件商品到底經過了哪些環節,每個環節花費了多久的時間,從而進一步的優化流程;消費者想要知道購買的商品是否是仿冒品,中間經過哪些環節,那麼就需要將物品的溯源做好。商品溯源的一大難點就在於中間經手的環節太多,而且是不同的公司,所以一箇中心化的系統很難處理。而區塊鏈分佈式賬本的特點,可以爲每個環節的公司和政府部門建立節點,他們只需要將自己的系統對接本地的區塊鏈節點,在業務流轉過程中,通過區塊鏈實現各個環節公司的協同。

4. 有審計要求的數據上鍊。

比如核心數據操作日誌。在傳統中心化系統中,我們將商家評分、消費者評價、企業信用評估分等存儲到數據庫中,平臺系統根據數據庫中的數據決定是否優先展示,是否給予批貸款等,所以這些數據是非常核心,非常重要的。真是由於這些數據的重要性,所以也帶來了一種黑產:修改信用評分、刪除差評等。究其原因是因爲中心化數據庫系統中的數據是可以被修改,可以通過系統漏洞或者行賄數據庫管理員,由管理員修改了核心數據。而採用區塊鏈技術,我們將核心數據上鍊,基於區塊鏈不可篡改的特點,即使是IT管理員也無法篡改這些上鍊數據。所有修改都會留痕,並被審計,所有黑客攻擊篡改行爲和內部人員的數據修改行爲都無所遁形。

三、數據上鍊的方式

1.原文上鍊。

這種主要適用於只上鍊一個字段的情況,比如我們做了一個許願的DAPP,就是用戶將自己的心願寫到區塊鏈上,而這個心願可能就是幾個字,也可能是長篇大論,但不管怎麼樣,他可以認爲就是一個文本字符串,而我們的上鍊操作就是將整個字符串直接上鍊存儲。

2.格式化後上鏈。

這種主要適用於業務數據上鍊的場景,比如企業要將自己生成的所有產品上鍊,而產品本身具有很多屬性,比如:材質、總量、類型等等。企業可以將產品的所有要上鍊的屬性構建成XML對象或者JSON對象(個人更推薦使用JSON對象),然後將格式化(序列化)後的產品對象上鍊。不推薦使用protobuf、rlp等數據庫不支持的序列化方法,一般很多NoSQL數據庫是支持JSON對象的索引的,所以如果我們存入的是JSON對象,那麼還可以直接對存入的對象進行各種條件的檢索。

3.哈希摘要上鍊。

這種主要用於文件上鍊的場景。前面說到,區塊鏈不適合將大文件直接上鍊,而哈希算法可以將大文件計算出一個固定長度的摘要。(比如SHA256算法,算出來32字節的摘要)使用哈希摘要可以保證原始數據不會被篡改,因爲文件一旦被篡改,那麼算出來的哈希值和鏈上的哈希值不匹配。而爲了預防文件存儲在某個服務器硬盤上,萬一服務器硬盤壞了,那麼數據就永遠丟失了這種情況,我們可以採用IPFS這種分佈式存儲技術。IPFS負責將大文件切割成很多個小塊,然後將小塊分散存儲在多臺服務器中,從而避免了單機故障造成文件丟失的可能。同時IPFS在文件分割和存儲的同時,也會計算出一個哈希摘要,我們可以將該哈希摘要上鍊(可能還需要對哈希進行加密),在獲得文件準確的哈希值,就可以通過IPFS獲得原始文件。

4.加密後上鏈。

這種上鍊方式好主要適用於不希望其他方看到的機密敏感數據。加密一般採用對稱加密,而加密的密鑰每個文件都不一樣,我們可以將密鑰用上鍊方的公鑰進行加密,這樣只有私鑰持有方纔能解密出對稱密鑰,然後再用對稱密鑰解密鏈上數據。爲什麼不直接用數據持有者的公鑰加密呢?因爲一方面對稱加密的性能遠遠高於非對稱加密,另一方面,如果我們希望將某個鏈上數據共享給另一方,那麼他只需要解密對稱密鑰,然後將該密鑰用對方的公鑰加密上鍊,這樣對方就可以使用自己的私鑰解密出對稱密鑰,然後用對稱密鑰解密出文件。

四、數據上鍊爲我們帶來什麼安全優勢

1.所有上鍊數據基於密碼學數字簽名,上鍊數據不可被第三方篡改,不可抵賴。

這是基於區塊鏈交易的基本特性,數據要上鍊就得通過交易,而交易要被廣播和打包到區塊中,就必須要有數字簽名。而數字簽名保證了交易數據無法被第三方篡改,也保證了上鍊數據必然是私鑰持有者簽名的,不可僞造,不可抵賴。

2.基於多參與方的共識算法,防止單方面作惡,修改自己鏈上歷史數據。

區塊鏈作爲分佈式賬本,在記賬時,需要多方進行共識,只有共識通過纔會被記賬,而無論採用哪種共識算法,都需要保證單方或者少數節點的作惡行爲不會影響整個鏈的數據。而基於區塊鏈的鏈式數據和區塊頭中包含區塊所有交易的默克爾根的特點,保證了歷史數據無法被篡改。這裏的無法篡改和基於簽名的無法篡改是兩種情況。數字簽名保證的是原始數據不會被第三方篡改,但是如果一個文件只是由我用自己的私鑰簽名了,那麼我是可以修改文件的內容,然後再用我自己的私鑰重新簽名,生成一個新的合法的簽名文件的。而區塊鏈的共識算法就是如果我已經把A文件簽名並上鏈了,那麼我自己都不能把A文件改成A1後重新簽名,神不知鬼不覺的把A替換成新的A1。

3.基於分佈式技術,每個節點具有完整全賬本,防止單機故障和數據丟失。

因爲我們上鍊的數據具有多個副本,每個全賬本節點都保留了完整的區塊鏈數據,所以不存在單機故障導致整個區塊鏈網絡無法正常運行或者因爲硬盤故障導致鏈上數據丟失的可能性。

4.基於聯盟鏈的節點准入、TLS加密通訊、通道隔離等技術,保證了數據的傳播範圍可控,防止數據被竊取。

這裏主要說的是聯盟鏈技術,聯盟鏈屬於許可鏈,和開發的任何人都可以訪問的公有鏈相比,聯盟鏈是受限訪問的,即使聯盟鏈節點部署在互聯網中,但是由於節點准入的限制,並不是任何人下載了節點運行的區塊鏈程序就能接入聯盟鏈網絡的,而且節點與節點之間的通訊是通過TLS加密的,所以即使黑客截取了網絡包,也無法知道區塊鏈網絡中傳輸的內容,從而保證了數據的安全。通道隔離技術是指Fabric中的Channel的概念,相當於子鏈,不同的數據共享範圍,就對應不同的通道,只有同一個通道中的數據才能被訪問,所以如果有ABC3方組成的聯盟鏈,AB通道中的數據C是看不到的,AC通道中的數據B是看不到的,也就進一步的控制了數據傳播的範圍。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章