圖解零知識證明(ZKP), 區塊鏈中最常見的密碼學技術究竟是神馬? 看完這篇就明白了…

買賣虛擬貨幣

作者 | Oscar W

譯者 | 火火醬

責編 | Aholiab

出品 | 區塊鏈大本營(blockchain_camp)

零知識證明(Zero-Knowledge Proof或Zero-Knowledge Protocol)是一種基於概率的驗證方法,它包括“類似事實的陳述”和“關於個人知識的陳述”。

驗證者基於一定的隨機性來詢問證明者,如果證明者給出的答案正確,那麼證明者將有很大概率會擁有其所聲稱的“知識”。零知識證明可以在不透露使用哪種貨幣的情況下驗證你確實花了錢

如今,零知識證明已經被許多區塊鏈專案視為最好的隱私保護方案之一。能夠在不洩露資料的情況下,來證明資料的真實性。

在本文中,我們將會解釋神秘的零知識證明(Zero-Knowledge Proof)及其當前的應用。

為什麼ZKP如此重要?

資料隱私是當今社會最重要的課題之一。保護與個人身份有關的個人資料(出生日期、銀行證明、交易記錄、教育證書)是至關重要的,並且其重要性將不斷提高。

在科技時代,我們正在創造著前所未有的海量資料,而且我們也在不斷創造著關於自身的可供掠奪的資料。

像Google和Facebook這樣的大公司利用我們的資料成為了當今世界的科技巨頭。然而,最近密碼學的突破和區塊鏈的興起為保護我們的資料和身份資訊提供了新方法。零知識證明或許就是答案。

零知識證明的原理

零知識證明是麻省理工學院的研究人員在20世紀80年代提出的一種加密方案。零知識證明協議是指一方(證明方)可以證明某事對另一方(驗證方)來說是真實的。除了此特定陳述屬實之外,不會透露其他任何資訊。

例如,當前網站將使用者密碼的Hash雜湊值儲存在其web伺服器中。為了驗證客戶端是否真的知道密碼,大多數網站目前使用的方法是要求客戶端輸入密碼的hash雜湊,並將其與儲存的結果進行比較。

零知識證明可以保護使用者賬號不被洩漏。如果可以實現零知識證明,那麼客戶端密碼對任何人來說都是未知的,但是仍然可以對客戶端登入進行身份驗證。當伺服器受到攻擊時,使用者的賬戶仍然是安全的,因為其密碼並沒有被儲存在web伺服器中。

零知識證明可以分為「互動式」和「非互動式」兩種。接下來我們就一一來看看這兩種證明方式有哪些不同。

互動式零知識證明

零知識證明協議的基礎是互動式的。它要求驗證者不斷對證明者所擁有的“知識”進行一系列提問。

例如,如果有人聲稱自己知道數獨遊戲的答案,零知識證明的過程就是驗證者需要隨機指定要透過列、行或九個正方形進行驗證。

每輪測試不需要知道具體的答案,只需要檢測數字1~9是否包含在內。只要驗證的次數足夠多,就有理由相信證明者是知道數獨問題答案的。

然而,這種簡單的方法並不能使人相信證明者和驗證者都是真實的。在數獨這種情況下,兩者可以提前串通,以便證明者可以在不知道答案的情況下依然透過驗證。

如果他們想要說服第三方,驗證者還必須要證明驗證過程是隨機的,並且他不會向證明者洩漏答案。

因此,第三方難以驗證互動式零知識證明的結果,要向多人證明某些東西的話則需要額外的努力和成本才行。

非互動式零知識證明

顧名思義,非互動式零知識證明不需要互動過程,避免了串通的可能性,但是可能需要額外的機器和程式來確定實驗的順序。

例如,在數獨這個例子中,由程式決定要驗證的列或行。驗證序列必須保密,否則驗證者可能會在不知道真正“知識”的情況下透過驗證。

區塊鏈上的零知識證明

比特幣和以太坊都是用公共地址來代替當事方的真實身份,使交易部分匿名,公眾只知道傳送和接收的地址以及交易的數量。然而,可以透過區塊鏈上可用的各種資訊(如互動記錄)找出地址的真實身份,因此存在暴露隱私的可能

零知識證明,可以在傳送方、接收方和其他交易細節都保持匿名的情況下,保證交易有效。

ZCash可能是成功實現零知識證明的最著名的區塊鏈專案之一。Zcash實現了ZKP的修改版本,被稱為zk-SNARKS,代表Zero-Knowledge Succinct Non-Interactive Argument of Knowledge(零知識簡明非互動式知識證明)

zk-SNARK技術減少了證明的大小以及驗證所需的計算量。它能夠在不洩漏有關地址和相關有價值的任何關鍵資訊的情況下證明有效交易條件得到了滿足。

zk-SNARK將需要驗證的交易內容轉換為兩個多項式乘積相等的證明,並結合同態加密和其他先進技術,在執行交易驗證時保護隱藏的交易金額。

其過程可以簡單地描述為:

  • 將程式碼拆分為可驗證的邏輯驗證步驟,然後將這些步驟拆分為一個由加法、減法、乘法和除法組成的運算電路;

  • 進行一系列變換,將待驗證的程式碼轉化為多項式方程,如t(x)h(x)= w(x)v(x);

  • 為了使證明更加簡潔,驗證者預先隨機選擇幾個檢查點s 來檢查這些點的方程是否為真;

  • 透過同態編碼/加密,驗證者在計算方程式時不知道實際輸入值,但仍然可以進行驗證;

  • 在方程的左邊和右邊,同時乘以一個不等於0的秘密值k。當驗證(t(s)h(s)k) 等於(w(s)v(s)k)時,具體的t(s)、 h(s)、 w(s)和v(s) 是不可知的,從而達到保護資訊的目的。

zk-SNARK並不是完美的。當前zk-SNARK實現中的一個缺陷,是需要提前設定引數。如果這些引數被洩漏,那麼整個網路將面臨毀滅性的打擊。因此,在使用這些網路時,使用者必須堅信引數不會被洩漏。

可能的解決方案包括使用現代“可信執行環境”,如因特爾 SGX以及ARM TrustZone。對於因特爾的SGX技術來說,即使應用程式、作業系統、BIOS或VMM受到威脅,私鑰也是安全的。

此外,最近的一份白皮書揭示了它在零知識密碼學方面的創新:ZK-STARKs (零知識可擴充套件透明知識理論,Zero-Knowledge Scalable Transparent ARguments of Knowledge)。

根據zk-STARK 白皮書,zk-STARK是第一個在不依賴任何信任設定的情況下實現區塊鏈驗證的系統,隨著計算資料的增加,計算速度呈指數級增加。

它不依賴於公鑰加密系統,更簡單的假設使其在理論上更加安全,因為它唯一的加密假設是Hash 雜湊函式(例如SHA2)是不可預測的。

不可否認的是,零知識證明和zk-S(T|N)ARK技術的測試和採用都將需要一定的時間。但是對於區塊鏈底層開發平臺來說,如何兼顧效能和安全性是至關重要的。也許只有零知識證明等密碼學技術被更多應用的時候,區塊鏈這項技術才能被更好地推動。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;