如果只是為了回答標(biāo)題問題,兩個字就可以:不是。
但還是想順便說說,零知識證明(ZKP)究竟是什么。
雖然零知識證明和零信任這兩個詞,都帶有“零”,都與“信任”有關(guān),但并不是一回事。兩者本質(zhì)上都要增強「信任」,但在增強「信任」的過程中,零知識證明強調(diào)不泄露知識;零信任強調(diào)不要過度授權(quán)。簡單說,零知識是為了隱藏知識;零信任是為了控制信任。關(guān)于零信任架構(gòu)可參考《零信任架構(gòu)》NIST標(biāo)準(zhǔn)草案。
零知識證明解決了信任與隱私的矛盾:既通過「證明」提升「信任」,又通過「零知識」保護「隱私」。是兩全其美的方案。
本文更想表達(dá)的觀點其實是:探索零知識證明的過程,可以探索到安全的本質(zhì)。
以筆者目前認(rèn)知,安全之終極定義,不是啟發(fā)式的CIA三性,而是采用形式化驗證的可證明安全——上帝(“模擬者”)與科學(xué)(數(shù)學(xué)、計算復(fù)雜度)完美結(jié)合的推演過程。
01零知識證明的定義
零知識證明(ZKP,Zero-Knowledge Proof)的定義為:證明者(prover)能夠在不向驗證者(verifier)提供任何有用信息的情況下,使驗證者(verifier)相信某個論斷是正確的。
根據(jù)定義,零知識證明具有以下三個重要性質(zhì):
完備性(Completeness):
只要證明者擁有相應(yīng)的知識,那么就能通過驗證者的驗證,即證明者有足夠大的概率使驗證者確信。
(關(guān)于這里提到的“概率”,詳見后面的“色盲游戲”)
可靠性(Soundness):
如果證明者沒有相應(yīng)的知識,則無法通過驗證者的驗證,即證明者欺騙驗證者的概率可以忽略。
零知識性(Zero-Knowledge):
證明者在交互過程中僅向驗證者透露是否擁有相應(yīng)知識的陳述,不會泄露任何關(guān)于知識的額外信息。
從定義中,還可以提取到兩個關(guān)鍵詞:“不泄露信息”+“證明論斷有效”。再濃縮一下就是:隱藏+證明。
所以,零知識證明的核心目的是:隱藏并證明需要它隱藏的各類秘密。(感覺很矛盾是吧)
02零知識證明的源頭
零知識證明是1984年由Goldwasser、Micali、Rackoff三個人提出,論文題目是《The Knowledge Complextiy of Interactive Proof Systems》(《交互式證明系統(tǒng)中的知識復(fù)雜性》)。
從上圖的左上角可以看到,這篇論文其實發(fā)表在1989年。原因在于這篇論文的思想太過超前,以至于從1984年寫出初稿到1989年正式被采納發(fā)表,經(jīng)歷了整整五年時間。正是由于零知識證明這項開創(chuàng)性工作,Goldwasser和Micali兩人在2012年分享了圖靈獎——計算機領(lǐng)域最高獎項,也有“計算機界的諾貝爾獎”之稱。
03零知識證明的核心價值:消滅可信第三方
當(dāng)互聯(lián)?電?商務(wù)和在線交易蓬勃發(fā)展到今天,可信第三方(TTP,Trusted Third Party)幾乎不可或缺。但大家體會不到的事實是,可信第三方引入了巨大的「信任成本」。對第三方的過度信任,會帶來嚴(yán)重的「隱私泄露」、「單點失效」、「個?信息濫?」等問題。雖然學(xué)術(shù)界也提出“半可信第三方”(Semi-trusted Third Party)以放寬條件,但是”半可信” 仍不解決根本問題。根本問題是能否取消第三方。
那么,如果取消了可信第三方,還能保證交易的公平性嗎?想象?下這個交易場景:?個買家拎著現(xiàn)?箱?,另?個賣家也拎著?個箱?,裝著某種貴重貨物。在電影中的情節(jié)?,買賣雙?會坐在?個桌?兩側(cè),雙?倒數(shù)3-2-1,然后同時把箱?推給對?。當(dāng)然雙?最好都帶武器,防?對?耍賴。除了買家、賣家,并沒有任何第三?在場,兩?也互不信任。容易理解,任何??都不愿先出?,把??的箱?交給對?,因為擔(dān)心對?拿到箱?后?即跑路,導(dǎo)致自己錢貨兩空的結(jié)局。
時間走到2008年,?特幣橫空出世,中本聰給出了?種天才設(shè)計:在?個可以?任何準(zhǔn)?許可的P2P?絡(luò)中,采取區(qū)塊鏈技術(shù),以?種?常公平的?式進?去中心化記賬。
我們可以從另?個?度來理解中本聰?shù)膭?chuàng)新:比特幣實現(xiàn)了?種分布式協(xié)議,它以去中心化的方式,「模擬」出了一個「虛擬」的「可信第三?」。
而對于零知識證明也可以這樣理解:零知識證明實現(xiàn)了一類密碼學(xué)理論技術(shù),它基于一些安全假設(shè),「模擬」出了?個虛擬的可信第三方。
可見,「零知識證明」的一個重要作用是消滅可信第三方。換句話說,零知識證明提供的「信任」,能夠代替一個「可信第三方」。
需要注意的是:「零知識證明」取代的并非是「第三方」,而是「可信第三方」。
04零知識證明的經(jīng)典示例:色盲游戲
零知識證明背后的邏輯并不復(fù)雜。下面給出交互式零知識證明的經(jīng)典示例——色盲游戲,以幫助理解零知識證明的概念。詳見參考資料[1]。
色盲游戲:
參與者:Alice是色盲,Bob不是色盲。
Bob手上有兩個大小、形狀完全一樣的球,但顏色不同:一個藍(lán)色,另一個紅色。
由于Alice是色盲,所以Alice無法分辨這兩個球是否是一樣的。
而Bob需要向Alice證明這兩個球是不一樣的。
在這個游戲中:
Alice被稱為驗證者:他需要驗證Bob的陳述正確與否;
Bob被稱為證明者:他需要證明自己的陳述(存在兩個顏色不一樣的球)。
采取零知識證明方式:Bob需要在Alice不能獲知兩個球的顏色的情況下,向Alice證明這兩個球的顏色是不一樣的這個事實,這與零知識證明的定義是相符合的。
零知識證明方法如下:
Alice當(dāng)著Bob的面拿起兩個球,左手拿藍(lán)球,右手拿紅球(當(dāng)然,Alice并不知道拿的是籃球還是紅球,因為她是色盲);
Alice然后將雙手放到背后,這樣Bob就看不到Alice手上的球了;
Alice在背后隨機交換左右手上的球,并在心里默默記住自己的交換方式;
交換完成后,Alice將手伸出,并詢問Bob“兩個球是否交換過位置?”;
如果Bob能看到球上的顏色,那么每次Alice換過球的位置后,Bob都能正確回答出Alice的問題。
分析推理過程如下:
第一次:假設(shè)Alice確實交換了兩個手中的球。
如果Bob回答對了,Alice仍然不會完全相信Bob可以區(qū)分這兩個球的顏色,因為Bob有50%的概率蒙對;
所以,即使Bob回答對了,Alice還要進行第二次測試;
如果Bob回答錯了,那么Alice可以肯定Bob不能區(qū)分兩個球的顏色。此項測試就可以終止了。
第二次:假設(shè)這一次Alice并沒有交換兩個手中球的位置,然后Alice問Bob是否交換了球的位置。
如果Bob回答對了,那么Alice有75%的概率相信Bob可以區(qū)分兩個球的顏色;
當(dāng)然,Alice還可以進行第三次測試;
如果Bob回答錯了,那么Alice可以肯定Bob不能區(qū)分兩個球的顏色。
此項測試就此終止。
下圖給出了上述情況的概率樹:
概率計算結(jié)果如下:
第一次Bob回答正確時,Alice可以說Bob陳述的斷言為真的概率為50%;
如果Bob第二次又回答正確,那么Alice可以說Bob陳述為真的概率達(dá)75%;
如果第三次又正確,概率將達(dá)到87.5%;……
如果連續(xù)n次Bob都通過了測試,則Alice以1-(1/2)^n 的概率認(rèn)為 Bob 說的是真的,這兩個球的確是有紅藍(lán)兩種顏色。
這個示例中的零知識證明,是一種基于概率的驗證方式(即概率證明,而非確定性證明),驗證者(verifier)基于一定的隨機性向證明者(prover)提出問題,如果證明者都能給出正確回答,則說明證明者大概率擁有他所聲稱的“知識”。
看看這個示例是如何滿足零知識證明的定義中的三性:
完備性:如果Bob擁有分辨球顏色的知識,則Bob每次都會正確回答。
可靠性:如果Bob不具備分辨球顏色的知識,則Bob無法總是回答正確。
零知識性:直到最后,Alice也無法得知兩球的具體顏色,因為Bob從未透露這個信息。
01信任的產(chǎn)生機理
零知識證明是怎么「憑空產(chǎn)生了信任」?
零知識證明的信任,基于比較客觀的理論:
一類是基礎(chǔ)理論:
如「數(shù)論與代數(shù)」、「數(shù)理邏輯」、「計算理論」等;
另一類是安全假設(shè):
如「離散對數(shù)難題」等。
如果我們信任這些基礎(chǔ)理論(數(shù)學(xué)、邏輯),也信任安全假設(shè)沒有被攻破,那么我們確實可以得出下面的結(jié)論:零知識證明實現(xiàn)了一類密碼學(xué)理論技術(shù),它基于一些安全假設(shè),「模擬」出了?個虛擬的可信第三方。
2016年《經(jīng)濟學(xué)人》提出「區(qū)塊鏈?zhǔn)切湃螜C器」。仔細(xì)思考信任的推導(dǎo)機制,可以發(fā)現(xiàn):
區(qū)塊鏈:解決的是「分布式計算的信任」;
零知識證明:解決的是「數(shù)據(jù)的信任」;
形式化驗證:解決的是「邏輯的信任」。
上述三點:邏輯 <-> 計算 <-> 數(shù)據(jù),共同構(gòu)成一個閉環(huán),也許才能真正實現(xiàn)「信任機器」這一構(gòu)想。
總之,任何「信任」都需要基于某些信任基礎(chǔ)(如可信計算基(Trusted Computing Base)),任何「安全」都有安全性假設(shè)。
信任的最后一環(huán)是「形式化驗證」。形式化驗證實際上是為邏輯、流程或業(yè)務(wù)進行形式化建模,你可以理解為用一種數(shù)學(xué)語言進行描述,模型就是一些數(shù)學(xué)概念(或數(shù)學(xué)對象),比如集合、代數(shù)、范疇等等。然后所有的形式化驗證都在用「顯式」的或「隱式」的方式「嚴(yán)格證明」某個結(jié)論(或者叫做定理)。
而理解零知識證明理論的核心,是理解「模擬」這個概念。上面我們提到了兩個「模擬」:一個是區(qū)塊鏈,另一個是零知識證明。再來回顧一下:
比特幣實現(xiàn)了?種分布式協(xié)議,它以去中心化的方式,「模擬」出了一個「虛擬」的「可信第三方」。
零知識證明實現(xiàn)了一類密碼學(xué)理論技術(shù),它基于一些安全假設(shè),「模擬」出了?個虛擬的可信第三方。
他們之所以可信,是因為他們能夠「模擬出可信第三方」。這個模擬過程都是可以形式化的,并且是可證明的。如今,模擬(Simulation)和安全性證明已是密碼學(xué)界的共識,也是基本的形式化工具,沒有經(jīng)過證明/驗證的模擬是無法讓大家接受的。
理論上,所有客觀標(biāo)準(zhǔn)都能進行驗證,大到一個安全協(xié)議,小到一行代碼,都能采用形式化驗證的方法。恰好筆者曾經(jīng)研究過可證明安全,從那些密碼學(xué)安全性證明中體會到了「模擬」與「可證明安全」中所表達(dá)出的神奇理念。從某種程度上,可以領(lǐng)會到「安全」之真諦。
如果對模擬、安全、不可區(qū)分性等形式化驗證的方法感興趣,請參考資料[6],它將帶你到另一個存在「上帝」的「平行世界」,橫跨科學(xué)與哲學(xué)問題。
02證明?vs.?驗證
零知識證明的實現(xiàn)可以通過三段旅程來描述:(詳見參考資料[3])
隱藏秘密之旅:單向功能;
證明秘密之旅:同態(tài)映射;
構(gòu)建通用零知識證明之旅:證明NPC問題的多項式。
「零知識證明」中的「證明」與其定義中的「驗證」是何關(guān)系?這涉及到證明存在的意義。所有的證明,都體現(xiàn)了「證明」與「驗證」的「不對稱性」。
證明:可能是一個非常耗費算力,或者腦力的活動,無論是耗時幾百年的「費馬大定理」,還是比特幣中的 POW 證明,這些證明都凝結(jié)了在尋找證明過程中所消耗的能量。
證明過程可能是超乎尋常的復(fù)雜,偶爾需要天才橫空出世。
驗證:一定(或者應(yīng)該)是一個非常簡單的、機械的、在有效時間內(nèi)(多項式復(fù)雜度)且能終止的活動。
某種意義上,「證明」與「驗證」的這種不對稱性,真正體現(xiàn)了證明的意義,展示了零知識證明的價值。關(guān)于這一部分,詳見參考資料[2]。
03信任 vs. 隱私
從根本上講,信任是個好東西。我們創(chuàng)建了信用體系,可以向我們信任的人和組織提供信貸;依靠名聲、信譽記錄等,也能夠與我們不信任的人開展業(yè)務(wù)。
但是,信任通常是建立在犧牲隱私的基礎(chǔ)之上的。為了互相信任,通常必須放棄一些隱私。而且信任通常與你的身份信息密切相關(guān)。
而零知識證明恰恰是一種「兩全其美」的方案:既通過「證明」提升「信任」,又通過「零知識」保護「隱私」。
04匿名 vs. 假名
對于隱私的理解,其實分兩種:
第一種是匿名(Anonymous),意思是用戶不用透露任何和自己相關(guān)的信息,好比是學(xué)校的表白墻,你永遠(yuǎn)無法知道到底是誰寫了上去,反正字就是寫在了上面。
第二種是假名(Pseudonymous),意思是用戶通過自己創(chuàng)造的假名來發(fā)表信息,好比是貼吧,如果你不了解這個用戶,你無法建立網(wǎng)名到實名的聯(lián)系,你也就不知道發(fā)帖的人是誰。
目前,大多數(shù)當(dāng)前的區(qū)塊鏈技術(shù)只是假名。如比特幣中每個用戶都會隨機生成自己的公鑰(假名)地址來收款。這種公鑰地址其實是一種假名,一旦在哪里實名制認(rèn)證過,就可以把網(wǎng)名和實名關(guān)聯(lián)起來,毫無隱私可言。
如果黑客或政府可以將真實姓名與網(wǎng)絡(luò)地址相關(guān)聯(lián),那么可以通過鏈接區(qū)塊鏈交易追溯到用戶交易時的身份。盡管區(qū)塊鏈被贊譽為完美安全方案,但知情人士都知道這種弱點。事實上,世界各地的執(zhí)法機構(gòu)一直在利用這一漏洞來抓住犯罪分子。
這就好比有人用網(wǎng)名在貼吧上發(fā)帖子噴人,然后被人用密保找到了手機號,再用手機號找到了注冊的實名,從而被人肉是一個道理。
零知識證明可以彌補這種匿名缺陷。利用零知識證明創(chuàng)建信任的社會,是一個更加注重個人隱私的社會。它會把隱私控制權(quán)真正轉(zhuǎn)移到消費者手上,而不是將其交給政府或組織等。
零知識證明定義中有兩個關(guān)鍵詞:“不泄露信息”、“證明論斷有效”。基于這兩個特點,直接擴展出零知識證明在區(qū)塊鏈上的兩大應(yīng)用場景:(詳見參考資料[1])
隱私:在隱私場景中,我們可以借助零知識證明的“不泄露信息”特性,在不泄漏交易細(xì)節(jié)(接收方、發(fā)送方、交易余額)的情況下,證明區(qū)塊鏈上的資產(chǎn)轉(zhuǎn)移是有效的。
擴容:在擴容場景中,不太關(guān)注零知識證明技術(shù)的“不泄露信息”這個特性,更加關(guān)注“證明論斷有效”這個特性。由于鏈上資源是有限的,所以我們需要把大量的計算遷移到鏈下進行,因此需要有一種技術(shù)能夠證明這些在鏈下發(fā)生的動作是可信的,零知識證明正好可以幫助我們做鏈下可信計算的背書。
端到端的通訊加密:用戶之間可以互相發(fā)消息,但是不用擔(dān)心服務(wù)器拿到所有的消息記錄,同時消息也可以按照服務(wù)器的要求,出示相應(yīng)的零知識證明,比如消息的來源、發(fā)送的目的地。
身份認(rèn)證:用戶可以向網(wǎng)站證明,他擁有私鑰,或者知道某個只要用戶自己才知道的秘密答案,而網(wǎng)站并不需要知道這個私鑰和秘密,但是網(wǎng)站可以通過驗證這個零知識證明, 從而確認(rèn)用戶的身份。
去中心化存儲:服務(wù)器可以向用戶證明他們的數(shù)據(jù)被妥善保存,并且不泄露數(shù)據(jù)的任何內(nèi)容。
信用記錄:信用記錄是另一個可以充分發(fā)揮零知識證明優(yōu)勢的領(lǐng)域,用戶可以有選擇性的向另一方出示自己的信用記錄,同時證明信用記錄的真實性。
更多的例子,可以是任何形式的數(shù)據(jù)共享、數(shù)據(jù)處理、數(shù)據(jù)傳輸。
2019年7月,美國國防部高級研究計劃局(DARPA)發(fā)布了一份加密驗證和評估信息安全保障(SIEVE)項目的廣泛機構(gòu)公告(HR001119S0076)。該項目尋求在零知識證明方面最先進的技術(shù),目標(biāo)是在不泄露秘密信息的前提下驗證軍事能力。該項目關(guān)注的是網(wǎng)絡(luò)安全和網(wǎng)絡(luò)空間作戰(zhàn)方面用于驗證軍事能力的零知識證明,包括概率和不確定分支條件在內(nèi)的大型復(fù)雜的證明。項目研究分為三個技術(shù)領(lǐng)域:構(gòu)建有用的零知識語句;構(gòu)建高效的零知識證明生成編譯器;后量子零知識研究。
[1]《零知識證明介紹》,吳壽鶴;
[2]《初識「零知識」與「證明」》;
[3]《一文讀懂零知識證明背后的簡單邏輯》,李畫;
[4]《zkPoD:區(qū)塊鏈,零知識證明與形式化驗證,實現(xiàn)無中介、零信任的公平交易》,郭宇;
[5]《淺談零知識證明:背景與起源》,東澤;
[6]《從「模擬」理解零知識證明:平行宇宙與時光倒流》,郭宇;
作者:柯善學(xué)整編 來源:公眾號?網(wǎng)絡(luò)安全觀
來源:FreeBuf.COM