零知識證明
見證
見證是讓一個證明得以運作的祕密:證明者所知道、且能滿足電路約束的那些私密輸入。若公開陳述是「這個雜湊有一個原像」或「這個彙整批次是有效的」,那麼見證就是那個真正的原像,或是驅動該計算的整套交易、簽章與中間值。零知識意味著驗證者在從未見過見證的情況下,便相信了見證的存在。
把三樣東西分清楚會有幫助。公開輸入是人人都看得到、且共同認可的(一個默克爾根、一個宣稱的輸出)。見證是對電路所有內部與祕密導線的私密賦值。而證明則是證明者送出的那個短短的物件。關鍵在於,SNARK 提供「知識可靠性」:產出有效證明的證明者,必定真的「知道」一組滿足的見證——其精確含意是:存在一個抽取器演算法能從他身上把見證掏出來——你無法在沒有底層祕密的情況下虛張聲勢地造出一個證明。
計算見證通常是證明者的第一步、也是最沉重的一步:誠實地跑完計算,記錄下每一條導線上的值,再把那整份賦值餵進證明演算法。見證必須保持私密——洩漏它就辜負了一切,例如在屏蔽交易中,見證裡含有花費金鑰與金額。這也是為什麼在 zkEVM 這類大型電路裡,不只是證明的產生、連見證的產生本身,都是嚴重的效能瓶頸。
別把「見證」與「證明」搞混。見證是證明者持有、且永不洩漏的那份龐大私密祕密;證明則是由它導出的那個微小公開物件。知識可靠性,正是這樣一項擔保:那個小小的證明,只可能來自一個握有真正見證的人。
另见