區塊鏈的「隱私」問題

很多人對比特幣及區塊鏈有誤解,認為比特幣解決了隱私的問題,但其實不然,比特幣是公開透明的賬本。V神清晰地梳理了目前區塊鏈隱私的幾種解決方案,未來還有很遠的路要走。

區塊鏈的“隱私”問題

很多人都認同區塊鏈是一種強大的技術。它們允許大量的交互被編碼和實施,提高了可靠性,消除了與中心實體管理的進程有關的商業和政治風險,並減少了對信任的需要。它們創建了一個平臺,來自不同公司甚至不同類型的應用程序都可以一起運行,允許極其高效且無縫的交互,並留下審計跟蹤,任何人都可以檢查,以確保所有的處理都是正確的。

然而,當我和其他公司談論如何在區塊鏈上構建應用程序時,總是會出現兩個主要問題:可擴展性和隱私。

可擴展性是一個嚴重的問題。當前的區塊鏈每秒處理3-20個交易,與運行主流支付系統或金融市場所需的處理能力相差幾個數量級,更不用說去中心化論壇或物聯網的全球小額支付平臺了。幸運的是,是有解決方法的,正在積極地致力於實施路線圖計劃。

區塊鏈的另一個主要問題是隱私。儘管區塊鏈的其他優勢是誘人的,但無論是公司還是個人,都不熱衷於將所有信息發佈到公共數據庫中,這些數據庫可以不受限制地被自己的政府、外國政府、家人、同事和商業競爭對手隨意閱讀。

與擴展性不同的是,隱私的解決方案在某些情況下更容易實現(儘管在其他情況下要難得多),其中許多方案與當前存在的區塊鏈兼容,但它們也不太令人滿意。

要創建一種“聖盃”技術要難得多,它允許用戶在區塊鏈上完成他們現在可以做的一切,但同時也擁有隱私;相反,開發人員在許多情況下將不得不面對部分解決方案、啟發法和機制,這些解決方案和機制旨在將隱私帶到特定的應用程序中。

聖盃

首先,讓我們從“聖盃”技術開始,因為它們實際上提供了承諾,可以將任意應用程序轉換為完全保護隱私的應用程序,允許用戶從區塊鏈的安全性中受益,使用分佈式的網絡處理事務,對數據進行“加密”,雖然所有的事情都是公開可見,但信息的底層“含義”完全被混淆。

當然,把握方向的最強大的技術是密碼安全混淆。一般來說,混淆是將任何程序轉化為程序等效的“黑匣子”的一種方式,即程序仍然具有相同的“內部邏輯”,並且仍然為相同的輸入提供相同的輸出,但不可能確定這個程序內部運作的細節。

區塊鏈的“隱私”問題

(把它想成是“加密”盒子內部的電線,使加密可以自行抵消,對輸出最終沒有影響,但是它確實會使你完全不可能看到裡面發生了什麼)

不幸的是,絕對完美的黑匣混淆在數學上已知是不可能; 事實證明,總是有一些蛛絲馬跡可以從程序中提取出來,通過提供輸出和特定的輸入集即可實現。

然而,我們可以滿足的是一個較低的標準:不可區別性的混淆。從本質上說,給定使用該算法混淆的兩個等效程序(例如。X=(a+b)*c和X=(a*c)+(b*c)),無法確定哪個輸出來自於哪個原始源。

要了解這對於我們的應用程序來說是仍然足夠強大的,請考慮以下兩個程序:

1.y=0

2.y=sign (privkey,0) -sign(privkey,0)

一個只返回零,另一個使用內部包含的私鑰對消息進行加密簽名,下一次執行相同的操作,從彼此減去(明顯相同的)結果,並返回結果,該結果保證為零。

即使一個程序只返回零,而另一個程序返回包含並使用加密私鑰,如果不可區分性可以滿足,那麼,兩個混淆的程序不可能區分開。

因此擁有混淆程序的人肯定無法提取私鑰,否則,這將是區分這兩個程序的一種方法。這是一個相當強大的混淆--大約兩年來,我們已經知道如何做到這一點!

那麼,我們該如何在區塊鏈上使用這一點呢?這裡有一個簡單的數字代幣方法。我們創建一個包含私鑰的混淆智能合約,並接受使用相應公鑰加密的指令。

合約將帳戶餘額加密存儲,如果合約想讀取存儲,則在內部對其進行解密,如果合約想寫入存儲,則在寫入之前對所需結果進行加密。

如果有人想讀取帳戶的餘額,那麼他們會將請求作為交易進行編碼,並在自己的機器上模擬它;混淆處理的智能合約代碼將檢查交易的簽名,以查看該用戶是否有權讀取餘額,如果他們有權讀取餘額,則返回解密的餘額;否則,代碼將返回錯誤,用戶將無法提取信息。

