電子貨幣30年:從電子貨幣到區塊鏈(4)

買賣虛擬貨幣

注:此文為轉載文章

世界範圍內密碼貨幣十分火爆,我們觀察很多有意思的事情正在發生,直到2008年,我們才有現在的密碼貨幣。推動電子貨幣的發展我們要解決些什麼問題。

原文連結:https://mp.weixin.qq.com/s/Zl2cMaNduf88cLNfj86avA



一.推動電子貨幣的發展,我們需要解決幾個關鍵的問題

1

如何擴大交易規

比特幣和區塊鏈的交易頻率大約為每秒7筆交易(理論),可能更低。相比於VISA, 可以支援來自全球的大約40,000筆交易。我們需要用一些方法提高交易頻率,將貨幣吞吐量提高到合理的量級。

引入通道的概念:閃電網路

有兩個交易方,想要進行多次交易,但不想佔用比特幣太多頻寬,所以他們建立了一個三方契約。基本實現就是每個人都在區塊鏈上抵押一部分資金,所有交易匯款,雙方對交易完成簽名時,這筆交易就會被解鎖,或一個交易方中止交易後的一段時間,就會自動解鎖。三方契約在其中起到的是中介作用,讓交易雙方可以快速交易,而區塊鏈在確保最終交易的結果。閃電網路已經上線,並在相應的節點建測試。

這種網路存在如下問題。不能保護交易雙方的隱私,但可以理解,它不是隱私保護技術,它是為了雙方的即時交易,而不受限於區塊鏈的容量。如果想要實現隱私保護,不想知道通道終點的個體是誰,就需要在通道中設定更多的的中間人,如果幾個個體不合謀,則彼此交易雙方無法得知另一方的資訊。

但是這種系統不太可能運轉起來。首先為了實現隱私保護,我們不得不設定多條交易,但不會有人希望在系統中設定多條交易,我們甚至不知道兩個參與方之間是都存在一條可以聯通的一些通道,我們也不知道位於多條通道之間的參與方是否在區塊鏈上抵押了足夠的代幣。

即使上述假設都成立,在lighting 中還存在一個非常重要的問題,為了讓支付通道可以自動關閉,參與方之間需要分享一種叫雜湊鎖(hashlock)的東西。這意味著通道中的每個獨立的參與方都要分享一個雜湊值H,這個雜湊值會將支付通道的各個節點繫結到一起,這意味著如果I1和I3合謀,即使I2是誠實的支付通,這個支付通道中的參與方也將面臨去匿名化的風險,這種解決方案安全性十分弱。

那如何解決這個問題,如何解決支付通道中的隱私問題,支付通道技術似乎是密碼貨幣的未來。

我們用支付通道技術購買咖啡,支付租金,我們希望自己的隱私被保護。

David Chaum提出的e-Cash(電子貨幣技術)已經有 30年了,讓我們把它部署在支付通道中。在簡單的單通道場景,我們把一個參與方看成是銀行,我們可以在兩個參與方之間(A and B)建立餘額記賬系統,這樣一來,只要A要花費一筆錢,A就從B那裡撤銷一部分代幣,然後透過匿名的方式將代幣傳送給B,假設B開啟了很多個支付通道,他就無法知道這筆代幣是誰傳送的,這看起來是個簡單的解決方案。

在多跳場景下如何解決隱私問題?

如果我不能和支付方直接建立連線,該怎麼辦?

A無法與C直接交易,A可以與銀行交易,C不可以和銀行交易。

事實證明只要修改系統架構,就能讓Chaum的電子貨幣,在兩跳點上執行。我們選擇讓B作為中間人(當然這個B的可能性有很多,所以才能保證兩跳場景下的成功交易)B充當銀行的角色,

A與C建立連線,提取現金,與C交換代幣。

B可以做相同的操作,與C建立聯絡,提取現金,與C交換代筆。如果我們能建立一個同時能支援轉入和轉出的代幣支付系統。我們可以完成3跳嗎?

我們認為不可以運轉,還沒找到一種支援超過兩跳節點支付的隱私保護解決方案,當通道的跳轉次數變得更多後,Chaum的電子貨幣系統似乎就無法支撐了。

因為在多跳場景下,需要透過一種方法將不相干的通道繫結在一起,但我們還沒有找到一種可以實現隱私保護的繫結方式,這是一個公開的問題,如果我們想要實現一個網路,允許多個使用者在網路中建立多條支付通道,我們需要一種既能建立長支付通道,又能實現隱私保護的方法,但我們目前還沒有找到這種方法。

2

找到可以代替工作量證明的共識機制

