MimbleWimble與她的雙生子 — Grin和Beam

年初最熱門的匿名幣以及其協議

Metheus Yang
CryptoCow
23 min readApr 12, 2019

--

Grin 和 beam的前世今生與對比

台灣時間1月15日凌晨, Grin主網正式上線,成為幣圈一時熱門話題,為寒冬中奄奄一息的幣市帶來一絲春意。幣圈有人這樣稱Grin : 「Grin也許是近年來最硬核、最接近比特幣原教旨主義的加密貨幣;小區塊、純匿名、抗審查、反追蹤,密碼龐克、無政府主義再一次掀起波瀾。」

MimbleWimble 是一個在 2016 年由筆名 Tom Elvis Jedusor (佛地魔名字的法文翻譯) 的匿名人士提出的共識協議。 MimbleWimble 原本是指稱哈利波特中的噤聲咒。因此也可知其欲主打的痛點,MimbleWimble 認為現在區塊鏈上太多資料是不必要的,同時也揭露太多訊息了。MimbleWimble 所使用的方法能夠大幅減少所需資料的儲存空間,同時提升私密性。這是一個令人讚嘆的驚人成就,因為之前我們看到主打私密性的加密貨幣,通常都會讓所需的儲存空間有大概一個量級大幅增加的問題。

雖然MimbleWimble有著優秀的理論基礎,然而就如其名一樣,自兩年多前橫空出世以來,便漸漸地淡出了人們的視線。直到近日有兩個採用其協議的項目,主網上線,才又引起廣泛地討論。這就是Grin和Beam,實現MimbleWimble區塊鏈的開源軟件項目。前者是由網路匿名社群開發,且核心開發者都採用了來源《哈利波特》相關的綽號。後者則是由一家來自以色列的新創公司Beam Development Ltd負責,這兩者填補了(MimbleWimble 協議所缺失的)實現一個完整的區塊鏈和加密貨幣必需的一些東西。

Grin 項目的主要目的和特性如下:

• 隱私性的加強。 這使Grun 的貨幣具備了完全可替代性。

• 區塊大小與交易量相適配,歷史交易僅保留約100位元組的交易核心(transaction kernel), 相比其它區塊鏈節省了大量空間。

• 強大且經過驗證的密碼學原理。 MimbleWimble只採用橢圓曲線密碼,該密碼學技術已經過了數十年的使用和測試。

• 簡單的設計使得日後的程式碼審查和維護變得容易。

• 社群驅動。採用一種對於 ASIC 不友善的挖礦算法(Cuckoo Cycle算法),借此來鼓勵去中心化的挖礦。

跟幾個現行的匿名導向加密貨幣橫向進行對比的話,Zcash 然仍是實現行匿名能力最強的加密貨幣。Zcash 的交易在離開錢包前就已經隱藏掉所有重要訊息,但是Zcash 現在遇到最大的問題是在用 Zcash 的零知識證明演算法去加密交易所花的時間成本十分高昂。另外老牌的匿名幣門羅幣 (Monero) 跟MimbleWimble 有些許類似,都是使用保密交易 (confidential transaction),只不過門羅是透過環狀簽名去隱藏付款者的身分。但是門羅幣的交易的封包大小較大,造成門羅幣交易的手續費相對高昂。

Grin 在出礦獎勵的部分,Grin 展現出自己特別的一面,Grin 是穩定一個區塊 60 個 Grin,而平均約一分鐘產生一個區塊,也就是說約莫一秒產生 1 個 Grin。相較於 Beam 施行標準的加密貨幣挖掘緊縮政策(Beam 的獎勵每四年遞減減半一次),Grin更具備了成為未來世界通貨的野心,它的目標是考量到未來世界人口以及生產力的增加,所以令貨幣供給穩定上升才能提供足量且相較穩定價格的貨幣令人們日常使用。顯然地,在第一年到第二年,其供給量成長了兩倍,因此可判斷在前幾年Grin的單位價格並不會太高,甚而容易下跌。(否則每隔一年、兩年、四年,總市值便翻倍)然而到了後期,需要過1024、2048年才會翻倍。顯然地,通膨率 =(100 / 挖掘年數)%。也就是第十年時,通膨率為10%,25年為4%,50年為2%。我們都知道加密貨幣的丟失是常見的事情 (忘記私鑰就是一個例子),因此無上限的開採過程才能使其在宏觀的歷史視角中具有一席之地。藉由不會預期稀有而上漲的屯幣心理,核心開發者Michael Cordner曾在接受媒體採訪時解釋了這一設計的原因,他們更想讓Grin成為Money(交易媒介,MoE),而不是如同 BTC 般地價值存儲工具(store of value,SoV)。此外,這也避免了通縮所導致的早期礦工優勢,以及開採完畢後僅靠手續費維持誘因的開採模型。

