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

数据测
• 阅读 1089

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

什么是零知识证明?

零知识证明(Zero-Knowledge Proofs,ZKPs)是一种密码学技术,允许一方(证明者)向另一方(验证者)证明一个陈述是真实的,而不揭示任何额外信息。换句话说,使用 ZKP 是一种在不揭示所知内容的情况下证明你所知道的东西的方式。

例如,想象一下你想向某人证明你是一个国家的公民,而不给他们你的姓名或护照号码。通过基于 ZKP 的身份解决方案,你可以证明自己是公民,而不需要揭示你的身份。

除了身份,ZKPs 可以在各个行业中用于增强各种系统的隐私、安全性和效率。

零知识证明:应用和具体用例
零知识证明如何在不向另一方揭示数据的情况下证明对数据的知识的概念示例。

零知识证明的应用和用例

去中心化身份

零知识证明可以用于验证个人的身份,而不揭示任何敏感个人信息。用户可以简单地验证自己符合某些标准,例如去中心化身份验证用户是某个国家的公民,而无需分享姓名或护照号码。基于 ZKP 的身份协议可以使个人更好地掌控自己的个人数据。

例如,一个 DeFi 应用可能需要检查用户是否来自某个特定组织的国家。传统上,用户必须提供护照或驾驶执照来验证身份和位置,通常需要几天的处理时间。相反,该应用可以使用基于第三方ZKP的身份协议,使用户能够验证自己来自一个在允许名单中的国家,而无需揭示个人详细信息,甚至无需揭示具体的国家。

这使得用户能够保护自己的隐私,防止身份盗窃和欺诈,并减少对密码的依赖,因为密码容易受到钓鱼和凭证填充(撞库)等攻击。它还减轻了组织持有和保护有价值用户数据的责任,这使它们成为网络攻击的目标,并需遵守严格隐私法规。

最终,ZKP 可以实现更加细致的身份解决方案,从而更好地保护用户隐私,同时使应用程序更容易满足监管机构的合规要求。

保护隐私交易

零知识证明使得区块链节点能够在无需访问交易数据的情况下验证交易,这意味着用户可以在保护隐私的区块链网络上发送交易。

通过发布交易有效性的证明,而不是实际的交易细节,零知识证明可以对验证节点和公共区块链账本隐藏发送者和接收者的地址、交易金额和智能合约代码。无论是外部第三方还是用户进行交易的对手方,都无法看到交易的全部细节。

在公开的网络中,匿名支付对用户起着重要作用,它们可以通过隐藏个人财务细节来防止欺诈和身份盗窃,私下支持慈善事业,否则可能会引起公众的反对,并创造出与使用现金进行交易更相似的数字金融体验。

安全和具备可扩展性的二层网络 Rollups

零知识证明:应用和具体用例
使用不同的零知识解决方案的 ZKP 项目示例。

过去,提升区块链网络扩展性以满足主流人群的使用一直是一个挑战。随着对第1层区块空间的需求增加,导致网络拥堵和高交易成本,进而降低需求并减缓了 Web3 的增长。

作为 2 层网络扩展解决方案的一种形式,零知识 rollup 可以通过将计算和状态存储移至链下来帮助克服这些挑战。零知识 rollup 可以批量处理或“roll-up”数千个交易,然后发布一个零知识证明在 1 层区块链上验证交易的正确性。这些证明所需的空间远远小于完整的交易数据,有助于减轻 1 层网络的拥堵问题,同时创建一个具有高吞吐量和低交易成本的高度安全的环境。

虽然其他的 2 层网络解决方案,如 optimistic rollup,也可以增加可扩展性,但零知识解决方案具有更快的最终性(finality)。optimistic rollup 可能需要几周的时间来确保交易不能被撤销或取消,而零知识 rollup 在其有效性证明发布到 1 层区块链后就被确认。这使得用户能够立即从 2 层网络提取资金或非同质化通证(NFT),提高资本效率。

最终,零知识 rollup 使开发人员能够构建超高可扩展性的应用程序,以低成本为数百万用户提供服务,同时维护 Web3 的安全性。

投票系统

零知识证明可以用于创建高度安全和可验证的投票机制,使个人能够投票而不会暴露身份或透露他们投票给谁。

在传统的投票系统中,用户必须提供身份以便进行投票,并且管理员负责保持他们的身份和投票结果的保密。而使用基于零知识证明的投票协议,个人根本不需要首先透露自己的身份。他们可以简单地使用零知识证明来证明自己拥有有效的文件,例如政府签发的护照。

使用零知识证明进行投票验证还可以增强投票系统的完整性。这使选民能够独立验证他们的投票是否被记录在选举总数中,同时不向任何其他人透露他们的选票偏好。零知识证明的验证还使独立的审计人员能够验证选举过程是否公正,并且选举结果是准确的。

物联网(IoT)

零知识证明:应用和具体用例
将物联网数据和设备作为防篡改的真实数据源,实现真实数据的端到端传递。

通过物联网技术,越来越多的设备连接到互联网,使它们能够发送和接收数据并采取自主行动。当警报系统感应到入侵时,可以自动拨打警察电话,冷却系统可以在你手机 GPS 接近家时自动启动,可穿戴设备可以实时跟踪你的健康状况。零知识技术可以在保护这些设备和保护用户隐私方面发挥关键作用。

基于零知识的协议可以帮助验证物联网设备的软件更新是否来自授权的制造商,确保只有授权设备可以访问网络或用户数据,并实现设备之间的安全通信。通过减少需要传输和处理的数据量,零知识证明还可以显著降低物联网设备的能源需求,提高效率并降低成本。

供应链

在现代经济中,证明货物和材料的来源和真实性,并满足合规标准是供应链的关键部分。然而企业既希望保护其商业机密和流程,包括供应商和客户的身份。

通过使企业能够保持某些信息的私密性,同时验证其真实性,零知识证明可以帮助在供应链更加透明。例如,零知识证明可以使审计员能够验证货物的运输和储存是否正确,而不透露任何其他信息;企业可以向监管机构证明他们遵守环境或劳工标准,而不透露有关其运营的敏感信息;最终用户可以验证输入的来源,而不需要了解整个供应链的所有细节。

总结

零知识证明将重新定义我们对数据管理的认识,使用户能够满足合规要求或验证特定信息,而无需暴露个人详细信息或商业机密。我们已经看到在区块链领域中零知识解决方案的采用,它们有助于扩大生态系统并提升用户隐私。最终,增强数字系统的隐私、安全性和效率将在区块链网络、投票系统、供应链和许多其他行业产生广泛影响。

欢迎关注 Chainlink 预言机并且私信加入开发者社区,有大量关于智能合约的学习资料以及关于区块链的话题!

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
4年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Peter20 Peter20
4年前
mysql中like用法
like的通配符有两种%(百分号):代表零个、一个或者多个字符。\(下划线):代表一个数字或者字符。1\.name以"李"开头wherenamelike'李%'2\.name中包含"云",“云”可以在任何位置wherenamelike'%云%'3\.第二个和第三个字符是0的值wheresalarylike'\00%'4\
Wesley13 Wesley13
4年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
4年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
4年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
Stella981 Stella981
4年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
2年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这