浅谈零知识证明之二:简短无交互证明(SNARK)

什么是零知识证明(ZK Proof)?Web2.0通往Web3.0的入口技术 零知识证明(Zero-Knowledge Proof)也叫做最小泄露证明,能充分证明自己是某种权益的合法拥有者,又不把有关的信息泄漏出去,即给外界的 “知识” 为“零”。无论是L2与L1、链上链下、Web2.0与Web3.0,都可以利用零知识证明来传递信用,因此零知识证明作为一种有效的技术实现不同生态之间的共识传递,成为Web2.0通往Web3.0的入口技术。 阅读详情

本文作者东泽,来自安比技术社区的小伙伴,目前就读于斯坦福大学,研究方向密码学,本系列文章来源于作者在斯坦福著名的课程《CS 251: Cryptocurrencies and blockchain technologies》上的学习笔记,该课程授课老师是密码学大拿 Dan Boneh。

上一期文章发表之后,非常惊讶有那么多小伙伴读完了表示喜欢。那么我们接着这期继续吧!这次,我们专注的聊一聊SNARK。
相信看完前一篇文章的朋友们会有一点很不解的地方:为什么我们可以如此简短的创建一个证明,并且证明很长的信息呢?在上课前我也有这同样的疑惑,甚至觉得这个是一个“黑科技”,不过相信大家看完这篇文章,就会知道如何去驾驭这个“黑科技”了。

在详细讨论之前,我们得稍微严肃一点,系统性的学习一下SNARK的基本构造。

SNARK的四步构造

因为SNARK的“黑科技”特性,想要构建一套简短证明系统,其实流程是略微有些复杂的。总结一下一共可以分为四步,我们来一步一步详细描述。

第一步:确定有限域

在构造之前,我们先需要确定一个可以包含所有我们想要计算的数字的大小的一个有限域(Finite Field)。用通俗易懂的话来说,我们需要选一个很大很大的数字p,确保这个数字比我们要解决的问题里的所有数字都大。

如果以前了解过类似于RSA密码学的朋友们可能对这个概念不陌生。有限域就是给我们所有数字加了一个天花板,确定了整个数学系统的计算空间,类似于在电脑里如果我们想创建一个存数字的变量,我们需要思考到底是需要一个uint32_t(32位),还是一个uint64_t(64位)一样。所有超过有限域的值,都会直接溢出之后再倒回去从0开始。

在数学界,符合这个特性的计算空间其实有很多种,最常见的一种就是RSA算法里面用到的正整数求模一个大质数(integer mod p)。上文说到的找到一个数字p,其实就是一个很大的质数,然后我们可以用它来生成一个计算空间。

在确定计算空间之后,我们就可以真正开始SNARK的搭建了。

第二步:构建数学运算电路(Arithmetic Circuit)

当我们找到一个数字空间之后,我们下一步要做的事情,就是要把我们想要证明解决的问题用数学运算电路表示出来。

什么是数学运算电路呢?我们先来看一看传统的逻辑电路。

在这里插入图片描述
上图表述的是一个与非门(NAND)的电路。先不用过多了解电路的用处,我们可以发现的是,两组输入信号分别通过了AND和OR这两个基础逻辑门**。像AND和OR这样的基础逻辑门是逻辑电路的基础模块,通过拼加和堆叠我们可以实现任何复杂逻辑。**

数学运算电路也是同理,只不过基础模块从逻辑门变成了数学运算。因为加法和乘法是最基础的数学运算,通过加法和乘法我们也可以近乎实现所有其他的运算方法,所以我们可以**选用“加法门”和“乘法门”作为我们数学运算电路的基础模块。**通过叠加运算门,我们可以搭建一个复杂多项式的“电路”。

为了能更好的理解运算门,我们来试试看把上面的NAND门从逻辑电路转换成数学运算电路。(假设Inp0和Inp1和原来逻辑电路一样,还是输入1/0的逻辑信号。 )