此外,Grin的開採算法一開始是想要抗ASIC的,不過在去年年中(2018年八月),其社群承認ASIC是不可避免的。而且ASIC事實上也可以去中心化,這是因為顯卡花費的電力成本較高,保養困難,導致一般人入門門檻較高。而且ASIC也能使網路攻擊難度變高(因為總算力增加了)。鑒於上述觀點,Grin 隨後決定改變工作量證明(PoW)演算法,這兩種算法都是 Cuckoo Cycle 的變化,主演算法是ASIC 友善(ASIC Friendly)演算法和次演算法是 ASIC 抗性(Asic Resistant)演算法,並在專案主網上線後逐步淘汰次演算法。 Grin 中的主 PoW 演算法叫做 Cuckatoo31 +,是 Cuckoo Cycle 對 ASIC 更加友善的版本。 它被稱為 ASIC 友善的是因為它可以使用數百MB 的 SRAM 來提高性能使得 ASIC 算力超過 GPU。次演算法,稱為Cuckaroo29,是一種記憶體密集型的 AR PoW 演算法。然而,真正保證 ASIC 抗性的唯一方法是有計劃的進行硬分叉,不斷調整演算法(類似 Monero 的做法),使已生成的 ASIC 作廢。 Grin 將每六個月執行一次這樣的硬分支來調整演算法,以抑制對該 AR 演算法生產 ASIC 的積極性,直到該演算法在兩年內逐步淘汰。一開始,Grin 的結構是 90% 的區塊用次演算法挖礦,10% 的區塊用主演算法挖礦。2 年後,全部的區塊都將使用主演算法進行挖礦。在未來 2 年,Cuckatoo31+(主演算法)將獲得更大比例的區塊獎勵,每月線性增長 3.75%。Grin 社群希望,到Cuckatoo31+佔據全部的挖礦份額時,將出現多個 ASIC 製造商健康競爭的情況。Grin 每經過 60 個區塊窗口,會調整一次難度。而Beam 在這方面想法較為傳統,其供應計劃是通貨緊縮型的,在第一年之後區塊獎勵下降 50%,之後每四年就會減少一半,直到達到 2.63 億的極限(133年後),以及創始人獎勵(前五年 20%)的方式,來讓前期投資者有所收益。這個獎勵模式是和Zcash相似的,而其算法也是使用和Zcash一樣的Equihash算法,不難看出其目標對手。

接著看基於相同共識協議的Grin 和Beam,兩者在社群知名度的表現大大的不同。先看看 coinmarketcap上的市值(2019年 4月 7 日), Grin 市值排名 185,Beam 市值排名308,有著不小的落差。若以 GitHub 上的星星數為指標(2019年 4月 7 日),Grin 的星星數為 4989,而 Beam 的星星數為 374,但也不必對於Beam悲觀,我們翻翻其他專案比如說排名 21 的老牌幣 NEM 也僅 319,Beam 的表現相較許多底層公鏈並無太大差距,只是 Grin 表現得太好。除此之外, GitHub 上的 fork 數也部分反映了開發者對於這個專案的熱情及想要投入的人數。Grin 的 fork 數(2019年 4月 7 日)是 750但Beam 僅有 79。這個數字明顯反映出兩個專案對於社群開發者的吸引力及期待的落差。這懸殊的十倍落差若是考慮兩個專案個別使用的語言 Rust 和 C++的使用者人數,更會進一步地拉開。下面兩張圖是參考了TIOBE Index 2019 三月的使用排名。

