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