以太坊交易所 以太坊交易所
Ctrl+D 以太坊交易所
ads

硬核!360高級安全專家彭峙釀以Zcash為例,談零知識性證明的安全和隱私問題_ASH:Wrapped Zcash

Author:

Time:1900/1/1 0:00:00

10月12日,由中國計算機學會主辦的“2019CCF區塊鏈技術大會”在成都舉行。360高級安全專家彭峙釀博士以《零知識證明在區塊鏈應用中的安全和隱私問題》為題進行了分享,內容非常硬核。

以下是彭峙釀博士分享內容全文,由巴比特整理發布。

比特幣的隱私問題

比特幣是去中心化數字貨幣,廣播交易到公開賬本,防止雙花。比特幣不存在匿名性,個人交易記錄、賬戶余額以及商家現金流都可能被追蹤到,這可能就產生了隱私問題,也會產生錢的等價性問題。人們都希望貨幣是等價的,但比特幣的歷史信息可以被查到,某一些可能曾經是黑錢,或者某一些有更高的收藏價值,從而造成比特幣并不等價。為了解決這兩個問題,人們希望把隱私引入到比特幣當中。

比特幣交易如圖所示,如果想要對公開歷史交易信息增加隱私保護,最簡單的思路就是把所有東西都加密,比如交易發送者、接收者,以及交易金額,這樣就能得到一個隱私的交易。但這里存在一個問題,如果這些數據加密的話,全網其他用戶可能沒法解密數據,這就跟比特幣或者是區塊鏈公開可審計性存在沖突。因此,學者們提出用零知識證明來解決這個問題。

簡單介紹一下零知識證明,有一個證明者和一個驗證者,以及一個要證明的論述。證明者有一個證據W,證明論述X屬于某個語言R。證明者要向驗證者證明論述X過程中,會通過一些交互。交互得最后,證明者要向驗證者發送一個證明,驗證者決定接受或者拒絕該論述。

零知識證明要滿足以下這些性質:

完備性:如果論述正確證明者可以說服論述者;

正確性:如果論述錯誤證明者沒辦法說服論述者;

零知識性:驗證者除了論述是正確的之外,無法獲得任何其他信息。

我們往往很難要求證明者和論述者同時在線,所以實際應用中非交互式零知識證明更有價值。在非交互式零知識證明中:證明者發一個π給驗證者,驗證者可以直接驗證得出結論,無需進行交互。對于NIZK,有一個簡單的結論,如果因式分解是困難的,對于任意的NP語言都存在非交互式的零知識證明。

Canto將就減少流動性激勵、區塊獎勵進行投票:金色財經報道,基于 Cosmos 的第 1 層區塊鏈 Canto 的社區成員將于周四對三項提案進行投票,這些提案將減少流動性挖礦激勵措施以及區塊獎勵的發行比例。根據博客文章,如果提案通過,ETH/CANTO 和 ATOM/CANTO 等 Canto 上每個流動資金池的挖礦激勵將平均減少約 38% 。治理提案還將降低 Canto 的通貨膨脹率,或將每個區塊發出的 CANTO 代幣數量降至 4.76 CANTO,減少 15%。理論上,這些變化應該有利于CANTO代幣的持有者,因為擬議的變化將導致整體供應的通貨膨脹率降低。[2023/5/9 14:50:52]

有了零知識證明后,我要在區塊鏈上引入隱私就很簡單了。我把所有交易全部加密,加密之后我會增加一個證明,證明這筆交易是合法的,所謂的合法就是滿足區塊鏈交易的規則,我這個用戶確實有這么多錢,而且交易中得錢沒有被雙花。這樣可以解決加密和公開可驗證性的沖突。

通用性零知識證明方案性能通常不高,區塊鏈對交易性能又有很強的要求。實際應用中zkSNARKS被大家喜愛,它有額外性能優勢。

如圖所示為zkSNARKS的流程,參數生成過程中會生成兩個密鑰,一個是證明密鑰PK,一個是驗證密鑰VK,證明拿到PK有一個W,用PK可以產生證據π,把論述和π發給驗證者,驗證者用VK可以直接驗證這筆交易。

關于zkSNARKS在區塊鏈上的應用,我畫了這個圖,有一個具體待驗證的問題,比如要驗證這筆交易是不是合法。該問題可以被等價轉化為QAP問題。然后公鏈項目方可以具體生成公鏈參數,參數其實就是驗證密鑰VK和證明密鑰PK。我對普通用戶要發送一筆交易,首先把交易加密為:C1、C2、C3,同時使用證明密鑰PK證明這筆交易合法,得到一個證明π,把交易和證明π一起發上網絡,全網用戶就可以使用驗證密鑰VK驗證這筆交易得合法性了。這是zkSNARKS在區塊鏈上應用的應用流程。