但有趣的是,在開發進度的部分,Grin 看起來大幅落後 Beam,Grin 的 commit數(2019年 4月 7 日)只有1952 而 Beam 的 commit 數則有4711,或許這就是背後有沒有一家營利組織來推動的關係,盈利企業在推動進度這點,畢竟有著許多壓力,還是勝過僅只靠捐贈及自願投入的開放社群。從時間來看Beam才出現一年,而Grin卻是從2016年,MimbleWimble出現後半年內就開始。然而主網上線的時間卻稍晚於Beam。因此我們可以看到沒有資本營運以及公司投資壓力,開發進度將被推遲的必然性。(不過Beam的 CEO 宣稱將在 2019 年底建立 Beam 基金會,且團隊將在 5 年內將社群管理交棒給 Beam 基金會。 其負責管理對 Beam 協議的改進和組織開發,資助促進與 Beam、MimbleWimble 和蒲公英 (Dandelion) 協議相關的研究,提高社區意識且促進發展,以及強調對加密貨幣和金融主權中對隱私重要性的認識。)由上述數據做總結,我們可以發現,現在這個時間點,不管在鏈圈或者幣圈都還是有著不少的自由主義者以及密碼龐克愛好者,憧憬比特幣的本質概念。開發者匿名、沒有預挖、沒有 ICO、純社群投入,且開發團隊為防止幣價被操作,也拒絕了早期投資,而選擇了發起公開捐款的請求。這充滿理想色彩傳奇的創立過程還包含了 Grin 開發所使用較為新潮的 Rust 程式語言,而並非像 Beam選擇較傳統的 C++。雖然說Beam也是沒有 ICO 以及預挖,然而礦工前五年的百分之二十收益需要繳交給開發者、投資人、非營利基金會。的確公司需要資本回收,但聽起來更具理想的Grin,吸引力卻因此更勝 Beam,市值也來得高,社群的力量也更大。相對而言,在治理方面,Grin 像是門羅幣或比特幣,而 Beam 則更像是 Zcash。

MimbleWimble 的原理,挑戰與未來

與 Zcash 相比,MimbleWimble 或 Monero 的優勢之一是它們依賴於與比特幣相同的簡單密碼學基礎原理。MimbleWimble 使用的是較為簡單並且已經於比特幣中使用的橢圓曲線加密。因此我這裡來討論MimbleWimble的原理,為什麼它能夠讓所儲存空間減小的同時又能保有隱私性呢?一開始我將從橢圓曲線密碼(ECC)的簡短描述開始,這是MimbleWimble的重要基礎。接著描述其區塊鏈交易和區塊的所有關鍵要素(這邊大量參考了官方釋出的白皮書資料)。除了負責交易確認的兩個基本屬性外,最核心的技術就是Confidential Transactions、Coin Join、Range Proof 和 Cut-through。但在提到這些核心技術以及橢圓曲線理論之前,先來說一個MimbleWimble最有名的性質:沒有地址。

不使用地址最核心的理由是為了增強區塊鏈的隱私性和增加可規模化(scalability)。在基於MimbleWimble 的區塊鏈中,用戶必須進行鏈下通信來進行交易。交易發起方向接收方證明其持有足夠交易的貨幣數量,並向接收方轉移這些貨幣的控制權。因為沒有一個所謂的「地址」,所以也沒有「標準」方式來進行交易。因此交易雙方需要建立一個管道,從而發送貨幣持有證明及轉移貨幣控制權限。這與絕大多數的加密貨幣非常不同,它們一般是單方發送,也就是收幣方不需要同意收取,發起方就可以發送到接受方地址。

橢圓曲線只是一群我們稱之為 C 的點。這些點可以被加、減或乘以整數。 給定一個整數 k 並使用純量乘法運算,我們可以計算k * H,這也是曲線 C 上的一個點。 給定另一個整數 j,我們也可以計算(k + j)* H,它等於k * H + j * H。 橢圓曲線上的加法和純量乘法運算保持加法和乘法的交換率和結合律:

(k+j) * H = k * H + j * H

在 ECC 中,如果我們選擇一個非常大的數字 k 作為私鑰,則 k * H 被作為對應的公鑰。 即使人們知道公鑰 k * H 的值,推導 k 幾乎不可能 (或者換句話說,橢圓曲線點的乘法計算的計算量是微不足道的,然而曲線點的「除法」計算卻極其困難。)

