Comunion 是一個基於區塊鏈的組織形式 (DAO) 與創業互助網絡,爲超級個體提供面向數字時代的全新商業基礎設施和價值轉化機制,致力於讓勞動價值 像 資本一樣自由流通、交易和積累。
本系列內容包含:基本概念及原理、密碼學、共識算法、錢包及節點原理、挖礦原理及實現。
在引入零知識證明是什麼的時候?我們通過一個例子一起來摸索一下。
使用紅、黃、藍(r,y,b)三種顏色對下圖中的點着色,使得任意兩個相連的點的顏色不一樣?
我們一起來看一下這個問題。
首先這個問題肯定是可解的,下圖是其中一種着色結果。
那麼如何在不透露自己着色結果的情況下,說服其他人,使得其相信已經正確着色了呢?
證明方式如下:
1.將已經着色好的結果蓋住;
2.開始向其他人證明聲明者知道最終結果,但不會透露;
3.允許驗證人打開任意兩個相鄰的盒子;
4.任意兩個相互鏈接盒子裏面的點顏色是不一樣的。
此時驗證人會提出一個問題:會不會是聲明人運氣好,而驗證人運氣不好,正好選中的相鄰盒子的顏色不相同?所以需要重新驗證一次。
當驗證者提出此種請求時,聲明者必須要滿足。
此時聲明者需做的工作如下:
1.改變自己着色的結果。
爲什麼需要改變結果呢?因爲在圖中點的位置是不動的,如果不改變結果的話,那麼驗證者可以採用排除法,依次將盒子翻開,造成的結果是在翻5次盒子之後,驗證者會知道所有着色結果。
而作爲證明者,是不想讓其他人知道最終結果的。在這裏會用到零知識證明的知識,即證明的時候不透露最終結果。
比如:將紅色變成藍色,將藍色變成黃色,將黃色變成紅色。
2.將第二次着色情況蓋住。
3.讓驗證者進行第二次驗證。
需要注意的是,聲明人只打開驗證人要驗證的位置,例如紅色的圈圈起來的盒子,其它盒子是不打開的。
這樣驗證人在進行第二次驗證時,也會發現驗證結果是正確的,但不會知道所有結果。
可有可能驗證者會覺得兩次驗證不夠,想要繼續驗證,這也是可以的,此時再次重複之前的步驟:蓋住所有結果->改變做事方式->得出結果->進行驗證。
這樣做的意義是:保證驗證者每次的驗證結果均爲真,但不知道事件最終結果。聲明人通過這種不泄漏自身成果的方式,說服驗證者其成果的正確性。
在這個過程當中,與零知識證明的具體聯繫是:
聲明人表述一個問題的時候,不僅知道問題的答案,並且要說服任何人其知道這個答案,卻不會透露這個答案的任何消息。
例如,剛剛的問題是着色,聲明人的答案是着色的結果,並且已經正確的着色。聲明人向驗證者證明的時候,並沒有透露其着色的結果,但是卻可以證明其知道正確的做事結果。
這就是零知識證明的過程,瞭解這個過程主要是爲了學習區塊鏈應用到密碼學中的離散對數問題,我們將在下篇文章進行講解。