什麼是零知識證明 (Zero Knowledge Proof)?

有看到天上的屋嗎發表於2022-03-10

什麼是零知識證明 (Zero Knowledge Proof)?


零知識證明可以讓一方 (證明方) 在不透露任何實際資訊的情況下向另一方 (驗證方) 證明某保密資訊或宣告是真的。


術語 “零知識“ 本身就表明了不需要揭露任何資訊,證明方就可以向驗證方證實 ta 所知道的保密資訊以及 ta 的宣告都是真的。


那為什麼需要零知識證明呢?當我們不想披露任何資訊,但需要說服其他人相信我們知道的保密資訊和提出的宣告是真的時候。


目前有兩種零知識證明:


1.互動式的 (Interactive)


2.非互動式的 (Non Interactive)


舉例說明互動式的零知識證明


假設你需要通過 ZKP (零知識證明) 證明你的年齡大於或等於18歲,但不揭露具體年齡。我們需要第三方機構為你的年齡擔保,具體如下:


第三方說:”已接收您出生證明的影印件,我們已經得知您的年齡為 21 歲。現在為您提供一串數字密碼,請將它儲存到保密與安全的地方。稍後您會用到它。“


”你持有的那串數字密碼將會被雜湊演算法處理 22 次,然後得出一個最終年齡雜湊程式碼給你 (沒錯,處理次數必須為年齡 +1,才能使得整個操作行得通)。也就是說,你拿到那串數字密碼之後,會有 22 次雜湊處理過程才能獲得最終的年齡雜湊程式碼。“


“我們將您的姓名、時間戳與最終年齡雜湊程式碼一起打包。這個證明包將提供給他人驗證。“


好了,那麼當你想要向其他人證明你的年齡超過 18 歲時,你只需要證明從你拿到數字密碼到最終年齡雜湊程式碼之間的雜湊演算法處理次數大於 18 就可以了。


那麼怎麼證明呢?你只需要向他人展示最後的 18 次雜湊演算法處理記錄。你需要自己進行前 4 次雜湊演算法處理 (對數字密碼進行雜湊演算法處理 4 次),然後將結果提供給其他人:第四次雜湊值。


他們會對第四次雜湊值再處理18次 (現在對你的數字密碼總共進行了 22 次雜湊演算法處理),最終他們能夠得出最終年齡雜湊程式碼並且使用證明包對它進行驗證。


實際上,驗證者是在說:"傳送我們一個值,我們會對其進行 18 次雜湊演算法處理,然後這個雜湊值將與你提供的年齡雜湊程式碼進行對比。" 如果你低於18歲,最終年齡雜湊程式碼的雜湊演算法處理次數就沒有18次,我們對你提供的那個初始雜湊值進行 18 次雜湊演算法處理後,就會與最終年齡雜湊程式碼不一樣。


但是這種互動式方法有一些侷限:


1.每次驗證都需要進行整個冗長的過程。而上述例子只是簡單的雜湊演算法處理,想象一下如果需要對實際加密演算法進行計算會如何。


2.證明方與驗證方都需要同時在場,不管是線上還是面對面。


接下來是非互動式的零知識證明


1986 年,Fiat 與 Shamir 發明了 Fiat-Shamir heuristic (啟發式) 演算法,這是第一個基於互動式零知識證明來構建數字簽名的演算法。


Fiat-Shamir heuristic 演算法通過使用承諾方案 (Commitment Scheme) 可變為非互動式零知識證明。這就是所謂的 ZK-SNARKs,也可以稱為簡潔的非互動式零知識證明 (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge)。


要使 Fiat-Shamir Heuristic 演算法更加強大,需要使用承諾 (commitment)。承諾方案在許多IC外匯icmarketsvip.com加密協議中都是基本組成部分。承諾方案允許承諾者釋出一個值 (即承諾),然後將它們繫結到某訊息上而不披露它們 (隱藏)。


Pederson 承諾與 Polynomial 承諾是 ZK 證明使用的兩個最著名承諾方案。


但大約到 2013 年,ZK-SNARKs 才實際可行和實現,並真正用於應用中。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69995368/viewspace-2869223/,如需轉載,請註明出處,否則將追究法律責任。

相關文章