買比特幣 買比特幣
Ctrl+D 買比特幣
ads
首頁 > SOL > Info

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

Author:

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

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

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

比特幣的隱私問題

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

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

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

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

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

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

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

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

馬克·庫班:“肯定不會從加密貨幣跳船”,暗示SBF會坐牢:11月26日消息,NBA達拉斯獨行俠隊老板、億萬富豪馬克·庫班表示自己肯定不會從加密貨幣“跳船”,盡管FTX破產引發交易所危機,但數字貨幣仍有大量價值,“有人犯了很多錯誤,但沒有改變加密貨幣潛在價值。”在談到SBF時,馬克·庫班說“我不知道所有細節,我和SBF交流過,覺得他很聰明,但不知道會把別人的錢占為己有,如果我是他,會害怕坐很長時間的牢。”

此前報道,11月21日,達拉斯小牛隊老板、億萬富翁馬克·庫班取消對MetaMask、The Block、Solana、Treum、Mirror Protocol、Polkadot、DeFi Pulse、Flow、Dapper Labs、Uniswap Labs等加密項目的推特關注。其中諸多項目被所馬克·庫班投資,包括Mintable、Dapper Labs等。(TMZ)[2022/11/26 20:48:25]

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

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

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

Animoca Brands將與上市公司Prenetics成立合營公司進軍醫療元宇宙市場:9月27日消息,Animoca Brands將與上市公司Prenetics成立合營公司進軍醫療元宇宙市場,雙方擬共同構建去中心化數字化醫療數據平臺,該平臺結合大健康醫療數據、基于區塊鏈的加密及去中心化技術,以及NFT技術,并將用戶數據轉化為Animoca Brands生態中的通用NFT。(Investing.com)[2022/9/27 5:54:59]

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

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

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

一、實現漏洞

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

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

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

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

特斯拉或將在最近季報中報告BTC資產減記4.4億美元:金色財經報道,根據《每日電訊報》(telegraph)最新披露,電動汽車制造商特斯拉可能會在其即將發布的季度報告中報告約 4.4 億美元的比特幣減值損失,相當于特斯拉去年年利潤的 9%。特斯拉于 2021 年 2 月購買了價值 15 億美元的比特幣,在投資界引起了巨大轟動,也將 BTC 價格推至歷史新高。去年,特斯拉去年曾短暫接受比特幣作為支付方式,但在馬斯克對其碳足跡提出擔憂后暫停使用,不過馬斯克今年早些時候特別表示其本人沒有出售任何加密貨幣投資。[2022/7/4 1:48:25]

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

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

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

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

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

數據:當前比特幣市值占比為42.48%:金色財經消息,據CoinMarketCap最新數據顯示,當前比特幣市值占比為42.48%,以太坊市值占比為14.84%。[2022/7/3 1:46:50]

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

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

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

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

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

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

三箭資本通過Matcha將5500枚stETH兌換為超600萬枚USDT:6月16日消息,鏈上數據顯示,被Nansen標記為三箭資本的地址(0x3BA21b6477F48273f41d241AA3722FFb9E07E247)通過Matcha于北京時間11:22將5500枚stETH兌換為6,098,466.4枚USDT。[2022/6/16 4:32:35]

上個月斯坦福大學發現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:zcashASHCASHCASzcash幣價格Kakashi Senseivcash幣ENNO Cash

SOL
PRO:ProgPoW 進入陰謀論循環,以太坊2.0升級或可終止鬧劇_privacyandprotection

因前東家與NVIDIA的業務合作,ProgPoW正被社區質疑為一次并不單純的技術升級,現已從礦業公司CoreScientific離職的ProgPoW的架構師Minehan正深陷輿論漩渦.

1900/1/1 0:00:00
區塊鏈:螞蟻區塊鏈的新計劃與BAT的區塊鏈戰略新動向_ledger錢包官網下載app蘋果手機

近期,作為阿里系區塊鏈戰略的承載者,螞蟻區塊鏈在阿里云棲大會公布了其過去幾年的主要成績,以及提出最新的區塊鏈生態戰略,在區塊鏈行業引起廣泛關注.

1900/1/1 0:00:00
LTC:QKL123行情分析丨比特幣ETF之路漫長,但依然值得期待(1009)_HBTC價格

摘要:短時大盤有所回調,比特幣延續震蕩,山寨幣聯動為主。雖然市場對Bitwise的比特幣ETF申請已有所預期,但不排除近日有發酵的可能,重點關注消息面.

1900/1/1 0:00:00
BTC:觀點 | 協議作為價值攫取最小化的協調者_比特幣市值占比

FlipsideCrypto最近的一篇文章有這樣的觀點:“不管他們怎么定位自己,去中心化網絡、協議也好,基金會、框架也罷,密碼學貨幣項目,在本質上來說.

1900/1/1 0:00:00
OIN:以太坊智能合約“一騎絕塵”的最佳機會,SKALE獲得1710萬美元融資_TCGCoin

區塊鏈擴展性平臺SKALENetwork已經籌集了1710萬美元來啟動其主網。該公司表示,它可能是以太坊擊敗其他智能合約平臺的“最佳機會”.

1900/1/1 0:00:00
FTX:向死而生,幾乎被市場遺忘的山寨幣要殺回來了?_CLUB

10月初以來市場關于“山寨幣季節”的討論熱度降至冰點,但是相比于前幾個月一致唱衰的態度,市場分析人士的觀點卻意外發生了180度的大反轉......在今年上半年的一波小牛市中.

1900/1/1 0:00:00
ads