首页 > 其他分享 >Tornado 龙卷风混币原理

Tornado 龙卷风混币原理

时间:2024-08-13 18:07:18浏览次数:10  
标签:混币 Tornado Alice 地址 Withdraw 龙卷风 Bob

项目背景

Tornado(https://tornado.cash/)是以太坊隐私赛道著名的混币项目,其混币技术主要使用了 zk-SNARK 零知识证明

1、关于 zk-SNARK 零知识证明的原理可以参见 if(DAO) 之前的文章:

  https://mirror.xyz/0xd05cFA28Eaf8B4eaFD8Cd86d33c6CeD1a1875417/X3qSOjObTknXQ_iGhDBFYETibD0TVW0twz5QDIthjGI

2、混币的意思是混币者通过 Tornado 合约将混币者的以太坊地址和资金去向地址失去关联,从而达到隐匿资金去向的目的。

项目原理

1、Bob 是第 3 个将自己的代币 Deposit 存入龙卷风合约进行混币的客户。

2、Alice 是第 4 个将自己的代币 Deposit 存入龙卷风合约进行混币的客户。

3、Alice 在 Deposit 时

(1)Alice random k4 ,r4。k4 和 r4 in { 0 ,1 } ^ 256。( k4 ,r4 ) 也是 Alice 未来的取款凭证 note4。

(2)Alice 计算得到 C4 = Hash1( k4 ,r4 )。

(3)Alice 将 Deposit 的金额 100 DAI + C4 + MerkleProof(C4) 发送至 Tornado 合约。

(4)Tornado 合约 verify MerkleProof(C4) :通过梅克尔证明验证 C4 账户状态的正确性。

(5)通过 C4 + MerkleProof(C4) update Tornado 合约内存储的与 Tornado 业务相关的全局状态 MerkleRoot。

(6)nf 在下面的 Withdraw 操作时才会用到,暂时不表。

4、Bob 在 Withdraw 时

(1)Bob random k3 ,r3。k3 和 r3 in { 0 ,1 } ^ 256。

(2)Bob 计算得到 C3 = Hash1( k3 ,r3 )。

(3)Bob 计算得到 nf3 = Hash2( k3 )。

(4)Bob 指定 Bob 混币后的收款地址 A。注意:Bob 必须在 statement 中指定收款地址 A,这样可以防止 Miner 矿工将 Bob 的收款地址更换成自己的地址从而盗取混币后的资金。

(5)Bob 构建 zk-SNARK Proof,即在不泄露自己账户信息的情况下证明自己曾经存入合约 100 DAI。具体做法是通过 :

public statement x = ( MerkleRoot ,nf3 ,A )

secret witness w = ( k3 ,r3 ,C3 ,MerkleProof(C3) )

从而构建 zk-SNARK Proof π。这个过程和我们之前学习的零知识证明匹诺曹协议是吻合的:

1)TrustSetup :S ( C ) => ( Sp ,Sv)。(本篇省略了:通过电路 C 构建可信设置并分别生成 Sp 和 Sv,其中 Sp 给 Prover 生成零知识证明 π,Sv 给 Verifier 验证零知识证明 π 的正确性)。

2)P ( Sp ,x ,w ) => Proof π。(Prover 证明者构建零知识证明 π)。

3)V ( Sv ,x ,π ) 是否正确。(Verifier 验证者验证零知识证明 π)。

(6)Tornado 合约将 Bob 提交的 nf3 增加至 nullifier 中存储,用以保证 Bob 的这笔 100 DAI 的混币存款不能被再次 Withdraw。即当 Bob 想再次 Withdraw 此笔存款时,Tornado 合约会检查此笔存款对应的 nf3 是否存在记录,如果存在则拒绝提款。

(7)Tornado 合约返回给 Bob 指定的资金去向地址 A ,金额 100 DAI(因为示例中使用的是 Tornado 100 DAI Pool),完成最终的混币。

一般的资金转移过程中,Bob 必须向区块链网络提交 From 转出账户 + To 转入账户 + Amount 转账金额。而通过 Tornado 合约,Bob 在取款过程中,只向区块链网络提交了 3 项数据:为了防止 Bob 或攻击者重复 Withdraw 的一个由随机数生成的哈希值 nf + 没有透露任何与 Bob 秘密相关的零知识证明 π + 以太坊公开地址 A 但没人知道这是 Bob 的地址。Bob 最终达到了隐匿取款人和资金去向的目的。

项目不足

