零知識證明(ZKP)
密碼學中,零知識證明(英語:zero-knowledge proof)或零知識協議(zero-knowledge protocol)是一方(證明者)向另一方(檢驗者)證明某命題的方法,特點是過程中除「該命題為真」之事外,不泄露任何信息。因此,可理解成「零泄密證明」[1]。例如,欲向人證明自己擁有某情報,則直接公開該情報即可,但如此則會將該細節亦一併泄露;零知識證明的精粹在於,如何證明自己擁有該情報而不必透露情報內容。這也是零知識證明的難點[2]。
若該命題的證明,需要知悉某秘密方能作出,則檢驗者單憑目睹證明,而未獲悉該秘密,仍無法向第三方證明該命題(即單單轉述不足以證明)。待證的命題中,必定包含證明者宣稱自己知道該秘密,但過程中不能傳達該秘密本身。否則,協議完結時,已給予檢驗者有關命題的額外的信息。此類「知識的零知識證明」是零知識證明的特例,其中待證命題僅有「證明者知道某事」。
零知識證明可以是交互式的,這意味着證明者和驗證者根據某種協議交換消息,也可以是非交互式的,這意味着驗證者被單個證明者消息所信服,不需要其他通信。 在標準模型中,除了 BPP 問題的瑣碎證明之外,需要交互。 在通用隨機字符串和隨機預言機模型中,存在非交互式零知識證明。 Fiat–Shamir 啟發式可用於將某些交互式零知識證明轉換為非交互式證明。
定義 編輯
零知識證明要具備下列三種性質:
- 完備(complete)
- 若所要證之事為真,則誠實(意即依協議行事)的證明者能說服誠實驗證者。
- 健全(sound)
- 若命題為假,則作弊證明者僅得極小機會能說服誠實驗證者該事為真。
- 零知識(zero-knowledge)
- 若命題為真,則驗證者除此之外,過程中沒有得悉任何其他信息。換言之,僅知命題為真(而不知秘密本身)已足以「想像」出一個交互的情境,其中證明者的確知道該秘密。此性質能嚴格定義為:每個驗證者皆有相應的模擬器,輸入欲證事實時,無需求助於證明者,已可輸出一套通信謄本,看似誠實驗證者與證明者的通信記錄。
前兩種性質,更廣義的交互式證明系統亦應具備。第三種性質使該交互證明稱為零知識。
零知識證明不算數學證明,因為尚允許有很少(但非零)概率,令作弊證明者能向驗證者「證明」假命題。該概率稱為可靠度誤差(soundness error)。換言之,零知識證明是概率「證明」,而非決定性。不過,也有技巧將可靠度誤差壓到忽略不計。
零知識的嚴格定義,需要抽象計算模型,如常見的圖靈機。設、、為三部圖靈機。某語言的交互式證明系統為零知識,意思是對任意概率多項式時間(PPT)驗證者,皆有PPT模擬器使得:
其中是與間交互的全記錄。證明者通常假設具無限計算能力(實踐上,常為概率圖靈機)。直觀理解,某交互證明係為零知識,即對任意驗證者,皆存在某高效模擬器(視乎而定),給定任何輸入,可以重現與間的對話。定義中的輔助串,是用作放置任何「前備知識」(包括預知運行時擲得的硬幣結果)。定義推出,不能利用預知串從與的對話中發掘出信息,因為若給予該串,則也同樣可以重現與間的對話。
以上為完美零知識的定義。若將定義中,驗證者的視角(view)與模擬相等之要求,改為僅要求計算上無法分辨,則得到計算零知識的定義。
計算示例 編輯
離散對數 編輯
前段概念適用於較實際的密碼學場景。設小靜欲向阿嚴證明,自己知道某群某指定元素的離散對數。
例如,給定數、素數、生成元,小靜希望證明自己知道某數使,而不泄漏。事實上,知曉之事,本身可用作身份證明,即小靜可藉此證明該值是由她先暗中選某隨機值,再計算,公諸所有潛在的驗證者。如此,若某人證明自己知道,則相當於證明自己即小靜,因為學者相信離散對數很難計算,即其他人無法從倒推出值。
證明協議如下:每輪,小靜預備隨機數,計算,將該值傳予阿嚴。收到後,阿嚴隨機請求下列兩者之一:小靜公開值,或值。單獨看任何一個值,其分佈皆是均勻隨機,所以協議每輪皆不泄露任何機密。
阿嚴可以驗證所得回應。若問,則可以計算,檢查是否等於。若問,則可以計算,而該值應當等於,所以亦驗證值是否滿足該條件。若小靜確實知道值,理應很易回答阿嚴的任一條問題。
若小靜預知阿嚴採用何種盤問,則很易作弊,在不知的情況下,向阿嚴假裝自己知道:若她知道阿嚴將要問,則如常繼續,選,計算,告知阿嚴值;她可以答出值。另一方面,若她知道阿嚴將問,則取隨機一個值,計算,然後發送值予阿嚴(阿嚴會以為該值為值)。當阿嚴要求公開值時,小靜公開,但這足以讓阿嚴驗證結果,因為他計算的值實為,是等於,因為正是小靜一早乘上的逆元而計出。
然而,若有某輪驗證中,阿嚴的問題與小靜預估的有出入,則小靜無法計算出要答的結果(假定該群的離散對數問題難解)。若她揀選並公開,則無法作弊給出服眾的值來通過阿嚴的檢查,因為不知道。又若她揀選值,偽裝成,則要回答公開值的離散對數,但她無法回答,因為該值是由已知值乘出,而非某已知值以為底的冪,所以她不能計出其離散對數
所以,作弊的證明者僅得概率通過某輪驗證。重複足夠多輪,成功作弊的概率可壓到任意小。
撮要 編輯
小靜要證知道值(如其密碼)。
- 小靜與阿嚴約定某素數,及域的乘法生成元。
- 小靜計算,發送予阿嚴。
- 重複以下步驟若干次:
- 小靜選某個均勻隨機數,計算,發送予阿嚴。
- 阿嚴問小靜或,二選其一。若問前者,則阿嚴驗證。若問後者,則他驗證。
之值,可視為的加密。若確為隨機,在至間均勻分佈,則也同樣均勻分佈,所以不會泄漏任何關於的信息(見一次性密碼本)。
大圖的哈密頓環 編輯
下列方案是曼紐爾·布盧姆提出。
此場境中,小靜知道某大圖的哈密頓環。阿嚴知道但不知該環(比如說小靜將該圖打印給阿嚴)。一般相信,找大圖的哈密頓環,在計算上並不可行,因為相應的決定問題已證為NP完全。小靜欲證自己知道該環,但不想泄漏出去,原因可能是阿嚴打算向小靜買,但付款前希望先驗證小靜知道;也可能是全世界只得小靜知道該環,所以小靜向阿嚴證明此事,是為向阿嚴核實自己身份。
小靜為證明自己知道哈密頓環,與阿嚴作若干輪驗證。每輪中:
- 一開始,小靜預備圖,是與同構(即與一樣,但頂點的標籤不同)。若小靜知道的哈密頓環,則因為與間的同構由她揀選,她很易找到中對應的哈密頓環。
- 小靜秘諾。此處可選任意密碼學秘諾機制,甚或直接將的頂點編號,然後對的每條邊,將兩端編號寫在小紙片上,反轉蓋在台面。總之,秘諾目的是使小靜此後無法竄改,但同時不讓阿嚴提早知道的信息。
- 阿嚴隨機問小靜以下兩事之一:給出與間的同構(見圖同構問題);或給出的哈密頓環。
- 若問兩圖的同構,則小靜先展示(將台面全部紙翻開),並給出頂點與頂點的對應表。阿嚴可以驗證該對應關係是否滿足圖同構的條件。
- 若問哈密頓環,則小靜只翻開在的哈密頓環上的紙片。如此,阿嚴已可驗證有哈頓頓環。
秘諾一步必須使阿嚴在第二種情況能驗證該環確實由的邊構成。一種做法是,逐條邊分別秘諾。
完備 編輯
若小靜確知中的哈密頓環,則阿嚴詢問同構時,她很易回答(該同構為她所選),而阿嚴問中的哈密頓環時,她同樣很易回答(有哈密頓環,與間的同構為所她選,所以可以找到中對應的環)。
健全 編輯
若小靜不知哈密頓環,則只能預先猜測阿嚴會問何種問題,相應準備某個與同構的圖,或另一個不相關的哈密頓圖。然而,因為她不知的哈密頓環,所以無法同時做兩件事。於是,若以上驗證重複次,則小靜矇混過關的概率僅得,從而實際意義上,只需合理多輪驗證,已使造假者寸步難行。
零知識 編輯
小靜的回答不泄漏原圖的哈密頓環,因為每一輪,阿嚴只會得悉與的同構,或是的哈密頓環,兩者之一,但他需要對同一個同時得知兩者,才能構造出中的哈密頓環。如此,只要小靜每輪預備一幅不同的圖,就能保密。若小靜不知的哈密頓環,但不知為何已事前得知阿嚴每輪會問的問題,則她可以作弊。例如,若小靜預知阿嚴該輪會問的哈密頓圖,則大可以秘諾一幅與無關的哈密頓圖。與之類似,若小靜預知阿嚴會問同構表,則她可以隨便預備一幅與同構的圖(其中她不知道任何哈密頓圖)。阿嚴根本無需小靜在場,亦可獨自想像出自己將見的場面,因為他清楚自己將會問什麼,將見的僅是一個環(而不顯示圖的其他部分)或一幅與同構的圖,即阿嚴可以自行模擬該協議。因此,阿嚴從每一輪驗證揭露之事,無法得到任何關於哈密頓環的信息。
生活示例 編輯
山洞中,小靜隨機選擇A路或B路,阿嚴則在洞外等候
阿嚴選一個出口
小靜準確出現在阿嚴所選的出口出現
以下有一個熟知的故事,總結零知識證明的若干重要概念。故事最早由Jean-Jacques Quisquater及同事發表於《如何向你的孩子解釋零知識協議》。設有小靜(證明者)和阿嚴(驗證者)兩人。
故事中,小靜發現洞穴中某扇魔法門的開門暗號。洞穴呈環形,入口在一側,對側則有魔法門隔斷。阿嚴想知小靜是否已知該暗號,但小靜很注重私隱,不希望泄露暗號予阿嚴,也不想全世界知道她有暗號之事。
兩人分別將入口左右兩條通道標示為A路、B路。首先,阿嚴在洞口外,待小靜進入洞內。小靜自行選擇行A路或B路,但阿嚴不准窺視小靜所選為何。然後,阿嚴行入洞穴,均勻隨機喊出A路或B路,表明希望小靜由該方向返回。假若小靜確實知道暗號,則很易達成,因為即使起初所選不是同一條路,她也可以開門通過,從另一條路返回。
然而,若她其實不知道暗號,則祗有一半概率能從阿嚴所選的方向返回,因為阿嚴隨機選A路和B路,恰有一半機會選中起初小靜進入的方向。若兩人重複以上過程,比如連續20次,則小靜靠運氣全部碰巧從正確方向返回的概率極小,為220分之1。
所以,若小靜連續多次從阿嚴所選的方向返回,則阿嚴可以推斷,小靜很可能知道暗號。
以下考慮第三方的觀點。即使假設阿嚴佩戴隱蔽的鏡頭,錄影所見的整個過程,鏡頭所見亦只有阿嚴喊「A!」小靜從A路返回;或阿嚴喊「B!」小靜從B路返回。此種片段極易由兩人共謀偽造(祗需小靜與阿嚴事前商討多次驗證中阿嚴將選該串A、B的次序),從而對第三方而言,不具說服力,即阿嚴無法藉此向第三方證明小靜知道暗號。事實上,即使錄影換成現場在阿嚴身旁監視亦同,因為兩人可能一早已協調綵排好。
但是,若阿嚴在鏡頭前擲硬幣,然後按該硬幣喊A或B,則協議不再零知識。該段錄影可能足以說服第三方,兩人無法偽造,因為阿嚴難以準確擲出預定的AB次序。於是,雖然證明過程沒有泄露暗號予阿嚴,但是阿嚴可藉此說服世人,證明小靜知道暗號,與小靜起初的意欲完全相反。不過,數字的密碼學中,「擲硬幣」以偽隨機數生成器實現,類似於一枚結果已預定好的硬幣,但該結果(由其隨機種子決定)僅有硬幣主人知道。若阿嚴的硬幣實際是以此法運作,則協議又恢復為零知識協議,因為兩人又有可能共同偽造「實驗」結果,所以使用偽隨機數生成器與擲真硬幣不同,前者不會向世人泄露小靜知道暗號。
還有另一種做法,小靜以獨一次實驗已可向阿嚴證明自己知道暗號,而不泄漏。方法是,兩人一同走入洞口,然後阿嚴目送小靜沿A路走,沒有原路折返,但從B路返回。如此,小靜必然已向阿嚴證明自己知道暗號,而沒有告知阿嚴暗號。不過此種證明亦非零知識:若第三方觀察到過程,或阿嚴有錄影,則該證明對第三方具說服力。換言之,小靜無法宣稱自己與阿嚴串通,所以無法向第三方說該證明無效。如此,小靜無法控制何人得知她擁有暗號之事。
零知識條件的變式 編輯
「零知識」的定義有若干變形,分別在於如何嚴謹定義模擬結果「看似」真實的交互記錄:
- 完美零知識(perfect zero-knowledge)
- 模擬器與真正交互產生的概率分佈完全相等。離散對數示例即屬此類。
- 統計零知識(statistical zero-knowledge)
- 兩個分佈並非完全相等,但統計上接近,即有某個可忽略函數,使該兩列分佈在任意集合取值的概率差,皆小於該函數。
- 計算零知識(computational zero-knowledge)
- 無高效算法分辨兩個分佈。
零知識證明協議 編輯
最流行的交互式或非交互式零知識證明(例如 zk-SNARK)協議可大致分為以下四類:簡潔的非交互式知識論證(SNARK)、可擴展的透明知識論證(STARK)、可驗證多項式委派(VPD)和簡潔的非交互式論證(SNARG)。 下面提供了零知識證明協議和庫的列表,以及基於透明度、通用性、可信賴的後量子安全性、編程範式的比較。 透明協議是不需要任何可信設置並使用公共隨機性的協議。 通用協議是不需要為每個電路進行單獨的可信設置的協議。 最後,可信的後量子協議是不容易受到涉及量子算法的已知攻擊的協議。
系統名稱 | 發佈年份 | 協議 | 透明性 | 通用性 | 可信的後量子安全 | 編程模式 |
---|---|---|---|---|---|---|
Pinocchio | 2013 | zk-SNARK | 否 | 否 | 否 | 過程式的 |
Geppetto | 2015 | zk-SNARK | 否 | 否 | 否 | 過程式的 |
TinyRAM | 2013 | zk-SNARK | 否 | 否 | 否 | 過程式的 |
Buffet | 2015 | zk-SNARK | 否 | 否 | 否 | 過程式的 |
ZoKrates | 2018 | zk-SNARK | 否 | 否 | 否 | 過程式的 |
xJsnark | 2018 | zk-SNARK | 否 | 否 | 否 | 過程式的 |
vRAM | 2018 | zk-SNARG | 否 | 是 | 否 | 匯編語言 |
vnTinyRAM | 2014 | zk-SNARK | 否 | 是 | 否 | 過程式的 |
MIRAGE | 2020 | zk-SNARK | 否 | 是 | 否 | 算術電路 |
Sonic | 2019 | zk-SNARK | 否 | 是 | 否 | 算術電路 |
Marlin | 2020 | zk-SNARK | 否 | 是 | 否 | 算術電路 |
PLONK | 2019 | zk-SNARK | 否 | 是 | 否 | 算術電路 |
SuperSonic | 2020 | zk-SNARK | 是 | 是 | 否 | 算術電路 |
Bulletproofs | 2018 | Bulletproofs | 是 | 是 | 否 | 算術電路 |
Hyrax | 2018 | zk-SNARK | 是 | 是 | 否 | 算術電路 |
Halo | 2019 | zk-SNARK | 是 | 是 | 否 | 算術電路 |
Virgo | 2020 | zk-SNARK | 是 | 是 | 是 | 算術電路 |
Ligero | 2017 | zk-SNARK | 是 | 是 | 是 | 算術電路 |
Aurora | 2019 | zk-SNARK | 是 | 是 | 是 | 算術電路 |
zk-STARK | 2019 | zk-STARK | 是 | 是 | 是 | 匯編語言 |
Zilch | 2021 | zk-STARK | 是 | 是 | 是 | 面向對象的 |
應用 編輯
身份驗證 編輯
零知識證明的研究,是受身份驗證系統啟發。驗證時,一方要向另一方證明自己身份,通常藉賴證明自己持有某種袐密(如通行密碼),但不希望對方知悉該袐密,稱為零知識知識證明。不過,通行密碼一般不是太短,就是不夠隨機,不能用於許多零知識知識證明方案。零知識通行碼證明就是有考量密碼長度限制的一類零知識知識證明。[來源請求]
2015年4月,Sigma協議(「其中之一」證明,英語:one-out-of-many proofs)面世。2021年8月,美國網絡基建、安全公司Cloudflare採用該種證明機制,以供應方硬件為私人網絡提供驗證服務。
道德行為 編輯
密碼學協議之中使用零知識證明,可以在不退讓私隱的情況下,確保各方誠實。粗略言之,方法是迫用戶零知識地證明,其所作所為是依足協議。由健全性,用戶必先確實跟從協議,才能服眾。又由於證明是零知識,此過程並無犠牲用戶的私隱。
核裁軍 編輯
2016年,普林斯頓等離子物理實際室與普林斯頓大學展示一個技巧,或許適用於未來的核裁軍談判。其特點是,無需揭露某對象內部的機密構造,亦可允許督查員判斷該對象是否核武器。
區塊鏈 編輯
零知識證明用於小零幣與大零幣協議中,最終於2016年發展成小零幣(2020年改稱飛熔幣)和大零幣兩種加密貨幣。小零幣內置有混幣模型,以確保匿名,且該模型無需信任任何點對點用戶或中央集權混幣者。用戶可以用另一種基準幣交易,也可以將該幣賣出買入小零幣。大零幣協議的模型也類似(該變式稱為非交互式零知識證明),而且可以掩蓋交易額,但小零幣則不能。大零幣的交易數據如此隱密,所以與小零幣相比,較不易受到私隱計時攻擊。不過,此層額外私隱,可能導致不能追蹤假幣,倘因此造成大零幣供給的超通漲,可能無法偵測到。
2018年,防彈證明(bulletproofs)面世。其改進自非交互式零知識證明,不再需要可信的安裝環境。其後,實現成「結舌」協議(Mimblewimble protocol,Grin和Beam兩種加密幣皆出自該協議)和門羅幣。2019年,飛熔幣實現Sigma協議,是對應小零幣協議無可信環境的改進。同年,飛熔幣引入萊蘭托斯協議(Lelantus protocol),更自Sigma協議改進,隱去交易的源頭與金額。
去中心化標識符 編輯
在本質上,零知識證明可以增強身份共享系統中的私隱性,而身份共享系統容易受到數據泄露和身份盜用的影響。 當集成到去中心化標識符系統中時,ZKP 會在 DID 文檔上增加額外的加密層。
類型 編輯
零知識證明有各種類型:
- 知識證明:知識隱藏在指數中,如上例所示。
- 見證者不可區分證明:驗證者無法知道用於生成證明的哪個見證者。
零知識證明方案可以由各種密碼學原語構建,例如基於哈希的密碼學、基於配對的密碼學、多方計算或基于格的密碼學。
沿革 編輯
零知識證明最早由莎菲·戈德瓦塞爾、希爾維奧·米卡利、查爾斯·拉克福三人於1985年發表,論文題為《交互式證明系統的知識複雜度》。該論文引入交互式證明系統的IP複雜度類,並構想出「知識複雜度」概念,衡量證明過程中,由證明者傳遞予驗證者的知識量。三人亦給出首個具體問題的零知識證明,即零知識地證明某數不是模 m 的二次剩餘。連同鮑鮑伊·拉茲洛與什洛莫·莫蘭的另一篇論文,戈-米-拉三氏的論文發明了交互式證明系統。為此,五人同獲1993年首屆哥德爾獎。
引述戈-米-拉三氏:
該額外知識基本為0的情況尤其值得關注。我等證明,可以交互地證明某數非模 m 的二次剩餘,而發佈零額外知識。其出奇之處是,若不給定 m 的分解,則無高效算法判別某數是否模 m 的二次剩餘。更甚者,任何已知的NP證明皆要表明 m 的素因數分解。這就表明,在證明過程中添加交互,可能減少證明某定理所必須交流的知識。
二次非剩餘問題既有NP算法又有反NP算法,故位處NP與反NP兩類之交集中。其後找到有零知識證明的若干個問題,亦具同樣的性質,例如歐迪·戈德賴希未經正式出版的證明系統,可以驗證某數(為兩個未知素數之積)不是布盧姆整數,即並非兩個模4餘3的素數之積。
歐迪·戈德賴希、希爾維奧·米卡利、阿維·威格森更進一步證明,假定存在無懈可擊的加密法,則可以造出三色圖着色問題的零知識證明系統,而該問題本身為NP完全。又因為每個NP問題都可以高效化歸成該NP完全問題,所以在前述假定下,所有NP問題皆有零知識證明。需要該假定的原因是,正如前節示例,需要有秘諾的手段。若存在單向函數,則的確有牢不可破的加密法。此為廣泛引用的充分條件。另外也可能有物理方法實現。
更上一層樓,他們亦證明,圖不同構問題,即圖同構問題之補,有零知識證明。該問題已知屬於反NP,但未知是否屬於NP或其他實際可行的複雜度類。更一般地,羅素·英帕利亞佐、莫迪凱·容[譯名請求]二人,與米高·本-奧爾(Michael Ben-Or)及同事,兩組證明:同樣假設存在單向函數或牢不可破的加密,則任何屬於IP(已證等於PSPACE)的問題,皆有零知識證明。換言之,任何命題若可藉交互系統證明,則可零知識證明。
許多理論家不希望假設不必要的條件,所以試圖在不假定單向函數的條件之下,證明同樣的結論。有種做法稱為「多證明者交互式證明系統」(見交互式證明系統),即有多個獨立的證明者,而非僅得一個。驗證者可以將證明者逐個孤立,然後詰問,以免被作弊證明者誤導。無需任何難解假設,已可證明在此系統中,任何NP問題皆有零知識證明。
後來發現,互聯網等同時執行多個協議的環境中,較難構造零知識證明。研究並發零知識證明的先驅是辛西婭·德沃克、莫尼·納奧爾、阿米特·薩海。此類研究之中,重要成果有證據不可辨協議。與零知識相比,其性質較弱:可能有多種證據供證明者選擇採用何者作證,此時僅要求驗證者無法分辨證明者選擇為何,但證明者可以泄漏部分信息,如全體證據組成的集合。儘管失去零知識性質,但此類協議的好處是,並發時不會遇到此前提及的問題。
變式尚有非交互式零知識證明。曼紐爾·布盧姆、保羅·費爾德曼(Paul Feldman)、米卡利證明,若證明者與驗證者共有一條隨機字符串,則可以達成計算零知識,而毋須交互。
參考連結 編輯
- ↑ 區塊鏈的「零知識證明」是什麼東西?|天下雜誌
- ↑ What is a zero-knowledge proof and why is it useful? Written by Lexie