在我的上一篇文章介紹了Keeper密碼管理器,他所使用的就是Zero-Knowledge Proofs(零知識證明)應用。那麼這個零知識證明是在做甚麼的? 為什麼要使用他? 用一段簡單的話解釋
在不提供資訊的細節前提下,向他人證明你確實知道細節。
以下提供兩個普遍被大家用來說明零知識證明的案例
零知識案例說明
1. 阿里巴巴的洞穴
圖片上有A、B、C、D四個點。阿里巴巴要向海盜證明他可以打開秘室的門,但是他又不能讓海盜聽到開啟密室的咒語是甚麼。那麼阿里巴巴要怎樣證明呢?
1. A點是海盜起始站立的位置,B點是阿里巴巴的起點。然後阿里巴巴隨機決定要走到C位置或是D位置。
2. 接著海盜走到B點,然後指示阿里巴巴必須從特定的左邊出現或是右邊出現。
3. 假設阿里巴巴可以正確地依照海盜要求從特定方向出來,那就表示阿里巴巴確實知道咒語可以打開密室。
如果這個範例還不清楚,以下第二個案例
2. 向盲人證明球是有兩個顏色
Alice有一個朋友Jack是個盲人,Alice想要向Jack證明這兩顆球顏色不同(一個綠色、一個紅色)。
首先,Alice讓Jack拿著兩顆球。Jack把球在自己身後做交換(或是不交換),讓Alice回答Jack是否對調了球。
Alice肯定是會答對,雖然他沒有看見Jack是否交換了球的位置,但因為Alice看得到顏色所以他知道是否Jack換了。
當然,有可能Jack懷疑Alice是用猜的。所以他們又進行了一次
這一次Alice還是答對。同上說明,因為Alice看的見球的顏色所以他可以輕易的回答這個問題。
這就是零知識證明的觀念,在不說明你知道的資訊,讓對方相信你確實是知道資訊的。
上面的案例,雖然你可以說Alice如果用猜的也可能猜對。那麼如果執行更多次這樣的遊戲呢? 假設他們玩了10次,成功機率為0.097%,玩了20次,成功機率為0.000095%。這時候就可以說Alice猜中的機率真的很低很低,低到足以被相信他是真的知道這兩顆球的顏色。
從上面的案例我們可以知道,雖然零知識證明可以在不提供資訊細節證明你知道細節。但永遠無法說100%是正確的。(不論你玩的次數再多也只是證明猜對機率越來越低但永遠無法為0)
那麼零知識可以被應用在哪裡? 為什麼為有零知識這樣的概念出現。
其實他最早是在1985年the knowledge complexity of interactive proof-systems被提出,這裡面所提到的零知識證明是屬於interactive(交互式)的方式,而除了interactive方式還有另一種稱為non-interactive(非交互式)方式。
上面舉的兩個例子都是屬於交互式,也就是說證明者需要做出一些甚麼來證實他知道資訊細節,而且每遇到一個人,你都必須用同樣的方式來讓對方相信你。那麼,非交互式也就是你不需要去揭露任何資訊也可以證明你知道資訊細節。
零知識證明逐漸被大眾知道以及討論是經由加密貨幣的興起,像是比特幣是使用了交互式的零知識證明,而其他像是zcach則是用了非交互的零知識證明(像是zk-SNARK或稱zk-STARK)。zk-SNARKS一詞來自Succinct Non-interactive Arguments of Knowledge。
那麼除了加密貨幣呢?
零知識證明應用
審核你的信用貸款
你的銀行貸款審核人員不需要知道你的帳戶有多少錢或是每個月有多少薪水,而只需要能夠得到你是否有達到資格申請貸款就可以
電子投票
證明你具備投票的資格,但不需要揭露你是誰的匿名投票。
還有其他更多的說明可以參考這一篇文章A survey on zero knowledge range proofs and applications。
如果你有更多對於這技術的應用想法,請留言與我分享。