一文讀懂「隱私幣」| 雜談去中心化隱私支付

買賣虛擬貨幣
摘要本文簡單介紹目前流行的幾種去中心化隱私支付方案及其所使用的密碼學工具,並比較這些方案的優劣。我們將重點介紹零知識證明在這些方案中所起的作用,並討論未來這個領域可能的發展方向。前言中本聰在其短短9頁的比特幣白皮書[Sato08]中用了一整個章節討論比特幣的隱私問題。比特幣的區塊鏈是個完全公開的分散式賬本,這帶來公開可驗證性的同時,顯然也會對賬本上的這些交易隱私造成影響,這點中本聰是心知肚明的。比特幣[Sato08]的終極目標是成為網路世界的電子現金,我們看現實中的紙幣現金在所有貨幣形式中匿名性毫無疑問是最強的。但比特幣這種公開賬本卻允許人們透過這些公開的交易地址和金額做很多去匿名化分析,尤其是當這些公開賬本資訊和從其他渠道比如某些交易平臺上獲得的資料進行交叉匹配分析的時候,很多使用者的身份將被暴露出來。
比特幣隱私性的缺乏毫無疑問是其被廣泛採用成為電子現金的巨大障礙,以前我們使用紙幣不用擔心隱私洩漏,使用信用卡或各個網際網路大廠的支付方案起碼這些銀行或大公司們受現行各種法律的約束,我們不用過於擔心個人隱私洩漏。可是如果使用比特幣我們直接將自己的隱私公之於眾了那就有點滑天下之大稽了。假如比特幣真的成為被人廣為使用的電子現金,你敢想象將自己每天衣食住行相關的所有消費記錄公開於世嗎,這個顯然不太合理。另外一個問題是,由於比特幣區塊鏈公開記錄了所有交易歷史,這就對貨幣本身的可互換性(fungibility)造成深遠影響,這個原因在於比特幣接收方有可能因為比特幣的某些交易歷史而拒收該比特幣,比如說曾涉及恐怖活動之類的。可能現在該比特幣的持有者未曾和恐怖活動有過任何牽連,但僅僅因為之前的持有者涉及恐怖活動,就導致現在持有者的比特幣價值降低資產受損,這個顯然也不是很合情合理。在比特幣之前,隱私支付一直是密碼學一個重點研究領域。這方面的文獻可以說是汗牛充棟,我這裡就不一一列舉了。密碼學與隱私支付結合得如此緊密一點不奇怪,因為畢竟密碼學是一種數字解決方案,而支付中所涉及的貨幣實際上就是一嘟嚕數字串,而這種資料又極為敏感,所以密碼學和隱私支付當然是天生一對。零知識證明簡介一般來講,區塊鏈中的隱私支付涉及的主要有這麼幾個隱私方面的問題:· 交易發起者和接收者的隱私:指讓攻擊者透過分析區塊鏈或者分散式賬本上的資訊無法或很難推斷出交易發起者和接收者身份。
· 交易金額的隱私:指攻擊者透過分析區塊鏈無法獲得具體交易金額的有用資訊。· 交易安全性:   · 由於區塊鏈系統是去中心化的,所以需要考慮如何防止雙花攻擊(double spending attack)。目前看來,上面談及的兩個隱私問題都可以用零知識證明來解決,而且事實上在已有的隱私幣設計中零知識證明也確實是主角。 「零知識證明」到底是什麼?我們來講講這個被神化的密碼學概念。
 1)「證明」是什麼?其實大家如果上過數學課,做過證明題,你就知道“證明”是什麼,零知識證明裡的“證明”其實和你數學課裡的證明很接近。當你讀完一個數學題的證明之後,這個證明應該能說服你這個證明所要證明的命題(statement)的正確性。零知識證明裡也有個對應需要證明的命題的,而且當證明讀者,或者更正式的說法叫驗證者(verifier)讀完該證明後也應該會相信這個命題的正確性。大家注意,數學證明這個過程涉及兩方:寫證明的人和證明讀者。零知識證明中除了有我們剛才說的證明讀者也稱驗證者外,還有一方是提供證明的人,這一方我們正式地稱之為證明者(prover)。通常情況下,區塊鏈裡使用的零知識證明方案是公開可驗證的,換句話說,誰都可以是證明驗證者,但證明者則必須是那位掌握了命題成立所需秘密的人,只有他才能成功生成正確證明。 2)零知識(zero knowledge)又是什麼呢?當你讀完一個數學證明,正常情況下你應該有種在數學上功力見長的感覺,因為你掌握了一個新定理,你獲得新知識。而零知識證明則有所不同,他的目的不在於讓驗證者掌握新知識,他的核心目的是說服驗證者證明者懂得如何證明這個命題,或者更正式地說他掌握了使得命題成立所需的秘密,僅此而已。他不關心驗證者讀完證明後有沒有掌握新知識,事實上這裡的零知識恰恰被定義成證明本身除了洩露一個事實:即證明者掌握了使得命題成立需要的秘密外,不洩漏其他任何資訊。所以零知識證明的證明往往是以密文的形式出現,所謂密文你可以把他看作一堆亂碼。換句話說你透過讀這些亂碼,就能相信命題成立,相信證明者懂得如何寫這個證明,但除此之外你一無所知。
