進階主題、前沿與應用

零知識證明(zero-knowledge proof)

假設你想讓朋友相信你知道一扇上鎖的門的密碼,卻絕對不想把密碼告訴他。零知識證明正是達成這個聽來矛盾的壯舉的協定:它讓證明者說服驗證者某主張為真,同時除了「它為真」這個赤裸事實之外,什麼都不洩漏——不洩漏祕密、不洩漏見證,甚至連一絲能縮短驗證者自身搜尋的提示都沒有。

它是一種特殊的交互式證明,多了一個額外要求。除了完備性(真主張被接受)與健全性(假主張幾乎必被拒絕),它還必須滿足零知識性質:驗證者學不到任何它無法靠自己產生的東西。這由一個模擬器精確刻畫——這個程序只知道主張為真,就能偽造出一份與真實對話無法區分的完整對話紀錄。若驗證者本可自行製造出一份令人信服的紀錄,那麼真實對話就什麼也沒教給它。經典示例是色盲朋友與兩顆球:你可以證明兩球顏色不同——讓他在背後決定是否交換兩球,再請你說它們是否被交換過——你唯有看得見顏色才答得對,但朋友自始至終學不到哪顆球是哪個顏色。

零知識證明是現代密碼學的基石。它支撐著「證明你知道某祕密卻不暴露它」的密碼與身分系統,也是保護隱私的區塊鏈與可驗證計算的技術核心——在那裡,一方證明某筆交易或計算有效,卻不揭露其私密輸入。一個里程碑結果顯示:假設單向函數存在,NP 裡的每個主張都有零知識證明。那個假設正是誠實的附帶條件:零知識的安全性建立在未證的困難性假設上,與支撐整個密碼學的假設相同。

要證明一張圖可 3-著色卻不洩漏著色方式:證明者先承諾一個隨機重新著色的版本(把每個頂點的顏色封進上鎖的盒子),驗證者隨機挑一條邊,請證明者只打開它的兩個端點,看到兩端不同色,便接受。單一條邊洩漏不了整個著色;若證明者根本沒有有效著色,必有某條邊兩端同色,而隨機選邊會逮到它。多輪之後作弊毫無希望,但驗證者始終看不到完整著色。

零知識證明說服你某主張為真,卻什麼別的都不教給你。

「零知識」不是指驗證者什麼都學不到——它學到了「主張為真」這一個位元。它的意思是除此之外什麼都學不到,尤其學不到祕密見證。其安全性通常建立在未證的假設上,例如單向函數存在。

又称
ZK proofzero-knowledge protocolZKP零知識協定