王東臨:資料的加密和去重是區塊鏈儲存的兩大關鍵技術

weixin_34321977發表於2018-12-07

巴位元加速器推出的全球線上區塊鏈技術深度對話欄目Geekhub Global Online,定期邀請世界各地的資深技術大咖連線對話。同時Geekhub技術社群成員也可以參與直播互動。

11月30日14時,YottaChain創始人王東臨帶來了題為“區塊鏈儲存的價值信仰”的線上分享。

YottaChain是由國際頂級科學家帶領的專業團隊打造的,通過連線分散的儲存資源,構成一個具有自修復能力的規模浩瀚的全球共享的統一儲存池,確保每個人的資料主權,在儲存效率、資料可靠性、資料安全性和儲存成本等方面都做到極致。


13607604-b5071b9cd3b154f6.png

以下為文字實錄,由巴位元加速器整理髮布:

大家好,我是王東臨,YottaChain創始人,同時,我也是研究密碼學和儲存的科學家,具有20年+的密碼學應用經驗和將近10年的分散式儲存經驗。

我認為,區塊鏈包含了高科技信仰和商業信仰,給社會提供了創新的產品和服務,讓人類更美好,引領社會的發展,同時形成了一個商業閉環,人人都收益。有人會問,這樣的專案有嗎?當年也有人說網際網路是泡沐,是自娛自樂,對社會沒有價值。

但是,今天我們看到了,網際網路是能夠創造價值的。我相信網際網路是可以創造價值的,為什麼呢?我有我的依據。因為至少在區塊鏈儲存(即去中心化儲存+區塊鏈激勵),它是能夠體現出價值的。

儲存是區塊鏈最佳落地應用場景

儲存是區塊鏈最先最早最好的落地的應用場景。有以下幾點原因:

1.儲存本身就是有去中心的要求

有的專案加區塊鏈是生搬硬套,其實加上區塊鏈和不加區塊鏈沒有本質區別,而儲存不一樣,因為儲存的中心化已經到了極致了。前幾個月騰訊雲因為硬體故障加運維人員操作不當把使用者的資料丟了,再也找不到了;

微軟在德克薩斯的資料中心被天打雷劈,製冷裝置被雷電劈壞了,導致伺服器過熱,停止服務了20多小時,這對美國的很多服務造成了很嚴重的影響。這些例子都說明單一資料中心的可靠性已經到了極致。要防止每一個這樣的小概率事件,進一步提高可靠性,這就需要去中心化,靠地理位置的分散來實現故障域的進一步隔離,從而提高可靠性。

去中心化是能夠極大提高容災能力,以及抗DDoS。現在DDoS攻擊的難度越來越低,市面上購買幾十G流量很便宜,很多網站都經不起這麼大流量攻擊。但是去中心化儲存,區塊鏈的儲存,他是天然的抗DDoS,全世界幾百萬個節點,其中幾十個,幾百個甚至幾千個節點被攻擊了都沒有問題。同樣,區塊鏈儲存還擁有容災方面這個奢侈特性。

2.儲存有一個資料去重的特性

可以將儲存空間放大很多倍,使用者越多資料越多,則放大倍數越大。

3.區塊鏈的激勵可以激勵礦工加入

可以激勵使用者使用,無需鉅額投資即可迅速在全世界招募眾多礦工節點加入區塊鏈儲存系統並吸引大量使用者使用,很快形成規模,從而構建一個規模越來越大使用者越來越多、可靠性越大越高成本越來越低的儲存系統。

例如,一個擁有100GB儲存空間的人,如果用來存自己的資料只能存100GB,但如果將該儲存資源貢獻用於挖礦,再利用挖到的數字貨幣購買儲存空間,將可以儲存200GB的資料,並且富餘很多數字貨幣。這種方法可以儲存更多的資料且讓人獲得很多額外的數字貨幣,可以有效地激勵儲存資源的擁有者加入系統挖礦。

4.儲存是數字形式存在的實體經濟

既是物理的,又是數字的,所以儲存可以無需任何中介直接tokenize,是區塊鏈直接連線物理世界的很好的應用場景。其它很多領域都存在一個嚴重的問題,鏈上資料固然無法篡改,但誰能確保上鍊的資料是真實可靠的呢?區塊鏈儲存就可以完美解決這個問題。

5.區塊鏈儲存至少兩個方面的優勢

相較於中心化儲存,區塊鏈儲存在持久化儲存和網路加速這兩個市場上都有壓倒性的優勢,這兩個市場的規模達數百億美元,足夠大。

6.區塊鏈儲存或能超越AWS這樣的中心化儲存的規模

就像滴滴自己可以沒有一輛車,但很快成為中國最大計程車公司一樣,這種去中心化的輕資產的模式很容易擴大規模。區塊鏈儲存也是類似的性質,完全可能在將來超越AWS這樣的中心化儲存的規模。

