當前位置:
首頁 > 新聞 > 從霍格沃茨而來的密碼學解讀區塊鏈咒語Mimblewimble

從霍格沃茨而來的密碼學解讀區塊鏈咒語Mimblewimble

導言/林佳誼

關心加密貨幣圈的人都知道,2018 年底和 2019 年初有兩個新幣種 Grin 和 Beam 先後上線,即便不打算 ICO,仍從少數核心開發者開始,一路神奇迅速走紅礦工圈、投資圈,乃至於成為整個加密貨幣社區的熱議話題。Grin 還在上周由社區票選出了一個中文名字「古靈幣」。

火紅原因在於,Grin 和 Beam 在技術上運用了一個有著魔咒般名稱的 Mimblewimble 區塊鏈協議,解決了比特幣交易缺乏隱私性的這一大弱點,也就是其每筆交易都有固定地址,只要通過分析比對,用戶的身份與交易行為就可能被曝光。Mimblewimble 之名源自於《哈利?波特》小說里的咒語「混淆咒」,它的發明者更用了法語版伏地魔的名字 Tom Elvis Jedusor。

究竟 Mimblewimble 有什麼魔力?它除了催生了兩個新幣種外,還為整個加密貨幣技術的發展帶來了哪些更整體的突破?本周 DeepHash 專欄很高興又邀請到一位新作者,精通密碼學的國內知名公鏈初創公司 Conflux 研究總監楊光博士,來為本專欄讀者講解 Mimblewimble 的技術原理。而他歸納,MimbleWimble 最主要的三大貢獻在於改善比特幣的隱私性、可替代性和擴容性。

(來源:Unsplash)

文/楊光(Conflux 研究總監)

今年 315 不知道大家有沒有看到一則新聞,當你的手機嘗試連接 wifi 時,會把你的 MAC 地址廣播出去。其他人可以用 wifi 探針來找到你的 MAC 地址。且因為這是跟手機綁定的,所以就能進一步對應到你的手機號和個人身份等信息。因此大家說,出門最好把 WLAN 給關掉,不要泄露自己的 MAC 地址。但如果是在比特幣上,可能連探針都不需要,直接搜地址,就可以找到對應賬戶的交易記錄了。賬戶上金額的流進流出所有人都能看到。

為什麼?因為比特幣雖被稱為是加密貨幣,但其實沒有做到對隱私的保護。


加「密」貨幣的迷思

現在,讓我們來仔細想一下比特幣到底用了多少密碼學的東西?首先,比特幣利用抗碰撞哈希引用來構建區塊鏈的結構,同一個哈希引用不會對應於兩個不同的區塊;其次,比特幣上的每一筆錢都由相應的公鑰和私鑰控制。除此之外,比特幣並沒有應用更多的密碼學知識了。

因此,我們可以說,比特幣的安全性是受到密碼學的保護的,但是隱私性其實並沒有。我們可以通過很多方式進行分析,例如根據交易的關聯性,交易時間和交易的廣播情況等,就可以找到賬戶對應的個人是誰,從而得知這個人在比特幣上的交易情況等隱私信息。

Mimblewimble 的目的就是在改善比特幣的這一問題。今天我們先來簡單介紹一下 Mimblewimble 隱私保護技術的原理,再講一下它在實際中應用的例子。


「伏地魔」創造的 Mimblewimble

Mimblewimble 其實不是一個傳統的英文單詞,它源於著名小說《哈利·波特》里「混淆咒」的咒語——施咒的效果是讓對方說話變得含混不清,從而喪失念咒語施法的能力。當然,用在區塊鏈里的 Mimblewimble,肯定不是這個咒語的原始意義了,它是指一個在比特幣交易中保護用戶數據隱私的提案。

這個提案最早以匿名的方式被發布在 Bitcoin 的 IRC Channel 里,作者化名為 Tom Elvis Jedusor,也就是法語版《哈利·波特》里伏地魔的名字。

其實最早提出的 Mimblewimble 方案並不完整,後來經過社區其他人的改進和完善才有了現在的版本。這是一個為基於 output 模型的公有賬本提供加密貨幣隱私性的設計方案,並不涉及共識層,可用在幾乎任何共識規則系統上。

跟比特幣相比,Mimblewimble 最主要的優勢在於信息的隱私性,如交易金額等隱私信息都被密碼學技術保護。隱私性帶來的一個直接好處,就是交易中的數字資產具有完全的可替換性——例如一些資金可能會被第三方認定為來路不明、甚至標記為贓款,在使用時有被拒收的風險,而收款方為了避免此類風險,就必須承擔額外的驗證成本。