對這個問題我們很感興趣,很多學者在這方面進行了很深的研究。比特幣耗費大量的能源,其一年耗電量和瑞典的耗電量相同,顯然的解決方式是將工作量證明替換成其他的密碼學證明技術,我們可以用簽名金鑰對區塊進行簽名,並於其它參與方建立共識。

如何透過簽名金鑰選舉出記賬節點呢,目前擺在檯面上的方法是權益證明技術,這個技術的基本思想是擁有越多的節點越可信,越可以生成正確的簽名區塊。如何實現這一點,所有權益證明技術的思路都類似,要透過協議查出網路中的主要權益持有方,建立一個權益持有方列表,公開紕漏權益持有放的身份,然後根據各個權益持有方所擁有的權益設定取樣權重。

接下來從列表中取樣,在取樣時我們如何得到隨機狀態呢?從NIST的random.org網站獲得隨機量嗎。我們如何從比特幣和網路上獲得隨機數,這是個公開的問題,目前我們還是有一些解決方案的,有一組學者在EUROCRYOT(歐密會)上發表了一個非常優異的工作成果[DGKR18],[KRDO17],Ouroboros,其中一些測略被部署到實際的代幣系統中,那個代幣系統叫Cardano。

所有這些系統都面臨一個問題,他們都需要依靠一個隨機變數來完成取樣。在原始的Ouroboros協議中,這個協議需要在成百上千的節點中執行一個互動式協議,從而建立一個隨機種子,此種子將被用於後期的取樣過程中,要達到的核心目的是,即使一定數量的節點離開系統,此協議也可以正確執行。但如果太多的節點離開網路,該怎麼辦,我們不知道是否可以正確的執行。

新的協議應用一個稍顯不同的方法來解決此問題,新協議使用基於計算Deffie-Hellman問題的抗碰撞雜湊函式。基本思想是,網路中的一些個體要為函式提供輸入,我們要計算輸入的雜湊值,從而生成隨機錨點,但不管怎麼設計協議,總有一個參與方要執行協議的最後一步。這個參與方,他可以利用他的雜湊算力計算不同輸入的取樣結果,從而偏斜輸出隨機狀態的分配。設計者設計雜湊函式,這個雜湊函式會組織參與者參與方實施碰撞攻擊,使他們難以偏離隨機量的概率分佈。

雜湊函式的設計依賴於相對較強的假設,評估參與方偏離隨機量的分佈的程度,可以對方案進行嚴謹的證明,我認為這是最有意思的地方,但為了考察協議是否真的可以運轉,我們需要在實際中部署協議。總的來說,密碼貨幣最感到激動的是,它允許我們在上面部署新的密碼方案。

3

Ledger-conditioned computation, 分類帳本條件計算

我們反過來看待這些問題。我們一直討論密碼學如何幫助密碼貨幣,但可能密碼貨幣或者區塊鏈可以反過來幫助我們建立密碼系統,領域中的很多人都在研究這樣一個問題。

假象我們有一些可信的硬體,可以認為這些硬體是可信的,安全的。密碼學安全計算技術這一領域,正在快速發展,從理論角度,密碼安全技術的實施依賴於硬體平臺,或者純軟體平臺,程式混淆技術允許我們構建可信計算裝置或可信計算電路完成特定的計算任務(技術支援)。

假設我們擁有一些安全硬體,但假設這些可信計算裝置無法記錄當前狀態,這是一個很現實的假設。對於程式混淆等透過軟體平臺實現的技術更加現實,軟體本身沒有記錄當前狀態的能力,我們可以不費吹灰之力構建硬體可信計算平臺,我們想用這些裝置完成多步驟互動式計算任務,這意味著我想根據某些輸入執行程式得到輸出,再把輸出作為輸入的執行程式。

另一個面臨此問題的場景是,假設我們有一個網路,每個節點都是可信的計算裝置,我們要執行一個單輪多步驟的,但程式的每個計算步驟都要在不同裝置上完成。每一個智慧合約系統都會面臨上述場景,很多無服務系統,亞馬遜的ASW Lambda 等也面臨上述場景,在此類場景下,顯然我們需要記錄一個同步狀態,如何記錄同步狀態?

解決方案是:假設每個安全計算裝置都有一個金鑰。使用者A將金鑰傳送給計算裝置,我們可以得到輸出結果和一個加密後的計算狀態,用於後續的計算過程。我要根據下一個輸入執行下一個計算步驟,我把加密狀態輸入一個可信裝置中,得到輸出和一個新的加密狀態。

