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