橢圓曲線加密是區(qū)塊鏈的基礎(chǔ)技術(shù)之一,而Mimblewimble是對它的優(yōu)雅應(yīng)用,它使用Pedersen commitment實現(xiàn)完全保密交易,并消除了對地址和私鑰的依賴。同時,它與Bulletproofs相結(jié)合,帶來了更輕量的匿名和隱私,這對于物聯(lián)網(wǎng)同時實現(xiàn)擴(kuò)展性和隱私保護(hù)來說有重要的意義。
2017年和18年主要關(guān)注可擴(kuò)展性的話題。各種分叉和項目都把“擴(kuò)展性”作為他們專屬的口頭禪。這場辯論給我們帶來了解決方案,并向我們表明,當(dāng)和未來的計劃結(jié)合在一起的時候,就可以滿足當(dāng)前的需求。未來幾年的重點將是匿名性和同質(zhì)性的大規(guī)模采用。
在快速發(fā)展的互聯(lián)數(shù)據(jù)世界中,隱私正成為一個非常重要的話題。事實上,我們將隱私權(quán)委托給中心化的公司,其安全性通過你的密碼強(qiáng)度以及攻擊者破解密碼需要付出的努力來保證。隨著我們進(jìn)入互聯(lián)網(wǎng)的新時代,所有東西都是相互連接的,無須中介的信任和加密隱私必須成為其所依賴一切的基礎(chǔ)。在未來,面臨風(fēng)險的不僅僅是照片和信用卡號碼,而是你與之交互的一切,以及它所收集的數(shù)據(jù)。
如果目標(biāo)是在一個去中心化和無須中介信任的網(wǎng)絡(luò)中做到這一點,那么面臨的挑戰(zhàn)將是找到一系列適用性的解決方案,這些解決方案具有生態(tài)系統(tǒng)的多樣性并能匹配所預(yù)測的規(guī)模。了解到這一點,INT已經(jīng)開始研究如何在其網(wǎng)絡(luò)中實施兩種不同的隱私協(xié)議,以及搞定物聯(lián)網(wǎng)的兩個主要需求:可擴(kuò)展的隱私交易和隱私智能合約。
Mimblewimble
Mimblewimble是和橢圓曲線加密技術(shù)具有相同元素的一種全新的實現(xiàn),后者是大多數(shù)加密貨幣的基礎(chǔ)。
2016年8月,在bitcoin-wizards IRC頻道,一位匿名用戶發(fā)布了一個白皮書的Tor鏈接,聲稱它是“一種改進(jìn)比特幣隱私的想法”。緊接著是一個區(qū)塊鏈提案,它使用的交易結(jié)構(gòu)與今天看到的任何方案都完全不同,創(chuàng)造了迄今為止看到的橢圓曲線加密技術(shù)最優(yōu)雅的用途之一。
雖然發(fā)布的白皮書足以闡述支持該理論的想法和推理,但它不包含明確的數(shù)學(xué)或者安全性分析。Blockstream的數(shù)學(xué)家兼研究總監(jiān)Andrew Poelstra立即開始分析它的價值,在接下來的兩個月里,他創(chuàng)建了一份詳細(xì)的白皮書,概述了創(chuàng)建獨立區(qū)塊鏈所涉及的密碼學(xué)、基本定理和協(xié)議。
作為一個協(xié)議,它所要做的是完全隱藏交易中的值,并消除對地址的需求,同時解決擴(kuò)展性問題。
保密交易
假設(shè)你想隱藏發(fā)送的金額。一個眾所周知而且快速的隱藏信息的好方法:哈希!哈希允許你確定性地生成一個長度恒定的隨機(jī)字符串,而不用管輸入的長度,并且不可逆轉(zhuǎn)。然后我們可以對金額進(jìn)行哈希并在交易中把它發(fā)送出去。
X = SHA256(amount)
或者
4A44DC15364204A80FE80E9039455CC1608281820FE2B24F1E5233ADE6AF1DD5 = SHA256(10)
但是由于哈希是確定性的,有人會把所有可能金額的哈希編成一個目錄,這樣就無法達(dá)到隱藏的目的了。所以,我們不只是對金額進(jìn)行哈希,而是先用一個私有的盲因子乘以金額。如果保持盲因子私有,就無法知道哈希中的金額。
X = SHA256(blinding factor * amount)
這被稱為承諾(commitment),你承諾一個值而不去透露它,并且在不更改承諾的結(jié)果值的情況下,它是無法更改的。
但是,節(jié)點如何使用這種承諾方式來驗證交易呢?最起碼,需要證明你滿足兩個條件:一是你有足夠的幣,二是你沒有在這個過程中造幣。大多數(shù)協(xié)議驗證這一點的方法是消耗之前的一個(或多個)輸入交易,并且在該過程中創(chuàng)建不超過輸入總和的輸出。如果我們對這些值進(jìn)行哈希,而沒有辦法驗證這種情況,那么就可以憑空造幣。
input(commit(bf,10), Alice) -》 output(commit(bf,9), BOB), outputchange(commit(bf,5), Alice)
input(4A44DC15364204A80FE80E9039455CC1608281820FE2B24F1E5233ADE6AF1DD5, Alice) -》
output(19581E27DE7CED00FF1CE50B2047E7A567C76B1CBAEBABE5EF03F7C3017BB5B7, Bob)
output(EF2D127DE37B942BAAD06145E54B0C619A1F22327B2EBBCFBEC78F5564AFE39D, Alice)
如上圖所示,后面的進(jìn)行哈希過的值看起來和其他內(nèi)容一樣有效,卻導(dǎo)致Alice創(chuàng)造了4個幣作為交易找零。在任何交易中,輸入之和必須等于輸出之和。我們需要某種方法對這些進(jìn)行哈希過的值進(jìn)行數(shù)學(xué)運(yùn)算,以證明:
commit(bf1,x) = commit(bf2,y1) + commit(bf3,y2)
如果是有效的交易,則:
commit(bf1,x) - commit(bf2+bf3,y1+y2) = commit(bf1-(bf2+bf3),0)
或者僅僅是剩下的盲因子的承諾。
由于哈希算法的特性,這是不可能實現(xiàn)的。為了驗證這一點,我們必須公開所有的盲因子和金額。但是這樣做,就沒有秘密可言了。那么,我們?nèi)绾尾拍芄_一個由私有值生成的值,既不能逆向推導(dǎo)私有值,又仍然能驗證它滿足某些條件?聽起來有點像公鑰和私鑰加密…
我們在橢圓曲線密碼學(xué)入門中學(xué)到的是,通過使用橢圓曲線來定義我們的數(shù)字空間,可以使用曲線上的一個點G,將其乘以任意數(shù)字x,得到的是同一曲線上的另一個有效點P。這個計算是很快的,但是根據(jù)結(jié)果點和公開的生成元點G,幾乎不可能計算出使用了什么乘數(shù)。這樣我們就可以用點P作為公鑰,數(shù)字x作為私鑰。有趣的是,它們還具有可加和可溝通的奇妙特性。
如果取點P等于x ? G,點Q等于y ? G,它們相加的結(jié)果點W=P+Q等于用數(shù)字組合x+y創(chuàng)建的一個新點:
這個性質(zhì)稱為同態(tài),允許我們用我們不知道的數(shù)字做數(shù)學(xué)運(yùn)算。
因此,如果在承諾中不使用原始的金額和盲因子,而是將它們乘以橢圓曲線上的已知生成元點,我們的承諾現(xiàn)在可以定義為:
這被稱為Pedersen承諾,是所有保密交易的核心。
我們把盲因子稱為r,金額稱為v,并使用同一橢圓曲線上的生成元點H和G(不深入討論Schnorr簽名,出于驗證的目的,我們只接受在盲因子和金額的承諾中使用兩個不同的點)。代入我們之前的承諾中:
而私鑰則是盲因子之間的差值。
所以,如果輸入之和減去輸出之和在曲線上產(chǎn)生了一個有效的公鑰,則表明這些值已經(jīng)平衡到了零,并且沒有幣被創(chuàng)造出來。如果結(jié)果差值不是這種形式:
對于某個剩余盲因子,它將不是曲線上的有效公鑰,我們會知道它不是一個平衡的交易。為了證明這一點,用這個公鑰對交易進(jìn)行簽名以證明交易是平衡的,并且所有的盲因子都是已知的,在這個過程中,沒有泄露交易的任何信息。
以上所有的討論都假設(shè)這些數(shù)字是正的。使用負(fù)數(shù)同樣可以創(chuàng)建一個有效的平衡的交易,允許用戶在每筆交易中創(chuàng)造新幣。這被稱為范圍證明,每筆交易必須伴隨一個零知識論證以證明私有承諾值位于預(yù)定的取值范圍內(nèi)。
Mimblewimble和Monero都使用了Bullet Proofs,這是一種新的計算證明的方法,它將交易的大小減少了80-90%。
(當(dāng)前網(wǎng)絡(luò)中看到的平均交易大小,假設(shè)MW的交易大小平均是2個輸入2.5個輸出)
到目前為止,所描述的協(xié)議在Mimblewimble和Monero之間或多或少是相同的。差異點是如何對交易進(jìn)行簽名。
在Monero中,有兩組密鑰/地址,即支付密鑰和查看密鑰。支付密鑰用于生成簽名交易,而查看密鑰用于“接收”交易。交易是用一種被稱為環(huán)簽名的方法進(jìn)行簽名的,該簽名由花費(fèi)的輸出產(chǎn)生,證明密鑰組中的一個密鑰擁有支付密鑰。這是通過使用你的私鑰創(chuàng)建一個組合的Schnorr簽名,以及使用以前交易的公鑰創(chuàng)建的混合誘餌簽名者來完成。這些誘餌簽名者在數(shù)學(xué)上都是等效的,從而導(dǎo)致無法確定哪個是真正的簽名者。由于Monero使用了上面提到的Pedersen承諾,因此這些地址從不公開可見,僅用于索賠、交易簽名和產(chǎn)生盲因子。
另一方面,Mimblewimble不使用任何類型的地址。沒錯,沒有地址。這是協(xié)議的真正亮點。Jedusor證明了Pedersen承諾和對零承諾中的盲因子可以作為一次性公鑰/私鑰對來創(chuàng)建和簽名交易。
使用橢圓曲線加密的所有基于地址的協(xié)議都以基本相同的方式生成公鑰-私鑰對。通過將一個非常大的隨機(jī)數(shù)(k_priv)乘以橢圓曲線上的一個點(G),其結(jié)果(K_pub)是同一曲線上的另一個有效點。
這是所有地址生成的核心??雌饋硎煜??
回憶一下上面的承諾:
每個盲因子乘以生成元點G(紅色)就是它!r?G是私鑰r的公鑰!因此,我們可以使用這些盲因子來構(gòu)建簽名以證明我們擁有輸入和輸出,而不是使用地址。
這種看似微小的變化消除了地址的關(guān)聯(lián)性以及對使用scriptSig過程來檢查簽名有效性的需求,大大簡化了保密交易的結(jié)構(gòu)和大小。當(dāng)然,這意味著(此時)交易過程需要各方之間的交互來創(chuàng)建簽名。
CoinJoin
盡管所有地址和金額現(xiàn)在都隱藏起來了,但仍然有一些信息可以從交易中收集。在上面的交易格式中,仍然可以清楚地看到哪些輸出被消耗,交易產(chǎn)生了哪些輸出。這個“交易圖”可以揭示有關(guān)盲因子所有者的信息,并根據(jù)所看到的交易活動構(gòu)建用戶畫像。為了進(jìn)一步隱藏和壓縮信息,Mimblewimble實現(xiàn)了來自Greg Maxwell的叫做CoinJoin 的想法,它最初是為比特幣開發(fā)的。
CoinJoin是一種將多個交易的多個輸入和輸出組合在一起的無信任方法,將它們連接到一個交易中。這樣做是為了掩蓋哪個發(fā)送者支付給哪個接收者。要在比特幣中實現(xiàn)這一點,用戶或錢包必須進(jìn)行交互以加入相同數(shù)量的交易,這樣你就無法區(qū)分兩者。如果能夠在不共享私鑰的情況下組合簽名,那么就可以為許多交易(類似于環(huán)簽名)創(chuàng)建組合簽名,而不需要受到相同數(shù)量的約束。
(在這個CoinJoin交易中,3個地址擁有4個輸出,無法把地址和輸出關(guān)聯(lián)起來)
在Mimblewimble中,對一個或多個交易執(zhí)行余額計算仍然可以得到有效的對零承諾。我們需要做的是為合并的交易創(chuàng)建一個組合簽名。Mimblewimble天生就能夠為這些使用Schnorr簽名構(gòu)造的承諾構(gòu)建組合簽名。使用“單向聚合簽名”(OWAS),節(jié)點可以在創(chuàng)建區(qū)塊的同時將交易組合為具有聚合簽名的單個交易。使用該方法,Mimblewimble將區(qū)塊級別的所有交易連接起來,將每個區(qū)塊作為包含所有消耗的輸入和創(chuàng)建的輸出的一個大交易來創(chuàng)建。這同時模糊了交易圖,并且具有移除區(qū)塊內(nèi)消耗的中間交易的能力,減小了區(qū)塊的總大小和區(qū)塊鏈的大小。
切斷(Cut-through)
我們可以更進(jìn)一步。為了驗證這個完全“連接”的區(qū)塊,節(jié)點將把所有的輸出承諾加在一起,然后減去所有的輸入承諾,并驗證結(jié)果是否是有效的對零承諾。為什么我們只連接同一個區(qū)塊內(nèi)的交易呢?理論上,我們可以組合兩個區(qū)塊,刪除在這些塊中創(chuàng)建和使用的任何交易,結(jié)果還是一個有效的交易,它只包含未消耗的承諾,而沒有其他內(nèi)容。然后我們可以一路回到創(chuàng)世塊,將整個區(qū)塊鏈縮減到一個未消耗承諾的狀態(tài)。這被稱為切斷。
在執(zhí)行該操作時,我們不需要保留已消耗輸出的范圍證明,它們已經(jīng)經(jīng)過了驗證,可以丟棄。這將會導(dǎo)致區(qū)塊鏈增長的大幅減少,將增長從O*(交易數(shù)量)減少到O(未消耗輸出數(shù)量)。
為了說明這一點的影響,讓我們設(shè)想一下,如果Mimblewimble從一開始就在比特幣網(wǎng)絡(luò)中實施,網(wǎng)絡(luò)位于576000高度,區(qū)塊鏈大約為210 GB,總交易量為413675000,總未花費(fèi)輸出量為55400000。在Mimblewimble中,交易輸出約為5 kB(包括范圍證明~5 kB和Pedersen承諾~33字節(jié)),交易輸入約為32字節(jié),交易證明約為105字節(jié)(對零承諾和簽名),區(qū)塊頭約為250字節(jié)(Merkle證明和PoW),非保密交易可以忽略不計。對于完全同步所有信息的區(qū)塊鏈來說,這意味著高達(dá)驚人的5.3 TB,其中“只有”279 GB是UTXOs。
當(dāng)我們執(zhí)行“切斷”時,不希望丟失交易的所有歷史記錄,因此我們保留所有交易以及UTXO集合和所有區(qū)塊頭的證明。這將區(qū)塊鏈減小到322 GB,大小減少了94%。結(jié)果基本上是一個完全一致的狀態(tài),只有那些擁有完整歷史證明的未花費(fèi)承諾,大大減少了新節(jié)點的同步時間。
如果實現(xiàn)了Bulletproofs,范圍證明可以從5 kB減小到1 kB,從而將上例中的UTXO集合從279 GB縮減到57 GB。
(基于上面的假設(shè)和計算)
在具有明確最終性的PoS區(qū)塊鏈中也有一個有趣的含義。一旦獲得了最終性,或者在超過它的任意區(qū)塊鏈深度上,就不再需要保留范圍證明。這些交易已經(jīng)過驗證,并在其之上構(gòu)建了共識狀態(tài),它們占據(jù)區(qū)塊鏈大小的絕大部分。
在這個例子中,最終性發(fā)生在100區(qū)塊深度上,并且假設(shè)UTXO集合的10%處于準(zhǔn)最終狀態(tài),這將使區(qū)塊鏈大小再減少250 GB,使得完全同步只需要73 GB,減少了98.6%(就算和當(dāng)前狀態(tài)相比也減少了65%)。想象一下吧。一個73 GB的區(qū)塊鏈,用于10年的完全匿名比特幣交易,是當(dāng)前區(qū)塊鏈大小的三分之一。
需要注意的是,切斷不會影響隱私或者安全性。每個節(jié)點可以選擇是否存儲整個鏈,而不執(zhí)行任何切斷操作,唯一的成本是增加了磁盤存儲需求。切斷純粹是一種可擴(kuò)展性功能,使得基于Mimblewimble的區(qū)塊鏈平均比比特幣小三倍,比Monero小十五倍(即使最近實現(xiàn)了Bulletproofs)。
這對物聯(lián)網(wǎng)來說意味著什么?
物聯(lián)網(wǎng)網(wǎng)絡(luò)中的交易需要速度、能擴(kuò)展到巨大容量、適應(yīng)各種用途和設(shè)備,并能夠保持敏感信息的私密性。到目前為止,物聯(lián)網(wǎng)網(wǎng)絡(luò)只專注于擴(kuò)展,創(chuàng)建的網(wǎng)絡(luò)可以在不同程度的去中心化和不關(guān)注隱私的情況下進(jìn)行海量交易。如果沒有隱私,這些網(wǎng)絡(luò)只會讓那些使用它的人成為向攻擊者提供彈藥的目標(biāo)。
Mimblewimble革命性地使用橢圓曲線加密技術(shù)為我們帶來了一個隱私協(xié)議,它使用Pedersen承諾進(jìn)行完全保密交易,在這個過程中,消除了我們對地址和私鑰的依賴。該交易框架與Bulletproofs相結(jié)合,帶來了輕量級的隱私和匿名性,與Monero不相上下,如果充分使用“切斷”的話,區(qū)塊鏈大小可以減小15倍。這為滿足INT網(wǎng)絡(luò)可擴(kuò)展性要求的隱私交易提供了解決方案。
Grin和Beam這兩種不同的實時網(wǎng)絡(luò)中已經(jīng)實現(xiàn)了Mimblewimble協(xié)議。兩者都是純粹的交易型網(wǎng)絡(luò),專注于隱私和匿名的價值轉(zhuǎn)移。Grin采用了一種類似比特幣的方式,通過社區(qū)資助開發(fā),無預(yù)挖或者創(chuàng)始人獎勵,而Beam則以創(chuàng)業(yè)的心態(tài),利用風(fēng)險投資資助開發(fā),高度重視用戶體驗。
另一方面,INT正在研究在主鏈上實現(xiàn)該協(xié)議,所有INT資產(chǎn)轉(zhuǎn)移都以隱私的方式創(chuàng)建,或者作為可選的附加子鏈,允許用戶將他們的INT從非隱私鏈轉(zhuǎn)移到隱私鏈,反之亦然。
不足之處
協(xié)議的革新之處同時也是限制它的東西。幾乎所有協(xié)議,如比特幣、以太坊等,都使用基本的腳本語言,在實際交易數(shù)據(jù)中調(diào)用函數(shù),告訴驗證者使用什么腳本來驗證它。
在最簡單的情況下,隨輸入提供的數(shù)據(jù)調(diào)用“scriptSig”,并提供兩部分?jǐn)?shù)據(jù),即與交易相匹配的簽名和證明你擁有對應(yīng)私鑰的公鑰。輸出腳本使用提供的數(shù)據(jù)及其傳遞的邏輯,向驗證者顯示如何證明允許他們進(jìn)行消費(fèi)。使用提供的公鑰,驗證者計算哈希并檢查是否與輸出中的公鑰哈希相同,如果相同,就可以確保提供的簽名與輸入簽名相匹配。
該驗證協(xié)議允許一些有限的腳本能力,以便告訴驗證者如何處理所提供的數(shù)據(jù)。比特幣網(wǎng)絡(luò)可以通過更新功能,使其適應(yīng)新的流程或數(shù)據(jù)。使用該方法,比特幣協(xié)議可以驗證多個簽名,在定義的時間跨度內(nèi)鎖定交易,并執(zhí)行更復(fù)雜的操作,如在帳戶中鎖定比特幣,直到采取一些外部操作。
為了實現(xiàn)更廣泛適用的公開智能合約(如以太坊的智能合約),需要以非屏蔽的方式提供數(shù)據(jù)或者創(chuàng)建屏蔽證明來證明你滿足智能合約的條件。
在Mimblewimble中,由于使用了盲因子作為密鑰對,大大簡化了簽名驗證過程,基本協(xié)議中沒有正常的編寫腳本的機(jī)會。區(qū)塊鏈上記錄的只是:
? 使用的輸入——花費(fèi)了的舊承諾
? 新的輸出——要發(fā)布的新承諾
? 交易內(nèi)核——包含多余的盲因子、交易費(fèi)和鎖定高度的交易簽名
而且這些項目不能相互關(guān)聯(lián),并且不包含任何有用數(shù)據(jù)來驅(qū)動操作。
對于這個問題,有一些創(chuàng)造性的解決方案建議通過執(zhí)行所謂的無腳本腳本來實現(xiàn)。通過利用所使用的Schnorr簽名的屬性,可以實現(xiàn)多簽名交易和更復(fù)雜的基于條件的交易,如原子跨鏈交換,甚至可能是閃電網(wǎng)絡(luò)類型的狀態(tài)通道。然而,這還不足以滿足物聯(lián)網(wǎng)智能合約的所有需求。
基于以上的分析,實現(xiàn)切斷可能會刪除智能合約交易或依賴它們的交易。
因此,你可以看到,在這種設(shè)計中,我們可以成功地隱藏值和所有權(quán),但僅限于一維數(shù)據(jù)點和數(shù)量。做任何比轉(zhuǎn)移代幣所有權(quán)更復(fù)雜的事情都超出了它的能力范圍。但是所有權(quán)證明和對零承諾實際上只是一種特定類型的零知識證明(ZK)。那么,如果我們不去隱藏一個值,而去隱藏一個證明呢?
評論
查看更多