Tiger Global將OpenSea估值下調至30億美元:4月25日消息,Tiger Global已將其在OpenSea的權益價值從1.268億美元下調至3020億美元,降幅76%。據此推算,Tiger Global已將OpenSea估值下調至30億美元。

此前報道,OpenSea于2022年1月宣布以133億美元的投后估值完成3億美元C輪融資,Paradigm和Coatue領投,Tiger Global等參投。[2023/4/26 14:26:47]

目前零知識證明在區塊鏈中得應用全景圖是非常大的,有各種各樣的應用,我們在網上可以看到各種各樣的項目,這是項目總體圖。

上面講了為什么要用零知識證明,接下來講講零知識證明在區塊鏈應用中的安全和隱私問題。很多項目存在安全問題,我會從以下幾個方面做一些總結。

一、實現漏洞

講到安全,首先是實現漏洞,零知識證明在實現方面的漏洞歸納為三方面:

1、內存破壞漏洞:現在很多密碼學項目使用內存安全語言研發的,主要用rust、java、go,內存破壞問題相對比較少。也有比如LibSNARKS這些項目使用c++編寫,但該場景中,內存破壞相關漏洞難以利用,一般只能造成節點崩潰。所以內存破壞問題并不嚴重。

2、邏輯漏洞:主要是電路設計問題和應用層邏輯問題。

3、密碼實現漏洞:零知識證明方案比較新,新的密碼方案實現很可能會出現一些新的問題。

首先是電路設計問題。零知識證明在區塊鏈上電路設計上有一個特點,電路設計通常非常復雜,有大量密碼實現,有很多約束,又要優化性能,需要有高超的技巧。

我們以Zcash為例看屏蔽交易。這里是zcash屏蔽交易的輸入、輸出,還有綁定簽名,要把一個交易的輸入、輸出綁定起來。

Terra Classic(LUNC)重新掛鉤UST提案已獲得通過:2月3日消息,Terra Classic社區提案11324將LUNC與UST重新掛鉤已獲得通過。該提案是一個信號提案,具體可操作計劃將通過Terra Community Trust 23指導方針執行,最終目標是恢復2022年5月脫鉤事件中損失的價值,同時簡化LUNC的燃燒流程。[2023/2/3 11:45:43]

這是輸出電路和輸入電路圖,總的來講,這些電路非常復雜,時間問題,這里不細致描述它。如果你看zcash的標準文檔,對屏蔽交易描述有上百頁文檔。

電路常見問題分為3種,一個是電路設計漏洞,Zcash曾經就產生過faerieGold攻擊,攻擊者可選擇相同的RHO,造成接收者無法使用收到的錢。門羅幣之前也產生過類似的問題。

二是電路與非電路實現不一致的問題,區塊鏈項目最終目標是要保證所有節點都要一致,產生不一致問題就會產生很嚴重的風險,比如分叉和雙花的問題。在使用zkSNARKs的時候,我需要把某一個驗證邏輯的C++或者其他高級語言實現,同時我也需要用零知識證明語法實現一次,這兩類實現很可能產生不一致的現象,不過在審計中,沒有發現知名項目中有這樣的問題。這些項目中有非常多的測試代碼解決這個問題,很顯然他們也意識到了這個風險。

三是標準與實現不一致的問題,Zcash標準有一百多頁文檔,標準與實現有很多不一致的地方,這可能帶來額外的安全風險。我們發現在他的標準文檔存在一些安全問題問題,但是在實際審計項目代碼審計的過程中沒有發現這個問題。但這種不一致性提供了額外的安全風險和攻擊面。

其次是應用邏輯問題。應用開發者會調用零知識證明庫來實現ZKP應用,但是開發者通常對底層ZKP缺乏足夠理解,寫代碼時很容易產生安全漏洞。

英國央行正為“CBDC樣本錢包概念證明”項目進行招標:12月12日消息,據外媒報道,英國央行(BOE)在英國政府數字市場官方發布了“CBDC樣本錢包概念證明”項目招標申請,預算范圍為20萬英鎊。項目周期為5個月,申請將于12月23日截止。

該項目概述了概念驗證錢包必須實現的簡單指導原則,該錢包似乎只需要提供基本功能,如注冊流程、更新詳細信息的方法、顯示余額和交易以及顯示通知等其他要求。該錢包還必須證明它可以使用CBDC加載和卸載商業銀行的資金,并且能夠通過帳戶ID或QR碼請求點對點支付,并且可以用于與企業在線支付。該項目的主要交付成果是創建一個適用于iOS和Android的移動應用程序、一個錢包網站和一個示例商戶網站和后端基礎設施,為錢包網站和應用程序提供服務,同時存儲用戶數據和交易歷史。(Cointelegraph)[2022/12/12 21:38:56]

