零知識證實初見

零知識證實簡介

零知識證實(Zero-Knowledge Proof)是現代密碼學核心之一,由S.Goldwasser、S.Micali及C.Rackoff在20世紀80年代初提出,其中,S.Goldwasser和S.Micali在2012年榮獲圖靈獎。在零知識證實提出的初期,因爲缺少應用場景,僅僅停留在理論層面。近年來,隨着區塊鏈的蓬勃發展,零知識證實才在實踐層面上有了用武之地。
零知識證實的本質就是在不透露一個論斷的任何信息的狀況下,向別人證實這個論斷是正確的。零知識證實具備三條性質:git

  1. 完備性。若是證實方和驗證方都是誠實的,並遵循證實過程的每一步,進行正確的計算,那麼這個證實必定是成功的,驗證方必定可以接受證實方。
  2. 合理性。沒有人可以假冒證實方,使這個證實成功。
  3. 零知識性。證實過程執行完以後,驗證方只得到了「證實方擁有這個知識」這條信息,而沒有得到關於這個知識自己的任何一點信息。

理論上的零知識證實協議具備不一樣的特色。有的零知識證實協議是專職的,只能證實某些特定的問題,好比,圖同構問題。有些零知識證實協議是全能的,只要你能用代碼定義的問題,它都能證實(只是理論可行,不意味着有運行效率)。有些協議是交互式的,須要證實者和驗證者來回發不少輪消息;有些是非交互式的,證實者只須要根據協議向驗證者發一次消息。有的協議證實大小與問題規模相關,問題越複雜,證實越長。而有些協議下,不管問題多複雜,證實大小都同樣。github

一個例子

三色圖問題就是找到一種上色方案使得相鄰兩個節點的顏色不一樣(圖2-(1)中以連線表示兩個節點相鄰)。三色圖是一個NP問題,這意味着求解過程十分複雜。所以,當小明應小紅的委託艱難地找出一個三色圖問題的答案時,小明沒拿到酬勞是毫不願意向小紅出示答案的。那小明(證實者)如何向小紅(驗證者)證實他知道答案呢?
步驟以下:服務器

  1. 小明把問題圖中已經正確上色的節點都遮起來,見圖2-(2);
  2. 小紅從中任意選相鄰的兩個節點,小明便向其展現這兩個節點的顏色,見圖2-(3)。若是這兩個節點的顏色不一樣,那麼小紅便有50%的把握相信小明確實知道答案;
  3. 接着,小明隨機選擇一種顏色映射方案將目前圖中的顏色變換成另外一種顏色,例如「紫色->白色,橙色->黃色,綠色->黑色」,這樣便生成了一張新的着色圖。雖然顏色不一樣,但還是原問題的有效解;
  4. 重複第1-3步N次,若是每次展現的兩個節點顏色都不相同,那麼小明知道答案的可靠性即是1-(0.5)^N。

零知識證實應用

零知識證實的應用很是普遍,下面是部分常見的應用場景。架構

  • 區塊鏈:在傳統的區塊鏈架構中,一樣的計算被重複屢次,好比簽名的校驗、交易合法性校驗、智能合約的執行等等,這些計算過程均可以被零知識證實技術進行壓縮。
  • 隱私保護:咱們常常會填一些涉及我的信息的表格,向別人暴露了隱私,給咱們的生活形成了困擾。經過零知識證實,咱們只須要向對方提供咱們部分信息,最大程度保護我的隱私。好比在買保險的時候,向保險公司證實我沒有心臟病,可是不須要向保險公司提供完整的病歷。
  • 端到端的通信加密:用戶之間能夠互相發消息,可是不用擔憂服務器拿到全部的消息記錄,同時消息也能夠按照服務器的要求,出示相應的零知識證實,好比消息的來源、與發送的目的地。
  • 身份認證:用戶能夠向網站證實,他擁有私鑰,或者知道某個只有用戶本身才知道的祕密答案,網站並不須要知道具體內容,可是網站能夠經過零知識證實來驗證這個私鑰或者答案,從而確認用戶的身份。

參考資料
零知識證實學習資源彙總
讀懂區塊鏈之零知識證實(zk-SNARK)
零知識證實的江湖
一個數獨引起的慘案:零知識證實(Zero-Knowledge Proof)學習

相關文章
相關標籤/搜索