零知識證明(Zero-Knowledge Proof或Zero-Knowledge Protocol)是一種基于概率的驗證方法,它包括“類似事實的陳述”和“關于個人知識的陳述”。
驗證者基于一定的隨機性來詢問證明者,如果證明者給出的答案正確,那么證明者將有很大概率會擁有其所聲稱的“知識”。零知識證明可以在不透露使用哪種貨幣的情況下驗證你確實花了錢。
如今,零知識證明已經(jīng)被許多區(qū)塊鏈項目視為最好的隱私保護方案之一。能夠在不泄露數(shù)據(jù)的情況下,來證明數(shù)據(jù)的真實性。
區(qū)塊鏈上的零知識證明
比特幣和以太坊都是用公共地址來代替當事方的真實身份,使交易部分匿名,公眾只知道發(fā)送和接收的地址以及交易的數(shù)量。然而,可以通過區(qū)塊鏈上可用的各種信息(如交互記錄)找出地址的真實身份,因此存在暴露隱私的可能。
零知識證明,可以在發(fā)送方、接收方和其他交易細節(jié)都保持匿名的情況下,保證交易有效。
ZCash可能是成功實現(xiàn)零知識證明的最著名的區(qū)塊鏈項目之一。Zcash實現(xiàn)了ZKP的修改版本,被稱為zk-SNARKS,代表Zero-Knowledge Succinct Non-Interactive Argument of Knowledge(零知識簡明非交互式知識證明)
zk-SNARK技術減少了證明的大小以及驗證所需的計算量。它能夠在不泄漏有關地址和相關有價值的任何關鍵信息的情況下證明有效交易條件得到了滿足。
zk-SNARK將需要驗證的交易內(nèi)容轉(zhuǎn)換為兩個多項式乘積相等的證明,并結合同態(tài)加密和其他先進技術,在執(zhí)行交易驗證時保護隱藏的交易金額。
其過程可以簡單地描述為:
將代碼拆分為可驗證的邏輯驗證步驟,然后將這些步驟拆分為一個由加法、減法、乘法和除法組成的運算電路;
進行一系列變換,將待驗證的代碼轉(zhuǎn)化為多項式方程,如t(x)h(x)=w(x)v(x);
為了使證明更加簡潔,驗證者預先隨機選擇幾個檢查點s來檢查這些點的方程是否為真;
通過同態(tài)編碼/加密,驗證者在計算方程式時不知道實際輸入值,但仍然可以進行驗證;
在方程的左邊和右邊,同時乘以一個不等于0的秘密值k。當驗證(t(s)h(s)k)等于(w(s)v(s)k)時,具體的t(s)、h(s)、w(s)和v(s)是不可知的,從而達到保護信息的目的。
但zk-SNARK并不是完美的。當前zk-SNARK實現(xiàn)中的一個缺陷,是需要提前設置參數(shù)。如果這些參數(shù)被泄漏,那么整個網(wǎng)絡將面臨毀滅性的打擊。因此,在使用這些網(wǎng)絡時,用戶必須堅信參數(shù)不會被泄漏。
可能的解決方案包括使用現(xiàn)代“可信執(zhí)行環(huán)境”,如因特爾SGX以及ARM TrustZone。對于因特爾的SGX技術來說,即使應用程序、操作系統(tǒng)、BIOS或VMM受到威脅,私鑰也是安全的。
此外,最近的一份白皮書揭示了它在零知識密碼學方面的創(chuàng)新:ZK-STARKs(零知識可擴展透明知識理論,Zero-Knowledge Scalable Transparent ARguments of Knowledge)。
根據(jù)zk-STARK白皮書,zk-STARK是第一個在不依賴任何信任設置的情況下實現(xiàn)區(qū)塊鏈驗證的系統(tǒng),隨著計算數(shù)據(jù)的增加,計算速度呈指數(shù)級增加。
它不依賴于公鑰加密系統(tǒng),更簡單的假設使其在理論上更加安全,因為它唯一的加密假設是Hash散列函數(shù)(例如SHA2)是不可預測的。
不可否認的是,零知識證明和zk-S(T|N)ARK技術的測試和采用都將需要一定的時間。但是對于區(qū)塊鏈底層開發(fā)平臺來說,如何兼顧性能和安全性是至關重要的。也許只有零知識證明等密碼學技術被更多應用的時候,區(qū)塊鏈這項技術才能被更好地推動。