Mimblewimble 的隱私保護(hù)功能從根本上是有缺陷的。我只需每周支付 60 美元的 AWS 費(fèi)用,就能實(shí)時(shí)發(fā)現(xiàn) 96% 的 Grin 交易發(fā)起者和收款者的確切地址
Mimblewimble 的隱私保護(hù)功能從根本上是有缺陷的。我只需每周支付 60 美元的 AWS 費(fèi)用,就能實(shí)時(shí)發(fā)現(xiàn) 96% 的 Grin 交易發(fā)起者和收款者的確切地址。
這個(gè)問題是 Mimblewimble 所固有的,我認(rèn)為沒有辦法予以修補(bǔ)。這意味著,當(dāng)涉及到隱私時(shí),Mimblewimble 不該被視為 Zcash 或門羅幣 (Monero) 的可行替代品。
在過去的兩年中,作為一種新興的輕量級(jí)隱私協(xié)議,Mimblewimble 越來越受歡迎。Mimblewimble 是 2016 年由一個(gè)化名為 Tom Elvis Jedusor 的黑客發(fā)明的,他在一次 IRC 聊天中拋出了此協(xié)議的文字描述,然后就人間蒸發(fā)了。此后,Mimblewimble 最著名的幾個(gè)應(yīng)用包括所謂「公平發(fā)布」的隱私代幣 Grin、由 VC 支持的 Tari 以及 BEAM 項(xiàng)目,甚至有人考慮將它集成到萊特幣中。
已經(jīng)有一些研究人員假設(shè)過 Mimblewimble 可能存在的隱私弱點(diǎn)。我的貢獻(xiàn)在于:展示執(zhí)行攻擊的精確方法,證明其在實(shí)時(shí)網(wǎng)絡(luò)上的可行性,并量度其有效性。在對(duì) Grin 的真實(shí)測(cè)試中,我發(fā)現(xiàn),揭開交易流信息的成功率達(dá)到 96%。因此,現(xiàn)在顯然不能指望 Mimblewimble 能提供健壯的隱私保護(hù)。
這里是對(duì) Mimblewimble 實(shí)施攻擊的一個(gè)技術(shù)性深度研究,包括開源代碼、可復(fù)現(xiàn)的數(shù)據(jù)和技術(shù)類常見問答。通過下文,我將對(duì)可鏈接性提供一個(gè)高層次的直觀解釋,介紹如何發(fā)起攻擊,以及它對(duì)隱私技術(shù)的意義。
什么是可鏈接性?
非常重要的一點(diǎn)是,理解此次攻擊意味著什么、不意味著什么。
這種攻擊沒有讓我們得出人們收取款項(xiàng)的具體金額。Mimblewimble 使用普通橢圓曲線加密(佩德森承諾)成功地混淆了支付金額。但這種攻擊確實(shí)能讓我們找出誰(shuí)給誰(shuí)付款。換句話說,它讓我們將各筆交易鏈接起來,并確認(rèn)支付流。
為什么這是一個(gè)大問題?可能需要展開解釋下。
假設(shè) Coinbase 知道某個(gè)地址屬于一個(gè)叫 Daniel 的委內(nèi)瑞拉人,而你作為一個(gè)美國(guó)用戶,想在 Coinbase 上兌換現(xiàn)金。但在揭開了被混淆的交易圖之后,Coinbase 知道了,你從 Daniel 那里收到了錢,盡管他們不知道你收到了多少。基于 OFAC (海外資產(chǎn)管理辦公室)關(guān)于委內(nèi)瑞拉的政策,Coinbase 將關(guān)閉你的賬戶。
交易所當(dāng)然會(huì)對(duì)交易圖有很多了解,因?yàn)樗鼈儞碛心切⒓用軒艃稉Q為法幣的用戶的 KYC 信息。
再舉個(gè)例子,假如某個(gè)威權(quán)政府知道,某個(gè)特定的地址屬于一位政治異見人士。你向這位異見者捐了一小筆錢。稍后,當(dāng)你用 Mimblewimble 協(xié)議將錢發(fā)送到本地的交易所時(shí),該交易所將與政府共享你的交易數(shù)據(jù)。因?yàn)檎梢钥吹浇灰讏D的全貌,他們現(xiàn)在知道,你支持過一個(gè)政治異見人士。
這種類型的攻擊在 Zcash 是不可能實(shí)現(xiàn)的。因?yàn)?Zcash 是「不可鏈接」的,換句話說,每一筆 Zcash 交易都有一個(gè)龐大的匿名集。匿名集本質(zhì)上是一組交易,你的交易無法從中分辨出來??梢园阉胂蟪苫烊肴巳海耗涿酱螅愕慕灰拙蜁?huì)混入到更大的「人群」中。
在 Zcash 中,每筆交易的匿名集包括所有獲得了屏障防護(hù)的幣。從信息論的角度來看,這是可能做到的最大匿名性。
在門羅幣中,每筆交易的匿名集是所有(可信的)誘餌交易的集合。雖然門羅幣客戶端允許你指定誘餌集的大小,但當(dāng)前的缺省值為 11。門羅幣在安全采樣誘餌方面也有自己的問題,但我認(rèn)為它基本可行,看怎么取舍了。
人們本以為 Mimblewimble 的匿名集看起來是這樣的:
但實(shí)際上,它是這樣的:
這將 Mimblewimble 的匿名集縮小到僅一個(gè)地址。
需要說明的是,我并沒有指責(zé) Grin 的意思。我非常尊重 Grin 社區(qū)和核心開發(fā)人員,在聽取了我的問題后,他們提供了極大的幫助。
和比特幣或其他非隱私幣相比,Grin 仍然提供了更強(qiáng)大的隱私模型,畢竟其交易金額是安全加密的。但與 Zcash 或門羅幣相比,Mimblewimble 提供了一個(gè)從嚴(yán)格意義上來看較弱的隱私模型,這使得它不足以滿足許多實(shí)際的隱私用例。
關(guān)于此次攻擊的高階概述
那么,在 Mimblewimble 中,將交易圖「去匿名化」到底是怎么做到的呢?
我注意到,盡管對(duì)支付金額進(jìn)行了加密,Mimblewimble 仍然會(huì)留下一個(gè)可鏈接的交易圖。但是協(xié)議設(shè)計(jì)者意識(shí)到了這一點(diǎn),所以 Mimblewimble 使用兩種主要的技術(shù)來對(duì)抗可鏈接性:第一種是全區(qū)塊直通聚合 (full-block cut-through aggregation),第二種是蒲公英協(xié)議 (Dandelion)。
區(qū)塊直通背后的思路是,當(dāng)交易在一個(gè)區(qū)塊內(nèi)積累時(shí),這些交易將聚合為一個(gè)「超級(jí)交易」。這種「超級(jí)交易」基本上就像一個(gè)巨大的代幣混合 (CoinJoin)——本質(zhì)上,所有的輸入和輸出都被丟進(jìn)一個(gè)巨大的桶里,沒法輕易確定這個(gè)桶里誰(shuí)付錢給了誰(shuí)。只是一堆輸入變成了一堆輸出,金額被模糊了。
聽起來沒毛病,對(duì)嗎?只有一個(gè)問題:這個(gè)混幣(CoinJoin)必須一次構(gòu)建一個(gè)交易。由于交易不斷地被創(chuàng)建并從各個(gè)不同的地方廣播,如果你運(yùn)行一個(gè)嗅探器節(jié)點(diǎn)來在直通聚合完成之前獲取所有的交易,那么解開 CoinJoin 就很簡(jiǎn)單了。任何嗅探器節(jié)點(diǎn)都可以檢測(cè)網(wǎng)絡(luò),并在各交易聚合之前記錄原初的交易。將你在 P2P 網(wǎng)絡(luò)中檢測(cè)的所有消息歸檔,其實(shí)是非常容易的一件事情。
等等,真的嗎?就這些?
Grin 團(tuán)隊(duì)其實(shí)提出了另一條防線:蒲公英協(xié)議。蒲公英是 CMU (卡耐基梅隆大學(xué))研究人員開發(fā)的一種網(wǎng)絡(luò)技術(shù),它試圖模糊交易的發(fā)起方。
通常,在像比特幣這樣的加密貨幣中,交易的發(fā)起方只是向所有的對(duì)等方大聲宣告他們的交易,然后通過 P2P 網(wǎng)絡(luò)迅速傳播。但在蒲公英協(xié)議中,每一筆交易的廣播都是從一個(gè)秘密的電話游戲開始的。發(fā)起方只向一個(gè)對(duì)等點(diǎn)悄悄發(fā)布交易,而這個(gè)對(duì)等點(diǎn)又向另一個(gè)對(duì)等點(diǎn)悄悄發(fā)布,就這樣鏈?zhǔn)絺鬟f。在隨機(jī)跳了幾次之后,最后一個(gè)對(duì)等點(diǎn)會(huì)像在比特幣中一樣宣告交易。但是這個(gè)對(duì)等點(diǎn)離發(fā)起方實(shí)在太遠(yuǎn)了,任何觀察者都不可能分辨出誰(shuí)是鏈條的起點(diǎn)。
這對(duì)于混淆交易者的 IP 非常有用。但是蒲公英協(xié)議在 Grin 中還有第二個(gè)功能:它恰好可以擊敗嗅探器存檔節(jié)點(diǎn)。因?yàn)槊恳还P交易都是從一個(gè)蒲公英鏈開始的,只要兩筆交易在其蒲公英鏈中交叉,它們就會(huì)更早被聚合。如果發(fā)生這種情況,那么在將交易廣播給所有觀察者時(shí),嗅探器節(jié)點(diǎn)已經(jīng)無法拆解它們了。它們已經(jīng)被混幣了(CoinJoined)。
這是 Grin 針對(duì)嗅探器節(jié)點(diǎn)以防御可鏈接性的主要措施。但是有一種簡(jiǎn)單的方法可以破解它。
默認(rèn)情況下,每個(gè) Grin 節(jié)點(diǎn)連接 8 個(gè)其他對(duì)等點(diǎn)。但是通過猛增對(duì)等點(diǎn)的數(shù)量,我可以將我的嗅探器節(jié)點(diǎn)連接到網(wǎng)絡(luò)中的所有其他節(jié)點(diǎn)。假設(shè)我在線時(shí)間足夠長(zhǎng),最終幾乎每個(gè)節(jié)點(diǎn)都會(huì)連接到我,使我成為一個(gè)超級(jí)節(jié)點(diǎn)。
一旦我成為超級(jí)節(jié)點(diǎn),很有可能任何一筆交易的蒲公英路徑都會(huì)經(jīng)過我。我基本可以在交易聚合之前捕捉到它:唯一不可能的情況是,在我看到它們之前,兩個(gè)交易已經(jīng)在蒲公英路徑上相交。如果我在它們聚合之前看到其中的某一筆交易,我就可以使用一些簡(jiǎn)單的代數(shù)把它們拆解出來。
在我發(fā)起的攻擊中,我能夠連接 96% 的交易,而且在 Grin 網(wǎng)絡(luò)中的總共 3,000 個(gè)節(jié)點(diǎn)中,我只連接了 200 個(gè)節(jié)點(diǎn)。如果我多花點(diǎn)錢,我可以很容易地連接到 3,000 個(gè)節(jié)點(diǎn)來分解幾乎所有的交易。做這件事時(shí)我也不需要成為一個(gè)單一的超級(jí)節(jié)點(diǎn);通過啟動(dòng) 3,000 個(gè)具有獨(dú)立 IP 的節(jié)點(diǎn)(每個(gè)節(jié)點(diǎn)僅連接到一個(gè)對(duì)等節(jié)點(diǎn)),可以實(shí)現(xiàn)相同的攻擊。我只要嗅探所有交易數(shù)據(jù)并將其轉(zhuǎn)儲(chǔ)到一個(gè)中央主數(shù)據(jù)庫(kù)中,攻擊就同樣有效。
那么 Mimblewimble 還有救嗎?
看情況啦。我相信,正如目前所設(shè)想的那樣,Grin 沒有明確的途徑通向不可鏈接性。就像我在這篇技術(shù)文章中討論的那樣,僅僅提高蒲公英因子,并不足以應(yīng)對(duì)一個(gè)雄心勃勃的攻擊者。
但除了可鏈接性,Mimblewimble 仍然具有獨(dú)特的價(jià)值!它支持直通聚合,這是一種針對(duì)完整節(jié)點(diǎn)的有效壓縮技術(shù),并可有效隱藏交易的金額。如果你需要較高的隱私保護(hù),你可以將 Mimblewimble 與其他使交易圖模糊化的協(xié)議結(jié)合使用,例如在以太坊 9¾ 中,它將 Mimblewimble 與一種 Zerocash 風(fēng)格的承諾無效器方案結(jié)合在一起。
但很明顯,Mimblewimble 本身還不夠強(qiáng)大,不足以提供健壯的隱私保護(hù)。
比特幣問世已經(jīng)有 11 年的歷史了,但加密貨幣仍處于起步階段。就在不久之前,在 Zcash 和門羅幣中都發(fā)現(xiàn)了毀滅性的 bug。這是意料之中的事情——大多數(shù)有趣的技術(shù)仍然處在基礎(chǔ)科學(xué)階段。
但這就是科學(xué)進(jìn)步的方式:我們提出新的理論,然后不斷推翻它們,直到剩下的理論經(jīng)受住時(shí)間的考驗(yàn)。(撰文:Ivan Bogatyy)
關(guān)鍵詞: Mimblewimble 隱私保護(hù) Grin交易