我们先来看AND门:AND其实很简单,因为只有当Inp0和Inp1都是1的时候,AND的结果才会是1。我们很快发现,一个乘法门可以完美的代替AND门:只有当两个输入是1的时候,相乘得到的结果才会是1。

解决了AND之后,我们来转换NOT:NOT其实也非常简单,因为输入信号只会是0或者1,只要用1减去输入的信号,得到的结果就是相反的了。注意有一个问题是,因为我们只有加法和乘法,所以如果需要实现减法的话,我们需要先把输入信号乘上一个常数-1。
在这里插入图片描述
经过如此转换,我们就成功的把一个逻辑电路转换为数字逻辑电路了。同时因为我们已经知道如何组建AND和NOT了,理论上我们就可以把这两个部分模块化,拼接任意的复杂逻辑出来。

看到这里,你可能会觉得运算电路非常简单,和逻辑电路转化也非常直白。但是其实这是因为我们一直在假设运算电路的输入和逻辑电路一样,都是0或者1。在真实场景下,一个运算门的输入值可能上限非常大(取决于我们有限域选择的大小)。所以我们必须要想办法约束我们运算电路的输入,使其不仅能够在功能性上和逻辑电路相同,并且在输入取值上只可以取[0,1]这两个数字。

但是怎么用运算门来表示这么一个关系呢?因为数学运算电路其实就是一个复杂的多项式(比如上图的NAND电路就变成了Out = 1 - Inp0 * Inp1),我们可以把这个问题转化一下:**能否创造出一个多项式,只有当一个输入满足[0,1]的取值范围的时候,才会输出0?**最后我们发现,有这么一个多项式可以满足这个要求:
在这里插入图片描述
上面这串表达式的意思是,只有当数字n取值于[0,1

零知识证明(Zero—Knowledge Proof) 零知识证明(Zero—Knowledge Proof),是指一种密码学工具,允许互不信任的通信双方之间证明某个命题的有效性,同时不泄露任何额外信息。 阅读详情

相关推荐

零知识证明:应用和具体用例

零知识证明(Zero-KnowledgeProofs,ZKPs)是应用密码学中令人兴奋的突破,将在各个行业中解锁新的用例,从Web3到供应链再到物联网。通过在不揭示信息的情况下验证其真实性,ZKPs可以增强数字系统的隐私、安全性和效率。本文将探讨ZKPs的基础知识和正在出现的潜在用例。

ChainlinkO的博客 3166

【区块链】零知识证明:加密世界的隐私守护者

零知识证明代表了密码学和隐私保护技术的前沿。它不仅为区块链提供了强大的隐私保护机制,还为未来的去中心化应用开辟了新的可能性。随着技术的不断发展,我们有理由相信零知识证明将在构建更安全、更私密的数字世界中发挥关键作用。

鑫宝的博客 7685

深入浅出零知识证明(二):zkSNARKs基本原理

前言 本文开始对零知识证明应用最广泛的技术——zkSNARKs进行介绍,本文主要介绍其原理与流程,其中应用到的密码学知识和工具很多,本人能力有限,尽量做到阐述清晰,如有错误欢迎讨论。 零知识证明学习起来难度就很大,是数论、密码学、抽象代数的综合应用,它引入的概念、符号会让人眼花缭乱。V神在一篇介绍零知识证明的文章中就提醒读者看不懂也不要怀疑自己的智商,因为“它实在是太难了!” 因此,能坚持搞懂的,一定是意(固)志(执)力有异常人。所以在学习过程中要保持耐心,慢慢来。 ...

CNFINITE的博客 1万+

零知识证明学习资源汇总

摘要:本文收集整理了关于零知识证明的一些学习资料,希望能对大家有所帮助。

SECBIT区块链安全实验室 3702

零知识证明(zk-SNARK)- groth16(一)

全称为 Zero-Knowledge Succinct Non-Interactive Argument of Knowledge,简洁非交互式零知识证明,简洁性使得运行该协议时,即便 statement 非常大,它的 proof 大小也仅有几百个bytes,并且验证一个 proof 的时间可以达到毫秒级别。这是一个通用的零知识证明协议,可以用作各种证明,如范围证明。

Amire0x的小乐园 2364

零知识证明 Learn by Coding:libsnark 入门篇

本文作者:p0n1@安比实验室 libsnark 是目前实现 zk-SNARKs 电路最重要的框架,在众多私密交易或隐私计算相关项目间广泛应用,其中最著名当然要数 Zcash。Zcash 在 Sapling 版本升级前一直使用 libsnark 来实现电路(之后才替换为 bellman)。毫不夸张地说,libsnark 支撑并促进了 zk-SNARKs 技术的首次大规模应用,填补了零知识证明技术从...

SECBIT区块链安全实验室 2925

零知识证明详解

我们在提到区块链的隐私计算和数据加密交互时,总会提到零知识证明,那么,这个究竟是什么呢? 零知识证明的概念 从“零知识”一词中,我们便可以看出,它对于信息的需求度是“零”,即证明方可以不用透露任何具体的信息便可以向验证方证明加密转态下的数据是真实可信的。 传统互联网中为了使数据能够更好的交互,是处于公开的状态,一旦数据加密,那么在交互时便需要先解密再交互。数据交互效率和隐私性不能同时满足。零知识证明的产生,便是实现数据可用而不可见,在保证数据隐私性的同时,还能保证数据交互效率。 目前的零知识证明主要有两种

xfilesystem的博客 6112

PHP接单涨薪系列(133):零知识证明联邦学习,基于zk-SNARK的模型验证与审计

本文提出基于zk-SNARK的联邦学习模型验证系统,解决跨机构协作中的隐私与信任矛盾。系统通过Groth16协议实现零知识证明验证,结合CUDA加速将证明时间压缩至毫秒级。关键技术包括zk-SNARK电路设计、PyTorch模型转换和智能合约验证,为医疗、金融等高敏感场景提供生产级方案。实施流程涵盖需求诊断、方案设计和部署优化三阶段,支持差异化的阶梯式报价策略,满足不同客户在隐私合规、反作弊保障和性能优化方面的核心需求。

专注分享PHP、python、AI、web前端等知识 2112

零知识证明系列概述—从初探到 zk-SNARK 入门【9】

一、初探零知识证明 前言 区块链的发展可谓是日新月异,分布式账本,哈希函数,merkle tree,公钥算法,p2p网络,共识机制,智能合约等等很高大上的名词相信大家一定都不会很陌生。区块链像一个有机体,融合了各种不同的理论技术。零知识证明是构建信任的重要技术,也是区块链这个有机体中不可缺少的一环。 抛砖引玉的小故事 大家一定对数独游戏不陌生。数独游戏就是有一个9×9的盘面。我们要根据盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个粗线宫(33)内的数字均含1-9,不能重复。

smilejiasmile的博客 2270

工控安全政策系列导读:国际标准IEC 62443标准系列

IEC 62443由ANSI/ISA提出,被ISO/IEC采纳,所以该标准会以不同的名字出现,包括:ANSI/ISA-99,ISA-99,ISA 62443,ISO/IEC 62443,ISO 62443,IEC 62443。其中IEC 62443-2-1已等同采纳为国标,于2016年10月发布,标准编号为GB/T 33007。 IEC 62443是在国...

weixin_34132768的博客 2620

(SCADA)监控与数据采集系统

SCADA应用于监控和采集数据来控制工业过程软件。它通过收集和传输实时数据,帮助操作员监视和控制各种设备和过程。

软件技术的专栏 4541

数据安全实战技能解析:从加密攻防到数字水印的竞赛指南

数据安全是信息安全领域的核心,其基础在于密码学与信息隐藏技术。密码学通过加密算法(如AES、RSA)和哈希函数,保障数据的机密性与完整性,其原理涉及对称/非对称加密、工作模式及密钥管理。数字水印技术则基于信号处理(如DCT/DWT变换),将信息嵌入多媒体载体,用于版权保护与溯源。这些技术的价值在于为数据全生命周期提供“防泄漏”与“可追溯”的解决方案,广泛应用于企业数据治理、合规审计和**数据防泄漏(DLP)** 系统。本文以一场贴近实战的**数据安全职业技能竞赛**为切入点,深入剖析如何运用密码分析、磁盘取

weixin_34314962的博客 402

MaxEnt运行报错的各种问题及解决方法

由于我使用的环境数据并不是大部分人常用的worldclim上下载的气候数据,而是使用不同的四类环境数据,分别包括:降雨数据、气温数据、氮沉降数据和大气CO2浓度数据,数据需要分别从不同的网站下载,因此并不能得到非常一致的数据文件,导致MaxEnt运行时出现了各种各样的错误。文件终于能够读取了,然而计算到一半又弹出第三种问题,根据弹出的报错提示,找到错误所在那一行,用Notepad++打开,可以发现,这一行确实存在nan值,导致文件读取无法正常进行。出现上图所述的问题时,检查环境变量是否具有相同的行列号。

guye322的博客 1万+

全网首发--Unet3+改进16:在不同位置添加RepLKBlock超大卷积核

本文提出了一种基于大核卷积的神经网络架构RepLKNet,旨在缩小CNN与ViTs之间的性能差距。通过重新审视CNN中的大核设计,研究证明使用少量大卷积核替代多个小核能获得更强大的性能。提出的RepLKNet采用31×31大卷积核,在ImageNet和下游任务上取得了与SwinTransformer相当或更好的结果,同时具有更低延迟。文章详细介绍了实现步骤:(1)创建RepLKBlock模块文件;(2)在模型层中添加注意力机制;(3)在UNet模型中集成RepLKBlock;(4)完成训练流程。该方法展现了

AIcurator的博客 609

仿真学习系列(三十):Sigrity设计文件(Altium Designer和Allegro)导入

很多刚接触 Sigrity 的工程师都会产生疑问:Sigrity 功能这么多,是不是门槛很高?我能学得会吗? 其实,Sigrity 的核心并不在“操作难”,而是在“理解仿真背后的机理”。一旦掌握基本流程,你会发现它并没有想象中那么复杂,反而能大大提升你的高速设计能力。本节内容,就是从最简单的一步开始 —— 把你的设计文件正确导入 Sigrity。

案例文章,高速信号 520

YOLO系列算法改进 | 主干改进篇 | 替换LSKNet主干特征提取网络 | 通过动态调整感受野自适应融合长程上下文,显著提升小目标与复杂背景下的检测精度!

YOLO系列算法改进 | 主干改进篇 | 替换LSKNet主干特征提取网络 | 通过动态调整感受野自适应融合长程上下文,显著提升小目标与复杂背景下的检测精度! (以YOLO26最新目标检测模型为基础,利用LSKNet替代Backbone)

2502_91881744的博客 210

数学建模算法案例精讲500篇-【深度强化学习】深度确定性策略梯度(DDPG)(附MATLAB和python代码实现)

它是一种学习连续动作的无模型策略算法。它结合了DPG(确定性策略梯度)和DQN(深度Q网络)的思想。它利用DQN中的经验重放和延迟更新的目标网络,并基于DPG,可以在连续的动作空间上运行。# 用于生成带有噪声的动作def __init__(self, action_space, mu=0.0, theta = 0.15, max_sigma = 0.3, min_sigma = 0.3, decay_period = 100000):#decay_period要根据迭代次数合理设置# 均值 mu。

qq_36130719的博客 323

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

上一篇: 零知识证明学习笔记:背景与起源
下一篇: 零知识证明 Learn by Coding:libsnark 入门篇
安比实验室SECBIT
博客等级 码龄9年 169粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值