另一方面,比特幣等非匿名數字貨幣的交易歷史是完全透明公開的,如果對每一筆交易的金額和去向進行分析,事實上可以得到很多隱私信息,這也阻礙了它們成為更廣泛使用的交易媒介。

其實遠在比特幣之前,就有一種古老的交易形式可以實現對隱私性非常好的保護:交易雙方將錢藏到袖子里達成交易,這樣即使其他人目睹了這筆交易,也無法得知交易的金額等隱私信息。但是直接將這樣的思路照搬到區塊鏈里並不容易。因為在一個公開的賬本里,每一筆交易的合法性需要得到其他人的驗證,以確保交易的發起方確實授權了這筆交易,並且這筆交易沒有造成惡性通貨膨脹。

怎麼樣能既把一筆交易的具體信息「藏到袖子里」,同時又允許其他人驗證交易的合法性呢?這即是 Mimblewimble 所解決的問題。

我們先來看大家最熟悉的比特幣的設計。眾所周知,比特幣對交易的隱私性保護得並不是很好:在比特幣系統里,儘管每個用戶都有一個匿名的錢包地址作為在鏈上的化名/假名,但每個地址所對應的交易記錄與信息在上鏈後其實都是可以通過公開渠道查詢到的。通過將與匿名地址有交易往來的用戶的信息進行交叉分析,就可以輕易地追溯到用戶的真實身份。

MimbleWimble 三大貢獻為改善比特幣的隱私性、可替代性和擴容性

最初提出 MimbleWimble 這個方案的目的就是為了給比特幣提供隱私性。使用後有以下的好處:

保障隱私性:賬戶歸屬和交易關聯都會被隱藏,交易金額也會被隱藏起來。這也是 MimbleWimble 最直接的好處。

實現比特幣的可替代性:這意味著每筆錢都是同樣「乾淨」的,可互相替代的。比如在比特幣中,有些錢可能會被標記為贓款,一旦收到這樣的比特幣就有無法將它花出去的風險——很多機構都會拒絕接收這樣的贓款。有隱私性之後,每一筆錢看不到地址,就有了可替換性,最直接的好處就是收款方不用自己去追蹤看收到的錢是不是贓款,會為交易減少很多額外的負擔。就像大家平時花人民幣通常也不會專門查一下序列號,先檢查一下這錢是不是別人從銀行搶出去的。

對擴容有一些貢獻:這是一個額外的好處。主要是通過裁剪,可以減少狀態歷史的尺寸,降低存儲壓力和同步數據的難度。

而 Mimblewimble 主要提高的就是交易的隱私性,使得其他人無法輕易看到哪些用戶之間發生了交易,更看不到交易的具體金額是多少。

實際上,Mimblewimble 交易的連接性的保護,是一種比較被動的方式。即大家不會保存所有交易歷史,於是就不能直接從網路查詢到很久以前的交易記錄了。但如果實時地關注每筆交易的動態並且全都記錄下來,還是可以得知每筆交易是由哪個用戶發給誰的,不過即使如此,交易的金額依然是從始自終都不會公開。

Mimblewimble 所用技術主要有保密交易(Confidential Transaction,也稱 CT)、Coin Join 和 Cut-through 等。簡單分述如下:

Confidential Transaction 的核心思想是以 Pedersen 承諾方案(Pedersen Commitments)、而非明文的形式存儲每個 output 的金額,再通過加法同態的性質驗證交易輸入輸出的金額是合法的;

Coin Join 是在出塊時即把整個區塊里的所有交易混合成一筆多個 input 到多個 output 的巨大交易,從而使其他人難以追蹤每筆 output 資金來源,相對比特幣的不可關聯性也更好;

Cut-through 技術則是對交易歷史進行裁剪,捨棄所有不需要的中間交易數據,最後只留下相當於從 Coinbase 轉賬到 UTXO 的一筆交易。這樣可以極大地縮小整個區塊鏈的歷史數據體積,從而減輕存儲壓力並有利於整個系統擴容,特別有利於新加入的節點快速跟上整條鏈當前的最新狀態。

如果想要深入理解 Mimblewimble 的原理,需要先了解下有關橢圓曲線和 Pedersen 承諾方案的基礎知識(有興趣的讀者可以自行查閱相關資料,此處省略五千字)。

