可靠性與完備性
完備性與可靠性是每一套證明系統都必須信守的兩個承諾,而它們朝著相反的方向拉扯。完備性說:若陳述為真且證明者誠實,驗證者就會接受——誠實的一方絕不會被冤枉地拒絕。可靠性說:若陳述為假,無論證明者多麼狡猾,都無法讓驗證者接受,頂多只有可忽略的機率——說謊者絕不會被冤枉地採信。一個總是接受的協議,完備性是有了卻毫無用處;一個總是拒絕的協議,可靠性是有了卻同樣無用。真正的證明系統,必須兩者兼備。
機率很重要。完備性往往是完美的(機率為 1),而可靠性則是統計性或計算性的:單獨一輪可能讓作弊者以 1/2 的機率得逞,因此協議會重複、或使用龐大的挑戰空間,把可靠性誤差壓低到 2^-128 之類、小到天文數字的程度。還有一種對區塊鏈而言更為相關的更強風味:知識可靠性,它說一個有說服力的證明者必定真的知道一組見證(存在一個抽取器能把它復原出來)——而不僅僅是「有一組見證存在」。這正是這些系統被稱作「知識論證」、亦即 SNARK 與 STARK 中那個「K」的原因。
統計性可靠性與計算性可靠性之分,劃開了一整族一整族的系統。STARK 提供統計性(資訊論意義上)的可靠性,即便面對運算能力無上限的攻擊者也安全,這正是它抗量子主張的根基。Groth16 這類以配對為基礎的 SNARK 只提供計算性可靠性——在「某些數學問題很難」的假設下才安全——因此未來的量子電腦、或一個被攻破的假設,都可能動搖它們。零知識則是疊加於其上、第三項各自獨立的性質:一個證明可以既可靠又完備、卻把一切都洩漏出去,也可以同時可靠、完備且零知識。
對於金錢而言,可靠性是你絕不能讓步的性質。完備性失靈只是個麻煩(一筆誠實的交易被冤枉地拒絕);可靠性失靈卻是場大災難(一個假證明被接受),讓攻擊者得以鑄造出無效的彙整狀態,或偽造屏蔽幣。