- 區塊鏈應用開發指南:業務場景剖析與實戰
- 熊麗兵 董一凡等
- 1043字
- 2022-07-28 20:18:01
2.3.5 零知識證明和Zcash
“零知識證明”(參見本書第3章)簡單來說就是:證明者能夠在不向驗證者提供任何有用的信息的情況下,使驗證者相信某個論斷是正確的。
舉個簡單的例子,A要向B證明自己擁有某個房間的鑰匙,假設該房間只能用鑰匙打開鎖,而其他任何方法都打不開。這時有兩個方法可以解決:
(1)A把鑰匙出示給B,B用這把鑰匙打開該房間的鎖,從而證明A擁有該房間的正確的鑰匙。
(2)B確定該房間內有某一物體,A用自己擁有的鑰匙打開該房間的門,然后把物體拿出來出示給B,從而證明自己確實擁有該房間的鑰匙。
第二種方法就屬于零知識證明的范疇。該方法的好處在于,在整個證明的過程中,B始終不能看到鑰匙的樣子,從而避免了鑰匙的泄露。
零知識證明過程有兩個參與方:一方叫證明者,一方叫驗證者。證明者掌握著某個秘密,他想讓驗證者相信他掌握著秘密,但是又不想泄露這個秘密給驗證者。雙方按照一個協議,通過一系列交互,最終驗證者會得出一個明確的結論,即證明者有沒有掌握這個秘密。零知識證明是一種更加安全的信息驗證或者身份驗證機制。安全性和隱私性就是零知識證明的價值所在。
零知識證明的三個基本特性
(1)完備性。如果證明方和驗證方都是誠實的,并遵循證明過程的每一步進行正確的計算,那么這個證明一定是成功的,驗證方一定能夠接受證明方。
(2)合理性。沒有人能夠假冒證明方,使這個證明成功。
(3)零知識性。證明過程執行完之后,驗證方只獲得了“證明方擁有這個知識”這條信息,而沒有獲得關于這個知識本身的任何一點信息。
零知識證明的典范——Zcash
在比特幣網絡中,用戶需要將交易明文廣播給所有礦工,由他們來校驗交易的合法性。但是有些情況下,基于隱私的考慮,交易的具體內容希望不對外公開。解決這個問題的關鍵思路是:校驗一個事件是否正確,是否需要對驗證者重現整個事件呢?
我們拿比特幣舉個例子,一筆轉賬交易是否具備合法性,其實只要證明三件事:
(1)錢是否屬于發送交易的一方。
(2)接收者收到的總額等于發送者發送的金額之和(可能轉賬有多個來源)。
(3)發送者的所有參與轉賬賬戶上多個對應的轉賬金額(金額總和等于接受者收到的總額)確實被正確銷毀 。
整個證明過程中,礦工其實并不關心具體的交易金額、發送者具體地址、接受者具體地址,礦工只關心系統賬本上的錢是不是絕對守恒的。
Zcash項目就是利用了零知識證明實現了用戶的交易內容隱私化。由于零知識證明在近兩年的迅速發展,掌握和理解它的概念變得愈發重要,所以本書第3章將會對其進行更全面的分析講解,這里只要有個初步認識就可以。