不讨论颜色的前提下,如何证明自己不是色盲?神奇的零知识证明

news2025/1/12 16:06:44

不讨论颜色的前提下,证明自己并非色盲

0x01 一个小故事

《阿里巴巴与四十大盗》中有这样一段小故事:

阿里巴巴会芝麻开门的咒语,强盗向他拷问打开山洞石门的咒语,他不想让人听到咒语,又要向强盗证明他知道这个咒语。
那应该怎么办呢?

便对强盗说:「你们离我一箭之地,用弓箭指着我,你们举起右手,我念咒语打开石门,举起左手,我念咒语关上石门,如果我做不到或逃跑,你们就用弓箭射死我。」
这个方案对阿里巴巴没损失,也能让强盗们相信阿里巴巴到底是否知道咒语,于是强盗们同意。强盗举起了右手,只见阿里巴巴的嘴动了几下,石门打开了;强盗举起了左手,阿里巴巴的嘴动了几下,石门又关上了。强盗有点不信,没准这是巧合,但是多试几次过后,他们相信了阿里巴巴。

这样既向强盗们证明了阿里巴巴知道这个咒语的秘密,又没有泄漏这个咒语。

0x02 什么叫做零知识证明

上面的小故事其实就是零知识证明的一个例子。

零知识证明(Zero—Knowledge Proof),简称ZKP。它指的是证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。

零知识证明实质上是一种涉及两方或更多方的协议,即两方或更多方完成一项任务所需采取的一系列步骤。证明者向验证者证明并使其相信自己知道或拥有某一消息,但证明过程不能向验证者泄漏任何关于被证明消息的信息。

大量事实证明,零知识证明在密码学中非常有用。如果能够将零知识证明用于验证,将可以有效解决许多问题。

0x03 零知识证明的发展历史

现代零知识证明体系最早来源于 Goldwasser、Micali 和 Rackoff 合作发表的论文:《The Knowledge Complexity of Interactive Proof Systems》(即 GMR85),该论文提出于 1985 年,发表于 1989 年。这篇论文主要阐释的是在一个交互系统中,经过 K 轮交互,需要多少知识被交换,从而证明一个证言(statement)是正确的。如果可以让交换的知识为零,则被称之为零知识证明。

早年的零知识证明系统在效率以及可用性方面都有所欠缺,所以一直都停留在理论层面,直到最近 10 年才开始蓬勃发展,伴随着密码学在 crypto 成为显学,零知识证明走向台前,成为至关重要的一个方向。特别是发展出一个通用的、非交互的、证明大小有限的零知识证明协议,是其中最关键的探索方向之一。

基本上零知识证明就是要在证明的速度、验证的速度和证明体积的大小之间做取舍,理想的协议是证明快、验证快、证明体积小。

零知识证明最重要的突破是 Groth 在 2010 年的论文 《Short Pairing-based Non-interactive Zero-Knowledge Arguments》,也是 ZKP 里面最重要的一组 zk-SNARK 的理论先驱。

零知识证明在应用上最重要的进展就是 2015 年 Z-cash 使用的零知识证明系统,实现了对交易及金额隐私的保护,后来发展到 zk-SNARK 和智能合约相结合,zk-SNARK 进入了更为广泛的应用场景。

0x04 零知识证明的性质

根据零知识证明的定义和这些例子,可以得出零知识证明具有以下三个性质:

  • 完备性 completeness:如果证明方和验证方都是诚实的,并遵循证明过程的每一步,进行正确的计算,那么这个证明一定是成功的,验证方一定能够接受证明方。
  • 合理性 soundness:没有人能够假冒证明方,使这个证明成功。
  • 零知识性 zero-knowledge:证明过程执行完之后,验证方只获得了「证明方拥有这个知识」的信息,而没有获得关于这个知识本身的任何信息。

真正的零知识证明运用的是密码学,在不透露数据的情况下证明数据的存在。

0x05 零知识证明算法zkSNARK

Web3里讲的ZKP,通常指其中的zkSNARK(Zero-Knowledge Succinct Non-Interactive Argument of Knowledge-零知识简洁非交互式知识论证)这一类算法。顾名思义,它有以下的特点:

  • Zero Knowledge:证明过程零知识,不会暴露多余信息
  • Succinct:验证体积小
  • Non-interactive:非交互过程
  • ARguments:计算具备可靠性,即有限计算能力的证明者不能伪造证明,无限计算能力的证明者可以伪造证明
  • of Knowledge:证明者无法在不知道有效信息的情况下构建出一个参数和证明
  • 对于证明者来说,在不知道证据(Witness,比如一个哈希函数的输入或者一个确定 Merkle-tree 节点的路径)的情况下,构造出一组参数和证明是不可能的。

0x06 zkSNARK的核心实现

zkSNARK 的整体技术实现过程相当繁琐,这里主要讲下其核心思想。

zkSNARK之一

