FTCon2017|微軟亞洲研究院閆鶯:以太坊的性能與隱私保護如何兼得?

微軟 數字貨幣 比特幣 人工智能 雷鋒網 2017-03-26

雷鋒網AI金融評論按:3月25日,由開源社、TopGeek、匯智Tek聯合主辦的中國區塊鏈和金融創新科技峰會(FTCon2017)在上海舉行,微軟亞洲研究院主管研究員閆鶯,就基於以太坊的隱私保護技術,發表了她的觀點。據雷鋒網AI金融評論瞭解,閆鶯曾獲得微軟學者、IBM全球英才稱號,發表國內外頂級會議期刊論文30餘篇,專利10餘項。

“我們要分清楚匿名與別名”,閆鶯說道,“目前的比特幣和以太坊區塊鏈做不到匿名,只能算別名”。於是,隱私保護就成了一個問題。我們既要掩蓋交易細節,又要驗證交易的正確性,那麼,業界已落地的通用做法是什麼呢?如何兼顧隱私保護與性能呢?對此,閆鶯做了詳細解答。

以下是雷鋒網AI金融評論整理的演講全文,並對其進行了不改變文章原意的編輯。

大家好,我今天很高興在這裡跟大家一起來聊聊:區塊鏈的隱私保護技術。我今天主要從三方面來講。

  • 第一為什麼會有隱私保護這樣的問題?我們先說一下區塊鏈的情況,以及為什麼會有隱私的問題。

  • 第二個是現有的、實實在在的已經落地的隱私保護的技術,以及以太坊現在比較活躍的基於企業的架構。

  • 如何兼顧隱私保護與性能?我將會分享一下微軟的做法。

以太坊的興起

我們先從區塊鏈的歷史講起,2008年,第一次提出了比特幣,2009年初系統上線。但當時,比特幣還沒有價值。直到2010年中,比特幣有了它的價值,1萬個比特幣換了2個披薩。在之後一個月,其價格漲了10倍,大家才意識到它的價值。到了2011年,比特幣等於一美元。2013年,出現了一個少年Vitalik,他是比特幣的愛好者,想開發一個新的幣種。那他就必須重新實現一下類似比特幣的系統。他想,是否可以有一個更通用的系統架構支持各種不同的數字資產的定義,就這樣,他提出了“以太坊”。

與比特幣相比,以太坊最主要的不同就是引入了智能合約。實際上智能合約就是一段代碼,這段代碼可以定義數字資產,可以定義數字資產轉移的規則。

有了這個想法之後,他就退學了,然後公佈了他的白皮書,之後又和合作夥伴寫了一個比較詳細的黃皮書。之後就開始ICO,以太坊是迄今最成功的ICO。2014年底,以太坊正式上線了,第一個版本就已經非常穩定了。並且如果你發現了以太坊的bug,提出來,並且被接受了,你就會得到比特幣的獎勵。以太坊一上線就支持七種語言,可以避免一種語言帶來的侷限。

在下面這個圖上,大家可以看到,以太坊現在的發展狀況有點像三年前比特幣的發展情況。我們有理由相信,以太坊還有發展空間。

FTCon2017|微軟亞洲研究院閆鶯:以太坊的性能與隱私保護如何兼得?

區塊鏈的5層

可能大家也看到過區塊鏈的各種定義和介紹,為了理解隱私問題,我今天再把區塊鏈的基本定義回顧一下。區塊鏈包括幾個部分,當有人跟你談起他在做區塊鏈項目時,你可以問一下他在做哪一塊?因為它包括存儲、智能合約、上層應用等5層。

FTCon2017|微軟亞洲研究院閆鶯:以太坊的性能與隱私保護如何兼得?

數據結構

首先,數據結構是比較基礎的部分,正如它的名字一樣,區塊鏈是一塊一塊的交易連在一起。這種數據結構的特點是:如果你改了其中一塊數據的內容,很容易會被發現。

那以太坊怎麼實現的呢?大家看到這個架構圖覺得特別複雜。是的,它就是這麼複雜,以太坊到現在已經有七千多個結點,來自不同國家,不同目的的人。節點和節點之間彼此完全是不信任的。這些複雜的設計就是考慮到安全性和性能。存儲層面上,是每個結點高冗餘的存儲數據。

一致性協議

如果存在不同的結點,那如何保證數據的一致性呢?這就是我們經常談的一致性協議,每時每刻我們都需要選一個節點負責決定哪些交易屬於下一塊,然後廣播給大家記錄下來。這個lead節點的選取和激勵機制是一致性協議研究的重點。

