双线性映射:零知识证明的引擎

简介: 就像汽车一样,zk-SNARK零知识证明系统是由很多具有不同功能的部件组成的。在我看来zk-SNARK这辆车的引擎就是用来保护私有信息的双线性配对。配对是一种特殊的映射,它模糊了信息但依然允许你进行有限的计算,非常令人着迷。

就像汽车一样,zk-SNARK零知识证明系统是由很多具有不同功能的部件组成的。在我看来zk-SNARK这辆车的引擎就是用来保护私有信息的双线性配对。配对是一种特殊的映射,它模糊了信息但依然允许你进行有限的计算,非常令人着迷。

用自己熟悉的语言学习以太坊DApp开发: Java | Php | Python | .Net / C# | Golang | Node.JS | Flutter / Dart

配对的基本概念

配对(Pairing)将输入的两个群成员映射为第三个群的成员,将配对记为e
在这里插入图片描述
上式左边的群由椭圆曲线上的点构成。你可以在很多地方找到椭圆曲线数学的介绍,不过我推荐Nick Sullivan写的这篇。上式右边的群被称为目标群,通常是一些大型有限群。

有趣的是,第一个椭圆曲线配对是法国数学家André Weil二战期间在监狱中给出的:
在这里插入图片描述

配对必须具备一些代数特征,下面是最重要的一个,被称为双线性:

在这里插入图片描述
下面是另一种表达方式:

在这里插入图片描述
配对的另一个重要特征是非退化性(non-degeneracy):

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BHFzz20C-1591326183453)(bilinear-pairing/non-degeneracy.png)]

右边的1表示目标群中的乘法单位元。非退化性保证了只要我们选择椭圆曲线上的非单位成员G,就能得到目标群中的非单位元。

双线性配对在零知识证明中的应用

正如Vitalik Buterin指出的,配对可以用于验证一个数学过程是否正确执行,这也是配对在zk-SNARK中的用途。例如,假设我声称自己知道一个满足以下二次方程的数值:

在这里插入图片描述

为了说服你我的确知道上述方程的一个解,一个办法就是告诉你
我知道的这个解,然后你自己带入上述方程去验证。另一个办法
就是我不告诉你这个具体的解是多少,但是使用椭圆曲线上的配对
进行验证。

首先注意,如果:

在这里插入图片描述

那么k要么是0,要么是群的阶的倍数,因此如果以下等式成立,我们
就可以确定二次方程成立:

在这里插入图片描述

由于x²-x-42可以为0或目标群的阶的倍数, 因此我们需要更多x的信息来判断x的确是0,这一问题在另一篇文章已经介绍过了。

利用双线性,我们可以将上述等式重写为:

在这里插入图片描述

进一步整理:

在这里插入图片描述

现在,不需要验证原始的二次方程成立,只需要验证上面这个配对方程成立即可。
我不需要提供x的具体数值,只需要告诉验证人xG就可以了 —— 这隐藏了真实的x,
同时也让验证人可以验证我的x的确让等式成立。


原文链接:双线性配对:零知识证明的引擎 —— 汇智网

目录
相关文章
|
存储 云计算 智慧交通
云计算的智慧城市架构
智慧城市的发展是现代化城市发展的必然趋势,云计算为智慧城市建设的关键点,更是智慧城市的“智慧”所在。在智慧城市的建设中,建立以云计算为核心,综合多应用、多行业、多系统的智慧城市设计,已经成为目前智慧城市发展的一个重要思路。
3522 0
|
关系型数据库 MySQL 数据安全/隐私保护
Mac安装Mysql5.7
Mac安装Mysql5.7
1248 5
|
XML JSON 前端开发
【Web前端揭秘】XML与JSON:数据界的双雄对决,你的选择将如何改写Web世界的未来?
【8月更文挑战第26天】本文深入探讨了XML和JSON这两种广泛使用的数据交换格式在Web前端开发中的应用。XML采用自定义标签描述数据结构,适用于复杂层次数据的表示,而JSON则以键值对形式呈现数据,更为轻量且易解析。通过对两种格式的示例代码、结构特点及应用场景的分析,本文旨在帮助读者更好地理解它们的差异,并根据实际需求选择最合适的数据交换格式。
364 1
|
Java 测试技术 C#
自动化测试之美:从Selenium到Appium
【10月更文挑战第3天】在软件开发的海洋中,自动化测试如同一艘航船,引领着质量保证的方向。本文将带你领略自动化测试的魅力,从Web端的Selenium到移动端的Appium,我们将一探究竟,看看这些工具如何帮助我们高效地进行软件测试。你将了解到,自动化测试不仅仅是技术的展示,更是一种提升开发效率和产品质量的智慧选择。让我们一起启航,探索自动化测试的世界!
|
监控 JavaScript
Vuex学习二:Vuex的重点属性学习,state、mutations、getters、actions、module。
这篇文章是关于Vuex状态管理库的深入学习,涵盖了其核心概念如state、getters、mutations、actions和modules,并通过实例代码展示了它们的使用和重要性。
459 1
|
缓存 前端开发 JavaScript
深入了解 Vite:快速、简洁、高效的前端构建工具(下)
深入了解 Vite:快速、简洁、高效的前端构建工具(下)
深入了解 Vite:快速、简洁、高效的前端构建工具(下)
|
算法
Raid5数据恢复—Raid5算法简介&raid5磁盘阵列数据恢复案例
Raid5算法也被称为“异或运算”。异或是一个数学运算符,它应用于逻辑运算。异或的数学符号为“⊕”,计算机符号为“xor”。异或的运算法则为:a⊕b = (¬a ∧ b) ∨ (a ∧¬b)。如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。 异或也叫半加运算,其运算法则相当于不带进位的二进制加法。二进制下用1表示真,0表示假。异或的运算法则为:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为0,异为1),这些法则与加法是相同的,只是不带进位。 异或略称为XOR、EOR、EX-OR,程序中有三种演算子:XOR、xor、⊕。使用方法如下z = x ⊕ y z
Raid5数据恢复—Raid5算法简介&raid5磁盘阵列数据恢复案例
|
JavaScript 前端开发 开发者
深入解析Angular装饰器:揭秘框架核心机制与应用——从基础用法到内部原理的全面教程
【8月更文挑战第31天】本文深入解析了Angular框架中的装饰器特性,包括其基本概念、使用方法及内部机制。装饰器作为TypeScript的关键特性,在Angular中用于定义组件、服务等。通过具体示例介绍了`@Component`和`@Injectable`装饰器的应用,展示了如何利用装饰器优化代码结构与依赖注入,帮助开发者构建高效、可维护的应用。
306 0
|
数据采集 监控 搜索推荐
使用 Python 爬虫进行网站流量分析:Referer 头的利用
使用 Python 爬虫进行网站流量分析:Referer 头的利用
|
资源调度 JavaScript
nuxt3目录及使用
# nuxt3 Nuxt 3 是一个开源框架,可以自动整合了很多东西,另外,nuxt3还是Vue3的同构ssr渲染的使用方案。csr,ssr,srg三种渲染方案三种渲染模式可以参考我的[都2023年了,还在用传统的前后端分离?来学习一下CSR,SSR与SRG吧!!! - 掘金 (juejin.cn)](https://juejin.cn/post/7195551013033164855 "https://juejin.cn/post/7195551013033164855")这篇文章。 今天我们来具体使用一下Nuxt,来体验一下这非常神奇的Nuxt开发。 # 初始化项目 我们的host