零时科技 || Tornado Cash中merkleTree和zk-snarks

2023-11-04 03:20

本文主要是介绍零时科技 || Tornado Cash中merkleTree和zk-snarks,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

背景

Tornado cash是一个去中心化加密货币混合服务平台,使用智能合约来接受来自一个地址的代币存款,并允许他们从另一个地址提款。这些智能合约作为混合所有已存资产的池。一旦资金通过一个全新的地址从这些池中提取,链上源和目的地之间的链接已断开。然后将提取的加密资产匿名化。tornado cash中通过将merkle tree 与 zk-snarks结合使用实现存取款地址分离,从而实现匿名传送代币。

Merkle Tree

区块链中网络上产生所有的交易都要打包进区块,通常情况下,每个区块中包含成百上千个交易。而且由于区块链去中心化的特征,网络中每个节点都必须是独立的,因此每个节点都必须存储一个区块链的完整副本,当交易量逐渐增多时,区块中数据也越来越庞大,占据的空间也越来越多而且处理效率逐渐变低。因此提出了一个轻节点概念,轻节点只需要储存历史区块头而不需要保存整个区块链,通过merkle树证明判断交易是否在交易列表中。

Merkle Tree,通常也被称作Hash Tree,顾名思义,就是存储hash值的一棵树。默克尔树的叶子是数据块(例如,文件或者文件的集合)的hash值。非叶节点是其对应子节点串联字符串的hash。

 

如图,对要存储的数据生成hash值,这些hash值就是默克尔树的根节点,之后将相邻叶子节点的hash字符串连接起来再次进行hash运算,生成中间节点,继续向上运算,最终生成了一个根节点,这个根就是默克尔根。当任意节点的值改变时,merkle根的值随着改变。

对于merkle树来说,并不需要知道整棵merkle树中节点的值,如下图,当我想要证明Hk在集合中时,我只需要将Hl,Hij,Hmnop和Habcdefgh的值发送给证明函数,如果计算出的merkle根与存储的根相同则证明Hk在集合中。

 

Tornado cash 中 merkle tree使用

tronado cash中对于merkle tree的使用主要在存取款操作中,进行存款操作时会创建两个随机数,将这两个随机数通过Pedersen哈希处理后生成一个字符串commitment,将此字符串作为叶子节点插入默克尔树中,计算出merkle根的值后将merkle根返回给用户,作为之后取款时的验证凭证。

tornado cash中的merkle tree是一颗二叉树,阅读其代码可知,re-hashing操作的次数控制在log(n)以内,当原始树中叶子节点个数是奇数时插入后的树没有孤儿,原始树中叶子节点个数时偶数时插入后的树有孤儿,孤儿在第一个数据块。

 

如图所示,原始树中有两个叶子节点a,b,当插入新节点c时,判断叶子节点个数,为偶数,c与0值进行hash计算得到Hc,叶子节点个数除2,得到叶子节点的父节点个数1,判断节点个数为奇数,将Hc 与Hab 连接并计算hash值Habc ,此时Habc 为这颗merkle树的根,用户将这个根保存作为之后取款的凭证。

 

zk-snarks

zk-snarks全称为简洁的非交互式知识认证,也称零知识证明。它可以让你在不执行,甚至不知道执行的具体内容是什么的情况下就能够验证某个计算的结果是否正确。

举个例子,想象一下,你是盲人,我给你两个球,感觉完全一样,重量也一样。现在我告诉你这两个球的颜色不同。附近没有其他人。你怎么能知道我说的是不是真的呢?

你可以在每只手上放一个球,把它们展示给我看。现在你把它们放在你的背后,你要么在两只手之间交换球,要么不交换。然后你把它们拿给我看,并问我:'我是否交换了球?现在,如果两个球都是同样的颜色,将有50%的机会猜对。但如果连续答对了15次,你几乎可以肯定(99.997%的把握)说这两个球确实是不同颜色的。因为随机猜对15次,几乎不可能。

我现在已经向你证明了这些球是不同颜色的,但却没有透露实际的颜色,因此被称为 零知识 证明。你不知道这些球是绿色、黑色、橙色还是别的什么。

