1. 程式人生 > >讀懂區塊鏈:零知識證明(一)

讀懂區塊鏈:零知識證明(一)

“零知識證明”-zero-knowledge proof,是由S.Goldwasser、S.Micali及C.Rackoff在20世紀80年代提出。我試著在網上找到了論文,但深深覺得自己的數學知識和英語能力的不足。

網上有一個被很多人引用的例子,即“阿里巴巴的零知識證明”,可以幫助我們理解“零知識證明”的原理。

一天,阿里巴巴被強盜抓住了,強盜向阿里巴巴拷問進入山洞的咒語。面對強盜,阿里巴巴是這麼想的:如果我把咒語告訴了他們,他們就會認為我沒有價值了,就會殺了我省糧食;但如果我死活不說,他們也會認為我沒有價值而殺了我。怎樣才能做到既讓他們確信我知道咒語,但又一丁點咒語內容也不洩露給他們呢?

這的確是一個令人糾結的問題,但阿里巴巴想了一個好辦法,當強盜向他拷問開啟山洞石門的咒語時,他對強盜說:“你們在離開我一箭遠的地方,用弓箭指著我,當你們舉起右手我就念咒語開啟石門,舉起左手我就念咒語關上石門,如果我做不到或逃跑,你們就用弓箭射死我。”

強盜們當然會同意,因為這個方案不僅對他們沒有任何損失,而且還能幫助他們搞清楚阿里巴巴到底是不是真的知道咒語這個問題。阿里巴巴也沒有損失,因為處於一箭之地的強盜們聽不到他念的咒語,不必擔心洩露了祕密,同時他又確信自己的咒語有效,也不會發生被射死的杯具。

強盜舉起了右手,只見阿里巴巴的嘴動了幾下,石門果真打開了,強盜舉起了左手,阿里巴巴的嘴動了幾下後石門又關上了。強盜還是有點不信,說不準這是巧合呢,他們不斷地換著節奏舉右手舉左手,石門跟著他們的節奏開開關關,最後強盜們想,如果還認為這只是巧合,自己未免是個傻瓜,那還是相信了阿里巴巴吧。

這樣,阿里巴巴既沒有告訴強盜進入山洞石門的咒語,同時又向強盜們證明了,他是知識這個咒語的。

這就是零知識證明的一個重要例項[2]。

那麼,利用了區塊鏈技術的ZCash,就是利用“零知識證明”實現的匿名性。