BTC
ETH
HTX
SOL
BNB
查看行情
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt

白話Mimblewimble:新型的隱私保護協議

星球君的朋友们
Odaily资深作者
本文約4126字,閱讀全文需要約6分鐘
用12歲就能理解的乘法,打造一種簡潔的隱私保護協議。
AI總結
展開
用12歲就能理解的乘法,打造一種簡潔的隱私保護協議。

編者按:本文來自以太坊愛好者以太坊愛好者medium,Odaily經授權轉載。

編者按:本文來自

( 微信號:ethfans ),作者:Conor O'Higgins,翻譯&校對: stormpang & 阿劍,原文來自

圖片描述

注:Mimblewimble 在設計上是一種公鏈的共識協議,特點則如下文介紹,可以不透露交易的具體信息。現在已經有不止一個團隊在實現Mimblewimble。

圖片描述

-《哈利波特》—— 華納兄弟出品—— 施展Mimblewimble 咒語片段-

二級標題

  • (編者註:我感覺者這口型不像是在使用Mimblewimble,倒是有可能是守護神咒(Expecto Patronum),你覺得呢?)

  • 二級標題

  • 中本聰的比特幣論文中有一個名為“隱私”的章節,其中中本聰非常清楚地闡釋了比特幣的隱私局限性。隨著攻擊者能夠更好地使用比特幣的數據定位或實名化比特幣用戶,這些不足會不斷“惡化”。這使得某些認為比特幣不與姓名關聯因此能夠保護隱私的人非常驚訝。讓我們一起來看看比特幣能夠分析出什麼數據,以及為什麼——

比特幣通過洩露3 個秘密來滿足貨幣系統的兩種需要

  • 接收方地址

  • 每一筆比特幣交易都洩露了3 個秘密:

發送方地址

發送比特幣的數量

接收方地址

比特幣並不是因為憎恨隱私性才顯示這些信息。它顯示這些秘密,是因為任何貨幣系統(黃金、現金、易貨貿易)都必須滿足兩個條件:

它必須能夠驗證接收的幣的數量與發送的數量相等。如果我能夠在一筆交易中從一個地址發送1 個幣,卻在另一個地址收到2 個幣,那麼這個加密貨幣系統必將崩潰。在正常的系統中,如果我將5 歐元放到你手裡,那麼我少了5 歐元,你多了5 歐元。在這個交易過程中沒有憑空產生的錢,也沒有憑空消失的錢。

我只能從我自己的銀行賬戶中進行電子轉賬,而不能從你的銀行賬戶中轉賬。我們必須能夠驗證交易是從借記卡以及個人密碼/網上銀行密碼、或加密貨幣中的私鑰持有者發出的。


比特幣通過洩露以上3 個秘密,從而滿足了這兩個條件。

比特幣交易以明文形式包含轉賬金額以及接收者地址。從而很容易滿足貨幣系統的第一個條件;我們看到5 個比特幣進入交易,5 個比特幣出來。

為了驗證比特幣系統滿足第二個條件,比特幣使用具有對應私鑰的公開地址。公開地址持有比特幣。 (交易)發送者通過使用對應私鑰產生一個簽名,給他的交易(即我剛才說明文包含交易金額以及接收者地址的交易)簽名。每個人都可以驗證這個簽名是由持有比特幣的地址對應的私鑰產生的;這樣我們就驗證了交易來自有權發起交易的人。

Mimblewimble 可以在不洩露以上3 個秘密的情況下,滿足貨幣系統的這兩個條件。

證明過程需要用到一些簡單的數學,只要10 歲就可以理解。在證明過程中我還會使用一些複雜的數學,大概12 歲就可以理解。

許多人很害怕數學,每當在文章中遇到的時候都會跳過。不過,如果只是下圖那麼簡單,你就不會害怕了吧?

但是,讓我們做一點改變。讓我們把問號移到另一邊:

二級標題

(插播:在本文中,我將討論像83 和23 這樣的數字相乘,因為我喜歡這些數字,很熟悉也非常好理解。但計算機不會使用這些數,它們使用非常大的數。實際上,一台計算機能夠求解出我是用了哪兩個數字相乘得出4221,但是,即便一台性能非常高的現代計算機,也很難求解出你使用哪些數字相乘得到一個極大的數字。 )

二級標題

為了簡單起見,我不想討論橢圓曲線。在實際中,加密系統不使用任何數字,而是使用一個被稱為橢圓曲線點的特殊集合。但簡單的數學性質在這兩種情況下是一樣的:乘法很簡單,但乘法的逆操作——因式分解就很困難。

二級標題

利用乘法的屬性來隱藏信息,並驗證所有權

如果我問你以下缺失的數字是什麼……

……你並不能很快地告訴我,因為問號在左邊,很難去找出缺失的因子。

好吧,我來告訴你。缺失的數字是23 和83。現在你想驗證我說的是不是真的,即缺失的是否真的是23 和83 ,這已經變成了一個簡單的乘法問題。

你能夠很快地求解出答案,23 和83 確實是能讓乘積等於20,348,031 的因子。