區塊鏈的“隱私”問題

然而,與其他幾種此類技術一樣,也有一個問題:這種混淆的機制效率極低。十億美元的開銷是正常的,甚至還是不夠的;近期論文估計“在同一個cpu上執行[2位乘法]電路需要1.3 * 108多年。

此外,如要防止讀寫存儲成為數據洩漏向量,還必須設置合約,以便讀寫操作總是修改合同整個狀態的很大一部分,這也是很大的一個開銷。

最重要的是,當您在區塊鏈上運行代碼時,要有數百個節點運行代碼,這可以很快就看到技術是如何運行的。不幸的是,這種技術不會很快改變任何事情。

退一步說

然而,雖然對安全模型有重要的妥協,但是有兩個分支技術可以讓你幾乎可以實現混淆效果。第一個是安全多方計算。安全多方計算允許程序(及其狀態)在N個當事方之間被分割,這樣你就需要其中的M(例如,N=9,M=5)進行協作,以便完成計算,或者顯示程序或狀態中的任何內部數據。

因此,如果你可以相信大多數參與者是誠實的,那麼該方案就像混淆一樣好。如果你不能,那麼它就毫無價值了。

安全多方計算背後的數學是複雜的,但比混淆要簡單得多。 SMPC 也比混淆更有效率,這一點你可以用它進行實際計算,但效率依然很低。加法運算可以處理得相當快,但是每當 SMPC 實例執行一些非常小的固定數目的乘法運算時,它需要執行一個“降階”步驟,涉及從每個節點發送消息到網絡中的每個節點。

最近的工作將通信開銷從二次降低到線性,但即使是每一次乘法操作也會帶來某種不可避免的網絡延遲。

要求信任對參與者也是一項艱鉅的任務;請注意,與許多其他應用程序一樣,參與者有能力保存數據,然後未來任何時間點都可以串通。此外,不可能知道他們已經做了這一點,因此不可能激勵參與者維護系統的隱私。

因此,與公共鏈相比,安全的多方計算可能更適合於私有區塊鏈,在這種情況下,激勵機制可能來自協議之外。

另一種具有很強特性的技術是零知識證明,特別是SNARKs的最新發展。零知識證明允許用戶構建一個數學證明,當給定程序在用戶已知的一些(可能是隱藏的)輸入上執行時,具有特定的(公開的)輸出,同時還不透露任何其他信息。

有很多專門的零知識證明的類型是相當容易實現的;例如,您可以將數字簽名看作一種零知識證明。你知道私鑰的值,當使用標準算法處理時,私鑰可以轉換為特定的公鑰。ZK-SNARKs允許你為任何功能作出這樣的證明。

首先,讓我們通過一些案例來說明。該技術的一個自然用例是身份系統。例如,假設你想向系統證明你是(i)某個國家的公民,並且(ii)超過19歲。

假設你的政府在技術上是進步的,併發行加密簽名的數字護照,其中包括個人的姓名和出生日期以及私人和公共密鑰。你需要構建一個功能,將護照中的私鑰簽名的數字護照和簽名作為輸入,如果(i)出生日期在1996年以前,(ii)護照與政府簽署公鑰,(iii)簽名是正確的,否則輸出0。

然後,您會做出一個零知識證明,表明您有一個輸入,當通過此函數傳遞時,返回1,並用另一個你希望用於未來與此服務交互的私鑰簽名證明。該服務將驗證證明,如果證明是正確的,它將接受你的私鑰簽名的消息為有效。

你也可以用同樣的方案來驗證更復雜的說法,比如“我是這個國家的公民,我的身份證號碼不在這套已經被使用過的身份證號碼中”,或者“我在從他們那裡購買了價值至少10000美元的產品後得到了一些商家的好評”,或者“我持有價值至少250000美元的資產”。

該技術的另一類應用是數字Token所有權。為了建立一個有效的數字Token系統,你不需要嚴格地有可見的帳戶和餘額;事實上,你所需要的只是解決“雙重支付”問題的方法--如果你有100個單位的資產,你應該能夠花這100個單元,但不是兩次。

有了零知識證明,我們當然可以做到這一點;聲稱你將為零知識證明的說法就像是“我知道在這組賬戶中的一個賬戶背後的一個秘密號碼,而且它與任何已經披露的秘密號碼都不匹配”。

此方案中的帳戶成為一次性使用:每次發送資產時都創建一個“帳戶”,並且發件人帳戶被完全消耗。

如果你不想完全消耗一個給定的帳戶,那麼你必須創建兩個帳戶,一個由接收人控制,另一個由發送人自己控制其餘的“更改”。這實際上是 ZCash 的方案。