簡單來說,關於橢圓曲線,我們只需要知道:1)橢圓曲線跟我們高中學的橢圓沒有半毛錢關係,99%以上的人到大學畢業也不會學到;2)橢圓曲線上的元素可以進行加法和標量乘法的運算,但是除法運算極其困難——也就是說,給定橢圓曲線的兩個點 G 和 H,我們可以很容易地計算出 G H 或者 233*G 對應於哪個元素,卻很難計算 H/G 的值(也即找到一個滿足 k*G=H 的整數 k)。橢圓曲線簽名實際上也是利用了這個單向的性質。

Pedersen 承諾方案是一種承諾方式,即根據承諾值很難計算出對應的明文,但是如果給出明文則很容易驗證它和承諾值是對應的。這點其實跟我們常用的抗碰撞哈希函數有點像。《三國演義》中,周瑜和諸葛亮分別把自己想到的破曹之計寫在手心上然後同時攤開的橋段,描寫的就是一個線下版本的「承諾-驗證」過程。

當然,Pedersen 承諾方案還有一些額外的性質,那就是對於加法的同態性。它會把要承諾的數 v 和一個隨機數 r 一起記錄成 C=r*G v*H 的形式,其中 G 和 H 是橢圓曲線群的兩個生成元。這樣,我們把兩個分別關於 (v1,r1) 和 (v2,r2) 的承諾值(按照橢圓曲線的加法)加在一起就可以得到一個關於(v1 v2,r1 r2)的承諾值,並且在這個過程中都不需要知道 v1,v2 的值。

可能說到這兒,大家會覺得太學術了。橢圓曲線到底有什麼用呢?其實說到底,橢圓曲線就是為了保障賬戶的隱私和安全性。舉例說來,橢圓曲線就像是一個不透明的袋子,你可以把自己的金子放進這個袋子里,其他人就看不見你到底有多少金子。但是,你可以向別人證明幾個袋子加總共有 100 兩金子,同時別人卻無法得知每個袋子分別是幾兩。

Mimblewimble 的框架和原理

現在,我們從三個方面來介紹一下 Mimblewimble 的框架:首先是每筆 Output 輸出是什麼樣,也就是每筆錢會以怎樣的形式存儲;其次是每筆交易是什麼樣,也就是這些 Output 是如何轉換的;最後則是如何把交易打包成塊,把塊鏈接成整條區塊鏈。

我們先來看一下每筆的 Output 的呈現形式。同比特幣中的 UTXO 的一樣,Mimblewimble 的 UTXO 也是一個所有未花掉 Output 的列表。區別在於,比特幣的 UTXO 列表每一項呈現格式是一個地址對應一個明文金額,而 Mimblewimble 則非如此。Mimblewimble 在這裡用了 Pedersen 承諾方案的方式存儲每筆 Output 金額,並把其中隨機數的部分,作為交易生成簽名要用的私有信息。另外,每個 Output 還需要附有一個金額範圍的合法性證明,避免出現金額為負數或者溢出的問題。

然後是交易的處理。一筆交易其實就是資金從先前創建的 Output 流動到新創建 Output 里的過程。在 Mimblewimble,每筆交易的輸入輸出都是以 Pedersen 承諾方案的形式出現,金額都是被隱藏起來的。那麼怎麼去驗證交易的合法性呢?這裡其實有兩件事需要得到驗證:一是同一筆交易的輸入與輸出金額需要時能對上;二是交易得到了輸入資產所有人的授權。

如果有明文的金額信息,第一條是非常容易驗證的,只需比較輸入的整體金額相加等於輸出金額整體加上手續費即可。但是 Mimblewimble 交易中沒有出現具體的金額,所以這裡是利用了加法同態的性質進行驗證。比如說,現在有 C1=r1*G v1*H 和 C2=r2*G v2*H 兩筆輸入以及 C3=r3*G v3*H 和 C4=r4*G v4*H 兩筆輸入,我們只需要驗證 (C1 C2)-(C3 C4 fee*H)=k*G 即可。因為只有 v1 v2=v3 v4 fee 的時候 H 前面的係數才能正好抵消掉,只剩下 G 的倍數。

