當(dāng)前位置:首頁 > 物聯(lián)網(wǎng) > 區(qū)塊鏈
[導(dǎo)讀] 早上很多朋友@我,安比實驗室發(fā)表了一篇文章zkSNARK的“輸入假名”的攻擊。迅速看了看,很贊。這個攻擊原理其實比較簡單,但是,不深入理解zkSNARK以及使用場景的朋友確實很難發(fā)現(xiàn)和理解。本文

早上很多朋友@我,安比實驗室發(fā)表了一篇文章zkSNARK的“輸入假名”的攻擊。迅速看了看,很贊。這個攻擊原理其實比較簡單,但是,不深入理解zkSNARK以及使用場景的朋友確實很難發(fā)現(xiàn)和理解。本文講講我對這個攻擊的分析和理解。

源于三天前

這種攻擊方式一直潛伏著,沒被發(fā)現(xiàn)。直到三天前:

俄羅斯開發(fā)者poma,在項目semaphore提交了一個issue,公開了這個攻擊方法。poma同時也在kovan測試網(wǎng)絡(luò)驗證了這種攻擊方式。

先從semaphore項目的代碼開始:

話說,semaphore是個很有意思的項目,它提供了一套方法能讓用戶不暴露自己身份的情況下廣播消息。暫不深入介紹這個項目的內(nèi)容,直接看函數(shù)。broadcastSignal函數(shù)提交了證明,某個用戶發(fā)送某個消息(signal)。只有具體的某個broadcaster(server)才會調(diào)用這個函數(shù)。

signal - 廣播的消息內(nèi)容

a/b/c以及input - 是zkSNARK的證明以及公開信息(statement信息)

函數(shù)實現(xiàn)(第82行),調(diào)用verifyProof函數(shù)驗證證明以及statement信息是否是合理的證明。第83行,查看nullifier_hash是否被用過。

什么是Nullifier?

熟悉ZCash的朋友,估計對Nullifier比較熟悉。

為了保護(hù)交易的隱私,在鏈上只存儲Note和Nullifier對應(yīng)的hash信息。Note代表可以花的錢,Nullifier表示某筆錢已經(jīng)消費。Note和Nullifier一一對應(yīng),一個Note只存在一個Nullifier。通過zkSNARK生成證明,證明Note和Nullifier的正確性以及存在某種聯(lián)系。在鏈上,為了防止雙花,在執(zhí)行某個交易時,必須確定某個Note是否已經(jīng)消費。確定的方法就是記錄下Nullifier對應(yīng)的hash信息。

verifyProof的計算

verifyProof的函數(shù)實現(xiàn)在snarkjs項目的templates/verifier_groth.sol(以Groth16為例)。verifyProof只是個簡單的wrapper,具體計算的實現(xiàn)時verify函數(shù)。

verify就是驗證Groth16的驗證等式是否成立,再看Groth16的驗證等式:

其中橙色部分就是input,藍(lán)色部分就是vk.IC。scalar_mul是橢圓曲線的“標(biāo)量乘法”計算。vk.IC是橢圓曲線上的一個點(假設(shè)為P),input是個標(biāo)量(假設(shè)x)。scalar_mul(P, x) 表示為xP。如果橢圓曲線的階為q的話,下面的等式成立:

(x+q)P = xP + qP = xP

也就是說,x+p和x作為input的話,scalar_mul的計算結(jié)果相等。也就是說,Groth16的等式依然成立。

如何攻擊?

在智能合約中,輸入input是用uint表示。以太坊上一般采用bn254的曲線,q為:

21888242871839275222246405745257275088548364400416034343698204186575808495617。雖然這個q比較大,但是,uint的最大值還是比q大不少。

攻擊方法就形成了:

在一個用戶提交了證明以及公開的input信息后,攻擊者修改input中的nullifier_hash即可。雖然邏輯上在花費同一筆錢,但是,智能合約卻認(rèn)為是花費不同的費用。智能合約認(rèn)為一個Note只能對應(yīng)一個Nullfier,事實上,在這樣的情況下,一個Note對應(yīng)了多個Nullfier。

如何修復(fù)?

修復(fù)的方式有好多種,目前最簡單的修復(fù)方式是在verify函數(shù)加限制:

限制input不能超過q。

總結(jié):

三天前,俄羅斯開發(fā)者poma公開了zkSNARK應(yīng)用模型下的一種攻擊方式。攻擊不需要重新生成證明信息,只需要修改Statement中Nullfier對應(yīng)的hash數(shù)據(jù)。原理是,橢圓曲線是個循環(huán)群,scalarMul計算在輸入的標(biāo)量加上橢圓曲線的階的情況下,結(jié)果相等。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