我们从一个方程式开始,X^3 + X + 5 = 35,显然解是 3。那么现在,证明者如何向验证者证明自己知道方程的解是 3,而又不告诉验证者这个解呢?
首先,我们将方程转化为计算机语言,这很容易实现:

y = x*3
return x + y + 5

接着,我们将上面的代码拍平。所谓将代码拍平,是指让代码一次只做一件事。
拍平后,代码变成以下语句:

var1 = x * x
y = var1 * x
var2 = y + x
~out = var2 + 5

然后,我们引入 R1CS 一阶约束系统(rank-1 constraint system),R1CS 是一个由三向量组(a, b, c)组成的序列,同时有一个解向量 v,v 满足 v·a * v·b - v·c = 0
在本例中,s 的结构为(~one, x, ~out, var1, y, var2),可见其由一个特殊的 ~one、方程的解 x、方程的输出 ~out 和一系列中间变量(拍平后的语句等号左边的变量)构成,其顺序不重要,只要保证有序即可。
我们把语句变换成如下形式,来方便我们求解 abc:

x * x - var1 = 0
var1 * x - y = 0
y + x - var2 = 0
var2 + 5 - ~out = 0

我们很容易得出第一个式子对应的三个向量:

a = [0, 1, 0, 0, 0, 0]
b = [0, 1, 0, 0, 0, 0]
c = [0, 0, 0, 1, 0, 0]

推导过程其实很简单,我们知道要满足 v·a * v·b - v·c = 0,那么对应第一个式子 x * x - var1 = 0,只需要 v·a = x、v·b = x、v·c = var1 即可,而 s =(~one, x, ~out, var1, y, var2),那么 a 只要在 x 的位置等于 1,其余位置等于 0,即得出(0,1,0,0,0,0)

我们对每个式子验证 v·a * v·b - v·c = 0,其本质是在验证每一步都得到了正确的计算,也即如果我们可以验证每一步都是正确的,那么最终结果也一定是正确的。
zkSNARK之二

以上的每一步,看似都在舍近求远,因为 v 里本身就包含了方程的解 x,验证者只需把 x 代入就能进行验证。但从另一个角度看,通过这一系列的转换,我们构建了一种将证明和验证分离的方式。在证明过程中,证明者需要知道解并生成一系列中间结果,而验证者则只需要验证其一系列结果构成的解向量是否满足一系列约束,而不需要关心这个解到底是多少。

现在只剩一个问题留待解决,就是能否通过一种方式,让验证者看不到裸着的解 x,同时依然可以进行验证过程。答案是肯定的,借由椭圆曲线、双线性对数运算和指数知识假设这一系列数学手段我们就可以做到这一点。
zkSNARK之三

0x07 零知识证明的未来

Alex Pruden说:“改变 Web3 的技术之一,无疑是零知识 (ZK) 密码学。作为区块链应用生态在隐私、安全性和完整性等方面的游戏规则改变者,ZKP(零知识证明)的加速投资和发展是它正在为黄金时期做好准备的重要信号。”

未来将是一个注重隐私保护的网络时代,零知识证明被视为Web3的重要变革因素,随着技术的创新和应用的拓展,零知识证明技术正在迎来它的黄金时代。

更多技术干货,请关注公众号【码农熊猫】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/156654.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于KVM安装部署RHCOS操作系统

参考:Openshift 4.4 静态 IP 离线安装系列:初始安装 - 米开朗基杨 - 博客园 一、Openshift OCP集群安装架构示意图 RHCOS 的默认用户是 core 如果安装有问题会进入 emergency shell,检查网络、域名解析是否正常,如果正常一般是以…

重修JAVA

程序员的差距是在构思上:思想决定了深度,思想的精髓高深是很多人学不来的! 每一门语言都有它的特点,有优势也有劣势, 所以不必拘泥于招式,掌握底层原理即可! 每一们语言实际上都是一个“工具”&…

如何在您的香港主机帐户上注册多个域名

注册多个域名非常普遍。事实上,香港主机服务提供商鼓励这样做,因为它既有意义又是必要的。下面将介绍决定为什么您可能需要在香港主机上注册多个域名的几个因素。注册多个域名的原因是什么?方便多个项目如果香港主机帐户的所有者在网络上有多个不同域名…

优化vue项目后, 启动编译项目过程中 报 javaScript heap out of memory 错误 及 nodejs内存溢出

项目场景: 提示:这里简述项目相关背景: 1、优化vue项目后,运行npm run serve 启动编译项目过程中 报 javaScript heap out of memory 错误 2、项目启动时,出现 nodejs 内存溢出错误 问题描述 提示:遇到…

分布式事务的背景和解决方案

在常用的关系型数据库,都是具备事务特性的。 那什么是事务呢?事务是数据库运行的一个逻辑工作单元,在这个工作单元内的一系列SQL命令具有原子性操作的特点,也就是说这一系列SQL指令要么全部执行成功,要么全部回滚不执…

经典算法之深度优先搜索(DFS)