這裡的 k*G 被稱為 excess value,可以被作為一個公鑰,用於驗證的這筆交易是經過資產所有人的許可的,也就是需要一個以 k 為私鑰的簽名來證明交易得到授權。因為 k 實際上是 r1、r2、r3、r4 的一個線性組合,其中 r3 和 r4 是由接收方選取的隨機數,所以上述簽名實際上需要發送方和接收方合作進行一個以 k 為私鑰的多重簽名才能完成。交易手續費、excess value、以及對應的簽名合在一起,就構成了一筆交易的 kernel,用於輔助驗證交易的合法性。

其實,只是上述步驟還不足以保證交易合法。如果輸出的金額是負數,實際上就可以憑空地造出一些錢來。比如我把一塊錢轉到兩個賬戶里,這兩個賬戶分別有正的一萬零一塊錢和負一萬塊錢,這樣雖然轉賬前後總金額上是相等的,但實際上我可以拋棄掉金額為負的賬戶,於是最後的結果就是憑空多出了一筆錢。所以為了解決這個問題,每個輸出還必須附帶一個範圍證明,用於保證輸出對應的金額是正的且在某個範圍以內。這個證明最初是用環簽名做的,缺點是證明比較長,證明範圍在 (0,2^64) 大約要 5kB 左右。後來有了 Bulletproof 的零知識證明技術,可以把範圍證明的大小縮小到 1kB 以內。

接下來我們說一下如何把交易打包成塊。在這裡 Mimblewimble 用到了和比特幣裡面的 Coin Join 混幣技術類似的方法,把每個塊里所有交易輸入輸出分別按照順序排列,組成一個非常大的交易。我們可以很容易通過同態加法的性質,驗證這筆新交易的輸入輸出總金額是否平衡。但很顯然,礦工不可能對這筆交易重新做出一個簽名。所以每個交易的 kernel 都會被保留下來用於輔助驗證。

這裡其實還有一點小的 trick,就是如果直接用「excess value=輸入 commitment 之和-輸出 commitment 之和」的方式存儲的話,還是有可能通過 kernel 中 excess value 的值從整個區塊的輸入輸出中找到對應的交易的輸入輸出的。所以,為了消除這種關聯性,Mimblewimble 除了 excess value 以外,還要求每筆交易指定一個 offset,使得「excess value offset*G=輸入 commitment 之和-輸出 commitment 之和」。然後在打包區塊的時候,可以把整個塊里所有交易的 offset 全部加總為一個總的 offset,這個總的 offset 既足以幫助驗證區塊內交易合法,又可以隱藏個別交易的 offset,消除關聯性。

有了單獨的區塊以後,我們可以把整個區塊鏈歷史上所有的區塊全都放在一起,再進行一次混合的操作,也就是所謂的 Cut-through。這次操作以後,就可以把所有已經花掉的輸出都從交易歷史中移除——因為它們會作為輸入輸出各出現一次,對於驗證金額來說正好可以抵消掉。當然,移除輸出的同時也可以移除它們對應的範圍證明,這就省下來了很多空間。

經過這樣的裁剪後,輸入端只剩下 Coinbase 發幣的輸入,這實際上可以從當前塊的高度直接算出來,不需要存儲;輸出端剩下的恰好是所有還沒有被花掉的輸出,也即通常所說的 UTXO。於是整個區塊鏈的歷史就可以不再存儲那些已被花掉的輸出了。為了驗證這個從 Coinbase 輸入到 UTXO 的交易的合法性,所有歷史交易的 kernel 依然有必要保留,不過 kernel 的尺寸比起每筆交易來還是要節省不少的。

Mimblewimble 在擴容性上的意義

比特幣目前有接近 4 億筆的交易,但是 UTXO 里大約只有 6000 多萬個 Output。新用戶若想加入比特幣網路,就得先知道過去所有的 200 GB 挖礦歷史,才能驗證最新的塊。而如果應用 Mimblewimble 的方式,區塊鏈的交易歷史會被捨棄,只留下大約 25GB 的歷史交易 kernel,這樣處理數據時的複雜度即會減少很多。當然,Mimblewimble 的 UTXO 需要附帶每個輸出的範圍證明,這是一個額外的負擔,但是這個負擔僅與 UTXO 的大小有關,而與整個鏈已經運行的時間無關。此外,採用了新的 Bulletproof 技術後,範圍證明的尺寸和驗證效率都有了很大的改進。


Mimblewimble 在實際項目中的應用