先前的公式(k + j)* H = k * H + j * H中, k 和 j 都是私鑰(一個發送保留,一個是雙方都有),演示了從兩個私鑰的總和以及得到公鑰(k + j)* H,等價於每個私鑰的對應公鑰總和以及(k * H + j* H)。

MimbleWimble 的交易確認依賴於兩個基本屬性:

• 零和驗證。 輸出總和減去輸入總是等於零,確保交易沒有憑空創造新的貨幣,而且不會顯示實際金額。

• 擁有私鑰即擁有交易輸出的所有權。 像大多數其他加密貨幣一樣,交易輸出通過擁有 ECC 私鑰來保證其所有權。 然而,在MimbleWimble中,證明一個所有者擁有這些私鑰並不是通過直接簽署交易來實現的。下面介紹如何平衡以及致盲因子,並借此說明上面的這兩個基本屬性是如何得以實現的。(以下計算都忽略手續費)

Balance

基於上面描述的ECC的屬性,可以在交易數據中掩蓋實際交易值。如果 v 是交易輸入或輸出的值,而 H 是橢圓曲線,我們可以簡單地在交易中使用v * H來隱藏 v。 這是因為使用ECC操作,我們仍然可以驗證交易的輸出總和等於輸入總和:

v1 + v2 = v3

v1*H + v2*H = v3*H

驗證每筆交易的這個屬性,允許共識協議在驗證交易的過程中不會憑空創造出金錢,且無需瞭解實際的交易金額是多少。但是,可用數值是有限的,攻擊者可以嘗試每一個可能的數值來猜測其交易金額。 另外,知道 v1(來自上面的交易示例)和 v1 * H,就等於在整個區塊鏈中揭露了等於 v1 的交易。 出於這些原因,我們引入了第二個橢圓曲線上的一點 G和私鑰 r 作為致盲因子(blinding factors)。

交易中的輸入或輸出值可以表示為:

r*G + v*H

他們的乘積 r*G 是 r 在 G 上的公鑰。v 是輸入或輸出值,H 是另一個在橢圓曲線上之一點。

無論是 v 還是 r 都不能被推導出來,從而利用了橢圓曲線密碼學的基本屬性。 r * G + v * H被稱為 Pedersen Commitment 。作為一個例子,我們假設我們想用兩個輸入和一個輸出創建一筆交易。 我們有:

• vi1 和 vi2 作為輸入值

• vo3 作為輸出值

滿足:

vi1 + vi2 = vo3

為每個輸入值生成一個私鑰作為致盲因子,將上面的等式替換每個值為他們各自的 Pedersen Commitments,我們獲得:

(ri1*G + vi1*H) + (ri2*G + vi2*H) = (ro3*G + vo3*H)

並且要求:

ri1 + ri2 = ro3

接著我們介紹致盲因子來掩蓋實際交易值的原理。MimbleWimble的另一個重點就是它可以用來證明幣的所有權。甲給乙發了30個幣並且隱藏了這個數字,乙選擇了243148作為他的致盲因子(請注意,在實踐中,致盲因子就是一個私鑰,是一個非常大的數字)。 區塊鏈上的某處顯示以下交易輸出,並只能由乙來用(做為交易輸入):

X = 243148*G + 30*H

上述加法的輸出值,是對所有人可見的。 但是交易金額 30 只有甲和乙知道,而 243148 只有乙自己知道。之後,假設乙想將這 30 個相同的幣轉移給丙。 需要建構一個簡單的交易,以便:

from Xi to Y

其中 Xi 是一個輸入,它花掉乙之前得到的輸出值 X ,而 Y 是丙的輸出。如果不知道乙的私鑰243148,就沒有辦法建立這筆交易。的確,如果丙要平衡這個交易,他既需要知道發送的值,也需要知道乙的私鑰, 以便:

Y — Xi = (243148*G + 30*H) — (243148*G + 30*H) = 0*G + 0*H

因此這裡可以確定已被歸零,沒有創造新的金錢。

現在知道了丙的輸出中的私鑰(在上面的情況下,它必須與乙的相同,為了讓等式兩邊平衡),所以乙可以把錢從丙那裡拿回來。為了解決這個問題,這裏允許丙增加他選擇的另一個數字 2031232。最後在區塊鏈上的結果變成了:

