這個標題相當拗口,就像零知識證明的定義一樣讓人充滿疑惑,簡單來說,零知識證明是指,在不揭曉我所知道或擁有的某樣東西的前提下,向別人證明我有確實知道或擁有這樣東西。
為了更直觀地解釋零知識證明的機制,在此我們繼續請出Alice和Bob來進行說明(密碼學的李華)。
在一個只有一個入口的山洞(阿里巴巴的山洞),Bob和Alice(以下使用A和B代指)都沒有進去,洞裡面有兩條路(路徑C和路徑D),這兩條路由一扇門連接,要說出密碼才能通過這扇門。B希望向A證明她知道開門的密碼,但不想將密碼透露給A。
因此,A需要站在山洞外,B從其中一條路走進山洞,而A並不知道她選了哪條路;接著,A隨機選擇其中一條路,讓B回到山洞入口。如果B最初選擇從路徑C走到門口,但A讓她從路徑D回來,唯一的方法就是穿過那扇門,而穿過門必須知道密碼。
為了充分證明B真的知道門的密碼,而不是運氣好剛好選到了同一條路,這個過程可以反覆重複好幾次。在進行完這一步後,A就可以非常確信B知道門的密碼,因為B確實穿過了門,與此同時B也不用向A透露密碼是什麼。
當然,上面的例子只是為了方便理解,事實上,零知識證明必須滿足三個性質:
- 完備性:如果陳述為真,誠實的驗證者將被誠實的證明者說服。
- 嚴密性:如果陳述為假,沒有不誠實的證明者能夠說服誠實的驗證者。證明系統是誠實的,不允許作弊。
- 零知識性:如果陳述為真,沒有驗證者會獲得除了這個陳述為真之外的任何信息。
又有人會問,這個東西有什麼用呢?
事實上,和我之前發的那篇不經意傳輸的文章密碼學|如何不炫富同時證明你更有錢一樣,我們不希望有一個第三方(需要額外的信任)去參與到我們的交互中來,我們需要去中心化的方案,那麼去中心化又有什麼用呢?
對,比特幣和區塊鏈,它們需要去中心化的交易體系。
【以下例子取自知乎高贊回答】區塊鏈主鏈過慢的交易速度和過高的gas fee曾經是很大的問題,所有交易都要發生在主鏈,造成鏈上堵塞,為了解決這些問題,以太坊發展出了Layer 2解決比特幣鏈上擁堵、降低Gas費的需求,當前主流的Layer 2有兩種方案:Optimism roll-up和ZK roll-up(ZK即零知識的縮寫)。
Optimism roll-up是目前最為常用的方法,它默認對交易不執行任何計算,但為了防止欺詐,如果有人能夠發現交易中的欺詐,可以進行證明並提出異議,如果異議被核實,欺詐者會受到懲罰,證明者會收穫獎勵。因為可能需要等待異議,Optimism roll-up中交易的等待時間會比較長。
ZK roll-up顧名思義,是使用到零知識證明的方案。ZK roll-up會打包數百個交易生成SNARK(簡潔的非交互式知識論證)或 STARK(可擴展的透明知識論證)形式的有效性證明。ZK roll-up Layer 2的狀態轉移只需要提供有效性證明,不像Optimism roll-up需要交易的全部信息,需要的空間更小;同時Layer 2的數據轉移到主鏈時不需要等待異議(因為都已經被證明有效了),完成的速度也更快。值得一提的是,目前基於ZK的方案不是完全完美的,有效性證明需要的計算量很大,同時因為改變了世界狀態轉移的方式,一些ZK roll-up沒有EVM(以太坊虛擬機)的支持,但總的來說,
上圖,以太坊聯合創始人 Vitalik 在表格中對各大 L2 方案及其數據可用性進行了概述
除此之外,零知識證明還可以用於在不交換密碼等秘密信息的情況下對用戶進行身份驗證等場景。不過,零知識證明目前使用的算法計算強度都較高,因為它們需要驗證者和證明者之間的多次交互(在交互式ZKP中),或需要大量的計算能力(在非交互式ZKP中),這使得零知識證明目前並沒有得到廣泛應用,但是隨著算法完善和算力提高,零知識證明也會越來越普及。