原作者簡介:
作為NuLink Technology的研究員,Rookie是一位激情的創(chuàng)新者,他專注于密碼學(xué)和區(qū)塊鏈技術(shù)。
什么是零知識?
我一直致力于密碼學(xué)和隱私保護(hù)的研究。
多年來,這個領(lǐng)域一直有一個有趣的話題,那就是ZKP(Zero Knowledge Proof,零知識證明)。最近它在社區(qū)中引起了很多關(guān)注,因為有很多有趣的場景可以討論。
例如,Zcash。我想用一系列的文章來介紹這個超級有趣的話題。
今天將是第一篇文章。通過一個簡單的故事,我將介紹什么是零知識證明和它的特性。
在后面的文章中,我將給出ZKP的嚴(yán)格形式化定義和NP語言零知識證明的通用理論構(gòu)造。
最后,我將介紹這一技術(shù)近年來的發(fā)展、分類、代表方案和比較。希望你會喜歡這一系列的文章。
NuLink網(wǎng)絡(luò)是一個給保護(hù)隱私的應(yīng)用程序開發(fā)人員實施最佳實踐和最佳安全和隱私的去中心化的解決方案。NuLink平臺提供端點加密和加密訪問控制。敏感的用戶數(shù)據(jù)可以從任何用戶平臺安全地共享到云端或分布式存儲,并通過代理重加密或?qū)傩约用茏詣邮谟鑼υ摂?shù)據(jù)的訪問。在這個過程中,有必要確保數(shù)據(jù)的可用性。這里的可用性從字面上看是指數(shù)據(jù)是終端用戶想要的,可以使用的。有一種加密技術(shù)可以幫助我們解決這個問題,叫做零知識證明。顧名思義,零知識證明可以讓你充分證明你是某些數(shù)據(jù)的所有者,而不會泄露信息,也就是說,外界對你的數(shù)據(jù)(“知識”)是“零”了解的。
一個簡單的例子,“P(Prover,證明者)如何在不透露答案的情況下證明他知道數(shù)獨游戲的答案?”。方法如下:P將答案按順序記錄在一組卡片上,并將其翻面(記錄答案的那一面朝下)。V(Verifier,驗證者)可以選擇每次按行或列或塊(3*3的區(qū)域)拿起卡片,然后翻開驗證(驗證之前先將卡片的順序打亂,否則數(shù)獨的答案就會泄露出去,不再構(gòu)成“零知識”),每堆卡片都是1–9。假設(shè)這種行為重復(fù)100次,如果所有的答案都是正確的,那么P確實知道解決方案。否則,P需要猜測V在每一次行為中的驗證規(guī)則。那么他的答案就會錯幾次。整個證明過程并不能幫助V得到答案(V仍然不知道數(shù)獨要如何解,因為他每次只能拿起1行或1列或1塊)。這就是一個零知識證明的例子。接下來,我們將給出一個關(guān)于證明系統(tǒng)(proof system)和零知識屬性的非正式定義。粗略地說,一個合理的證明系統(tǒng)應(yīng)該滿足以下兩個屬性:
完備性(completeness):如果證明者P和驗證者V都誠實地執(zhí)行證明系統(tǒng)的指令,那么驗證者V將以高概率接受所有真實信息的證明。。
健全性(soundness):對于有任何錯誤信息的證明者P,驗證者V以高概率拒絕它。
從安全的角度來看,證明系統(tǒng)的屬性只涉及保護(hù)驗證者V免受欺騙的問題。接下來,我們將給出零知識的大致定義,這是一個與證明者P安全有關(guān)的屬性。
零知識(zero knowledge):對于驗證者V來說,在證明結(jié)束時,他不會獲得任何額外的 “知識”:他在證明中觀察到的一切都可以由模擬器模擬出來,無需與驗證者P互動。
很明顯,上述定義并不嚴(yán)謹(jǐn),這只是為了讓讀者快速理解這些概念。為了進(jìn)一步探索ZKP技術(shù),我們需要了解密碼學(xué)中的承諾(commitment)、語言(language)、證明系統(tǒng)、零知識證明系統(tǒng)(zero knowledge proof system)、完備性、健全性和零知識的正式定義。在接下來的文章中,我們將介紹這些定義。模擬者(Simulator)的概念是亮點,這是一個有趣的概念,可以幫助我們定義零知識。