Y — Xi = (2031232*G + 30*H) — (243148*G + 30*H) = 1788084*G + 0*H

現在交易不會再歸零了,我們在 G前面有一個 excess value(1788084),這是所有致盲因子總和的結果。 但是因為1788084 * G是橢圓曲線 G 上的有效公鑰,1788084, 對於任何x和y,只有 y = 0 是 G 上的 x * G + y * H 有效公鑰。因此,協議需要驗證的其實就是:(Y — Xi)是 G上的一個有效公鑰,以及交易者知道私鑰(這裡就是1788084)。最簡單的方法就是要求使用 excess value(1788084)進行簽名,然後驗證:

交易者知道這個交易輸出的私鑰,然後計算交易輸出的和,減去輸入,加起來等於0。

在上面的例子中,乙必須分享他的私鑰(致盲因子)給丙。 一般來說,即使私鑰永遠不會被重用,這也不是一個十分可取的方法。 但實際上這不是問題,因為交易包括找零的輸出(input)。

比方說,乙只想從自己收到的來自甲的30個幣裡送出10個幣給丙。而乙簡單地生成另一個私鑰(比如12345)作為一個致盲因子來保護乙的找零的輸出(input),並告訴丙,乙正在發送10個幣給他。而丙像以前一樣使用自己的私鑰:

Your change output: 12345*G + 20*H

丙 output: 2031232*G + 10*H

最終,鏈中發生的交易基本就如上述過程。簽名使用excess value,例如這個例子當中就是1800429。

(12345*G + 20*H) + (2031232*G +10*H) — (243148*G + 30*H) = 1800429*G + 0*H

小結

MimbleWimble交易包括以下內容:

• 一組輸入和一組以前 (已經上鏈) 的輸出。

• 一組新的輸出(未上鏈)包括:

◦ 一個值和一個致盲因子在曲線上相乘並相加為r.G + v.H.

◦ 範圍證明顯示v是非負的。

• 明確的交易費用。

• 一個簽名,通過採取 excess value(所有輸出之和減去輸入)並將其用作私鑰來計算。

例如:(12345*G + 20*H) + (2031232*G +10*H) — (243148*G + 30*H) = 1800429*G + 0*H

而這個例子中使用的簽名公鑰是 1800429*G。

任何一筆交易必須滿足以下條件:

outputs_sum — inputs_sum = kernel_excess

這個條件同樣適用於區塊,因為區塊只是一系列混合並消除不必要資料的交易輸入、交易輸出和交易核心。我們可以把所有的交易輸出加起來,減去所有的交易輸入,將結果與所有交易核心中的kernel excess之和做比較:

outputs_sum — inputs_sum = kernel_excess_sum

簡單來說,對 MimbleWimble 區塊和交易的處理方法是嚴格一致的。自此,我已經在上面解釋了MimbleWimble交易如何在保持有效區塊鏈所需的屬性的同時提供強大的匿名性保證,即交易不會憑空捏造出新的貨幣,並且通過私鑰建立所有權證明。

Cut-through

Cut-through是指MimbleWimble 的每一個區塊只記錄一連串的收入交易(inputs)、支出交易(outputs)、以及簽名。MimbleWimble 只需要計算總收入和總支出相減是否為零。礦工將多個交易組合成一個單個集合也就是一個區塊,並將這個區塊添加到鏈中。

每筆交易內的順序結構並不重要。 由於所有的單個交易一個人接收,一個人發送,總和會是零(零和交易的概念),因此所有交易輸入和輸出的總和也必須為零。與單個交易類似,所有需要在一個區塊中進行檢查的是所有權已經被證實(來自交易核心 transaction kernels),並且整個區塊沒有增加任何新的貨幣。 因此,匹配輸入和輸出可以被消除,因為它們對總和的貢獻被抵消了。這導致了以下資料密度更高的的區塊:

要注意的是,所有的交易結構已被消除,輸入和輸出的順序已不再成問題。 但是,該塊中所有輸出的總和減去輸入,仍然保證為零。

一個block的建立來自:

• block header。

