用自己熟习的措辞学习以太坊DApp开拓: Java | Php | Python | .Net / C# | Golang | Node.JS | Flutter / Dart
配对的基本观点配对(Pairing)将输入的两个群成员映射为第三个群的成员,将配对记为e。
上式左边的群由椭圆曲线上的点构成。你可以在很多地方 找到椭圆曲线数学的先容,不过我推举Nick Sullivan写的这篇。 上式右边的群被称为目标群,常日是一些大型有限群。

有趣的是,第一个椭圆曲线配对是法国数学家André Weil二战期间在 监狱中给出的。
配对必须具备一些代数特色,下面是最主要的一个,被称为双线性:
下面是另一种表达办法:
配对的另一个主要特色是非退化性(non-degeneracy):
右边的1表示目标群中的乘法单位元。非退化性担保了只要我们 选择椭圆曲线上的非单位成员G,就能得到目标群中的非单位元。
双线性配对在零知识证明中的运用正如Vitalik Buterin指出的,配对可以用于验证一个数学过程是否 精确实行,这也是配对在zk-SNARK中的用场。例如,假设我声称自己 知道一个知足以下二次方程的数值:
为了说服你我的确知道上述方程的一个解,一个办法便是见告你 我知道的这个解,然后你自己带入上述方程去验证。另一个办法 便是我不见告你这个详细的解是多少,但是利用椭圆曲线上的配对 进行验证。
首先把稳,如果:
那么k要么是0,要么是群的阶的倍数,因此如果以下等式成立,我们 就可以确定二次方程成立:
由于x²-x-42可以为0或目标群的阶的倍数, 因此我们须要更多x的信息 来判断x的确是0,这一问题在另一篇文章已经先容过了。
利用双线性,我们可以将上述等式重写为:
进一步整理:
现在,不须要验证原始的二次方程成立,只须要验证上面这个配对方程成立即可。 我不须要供应x的详细数值,只须要见告验证人xG就可以了 —— 这隐蔽了真实的x, 同时也让验证人可以验证我的x的确让等式成立。
原文链接:http://blog.hubwiz.com/2020/06/04/bilinear-pairing/