在区块链中zk-snarks是指可以为生成特定输出的计算提供相应的proof证明,使得验证proof的速度远远高于执行相应计算的速度,对于SNARK使用的变换,在语句被表述为函数之后,遵循下图的一般模式,即原始计算,代数电路,秩为1的约束系统,二次算数程序,线性PCP,线互式证明,最后生成零知识证明。

 

要生成 zk-snarks,您需要一个电路。电路类似于具有公共输入和输出以及私有输入的小程序。这些私人输入是您不为验证而透露的知识,这就是为什么它被称为零知识证明。使用 zk-snarks,我们可以证明输出可以从给定电路的输入中产生。

tornado cash 中 zk-snarks使用

tornado cash中取款操作需要用户提供一个note,如下图

 

这个note是由secret与nullifier通过zk-snarks电路在链下计算生成的,secret与nullifer是在链下随机生成的31字节长度的随机数。

tornado中,存款操作传入的参数commitment是由secert与nullifer串联产生一个62字节的数,通过Pedersen 哈希处理,生成的输出表示 Baby Jubjub 椭圆曲线的一个元素,编码为 32 字节大端整数。之后将commitment插入merkle树中得到merkle root。

 

在tornado cash中,取款操作时需要输入三个值,分别是proof,root,nulifierHash,proof为存款时在链下计算出的note值,root为存款时获得的merkle root,nulifierHash为生成的随机数。

nulifierHash作用是为了防止已经使用过的note再次使用,在进行证明proof之前,先确定传入的root值是否在merkle树中,之后验证proof是否正确,通过电路计算出一个root,将计算出的root与取款时输入的root比较是否一样,一样的话,将nullifierHash记录为true,证明我们已经领过款。

 

通过以上几步,我们就完成了一个零知识证明的过程,

总结

tornado cash中将merkle tree运用到零知识证明中,零知识证明中proof实际捆绑了凭证note,用户自己的merkle root,nullifierHash,资金接收者地址。取款合约中确保nullilierHash是未使用过的,以及用户提供的Root确实是自己知道的代表完整记录的Root。然后,合约将自己验证过的输入nullifierHash 和 root,以及用户方输入的proof recipient fee等输入Verifier合约。用零知识证明proof提供的路径确实能联通用户提供的nullifier和secret生成的commitment和提供的root,用户是这个commitment的拥有者。

这篇关于零时科技 || Tornado Cash中merkleTree和zk-snarks的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/342886

相关文章

从戴尔公司中国大饭店DTF大会,看科技外企如何在中国市场发展

【科技明说 | 科技热点关注】 2024戴尔科技峰会在8月如期举行,虽然因事未能抵达现场参加,我只是观看了网上在线直播,也未能采访到DTF现场重要与会者,但是通过数十年对戴尔的跟踪与观察,我觉得2024戴尔科技峰会给业界传递了6大重要信号。不妨简单聊聊:从戴尔公司中国大饭店DTF大会,看科技外企如何在中国市场发展? 1)退出中国的谣言不攻自破。 之前有不良媒体宣扬戴尔将退出中国的谣言,随着2

在亚马逊云科技上利用Graviton4代芯片构建高性能Java应用(上篇)

简介 在AI迅猛发展的时代,芯片算力对于模型性能起到了至关重要的作用。一款能够同时兼具高性能和低成本的芯片,能够帮助开发者快速构建性能稳定的生成式AI应用,同时降低开发成本。今天小李哥将介绍亚马逊推出的4代高性能计算处理器Gravition,带大家了解如何利用Graviton芯片为Java生成式AI应用提高性能、优化成本。 本篇文章将介绍如何在云平台上创建Graviton芯片服务器,并在Gra

本周(9 月 2 日 - 9 月 7 日)科技新闻

