《資本天道—區塊鏈+未來》—區塊鏈的技術挑戰
編者按:
由三十餘位行業精英共同編寫的《資本天道—區塊鏈+未來》一書已寫作完成。現在正在緊張的印刷過程中。為了滿足大家一睹為快的要求,我們將分段刊出本書內容。
區塊鏈的擴展性
前文中也已經反覆強調,今天加密貨幣領域面臨的最大問題就是擴展性問題。常有的一個說法是,主流的支付網路能夠處理比如每秒20000筆交易,而當前的比特幣網路每秒只能夠處理7筆。從最根本來說,這種說法有問題,只要調整下每個區塊的大小限制,比特幣能夠很容易支持每秒70或者700筆交易。但是,如果比特幣真的達到那種規模,我們就會面臨一個問題:對於普通用戶來說,已經不可能再運行一個完整節點了,完整節點只屬於能夠負擔起其資源消耗的小部分商業機構。因為挖礦只需要區塊的頭部,甚至於礦工挖礦也不再下載整個區塊鏈(實際上大多數還是下載的)。
這樣帶來的最大問題是信任:如果只有很少一部分的實體能夠運行完整節點,這些實體就能夠共謀,額外給他們自己大量比特幣,對於其他用戶來說,如果不處理整個區塊,就不能發現這個塊是非法的。儘管這樣的詐騙事後可能被發現,但權力變化可以形成一種局面,默認的行為是簡單地跟隨這樣一個欺詐鏈(威權可以製造一種恐怖氛圍來鞏固這樣的行為),這樣切換回去就很難協同了。因此,極端來說,比特幣如果每秒是7000筆交易,它的安全屬性就和 Paypal這樣的中心化系統基本類似,然而我們需要的是加密貨幣最初承諾的去中心化的能夠處理7000TPS的系統。
最理想的情況,一個區塊鏈的設計,在對抗51%攻擊時和比特幣有類似的安全屬性,單個節點處理不超過全部交易的1/m並且n能夠根據需要向上擴展。這讓區塊鏈的架構能夠處理任意高的TPS,同時還能保證中本聰所設想的去中心化程度。
問題:設計一個區塊鏈,擁有和比特幣相似的安全性,並保證網路正常運行需要的最強節點的最大數量和交易數量基本上是線性關係。
其他假設和需求
網路中有大量的礦工。
礦工可能使用專用硬體或者通用硬體。專用用硬體處理特定任務時,相比非專用硬體更強大(比如1000倍)。
普通用戶使用通用硬體。
理想想情況下,一筆交易在幾個塊之後(比如網路規模的對數),需要全網的51%6的算力才能夠逆轉。但是,交易支付非常少的手續費獲得相對對較低的安全等級的解決方案是可以接受的,同時也要避兔一些情況,比如攻擊者通過同時逆轉很多筆小的交易獲得收益。
理想情況下,解決方案應儘可能是一個通用的基於賬號的區塊鏈(例如如以太坊),但是特定的解決方案,比如貨幣、域名註冊或者其他用例也是可接受的。
一、任意的計算證明
零知識證明的聖杯可能是這樣一個模型:給定程序P和輸入I,創建一個零知識證明,運行P並輸入1得到結果O,I要公開的話,可以把輸入I嵌入程序中。這樣的一個基元,如果有的話,對加證明本身可以被快速驗證(在多項式對數時間內,最理想是恆定時間),而原始的計算需要花費很多步才能完成。理理想的設置下,連輸入Ⅰ都可以隱藏起來,只要證明運行P就可以得到O,如如果輸入1要公開的話,可以把輸入I嵌入程序中。這樣的一個基元,如果有的話,對加密貨幣會產生深遠的影響 。
1.1.區塊鏈的擴展性問題很容易解決。
礦工不用發布包含很多交易的區塊,他們只要發布一個證明,他們運行了區塊鏈的狀態更新程序(P),交易列表作為輸入1,得到一個輸出;因此,交易不再需要網路中的每個節點去驗證,只要由個礦工去處理,其他礦工和用戶可以快速地驗證計算證明,如果證明結果正確,他們就接受這個新的狀態。這不是一個徹底的解決方案,因為還是需要傳遞交易數據,但用這種方式構造塊,問題會變得非常容易。
1.2.區塊鏈的隱私問題很容易解決。
上面的區塊鏈的擴展性的解決方案隱藏了每筆交易的細節;只透露了這些交易都是合法的,除了交易的發起方和接受方其他用戶看不到這筆交易。
使用一個圖靈完備的共識網路作為一個通用的分散式的雲計算系統在計算上是完全可行的:如果你需要做任何計算,你只要發布一個程序給礦工,礦工幫你運算完程序後,然後把結果以及結果有效的證明發送給你。
1.3.這個方向有大量的研究,其中一個名為「SCIP」的協議( SuccinctComputational Integrity and Privacy)已經在測試環境中運行了,但是有點不足,初始化時需要一個可信第三方來設置密鑰。
問題:創建程序 POC- PROVE(P,I)->(O.Q)和POC_ VERIFY(P,O.Q)->,POC -PROVE運行程序P並輸入1,得到結果O和一個計算證明Q, POC- VERIFY使用程序P驗證Q以及O是否合法。
需求以及額外的假設
POC -PROVE的時間複雜度應該在 O(n"polylog(n)之內,這裡的n是程序運行需要的步數
POC- VERIFY的時間複雜度是常數或者是運算步數的對數,程序使用的最大內存相對步數最多是線性的。
協議不需要可信任的第三方。如果需要可信第三方(TTP),協議應該包括一個機制,通過安全多方計算來模擬一個出來。
二、代碼泥淆
我們知道如何對數據進行加密已經有些年頭了,發明了各種簡單、健壯、經過良好測試的對稱加密和非對稱加密演算法,對稱加密使用同樣的密鑰進行加密以及解密;非對稱加密使用不同的加密和解密密鑰,並且知道其中一個無法推導出另外一個。還有另外一種可能非常有用,但現現在還沒有可用演算法的加密:對程序進行加密、聖杯是創建一個混淆器O,給定一個程序P,混淆器可以生成另外個程序OP)=Q,給定相同的輸入,P和Q產生相同的輸出,並且很重要一點,Q不泄漏程序P的內部信息。這樣就可以在Q里隱藏一個密碼,一個私鑰或者使用Q隱藏一個專利演算法。
在2007年,一個完美的「黑盒子」加密被證明是不可能的;本質上是因為通過一個黑盒子來訪問程序和擁有程序的代碼是不同的,不管如何混淆,總是可以構造一個特定類型的程序來抗混淆。然而,有一種較弱的混淆,我們稱之為不可區分混淆,卻很可能可以做到。不可區分的混淆器O是指,如果你有兩個等同(例如:同樣的輸入得到同樣的輸出)的程序A和B,計算O(A)=P和O(B)=Q,如果不知道A和B,從外部無從判斷程序P是從A還是B混淆而來的。
這種類型的混淆看上去似乎很局限,但是對於很多應用來說已經足夠了。我們可以考慮兩個程序F和G,F程序內含「12345」所對應的32位元組的Hash字元串,並把字元串列印出來,而G是通過計算「12345」的Hash字元串並列印出來。根據不可區分混淆的定義,沒有辦法區分O(F)和和O(G)的差別。因此,如果有人可以從O(G)中分離出「12345」,因為O(G和OF)是不可區分的,因此他也可以從O(F)中分離出「12345」一這將是一個壯舉,因為他直接破壞了Hash函數的不可逆性(也就是說從O(G)中分離出「12345」的難度等價於尋找Hah結果的逆向函數)。
最近, Craig Gentry, Amit Sahai等人發現的一個演算法可以用來達成這個目的,演算法使用了一個被稱為「多線性拼圖」( Multilinear Jigsaw Puzzles)的構造。他們的演算法據稱可以滿足不可分區混淆器的要求,儘管是以一個很高的代價:需要使用同態加密演算法,同態加密目前非常低效,需要大概10億倍倍額外的計算開銷。如果這個結構能被改進,則潛在的收益是巨大的。在加密貨幣世界中,最有有趣的可能性是區塊鏈上的包含私有信息的智能合約。這將允許以太坊這樣的圖靈完備的區塊鏈鏈技術,進入互聯網上的任何金融或者非金融的系統中;比如,可以想像一個以太坊的合約包含用戶的網路銀行的密碼,如果合約的某個條件被滿足,合約就會通過一些節點作為中間人,和銀行建立一個HTPS會話,使用用戶的密碼登錄銀行並提現。因為合約是混淆過的,所以中間人或者任何其他區塊鏈的參與者,都無法進行中間人攻擊或者獲取用戶的密碼。其他網站,以及比特幣這樣的區塊鏈也可以使用同樣的技巧。
問題:創建一個合理高效的不可區分混滑演算法。
其他假設和需求
攻擊需要的計算量要超過2~80次。
演算法必須足夠快,一次標準的 ECDSA簽名或者AES加密必須控制在10 ~ 8次計算量內(更具體的說法,對應於以太坊虛擬機內的10 ~ 8gas)
※《資本天道—區塊鏈+未來》—傳遞價值
※《資本天道—區塊鏈+未來》—區塊鏈技術與分類
TAG:同籌薈TCH |