部落格:
掘金:
github :
蟲洞區塊鏈專欄:
zk-snark
全稱是「zero-knowledge succinct non-interactive argument ofknowledge」,中文是「零知識簡潔的非互動知識論證」。
zk-snark
是「零知識證明」理論在區塊鏈
中的乙個已經落地的被應用起來了的論證。
早在之前曾學習過zk-snark
,無耐當時能夠稍微講明白的文章都相當少見,我本身也是乙個經常寫技術文章的人,寫作的人最容易陷入的狀況就是寫著寫著,文章中的一些詞突然冒了出來,只有自己知道它是怎麼被推算出的,卻沒有說清楚。在讀者看來就感到一頭霧水的莫名其妙。
既然zk-snark
是基於零知識證明
理論的,那麼我們得先理解下零知識證明
。零知識證明
是由s.goldwasser
、s.micali
及c.rackoff
這三個人在20世紀80年代初提出的。但是真正讓它火了起來
是區塊鏈的zk-snark
。
零知識證明
,它指的是證明者
能夠在不向驗證者
提供任何有用的資訊
的情況下,使驗證者相信某個論斷是正確的。
有兩種角色,證明者
和驗證者
,和乙個要點:有用的資訊
。
下面列舉 2個例子來說明下零知識證明
。
例子1錢包的主人
a 作為驗證者,撿到了乙個錢包,此時b作為證明者,想要向a證明,這個錢包屬於它的,即證明錢包屬於b。要符合零知識的證明,那麼要滿足下面的證明要求:
a此時不能能讓b看到錢包,更不能讓他看到錢包裡有什麼東西。
b必須提供足夠多的準確無誤的資訊,證明錢包就是自己的。
b 此時可以提供:
錢包的顏色、大小、品牌分別是什麼,等資訊。
錢包裡有什麼東西?比如多少錢?什麼證件?證件資訊是什麼?
a 在b回答完後,進行驗證,如果 b 全部說對了,則確認b就是錢包主人。這種資訊驗證的手段就是零知識證明。b 沒有向 a 直接提供錢包的情況下,證明了錢包是自己的,它也無法提供錢包,因為錢包在驗證者a手上。實體的錢包就代表者有用的資訊
。
例子2阿里巴巴和40大盜
這是網上乙個很普遍的講述零知識證明
的例子。阿里巴巴是乙個人名,下面簡稱 a,a 是證明者
,大盜是驗證者
。
a 知道開啟藏著財寶的山洞的咒語。強盜抓住他,讓他說出咒語。如果a說出咒語,就會因為沒有利用價值而被殺死。如果a堅持不說,強盜不會相信他真的掌握咒語,也會殺死他。a想了乙個辦法,他對強盜說:「你們離我一箭之地,用弓箭指著我,你們舉起右手我就念咒語開啟石門,舉起左手我就念咒語關上石門,如果我做不到或逃跑,你們就用弓箭射死我。」
這樣子,a 就能在距離大盜足夠遠的位置說出咒語開啟石門,而大盜聽不到咒語是什麼,a。大盜眼見為實,石門的確被開啟,驗證a的確掌握咒語。這個過程 a 沒有直接透露給大盜咒語,咒語就是有用的資訊
。
此外還有乙個數獨
的例子。感興趣的讀者可以自行去瀏覽器搜尋。這種證明方式有點類似於數學中的間接證明
的意味。
零知識證明 與 zk-snark 的關係
如果直接在生活中,使用語言,動作來完成一次零知識證明
,這是很好操作的。就像錢包的例子一樣,大家湊到一塊,說說話,就能完成。
然而從計算機的角度去看,如何將問題轉化為程式的形式,讓計算機去幫我們完成零知識證明
呢?這就需要我們把實際的零知識證明
類問題轉化為數學的描述形式,這樣就能使用電腦程式去表達。
zk-snark
,就是乙個為了將實際的零知識證明
類問題轉為電腦程式問題的理論。全稱「zero knowledge succinct non-interactive argument of knowledge」 可以拆分為下面幾點去理解:
目前,區塊鏈中的公鏈zcash
就應用了zk-snark
的理論。
zcash
使用zk-snark
達到了什麼目的
目前區塊鏈中一些著名公鏈,例如btc
和eth
的交易,在交易成功後,我們去區塊鏈瀏覽器
或呼叫對應的rpc介面
檢視對應的交易記錄的時候。是可以看出包含但不限於
下面的資料的:
雖然說,單靠乙個顯示一串數字和字母組成的位址,例如:0xd224ca0c819e8e97ba0136b3b95ceff503b79f53
也起到了很好的匿名效果,因為作為觀察者來看,我們根本不知道擁有該位址的人是誰,是男是女。
追求絕對的極致,那麼能否將上面的資料也隱藏掉,達到全部資料匿名的效果呢?使用了zk-snark
原理的zcash
公鏈就做到了。
zcash
擁有乙個匿名交易系統,它支援多種交易型別,其中一種就是能夠隱藏交易雙方位址
和交易數值
的交易。這是完全的隱藏,而不是說資料還存放在zcash
的節點資料庫中,而不向外顯示出的隱藏。而是連節點都不知道交易的內容。可以說,在某一些對私密性要求跟高的應用上,零知識證明所帶來的資料隱藏性是很高的。
關於zcash
在隱藏位址之間進行的交易中使用到了zk-snark
。第二篇文章,我將重點介紹下:zcash
在隱藏位址之間進行交易。
零知識證明
零知識證明的幾個例子 原創 1 a要向b證明自己擁有某個房間的鑰匙,假設該房間只能用鑰匙開啟鎖,而其他任何方法都打不開。這時有2個方法 一 a把鑰匙出示給b,b用這把鑰匙開啟該房間的鎖,從而證明a擁有該房間的正確的鑰匙。二 b確定該房間內有某一物體,a用自己擁有的鑰匙開啟該房間的門,然後把物體拿出來...
零知識證明
定義 能夠在不向驗證者提供有效資訊的情況下,使得驗證者相信某種論斷的正確性。淺顯易懂的說明 zcash 零知識證明的三條性質 1.完備性 驗證方和證明方都是誠實的,並遵循證明的每乙個步驟 2.合理性 沒人能假冒證明方,阿里巴巴和強盜的故事,存在一種可能的情況 阿里巴巴不知道咒語,但和別人串通好,強盜...
零知識證明
零知識證明 zero knowledge proofs,簡寫為 zkps,最初由 s.goldwasser s.micali 及 c.rackoff 在 1985 年的 互動證明系統的知識複雜性 提出,指的是證明者能夠在不向驗證者提供任何有用資訊的情況下,使驗證者相信某個論斷是正確的。允許證明者 p...