智能合約

我再談談智能合約,什麼是智能合約呢?就是一段代碼。解決什麼問題呢?剛才講到用比特幣轉錢。那我們能不能把這個做的更靈活?我們舉一個例子。

假設即將舉辦一場球賽,我和Edwin打賭,如果A贏了,他給我100元,如果B贏了,我給他100元。這種場景在線下怎麼做呢?我們每個人先把錢給一個第三方,等結果出來之後,誰贏了把錢發給誰,第三方在其中收取一些手續費。智能合約就可以取代這個第三方,它是一段代碼定義了上面描述的邏輯。它有自己的賬戶,可以把錢轉給它,足球比賽結果出來之後,結果注入到區塊鏈,我們可以觸發這個合約,它就自動把錢轉到贏的人手裡。智能合約自己的存儲空間,智能合約在區塊鏈上的運行時,輸入是區塊鏈上的數據,經過處理之後,結果再寫回區塊鏈。

FTCon2017|微軟亞洲研究院閆鶯:以太坊的性能與隱私保護如何兼得?

有人可能有這樣的疑問,如果有的人寫的代碼運行時間特別長,區塊鏈系統會擁堵住嗎?

以太坊也有解決方案,它的運行不是免費的,要收燃料費,具體怎麼收呢?按照你所消耗的資源,比如CPU資源、存儲資源來收,如果你想不停的運行的話,沒有鉅額資金也運行不起來,用這樣的方式,可以降低黑客攻擊的成功率。

基於區塊鏈的交易過程到底是怎樣的?

講完區塊鏈的幾要素之後,我們再深入一點,在以太坊中,我轉了一筆錢,交易過程到底是怎樣的?

假設我要給一個人轉50元,我在客戶端提示轉50塊錢給他,就會生成一個交易,網絡上所有人都可以看到,從誰到誰轉多少錢。這個交易就存在整個網絡當中,其它結點收到了我的轉賬,這個帳本就更改了。於是我就有了兩個狀態,我現在的餘額再生成一個新的結點。所有的交易組織成一個Merkel樹,根結點也計算出來,我們就把整個值都放到塊的頭部,最後把這個塊跟前面的塊連在一起。

實際上我的交易被存成什麼樣的結構呢?上面所有的信息都是以KV對的形式存儲在LevelDB中,key hash值,Value是內容。Merkel樹中間結點的內容就是它的孩子節點。如同下面表顯示,我們都可以通過它們的信息可以找到對應數值。

FTCon2017|微軟亞洲研究院閆鶯:以太坊的性能與隱私保護如何兼得?

顯而易見,這種方式查詢起來效率不高,使用leveldb主要是為了“寫”優化。智能合約也是類似的,也是一段交易的內容,存儲內容也是以Merkel樹的形式存儲上去的。

落地的隱私保護技術

現在,我們有了一個稍微具體一點的認識,我們發現比特幣或者以太坊的區塊鏈基本上都是明文,除了地址和本身不是那麼對應之外,所有的信息都是對應的。

這時問題就產生了,不是說匿名嗎?我們要區分匿名和別名,如果你的名字和線下的人沒有關聯,就是匿名。實際上區塊鏈根本做不到,為什麼呢?

比如說我買了一個比特幣,我總要通過一些支付途徑來支付,在美國交易2000美元以上都是需要實名的,這個地址總是通過某種形式與實際的人有聯繫。所以區塊鏈並不是匿名的,只能說是別名,既然不匿名了,我們怎麼解決隱私問題呢?

首先交易的內容要隱藏好,不要讓人看到;但同時別人還要驗證這個交易是不是錯了,不能都加密。這兩者存在矛盾,實際上這是隱私保護技術上的挑戰。

現在實際上已經落地應用主要有兩種解決辦法,分別是:

  • 一種是密碼學的原理,先加密,在加密域上進行驗證。

  • 另一種是引入側鏈,私有狀態下,不需要看見的人看不到,需要驗證的人通過驗證能見到。

形象一點來形容,這兩種方法可以稱為拼車與煙霧彈。

拼車

我覺得,加密的解決方法類似拼車的概念,我轉給某個人錢容易暴露,那我就聯合一堆人一起轉,你不知道具體誰轉給了誰。拼車的生意誰做呢?我們需要在網絡中建立幾個主結點,主結點是將轉賬的兄弟姐妹連在一起,但是一個主結點容易被攻擊。這時,我們可以不用一個主結點,用多個主結點去拼,這樣的話,增加被攻擊的難度。