但我們可能會碰到一個問題trivial Replay Attacks,簡單的重放攻擊。因為裝置無法在內部儲存狀態,我們把第三個輸出和第一個加密狀態傳送給裝置,這樣我們可以讓裝置計算出一個新的輸出結果,我們重複多次實施這種攻擊,並且計算裝置上執行的是互動式密碼協議,這種攻擊方式會破壞協議的安全性。

假設我們有一個區塊鏈,我們有一個公開可驗證賬本,公開驗證的意思是我們可以把字串放置在賬本上,賬本可以返回一個簽名。或者可驗證證明,告訴我們字串已經放置在賬本上,你也可以把整個賬本複製下來,把完整的賬本送給裝置。利用這種方法,可以很容易的實現狀態記錄功能。我們可以把我們的輸入傳送給賬本,我們可以得到儲存的內容和相關的證明,裝置可以驗證賬本,檢視當前的狀態,裝置可以返回一個輸出結果和一個加密狀態,進一步完成相關的細節設計,我們就可以建立一個可信的計算機系統了,只要我們可以於某個賬本進行互動,我們就可以抵禦重放攻擊。抵禦重放攻擊對智慧合約來說非常重要,尤其對於隱私智慧合約,對於可信安全計算裝置來說,這更為重要。

應用密碼程式混淆技術,我們還能實現哪些功能,對此表示好奇。


二.下面我們討論不同密碼學中涉及到的一些糟糕的密碼學方案

1. BitGrain 損失1.7億美元因為他們把系統中的餘額檢查功能放在了客戶端的javascript程式碼中。

2. NIST的一個網站random.org (生成公開可驗證的隨機量),用https替換http,這就導致之前用使用者為了獲得隨機量而呼叫random.org的網站,那麼他們現在得到是404,這讓他們損失一筆錢。

某人實現了ECDSA,他們想讓ECDSA中的臨時隨機變得更安全,他們把訊息和私鑰的XOR結果作為臨時隨機量,這使得臨時隨機量的分佈變得偏離。可以透過256個簽名結果恢復私鑰,很多使用者都恢復了私鑰,這種攻擊方式被實際驗證可行

IOTA利用人工智慧發明了自己的雜湊函式。 IOTA用基於雜湊函式的數字簽名,不知道他這樣做的原因。IOTA使用的簽名是 Winternitz signature 溫特尼茨簽名。

私鑰透過雜湊迭代計算雜湊值,最終的到公鑰

假設我們要對一串位元組進行簽名,我們要從私鑰開始(123434),計算特定次數的雜湊值,為了對3進行簽名,我需要計算3次雜湊值,得到對應的私鑰,然後將雜湊結果作為簽名的一部分,接下來我會對下一個位元組進行簽名。

問題是:

我們計算出3的雜湊值,任何人都可以計算一次雜湊值,從而得到位元組4對應的簽名結果,這樣你把訊息從3換成4,且對應的簽名任然可以得到驗證,因此很容易對次簽名進行偽造。

解決方法: 實現一個單獨的驗證碼,在簽名之前,我們需要把驗證嘛放在訊息的末尾處,驗證碼的特性是你不能在保持驗證碼不變的條件下,把簽名中的任何位元組增1。驗證碼的引入對簽名演算法的安全起到了決定性的作用,IOTA是對訊息求和,IOTA發明了自己的驗證碼,這使得任何人可以把簽名訊息中的位元組增1,同時使新訊息對應的簽名透過驗證。,因此假如我有一個訊息M,你就可以創造另一個訊息M_1,其各個位元組都比M大1,你可以多計算一次雜湊結果,從而偽造住M_1對應的簽名。

即使如此,我們也很難找到滿足上述條件有意義的兩個訊息。因為如果兩個訊息很長,帶簽名的訊息還是另外一個雜湊函式的輸出結果,IOTA只驗證完其中的1/3簽名,也就是驗證27位元組,他們稱IOTA應用了調優技術,因此驗證過程會嘗試27次,即驗證27位元組訊息的簽名,因此這不是一個安全的簽名方案。

3.Zcash沒有對元素所在數域進行驗證的漏洞

最尷尬的攻擊例項,讓某人的賬戶憑空傳建立了370,000個代幣,透過買賣得到上百萬美元的收入。

密碼貨幣是個有趣而火爆的話題,但我們要嚴肅的對待密碼貨幣,因為密碼貨幣值很多錢,一旦出問題,很多人會受到傷害,但密碼貨幣為我們創

造了獨一無二的機會,可以讓我們研究很多有趣的新密碼方案,這裡麵包含了很多有意思的問題,我們之前沒有機會去解決這些問題,我們應該利用好這些獨一無二的機會去解決這些問題,在領域內部創新密碼技術。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;