1. 程式人生 > >神奇的零知識證明和zkSNARK究竟是什麼

神奇的零知識證明和zkSNARK究竟是什麼

在這裡插入圖片描述
所謂零知識證明(zero-knowledge proofs),最初是由麻省理工教授Shafi Goldwasser、Silvio Micali(注:兩人都是圖靈獎得主)以及另一位密碼學大牛Charles Rackoff於20世紀80年代初共同提出的[1]。有了零知識證明,就允許一方(證明者)說服另一方(驗證者),一個給定的論斷是真實的,而不會洩露任何超過論斷本身有效性的資訊。

由於這一話題確實艱澀難懂,這裡便以著名的《阿里巴巴洞穴》[2]為例,以便讓讀者更好地瞭解零知識證明的概念:

“很久以前,在東部城市巴格達有一位名為阿里巴巴的老人,每天阿里巴巴都會跑去集市買賣東西。
某一天在巴格達集市,一名小偷從阿里巴巴的手中搶走了一個錢包。
阿里巴巴追趕這名小偷,而小偷則逃進了一個洞穴,這個神祕的洞穴有兩個蜿蜒的入口:一個向左,另一個向右。
阿里巴巴並沒有看到小偷走的是哪一條路。對此,阿里巴巴無奈只能選擇其中的一條,他決定從左洞口進入,遺憾的是,很快他便走到了左手通道的盡頭。這一路上,他仔細搜遍了每一個角落,但並沒有找到小偷。阿里巴巴自言自語地表示小偷可能在另一個通道。於是他搜尋了右邊的通道,奇怪的是,這個通道也有個死衚衕,而他還是沒有找到那個小偷……
“這個洞穴很奇怪,” 阿里巴巴自言自語道,“那個該死的小偷跑哪去了?”
第二天,又一名小偷順走了阿里巴巴的包裹跑了。詭異的是,這個小偷又進入了那個奇怪的洞穴,阿里巴巴由於體力差的原因,他並沒有看到這個小偷的走向,這一次他選擇從右邊開始搜尋。他一路走到右邊通道的死衚衕,但仍然沒有找到小偷。他認為,第二名小偷也像第一個小偷那樣幸運地離開了,靜靜地融入了擁擠的集市。
日子一天天過去,每天都會有小偷來光顧阿里巴巴這位老者。而阿里巴巴則總是會慢上一拍,從來沒有抓到過這些小偷。到了第四十天,第四十名小偷順走了阿里巴巴的頭巾,然後又逃入了那個奇怪的洞穴,和以前一樣,阿里巴巴依舊沒有看到小偷的身影。這一次,他選擇從左側通道開始搜尋,但遺憾的是,還是沒有找到小偷。
阿里巴巴感到非常困惑,按以前的解釋,這第四十個小偷和其他三十九個小偷一樣也是幸運的?但這樣的解釋未免有些牽強,連他自己都不信了。這是因為,四十個小偷全都幸運逃走的概率只有萬億分之一!所以,阿里巴巴對自己說,一定存在著另外一種更可能的解釋。
他開始懷疑那個奇怪的洞穴保護了一個祕密!對此,他決定躲藏在右邊通道的袋子之下。在經歷一段難熬的等待之後,他看到了一名小偷急匆匆跑了過來,然後對著牆壁低聲說道:“芝麻開門”。隨後,阿里巴巴便看到了驚人的一幕,那面牆壁竟然打開了,當小偷逃走之後,這面牆壁又合上了!但阿里巴巴非常高興,因為他發現了這個奇怪洞穴的祕密。
他發現,當這面牆壁開啟時,洞穴的左手通道和右手通道是相連著的。阿里巴巴一遍又一遍地試驗了這個魔法詞,並最終設法替換掉了魔法詞。第二天,小偷就被阿里巴巴給抓住了……
出自《如何向孩子解釋零知識證明》

而zkSNARK,則是零知識證明的一個變體,它使得證明者能夠簡潔地使任何驗證者相信給定論斷的有效性,並且實現計算零知識,而不需要證明者與任何驗證者之間進行互動。

在零知識當中,zkSNARKs可被用於證明和驗證計算的完整性,並以NP宣告表示。一個掌握NP宣告驗證部分知識的證明者,可以產生一個簡潔的證明,證實了NP宣告的真實性。任何人都可以驗證這個簡短的證明,其提供了以下這些屬性:

零知識:驗證者除了從證明中瞭解到宣告的真實性之外,他什麼也無法得到。
簡潔性:證明簡短,易於驗證;
非互動性:證明不需要證明者和驗證者之間來回互動
可靠性:證明在計算上是正確的(即偽造假NP宣告的證明是不可行的)這種證明系統也被稱為論證;
知識證明:該證明不僅證明NP宣告是真實的,而且證明者知道為什麼是這樣的。
這些屬性共同構成了zkSNARK,它代表了一種零知識、簡潔、非互動式的知識論證。

對此話題,伯克利大學區塊鏈顧問Howard Wu研究頗深,他在《SNARKs的崛起》[3]這一課程當中詳細介紹了零知識證明、zkSNARKs以及libsnark的概念,有興趣的讀者可以瞭解一下。

以下為中文譯文:

在這裡插入圖片描述
在這裡插入圖片描述
1
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
1.zkSNARK教程與開發環境:https://github.com/howardwu/libsnark-tutorial↵

2.如何向孩子解釋零知識證明:https://link.springer.com/content/pdf/10.1007%2F0-387-34805-0_60.pdf↵

3.SNARKs的崛起:

https://drive.google.com/file/d/167mgTAXcbRpZRc5hCFPwwhidf8wpKeUY/view

參考資料:https://drive.google.com/file/d/167mgTAXcbRpZRc5hCFPwwhidf8wpKeUY/view

https://github.com/howardwu/libsnark-tutorial

https://link.springer.com/content/pdf/10.1007%2F0-387-34805-0_60.pdf

編譯:灑脫喜

稿源(譯):巴位元資訊(http://www.8btc.com/zksnark-zero-knowledge-proofs)