零知識證明

Fiat-Shamir 啟發法

Fiat-Shamir 啟發法是把互動式證明變成非互動式證明的標準技法。在互動版本中,驗證者藉由送出隨機挑戰來注入新鮮的隨機性;Fiat-Shamir 則用一個雜湊取代那個「需要人在迴圈中」的隨機性。證明者自己藉由雜湊「協議中目前為止說過的一切」——也就是紀錄——來算出每一個「挑戰」,而由於一個好的雜湊是無法預測的,證明者就如同面對一枚真正的隨機硬幣一般,無法把挑戰導向對自己有利的方向。其結果是一個任何人都能離線驗證、自我完備的單一證明,這正是區塊鏈所需要的。

其安全性論證活在隨機預言機模型裡:若雜湊的行為宛如一個真正隨機的函數,那麼編譯出來的非互動式證明,便與原本的互動版本一樣可靠。這正是 STARK、Bulletproofs,以及各種 sigma 協議的非互動形式,全都仰賴 Fiat-Shamir 的原因。它之所以被稱作「啟發法」,是因為真實的雜湊函數其實並非隨機預言機,因此這份保證是啟發式的、而非被完全證明的——儘管目前並無任何「對正確套用之實例」的實務攻破為人所知。

危險的微妙之處在於:你究竟雜湊了什麼。「強」Fiat-Shamir 雜湊整份紀錄,包含公開陳述與先前所有的承諾;「弱」Fiat-Shamir 則漏掉其中一部分。略過輸入曾造成真實而嚴重的漏洞——2022 年的「Frozen Heart(凍結之心)」揭露發現,好幾個被廣泛使用的證明函式庫,在導出挑戰時並未把公開輸入綁進去,讓攻擊者得以偽造出假陳述的證明。這條經驗法則殘酷卻簡單:把驗證者本該看到的一切都吸收進去,否則你的可靠性可能會悄無聲息地蒸發。

生產環境中大多數 ZK 可靠性災難,並非源於被攻破的密碼學,而是源於誤用 Fiat-Shamir——忘了把某個承諾或公開陳述雜湊進去。把整份紀錄都綁進去;漏掉一個欄位,就可能讓攻擊者自選挑戰、偽造證明。