摘要
本文簡單介紹目前流行的幾種去中心化隱私支付方案及其所使用的密碼學(xué)工具,并比較這些方案的優(yōu)劣。我們將重點(diǎn)介紹零知識(shí)證明在這些方案中所起的作用,并討論未來這個(gè)領(lǐng)域可能的發(fā)展方向。
前言
中本聰在其短短9頁的比特幣白皮書[Sato08]中用了一整個(gè)章節(jié)討論比特幣的隱私問題。
比特幣的區(qū)塊鏈是個(gè)完全公開的分布式賬本,這帶來公開可驗(yàn)證性的同時(shí),顯然也會(huì)對(duì)賬本上的這些交易隱私造成影響,這點(diǎn)中本聰是心知肚明的。
比特幣[Sato08]的終極目標(biāo)是成為網(wǎng)絡(luò)世界的電子現(xiàn)金,我們看現(xiàn)實(shí)中的紙幣現(xiàn)金在所有貨幣形式中匿名性毫無疑問是最強(qiáng)的。但比特幣這種公開賬本卻允許人們通過這些公開的交易地址和金額做很多去匿名化分析,尤其是當(dāng)這些公開賬本信息和從其他渠道比如某些交易平臺(tái)上獲得的數(shù)據(jù)進(jìn)行交叉匹配分析的時(shí)候,很多用戶的身份將被暴露出來。
比特幣隱私性的缺乏毫無疑問是其被廣泛采用成為電子現(xiàn)金的巨大障礙,以前我們使用紙幣不用擔(dān)心隱私泄漏,使用信用卡或各個(gè)互聯(lián)網(wǎng)大廠的支付方案起碼這些銀行或大公司們受現(xiàn)行各種法律的約束,我們不用過于擔(dān)心個(gè)人隱私泄漏。可是如果使用比特幣我們直接將自己的隱私公之于眾了那就有點(diǎn)滑天下之大稽了。假如比特幣真的成為被人廣為使用的電子現(xiàn)金,你敢想象將自己每天衣食住行相關(guān)的所有消費(fèi)記錄公開于世嗎,這個(gè)顯然不太合理。
另外一個(gè)問題是,由于比特幣區(qū)塊鏈公開記錄了所有交易歷史,這就對(duì)貨幣本身的可互換性(fungibility)造成深遠(yuǎn)影響,這個(gè)原因在于比特幣接收方有可能因?yàn)楸忍貛诺哪承┙灰讱v史而拒收該比特幣,比如說曾涉及恐怖活動(dòng)之類的。可能現(xiàn)在該比特幣的持有者未曾和恐怖活動(dòng)有過任何牽連,但僅僅因?yàn)橹暗某钟姓呱婕翱植阑顒?dòng),就導(dǎo)致現(xiàn)在持有者的比特幣價(jià)值降低資產(chǎn)受損,這個(gè)顯然也不是很合情合理。
在比特幣之前,隱私支付一直是密碼學(xué)一個(gè)重點(diǎn)研究領(lǐng)域。這方面的文獻(xiàn)可以說是汗牛充棟,我這里就不一一列舉了。密碼學(xué)與隱私支付結(jié)合得如此緊密一點(diǎn)不奇怪,因?yàn)楫吘姑艽a學(xué)是一種數(shù)字解決方案,而支付中所涉及的貨幣實(shí)際上就是一嘟嚕數(shù)字串,而這種數(shù)據(jù)又極為敏感,所以密碼學(xué)和隱私支付當(dāng)然是天生一對(duì)。
零知識(shí)證明簡介
一般來講,區(qū)塊鏈中的隱私支付涉及的主要有這么幾個(gè)隱私方面的問題:
· 交易發(fā)起者和接收者的隱私:指讓攻擊者通過分析區(qū)塊鏈或者分布式賬本上的信息無法或很難推斷出交易發(fā)起者和接收者身份。
· 交易金額的隱私:指攻擊者通過分析區(qū)塊鏈無法獲得具體交易金額的有用信息。
· 交易安全性:
· 由于區(qū)塊鏈系統(tǒng)是去中心化的,所以需要考慮如何防止雙花攻擊(double spending attack)。
目前看來,上面談及的兩個(gè)隱私問題都可以用零知識(shí)證明來解決,而且事實(shí)上在已有的隱私幣設(shè)計(jì)中零知識(shí)證明也確實(shí)是主角。
「零知識(shí)證明」到底是什么?
我們來講講這個(gè)被神化的密碼學(xué)概念。
1)「證明」是什么?
其實(shí)大家如果上過數(shù)學(xué)課,做過證明題,你就知道“證明”是什么,零知識(shí)證明里的“證明”其實(shí)和你數(shù)學(xué)課里的證明很接近。
當(dāng)你讀完一個(gè)數(shù)學(xué)題的證明之后,這個(gè)證明應(yīng)該能說服你這個(gè)證明所要證明的命題(statement)的正確性。零知識(shí)證明里也有個(gè)對(duì)應(yīng)需要證明的命題的,而且當(dāng)證明讀者,或者更正式的說法叫驗(yàn)證者(verifier)讀完該證明后也應(yīng)該會(huì)相信這個(gè)命題的正確性。
大家注意,數(shù)學(xué)證明這個(gè)過程涉及兩方:寫證明的人和證明讀者。零知識(shí)證明中除了有我們剛才說的證明讀者也稱驗(yàn)證者外,還有一方是提供證明的人,這一方我們正式地稱之為證明者(prover)。通常情況下,區(qū)塊鏈里使用的零知識(shí)證明方案是公開可驗(yàn)證的,換句話說,誰都可以是證明驗(yàn)證者,但證明者則必須是那位掌握了命題成立所需秘密的人,只有他才能成功生成正確證明。
2)零知識(shí)(zero knowledge)又是什么呢?
當(dāng)你讀完一個(gè)數(shù)學(xué)證明,正常情況下你應(yīng)該有種在數(shù)學(xué)上功力見長的感覺,因?yàn)槟阏莆樟艘粋€(gè)新定理,你獲得新知識(shí)。而零知識(shí)證明則有所不同,他的目的不在于讓驗(yàn)證者掌握新知識(shí),他的核心目的是說服驗(yàn)證者證明者懂得如何證明這個(gè)命題,或者更正式地說他掌握了使得命題成立所需的秘密,僅此而已。他不關(guān)心驗(yàn)證者讀完證明后有沒有掌握新知識(shí),事實(shí)上這里的零知識(shí)恰恰被定義成證明本身除了泄露一個(gè)事實(shí):即證明者掌握了使得命題成立需要的秘密外,不泄漏其他任何信息。所以零知識(shí)證明的證明往往是以密文的形式出現(xiàn),所謂密文你可以把他看作一堆亂碼。換句話說你通過讀這些亂碼,就能相信命題成立,相信證明者懂得如何寫這個(gè)證明,但除此之外你一無所知。
由于零知識(shí)證明本身是以亂碼的形式出現(xiàn),這時(shí)候我們就得考慮一個(gè)問題,就是如果一個(gè)沒有掌握證明這個(gè)命題所需秘密的人,一個(gè)攻擊者渾水摸魚濫竽充數(shù)怎么辦?所以零知識(shí)證明的另外一個(gè)性質(zhì)健全性(soundness)就變了非常有意義,他的目的就在于保證攻擊者在不掌握證明命題成立所需的知識(shí)或秘密情況下是無法偽造證明的。當(dāng)然,通用的零知識(shí)證明還得考慮完整性(completeness)這個(gè)性質(zhì),我們這里暫時(shí)就不展開了。
通俗地說,零知識(shí)證明可以看作數(shù)字簽名和加密兩種概念的推廣和結(jié)合。零知識(shí)這個(gè)性質(zhì)其實(shí)和加密方案所需的保密性有一定對(duì)應(yīng)關(guān)系的,加密方案的保密性能保證加密密文不泄漏所加密明文的任何有用信息。零知識(shí)這個(gè)性質(zhì)在隱私幣中則通常用于保證隱私性。
而健全性則可以看作數(shù)字簽名方案的不可偽造性在通用命題中的一種推廣。在數(shù)字簽名方案中,一個(gè)沒有簽名密鑰的用戶是無法偽造簽名的,這就是所謂的不可偽造性。零知識(shí)證明的健全性在隱私幣中往往用于保證只有用戶掌握隱私幣對(duì)應(yīng)的秘密情況下才能成功花掉相應(yīng)貨幣。希望我上述描述能讓大家對(duì)這些聽起來拗口難懂的密碼學(xué)概念之間的對(duì)應(yīng)關(guān)系有些感覺。
說句題外話,和我們中小學(xué)階段學(xué)數(shù)學(xué)所需的各種死記硬背機(jī)械計(jì)算不同,高等數(shù)學(xué)或現(xiàn)代數(shù)學(xué)的研究對(duì)象更多是概念和關(guān)系。20世紀(jì)最偉大的數(shù)學(xué)家之一格羅騰迪克在談平生所學(xué)的體會(huì)曾說過一句話:“在不同的時(shí)代和世紀(jì)中,對(duì)于依次出現(xiàn)的不同的主題,它展現(xiàn)給我們微妙而精細(xì)的對(duì)應(yīng),仿佛來自虛空”。密碼學(xué)作為一門應(yīng)用數(shù)學(xué)時(shí)不時(shí)會(huì)有一些像零知識(shí)證明這種天馬行空天外飛客的想法出現(xiàn),這些想法不僅能讓人很接地氣地用來造隱私幣,還能向我們展示一些“微妙而精細(xì)的對(duì)應(yīng)”,給人一種抽象美的體驗(yàn),這也算是學(xué)習(xí)密碼學(xué)的一大樂趣了。
我們?cè)趨^(qū)塊鏈情景里用到的零知識(shí)證明還需要些其他性質(zhì),比如必須是簡短(succinct)的,因?yàn)樽C明需要在區(qū)塊鏈網(wǎng)絡(luò)中廣播,如果證明太長就會(huì)導(dǎo)致網(wǎng)絡(luò)出塊率太低。我們還希望驗(yàn)證者計(jì)算負(fù)擔(dān)越小越好,因?yàn)檫@意味著驗(yàn)證者,也就是我們通常所說的礦工們處理單個(gè)交易需要的計(jì)算量很低。
隱私幣
現(xiàn)有隱私幣大概可以分成兩大類,需要可信初始化(trusted setup)的和無需可信初始化(setup free)的方案。我們?cè)谙挛闹袝?huì)介紹可信初始化是什么。
無需可信初始化的隱私幣
1. Cryptonote
Cryptonote[Saberhagen18]是隱私幣Monero的底層方案。Cryptonote的設(shè)計(jì)比較簡潔,其用到的主要密碼工具就兩個(gè):一次性可鏈接環(huán)簽名及匿名地址。Monero中的匿名地址方案實(shí)際上就是一個(gè)匿名公鑰加密方案,該方案保證如果你是加密方案指定接收者,你就可以通過掃描分布式賬本找到你的密文并解密密文,但除了你之外的任何人都無法知道這個(gè)密文是應(yīng)該發(fā)給你的,這個(gè)就能保證交易接收者的匿名性了。
而一次性可鏈接環(huán)簽名則是用于保證交易發(fā)起者匿名性的,環(huán)簽名能做到用戶利用自己的私鑰和區(qū)塊鏈上其他地址的公鑰生成一個(gè)環(huán)簽名,通過驗(yàn)證該簽名你知道這是這群人中某個(gè)人生成的簽名,但具體是這群人中的哪個(gè)人你是沒法知道的,所以他保證交易發(fā)起者匿名性的基本思路就是把發(fā)起者隱藏在一群人中間。這個(gè)從零知識(shí)證明角度看相當(dāng)于是個(gè)成員證明(membership proof)。
Monero后來又在環(huán)簽名基礎(chǔ)上又開發(fā)了環(huán)保密交易(ring confidential transaction),因?yàn)樗麄冏畛醴桨笡]有考慮如何隱藏交易金額,保密交易提出就是為了解決交易金額的隱私性問題。保密交易里涉及到的一個(gè)零知識(shí)證明是區(qū)間證明。區(qū)間證明能做到證明某個(gè)金額屬于一個(gè)合理的范圍,但又不透露這個(gè)金額具體是什么,區(qū)間證明也是一種特殊的零知識(shí)證明。
那么為什么這個(gè)證明是有必要的呢?這個(gè)原因是Monero所用的密碼方案是在有限域上進(jìn)行的,換句話說其所定義的運(yùn)算是模q運(yùn)算,這里q是個(gè)非常大的素?cái)?shù),那么如果交易輸出結(jié)果是個(gè)很小的負(fù)數(shù),在這個(gè)有限域里是和一個(gè)非常大的正數(shù)等價(jià)的,攻擊者就有可能利用這點(diǎn)憑空打印Monero。區(qū)間證明后來成為所有隱私幣方案的標(biāo)配也是這個(gè)原因。
2. Beam和Grin
Mimblewimble[Elvis16]可以看作一種簡化版的Monero。他把地址這個(gè)概念從區(qū)塊鏈中去掉了,既然發(fā)送者沒有了地址,該方案也把環(huán)簽名去掉了。這個(gè)方案只留下了保密交易方案和區(qū)間證明。由于保密交易方案對(duì)應(yīng)的簽名方案具有同態(tài)性,他們可以把很多交易整合起來。這樣做的好處在于整個(gè)賬本變小,全節(jié)點(diǎn)挖礦時(shí)負(fù)擔(dān)就變小很多。
需要可信初始化的隱私幣
3. Zcoin
Zcoin[MGGR13]是學(xué)術(shù)界在去中心化隱私支付方面做的最早的嘗試之一,其基本思路是用一個(gè)Pedersen承諾(Commitment)作為貨幣,承諾的消息是貨幣對(duì)應(yīng)的序列號(hào),這將被用來防止雙花攻擊,而承諾方案所使用的隨機(jī)數(shù)則代表用戶對(duì)該貨幣的所有權(quán)。
Zcoin使用了一個(gè)聚合器(Accumulator)來保證所使用的貨幣的匿名性。聚合器可以把系統(tǒng)中所有貨幣對(duì)應(yīng)的承諾壓縮成一個(gè)群元素,用戶使用自己的貨幣時(shí)只需證明他知道其貨幣對(duì)應(yīng)的隨機(jī)數(shù),以及該貨幣承諾是屬于聚合器所包含元素中的一員即可。聚合器在功能上可以看作零知識(shí)證明中的或證明(Or proof)的一種推廣。
Zcoin保護(hù)隱私的思路和1999年的一個(gè)隱私支付方案一脈相承[ST99],但有不少簡化。這個(gè)簡化帶來的缺陷就是Zcoin金額固定不可分,這在實(shí)際中非常不方便。另外一個(gè)問題就是最初Zcoin的設(shè)計(jì)沒有對(duì)貨幣金額做區(qū)間證明,這樣導(dǎo)致攻擊者有可能發(fā)起上述的憑空造幣的攻擊。這些問題在Zcash當(dāng)中基本上都得到解決。
4. Zcash
Zcash是可以看作Zcoin的修正版,用了一個(gè)當(dāng)時(shí)最新的零知識(shí)證明方案,把可審核性(auditability)和可追蹤性(traceability)之類的性質(zhì)都考慮進(jìn)去了,他實(shí)際上相當(dāng)于把1999年Sander和Ta-Shma兩人提出的方案[ST99]運(yùn)用到了區(qū)塊鏈里。
Zcash使用的零知識(shí)證明是微軟和IBM的密碼學(xué)者開發(fā)的一個(gè)可驗(yàn)證計(jì)算的方案Pinnochio衍生出來的。Pinnochio最早提出的目的是用于云計(jì)算中的可驗(yàn)證計(jì)算,這個(gè)思路能支持通用計(jì)算,但最大的問題是需要可信初始化??尚懦跏蓟猩婕暗囊恍┫蓍T知識(shí)一旦被攻擊者獲得,則有可能以此對(duì)零知識(shí)證明的健全性發(fā)起攻擊,從而無限量打印Zcash并無法被探測(cè)到。
針對(duì)可信初始化Zcash團(tuán)隊(duì)提出了些解決思路,如通過多方計(jì)算來分布式地初始化設(shè)置參數(shù),但這個(gè)思路的問題在于首先他并沒徹底解決這個(gè)問題,因?yàn)槎喾接?jì)算是由有限的幾個(gè)參與方參與計(jì)算,大家還是得相信參與方?jīng)]有合謀攻擊這個(gè)計(jì)算過程,因?yàn)楫吘惯@里涉及的經(jīng)濟(jì)利益太大了,很難相信不會(huì)有人鋌而走險(xiǎn)。
另外,這個(gè)步驟本身還會(huì)帶來一些潛在的安全隱患,信息安全里的一個(gè)基本原則是復(fù)雜性是安全性的天敵(complexity is the enemy of security),這和系統(tǒng)工程學(xué)上的Keep it simple and stupid, KISS原則,及哲學(xué)上的奧卡姆剃刀準(zhǔn)則:如無必要勿增實(shí)體是一脈相承的。所以,如果有一個(gè)方案能夠避免這一步驟且效率相比不差,那當(dāng)然應(yīng)該選擇較簡單的方案。
另外,Zcash的設(shè)計(jì)實(shí)際上還有其他一些冗余之處,比如他們的匿名性一部分是通過隱藏Zcash于系統(tǒng)中已有貨幣的membership來提供的,而雙花攻擊則通過檢驗(yàn)序列號(hào)來防止的,Zcash本身實(shí)際上也是個(gè)承諾,Zcash持有權(quán)的轉(zhuǎn)讓則通過轉(zhuǎn)讓承諾內(nèi)容來實(shí)現(xiàn)的。這里零知識(shí)證明對(duì)應(yīng)的statement非常復(fù)雜,比如針對(duì)貨幣本身的合法性證明,就得通過證明承諾本身在Merkle tree上的membership proof 來證明。
這個(gè)方案非常復(fù)雜,因?yàn)槭紫刃枰昧阒R(shí)證明的方案來證明哈希計(jì)算的正確性,這個(gè)本身涉及的電路就已經(jīng)夠復(fù)雜了,另外隨系統(tǒng)中發(fā)行的貨幣量增加,對(duì)應(yīng)的Merkle tree變大,需要驗(yàn)證的電路數(shù)目量隨之增加。我認(rèn)為Zcash系統(tǒng)的這種復(fù)雜性實(shí)際上和[ST99]本身設(shè)計(jì)的復(fù)雜性有關(guān),因?yàn)檫@個(gè)方案最初設(shè)計(jì)是考慮了電子貨幣設(shè)計(jì)中的可追蹤性和可審計(jì)性問題的,這個(gè)和反洗錢之類的政策考慮是有關(guān)的。
總結(jié)
上述幾種隱私幣各有千秋。目前看來,Zcash這條技術(shù)路線的設(shè)計(jì)純粹從保密交易的角度看有點(diǎn)過度工程化(over-engineering),但是對(duì)通用零知識(shí)證明應(yīng)用的一個(gè)很不錯(cuò)的嘗試。
CryptoNote,保密交易這條技術(shù)路線中Mimblewimble是最簡潔的隱私支付方案,但其使用的區(qū)間證明仍需要對(duì)數(shù)級(jí)別的交易大小,應(yīng)該還有改進(jìn)的空間,但我相信這條技術(shù)路線由于其所做的假設(shè)較弱,安全可靠性更高將會(huì)逐漸成為主流。我們還會(huì)在后續(xù)文章中繼續(xù)介紹相關(guān)領(lǐng)域的最新進(jìn)展。
Suterusu的嘗試
目前來看,現(xiàn)有隱私保護(hù)區(qū)塊鏈方案設(shè)計(jì)萬變不離其宗,零知識(shí)證明始終是這個(gè)技術(shù)改革風(fēng)暴的核心。
開發(fā)一個(gè)隱私保護(hù)區(qū)塊鏈,尤其是開發(fā)一個(gè)基于最安全高效的零知識(shí)證明技術(shù)的隱私保護(hù)區(qū)塊鏈不是件容易的事情,這件事的難度不僅在于設(shè)計(jì)上零知識(shí)證明需要很高深的數(shù)學(xué),這對(duì)沒有密碼學(xué)背景的工程師而言已經(jīng)是個(gè)很大的挑戰(zhàn)了。密碼學(xué)模塊的實(shí)現(xiàn)及與區(qū)塊鏈系統(tǒng)的整合也是山高路遠(yuǎn)坑深,實(shí)現(xiàn)一個(gè)安全可靠高效的隱私保護(hù)區(qū)塊鏈方案往往需要眾多密碼學(xué)專家和安全系統(tǒng)工程師緊密配合通力合作才能完成。
Suterusu項(xiàng)目將基于目前最新的無需可信初始化設(shè)置的零知識(shí)證明方案,打造一個(gè)讓開發(fā)者一鍵發(fā)布隱私保護(hù)區(qū)塊鏈的發(fā)射平臺(tái)。我們注意到現(xiàn)有的幾種隱私幣社區(qū)處于相對(duì)隔離的狀態(tài),Suterusu將為本生態(tài)系統(tǒng)中產(chǎn)生的匿名數(shù)字資產(chǎn)搭建一個(gè)跨鏈協(xié)議,保證這些匿名資產(chǎn)在本生態(tài)系統(tǒng)中的自由流動(dòng)。
Suterusu將是一個(gè)模塊化,動(dòng)態(tài)的,可交互的生態(tài)系統(tǒng),我們將與零知識(shí)證明研究一道共同進(jìn)化,從而保證在我們生態(tài)系統(tǒng)中搭建的隱私保護(hù)區(qū)塊鏈方案始終建立于最安全高效的基礎(chǔ)之上。
關(guān)于Suterusu:
Suterusu實(shí)現(xiàn)和整合最新的無需可信初始化的零知識(shí)證明協(xié)議,在此基礎(chǔ)上我們將打造可讓開發(fā)者一鍵實(shí)現(xiàn)其所定義的隱私保護(hù)區(qū)塊鏈方案的發(fā)射臺(tái)。
Suterusu將為使用Suterusu生態(tài)系統(tǒng)技術(shù)的匿名數(shù)字資產(chǎn)實(shí)現(xiàn)隱私跨鏈協(xié)議,從而保證這些數(shù)字資產(chǎn)在生態(tài)系統(tǒng)中的高流動(dòng)性和可交換性。Suterusu以社區(qū)自治為核心發(fā)展路徑,高達(dá)76%的Suter token通過挖礦產(chǎn)生,且支持“投票即挖礦”。我們引入最新的流動(dòng)性去中心化選賢機(jī)制(Liquid Decentralized Meritocracy)實(shí)現(xiàn)鏈上治理。與已有解決方案相比,本方案提供了更高的靈活性和參與者自主性。
關(guān)于SERO:
SERO是新一代隱私公鏈,支持智能合約,可以發(fā)行匿名幣和匿名資產(chǎn),被稱為匿名版以太坊,SERO采用性能遠(yuǎn)超ZCash的零知識(shí)證明加密方式,并且默認(rèn)所有交易匿名,是真正的匿名公鏈,采用最先進(jìn)的POW+POS底層共識(shí),網(wǎng)絡(luò)安全性和性能高于純粹的POW公鏈。SERO由前IDG合伙人章蘇陽、LD和量子的早期投資,目前已和F2Pool等多家大型礦池對(duì)接。
評(píng)論
查看更多