10月12日,由中國計算機學會主辦的“2019CCF區塊鏈技術大會”在成都舉行。360高級安全專家彭峙釀博士以《零知識證明在區塊鏈應用中的安全和隱私問題》為題進行了分享,內容非常硬核。
以下是彭峙釀博士分享內容全文,由巴比特整理發布。
比特幣的隱私問題
比特幣是去中心化數字貨幣,廣播交易到公開賬本,防止雙花。比特幣不存在匿名性,個人交易記錄、賬戶余額以及商家現金流都可能被追蹤到,這可能就產生了隱私問題,也會產生錢的等價性問題。人們都希望貨幣是等價的,但比特幣的歷史信息可以被查到,某一些可能曾經是黑錢,或者某一些有更高的收藏價值,從而造成比特幣并不等價。為了解決這兩個問題,人們希望把隱私引入到比特幣當中。
比特幣交易如圖所示,如果想要對公開歷史交易信息增加隱私保護,最簡單的思路就是把所有東西都加密,比如交易發送者、接收者,以及交易金額,這樣就能得到一個隱私的交易。但這里存在一個問題,如果這些數據加密的話,全網其他用戶可能沒法解密數據,這就跟比特幣或者是區塊鏈公開可審計性存在沖突。因此,學者們提出用零知識證明來解決這個問題。
簡單介紹一下零知識證明,有一個證明者和一個驗證者,以及一個要證明的論述。證明者有一個證據W,證明論述X屬于某個語言R。證明者要向驗證者證明論述X過程中,會通過一些交互。交互得最后,證明者要向驗證者發送一個證明,驗證者決定接受或者拒絕該論述。
零知識證明要滿足以下這些性質:
完備性:如果論述正確證明者可以說服論述者;
正確性:如果論述錯誤證明者沒辦法說服論述者;
零知識性:驗證者除了論述是正確的之外,無法獲得任何其他信息。
我們往往很難要求證明者和論述者同時在線,所以實際應用中非交互式零知識證明更有價值。在非交互式零知識證明中:證明者發一個π給驗證者,驗證者可以直接驗證得出結論,無需進行交互。對于NIZK,有一個簡單的結論,如果因式分解是困難的,對于任意的NP語言都存在非交互式的零知識證明。
國際證監會組織確認在本季度就加密貨幣的監管展開磋商:金色財經報道,國際證監會組織(IOSCO)確認計劃在本季度(第二季度)就加密貨幣和數字資產的監管展開磋商,并在年底前提交最終報告。另一個工作組專注于 DeFi 監管,其咨詢計劃于今年第三季度進行,并在年底前提交最終報告。該時間是?IOSCO 2023/24 工作計劃的一部分。[2023/4/7 13:49:27]
有了零知識證明后,我要在區塊鏈上引入隱私就很簡單了。我把所有交易全部加密,加密之后我會增加一個證明,證明這筆交易是合法的,所謂的合法就是滿足區塊鏈交易的規則,我這個用戶確實有這么多錢,而且交易中得錢沒有被雙花。這樣可以解決加密和公開可驗證性的沖突。
通用性零知識證明方案性能通常不高,區塊鏈對交易性能又有很強的要求。實際應用中zkSNARKS被大家喜愛,它有額外性能優勢。
如圖所示為zkSNARKS的流程,參數生成過程中會生成兩個密鑰,一個是證明密鑰PK,一個是驗證密鑰VK,證明拿到PK有一個W,用PK可以產生證據π,把論述和π發給驗證者,驗證者用VK可以直接驗證這筆交易。
關于zkSNARKS在區塊鏈上的應用,我畫了這個圖,有一個具體待驗證的問題,比如要驗證這筆交易是不是合法。該問題可以被等價轉化為QAP問題。然后公鏈項目方可以具體生成公鏈參數,參數其實就是驗證密鑰VK和證明密鑰PK。我對普通用戶要發送一筆交易,首先把交易加密為:C1、C2、C3,同時使用證明密鑰PK證明這筆交易合法,得到一個證明π,把交易和證明π一起發上網絡,全網用戶就可以使用驗證密鑰VK驗證這筆交易得合法性了。這是zkSNARKS在區塊鏈上應用的應用流程。
諾基亞將“交付”幫助遠程工作人員的工業元宇宙:金色財經報道,諾基亞大洋洲首席技術官羅伯特喬伊斯透露,該消費類移動設備制造商將交付幫助遠程工作人員的工業元宇宙,他表示諾基亞去年成立了兩個實驗室,以真正研究元宇宙和支持元宇宙的技術,包括連接5G釀酒廠、為偏遠機場的塞斯納飛機技術人員提供潛在幫助等。諾基亞全球首席戰略和技術官 Nishant Batra此前在世界經濟論壇 (WEF) 上表示,相比于消費市場,元宇宙技術將會對工業市場產生直接影響。(cointelgraph)[2023/2/8 11:53:57]
目前零知識證明在區塊鏈中得應用全景圖是非常大的,有各種各樣的應用,我們在網上可以看到各種各樣的項目,這是項目總體圖。
上面講了為什么要用零知識證明,接下來講講零知識證明在區塊鏈應用中的安全和隱私問題。很多項目存在安全問題,我會從以下幾個方面做一些總結。
一、實現漏洞
講到安全,首先是實現漏洞,零知識證明在實現方面的漏洞歸納為三方面:
1、內存破壞漏洞:現在很多密碼學項目使用內存安全語言研發的,主要用rust、java、go,內存破壞問題相對比較少。也有比如LibSNARKS這些項目使用c++編寫,但該場景中,內存破壞相關漏洞難以利用,一般只能造成節點崩潰。所以內存破壞問題并不嚴重。
2、邏輯漏洞:主要是電路設計問題和應用層邏輯問題。
3、密碼實現漏洞:零知識證明方案比較新,新的密碼方案實現很可能會出現一些新的問題。
首先是電路設計問題。零知識證明在區塊鏈上電路設計上有一個特點,電路設計通常非常復雜,有大量密碼實現,有很多約束,又要優化性能,需要有高超的技巧。
我們以Zcash為例看屏蔽交易。這里是zcash屏蔽交易的輸入、輸出,還有綁定簽名,要把一個交易的輸入、輸出綁定起來。
Animoca Brands允許延長提交結果的截止日期:金色財經報道,Animoca Brands獲準延期提交其2020年經審計的財務報告,該報告原定于2022年底提交給澳大利亞監管機構。?該公司表示,這家前上市公司協商了一個較晚的提交日期,將新的截止日期推遲到第一季度末,隨后幾年的賬目將在 2023 年晚些時候提交。[2022/12/31 22:18:47]
這是輸出電路和輸入電路圖,總的來講,這些電路非常復雜,時間問題,這里不細致描述它。如果你看zcash的標準文檔,對屏蔽交易描述有上百頁文檔。
電路常見問題分為3種,一個是電路設計漏洞,Zcash曾經就產生過faerieGold攻擊,攻擊者可選擇相同的RHO,造成接收者無法使用收到的錢。門羅幣之前也產生過類似的問題。
二是電路與非電路實現不一致的問題,區塊鏈項目最終目標是要保證所有節點都要一致,產生不一致問題就會產生很嚴重的風險,比如分叉和雙花的問題。在使用zkSNARKs的時候,我需要把某一個驗證邏輯的C++或者其他高級語言實現,同時我也需要用零知識證明語法實現一次,這兩類實現很可能產生不一致的現象,不過在審計中,沒有發現知名項目中有這樣的問題。這些項目中有非常多的測試代碼解決這個問題,很顯然他們也意識到了這個風險。
三是標準與實現不一致的問題,Zcash標準有一百多頁文檔,標準與實現有很多不一致的地方,這可能帶來額外的安全風險。我們發現在他的標準文檔存在一些安全問題問題,但是在實際審計項目代碼審計的過程中沒有發現這個問題。但這種不一致性提供了額外的安全風險和攻擊面。
其次是應用邏輯問題。應用開發者會調用零知識證明庫來實現ZKP應用,但是開發者通常對底層ZKP缺乏足夠理解,寫代碼時很容易產生安全漏洞。
馬斯克:若美聯儲下周加息,經濟衰退(程度)將增強:金色財經報道,特斯拉CEO埃隆·馬斯克表示,若美聯儲下周加息,經濟衰退(程度)將增強。此外,馬斯克還稱,推特在打擊虛假信息方面做得更好,社區筆記是其中的一個重要部分。[2022/12/10 21:35:37]
這里網上開源項目semaphore的一個雙花問題,它的問題是應該本來有一個唯一的值帶入到電路中,但是項目沒有限定Nullifier長度,如果該加一個P或者2P都可以使電路滿足。這樣的花同一個證據可以被使用多次,也就是說同樣貨幣可以被使用多次,從而造成雙花問題。
Tron今年實際上也完成了匿名貨幣的研發。在tron的研發過程中,我以社區貢獻者幫忙審計了一些安全問題。這我在tron開發中過程中發現的與semaphore雙花漏洞類似的問題。Tron使用了Librustzcash庫來對匿名交易進行驗證,但沒有對帶入的參數進行長度和內容上的限制,會產生上述所說的雙花問題。
類似的,tron也出現過沒有驗證一筆交易當中多個輸入的Nullifier是否不同,造成雙花問題。但這些都是開發最初期出現的問題,基本上馬上就得到了修復。
在是密碼實現安全問題。新的密碼方案的實現,往往會帶來一些額外的風險,包括現在比較有名的項目,LibSNARK在2015年就發現項目實現中R1CS到QAP的規約漏洞。LibSNARK實現中沒有滿足QAP中多項式線性獨立的要求,這樣就造成soundness可能不滿足,解決項目就是增加冗余,這是一篇相關的論文。
上個月斯坦福大學發現Zcash的Ping攻擊和Reject攻擊漏洞,他們發現一個節點在區塊鏈網絡當中,處理與自身相關的交易時,解密時會產生額外的信息泄露,這樣攻擊者可以發送惡意偽造惡意交易來判斷某一個地址屬于哪一個節點。這樣打破zcash的不可關聯性,相關論文也放在這里。
Helium聯合創始人:Helium 是無許可網絡,我們不總能清楚試點何時結束:8月2日消息,Helium 聯合創始人兼 Nova Labs 首席執行官 Amir Haleem 針對此前將多家未合作公司的徽標顯示在其網站首頁的指責,今日在推特上回應:有關公司聲稱與 Helium 項目沒有任何關聯的報道“令人沮喪和不安”。Helium 已經與很多公司合作,盡管其中一些是有限的試點項目和試驗,其中一些展示和合作得到了“口頭批準”。但Helium的無許可網絡方式意味著與品牌和公司沒有正式的商業合作伙伴關系,而且他們并不總是清楚試驗或試點何時結束。
此外,Nova Labs 的官方聲明表示:“就最近文章中提到的品牌而言,我們已經獲準談論用例,但我們現在將對標志審批流程更加嚴格,以避免任何混淆”[2022/8/2 2:52:41]
二、信任風險
zkSNARKS有一個基本思路,為什么能夠實現高性能呢?提前生成驗證者挑戰X,保留加密的X,丟棄明文X,大家可以用加密挑戰驗證整個證明。整個驗證過程就是要滿足上面的等式。如果攻擊者知道X,比如它是項目參數的生成者,它可以繞過所有困難問題直接構造任意證明。這樣的后門不會被別人發現,因為偽造的證明也具有零知識性的,所以有沒有攻擊者利用這個漏洞去創造一些額外的貨幣,沒有人能知道。
解決信任問題的方法,就是使用安全多方計算MPC生成加密X,大家也是這樣做的。這里舉了一個zcash的例子,他們有專門參數生成的步驟,分成兩步,第一步是生成加密的X。這個加密X也可以給其他項目使用。Zcash把所有MPC協議通訊過程全部公開,實現代碼也公開,每個參與人會把自己收到什么消息,發出去的消息全部簽名放到網絡上。這樣得話,只要其中一個參與者誠實,我們就可以認為MPC結果是安全的。
第二步是針對具體電路生成參數,第一步和第二步缺一不可。有一些項目直接拿了poweroftau的參數來使用,但沒有對第二階段的參數生成進行MPC,這樣的項目也是不可信的。
講講我對MPC問題的看法,現在很多的項目,以太坊等等都在進行自己的MPC,生成零知識證明參數。但是也有一些項目,沒有進行可信的setup。我可以講下我參與MPC的經歷,9月初以太坊有聯系到我,說項目方會找一些社區成員參加參數生成的儀式,9月初找到我說把我排到第14個,到時會聯系我,但是到現在十月中完全沒有任何音訊和消息。雖然MPC方案是安全的,但整個過程不像互聯網聊天室一樣,你像加入就可以直接加入。誰是第幾個人,什么時候到你,完全由項目方來控制,如果你沒有自己參與MPC,就不能夠百分之百確定這個MPC是安全的。
舉一個例子,ZoKrates是零知識證明智能合約編譯器,你有一個邏輯想驗證,你可以用他把這個驗證邏輯編譯器為以太坊上零知識驗證合約。但這里有一個問題,整個參數生成過程,由合約生成方來控制。如果合約生成方是惡意的,他其實可以偽造任意證明。
三、非屏蔽交易信息泄露
我用爬蟲統計了9月Zcash的交易數據,85%數據都是透明交易,沒有任何加密,有14%部分屏蔽,半透明,只有1%是完全屏蔽交易,可以說大多數交易都可以追蹤。
另外我也統計了一下zcash當前的一下貨幣池,95%是透明,只有大約5%在屏蔽池。
實際上針對這個問題,很多學者已經在論文中分析了這些匿名貨幣的可連接性和匿名性。大多數的交易都是可以被追溯的。比如我有一個地址A打了一筆錢給屏蔽池,B打了一筆錢給屏蔽池,這兩筆錢總合在一天后從屏蔽池打給了C,我們可以從交易模式判斷出ABC是關聯,錢就是A、B要打給C的。用戶使用相關、相關的地址、相關的金額、相關時間都可以拿來進行匹配分析,前面有論文表明90%以上的交易都可以分析出來。
產生問題的原因是什么?現在的ZKP方案沒有真正解決廣大參用戶的隱私問題。大多數參與者使用的是手機等輕節點參與交易,不可能作為全節點把所有數據同步到本地的計算機當中。一筆屏蔽交易,解密后才能知道這個交易是不是屬于自己,輕節點不可能有所有的數據,它要解密,需要知道一筆交易是不是屬于我,必須要將交易密鑰交給全節點,這樣輕節點隱私得不到很好的保障。并且現在零知識證明方案對輕節點不友好,計算開銷大。總的來說現在的隱私安全性等都為全節點設計,沒有見到很好的輕節點解決方案。
輕節點對于屏蔽交易支持不足。因為政策的原因,交易所交易就是不讓你用屏蔽交易,必須用透明交易。我作為普通用戶想要保護自己的隱私,我有一些經驗方法,就用盡量使用屏蔽交易,每次交易用不同的新地址,交易金額不同,或者等足夠的時間,但是這些不能百分之百保證安全性,你希望有密碼的安全性,最佳方案只使用屏蔽交易。但是現實情況不太滿足,比如對面要收錢,比如你打錢給交易所,就是不支持屏蔽交易。
四、密碼方案風險
零知識證明技術相對較新,16年論文,17年大規模使用,我個人認為這些項目有待時間考驗,很多項目參數選擇和優化都是比較激進,為了證明方案好。有的困難問題并不標準,依賴太多安全問題,或者缺乏足夠多的審計。
這里有一個問題,Zcash的偽造漏洞,CVE-2018-7167,2018年就被發現,但是2019年才被公布。任何人可以偽造證明,憑空創造Zcash這樣的貨幣,這個漏洞其實影響多個Zcash分叉項目。這個漏洞大概花8個月時間才能完成修復,項目方要改變整個證明方案,升級全網。沒有人知道漏洞是否被利用,如果被利用也是零知識的,Zcash官方發表聲明,很少有人擁有高水平發現漏洞,而且沒有發現Zcash總額出現問題。
并不存在可證明安全,參數生成存在冗余元素,可被利用生成偽造證明,原理并不復雜。后來生成Groth16方案。類似的問題并不是第一次出現,2015年微軟研究院研究員發現另外一個漏洞,這些漏洞是不是最后一次,下次影響會不會更大?
我們可以看到Zcash中的有承諾和哈希方案,他的方案非常復雜,僅僅承諾哈希就可能涉及很多方案和很多安全性證明,安全性有待時間考驗。
五、其他風險
最后講講其他方面的風險,我們可以從數學上證明Groth16是完美零知識方案。實際應用上會有額外的信息漏洞,最明顯就是交易里還有密文,密文就不是零知識,完美零知識不等于完美的隱私保護。我的這些數據,我的這些交易都是上鏈,鏈的數據可能10年、20年都在上面,可能20年后困難問題被攻破了,曾經的隱私的就都被發現了。
Zcash屏蔽地址不可連接性也存在這樣的問題,當前地址不可連接不等于未來不可連接。
側信道漏洞通常不被重視,這樣的攻擊利用比較困難,不會直接造成安全問題,但是在隱私相關系統當中是非常重要的。因為側信道可以直接破壞隱私。我去看了Groth16方案,這也是目前用得最多的零知識證明方案。我要計算證明的時候,就是要計算ABC,這里小寫的ai其實就是用戶自己手里的秘密,ABC的計算,直接與用戶的秘密相關,通過簡單的側信道攻擊可以把秘密恢復出來。類似還有Cache測信道攻擊。目前這些零知識方案都沒有對側信道攻擊做保護。
今天簡單分享了ZKP應用的安全風險,零知識證明目前還是新技術,應用中還存在很多問題,當然這些問題會慢慢被解決,越來越成熟。
經濟學家阿爾欽說過,經濟學其實不關心人是否理性,而關心人是否可以存活。進一步說,其實是關心存活的條件。這句話給我的感觸很深.
1900/1/1 0:00:00上期回顧 BTC:本周BTC基本完成反彈走勢,短期內又進入下跌區間,多方力量尚未完全喪失,將走出一段震蕩走勢,但市場整體趨勢仍以看空為主.
1900/1/1 0:00:00對于那些不關心比特幣底層技術?cypherpunk?意識形態的人們來說,比特幣的主要賣點是為線上業務提供貨幣化模型。由于遺留金融系統的限制和法規,這些業務將不復存在.
1900/1/1 0:00:00美國費城聯邦儲備銀行(FederalReserveBankofPhiladelphia)行長帕特里克?哈克(PatrickHarker)相信,央行的數字貨幣是不可避免的.
1900/1/1 0:00:00作者:龍白滔博士 導讀 類似Libra這樣的合成貨幣可能成為跨國界、大型具有系統重要性的社會和經濟平臺的核心,它重新定義了支付、經濟活動和用戶數據的互動方式.
1900/1/1 0:00:00長久以來,加密貨幣領域的稅制都是全球矚目的議題,而美國正在這一主題上走在前列。2019年10月9日,美國國稅局更新了其2014年發布的加密貨幣稅收指南),該指南用于對加密貨幣領域的稅收原則提供指.
1900/1/1 0:00:00