天天看點

雙線性配對實作零知識證明的核心原理【BILINEAR PAIRING】

就像汽車一樣,zk-SNARK零知識證明系統是由很多具有不同功能的部件組成的。在我看來zk-SNARK這輛車的引擎就是用來保護私有資訊的雙線性配對。配對是一種特殊的映射,它模糊了資訊但依然允許你進行有限的計算,非常令人着迷。

用自己熟悉的語言學習以太坊DApp開發: Java | Php Python .Net / C# Golang Node.JS Flutter / Dart

配對的基本概念

配對(Pairing)将輸入的兩個群成員映射為第三個群的成員,将配對記為

e

雙線性配對實作零知識證明的核心原理【BILINEAR PAIRING】

上式左邊的群由橢圓曲線上的點構成。你可以在很多地方找到橢圓曲線數學的介紹,不過我推薦Nick Sullivan寫的

這篇

。上式右邊的群被稱為目标群,通常是一些大型有限群。

有趣的是,第一個橢圓曲線配對是法國數學家André Weil二戰期間在監獄中給出的:

雙線性配對實作零知識證明的核心原理【BILINEAR PAIRING】

配對必須具備一些代數特征,下面是最重要的一個,被稱為雙線性:

雙線性配對實作零知識證明的核心原理【BILINEAR PAIRING】

下面是另一種表達方式:

雙線性配對實作零知識證明的核心原理【BILINEAR PAIRING】

配對的另一個重要特征是非退化性(non-degeneracy):

雙線性配對實作零知識證明的核心原理【BILINEAR PAIRING】

右邊的1表示目标群中的乘法機關元。非退化性保證了隻要我們選擇橢圓曲線上的非機關成員G,就能得到目标群中的非機關元。

雙線性配對在零知識證明中的應用

正如Vitalik Buterin指出的,配對可以用于驗證一個數學過程是否正确執行,這也是配對在zk-SNARK中的用途。例如,假設我聲稱自己知道一個滿足以下二次方程的數值:

雙線性配對實作零知識證明的核心原理【BILINEAR PAIRING】

為了說服你我的确知道上述方程的一個解,一個辦法就是告訴你

我知道的這個解,然後你自己帶入上述方程去驗證。另一個辦法

就是我不告訴你這個具體的解是多少,但是使用橢圓曲線上的配對

進行驗證。

首先注意,如果:

雙線性配對實作零知識證明的核心原理【BILINEAR PAIRING】

那麼k要麼是0,要麼是群的階的倍數,是以如果以下等式成立,我們

就可以确定二次方程成立:

雙線性配對實作零知識證明的核心原理【BILINEAR PAIRING】

由于

x²-x-42

可以為0或目标群的階的倍數, 是以我們需要更多x的資訊來判斷x的确是0,這一問題在

另一篇文章

已經介紹過了。

利用雙線性,我們可以将上述等式重寫為:

雙線性配對實作零知識證明的核心原理【BILINEAR PAIRING】

進一步整理:

雙線性配對實作零知識證明的核心原理【BILINEAR PAIRING】

現在,不需要驗證原始的二次方程成立,隻需要驗證上面這個配對方程成立即可。

我不需要提供x的具體數值,隻需要告訴驗證人xG就可以了 —— 這隐藏了真實的x,

同時也讓驗證人可以驗證我的x的确讓等式成立。

原文連結:

雙線性配對:零知識證明的引擎 —— 彙智網