在 2018 年底和 2019 年初有 Grin 和 Beam 兩個基於 Mimblewimble 的項目先後上線。它們都為交易提供了更好的隱私性:沒有地址,也不會暴露交易金額,同時也難以把交易關聯起來。兩個項目都採用了 Bulletproof 技術用於範圍證明。此外,Grin 還支持多種常用的腳本,Beam 也計劃在今年實現對於常見腳本的支持,這在原本的 Mimblewimble 協議里是無法實現的,還用到了一些特別的技術。

這兩個項目最大的區別在於發幣的規則以及開發團隊獲得報酬的方式: Grin 選擇了一個線性的無上限的發行策略,開發團隊的報酬完全依賴於用戶和礦工們的捐贈;Beam 採用了更接近於比特幣的有上限且固定周期減半的發行策略,開發團隊靠著從前五年的挖礦獎勵中抽成來獲得收益。

我們來看看他倆的一個簡單對比:

首先,他們都通過 MimbleWimble 獲得了對於隱私性的保護。

其次,他們都採用了 Bulletproof 做範圍證明。

對於腳本和合約的支持方面:Grin 實現了多重簽名,閃電網路等。注意,MimbleWimble 只能驗證交易不能驗證合約。

Beam 不支持合約,但他們計劃要做。

網路層廣播:Grin 和 Beam 交易信息看不出,但是廣播層能直接看到 IP,依然可以得到隱私信息。通過加密再轉發,無人知道交易是誰轉出的。

Beam 還實現了 SBBS:這個只有 Mimblewible 需要做。因為 MimbleWimble 中的每筆交易需要雙方一起簽名。一方可以把簽了一半的東西,放在這個安全的 bbs 上,另一個人下載後再去簽名,最後把交易發出去。這樣的好處是不需要雙方同時在線。

pow 的區別:Grin 使用的是 Cuckoo cycle 的變種,而 Beam 是 Equihash

Grin 發幣是線性的, 所以會一直通脹

Beam:過段時間會減半,發幣總量有上限

Grin Foundation 是靠 donation 運營。之前捐款沒達到目標,還號召大家快點多捐一點。

Beam 是會從前五年的塊裡面抽稅用於獎勵開發者。

Grin 和 Beam 都是 Mimblewimble 技術在加密數字貨幣的實踐中非常好的嘗試。儘管它們還有種種不成熟和不足之處,但是這樣的嘗試必將為未來區塊鏈上的隱私保護提供更多寶貴的、可供借鑒的經驗。(本文首發於 DeepTech 平台每周二之 DeepHash 專欄)

楊光

楊光畢業於清華大學姚班,並於清華大學交叉信息研究院獲得計算機科學博士學位。加入 Conflux 團隊前曾在丹麥奧胡斯大學、中科院計算所、比特大陸從事研究工作。他的研究方向包括密碼學、博弈論和區塊鏈。他的博士論文曾獲得中國密碼學會優秀博士學位論文獎。

關於DeepHash 專欄 / 每周二

文/林佳誼

「區塊鏈技術非常複雜,而且有很多誤解。更可怕的是,很多人自認為了解區塊鏈技術,但表現出的卻是無知。學術機構有著巨大的責任去培養下一代的創新者。」在杜克大學商學院開設區塊鏈課程的教授 Campbell Harvey 曾經有感而發地說。

每項新興技術發展都有它的周期,愈是可能帶來重大變革的技術,這個周期往往也愈明顯。就在區塊鏈技術步入所謂「幻滅的低谷」之時,DeepTech 深科技認為,下一個產業風口,如今正在每個頂尖高校的實驗室、在各國央行與監管機構的研究室,在行業組織的研討會中醞釀著。

DeepTech 深科技認為,此時才是關鍵時刻,身為一家堅持深入報道科學科技產業的專業媒體與科技服務提供者,我們有責任也有必要,在這個時點上有帶領讀者去撥開迷霧、釐清誤解,培養對區塊鏈技術的更深刻認知。

因為此我們於每周二固定推出 DeepHash 專欄,由 DeepTech 資深編輯林佳誼,邀集千人學者兼天德鏈創始人蔡維德、分散式系統專家王嘉平、物聯網區塊鏈初創 Biilabs 創始人朱宜振等專家學者共同維護,每周一次,帶領讀者在技術研發、在法規政策、在行業標準,在國際趨勢,方方面面深入挖掘未來 3-5 年真正具有產業化潛力的區塊鏈知識。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 DeepTech深科技 的精彩文章:

黃仁勛回應 7nm 顯卡「缺席」:英偉達的優秀不靠它

TAG:DeepTech深科技 |