上面的分析过程中,我们忽略了一件重要的事:以太坊等主流区块链的协议中一般都是谁发起交易谁承担 gas。在上面的流程中,Bob 在 Withdraw 取款过程中花费了无法隐匿的 gas,数据分析人员可以关联 Bob 的地址和最终货币的去向地址 A,从而暴露了 Bob 的身份。

Tornado 的解决方案是让 Bob 、Alice 等使用 Tornado 合约的客户不直接向 Tornado 合约发起 Withdraw 交易,而是让 Relay 这样一个中心化服务器中继 Withdraw 交易,花费 gas:

1、这样做的好处是:所有向 Tornado 合约发起提款交易的地址都是 Relay Address 并由该地址承担 gas,隐匿了 Bob 、Alice 的地址信息。

2、这样做的缺点是:Relay 服务器是中心化的,这也是龙卷风经常被人诟病的一个痛点。

标签:混币,Tornado,Alice,地址,Withdraw,龙卷风,Bob
From: https://www.cnblogs.com/Soy-technology/p/18357465

相关文章

  • 猫头虎 分享:Python库 Tornado 的简介、安装、用法详解入门教程
    ......
  • Tornado 添加任务的几种方式
    add_callback:功能:将一个普通的回调函数或者同步函数添加到事件循环中执行。特点:适合处理简单的任务,但要注意不要添加会阻塞事件循环的任务。示例:tornado.ioloop.IOLoop.current().add_callback(callback_function)spawn_callback:功能:将一个异步的协程函数(coroutinefu......
  • [护网杯 2018]easy_tornado
    [护网杯2018]easy_tornadoStep靶机页面/flag.txt/welcome.txt/hints.txt其中:/flag.txtflagin/fllllllllllllag/hints.txtmd5(cookie_secret+md5(filename))链接url/file?filename=/welcome.txt&filehash=0d57a014b2bc88b9c6f12277495dwww其中filehash则是......
  • Tornado Web框架学习(一)
    tornado框架1、单文件下对应用的配置2、简单的get请求测试3、错误重定向测试importtornadoimportasynciofromosimportpathfromtornado.optionsimportdefine,options#definedatabaseandserverconfig#topleveldefine("port",default=8888,help="ServerP......
  • 攻防世界 easytornado
    题目信息提示了flag在/fllllllllllllagfilehash通过md5(cookie_secret+md5(filename))获得当务之急是找cookie_secre根据题目提示为tornado模板注入,模板注入必须通过传输型如{{xxx}}的执行命令,验证在tornado模板中,存在一些可以访问的快速对象,这里用到的是handler.......
  • 零知识证明: Tornado Cash 项目学习
    前言最近在了解零知识证明方面的内容,这方面的内容确实不好入门也不好掌握,在了解了一些基础的概念以后,决定选择一个应用了零知识证明的项目来进行进一步的学习。最终选择了TornadoCash这个项目,因为它著名且精致,适合入门的同学进行学习。学习TornadoCash项目,涉及以下方面:......
  • python tornado简易ws聊天室测试
    #-*-coding:utf-8-*-from__future__importunicode_literals,print_functionfromdatetimeimportdatetimeimporttornadofromtornado.optionsimportdefine,optionsfromtornado.websocketimportWebSocketHandler#设置服务器端口define("port",de......
  • 传奇私服中法师冰咆哮和龙卷风技能哪个厉害?
    在传奇中冰咆哮这个技能应该是所有玩过法师的玩家都非常清楚的一个技能了,这个技能由于高魔法攻击和炫酷的魔法攻击特性给我们留下深刻的印象。在新版本的传奇私服中除了原来的冰咆哮技能做了一些提升和改变,还带来了一个全新的技能龙卷风,这个听上去就非常强大的技能作为法师的一......
  • [护网杯 2018]easy_tornado
    [护网杯2018]easy_tornado审题一共有3个界面flag.txtwelcome.txthint.txt通过审题得知,flag位于/flllllllllag中,要使用ssti注入,其加密方式为md5(cookie_secret+md5(filename))知识点tornado模版注入解题看到filehash猜测其为加密后的结果所以应该是修改它。......
  • [tornado]入门tornado(2): Handler
    Handler是tornado编程中很重要的一环,tornado应用中几乎每一个页面都对应至少一个handler,handler控制着应用后台的业务逻辑Handlerhandler的接口大致可以分为3类--输入,输出,流程input如何解析前台传来的参数https://www.tornadoweb.org/en/stable/web.html#input前......