決定產業格局的加密去重技術

在IPFS/FileCoin或迅雷玩客雲這樣的區塊鏈儲存系統中,主要面向的是網路加速市場,規模不到100億美元,而實際上持久化儲存的市場規模更大。

很多人都以為礦工的儲存成本不可能低於AWS/Google/阿里雲這樣的超級大玩家,所以認為區塊鏈儲存的成本要高於中心化儲存,這個觀點是錯誤的。實際上,區塊鏈儲存的成本是完全可以更低的,原因是:

1.資料去重技術使得儲存相同資料佔據的硬碟空間減少5-10倍,儲存成本大大降低;

2.每個儲存節點可以只有很少的儲存裝置,不需要專門的製冷系統(佔資料中心耗電的三分之一甚至一半),靠自然通風即可散熱,這樣整個系統的CapEx和OpEx都大幅下降;

3.家用儲存礦機無需額外花費頻寬費用,無需支付租房成本;

4.家用電費也比工業用電更便宜;

5.對設計得比較好的區塊鏈儲存系統來說,絕大多數儲存節點無需專業運維工程師駐場,每個節點都自動化執行而且一旦有意外故障失效會有其它節點自動頂上,節省了昂貴的運維費用;

6.有大量儲存節點都是利用閒置硬碟空間,屬於沉沒成本,邊際成本接近零。

當然,區塊鏈儲存系統設計得不夠好的話,不見得能具有剛才說的那些優點。例如IPFS,到現在為止的版本,其資料可靠性還遠遠不如中心化儲存。IPFS是為CDN用途設計的,CDN的特點是不在乎丟資料,只要熱點資料被緩衝了就好,CDN沒了資料就回源,根本無所謂。但是這樣的系統如果用於持久化儲存,就是災難。

下面介紹區塊鏈儲存的兩大關鍵技術:資料加密和資料去重

資料加密

對於大公司(例如AWS、Google、Dropbox)提供的中心化儲存來說,資料加密是一個亮點,但不是必須的。因為使用者可以信賴大公司的品牌、內控體系,指望大公司不會作惡即使事實上這一點並不是那麼可信。對於去中心化儲存來說,資料加密就成為儲存個人和企業資料的必備要求。

因為去中心化儲存的節點本身不可被信任的,根本不知道是什麼爛人存了你的資料。一不小心就成了陳冠希了。

此外,原始碼是開放的,而且每個儲存節點都可以自由訪問。所以個人和企業資料都必須做資料加密,而且是“零知識”的資料加密,即除了資料所有者或其授權者外,其他任何人(包括儲存節點的擁有者、系統的設計者和開發者)對該資料都一無所知,即使作惡也無法窺視資料。

經常會看到一個說法,說中心化的服務(例如百度)經常會侵犯使用者的資料隱私,所以要去中心化,就可以解決這個問題了。這個說法是非常錯誤的。實際上,去中心化之後這個問題更嚴重了。中心化儲存時有一個人可以偷你的資料,去中心化之後就變成人人都可以偷你的資料了。

所以,零知識資料加密對區塊鏈儲存是至關重要的,甚至可以說是決定性的。

資料去重

如果多個人擁有相同的資料,不重複儲存而是合併共用同一份空間,稱為“去重”(即去掉重複資料),也稱為重刪(即重複資料刪除)。

注意資料去重和冗餘儲存是不同層面的概念。即使是去重後只存一份資料,這份資料也必須用冗餘編碼分成很多碎片,分別儲存在多個不同節點上,就算其中有部分節點資料丟失也不影響資料的完整性。這麼多個節點上儲存的碎片合起來稱為一份資料。

這兩個概念之所以有時候會產生誤導或混淆,是因為有一種最簡單的冗餘演算法是多副本儲存,例如IPFS。這種情況下,多個使用者擁有的相同資料會通過去重而只儲存一份,但這一份是有多個副本。

資料重複率與使用者數和資料量呈正相關:若使用者數越多,資料量越大,則重複率越高。資料重複率越高,去重之後的平均儲存成本就越低。如果平均資料重複率是10倍,則1GB空間平均可以儲存10GB的資料,平均儲存成本降低10倍。

前面介紹的區塊鏈儲存的強大激勵模型也是建立在資料去重的基礎之上的。通過全球資料統一去重,將資料去重率提高到極致,相當於一塊硬碟變成10塊盤,2塊用來存資料,8塊用來賺錢。

資料加密和資料去重都對區塊鏈儲存起到決定性的作用。但現在有一個核心關鍵問題,即加密去重不可兼得的問題。