對於涉及雙方的智能合約(例如,想一想像金融衍生合同在雙方之間談判),零知識證明的應用相當容易理解。當第一次協商合同時,不是創建一個包含實際公式的智能合約,該公式將最終釋放資金 (例如,在二進制選項中,公式是“如果某個數據源釋放的索引I大於X,將所有發送到A,否則將所有發送到B”),而是創建一個包含公式的哈希。

當合約終止時,任何一方都可以自己計算出A和B應該得到的金額,並將結果和零知識證明一起提供,也就是有正確哈希的公式提供該結果。區塊鏈可以查出A和B各投入了多少,以及它們得到了多少,但不知道它們為什麼投入或得到這個數額。

區塊鏈的“隱私”問題

該該模型可以應用到N方智能合約,Hawk項目正試圖做到這一點。

從另一端開始:低技術方法

當試圖在區塊鏈上增加隱私時,另一條途徑是從非常低技術的方法開始,除了簡單的哈希、加密和公鑰加密之外,不使用密碼。這是比特幣從2009開始的道路;儘管它在實踐中提供的隱私水平很難量化和限制,但它仍然明顯地提供了一些價值。

比特幣為增加隱私,最簡單的一步是,它使用一次性賬戶(類似zcash)來存儲資金。就像zcash一樣,每一筆交易都必須全部清空一個或多個帳戶,並創建一個或多個新帳戶,建議用戶為他們打算接收資金的每個新帳戶生成一個新的私鑰(儘管有可能擁有具有相同私鑰的多個帳戶)。

這帶來的主要好處是,用戶的資金在默認情況下並不是相互關聯的:如果你從源頭A收到50個coin,從來源頭B收到50個coin,其他用戶就無法知道這些資金屬於同一個人。

此外,如果你將13個coin發送到其他人的帳戶C上,從而創建了第四個帳戶D,你將其中一個帳戶中的剩餘37個coin作為“餘錢”發送,其他用戶甚至無法分辨交易的兩個輸出中的哪個是“支付”,哪個是“餘錢”。

區塊鏈的“隱私”問題

但是,有一個問題。 如果在將來的任何時刻,你同時從兩個賬戶進行交易,那麼你將不可撤銷地“鏈接”這些賬戶,從而讓大家很容易發現它們屬於同一個用戶。

而且,這些聯繫是傳遞性的:如果在任何時候,你將A和B連接在一起,然後在任何其他時間把A和C連接在一起,那麼你已經創造了大量的證據 ,統計分析可以將你的所有資產聯繫起來。

區塊鏈的“隱私”問題

比特幣開發人員 Mike Hearn 提出了一種緩解策略,該策略降低了發生這種情況的可能性,稱為“合併避免”:本質上,最大限度地減少通過在同一時間花費賬戶鏈接在一起的次數。

這絕對有幫助,但即使如此,比特幣系統內部的隱私已被證明是高度多孔的和啟發式的,距離高質量的隱私保證有點遠。

一種更先進的技術叫做 CoinJoin。 基本上,CoinJoin 協議的工作原理如下:

1.N方聚集在一些匿名頻道上,例如,Tor。它們各自提供目的地址D [1] ... D [N]。

2.其中一方創建一筆交易,向每個目的地地址發送1個coin。

3.N方註銷,然後分別登錄到該頻道,並且每人向該支出賬戶提供1coin。

4.如果N 個coin被存入賬戶,它們被分配到目的地址,否則退還。

區塊鏈的“隱私”問題

如果所有參與者都誠實地提供1個coin,那麼每個人都會投入1個coin,並獲得1個coin,但沒有人會知道哪個輸入映射到哪個輸出。如果至少有一名參與者沒有放入1個coin,則該過程將失敗,1個coin將退還,所有參與者可以再次嘗試。

Amir Taaki和Pablo Martin為比特幣以及Gavin Wood和Vlad Gluhovsky為Ethereum實施了類似的算法。

到目前為止,我們只討論了代幣匿名化問題。關於兩方智能合約呢?在這裡,我們使用與Hawk相同的機制,但我們用更簡單的密碼經濟學代替密碼學--即“可審計計算”技巧。

參與者將資金髮送到一個存儲代碼哈希的合約中。當涉及發送資金時,任何一方都可以提交結果。另一方可以發送交易來同意結果,允許資金被髮送出去,或者可以將實際代碼發佈到合同中,屆時代碼將正確運行和分配。

安全保證金可以用來激勵各方誠實參與。因此,系統是私人的,只有在有爭議時,才能將任何信息洩露到外部世界。

區塊鏈的“隱私”問題

這種技術抽象化後被稱為狀態通道,並且在保護隱私方面也有可擴展性。

環簽名

一種在技術上覆雜度適中,但對於代幣匿名化和身份識別應用而言非常有前途的是環簽名。環簽名本質上是一個簽名,證明簽名者具有與特定公鑰之一相對應的私鑰,但不透露哪一個。

