“如何向別人證明你知道某個(gè)數(shù)學(xué)方程的解,同時(shí)又不透露解本身?”這是零知識(shí)證明(ZKP)拋出的核心問(wèn)題。在去中心化系統(tǒng)和看重隱私的應(yīng)用里,證明者需要讓驗(yàn)證者相信一條陳述在數(shù)學(xué)上成立,而除了“成立”這個(gè)結(jié)論之外,不泄露任何信息。眼下工業(yè)界落地最廣的ZKP家族是zk-SNARK——全稱(chēng)“零知識(shí)簡(jiǎn)潔非交互式知識(shí)論證”。它的底層思路是把程序邏輯編譯成一組代數(shù)約束,再用適配雙線(xiàn)性對(duì)的橢圓曲線(xiàn)密碼學(xué)完成驗(yàn)證。
整個(gè)過(guò)程可以拆成三部走。第一步,將代碼轉(zhuǎn)譯成算術(shù)電路。假定我們要證明的是一條簡(jiǎn)單的三次方程:x3 + x + 5 = 35。先把方程打散為一個(gè)有向無(wú)環(huán)圖,里面只允許加法和乘法兩種門(mén)。例如,門(mén)1計(jì)算 sym_1 = x * x;門(mén)2計(jì)算 sym_2 = sym_1 * x,得到 x3;門(mén)3計(jì)算 y = sym_2 + x,得到 x3 + x;門(mén)4則是一個(gè)常量約束 y + 5 = 35。這個(gè)圖就是算術(shù)電路,它用一種純數(shù)學(xué)的模型把執(zhí)行過(guò)程擺了出來(lái)。
![]()
第二步,為了用數(shù)學(xué)方式強(qiáng)制整條電路成立,我們把每個(gè)門(mén)改寫(xiě)成秩1約束系統(tǒng)(R1CS)。R1CS是一系列向量等式,格式統(tǒng)一為 (A·s) × (B·s) = C·s。這里的 s 是“見(jiàn)證向量”,包含所有輸入、中間變量和輸出常量——在這個(gè)例子里,s = [1, x, out, sym_1, sym_2, y]。A、B、C 則是與 s 等長(zhǎng)的系數(shù)向量,分別負(fù)責(zé)鎖定每個(gè)乘法門(mén)的左輸入、右輸入和輸出。以門(mén)1“x * x = sym_1”為例,A 挑出 x,B 也挑出 x,C 挑出 sym_1。點(diǎn)積一做,恰好還原 x * x = sym_1。當(dāng)把所有這樣的向量堆疊成矩陣,整個(gè)方程組成立當(dāng)且僅當(dāng)見(jiàn)證向量代表的是一條有效的執(zhí)行軌跡。
第三步,矩陣驗(yàn)證在規(guī)模上去之后很慢——必須逐行檢查每一條約束。為了讓驗(yàn)證變得簡(jiǎn)潔,我們把R1CS矩陣用拉格朗日插值轉(zhuǎn)化成單個(gè)多項(xiàng)式等式,得到一個(gè)二次算術(shù)程序(QAP)。具體做法是把矩陣的每一列映射為一個(gè)多項(xiàng)式,比如 A(x) = Σ A_i · L_i(x),B(x) 與 C(x) 同理。最終得到一個(gè)統(tǒng)一的多項(xiàng)式恒等式:A(x) × B(x) ? C(x) = H(x) × T(x),其中 T(x) 是與約束結(jié)構(gòu)相關(guān)的公開(kāi)多項(xiàng)式。檢查這個(gè)等式在某個(gè)隨機(jī)點(diǎn)成立,就可以用極小代價(jià)確認(rèn)原電路的所有門(mén)都成立,而證明者不必再說(shuō)出那個(gè)私密的 x。
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶(hù)上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.