零知識證明 – 不用說出秘密,卻可以證明真實性?
內容目錄
區塊鏈是一種分散式的資料庫系統,具有透明性、不可篡改性等特點,使得它可以用於各種應用場景。由於區塊鏈上的交易是公開的,任何人都可能透過相關交易資訊,追查到一些敏感或機密的資訊。我們如何在保障隱私的同時,也確認交易資訊正確呢?為了解決這些問題,其中一個被廣泛採用的方式即是本文要提到的主角-零知識證明。
在這篇文章中,我們將介紹甚麼是零知識證明?它是怎麼運作的?以及一些應用場景。
什麼是零知識證明?
零知識證明 ( Zero-knowledge proof, ZKP ) 是一種證明方法,在不透露資訊本身內容的情況下,驗證其內容的真偽。
舉例來說,假設小拓想要販賣某個秘密派對的入場密語,要想讓客人相信他真的知道密語,最直接的驗證方式就是告訴客人實際密語是什麼,但這樣客人就會知道密語,而失去販賣的價值了。而零知識證明則是透過間接證明的方式,讓你可以在不告訴客人密語的情況下,證明自己真的知道密語。
零知識證明是怎麼運作的?
在零知識證明中,分為證明者 ( 即前段情境中的小拓 ) 以及驗證者 ( 即前段情境中的客人 )。驗證者會要求證明者做一些只有在知道某個秘密或答案的情況下才能完成的事,在證明者真的知道內容的情況下,那麼完成他們應該不算難事;但若是證明者不知道內容,那麼他只能瞎猜,就很難通過驗證者的測試。
繼續以前面的例子為例,客人與小拓一同到了秘密派對的舉辦地點。由於派對在一座山上的別墅中舉辦,分別有 A、B 兩條路可以通向別墅,但如果要從 A 到 B 或是 B 到 A,都需要穿過別墅才行,但只有知道密語的人才能穿過別墅 ( 如下圖示 )。
於是,小拓與客人協議以以下方式證明小拓是否知道密語:
在客人不知情的狀況下,小拓先選擇一條路上山 ( 如下圖示 )。
然後再請客人從 A、B 中選一條路,小拓再由那條路下山 ( 如例圖 C )。
如果小拓知道密語,那無論客人選了哪條路,他都可以出現在客人選的路裡 ( 如下圖示)。
但如果小拓不知道密語,如果剛好小拓跟客人所選的是一樣的,那麼他還是能出現在客人所選的路;但如果小拓先選了 A ,客人要他從 B 下來,由於小拓不知道密語無法穿越別墅,那麼就無法出現在客人所選的路中 ( 如下圖示 )。
這樣的測試反覆多做幾次,如果小拓可以每次都從正確的路出現在客人面前,就可以確認他真的知道密語。
以上故事說明了零知識證明,並展示了它一般被認為應該要具備的三個特性 – 完備性、健全性和零知識性:
-
- 完整性(complete):這個意思是如果證明者提供的內容是正確的 ( 真的知道密語 ),在遵守協議的情況下,證明者將能完成所有測試。
以小拓與客人間的協議來說,也就是小拓如果知道密語,那麼他一定能通過測試。 - 健全性(sound):如果證明者提供的內容是錯誤的 ( 不知道密語 ),只能有很低的機率通過測試。
在小拓與客人的協議中,如果小拓不知道密語,雖然每次都有一半的機率 ( 50 % ) 回答正確,但假設重複這個試驗 10 次,完全正確的機率就只剩 1 / 1024 ,客人就可以很容易地知道小拓不知道密語。 - 零知識(zero-knowledge):驗證者只能從測驗中知道驗證結果的真偽,而不會知道其他資訊 ( 例如密語或小拓一開始選擇哪條路上山等等 )。
在小拓與客人的協議中,客人除了不會知道密語的內容外,透過驗證客人只能知道小拓是否知道密語,他不會也不必知道如小拓的密語來源等其他額外資訊。
- 完整性(complete):這個意思是如果證明者提供的內容是正確的 ( 真的知道密語 ),在遵守協議的情況下,證明者將能完成所有測試。
不過,由於零知識證明通常是由數學或密碼學的公式或語言,所構成的程式或協議,也有許多不同種類的零知識證明。本文只是以生活化的例子,來幫助我們更好的理解零知識證明基礎概念,讓我們可以更好地認識零知識證明的運作邏輯,也能比較容易知道,為什麼零知識證明可以在下一段介紹的生活應用中發揮作用!
零知識證明可以運用在哪裡?
區塊鏈
如同我們在本篇文章一開始提到的,由於區塊鏈上的交易是可以被大眾驗證的,所以如何讓用戶在保有隱私的情況下進行驗證交易,即是一個問題。而零知識證明即提供了一個解決方案。例如,加密貨幣 Zcash 就使用了零知識證明的方法 ( zero-knowledge Succinct Non-interactive Argument of Knowledge, zk-SNARKs ),來隱藏交易的發送者、接收者和金額。 這樣可以保護用戶的身份和財產,也可以防止交易被追蹤或分析。
金融產業
零知識證明可以讓金融服務提供者和客戶之間進行更安全和高效的資訊交換。例如,荷蘭的 ING 就採用了稱為「零洩密範圍證明 ( Zero-Knowledge Range Proof, ZKRP )」的零知識證明方法,讓申請房貸的客戶能證明自己的收入落在可被接受貸款的某區間,而不需要告訴它們確切的收入數字。
身份驗證
零知識證明可以讓用戶在線上驗證自己的身分或屬性,而不需要提供過多的個人資料。 例如,通過指紋等生物特徵與密碼等資訊,向需求方證明自己確實達成某種如年齡等條件的要求,而不像現在許多身分證明文件在驗證特定資訊時,卻間接透漏了其他個人資訊。這樣可以減少個資洩漏的風險,也可以提高人們對於自身個資的控制權和信任度。
網路投票
零知識證明可以使網路投票系統更加安全和公正,讓選民可以在不暴露自己的身份或選擇的情況下,驗證自己有投票的權利和義務。
例如,人們可以透過零知識證明的方式向網路投票系統證明其具有投票資格,而不用再提供其他過多的明文件;並搭配區塊鏈系統,透過零知識證明向系統證明已經投過票了,而無須登記領票或註記自己的姓名。如此,系統就可以在保障每個投票人民的隱私的情況下,防止選票被竄改或重複計算。
結語
零知識證明能在保有隱私的情況下驗證資訊的正確性,但我們仍要注意到,雖然證明者在驗證過程中說謊的機率小到可以忽略,但仍無法保證 100% 正確。
此外,就像小拓需要應客人要求多次進行測試,某些零知識證明協議會要求驗證者與證明者間進行大量的互動來進行確認,這可能會消耗大量的計算資源,而限制了零知識證明的應用發展。
但無論如何,零知識證明都提供了一個可以保障隱私卻又能證明資訊正確性的解決方案,在保障用戶權益與驗證資訊正確性之間尋求平衡。可以預期的,零知識證明將在建立更安全、更隱密且更有效率的未來社會中,發揮重要功能。
延伸閱讀:
( 新手入門系列 2 ) – 區塊鏈「礦工」挖的是什麼「礦」? – 共識機制與挖礦介紹
* 本文內容不構成任何形式之投資建議
任何投資都有風險,請您審慎研究與考慮後再決定!