2024 Inclusion・外滩大会聚焦 AI 发展1: 各界大咖探讨了 AI 的智能进步规律、对产业的影响、与人类的关系等问题。比如 “互联网之父” 凯文・凯利认为现在的人工智能擅长回答已知问题,但不擅长提出新问题,未来人工智能能否进行复杂的多步思维链、回答未知问题是重要探索方向。对于 AGI 是否存在泡沫,百川智能创始人、CEO 王小川否认了这一说法,认为大模型发展符合预期,关键在于实现知识

springboot+dubbo+zk 入门篇(windows单机版)

一、下载安装zk注册中心并启动:     官网地址:http://www.apache.org/dyn/closer.cgi/zookeeper/     我的是zookeeper-3.3.6版本的。下载之后需要修改下文件:进入zk的conf目录。复制下zoo_sample.cfg     这个文件并重命名为zoo.cfg,然后把修改该文件内容,下面是我的,这个只是单机配置: # 心跳时间间隔

南卡科技“满分之选”全新开放式耳机发布,打造超越Pro的极致体验!

在音频技术的不断革新中,南卡品牌以其深厚的声学底蕴和对创新的不懈追求,再次为市场带来惊喜。今天,我们自豪地宣布,南卡OE Pro2开放式蓝牙耳机正式亮相,它不仅代表了南卡在开放式耳机领域的技术巅峰,更是对音质和佩戴舒适度的双重革新。 31°悬浮倾斜设计,无感佩戴的新高度 南卡OE Pro2将对耳机舒适性的诠释拉升到一个新境界,采用了开放式佩戴设计,彻底告别了传统耳机的堵塞感。基于上万耳

Banana Pi BPI-SM9 AI 计算模组采用算能科技BM1688芯片方案设计

产品概述 香蕉派 Banana Pi BPI-SM9 16-ENC-A3 深度学习计算模组搭载算能科技高集成度处理器 BM1688,功耗低、算力强、接口丰富、兼容性好。支持INT4/INT8/FP16/BF16/FP32混合精度计算,可支持 16 路高清视频实时分析,灵活应对图像、语音、自然语言等场景,可集成于智算服务器、边缘智算盒、工控机、无人机、AIOT等多种类型产品。 Banana

防封!数字人直播防封!铭顺科技AI数智人抖音直播防封落地方案!!

数字人直播防不防封? 数字人直播有没有流量? 数字人直播能不能落地? 这是目前所有想入局AI数字人赛道、想用数字人直播、想做数字人项目的老板们最担心、最关心的问题!但是,同行友商对此都噤若寒蝉,不敢跟客户说,怕客户知道!今天,铭顺科技帮您一次说清楚! 其实,对于抖音防封开播,我们铭顺科技早已有完整的直播防封解决方案!有图有真相,以下是我们铭顺科技数智人在抖音上稳定直播的

万界星空科技MES:企业实现数字化转型的护航者

万界星空科技在制造业管理软件领域,特别是MES系统上的技术实力和创新能力,为制造型企业实现数字化转型提供了全方位的支持和保障。   一、万界星空MES系统的核心功能 实时数据采集与分析: 万界星空科技MES系统通过物联网技术实时采集生产现场的数据,并利用云计算平台的强大计算能力进行快速处理和分析。这有助于企业及时发现生产过程中的问题并作出响应,提高生产效率和产品质量。资源分配与状态管理: 系

江协科技STM32学习- P11 中断系统,EXTI外部中断

🚀write in front🚀   🔎大家好,我是黄桃罐头,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​  💬本系列哔哩哔哩江科大STM32的视频为主以及自己的总结梳理📚  🚀Projeet source code🚀    💾工程代码放在了本人的Gitee仓库:iPickCan (iPickCan

景联文科技:专业图像采集服务,助力智能图像分析

景联文科技是专业数据服务公司,致力于为人工智能企业提供从数据采集、清洗到标注的全流程解决方案。协助客户解决AI开发过程中数据处理环节的关键问题,助力企业实现智能化转型。 1.多样化的图像采集服务 景联文科技提供多样化的图像采集服务,涵盖不同应用场景和需求: •高分辨率图像采集:适用于高质量图像需求,如医学影像、工业检测等。 •实时图像采集:适用于需要实时处理的应用场景,如安防监