煙霧彈

另外一種技術有點像煙霧彈的模式,之前拼車是幾個人都有轉賬意願的人拼在一起。但這種技術是找一些“無辜群眾”拼在一起。

這個技術具體就是,當我想發起交易的時候,我就用我的私鑰和一群人的公鑰一起發起,這樣就不知道是誰發起的。但其中存在一個問題:如果他們知道你選擇的地址,你就暴露了。所以這不是完全的隱私保護,只能說是一部分隱私保護,至少你是在發起人裡面的。

零知識證明

這個技術本身不是什麼新技術,80年代已經出現了,我們也看到這個技術的複雜度,還有它理論上的重要性。目的是讓驗證者不知道事實本身的時候,還能判斷事情的真假。

南北分支是連著的,有一個鑰匙可以連上。老王自稱有這扇門的鑰匙,但是不願意直接展示出來。他不願意把鑰匙交出來,我們怎麼知道有這把鑰匙呢?我們找了一個測試者,同時要防止測試者和老王聯合作弊,具體怎麼做呢?測試者把眼睛蒙上,然後老王隨意走到一個分支,測試者隨機要求老王從某一個分支出來,老王都能出來。那能不能說老王有鑰匙呢?不能。如果老王進去的分支和測試者是一邊的話,也可以出來。所以這種測試要多做,如果老王每一次都能出來,我們就猜測老王是有鑰匙的。但是這個驗證效率很低。

FTCon2017|微軟亞洲研究院閆鶯:以太坊的性能與隱私保護如何兼得?

還有一種是非交互性的,即做一次測試就能判斷真假。判錯的概率低,但也不能百分之百的保證。ZCash鑄幣過程,給出序列號,同時用zk-SNARK證明我是這個幣的擁有者。這樣就把詳細的信息隱掉了,同時可以驗證。

另外有一種側鏈的方式,如Quorum,它現在很受歡迎,原因是基於以太坊並且開源,Quorum目前架構,基本上可以滿足所有的金融需求。它是怎麼做的呢?它引入一個私有狀態,只有私有狀態允許的人可以看到。私有狀態的哈希值和公共狀態一起被鏈接到區塊鏈上,保證數據的完整性。

隱私與性能如何兼得?

我們要做隱私保護,勢必會影響系統性能。一方面要注意隱私,一方面要兼顧性能。我們的研究就是如何兼顧兩方面,我在這裡分享一下微軟研究院關於這方面的兩個工作:

一個是結合硬件技術,比如說SGX,聯盟鏈中有了它之後,我們就能很好解決隱私的問題,同時保障性能。這個項目還在開發測試中,計劃5月份有一個發佈。

另外,我們在和客戶交流過程中,發現他們有一些需求是可以用區塊鏈來解決,但用傳統的區塊鏈系統並不是唯一最好方法解決方案。客戶更需要的是一個大家共同擁有、可編程的,共同管理的雲數據庫。現在,基本上所有的雲供應商都有相應的雲數據庫。比如微軟Azure SQL Database 擁有每天上千萬客戶機時。目前的雲數據庫確實有侷限,就是它只有一個owner,擁有admin權限。在多機構合作中問題來了,誰來做這個共有數據庫的owner?

區塊鏈應用過程中,我們經常說,解決了找不到可信找的第三方的問題。那這個可信的定義是什麼呢?

如何定義可信任呢?

可信任包括兩個方面:

一、可驗證可追蹤。如果我的數據和更改都可以驗證和追蹤,等於說無需信任。

二、系統需要穩定性、可靠性和可用性。

區塊鏈解決方案用它的數據結構解決,一的問題可以用分佈式存儲和一致性協議保障,在雲數據庫中,二的問題自然被解決。那麼,我們如何給雲數據庫加入可驗證追蹤的屬性呢?於是我們研發了聯盟數據庫(ConsortiumDB)系統。該系統以傳統雲數據庫為存儲,有完善的機制管理membership和rule。

例如,用戶可以定義誰能訪問哪個表、誰能更改數據、誰可以加入等,都能得到較好的管理。所有規則的管理和執行已經日誌的組織利用了區塊鏈的技術,進而實現其他機構對數據庫的操作可驗證可追蹤。

最後,想說的是,區塊鏈技術是基礎,是敲門磚,更重要的是思考實際中如何在應用中利用這個技術的優勢。隱私保護技術和系統的性能優化只有在明確的應用需求下才能更好的設計。

相關推薦

推薦中...