👑专栏内容:算法学习笔记⛪个人主页:子夜的星的主页💕座右铭:日拱一卒,功不唐捐。 目录一、前言二、基本概念1.简单介绍2. 官方概念三、动图分析四、模板框架五、例题分析组合问题题干描述:思路…

leetcode146. LRU 缓存【python3哈希表+双向链表】利用OrderedDict以及自实现双向链表

题目: 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。实现LRUCache类: LRUCache(int capacity) 以正整数作为容量capacity初始化 LRU 缓存int get(int key) 如果关键字key存在于缓存中,则返回关键字的值,否则…

【论文速递】9位院士Science88页长文:人工智能的进展、挑战与未来

【论文速递】9位院士Science88页长文:人工智能的进展、挑战与未来 【论文原文】:Intelligent Computing: The Latest Advances, Challenges and Future 获取地址:https://spj.science.org/doi/10.34133/icomputing.0006摘要: ​…

【阶段三】Python机器学习15篇:机器学习项目实战:支持向量机回归模型

本篇的思维导图: 项目实战(支持向量机回归模型) 项目背景 股票投资(Stock Investment)是指企业或个人用积累起来的货币购买股票,借以获得收益的行为。股票投资的收益是由“收入收益”和“资本利得”两部分构成的。收入收益是指股票投资者以股东身份,按照持股的份…

大网规划部署刷题讲解(带答案)

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.大网规划刷题 前言 本章将会讲解大网规划刷题的讲解。 一.大网规划刷题 …

ArcGIS基础实验操作100例--实验85创建线要素间的最近垂线

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台:ArcGIS 10.6 实验数据:请访问实验1(传送门) 高级编辑篇--实验85 创建线要素间的最近垂线 目录 一、实验背景 二、实验数据 三、实验步骤 &#xf…

【一文速通】数据分布不同解决办法

1. 构造合适的验证集当出现训练集和测试集分布不一致的,我们可以试图去构建跟测试集分布近似相同的验证集,保证线下验证跟线上测试分数不会抖动,这样我们就能得到稳定的benchmark。Qiuyan918在基于对抗验证的基础上,提出了三种构造…

为什么流媒体直播的延迟很高

通信技术的发展促进了视频点播和直播业务的兴起,4G 和 5G 网络技术的进步也使得流媒体技术变得越来越重要,但是网络技术并不能解决流媒体直播的高延迟问题,本文不会介绍网络对直播业务的影响,而是会分析直播中常见的现象 — 主播和…

Spring(1):拦截器

1 拦截器 拦截器是Spring中的概念,和过滤器类似,可以对用户请求进行拦截过滤处理。但是相对于过滤器而言,拦截器要的控制更加的细节,拦截器可以在三个地方进行执行: 可以在请求达到Controller控制器之前,…

VirtualBox 客户机/虚拟机无法时间同步?可能是你安装客户机插件的方式不对!

文章目录安装客户机插件的正确方式准备工作安装过程用户手册中的“客户机插件”安装客户机插件的正确方式 准备工作 所需包如下: GNU compiler (GCC)GNU Make (make)Kernel header fileslib* files 笔者亲测使用的 CentOS 7 Linux 内核版本为 3.10.0-1160.81.1.…

SQL索引概念(详解B+树)

SQL索引定义分类复合索引特性复合索引最左特性(原则)原理索引及其扫描类型索引的优缺点优点:缺点:索引工作原理BTree索引怎么判断是否创建索引?为什么Mysql用B树做索引而不用B-树或红黑树为什么索引快?定义 索引是一种排好序的快…

【数据结构】认清带头双向循环链表的庐山真面目

目录前言一、带头双向循环链表的介绍二、带头双向循环链表的类型重定义1.对数据类型进行重定义2.链表结点结构3.结点类型重定义三、常见函数操作的实现1.声明2.定义1. 申请新节点2. 初始化3. 销毁链表4. 打印链表5. 尾插数据6. 尾删数据7. 头插结点8.头删结点9. 在指定的位置前…

嵌入式开发的程序架构

前言 在嵌入式软件开发,包括单片机开发中,软件架构对于开发人员是一个必须认真考虑的问题。 软件架构对于系统整体的稳定性和可靠性是非常重要的,一个合适的软件架构不仅结构清晰,并且便于开发。 我相信在嵌入式或单片机软件开发…

聚焦云原生安全|安全狗亮相云原生产业联盟年会

1月9日,云原生产业联盟年会成功举办。 作为国内云原生安全领导厂商,安全狗也受邀参与此次大会。 安全狗高级副总裁陈荣有发表寄语 在此次线上会议中,安全狗凭借突出的云原生安全整体实力,通过层层筛选与审核,入选成为…

OpenCV从3D-2D 点对应中查找对象姿势solvePnP

1.概述:在使用相机拍照片时,大多数人会考虑拍的好不好看,关注相机中物体坐标的并不多,但是对于地信学科来说,如果能从照片中获取物体的真实位置,对地理信息获取大有帮助,在这里面,十…