今天要為大家解說區塊鏈中一個被大眾注目已久、但目前暫時尚未出現一個主流應用的「零知識證明」的基本原理。區塊鏈發明以來,就為人們帶來了三個傳統金融世界沒有的突破性的改變:「去中心化」、「不可竄改」、「公開透明」;而其中「公開透明」雖然能夠為某些團體或是 DAO 組織宣示公平,但是卻沒有保障個人在鏈上活動的隱私。因此為了解決這個問題,在區塊鏈上利用「零知識證明」的想法就被提出了。
今天要為大家解說區塊鏈中一個被大眾注目已久、但目前暫時尚未出現一個主流應用的「零知識證明」的基本原理。
區塊鏈發明以來,就為人們帶來了三個傳統金融世界沒有的突破性的改變:「去中心化」、「不可竄改」、「公開透明」;而其中「公開透明」雖然能夠為某些團體或是 DAO 組織宣示公平,但是卻沒有保障個人在鏈上活動的隱私。 因此為了解決這個問題,在區塊鏈上利用「零知識證明」的想法就被提出了。
「零知識證明」的概念是指在不暴露任何相關機密資訊的前提下,向某人證明該件事情的正確性。 如果看到這裡還不是很懂沒關係,接下來很快就會看到實際的例子。這是一個聽起來很抽象、想起來很抽象、實作起來更是複雜的理論;但是我們這邊只要了解零知識證明的概念就好,不必太過深入去研究它在鏈上實際實作的方法。
這篇文章會以一個阿里巴巴的故事來解釋零知識證明最基礎的概念、關於零知識證明的用途、以及如何實用它,關於阿里巴巴與山洞的故事,我會直接參考「How to explain zero-knowledge protocols to your children (wisc.edu)」這篇文章,如果你習慣閱讀英文,也可以直接參考原文。
在很久很久以前,東方有一座叫做巴格達的城市,裏面住著一位老先生叫做阿里巴巴,阿里巴巴每天都必須上市集去買賣一些物品。
有一天,市集來了一個小偷,他神不知鬼不覺地偷走了阿里巴巴的錢包,並且逃走了;阿里巴巴當機立斷,馬上追了上去,卻發現這個小偷居然逃進了一個山洞裡面。
阿里巴巴跟著進入了山洞之後,發現這個山洞裡面居然有一個岔路口,但是阿里巴巴沒有看清楚小偷走的是左、右哪邊的入口,情急之下他只得選了左邊的路追進去,結果居然撲空了,他發現左邊的岔路居然是一條死路;接著阿里巴巴又不死心地去看看洞穴右邊的路口,這條路同樣是一條死路,而小偷早就已經消失無蹤!『也許可能是小偷很幸運地在一開始趁他搜索洞穴另一頭時偷偷跑掉了吧』,阿里巴巴這樣想著。
過了幾天,又有另一個小偷再度來到了市集、偷走了阿里巴巴的東西,並且逃到了洞穴裡面,阿里巴巴一樣追進洞穴裡面,隨便挑了一邊的洞穴入口、卻又撲了空,他心想,這個小偷可能跟前一個小偷都只是好運,都剛好挑了我沒有進去的那頭吧!
一天又一天過去了,阿里巴巴真的很衰,在接下來的每一天裡面都有小偷來到了市集,偷走了他的物品;直到了第四十次阿里巴巴被偷了東西卻撲了空的時候,他開始疑惑了,難道這四十個小偷每個都那麼幸運地選了另一頭的入口嗎?想一想,這樣子的機率實在太低太低了,於是阿里巴巴決定解開這個謎團;他選了一邊的洞穴走到底部,並且找了角落躲了起來,想看看這個洞穴裡面到底有什麼玄機。
在漫長的躲藏與等待之後,阿里巴巴終於看到了一個小偷的身影匆匆忙忙地跑進了他躲藏著那一頭的洞穴入口,並且不遠處的身後有另一個跟阿里巴巴一樣可憐的受害者正在追趕著;他清楚的聽見小偷小小聲的說出了那句有如魔法般的咒語『芝麻開門』,在這之後,原本是一條死路的洞穴底部,居然像自動門一樣的打開了!
小偷便從這個打開的洞口往洞穴的另一邊逃出去了,過了幾秒之後門就又自動關上了,彷彿什麼也沒有發生過一般,然後後面追趕的受害者理所當然的跟當初的阿里巴巴一樣撲了個空。在所有人都離開了之後,阿里巴巴決定試試跟前面的小偷一樣試試能夠開啟洞穴底部的魔法咒語,『芝麻開門』,在他他唸出咒語後,果然洞穴真的就打開了!
在一陣子的摸索之後,阿里巴巴又進一步發現了,這個洞穴的咒語其實是可以修改的,他便趁著沒有人靠近的時候,把這個山洞底部的密碼偷偷改掉了;不久後,過了幾天,就有某幾個小偷因為密碼被改掉的關係,被抓到了。阿里巴巴決定把有關這個洞穴的秘密紀錄了下來,雖然他沒有直接把那句能夠用來開門的咒語寫下來,但是他留下了一些線索,在他的手稿裡面。
阿里巴巴所記錄的關於洞穴的手稿,被流傳到了後世,到了後人的手裡。某個叫做 Mick Ali 且對這個洞穴的秘密很有興趣的考古學家開始研究他的手稿,並且解開了當年阿里巴巴用來這個開啟洞穴的咒語!
儘管過了好幾個世紀,但是這個洞穴的咒語卻依然有效。Mick 等不及想要昭告全世界有關這個洞穴的秘密,不過這個 Mick Ali 其實是阿里巴巴的後代,他實在不想要公開他從手稿線索中解出來的咒語,於是他想了個辦法。
首先,Mick 找來了電視台的記者想要拍一集節目,並且請這位記者先徹底介紹這個山洞和兩條洞穴內的死路。接著,他讓所有人走出了山洞,自己一個人走了進去,並請了一位拿著攝影機的攝影師跟到山洞叉路的入口拍攝,再請這位攝影師躑了一枚硬幣,如果硬幣最後是朝上,就請 Mick 從叉路的右邊走出來;反之則請他從左邊的路口走出來。
第一次丟硬幣的結果是朝上,所以攝影師說了,『請從右邊出來!』,而 Mick 也成功地照做了。節目就用這樣的方式進行了 40 次,而 Mick 每次都能夠完全照著叉路口那位拍攝者所說的方向出現;想一下就知道,用這樣的方式,如果是不知道咒語的人,要連續成功這麼多次的機率是很低的,所以我們幾乎可以相信 Mick 是真的知道山洞的咒語。(除非他真的是天選之人)
另一個電視台的記者也聽到了山洞的事情,所以他也聯絡了 Mick 想要請他拍攝一樣的節目,不過卻被 Mick 拒絕了,因為他已經把拍攝節目的權力賣給了前面的電視台;不過調皮的 Mick 給了記者一個提示:『這個節目不需要真的知道咒語也能夠拍的出來』。
這位記者回去之後想了又想,終於讓他給想通了;他找來了一位長得跟 Mick 很像的替身,並且也找了攝影師,開始模仿前面 Mick 在前一個節目拍攝的方式,這位記者對節目動的唯一手腳就是:他把替身 Mick 從山洞正確的一邊出來的失敗片段剪掉了;只留下了所有成功的錄影畫面。
這麼一來,節目播放的時候,看起來就煞有其事,很容易就能夠說服別人、也沒有辦法讓別人區別真的節目和假造的節目;真正拿到拍攝權利的電視台更是沒有辦法向法官舉證另一個電視台所拍攝的節目是假造的——除非他們能夠暴露 Mick 所知道的山洞的咒語。儘管如此,Mick 的這個節目還是可以在不暴露咒語的前提下向大家展示山洞的秘密,和他本人知道咒語的事實。
寫到目前為止大約是描述了阿里巴巴故事的一半左右,我們可以看見 Mick 是怎麼透過電視台的節目向大眾展示他知道山洞的咒語,卻沒有公布咒語本身是什麼,而這就是零知識證明的概念所帶來的好處。但是透過 Mick 拍攝節目的故事我們也可以知道有可能會出現的一個漏洞:如果驗證者(出題選擇山洞方向的人)與證明者( Mick / Mick 的替身)串通的話,這個證明就有可能失去真實性,不過這大概又是另一個需要討論的問題了。
內容有點多,今天就先講的這裡,當然零知識證明的概念不只能用來保護隱私而已,在區塊鏈的世界也能夠在某些地方派上用場,這點就讓我們留待之後再來介紹。 如果還有興趣讀完整片文章的讀者可以參考下面的參考連結,我有附上簡體中文的翻譯版和原文。