零知識證明 zero-knowledge proofs,簡稱ZKPs,我們都知道區塊鏈本身的一個關鍵優勢就是透明性,但是在很多情況下,智慧合約應用卻出於各種商業或法律原因需要保障資料隱私。
零知識證明(Zero Knowledge Proof)的研究最早始於1985年,由MIT教授Shafi Goldwasser, Silvio Micali 和 密碼學大師Charles在《The Knowledge Complexity of Interactive Proof-Systems》論文中提出。正是這篇文章提出了 零知識證明 這個偉大概念,並逐步成為了現代密碼學理論的根基之一,而Shafi Goldwasser和Silvio Micali也於2012 年獲得了有“計算機界諾貝爾獎”之稱的圖靈獎。
零知識證明系統所要完成的任務是「證明某一個事實並且不洩露知識」。這個過程就是零知識證明。
聽起來還是有些晦澀難懂?講個簡單的例子:
阿里巴巴的故事想必大家都聽過,有一天,劫匪抓住了阿里巴巴,拷問他想要得到進入山洞的咒語,但是聰明的阿里巴巴知道,如果把咒語告訴了劫匪,那麼他也就徹底沒有了價值,肯定會將他殺掉,死活不說,那麼也會殺掉他,於是他想到一個好辦法,即能不洩露咒語,又能讓劫匪相信他知道咒語。
阿里巴巴說:“你們離我一箭遠,然後用弓箭指著我,當你們舉右手我會念咒語開啟石門,當你們舉左手我會念咒語關上石門,如果我逃跑或沒有做到,證明我不知道咒語,你們可以一箭殺掉我。”劫匪同意了這個提議,多次嘗試後阿里巴巴都成功按照指示讓石門開啟或關上了,但是由於有一定距離,他們聽不清楚咒語到底是什麼,就這樣,阿里巴巴沒有透露任何訊息就向劫匪證明了他的真實性。
這個例子非常簡單,雖然只是零知識證明機制簡單的概念演示,真正的零知識證明運用的是密碼學,在不透露資料的情況下證明資料的存在。總而言之,要建立零知識證明,驗證者(劫匪)需要讓證明者(阿里巴巴)執行一系列操作,而證明者只有在得知底層資訊的情況下才能正確執行。如果證明者亂蒙一個結果,那麼驗證者極有可能在驗證中發現並證明他的錯誤。那麼零知識證明應用在區塊鏈中有哪些價值呢?
自從這個概念被提出來後,人們就將其應用到了各個領域,比如身份認證系統、存證系統、資料共享、水印檢測,金鑰交換等等,在隱私資料越來越受到大家關注的今天,零知識證明在隱私資料保護的應用中大放異彩:
保護隱私資料:日常生活中,比如只想證明考生及格了,但不想透露具體考了多少分;買保險的時候,只想證明自己沒有心臟病,卻不想暴露病例的所有資訊,不管是哪種資訊,都可以把不想暴露的部分換成一個很像隨機數字的零知識證明,能夠證明資料真實可信。
身份認證:在使用網站時,使用者可以向網站證明他擁有私鑰,或者知道某個只有自己才知道的答案,網站不用知道金鑰,但可以透過零知識證明確認使用者身份,透過去中心化儲存,伺服器可以向用戶證明資料被妥善儲存下來且不被洩露。
計算壓縮與區塊鏈擴容:在傳統的區塊架構中,同樣的計算被重複多次,比如簽名校驗,交易的合法性校驗,智慧合約執行等一些其他的地方,因為有了計算的證明,同一個計算就不需要多次重複了,計算過程可以被零知識技術證明壓縮。
由此,零知識證明真正解決了「資料的信任」,實現了「隱私資料的保護」,也讓區塊鏈真正實現了「信任機器」這一構想。