• cut-through 後剩餘的一系列輸入。

• cut-through 後剩餘的一系列輸出。

• 每個交易的交易核心 (transaction kernel) 包含:

◦從所有commitments總和中獲得的公鑰r * G。

◦使用excess value生成的簽名。

◦挖礦費用 (fee)。

當區塊以這種方式構建時,MimbleWimble區塊提供了非常好的隱私保證:

• 更多的交易可能已經完成,但不會顯式出現(在區塊中)。

• 所有的輸出看起來都是一樣的:只是一些非常大的數字,不可能相互區分。 如果有人想排除某些輸出,他們將不得不排除所有輸出。

• 所有的交易結構已被刪除,使得區分哪個輸出與哪個輸入匹配成為不可能任務。然而,區塊仍然可驗證總而言之,我們得出結論:任何時間點的鏈狀態(不包括區塊頭)都可以通過。

這些信息來概括:

1. 區塊鏈上挖礦產生的貨幣總量。

2. 未使用的交易輸出(即UTXO)的完整集合。

3. 每筆交易的交易核心。

第一條信息可以使用區塊高度(與創世區塊的距離)推導出來。未使用的輸出和交易核心都非常緊湊。這有兩個重要的後果:首先是 MimbleWimble 區塊鏈中給定的節點需要維護的狀態非常小(對於比特幣大小的區塊鏈,幾個G位元組大小的數量級,可能優化到幾百兆位元組)。接著是當新節點加入構建MimbleWimble鏈的網絡時,需要傳輸的信息量也非常小。

• 極大的可規模化,因為絕大部分交易數據主體會隨時間消失,而且並不會影響安全性。

• 通過混合和刪除交易數據進一步匿名。

• 新節點能夠非常高效地與整個網路的其他部分同步。

另外,未使用的交易輸出(即UTXO)組成的完整集是不可篡改的,即使只是想去添加或刪除一些交易輸出。這樣做會導致交易核心中所有致盲因子的總和與輸出中致盲因子的總和不同。但這樣做的缺點是,使用 MimbleWimble 的收款及付款雙方必須同時在線上,並且有某種另外的管道去傳遞訊息,才能夠順利讓交易進行簽章(也就是之前所說的,並能只由單方發送)。最後一個有點打臉自己的主打痛點,MimbleWimble 的交易當還在未確認交易池(unconfirmed transaction pool) 時,支付款雙方的資料都還是公開的。所以其實要破壞MimbleWimble 的隱私性也不會太困難,只要有人持續記錄未確認交易池內的交易,就能讓交易的雙方暴露於陽光之下。在這狀況下,其實 MimbleWimble 的安全性跟比特幣幾乎是相同的,大概就像要找到某個論壇躲在網路暱稱背後的使用者是誰一樣的難度。並且很不幸的,其實不少公司甚至是國家機關,有很高的意願去記錄這些訊息,這些訊息在某些時候可能會有利可圖或者是十分有用。

CoinJoin

CoinJoin 是另一種 Greg Maxwell 發明的技術。CoinJoin 允許使用者將他們的交易組合在一起,從而使得交易圖譜變得更模糊。交易圖譜能夠指出誰是交易的參與者、顯示不同使用者之間的關係以及一個幣的歷史。比特幣區塊鏈有時假設如果需要花費多個輸入,那麼這些輸入一定屬於同一個使用者錢包。如果足夠多的使用者使用 CoinJoin,這就打破了一筆交易的多個輸入來自於同一個使用者的假設,從而保護了使用者隱私。CoinJoin 是一種很好的技術,但它有一個顯著的缺點:需要參與者之間的合作或互動。為了驗證一筆組合交易,每個輸入所有者都必須對整個組合交易簽名。因此,不能以線下或者匿名的方式組合交易。關於非互動式 CoinJoin 已經有了大量的研究。有一種技術實現了叫做單向聚合簽名(One Way Aggregate Signatures, OWAS)的方案,並且具有很好的發展前景。但是,該技術進行了更加複雜的加密假設(配對加密等)。

Confidential Transaction

