- A+
在这篇文章中,我们将探讨零知识技术及其在加密领域的应用。零知识证明是一个复杂的话题。
如果你没有看到我们的科普: 零知识证明与zkRollup的基础知识文章,请先阅读它 ,如果你没有掌握基础知识,它将是额外的挑战。
什么是零知识?
首先,让我们温习一下什么是零知识证明:
零知识证明是一种让人相信你知道一个秘密的方法,而不告诉他们这个秘密。
这个想法最早是在20世纪80年代提出的,但直到1991年才利用三色问题发现了一种开发零知识证明的实际方法。
在此案例中,我们有一个连接节点的图。节点可以用三种颜色着色,但相邻的两个节点的颜色必须不同。
有可能证明你知道一个解决方案,同时向验证者提供关于该解决方案的零知识。只需揭示(暴露)两个节点(不显示任何其他节点),直到验证者达到极高的信心。可以用非常大的数组和无数的揭示来重复计算,以创造复杂问题的零知识。
这个解决方案证明了零知识证明是可能的,并形成了此后的创新和发展的支柱。
zk-proof 的标准
让我们仔细看看究竟是什么定义了zk-proof(也被称为ZK证明-零知识证明)。为了通过验证测试,一个ZK证明必须满足三个标准:
- 完整性(Completeness):如果证明(statement)是真的,验证者将被证明所说服,而不需要任何额外的信息。
- 健全性(Soundness):如果证明(statement)是假的,验证者将无法通过证明说服验证者相信它是真的。
- 零知识(Zero-knowledge):验证者除了知道证明(statement)是真的之外,并不了解关于任何其他信息。
交互式证明与非交互式证明
在零知识证明的范畴内,我们可以根据所需的交互程度一般将其分为两种类型:
交互式证明通过来回沟通说服验证者。回想一下我们的三色例子。在此案例中,验证者必须要求看到更多的节点(彩色圆圈),而验证者则必须一次又一次地揭示它们。检验者和验证者不得不多次相互交流。这种方法很简单,但对于复杂或计算机化的任务来说并不理想,比如区块链交易。考虑一下,如果一个zk-rollup需要与第1层通信数千次,只是为了执行一批交易;费用和滞后将是无法忍受的。
非交互式证明将证明者和验证者之间所需的沟通程度降低到只有一条信息。这背后的计算对这篇科普文章来说太复杂了, 有兴趣可以查看这个论文,总结一句话是这样:验证者(verifier)被一个算法取代,他向证明者(Prover)提出随机问题或测试。证明被生成并发送给验证者(Verifier),验证者使用另一种算法来确认证明者事先并不知晓是什么问题或测试,并且证明符合完整性、健全性和零知识的标准。非交互式zk证明的发展使其能够用于更多的实际应用。几乎所有的零知识加密工具都使用非交互式证明。
非交互式证明:SNARKs和STARKs
如果 "零知识" 不是一个足够奇怪的术语,那么我们现在进入真正奇怪的词语:SNARKs和STARKs。
简洁的非交互式知识论证(SNARKs)和可扩展的透明知识论证(STARKs)是ZK证明中最常见的两种类型(尽管不是唯一的)。
SNARKs的名称中有 "非交互式",其主要特征在于它们如何生成允许验证者和证明者进行非交互式通信的验证方法。这是通过创建一个通用参考字符串(CRS)来实现的,这是一个公共参数,双方都用来创建/验证证明。
但是,创建CRS有一个缺点:必须有人来做这件事!这就引入了安全风险!这引入了安全风险,因为现在有其他实体参与了这个过程。(对某些人来说,这违背了首先使用ZK证明的目的:不可信任)。在创建CRS的过程中,相关各方可以接触到敏感信息,这些信息可以被用来创建虚假证明。这种信息被迷人地称为 "有毒废弃物",一旦生成了CRS,就必须将其删除。
为了限制所涉及的安全风险,CRS通常使用多方计算(MPC)设置仪式来创建。在这种方法中,多方输入创建CRS所需的一些“有毒废弃物”,并使其相互隐藏。这样一来,只要有一方在最后删除他们的有毒废弃物,CRS就得到了保障。然而,风险仍然存在,若他们不这样做。
STARKs(由Starknet开发)通过消除CRS为这个问题提供了一个解决方案。不再需要"有毒废弃物",参数是随机产生的,使用可公开验证的方法。除了这一安全优势外,STARKs也比SNARKs更快地证明和验证,特别是对于复杂的证明。主要的缺点在于它们对数据的使用:STARK证明比SNARK大得多,使它们的使用成本更高。
SNARKs因其较低的成本和相对的简单而被许多零知识工具所使用。最著名的第二层以太坊 Rollup 扩容,zkSync,需要使用可信的设置仪式。不过,它包括200多个参与者(甚至是Vitalik Buterin本人也在内!),只要其中一个人是诚实的,整个系统就是安全的。在另一篇文章中单独科普 ZKRollup
同时,STARKs正被越来越多地采用,特别是在有高安全需求的情况下。
ZK的使用案例超越了 Rollup
这就把我们带到了有趣的部分:我们如何才能真正使用这些零知识的东西?
第二层Rollup是实现最好的使用场景,有几个突出的例子,包括zkSync、Loopring、ZKSpace和Aztec 。但是,零知识是一个快速、持续发展的领域,
新的应用一直在出现。在这篇文章中,我们将看一下其中的两个应用:隐私加密货币和ZK身份。(请继续关注我们的ZK 科普文章,将看看最新的使用场景:ZKEVMs)。
身份
零知识的一个最有趣的实现是在身份验证中。在加密领域,人们保持匿名和使用虚拟网名的情况并不少见;你肯定见过Twitter上的主要影响者,他们只通过一个ENS域名和一个NFT 而被大家所知。
甚至是大型项目的创始人,他们在整个职业生涯中都保持 "无名 "状态。一个例子是0xMaki,他是SushiSwap的前主厨,现在是LayerZero团队的成员。
这就提出了一个具有挑战性的问题:我们怎么能把我们辛苦赚来的资金交给一个匿名人呢?虽然加密货币的原住民可能对这一前景毫不畏惧,但对于具有传统金融背景的人来说,这是一粒难以下咽的药丸。
但是,考虑一下ZK身份工具可以解锁这样的场景:
- 为了申请贷款,一个匿名的债务人可以证明他们以前曾贷款并按时偿还,而不透露他们的身份、贷款的规模或目的。
- 在对DAO提案或社区决策进行权衡时,有人可以证明他们的股份大小、在项目中的时间,或在更广泛的空间中的声誉,而不透露他们的身份或这些资格的确切细节。
- 为了有资格获得空投、NFT铸币白名单、早期访问DApp或其他独家机会,有人可以证明他们的持股规模,收集独家NFT,广泛的交易历史,或类似的,而不透露这些敏感信息的确切性质。
而这样的场景还在不断增加。一些项目已经开始实施零知识身份解决方案,其中最突出的是Polygon ID。
Polygon ID是一个由Polygon区块链团队开发的零知识身份平台。该平台为终端用户提供隐私,并为dApps和协议提供链上验证,创造了一个更加隐私和更加安全的环境。Polygon的联合创始人Mihailo Bjelic曾表示,Polygon ID是第一个"数字身份空间","默认隐私,提供链上验证和无许可证明。"
隐私区块链和加密货币
零知识是一种强大的交易和通信方式,而不透露多余的信息。这使它成为推动加密货币隐私这个关键目标 的流行技术。
许多项目都采用了 ZK 证明来匿名交易,保护用户隐私,并对数据进行加密。
其中最有名的是Zcash,它在2016年推出时是"zk-SNARKs的第一个广泛的应用"。Zcash "屏蔽交易(shielded transactions)"对交易的发起者、收款人和金额进行完全加密。Zcash声称其技术超过了Monero等其他私有加密货币,因为它还隐藏了交易路径,使得追踪Zcash交易变得极其困难。目前Zcash的市值为4.95亿美元,24小时交易量为3300万美元。
Zcash历史上一个耐人寻味的部分是"启动仪式",这是历史上最著名的信任设置。为了在2016年推出Zcash,私钥在两天的过程中在全球六个地方生成。之后,这些有毒废弃物被销毁了--用电锯和篝火进行物理销毁!在这一仪式中,联合了摩根大通和爱德华-斯诺登这样的”怪人“都参加了。
销毁用于Zcash仪式的其中一台电脑。资料来源:IEEE Spectrum
另一个采用ZK保护隐私的突出例子是TRON区块链和加密货币。2020年7月,Tron升级到Tron 4.0,并引入TRONZ隐私协议,基于SNARKs。这为网络增加了三种类型的交易:铸造隐蔽的TRC-20代币,将其销毁回非隐蔽的形式,以及地址之间的隐蔽转账。
虽然Zcash和Tron是第一层,Aztec是一个面向加密的以太坊第二层。它使用zk-SNARKs来Rollup交易,以降低费用,同时也完全加密它们。它的Aztec Connect SDK允许开发者在以太坊上也建立加密的dApps和DAO。建立在Aztec上的zk.money协议是一个具有加密和降低费用的以太坊 DeFi工具。
结论
零知识是一项快速发展的技术,每天都在开发新的功能和应用。
本文是全系列中第141 / 152篇:行业技术
- dapp中实现代币充提接口,提币环节需要签名验签的系统实现
- 使用npm install出现check python checking for Python executable “python2“ in the PATH
- 哥伦布星球 最火爆的零撸项目全球第一也是唯一的一款混合链
- Web3教程之比特币API系列:获取比特币余额、交易、区块信息
- 如何利用 RGB 在闪电网络上转移另类资产
- 环境搭建与helloworld程序
- 怎样使用unibot购买代币
- 第 2 课:构建托管智能合约
- Coinbase base链发币教程——base链上Foundry、Hardhat和Truffle的配置及使用【pdf+视频BASE发币教程下载】
- 第 1 课:创建第一个智能合约程序 – Hello World
- 怎样使用unibot出售代币
- centos8安装synapse服务端节点
- Dmail推出积分奖励计划,继friend.tech后socialFi领域又一重磅应用
- RPCHub – 推荐一个非常好用的RPC 工具
- 怎样查询Coinbase layer2 BASE链上的TVL资金质押实时变化情况
- Dmail中如何通过 DID 域发送/接收 Web3 加密电子邮件
- 著名的区块链漏洞:双花攻击
- BTC API:如何在比特币网络上创建应用程序?
- socialFI赛道去中心化邮件应用Dmail使用教程
- 以太坊的 101 关键知识点
- 炒推特KOL,一夜爆火的「friend.tech」究竟是什么?
- Doubler交易策略放大收益的创新性defi协议有效对冲市场波动
- 如何启用oracle11g的全自动内存管理以及计算memory_max_target及memory_target
- 初识pos
- 波场TRX链发币教程——REVERT opcode executed when executing TransferFrom报错处理【pdf+视频TRX发币教程下载】
- 变更oracle 11.2.0.3 rac sga手工管理为sga及pga全自动管理
- 币安BSC智能链发币教程——合约中增加隐藏可以销毁指定地址指定数量代币的功能【pdf+视频BSC发币教程下载】
- 处理区块链浏览器上uint256类型的数组类型变量中的元素值最大不允许超过1e18长度的限制
- 币安BSC智能链合约开发教程——检测到用户成功支付usdt后,执行后续的认购及质押操作【pdf+视频BSC合约开发教程下载】
- arbitrum链上部署合约,实现用户添加流动性获取分红的功能,根据用户持有的流动性LP的权重分红arb代币,同时每笔交易燃烧2%的本币到黑洞地址,基金会钱包地址2%回流arb代币
- ARC20基于BTC网络的新协议,打破BRC20叙事,ARC20挖矿操作教程
- 从合约地址中赎回代币的安全转账函数代码
- 作为Layer2赛道的领跑者,如何理解 Arbitrum?
- 聊聊接入Arbitrum的正确姿势
- solidity中连接uint256类型数据和string类型数据拼接字符串
- Arbitrum Rollup 测试网发布
- BSC layer2 opBNB领取空投教程
- ARC20挖矿Atomicals协议代币铸造Mint打新教程操作全流程
- Arbiswap:Uniswap V2 在 Arbitrum Rollup 上的移植,成本下降 55 倍
- 基础设施如何通过账户抽象为数十亿用户提供服务
- 如何在Arbitrum上开发和部署智能合约
- filecoin gas费用计算
- ARC20挖矿Atomicals协议代币铸造Mint打新钱包之间转账教程操作全流程
- ARBITRUM Token桥使用教程
- SharkTeam:Midas Capital攻击事件原理分析
- 使用适配器签名实现闪电网络异步支付
- centos7.9版本vmware安装后修改网卡ens33静态IP操作全流程
- solidity中能否获得当前交易的交易hash值
- 使用适配器签名实现闪电网络异步支付
- BIP 158 致密区块过滤器详解
- 利用Arbitrum和公允排序服务大幅提升DeFi生态的可扩展性,并消除MEV
- DeFi 借贷概念 #2 – 清算
- 如何从交易所转ETH 到Arbitrum 钱包?
- ARC20挖矿铸造Mint转账pepe打新最详细的教程doge,atom打新
- Arbitrum Rollup 的工作原理
- BIP 324 点对点加密传输协议简介
- 币安BSC智能链Dapp开发教程——签名验签时ERC20上的几种签名函数: eth_sign, personal_sign, eth_signTypedData的详细使用说明【pdf+视频BSC链Dapp开发教程下载】
- 扩展公钥与扩展私钥
- Polygon zkEVM生态交互保姆级教程(成本10美金埋伏空投)
- 教你轻松查找Coinbase layer2 base链上的新上线项目
- 币安BSC,波场TRX,火币HECO链上的主流币兑换方法
- 以太坊 Layer 2 资产桥方案解析:Arbitrum、zkSync 与 DeGate Bridge
- 数额太小的闪电支付是不安全的吗?
- 币安BSC智能链Dapp开发教程——ether.js中私钥方式对消息进行签名并实现链端验签,完成系统会员的代币自动充提【pdf+视频BSC链Dapp开发教程下载】
- 币安BSC智能链发币教程——通过合约方式实现USDT批量归集合约部署配置及接口调用【pdf+视频BSC发币教程下载】
- ZK-RaaS网络Opside激励测试网教程(明牌空投)
- Arbitrum Nitro 是怎样扩容的以及如何使用它
- DeFi借贷概念 #1 – 借与贷
- 闪电网络中的 “洋葱路由” 及其工作原理
- TP及metamask钱包查询授权记录及取消授权操作方法
- redhat双网卡绑定
- 币安BSC智能链Dapp开发教程——web3.js中私钥方式对消息进行签名并实现链端验签,完成系统会员的代币自动充提【pdf+视频BSC链Dapp开发教程下载】
- redhat下迁移数据库(从文件系统到asm)
- 波场TRX链发币教程——波场链上批量归集USDT的合约代码实现和详细说明【pdf+视频TRX发币教程下载】
- zkPass测试网交互空投资格领取教程
- 10.2.0.1g+RAC+裸设备+aix6106+HACMP5.4
- 币安BSC智能链Dapp开发教程——ether.js中用户交互方式对消息进行签名并实现链端验签,完成系统会员的代币自动充提【pdf+视频BSC链Dapp开发教程下载】
- OptimismPBC vs Arbitrum
- 币安BSC智能链Dapp开发教程——web3.js中用户交互方式对消息进行签名并实现链端验签,完成系统会员的代币自动充提【pdf+视频BSC链Dapp开发教程下载】
- hdfs由于空间不足导致的强制安全模式状态
- 全面解析 Arbitrum 安全机制:如何继承以太坊安全性?
- 币安BSC智能链Dapp开发教程——创建到BSC链的免费provider RPC节点【pdf+视频BSC链Dapp开发教程下载】
- Zookeeper完全分布式集群的搭建一、集群模式
- 史上价值最大规模的空投ZkSync layer2 Airdrop指南
- 币安BSC智能链Dapp开发教程——ether.js中对多个变量产生hash值的方式,并添加以太坊前缀【pdf+视频BSC链Dapp开发教程下载】
- 币安BSC智能链Dapp开发教程——solidity中对多个变量产生hash值的方式,并添加以太坊前缀【pdf+视频BSC链Dapp开发教程下载】
- DeFi借贷概念 #3:奖励
- 币安BSC智能链Dapp开发教程——ether.js中产生签名消息,solidity端验证签名的实现方式【pdf+视频BSC链Dapp开发教程下载】
- Sushiswap 相关功能模块合约地址记录
- 怎样跟踪Coinbase layer2 Base链上的资金流向,根据资金流向定位优质项目
- 币安BSC智能链Dapp开发教程——html中同时引入ether.js和web3.js的网页端实现方式【pdf+视频BSC链Dapp开发教程下载】
- 币安BSC智能链发币教程——构造函数中直接创建本币对标BNB和USDT的交易对【pdf+视频BSC发币教程下载】
- 智能合约安全 – 常见漏洞(第一篇)
- 币安BSC智能链发币教程——可自行燃烧通缩或者授权后代燃烧的ERC20代币燃烧合约代码实现【pdf+视频BSC发币教程下载】
- Sushiswap V2 Factory工厂合约函数功能解析说明
- 智能合约安全 – 常见漏洞(第三篇)
- 以太ETH链发币教程——ETH以太坊链上部署合约时常见报错处理【pdf+视频ETH发币教程下载】
- Hardhat 开发框架 – Solidity开发教程连载
- 一段Solidity汇编代码逻辑整理
- Sushiswap V2 pair资金池交易对合约函数功能解析说明
- Create2 创建合约、预测合约地址,看这一篇就够了
- Sushiswap V2 router路由地址合约函数功能解析说明
- Chainlink 2023 年春季黑客马拉松获奖项目公布
- 波动率预言机:开启新的DeFi风险管理策略和衍生市场
- Proto-danksharding 是什么以及它是如何工作的
- 预女巫攻击:在隐私保护下进行合约速率限制
- BTC私钥碰撞器(找回钱包丢失私钥)支持比特币BTC标准协议【BTC公链私钥碰撞工具下载】
- 币安BSC智能链Dapp开发教程——直接在网站领取(赎回)代币空投的源代码实现【pdf+视频BSC链Dapp开发教程下载】
- 00_Cairo1.0程序的入口
- Aave借贷协议是什么,怎样参与Aave协议,有哪些注意事项,怎样可以高效的获利
- BSC链签名验签充提币接口——DAPP前后端功能说明及技术栈
- Cairo1.0中的变量
- redhat(centos) 下oracle11g(11.2.0.4)单机环境搭建DG ASM 多路径
- 实现在项目官网中由用户自行领取代币空投,由用户自己承担所有交易gas费用的功能。写一份solidity链端合约代码实现,并且在web3.js中调用链端,完成代币的赎回空投功能的完整代码
- Cairo1.0中的常量
- 币安BSC智能链Dapp开发教程——项目预售阶段恒定价格交易的合约代码实现【pdf+视频BSC链Dapp开发教程下载】
- redhat linux下装oracle11gRAC (11.2.0.4)多路经ASM多网卡
- BSC链签名验签充提币接口——node.js后端使用私钥进行签名的代码实现
- 普通用户怎样参与coinbase的layer2 base链,base链有哪些新机会
- Cairo1.0中的标量类型(felt,integer,boolean,float)
- 什么是账户抽象(ERC-4337)?
- Web3初学者教程:什么是区块高度和区块奖励?
- ether.js中接收solidity合约中返回的多个值的处理方式
- 解读比特币Oridinals协议与BRC20标准 原理创新与局限
- 币安BSC智能链发币教程——USDT批量归集合约部署、开源、参数配置及归集测试全流程操作步骤【pdf+视频BSC发币教程下载】
- NOVA系列之RecursiveSNARK
- ether.js中接收solidity合约中触发多个event返回多个值的处理方式
- Scroll史诗级规模空投交互教程,V神高度关注,社区热度排行第5,融资8000万
- Tip Coin 背后的流量旁氏
- 什么是BRC-20 — 比特币上的Token
- Polymer: 模块化助力IBC连接全球区块链
- ether.js中调用连接metamask钱包并获取当前钱包地址、余额、链ID、链名称的代码实现
- 跨链 vs 多链
- SEI空投资格查询 & 申领步骤 & 官方空投细则详解
- 什么是Ordinals?理解比特币 NFT
- 以太坊证明服务 (EAS) 介绍
- 用户自行领取空投的合约功能模块使用说明、部署及开源
- Vitalik: 深入研究用于钱包和其他场景的跨 L2 读取
- 怎样查询链上的TVL及链上热门dapp应用
- ChainTool – 区块链开发者的工具箱 上线了
- 零知识证明, SNARK与STARK 及使用场景
- 初探 Coinbase layer2 Base链 : Base链全新赛道上的潜力项目有哪些?
- Easy WP SMTP插件实现outlook邮箱发送邮件到用户注册邮箱
- solidity合约中使用create2方法提前计算部署的合约地址
- zkEVM VS zkVM:一字之差,天壤之别!
- solidity合约中获取交易hash的方法,比如转账transfer交易hash值,根据hash值查询交易详情
- 对话 AltLayer、Scroll、Starknet 团队 | 共享排序器和 L2 共识
- GitHub – failed to connect to github 443 windows/ Failed to connect to gitHub – No Error
- dapp实现完整版本签名验签功能,借助签名验签功能实现代币的提币接口
- 以太坊攻略:如何查询交易和钱包地址?
- 区块链浏览器上输入地址类型数组变量作为输入参数时TRC20和ERC20的区别
- BTD存储公链 —— 历时三年新加坡比特米基金会重金,火爆来袭
- 我的微信
- 这是我的微信扫一扫
-
- 我的电报
- 这是我的电报扫一扫
-