在行業中存在一個“公知常識”:資料加密後不能去重。即零知識資料加密與資料去重二者不可兼得,最多隻能選一個。一個表面的原因是資料加密後就變成亂碼,無法識別資料重複。這其實並非問題的關鍵,完全可以儲存資料明文的hash值,通過比較hash值來識別重複資料。這個解決方案仍然存在很多坑,例如假冒Hash值進行攻擊,但這些坑還都有辦法解決的。加密後去重的核心問題在於資料的授權。即A儲存的資料,當B也要儲存相同的資料時,如何將A的資料授權給B使用而且還不影響A的資料安全性。

既然是零知識加密,怎麼可能讓B能夠使用A的資料呢?所以大家都認為是無解的,零知識資料加密與跨使用者資料去重二者只能選一個。

在這種情況下,IPFS選擇了資料去重,犧牲了資料安全性,這就是IPFS設計用於儲存網頁等公開資料的真正原因。有一些區塊鏈儲存專案選擇了資料加密,犧牲了資料去重,雖然保證了資料安全性,但儲存成本大幅度上升,而且犧牲了一種極其有效的激勵模型。

區塊鏈儲存開放平臺

我研究密碼學和儲存多年,其中比較重要的發明就是解決了加密去重的問題。我用研究加密去重問題不能解決的證明過程的時候,發現證明是不夠嚴謹的,被我找出了漏洞,就從這個漏洞中找到了解決問題的方法。

據此,我提供了一種特殊的機制,除了使用者許可權表外,還要維護一個全域性的後設資料表,記錄明文Hash和密文Hash的對應關係,在寫入資料時要先查詢是否存在相同Hash的資料,如果沒有該項再存。具體流程如下

1.Hash(Data) →Hdata 計算明文Hash 

2.If CheckDup(Hdata) = TRUE goto 11 如果已經存在相同的資料,轉到第11步 

3.RandomSym()→Stk 隨機生成對稱金鑰作為檔案的儲存金鑰 

4.Enc(Stk, Data)→EncData 用儲存金鑰加密檔案 

5.Hash(EncData) →Henc 計算密文Hash

 6.GenKey(Data) →Sdata 從資料明文生成對稱金鑰,可以用資料明文加鹽之後計算Hash值的方式生成。之所以要加鹽是因為明文Hash是一個公開的值,不加鹽的話不擁有資料明文的人也能獲得該金鑰。為了保證一致性,鹽值可以是一個固定的演算法生成,例如先做第一次Hash作為鹽值,然後加鹽後再計算第二次Hash作為對稱金鑰,兩次Hash可以採用不同的演算法。 

7.Enc(Hdata, Stk) →EncStk’ 以資料明文生成的對稱金鑰來加密儲存金鑰。這是非常“詭異”的一步,以明文作為金鑰,金鑰作為明文來加密,大多數人看這個演算法的時候都以為寫反了,實際上就是專門這麼設計的,而且這一步是TruPrivacy的核心步驟。 

8.PutStatic(EncData) 將加密資料存入到持久化靜態儲存 

9.PutMeta(Hdata, Henv,EncStk) 將密文Hash和明文加密的儲存金鑰記錄在全域性後設資料表中,記錄在明文Hash項下 

10.Goto 14 

11.GetMeta(Hdata) →Henv,EncStk’ 從全域性後設資料表中取出密文Hash和明文加密後的儲存金鑰 

12.GenKey(Data) →Sdata 以同樣演算法從資料明文生成對稱金鑰 

13.Dec(Sdata, EncStk’) →Stk 用該對稱金鑰解密出儲存金鑰 

14.Enc(Spub, Stk) →EncStk 以使用者的加密公鑰加密儲存金鑰 

15.PutPri(Hdata, EncStk) 將加密公鑰加密後的儲存金鑰存入到使用者許可權列表, 記錄在明文Hash項下。

在Get資料的時候,從全域性後設資料表中根據明文Hash取出對應的密文Hash,通過密文Hash中從持久化靜態儲存中取出密文,從許可權列表中取出加密後的儲存金鑰,以使用者的加密私鑰對加密後的儲存金鑰進行解密獲得儲存金鑰,用儲存金鑰對加密資料進行解密,獲得資料明文。

1.GetMeta(Hdata)→Henc 從全域性後設資料表中通過明文Hash獲取到密文Hash 

2. GetPri(Hdata)→EncStk 從許可權列表中通過明文Hash獲取到加密公鑰加密的儲存金鑰 

3. GetStatic(Henc)→EncData 用密文Hash從持久化靜態儲存中取出密文

 4.Dec(Sprv, EncStk)→Stk 以使用者的加密私玥對使用者加密公鑰加密後的儲存金鑰進行解密獲得儲存金鑰 

5.Dec(Stk, EncData)→Data 解密獲得檔案資料

今天的技術公開課到此結束,謝謝大家。

相關文章