讓我們用萬聖節糖果,來解釋什麼是「零知識證明」吧!
區塊鏈大本營/來源:Hackernoon,譯者:火火醬/張詠晴編譯
2019-09-27 13:40

 

如果讓你用最簡單易懂的表達方式,來解釋零知識證明,你可以怎麼說?

 

要解釋加密技術是很困難的,要用通俗易懂的語言來解釋加密技術則是難上加難。給孩子解釋零知識證明(Zero Knowledge Proof)呢?簡單!今天,我們就來用萬聖節糖果解釋一下零知識證明吧。

 

零知識證明

 

零知識證明(又稱零知識密碼證明,ZKP)是一種在不交換密碼的情況下,進行身份驗證的方法,在這種情況下,密碼是無法被竊取的。這是一件非常酷的事情,因為這可以保證你的通訊安全,沒有人能夠獲取你的通訊內容,或你與其他人共享的文件。

 

透過ZKP,你可以在不洩漏任何事情的情況下,證明自己知道「另一端」那個人的很多秘密。「零知識」這一術語的本意源於:第一方(被稱為「證明方」)沒有透露有關機密的訊息(「零知識」),但第二方(被稱為「驗證方」)確信第一方知道問題所涉及的秘密。

 

為什麼你要在不說出秘密的情況下,證明自己知道秘密呢?當你不信任別人,但仍然需要說服他們你知道這個秘密時,你就要在不洩漏秘密內容的情況下,證明自己是知情的。那麼這又是如何實現的呢?

 

巧克力棒和百萬富翁

 

下面我們借助Bob和Alice,在萬聖節得到的巧克力棒來進行說明。

 

 

Bob和Alice兩個人想知道他們收到的巧克力數是不是一樣多。但是因為他們不想把自己的巧克力分享給對方,所以他們並不想透露自己收到的巧克力的具體數量。

 

 

我們假設他們的「不給糖果就搗蛋」袋子裡正好有10、20、30或40塊巧克力。

 

 

為了在不說出各自具體數量的情況下,比較兩人巧克力的多少,Bob拿來了4個帶鎖的盒子,並在每個盒子上貼上標籤,上面寫著10個、20個、30個、40個(巧克力棒)。

 

 

然後Bob只留下與自己擁有的巧克力數量(假設他有20個巧克力棒)一致的箱子的鑰匙,扔掉其他所有箱子的鑰匙後離開房間。

 

 

Alice拿來4張紙,其中一張紙上寫著「+」,其餘三張紙上都寫著「-」。

 

 

然後她把所有寫著「+」的紙(透過箱子上縫隙),放入與自己巧克力棒數量相對應的盒子中(假設她有30個巧克力棒)。把寫有「-」的紙分別放入其他3個盒子中,然後離開房間。

 

 

Bob回到房間,並用自己的鑰匙打開與自己巧克力棒數量相對應的盒子,查看盒子中的紙上寫的是「+」還是「-」。

 

 

Bob如果發現盒子裡的紙上寫的是「+」,那麼說明Alice擁有的巧克力數量和他是一樣的。如果是「-」,則說明他們擁有的巧克力數量不同(但他們仍不會和彼此分享各自擁有的巧克力數量)。

 

我們知道Bob的袋子裡有20個巧克力棒,Alice的袋子裡有30個巧克力棒。透過打開盒子,並找到寫有「-」的紙,Bob得知他和Alice擁有的巧克力數量不同。但是他並不知道Alice擁有的巧克力數量比自己多還是比自己少。

 

 

Alice回到房間後會看到Bob手中的紙上寫得是「-」,並由此得知Bob擁有的巧克力數與自己不同。但Bob和Alice仍然不知道對方到底有多少巧克力棒,他們只知道他們擁有的巧克力數量是不同的。

 

同樣的例子,但是以一種稍微不同的形式,被廣泛地稱為「Yao’s Millionaire’s Problem姚氏百萬富翁問題」。兩個百萬富翁想要知道他們擁有的錢數是否相等,卻又不想透露具體的數值。這是ZKP工作原理的一個簡單例子。

 

是不是十分簡單明瞭?用這樣的解釋方式,5歲的小朋友也可以輕鬆理解「零知識證明」的意思!

 

本文為巴比特資訊授權刊登,原文標題為「用萬聖節糖果解釋什麼是「零知識證明」,可能是關於密碼學很通俗的解釋了……