如果我撒謊了,你也很容易就能發現,因為我給出的因子將不能使乘積等於右邊的大數。我不能編造錯誤的因子,也不能猜出或計算出它們。我必須提前知道這兩個因子。

(插播:注意右邊的大數可以整除左邊的所有用於構造它的數字;它能夠被83 整除、被11 整除、被左邊所有數字整除。我們將在之後利用這一點。)

這僅僅是乘法。大概10 歲的娃娃都能明白。但是,我們為加密貨幣完成了兩件非常重要的事情——

我們想要隱藏信息。現在我們知道該怎麼做了:我們能夠通過乘以未知數的形式隱藏信息。這就使得破解原始信息變得非常困難。

我們也想證明我們持有私鑰。現在我們也知道怎麼做了:給出大數的因子即可。

我們只需使用乘法的基本性質就能做到這兩點。

隱藏交易金額

讓我們使用大且秘密的數字乘以交易金額的方式來隱藏交易金額。比特幣洩露的三種信息之一就是發送比特幣的數量。當我通過比特幣區塊鏈發送5 個比特幣的時候,交易金額是明文顯示的(即,數字“5”)。我們用乘式把它隱藏起來。在下面這個等式中,你就不容易告訴我交易金額是多少了:

上面這個等式有點像交易金額在Mimblewimble 中的表示形式,但不完全一樣。在Mimblewimble 中,發送方與接收方都給出了這樣一個數字:

這個數字叫做Pedersen 承諾;我也不知道為啥叫這名兒。需要注意的重要一點是,Pedersen 承諾中包含了交易金額的部分(但是通過乘以一個大數隱藏了交易金額)以及私鑰的部分。

請注意,發送方與接收方都參與到了創建交易的過程中。這跟比特幣是完全不同的。這種方式避免了洩露接收方地址,但使得發送方必須以某種方式與接收方取得聯繫。 Beam 包含一個安全的BBS 系統(與Beam 區塊鏈分開),使得發送方與接收方能夠安全地交換他們的Pedersen 承諾。

(為了簡單起見,我省略了交易費。在實際實現中,當我向一個朋友或商販打錢時,我通常也會給礦工一些交易費。原理是一樣的。我還遺漏了一些關於rangeproofs的內容,它證明隱藏的交易金額不是一個負數,因為發送-5,就像把5 個免費的幣塞進我的錢包。也許哈利波特有別的咒語可以實現這個:D)

乘法結合率

下面的內容是我們要做的最高級的數學內容。在愛爾蘭,你到12 歲已經是一個大男孩的時候,學校才會教這些內容——

如果我想2 加4 乘以3,我可以首先計算2 + 4 = 6,再使用6 乘以3,得到18,或者我可以先計算2 × 3 = 6,再計算4 × 3 = 12,最後的和也是18。

我想讓你們記住的一點是:當我們要使用兩個數之和乘以第三個數時,我們既可以先求他們兩個數之和再乘以第三個數,也可以先計算一個數與第三個數的乘積,再計算另一個數與第三個數乘積,最後將兩個乘積相加。這兩個過程是等價的。

證明貨幣輸入等於貨幣輸出

記住貨幣系統所需的條件之一是接收的數量減去發送的數量必須為0。我把5 歐元放到你手裡,你得到5 歐元。 5 - 5 = 0。

一個Mimblewimble 交易包括兩個Pedersen 承諾:一個用於記錄進入交易的貨幣數量,另一個記錄交易結果中的貨幣數量:

例如,如果發送者少了5,那麼接收者獲得5:

但是我們不需要分別將輸入交易金額乘以這個大數,然後將輸出交易金額乘以這個大數,我們可以像這樣把他們合併在一起:

(譯者註:後文圖片中的“key1 + key2 × big number2”,都應為“[key1 + key2] × big number2”)

5 - 5 = 0。0 乘任何大數都依舊是0。那麼這個式子就剩下:

或者說:

交易金額部分就消失了!雖然在每一步中,交易金額都通過與大數相乘隱藏了起來,但我們無需公開這些數值,只需驗證結果為零(就可以保證系統沒有出錯)。

  • 交易金額部分得已隱匿的原因是貨幣輸入與貨幣輸出是相等的。如果它們不相等,那麼它們之和就不會是0,然後化簡的結果就會多出一些東西來……

  • ……如果交易金額最終結果不為0,那麼交易核(transaction kernel)就不能被23 和83 整除。 Beam 協議將拒絕該交易,因為這個交易的格式不對。

(你可能會注意到,在某些情況下,如果交易金額部分數值不為零,例如是1909,那麼交易核依舊能夠被23 和83 整除。因為我在說明中使用的數字非常小,這種巧合是有可能的。但在計算機使用的非常大量級的數字域中,這種碰撞的可能性接無限近於零。)

  • 剩下的就是私鑰部分

  • 私鑰部分是一個非常大的數,這個數是發送者與接收者私鑰之和,與另一個大數的乘積。私鑰可以整除這個大數(譯者註:經多方參閱,此處的“這個大數”指的應是“bignumber2”,因此交易核也一定能被私鑰整除),就像83 和23 是右邊大數的“秘密數字”一樣。


因此,交易核能夠被私鑰整除的原因有兩個:

歡迎加入Odaily官方社群