【译】Privacy on the Blockchain
區塊鏈是一種強大的技術,因為博客的常規讀者已經同意了。 它們允許以大大提高可靠性的方式編寫和執行大量交互,從而消除與中央實體管理的流程相關的業務和政治風險,并減少對信任的需求。 他們創建了一個平臺,來自不同公司甚至不同類型的應用程序可以在這個平臺上運行,實現極其高效和無縫的交互,并留下任何人都可以檢查的審計跟蹤,以確保正確處理所有內容。
但是,當我和其他人與公司談論在區塊鏈上構建應用程序時,總會出現兩個主要問題:可擴展性和隱私。 可伸縮性是一個嚴重的問題; 目前的區塊鏈,每秒處理3-20個交易,與運行主流支付系統或金融市場所需的處理能力數量相差無幾,遠遠低于分散式論壇或物聯網的全球微支付平臺。 幸運的是, 有 解決方案 ,我們正在積極制定實現路線圖的路線圖。 區塊鏈的另一個主要問題是隱私。 像區塊鏈的其他優點一樣誘人,公司或個人都不會特別熱衷于將所有信息發布到公共數據庫中,可以在不受任何政府,外國政府,家庭成員,同事和商業競爭對手的任何限制的情況下任意閱讀。
與可擴展性不同,隱私解決方案在某些情況下更容易實現(盡管在其他情況下要困難得多),其中許多與現有的區塊鏈兼容,但它們也不太令人滿意。 創建一種“圣杯”技術要困難得多,這種技術允許用戶在區塊鏈上完成他們現在可以做的所有事情,但保護隱私; 相反,在許多情況下,開發人員將被迫與部分解決方案,啟發式和機制相抗衡,旨在為特定類別的應用程序帶來隱私。
圣杯
首先,讓我們從圣潔技術開始,因為它們實際上提供了將任意應用程序轉換為完全保護隱私的應用程序的承諾,允許用戶從區塊鏈的安全性中受益,使用分散的網絡來處理事務,但以這樣的方式“加密”數據,即使所有事情都在明顯的計算中,信息的潛在“含義” 也是完全混淆的 。
當然,最有力的技術是加密安全混淆。 一般來說,混淆是一種將任何程序轉換為程序的“黑盒子”的方式,這樣程序仍然具有相同的“內部邏輯”,并且仍為相同的輸入提供相同的輸出,但是無法確定有關該計劃如何運作的任何其他細節。
可以把它想象成“加密”盒子內部的電線,使加密自身取消并最終對輸出沒有影響,但確實會讓人無法看到里面發生的事情。
不幸的是,絕對完美的黑盒混淆在數學上已知是不可能的 ; 事實證明,除了它在特定輸入集上給出的輸出之外,至少總有一些東西可以從程序中提取出來。 然而,我們可以滿足一個稱為不可區分混淆的較弱標準:基本上,給定兩個使用該算法進行混淆的等效程序(例如, x = (a + b) * c和x = (a * c) + (b * c) ),無法確定兩個輸出中的哪一個來自哪個原始來源。 要了解它對于我們的應用程序如何仍然足夠強大,請考慮以下兩個程序:
一個只返回零,另一個使用內部包含的私鑰對消息進行加密簽名,再次執行相同的操作,相互減去(顯然相同的)結果并返回結果,保證為零。 即使一個程序只返回零,另一個程序包含并使用加密私鑰 ,如果滿足不可分辨性,那么我們就知道兩個混淆程序無法相互區分,因此擁有混淆程序的人肯定沒有提取私鑰的方法 - 否則,這將是區分兩個程序的一種方式。 那是一個相當強大的混淆 - 大約兩年我們已經知道如何做到這一點!
那么,我們如何在區塊鏈中使用它呢? 這是數字令牌的一種簡單方法。 我們創建一個混淆的智能合約,其中包含一個私鑰,并接受使用相應公鑰加密的指令。 合同將存儲中的帳戶余額加密存儲,如果合同想要讀取存儲,則在內部對其進行解密,如果合同要寫入存儲,則會在寫入之前加密所需的結果。 如果有人想要讀取他們帳戶的余額,那么他們會將該請求編碼為交易,并在他們自己的機器上進行模擬; 混淆的智能合約代碼將檢查交易上的簽名,以查看該用戶是否有權閱讀余額,如果他們有權閱讀余額,則將返回解密余額; 否則代碼將返回錯誤,并且用戶無法提取信息。
然而,與這種類型的其他幾種技術一樣,存在一個問題:進行這種混淆的機制極其低效。 十億因素開銷是常態,通常甚至非常樂觀; 最近的一篇論文估計“在同一個CPU上執行[2位乘法]電路需要1.3 * 10 8年”。 此外,如果要防止對存儲的讀取和寫入成為數據泄漏向量,則還必須設置合同,以便讀取和寫入操作始終修改合同的整個狀態的大部分 - 另一個開銷來源。 最重要的是,你有數百個節點在區塊鏈上運行代碼的開銷,不幸的是,很快就能看到這種技術如何不會隨時改變。
退一步
但是,有兩個技術分支可以使您幾乎達到混淆,盡管對安全模型有重要的妥協。 首先是安全的多方計算。 安全的多方計算允許程序(及其狀態)在N方之間分配,使得您需要M個(例如,N = 9,M = 5)進行協作以完成計算或透露程序或州內的任何內部數據。 因此,如果您可以信任大多數參與者是誠實的,那么該方案就像混淆一樣好。 如果你做不到,那就沒用了。
安全的多方計算背后的數學是復雜的,但比混淆簡單得多; 如果您對技術細節感興趣,那么您可以在這里內容(以及Enigma的文章,這是一個尋求實際實現秘密共享DAO概念的項目, 在這里 )。 SMPC也比混淆更有效,你可以用它進行實際計算,但即使效率低下也非常大。 可以相當快速地處理加法運算,但每次SMPC實例執行一些非常小的固定數量的乘法運算時,它需要執行“降低程度”步驟,該步驟涉及從每個節點向網絡中的每個節點發送消息。 最近的工作將通信開銷從二次減少到線性,但即使每次乘法運算都會帶來一定的不可避免的網絡延遲。
對參與者的信任要求也是一個繁重的要求; 請注意,與許多其他應用程序的情況一樣,參與者可以保存數據,然后串通以發現歷史中的任何未來點。 此外,不可能說他們已經這樣做了,因此不可能激勵參與者維護系統的隱私; 出于這個原因,安全的多方計算可以說更適合私有區塊鏈,其中激勵可以來自協議之外,而不是公共鏈。
另一種具有非常強大屬性的技術是零知識證明,特別是“ 簡潔的知識論證 ”(SNARKs)的最新發展。 零知識證明允許用戶構造數學證明,當給定程序在用戶已知的某些(可能是隱藏的)輸入上執行時,具有特定(公知)輸出, 而不泄露任何其他信息 。 有許多特殊類型的零知識證明很容易實現; 例如,您可以將數字簽名視為一種零知識證明,表明您知道私鑰的值,當使用標準算法處理時,私鑰可以轉換為特定的公鑰。 另一方面,ZK-SNARKs允許您為任何功能做出這樣的證明。
首先,我們來看一些具體的例子。 該技術的一個自然用例是身份系統。 例如,假設您想向系統證明您是(i)某個國家的公民,并且(ii)超過19歲。 假設您的政府在技術上是進步的,并簽發加密簽名的數字護照,其中包括一個人的姓名和出生日期以及私人和公鑰。 您將構建一個功能,該功能將護照上的私人密碼簽名的數字護照和簽名作為輸入,如果(i)出生日期是1996年之前,則輸出1,(ii)護照是與政府簽訂的公鑰,以及(iii)簽名是正確的,否則輸出0。 然后,您將創建一個零知識證明,表明您有一個輸入,當通過此函數時,返回1,并使用您希望用于將來與此服務交互的另一個私鑰對證明進行簽名。 該服務將驗證證明,如果證明是正確的,它將接受使用您的私鑰簽名的消息作為有效。
您也可以使用相同的方案來驗證更復雜的聲明,例如“我是這個國家的公民,我的身份證號碼不在這套已經使用過的身份證號碼”中,或者“我收到了來自一些商人在從他們那里購買至少價值10,000美元的產品后,“或者”我擁有價值至少25萬美元的資產“。
該技術的另一類用例是數字令牌所有權。 為了擁有一個功能正常的數字代幣系統,您不一定需要擁有可見的帳戶和余額; 事實上,你所需要的只是一種解決“雙重支出”問題的方法 - 如果你擁有100個單位的資產,你應該能夠花費這100個單位一次,而不是兩次。 憑借零知識證明,我們當然可以這樣做; 您將無知識證明的聲明類似于“我知道已創建的這組帳戶中的一個帳戶背后的密碼,并且它與已經顯示的任何密碼都不匹配” 。 此方案中的帳戶變為一次性使用:每次發送資產時都會創建“帳戶”,并且完全使用發件人帳戶。 如果您不想完全使用給定帳戶,則必須創建兩個帳戶,一個由收件人控制,另一個帳戶由發件人自己控制剩余的“更改”。 這基本上是Zcash使用的方案(更多關于它如何在這里工作 )。
對于雙方智能合約(例如,想到兩方之間協商的金融衍生合約),零知識證明的應用相當容易理解。 當合同首次協商時,而不是創建包含最終將釋放資金的實際公式的智能合約(例如,在二元期權中,公式將是“如果某些數據源發布的索引I大于X,將所有內容發送到A,否則將所有內容發送到B“),創建包含公式哈希值的合同。 當合同要結束時,任何一方都可以自己計算A和B應該收到的金額,并提供結果和零知識證據,證明具有正確散列的公式提供了該結果。 區塊鏈找出A和B各自放入多少,以及它們取出多少,但不知道為什么他們放入或取出該數量。
這個模型可以推廣到N方智能合約, Hawk項目正在努力做到這一點。
從另一端開始:低技術方法
在嘗試增加區塊鏈隱私時要采取的另一條途徑是從非常低技術的方法開始,除了簡單的哈希,加密和公鑰加密之外不使用加密。 這是比特幣從2009年開始的路徑; 雖然它在實踐中提供的隱私水平很難量化和限制,但它仍然顯然提供了一些價值。
比特幣在某種程度上增加隱私的最簡單步驟是使用類似于Zcash的一次性賬戶來存儲資金。 就像使用Zcash一樣,每個交易必須完全清空一個或多個帳戶,并創建一個或多個新帳戶,建議用戶為他們打算接收資金的每個新帳戶生成一個新的私鑰(盡管它是可能有多個具有相同私鑰的帳戶)。 這帶來的主要好處是用戶的資金默認情況下沒有相互關聯:如果您從源A收到50個硬幣,從源B收到50個硬幣,則其他用戶無法告知這些資金屬于同一個人。 此外,如果您將13個硬幣投入其他人的帳戶C,從而創建第四個帳戶D,其中您將其中一個帳戶中剩余的37個硬幣作為“更改”發送,其他用戶甚至無法分辨其中的兩個輸出中的哪一個交易是“付款”,也就是“變更”。
但是,有一個問題。 如果在將來的任何時候,您同時使用兩個帳戶進行交易,那么您會不可逆轉地“鏈接”這些帳戶,這使得他們來自一個用戶顯而易見。 而且,更重要的是,這些聯系是可傳遞的:如果,在任何時候,你將A和B連接在一起,然后在任何其他點將A和C鏈接在一起,依此類推,那么你已經通過以下方式創建了大量證據:哪種統計分析可以鏈接您的整套資產。
比特幣開發商邁克赫恩提出了一種緩解策略,可以降低發生這種情況的可能性,即避免合并 :實質上,這是一個非常難以理解的術語,可以最大限度地減少您通過同時支出將帳戶鏈接在一起的次數。 這絕對有幫助,但即便如此,比特幣系統內部的隱私已被證明是高度多孔的和啟發式的,甚至沒有接近高保證。
一種更先進的技術稱為CoinJoin 。 基本上,CoinJoin協議的工作原理如下:
如果所有參與者都誠實并提供一枚硬幣,那么每個人都會放入一枚硬幣并輸出一枚硬幣,但沒有人會知道哪個輸入映射到哪個輸出 。 如果至少有一個參與者沒有放入一枚硬幣,則該過程將失敗,硬幣將被退還,并且所有參與者都可以再次嘗試。 類似于此的算法由Amir Taaki和Pablo Martin為比特幣實施 , Gavin Wood和Vlad Gluhovsky為以太坊實施 。
到目前為止,我們只討論了令牌匿名化。 兩黨智能合約怎么樣? 在這里,我們使用與Hawk相同的機制,除了我們用更簡單的加密經濟學代替密碼學 - 即“可審計計算”技巧。 參與者將他們的資金發送到存儲代碼散列的合同中。 在發送資金時,任何一方都可以提交結果。 另一方可以發送交易以同意結果,允許發送資金,或者可以將實際代碼發布到合同,此時代碼將運行并正確分配資金。 保證金可用于激勵各方誠實參與。 因此,默認情況下系統是私有的,并且只有在存在爭議時才會將任何信息泄露給外界。
這種技術的概括稱為狀態 通道 ,并且還具有可擴展性優勢以及其隱私性的改進。
環簽名
對于令牌匿名化和身份應用而言技術上適度復雜但非常有希望的技術是環簽名。 環簽名本質上是簽名,證明簽名者具有對應于特定公鑰集之一的私鑰, 而不揭示哪一個 。 關于這在數學上是如何工作的兩句話解釋是環簽名算法包括一個數學函數,該函數只需公鑰即可正常計算,但知道私鑰允許你在輸入中添加種子以產生輸出無論你想要什么具體價值。 簽名本身由一個值列表組成,其中每個值都設置為應用于前一個值的函數(加上一些種子); 生成有效簽名需要使用私鑰的知識來“關閉循環”,強制計算的最后一個值等于第一個。 給定以這種方式產生的有效“環”,任何人都可以驗證它確實是“環”,因此每個值等于在先前值加上給定種子計算的函數,但是沒有辦法告訴哪個環中的“鏈接”使用了私鑰。
還有一個稱為可鏈接環簽名的環簽名的升級版本,它增加了額外的屬性:如果您使用相同的私鑰簽名兩次,則可以檢測到該事實 - 但不會顯示其他信息。 在令牌匿名化的情況下,應用程序非常簡單:當用戶想要花錢時,而不是讓他們提供常規簽名來直接證明他們的公鑰的所有權,我們將公鑰組合成組,并詢問用戶只需證明該組的成員資格。 由于可鏈接性屬性,在組中具有一個公鑰的用戶只能從該組中花費一次; 沖突的簽名被拒絕。
戒指簽名也可用于投票申請:我們使用它們來驗證投票,而不是使用戒指簽名來驗證一組硬幣的支出。 它們也可用于身份識別應用程序:如果您想證明自己屬于一組授權用戶,而沒有透露哪一個,那么環簽名就非常適合。 環簽名在數學上比簡單簽名更復雜,但它們實現起來非常實用; 可在此處找到以太坊頂部的環簽名示例代碼。
秘密共享和加密
有時,區塊鏈應用程序并不試圖調解數字資產的轉移,記錄身份信息或處理智能合約,而是用于更多以數據為中心的應用程序:時間戳,高價值數據存儲,存在證據(或不存在的證明 ,如證書撤銷的情況)等。一個常見的副詞是使用區塊鏈來構建“用戶控制自己的數據”的系統。
在這些情況下,再次注意區塊鏈不能解決隱私問題,并且只是真實性解決方案。 因此,將明文醫療記錄放入區塊鏈是一個非常糟糕的想法。 但是,它們可以與其他提供隱私的技術相結合,以便為許多行業創建一個完整的解決方案,實現預期目標,區塊鏈是供應商中立的平臺,可以存儲一些數據以提供真實性保證。
那么這些隱私保護技術是什么? 那么,在簡單的數據存儲(例如醫療記錄)的情況下,我們可以使用最簡單和最老的一個:加密! 區塊鏈上散列的文檔可以先加密,因此即使數據存儲在IPFS之類的東西上,只有擁有自己私鑰的用戶才能看到文檔。 如果用戶想要授予其他人以解密形式查看某些特定記錄的權利,而不是所有這些記錄,則可以使用諸如確定性錢包之類的東西來為每個文檔導出不同的密鑰。
另一種有用的技術是秘密共享( 這里更詳細地描述),允許用戶以這樣的方式加密一條數據:給定N個用戶的M(例如,M = 5,N = 9)可以合作解密數據,但不會少。
隱私的未來
區塊鏈中的隱私保護協議存在兩個主要挑戰。 其中一個挑戰是統計:為了使任何隱私保護方案在計算上實用,該方案必須僅在每次交易時改變區塊鏈狀態的一小部分。 然而,即使改變的內容是隱私,也不可避免地存在一些量的元數據 。 因此,統計分析總能找出一些東西 ; 至少,他們將能夠捕捉交易發生時的模式,并且在許多情況下,他們將能夠縮小身份并找出與誰交互的人。
第二個挑戰是開發者體驗挑戰。 Turing-complete區塊鏈對開發人員非常有用,因為它們對開發人員非常友好,對于分散的底層機制完全無能為力:他們創建了一個分散的“世界計算機”,看起來就像一臺集中式計算機,實際上是在說“看,開發人員” ,你可以編寫你計劃編碼的代碼,除了底部的這個新圖層現在可以為你做一切神奇的分散“。 當然,抽象并不完美:高交易費,高延遲,天然氣和大塊重組對程序員來說是一個新的挑戰,但障礙并不是那么大。
有了隱私,正如我們所見,沒有這樣的神奇子彈。 雖然對于特定用例存在部分解決方案 ,并且這些部分解決方案通常提供高度靈活性,但它們呈現的抽象與開發人員習慣的抽象有很大不同。 從“10行python腳本中獲取一些代碼,用于從發送者的余額中減去X幣并將X幣添加到接收者的余額”到“使用可鏈接環簽名的高度匿名化的數字令牌”,這并非易事。
像Hawk這樣的項目在正確的方向上是非常受歡迎的步驟:它們提供了將任意N方協議轉換為零知識協議的承諾,該協議僅信任區塊鏈的真實性,以及一個特定的隱私方:基本上,組合兩個世界中最好的集中和分散的方法。 我們可以更進一步,并創建一個信任零方以保護隱私的協議嗎? 這仍然是一個積極的研究方向,我們只需要等待,看看我們能走多遠。
https://blog.ethereum.org/2016/01/15/privacy-on-the-blockchain/
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的【译】Privacy on the Blockchain的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【译】Notes on Blockcha
- 下一篇: 【译】Consortium Chain