Confidential Transactions(CT)最初是由 Greg Maxwell 提出的。提出 CT 的目的是為了保護比特幣隱私。它利用一種叫做“ Pedersen Commitmen”的方案,該方案將明文表示的未花費交易輸出(UTXO)數值替換為加密承諾。這裡不再多做解釋UTXOs。加密承諾與某個使用者私鑰連結,表示使用者持有加密承諾內包含的餘額,而不必顯示錶示餘額數值為多少。這意味著,當用戶需要顯示加密承諾中餘額數值時,他們並不能人為修改,因為只有加密承諾構造時的原始數值才能夠滿足所涉及到的數學運算。這種方案叫做“ 承諾機制 ”,共包含承諾和顯示兩個階段。重點在於,只有保密交易的接受者需要知道交易金額的具體數值。Pedersen Commitmen遵循加同態性質,因此我們能夠驗證交易內輸入和與輸出和相等。交易能在不知道交易金額的情況下得到驗證 — — 這是隱私保護的一大勝利。

Range Proofs

在所有上述計算中,我們都依賴交易值始終為正值。因此,接下來就是的問題則是負值。如果能夠構造對負值的承諾,例如 1BTC 和 -1BTC,然後忽略負的輸出,這等於是印鈔機增發貨幣,每筆交易中憑空捏造新的金錢,也就是雙花。這是不容易被檢測到的,因為即使x是負數,ECDSA曲線上的對應點x.H看起來也是任何值。為了解決這個問題,因此Confidential Transaction使用一種稱為範圍證明(range proof)的技術來處理這一問題。range proof是一種密碼學證明,其涉及承諾滿足具體範圍。一個數字落在給定 Range 內的Proofs,而不會洩露數字。因此對於任何r.G +v.H,我們都可以創建一個證明,證明 v 大於零且不會溢出。證明了承諾所提交的值為正,而無需透露其他任何與該值相關的資訊。range proof事實上就是Confidential Transaction輸出最大一部分,對於確保貨幣供應不發生嚴重通脹至關重要。

MimbleWimble 使用Confidential Transaction機制在其區塊鏈上進行記賬。所以在 MimbleWimble區塊鏈中沒有任何明文表示的賬戶餘額,鏈上只儲存了加密承諾以及range proof來確保系統中貨幣供應總量可以在不可見的情況下不斷檢驗。

Bulletproofs證明的過程中,甲方要先將機密資料搭配隨選的亂數一起做同態承諾,使得他不能事後更改其內含資訊。接著,乙方隨機選一個相關的問題配上甲方的承諾,來考驗甲能否作答。甲提供的答案是由他當初的亂數所計算而得,並且可以利用同態的特性,使所需的傳輸量大幅下降到對數量級。

結論

在本文中,我們介紹了基於MimbleWimble區塊鏈的基本原則。 通過使用橢圓曲線密碼的附加屬性,我們能夠構建完全不透明但仍可以正確驗證的交易。 通過將這些屬性,我們可以大量減少區塊鏈上的數據,從而實現大規模部署和快速同步。 MimbleWimble 協議將上述內容組合成適用於簡單支付的區塊鏈規範。它使用改進版的保密交易,以便餘額以加密承諾的形式儲存,而不必公開實際交易數量。移除每個區塊中的交易結構,並將每個區塊視為一個整體進行驗證。不需要地址的MimbleWimble 系統,交易輸出實際上都是承諾,只有知道用於建立承諾的特定引數的人才能使用這些輸出。用於建立承諾的引數稱為致盲因子,最初包含在純粹為保護隱私建立的保密交易中。在一個巧妙的修改中,MimbleWimble 使用致盲因子作為私鑰,用於授權花費交易輸出。這些致盲因子現在是身份驗證的基礎,一定不能公開給別人。

參考:

https://www.tiobe.com/tiobe-index/

https://realsimplecrypto.com/beam-vs-grin/

https://www.tokendaily.co/blog/mimblewimble-the-good-and-the-bad

https://github.com/mimblewimble/grin/blob/master/doc/intro.md

https://medium.com/scalar-capital/behind-mimblewimble-cd9da78a00e9

打賞地址:0x4c0afDCcBD27cD65B2e77e4788A5DE8aa0fE03e5

--

--

Metheus Yang
CryptoCow

昭昭天命eth :0x40aeeed73bdf3db76ae4b075ff3b4db677384267