關於這種數學運算的簡單解釋是,環簽名算法包括一個數學函數,該函數可以通過公鑰正常計算,但在知道私鑰的情況下,你可以將種子添加到輸入以生成輸出,輸出各種隨心想要的值。

簽名本身包含一個值列表,其中每個值都被設置為應用於前一個值的函數(加上一些種子);生成一個有效的簽名需要使用私鑰的知識來“閉環”,迫使你計算的最後一個值等於第一個值。

如果以這種方式生成有效的“環”,任何人都可以驗證它確實是一個“環”,因此每個值都等於根據先前值加上給定種子計算的函數,但無法判斷哪個環中的“鏈接”使用了一個私鑰。

區塊鏈的“隱私”問題

還有一個是環簽名的升級版本,被稱為可鏈接的環簽名。它增加了一個額外的屬性:如果您使用相同的私鑰簽名兩次,則可以檢測到這一事實 - 但不會顯示其他信息。

在代幣匿名的情況下,應用程序非常簡單:當用戶想要花錢時,不是讓他們提供常規簽名來直接證明其公鑰的所有權,我們將公鑰合併為一組,然後用戶只需簡單地證明該組的成員身份。

由於可鏈接性屬性,在組中具有一個公鑰的用戶只能從該組中花費一次; 相沖突的簽名會被拒絕。

環簽名也可以用於投票應用程序:我們使用它們來驗證投票,而不是使用環簽名來驗證一組代幣的支出。

秘密共享和加密

有時,區塊鏈應用並不只是解決數字資產的傳輸,或者只是記錄身份信息或處理智能合約,而是將其用於更多以數據為中心的應用:時間戳、高價值數據存儲、存在證明(或如證書撤銷的情況下,證明不存在證據等)。一種常見的副作用是使用區塊鏈構建“用戶控制自己的數據”的系統的想法。

在這些情況下,有必要再次注意到區塊鏈不能解決隱私問題,它只是真實性的解決方案。因此,將醫療記錄以明文形式放入區塊鏈中是一個非常糟糕的想法。

但是,它們可以與其他提供隱私的技術結合起來使用,以便為許多行業創建完整的解決方案,以實現預期的目標。區塊鏈是供應商中立的平臺,可以存儲一些數據以提供真實性保證。

那麼隱私保護技術是什麼?對於簡單的數據存儲(例如醫療記錄),我們就可以使用最簡單,最古老的一種:加密!在區塊鏈上哈希後的文檔可以先被加密,所以即使數據存儲在像IPFS上,只有擁有私鑰的用戶才能查看文檔。

如果用戶想授予其他人以解密形式查看某些特定記錄的權利,但不是全部,則可以使用類似確定性錢包的東西來為每個文檔派生不同的密鑰。

另一個有用的技術是秘密共享,允許用戶以給定的N個用戶(例如,M =5,N = 9)的M個可以協作來解密數據。

隱私的未來

區塊鏈中的隱私保護協議有兩大挑戰。其中一個挑戰是統計學上的:為了使任何隱私保留方案在計算上實用,該方案只能在每次交易時改變區塊鏈狀態的一小部分。但是,即使變更的內容是隱私,也不可避免地存在一些元數據。

因此,統計分析總是能夠分析出之間的聯繫;至少,他們將能夠捕捉交易何時發生的模式,並且在很多情況下,他們將能夠縮小身份並找出誰與誰交互。

第二個挑戰是開發者體驗挑戰。圖靈完備的區塊鏈對開發人員來說效果很好,對去中心化的底層機制完全不瞭解的開發人員來說,它們非常友好:它們創建了一個分佈式的“世界計算機”,它們看起來就像一臺中心化的計算機。

實際上,“看,開發者們,你可以編寫任何想編寫的代碼,只不過是在這個底層上有一個新層,在上面開發出讓各種去中心化應用。 ”

當然,抽象並不完美:交易費用高,高延遲,gas和區塊重組對於程序員來說是新事物,但是障礙並不是那麼大。

就隱私而言,正如我們所看到的,沒有什麼魔力子彈。儘管有針對特定用例的部分解決方案,並且通常這些部分解決方案提供了高度的靈活性,但它們提供的抽象與開發人員習慣的抽象很不相同。

從“10行python腳本中刪除發送人餘額中的Xcoin並將Xcoin添加到接收人的餘額”改為“使用可鏈接的環簽名進行高度匿名化數字代幣”,這並不是那麼簡單。

像Hawk這樣的項目走出非常值得歡迎的一步:它們提供了將任意N方協議轉換為零知識協議的承諾,只相信區塊鏈的真實性,以及一個隱私特定方:本質上,結合中心化和去中心化兩種方式的最佳選擇。

我們能否進一步發展,創建出一個無需信任任何一方的隱私協議?這仍只是一個積極的研究方向,我們只能等待,看看我們會走多遠。


分享到:


相關文章: