【阿里巴巴的零知識證明】原文
戰爭中你被俘了,敵人拷問你情報。你是這麼想的:如果我把情報都告訴他們,他們就會認為我沒有價值了,就會殺了我省糧食,但如果我死活不說,他們也會認為我沒有價值而殺了我。怎樣才能做到既讓他們確信我知道情報,但又一丁點情報也不洩露呢?
這的確是乙個令人糾結的問題,但阿里巴巴想了乙個好辦法,當強盜向他拷問開啟山洞石門的咒語時,他對強盜說:「你們離我一箭之地,用弓箭指著我,你們舉起右手我就念咒語開啟石門,舉起左手我就念咒語關上石門,如果我做不到或逃跑,你們就用弓箭射死我。」
強盜們當然會同意,因為這個方案不僅對他們沒有任何損失,而且還能幫助他們搞清楚阿里巴巴到底是否知道咒語這個問題。阿里巴巴也沒損失,因為處於一箭之地的強盜聽不到他念的咒語,不必擔心洩露了秘密,而且他確信自己的咒語有效,也不會發生被射死的杯具。
強盜舉起了右手,只見阿里巴巴的嘴動了幾下,石門果真開啟了,強盜舉起了左手,阿里巴巴的嘴動了幾下後石門又關上了。強盜還是有點不信,說不准這是巧合呢,他們不斷地換著節奏舉右手舉左手,石門跟著他們的節奏開開關關,最後強盜們想,如果還認為這只是巧合,自己未免是個傻瓜,那還是相信了阿里巴巴吧。
「零知識證明」說的是示證者向驗證者表明他知道某種秘密,不僅能使驗證者完全確信他的確知道這個秘密,同時還保證一丁點秘密也不洩露給驗證者。阿里巴巴的這個方案,就是認證理論「零知識證明」的乙個重要協議。
除了被俘後如何靠情報保命這個問題,零知識證明在社會領域中還有著很多應用場合。例如你證明了乙個世界級的數學難題,但在發表出來之前,總是要找個泰斗級的數學家審稿吧,於是你將證明過程發給了他,他看懂後卻動了歪心思,他把你的稿子壓住,把你的證明用自己的名義發表,他名利雙收,你鬱悶至死,你去告他也沒用,因為學術界更相信的是這位泰斗,而不是你這個無名之輩。
這並不是天方夜譚,而是學術界常見的難題,前些年有個博士生告他的泰斗級導師剽竊他的成果,但除了令師生關係惡化外沒有任何效果,最後他使出了撒手鐗,稱他在給導師審閱的**的關鍵公式中,故意標錯了乙個下標,而這會導致整個推導失敗。學術委員會一查果真如此,但還是有傾向於泰斗的聲音,有人說那是泰斗的筆誤,只不過讓你發現了而矣,並不能證明那公式就是你推導出來的。
這個博士生故意標錯下標,不能說他沒有心眼,但他沒有把「零知識證明」理論用好,以致於落到這種地步。「零知識證明」早在2023年就被a.fiat和a.shamir用數學的方法給出了解決方案,並在同年申請了美國專利,但由於該理論可能被用於軍事領域,專利局被軍方密令擱置,6個月後,軍方命令:「該申請發表後會有害於****......所有美國人的研究未經許可而洩露將會被判刑罰款」。看來軍方認為作者肯定是美國人了,但作者實際上是在美國申請專利的以色列人,研究也是在以色列的大學裡做的,軍方這個命令擺了個大烏龍,雖然兩天後撤消了,但已經成為了學術界的笑柄。
這個笑柄也說明了乙個問題,即「零知識證明」非常重要。基於數學的推理雖然非常複雜,但思路卻很簡單,上述的阿里巴巴方案就是其中之一。其它的一些方案,也都是像這樣遵循著分割和選擇(cut and chose)協議的。
例如圖論中有個哈公尺爾頓迴路(hamiltonian cyclic)問題,說的是多個頂點的全連通圖,若有一條通路通過了所有頂點,且每個頂點只通過一次,那這就是哈公尺爾頓迴路。如果頂點較多的話,即使用計算機窮舉計算很難找出這條迴路,因為通路的可能性真在是太多了。
如果松鼠會貼了一張全連通圖(命名為a圖)懸賞哈公尺爾頓迴路,而且任命我(奧卡姆剃刀)作為評審官,你幸運的找到了一條,那該怎麼辦呢,將結果直接發給我嗎?千萬不要,因為保不齊我會將你的成果讓給了我的親信。那你該怎麼辦呢?應該這麼辦:
1、你將a圖的頂點搞亂了,並生成一張新圖,只是頂點的位置變了,而新圖頂點之間的連線關係與a圖是完全一致的。這時,新圖中每個頂點與a圖中每個頂點的對應關係你是清楚的,而且新圖中的哈公尺爾頓迴路你也是知道的。
2、你將這張新圖發給我,沒錯,就是僅僅一張新圖,上面並沒有畫著你發現的牛b迴路。
3、我收到後,對你提出兩個問題中的乙個:一是證明新圖就是從a圖變形過來的,所有頂點和連線的關係完全一致,二是畫出新圖中的哈公尺爾頓迴路。
4、如果你真的找到了a圖的哈公尺爾頓迴路,這兩個問題當然都能輕鬆回答。需要注意的是:你只需要回答第3步的其中乙個問題,千萬不要兩個問題一併回答,否則我就知道你關於a圖的哈公尺爾頓迴路了,你就sb了。
5、我還是不相信你,因為有可能你只是將a圖變了形,卻根本不知道a圖的哈公尺爾頓迴路,而我在第3步時恰好要求你證明新圖就是從a圖變形過來的,你當然能證明。或者有可能你找了個你知道哈公尺爾頓迴路的圖,但這張圖跟a圖一點關係都沒有,而我在第3步恰好要求你畫出這張圖的哈公尺爾頓迴路。
6、我要求你從第1步開始重複這個驗證過程,隨著次數的增加,第5步那種巧合的可能性就越來越低,如果你多次能回答對第3步中的問題,那我還不相信你已經找到了a圖的哈公尺爾頓迴路,那我就是乙個傻瓜。
7、為了表明我不是傻瓜,我在松鼠會群博裡宣布你找到了a圖的哈公尺爾頓迴路,而這時我並沒有看到你所畫的a圖的哈公尺爾頓迴路。
回到你證明了世界級的數學難題的問題,你可以用這種分割和選擇協議來進行零知識證明,來保護你的權利。你公開聲稱你解決了這個數學難題後,驗證者會給你出乙個其它的題,而能做出這道題的前提條件是已經解決了那個數學難題,否則的話無解,而且這個條件是學術界所公認的,這個題就是所謂的平行問題。不出所料,你靠著已經解開數學難題的基礎把這個平行問題做出來了,但驗證者還是不信,他又出了一道平行問題,你又做出來了,多次較量後,驗證者就確信了你已經解決了那個數學難題,雖然他並沒有看到具體的解法。
大家已經看出來了,零知識證明需要示證者和驗證者的密切配合,但如果你只是乙個數學界的無名之輩,即使你宣稱你解決了數學難題,也不會有人跟你配合著玩零知識證明,那你該怎麼辦呢?
我告訴你乙個可以在法庭上都能當作有效證據的招數,你將證明列印好,選擇乙個最可靠最權威的郵政公司,把它寄給自己,當你收到這個扣著郵戳的包裹後,不要開啟,把它放好,然後就可以把證明寄給數學泰斗。如果他用自己的名義發表了,不必著急,等他依靠其影響力把這個證明炒熱後再出手,你上法庭控告他,他當然不承認,在法庭上你將那個沒開封的包裹拿出來,上面清清楚楚地蓋著時間戳,這就證明了你包裹裡的證明是發生在那個時間戳之前的,加上之後的你郵給泰斗**的郵件存根,和泰斗以自己名義發表**的時間,三者就構成了乙個完整的證據鏈,泰斗灰頭土臉名聲掃地,而你大獲全勝名利雙收。
【零知識證明一般的過程】
【舉例】
零知識證明的優點:
在使用零知識證明的時候,不降低安全性。
零知識證明工作高效,計算過程量小,雙方交換資訊少。
既安全、又有良好的隱私、又減少計算量。
零知識證明的三條性質:
證明介紹
a c++ library for zksnark proofs
零知識介紹
零知識證明
零知識證明的幾個例子 原創 1 a要向b證明自己擁有某個房間的鑰匙,假設該房間只能用鑰匙開啟鎖,而其他任何方法都打不開。這時有2個方法 一 a把鑰匙出示給b,b用這把鑰匙開啟該房間的鎖,從而證明a擁有該房間的正確的鑰匙。二 b確定該房間內有某一物體,a用自己擁有的鑰匙開啟該房間的門,然後把物體拿出來...
零知識證明
定義 能夠在不向驗證者提供有效資訊的情況下,使得驗證者相信某種論斷的正確性。淺顯易懂的說明 zcash 零知識證明的三條性質 1.完備性 驗證方和證明方都是誠實的,並遵循證明的每乙個步驟 2.合理性 沒人能假冒證明方,阿里巴巴和強盜的故事,存在一種可能的情況 阿里巴巴不知道咒語,但和別人串通好,強盜...
零知識證明
零知識證明 zero knowledge proofs,簡寫為 zkps,最初由 s.goldwasser s.micali 及 c.rackoff 在 1985 年的 互動證明系統的知識複雜性 提出,指的是證明者能夠在不向驗證者提供任何有用資訊的情況下,使驗證者相信某個論斷是正確的。允許證明者 p...