這里網上開源項目semaphore的一個雙花問題,它的問題是應該本來有一個唯一的值帶入到電路中,但是項目沒有限定Nullifier長度,如果該加一個P或者2P都可以使電路滿足。這樣的花同一個證據可以被使用多次,也就是說同樣貨幣可以被使用多次,從而造成雙花問題。

Tron今年實際上也完成了匿名貨幣的研發。在tron的研發過程中,我以社區貢獻者幫忙審計了一些安全問題。這我在tron開發中過程中發現的與semaphore雙花漏洞類似的問題。Tron使用了Librustzcash庫來對匿名交易進行驗證,但沒有對帶入的參數進行長度和內容上的限制,會產生上述所說的雙花問題。

類似的,tron也出現過沒有驗證一筆交易當中多個輸入的Nullifier是否不同,造成雙花問題。但這些都是開發最初期出現的問題,基本上馬上就得到了修復。

在是密碼實現安全問題。新的密碼方案的實現,往往會帶來一些額外的風險,包括現在比較有名的項目,LibSNARK在2015年就發現項目實現中R1CS到QAP的規約漏洞。LibSNARK實現中沒有滿足QAP中多項式線性獨立的要求,這樣就造成soundness可能不滿足,解決項目就是增加冗余,這是一篇相關的論文。

Blockchain.com CEO:加密市場還將面臨更多困境,但最終有助于鞏固加密經濟:金色財經消息,Blockchain.com首席執行官Peter Smith表示,“創造性破壞”最終有助于鞏固加密經濟,在最近的市場波動之后,仍有較弱的協議、資產和投資者會面臨困境。

Smith表示,更多的痛苦即將到來,更多的風險將暴露出來,但最終,這對去中心化經濟來說是一件好事,因為這將是一個漫長的采用和發展過程。(CNBC)[2022/5/20 3:29:36]

上個月斯坦福大學發現Zcash的Ping攻擊和Reject攻擊漏洞,他們發現一個節點在區塊鏈網絡當中,處理與自身相關的交易時,解密時會產生額外的信息泄露,這樣攻擊者可以發送惡意偽造惡意交易來判斷某一個地址屬于哪一個節點。這樣打破zcash的不可關聯性,相關論文也放在這里。

二、信任風險

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應用的安全風險,零知識證明目前還是新技術,應用中還存在很多問題,當然這些問題會慢慢被解決,越來越成熟。

Tags:CASASHCASHzcashWrapped ZcashASHIT幣CASH價格KZCash

火必下載
被SEC告上法庭,TON喊冤:過去1年半一直嘗試溝通無果_SEC:EGR

上周六,美國證券交易委員會突然宣布Telegram17億美元的代幣發售不合法,對其旗下兩個ICO實體提起臨時限制令,并指控其出售未注冊的證券.

1900/1/1 0:00:00
扎克伯格尷尬時刻:Libra創始成員企業為何集體出走?_FACE:ICEBT價格

Facebook試圖改變世界的雄心壯志這一次似乎就要泯滅了。說好要一起打造新世界貨幣的眾多伙伴中,PayPal第一個離開了.

1900/1/1 0:00:00
ChainNode直播間,起底阿瓦隆最強礦機A1166,這是礦機還是印鈔機?_HAI:CHA

比特幣算力已達100E,枯水期即將來臨,這會是高算力、低功耗礦機登臺,老礦機戰死沙場的節骨眼嗎?當比特幣迎來高算力礦機時代,挖礦這門生意還賺錢嗎?10月17日晚.

1900/1/1 0:00:00
沃爾瑪與IBM達成合作,用區塊鏈跟蹤蝦類產品供應鏈_BMF:區塊鏈工程專業學什么女生好就業

美國零售巨頭沃爾瑪將與IBM合作,使用區塊鏈技術來跟蹤其蝦類產品供應鏈。 圖片來源:Pixabay10月4日,印度商業出版物《LiveMint》報道,沃爾瑪將使用區塊鏈技術跟蹤其在印度采購的蝦,

1900/1/1 0:00:00
一文讀懂Filecoin與IPFS的關系:Filecoin真的是下一座金礦么?_COIN:MFIT Coin

Filecoin是什么?與IPFS是什么關系?IPFS是一種網絡協議,具有內容尋址、版本控制等一系列優異特性,它保證了文件在P2P網絡中安全地存儲與傳輸,IPFS被認為是下一代的網絡傳輸協議.

1900/1/1 0:00:00
出其不意!Libra協會正在考慮對KYC法規采取“階梯式”方法_區塊鏈:LIBRA

摘要: 天秤座協會正在考慮一些激進的方法來接觸某些地方的無銀行服務的人,包括一個“階梯”方法實施了解你的客戶(KYC)條例.

1900/1/1 0:00:00
ads