天天看點

零知識證明-入門學習筆記(五)

零知識證明(zkp)(區塊鍊)

1、由來因素

區塊鍊,因為區塊鍊可以回溯跟蹤所有使用者的交易資訊,并且隐私保護性差,從隐私保護最有效的方案,能夠通過實作零知識證明保證區塊鍊的安全(比特币和以太坊網絡網絡,除了使用位址來替換交易雙方的真實身份,使得交易具有部分匿名性以外,發送、接收位址和金額都是已知的,别人有可能通過網絡上的各種資訊、和現實世界發生的互動記錄等将比特币位址和真實身份對應起來,也是以具有隐私暴露的隐患。) 而零知識證明能夠很好的解決該問題。

2、概念

零知識證明是一種基于機率的驗證方式,驗證的内容包括“事實類陳述”和“關于個人知識的陳述”。驗證者基于一定的随機性向證明者提出問題,如果都能給出正确回答,則說明證明者大機率擁有他所聲稱的“知識”。

例如對于現在登入網站而言,在Web伺服器上存儲了客戶的密碼的哈希值,為了驗證客戶實際上知道密碼,目前大部分網站采用的方式是伺服器對客戶輸入的密碼進行哈希計算,并與已存結果對比,但是這種方式的弊病在于伺服器在計算時就可以知道客戶的原始密碼,一旦伺服器被攻擊,使用者的密碼也就洩露了。如果能夠實作零知識證明,那麼就可以在不知道客戶密碼的前提下,進行客戶登入的驗證,即使伺服器被攻擊,由于并未存儲客戶明文密碼,使用者的賬戶還是安全的。

3、基本原理

基本的零知識證明協定是互動式的,需要驗證方向證明方不斷詢問一系列有關其所掌握的“知識”的問題,如果均能夠給出正确回答,那麼從機率上來講,證明方的确很有可能知道其所聲稱的“知識”。但是存在證明方與驗證方一起作弊行為。

非互動式的零知識證明顧名思義,不需要互動過程,避免了串通的可能性,但是可能會額外需要一些機器和程式來決定試驗的序列

4、執行個體

例子一

  A要向B證明自己擁有某個房間的鑰匙,假設該房間隻能用鑰匙打開鎖,而其他任何方法都打不開。這時有2個方法:

  ①A把鑰匙出示給B,B用這把鑰匙打開該房間的鎖,進而證明A擁有該房間的正确的鑰匙。

  ②B确定該房間内有某一物體,A用自己擁有的鑰匙打開該房間的門,然後把物體拿出來出示給B,進而證明自己确實擁有該房間的鑰匙。

  後面的②方法屬于零知識證明。它的好處在于,在整個證明的過程中,B始終不能看到鑰匙的樣子,進而避免了鑰匙的洩露。

例子二

A擁有B的公鑰,A沒有見過B,而B見過A的照片,偶然一天兩個人見面了,B認出了A,但A不能确定面前的人是否是B,這時B要向A證明自己是B:A給出一個随機值,并使用B的公鑰對其加密,然後将加密後的資料交給B,B用自己的私鑰解密并展示給A,如果與A給出的随機值相同,則證明對方是B。後面的方法屬于零知識證明。

5、零知識證明的性質

  1. 完備性 completeness:如果證明方和驗證方都是誠實的,并遵循證明過程的每一步,進行正确的計算,那麼這個證明一定是成功的,驗證方一定能夠接受證明方。
  2. 合理性 soundness:沒有人能夠假冒證明方,使這個證明成功。
  3. 零知識性 zero-knowledge:證明過程執行完之後,驗證方隻獲得了「證明方擁有這個知識」的資訊,而沒有獲得關于這個知識本身的任何資訊。

6、零知識證明及其相關的協定的優點

  1. 随着零知識證明的使用,安全性不會降級,因為該證明具有零知識性質。
  2. 高效性。該過程計算量小,雙方交換的資訊量少。
  3. 安全性依賴于未解決的數學難題,如離散對數、大整數因子分解、平方根等。
  4. 許多零知識證明相關的技術避免了直接使用有政府限制的加密算法,為相關産品的出口帶去優勢

繼續閱讀