由於零知識證明本身是以亂碼的形式出現,這時候我們就得考慮一個問題,就是如果一個沒有掌握證明這個命題所需秘密的人,一個攻擊者渾水摸魚濫竽充數怎麼辦?所以零知識證明的另外一個性質健全性(soundness)就變了非常有意義,他的目的就在於保證攻擊者在不掌握證明命題成立所需的知識或秘密情況下是無法偽造證明的。當然,通用的零知識證明還得考慮完整性(completeness)這個性質,我們這裡暫時就不展開了。通俗地說,零知識證明可以看作數字簽名和加密兩種概念的推廣和結合。零知識這個性質其實和加密方案所需的保密性有一定對應關係的,加密方案的保密效能保證加密密文不洩漏所加密明文的任何有用資訊。零知識這個性質在隱私幣中則通常用於保證隱私性。而健全性則可以看作數字簽名方案的不可偽造性在通用命題中的一種推廣。在數字簽名方案中,一個沒有簽名金鑰的使用者是無法偽造簽名的,這就是所謂的不可偽造性。零知識證明的健全性在隱私幣中往往用於保證只有使用者掌握隱私幣對應的秘密情況下才能成功花掉相應貨幣。希望我上述描述能讓大家對這些聽起來拗口難懂的密碼學概念之間的對應關係有些感覺。說句題外話,和我們中小學階段學數學所需的各種死記硬背機械計算不同,高等數學或現代數學的研究物件更多是概念和關係。20世紀最偉大的數學家之一格羅騰迪克在談平生所學的體會曾說過一句話:“在不同的時代和世紀中,對於依次出現的不同的主題,它展現給我們微妙而精細的對應,彷彿來自虛空”。密碼學作為一門應用數學時不時會有一些像零知識證明這種天馬行空天外飛客的想法出現,這些想法不僅能讓人很接地氣地用來造隱私幣,還能向我們展示一些“微妙而精細的對應”,給人一種抽象美的體驗,這也算是學習密碼學的一大樂趣了。我們在區塊鏈情景裡用到的零知識證明還需要些其他性質,比如必須是簡短(succinct)的,因為證明需要在區塊鏈網路中廣播,如果證明太長就會導致網路出塊率太低。我們還希望驗證者計算負擔越小越好,因為這意味著驗證者,也就是我們通常所說的礦工們處理單個交易需要的計算量很低。隱私幣
現有隱私幣大概可以分成兩大類,需要可信初始化(trusted setup)的和無需可信初始化(setup free)的方案。我們在下文中會介紹可信初始化是什麼。無需可信初始化的隱私幣1. CryptonoteCryptonote[Saberhagen18]是隱私幣Monero的底層方案。Cryptonote的設計比較簡潔,其用到的主要密碼工具就兩個:一次性可連結環簽名及匿名地址。Monero中的匿名地址方案實際上就是一個匿名公鑰加密方案,該方案保證如果你是加密方案指定接收者,你就可以透過掃描分散式賬本找到你的密文並解密密文,但除了你之外的任何人都無法知道這個密文是應該發給你的,這個就能保證交易接收者的匿名性了。而一次性可連結環簽名則是用於保證交易發起者匿名性的,環簽名能做到使用者利用自己的私鑰和區塊鏈上其他地址的公鑰生成一個環簽名,透過驗證該簽名你知道這是這群人中某個人生成的簽名,但具體是這群人中的哪個人你是沒法知道的,所以他保證交易發起者匿名性的基本思路就是把發起者隱藏在一群人中間。這個從零知識證明角度看相當於是個成員證明(membership proof)。Monero後來又在環簽名基礎上又開發了環保密交易(ring confidential transaction),因為他們最初方案沒有考慮如何隱藏交易金額,保密交易提出就是為了解決交易金額的隱私性問題。保密交易裡涉及到的一個零知識證明是區間證明。區間證明能做到證明某個金額屬於一個合理的範圍,但又不透露這個金額具體是什麼,區間證明也是一種特殊的零知識證明。
那麼為什麼這個證明是有必要的呢?這個原因是Monero所用的密碼方案是在有限域上進行的,換句話說其所定義的運算是模q運算,這裡q是個非常大的素數,那麼如果交易輸出結果是個很小的負數,在這個有限域裡是和一個非常大的正數等價的,攻擊者就有可能利用這點憑空列印Monero。區間證明後來成為所有隱私幣方案的標配也是這個原因。2. Beam和GrinMimblewimble[Elvis16]可以看作一種簡化版的Monero。他把地址這個概念從區塊鏈中去掉了,既然傳送者沒有了地址,該方案也把環簽名去掉了。這個方案只留下了保密交易方案和區間證明。由於保密交易方案對應的簽名方案具有同態性,他們可以把很多交易整合起來。這樣做的好處在於整個賬本變小,全節點挖礦時負擔就變小很多。 需要可信初始化的隱私幣3. ZcoinZcoin[MGGR13]是學術界在去中心化隱私支付方面做的最早的嘗試之一,其基本思路是用一個Pedersen承諾(Commitment)作為貨幣,承諾的訊息是貨幣對應的序列號,這將被用來防止雙花攻擊,而承諾方案所使用的隨機數則代表使用者對該貨幣的所有權。
Zcoin使用了一個聚合器(Accumulator)來保證所使用的貨幣的匿名性。聚合器可以把系統中所有貨幣對應的承諾壓縮成一個群元素,使用者使用自己的貨幣時只需證明他知道其貨幣對應的隨機數,以及該貨幣承諾是屬於聚合器所包含元素中的一員即可。聚合器在功能上可以看作零知識證明中的或證明(Or proof)的一種推廣。Zcoin保護隱私的思路和1999年的一個隱私支付方案一脈相承[ST99],但有不少簡化。這個簡化帶來的缺陷就是Zcoin金額固定不可分,這在實際中非常不方便。另外一個問題就是最初Zcoin的設計沒有對貨幣金額做區間證明,這樣導致攻擊者有可能發起上述的憑空造幣的攻擊。這些問題在Zcash當中基本上都得到解決。4. ZcashZcash是可以看作Zcoin的修正版,用了一個當時最新的零知識證明方案,把可稽覈性(auditability)和可追蹤性(traceability)之類的性質都考慮進去了,他實際上相當於把1999年Sander和Ta-Shma兩人提出的方案[ST99]運用到了區塊鏈裡。Zcash使用的零知識證明是微軟和IBM的密碼學者開發的一個可驗證計算的方案Pinnochio衍生出來的。Pinnochio最早提出的目的是用於雲端計算中的可驗證計算,這個思路能支援通用計算,但最大的問題是需要可信初始化。可信初始化中涉及的一些陷門知識一旦被攻擊者獲得,則有可能以此對零知識證明的健全性發起攻擊,從而無限量列印Zcash並無法被探測到。針對可信初始化Zcash團隊提出了些解決思路,如透過多方計算來分散式地初始化設定引數,但這個思路的問題在於首先他並沒徹底解決這個問題,因為多方計算是由有限的幾個參與方參與計算,大家還是得相信參與方沒有合謀攻擊這個計算過程,因為畢竟這裡涉及的經濟利益太大了,很難相信不會有人鋌而走險。
另外,這個步驟本身還會帶來一些潛在的安全隱患,資訊保安裡的一個基本原則是複雜性是安全性的天敵(complexity is the enemy of security),這和系統工程學上的Keep it simple and stupid, KISS原則,及哲學上的奧卡姆剃刀準則:如無必要勿增實體是一脈相承的。所以,如果有一個方案能夠避免這一步驟且效率相比不差,那當然應該選擇較簡單的方案。另外,Zcash的設計實際上還有其他一些冗餘之處,比如他們的匿名性一部分是透過隱藏Zcash於系統中已有貨幣的membership來提供的,而雙花攻擊則透過檢驗序列號來防止的,Zcash本身實際上也是個承諾,Zcash持有權的轉讓則透過轉讓承諾內容來實現的。這裡零知識證明對應的statement非常複雜,比如針對貨幣本身的合法性證明,就得透過證明承諾本身在Merkle tree上的membership proof 來證明。這個方案非常複雜,因為首先需要用零知識證明的方案來證明雜湊計算的正確性,這個本身涉及的電路就已經夠複雜了,另外隨系統中發行的貨幣量增加,對應的Merkle tree變大,需要驗證的電路數目量隨之增加。我認為Zcash系統的這種複雜性實際上和[ST99]本身設計的複雜性有關,因為這個方案最初設計是考慮了電子貨幣設計中的可追蹤性和可審計性問題的,這個和反洗錢之類的政策考慮是有關的。總結上述幾種隱私幣各有千秋。目前看來,Zcash這條技術路線的設計純粹從保密交易的角度看有點過度工程化(over-engineering),但是對通用零知識證明應用的一個很不錯的嘗試。CryptoNote,保密交易這條技術路線中Mimblewimble是最簡潔的隱私支付方案,但其使用的區間證明仍需要對數級別的交易大小,應該還有改進的空間,但我相信這條技術路線由於其所做的假設較弱,安全可靠性更高將會逐漸成為主流。我們還會在後續文章中繼續介紹相關領域的最新進展。
Suterusu的嘗試目前來看,現有隱私保護區塊鏈方案設計萬變不離其宗,零知識證明始終是這個技術改革風暴的核心。開發一個隱私保護區塊鏈,尤其是開發一個基於最安全高效的零知識證明技術的隱私保護區塊鏈不是件容易的事情,這件事的難度不僅在於設計上零知識證明需要很高深的數學,這對沒有密碼學背景的工程師而言已經是個很大的挑戰了。密碼學模組的實現及與區塊鏈系統的整合也是山高路遠坑深,實現一個安全可靠高效的隱私保護區塊鏈方案往往需要眾多密碼學專家和安全系統工程師緊密配合通力合作才能完成。Suterusu專案將基於目前最新的無需可信初始化設定的零知識證明方案,打造一個讓開發者一鍵釋出隱私保護區塊鏈的發射平臺。我們注意到現有的幾種隱私幣社羣處於相對隔離的狀態,Suterusu將為本生態系統中產生的匿名數字資產搭建一個跨鏈協議,保證這些匿名資產在本生態系統中的自由流動。Suterusu將是一個模組化,動態的,可互動的生態系統,我們將與零知識證明研究一道共同進化,從而保證在我們生態系統中搭建的隱私保護區塊鏈方案始終建立於最安全高效的基礎之上。 關於Suterusu:
Suterusu實現和整合最新的無需可信初始化的零知識證明協議,在此基礎上我們將打造可讓開發者一鍵實現其所定義的隱私保護區塊鏈方案的發射臺。Suterusu將為使用Suterusu生態系統技術的匿名數字資產實現隱私跨鏈協議,從而保證這些數字資產在生態系統中的高流動性和可交換性。Suterusu以社羣自治為核心發展路徑,高達76%的Suter token透過挖礦產生,且支援“投票即挖礦”。我們引入最新的流動性去中心化選賢機制(Liquid Decentralized Meritocracy)實現鏈上治理。與已有解決方案相比,本方案提供了更高的靈活性和參與者自主性。 關於SERO:SERO是新一代隱私公鏈,支援智慧合約,可以發行匿名幣和匿名資產,被稱為匿名版以太坊,SERO採用效能遠超ZCash的零知識證明加密方式,並且預設所有交易匿名,是真正的匿名公鏈,採用最先進的POW+POS底層共識,網路安全性和效能高於純粹的POW公鏈。SERO由前IDG合夥人章蘇陽、LD和量子的早期投資,目前已和F2Pool等多家大型礦池對接。參考文獻[MGGR13] Miers, Ian, Christina Garman, Matthew Green, and Aviel D. Rubin. "Zerocoin: Anonymous distributed e-cash from bitcoin." In 2013 IEEE Symposium on Security and Privacy, pp. 397-411. IEEE, 2013.
[ST99] Sander, Tomas, and Amnon Ta-Shma. "Auditable, anonymous electronic cash." In Annual International Cryptology Conference, pp. 555-572. Springer, Berlin, Heidelberg, 1999.[Sato08] Nakamoto, Satoshi. "Bitcoin: A peer-to-peer electronic cash system." (2008).[Elvis16] Jedusor, Tom Elvis. "Mimblewimble." (2016).[Saberhagen18] Van Saberhagen, N., 2018. Cryptonote v 2.0, 2013. URL: https://cryptonote. org/whitepaper. pdf. White Paper. Accessed, pp.04-13.

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;