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