TornadoCash V2详解: 隐私池和“无罪证明”
简介
TornadoCash是加密货币世界中最著名的匿名交易服务。TornadoCash利用零知识证明(ZKP)技术来掩盖资金来源。TornadoCash背后的机制被美国政府批评为非法金融活动提供便利,导致其在2022年8月被美国财政部强制除名。在许多情况下,隐私保护和洗钱活动似乎经常紧密地交织在一起。在追求隐私的同时,恶意行为者往往利用这些隐私功能进行非法洗钱。有没有可能找到一种方法,让人们既能维护自己的隐私,又能有效地遏制洗钱活动?TornadoCash的早期开发者之一ameen.eth开发的Privacy-Pools已提出一个可能的方向。(关于退市,只有前端网站和GitHub仓库受到影响,而合约部分在区块链上仍未受到影响。最终,在电子前线基金会的努力下,GitHub仓库被恢复了。更多细节,请参考本源。)
介绍TornadoCash的机制
在介绍隐私池之前,了解TornadoCash背后的设计原则是很重要的。关于详细的解释,你可以参考我以前的文章,题为"分解TornadoCash: 向朋友解释其功能的新手指南"。在这里,我将简要回顾一下TornadoCash的设计原则。
TornadoCash利用被称为“承诺”的收据来控制访问权。承诺是通过散列一个“秘密”值和一个 “空洞”代码来生成的。每个“承诺”只能用于一次提款。存款信息使用“Merkle树”结构记录,承诺作为叶子节点,并计算Merkle根。用户只需要提供从叶子到根的数据路径,就可以证明该数据是“Merkle树”中的一个叶子,从而间接证明之前向TornadoCash的资金存款。零知识证明用于隐藏存款来源,而“空洞器”则用于防止双重提款攻击。
TornadoCash的承诺有两个目的:
- 证明以前的存款。
- 确保单次取款。

“无罪证明”
根据TornadoCash的设计原则,只能确定提取的资金来自以前的存款,但不能确定具体的存款。这种匿名功能被犯罪分子利用来进行非法洗钱活动,这就是为什么美国政府试图监管TornadoCash。然而,如果我们能提供另一种证明,如零知识证明(ZKP),以证明所提取的资金不是来自黑名单上的存款,就有可能证明该提款与非法活动无关。这个概念被称为“无罪证明”,其目的是为了确定相关个人的清白。
**“无罪证明”**的概念可以分为两个方向:
- 证明所提取的资金来自白名单(允许的名单)上所列的存款集。
- 证明被提取的资金不是来自黑名单(拒绝名单)上的存款。
这两个方向的目的是通过证明其与授权存款的关联性或与禁止存款的关联性来确定被提取资金的合法性。

隐私池的设计原则
隐私池的设计原则建立在TornadoCash的基础上,并增加了**“无罪证明”**的概念。在隐私池中,提款收据不仅具有代表TornadoCash收据的原始目的,而且还具有第三种意义:"证明所提取的资金来自白名单上的存款 "。
通过纳入这种额外的证明,Privacy-Pools旨在为提取的资金的合法性提供更高的保证,确保它们可以被追溯到白名单上列出的授权存款。
来自Privacy-Pools的收据代表了以下含义:
- 证明以前的存款。
- 保证单次提款。
- 证明所提取的资金来自白名单上的存款。
在这里,我们用Allow Merkle Tree来解释隐私池如何将**“无罪证明”的概念纳入系统(其中Allow Merkle Tree**代表白名单概念)。首先,Allow Merkle Tree有几个特点。
- 顾名思义,Allow Merkle Tree是Merkle Tree。
- 该树的高度和节点数与隐私池中的存款默克尔树相同。
- Allow Merkle Tree的每一片叶子都对应于Deposit Merkle Tree中的一个叶子的位置(代表一个存款)。
Allow Merkle Tree的叶子节点中的数据可以分为以下两种类型:
- 允许: 这表明该位置的存款是允许的。(没有任何存款的位置也被默认为允许的。)
- 阻止: 这表明该位置的存款被阻止或拒绝。
下面的图片说明,在Deposit Merkle Tree中索引0和1的位置代表合法资金,它们在Allow Merkle Tree中的相应位置也被标记为“允许”。

让我们假设今天有一个罪犯想从事洗钱活动,并将非法资金存入Privacy-Pools的位置,存款Merkle Tree ndex: 2。我们知道这些资金是非法的,所以我们更新允许Merkle树中的相应位置,特别是 index:2”,改为“阻止”。这个动作确保被阻止的资金不能被提取,因为它们与非法活动有关。

在从允许名单上提款的情况下
假设一个用户,其存款被列在美国政府的允许名单上,想提取资金。除了提供在Deposit Merkle Tree中拥有存款的证明外,他们还需要提供在美国允许名单上的证明。美国允许名单的相应证明包括Allow Merkle根(由用户提供,在代码中被称为subsetRoot)和沿途遇到的中间节点值。
在Privacy-Pools的ZKP验证阶段,Merkle Root是使用叶子值allowed(在实际代码中,它是keccak256(allowed))和给定的中间节点值构建的。然后系统检查这个计算出来的Merkle Root是否与用户提供的Allow Merkle Root相匹配。如果它们匹配,则验证成功,表明提取的资金来自美国政府允许名单上的存款。

在从被拒绝名单中提款的情况下
如果一个用户,其存款没有列在美国政府的允许名单上,试图提取资金,而他们在美国允许名单上的相应存款位置被标记为“阻止”,这将阻止该用户使用与美国政府允许名单相关的Allow Merkle Root来提取资金。这将导致验证失败,因为无法生成相应的证明。
在Privacy-Pools中,计算依赖于叶子值allowed(代码中的keccak256(allowed)),但美国政府的允许列表将该位置标记为blocked。这种差异导致无法计算相同的Merkle Root,导致验证失败。因此,用户将无法使用美国政府允许列表中的Allow Merkle Root提取资金。

在这种设计下,用户确实需要提供一个替代的Allow Merkle Root来提取资金。这个替代的Allow Merkle Tree必须将相应的存款位置标记为“允许”,以便计算出相同的Allow Merkle Root来成功验证。这个替代的Allow Merkle Tree可以来自另一个政府或机构,他们维护这样一个列表,甚至由用户自己生成。
在这种情况下,美国政府可以利用提款过程中使用的Allow Merkle Root来确定用户的资金是否符合美国政府的规定,使他们能够追踪这些资金。如果用户使用的是自我生成的或不被信任的Allow Merkle Tree,那么提取的资金极有可能来自有问题的存款,因为任何有信誉的第三方Allow Merkle Tree都会将该存款位置标记为“被阻止”。

常见问题:
问:如果Allow Merkle Root是由取款人提供的,他们是否可以伪造一个假的Allow Merkle Root来声称该叶子对应于一个允许的存款?这是否意味着他们仍然可以提取资金?
答:答案是肯定的。在这种情况下,确实有可能提取资金。作者特别指出,这种机制的目的不是为了防止犯罪分子提取资金,而是为了确保即使他们成功提取了资金,也能知道这些资金来自于被拒绝的名单。当取款人提供一个没有说服力的Allow Merkle Root时,可以认为他们是从被拒绝名单上的存款中提取资金。据推测,允许这种行为的原因是为了保持服务的去中心化性质。每个Allow Merkle Tree需要一定的权限管理来更新每个叶子的状态。如果一个特定的Allow Merkle Tree根部被强制执行,就意味着有人拥有某些权限来控制资金的提取,这与去中心化的精神相悖。
问:谁决定这笔交易是否来自被拒绝名单上的资金?
答:作者没有具体提到谁来决定一项交易是否来自被拒绝名单上的资金。据了解,这方面很可能是由各自的监管部门决定的。例如,如果美国政府打算调查隐私池中的非法资金,他们可以检查每笔交易的Allow Merkle Root,以确定它是否与非法资金有关。确定哪些Allow Merkle Roots被认为是有效或允许的标准将由各监管机构自己决定。
Privacy-Pools代码
在这里,我提供了主要的代码和作者的评论,希望能帮助大家通过代码理解主要的逻辑。


太长不看版
- “无罪证明”是一个概念,它使用另一个证明来证明一笔提款来自允许名单上的存款。它可以从允许列表和拒绝列表的角度来构建。
- 隐私池以TornadoCash为基础,增加了“无罪证明”的概念。Privacy-Pools中的收据代表了一个额外的含义:证明所提取的资金来自允许列表中的存款。
- Allow Merkle Tree的存在是为了证明所提取的资金来自于允许的列表。Allow Merkle Tree中的叶子位置与Deposit Merkle Tree中的存款叶子位置相对应。Allow Merkle Tree的叶子数据可以是“允许”或“阻止”。
- 除了提供必要的数据来构建Deposit Merkle Root外,取款人还需要提供Allow Merkle Root和构建它所需的数据,以证明所提取的资金来自允许的列表中。
- 由于Allow Merkle Root是由取款人提供的,恶意行为者有可能伪造一个假的Allow Merkle Root来提取非法资金。然而,伪造的Allow Merkle Root的存在仍然会在区块链上引起怀疑,并能够跟踪非法资金的流动。
开发者ameen.eth将**“无罪证明”的概念与TornadoCash相结合,提供了另一个视角,即“隐私不等于犯罪”**。作者发现,使用另一个零知识证明(ZKP)来证明一个额外的事实,类似于ZKP的增加。与构建一个更大、更复杂的ZKP相比,这种方法更简单、更有效。关于Allow Merkle Tree的选择,似乎在未来,它可能由一个更公正的实体构建,这将为其他人提供更大的可信度。
最后,作者对Chih-Cheng Liang和Ping Chen审阅文章并提供宝贵意见表示感谢。
参考资料
- Tornado Cash 實例解析
- ZKP 與智能合約的開發入門
- [ZKP 讀書會] Tornado Cash
- Tornado Cash — How it Works | DeFi + Zero Knowledge Proof
- https://github.com/tornadocash/tornado-core
- 深入理解TornadoCash技术细节
- https://www.privacypools.com/
- https://github.com/ameensol/privacy-pools
- 0xhhh Thread 介紹新功能和其原理
- demo video
- Vitalik’s 講如何改進 Tornado v2
- privacy pools v0 tweet
- Introducing Proof of Innocence built on Tornado Cash
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
您可能感兴趣
-
高盛:7 月砸穿拥挤交易,美股牛市没断但更难做了作者:潘凌飞,华尔街见闻7月的美股,不像指数层面的崩盘,更像仓位层面的清算。标普500本周守住了阵脚,整个7月波动区间只有3.5%,距离高点不到2%。更反直觉的是,等权重标普、低波动标普、剔除AI后的
-
拯救 AI 交易?Citadel 接盘“AI 股神”持仓,投行策略师“终于搞明白大跌原因,现在可以往前看了”作者:张雅琦,华尔街见闻Citadel收购对冲基金Situational Awareness的公开股票组合,被市场人士广泛认为是遏制本轮AI股大跌的关键一步。这笔交易消除了一个已知的被迫卖家,令陷入自
-
以真实商业造血破解行业痛点,VITAL-X 生态代币 VXD 将于 8 月 5 日正式上线在全球 Web3 产业从“空转炒作”加速向“实体赋能与真实商业落地”深度变革的关键时刻,全球瞩目的下一代 Web3 商业基础设施平台 VITAL-X 官方正式宣布:经过长期筹备与生态布局,平台生态迎来
-
“这个月让你们失望了”:25 岁 AI 天才 200 亿美元爆仓自白书作者:谷昱,ChainCatcher2001年出生的天才少年,15岁考入哥伦比亚大学,19岁以全系第一名毕业,拿下数学、统计、经济三个学位。Leopold Aschenbrenner 曾是OpenAI
-
美联储重大变革?报道:沃什考虑减少议息会议频率,打破 40 年惯例作者:杨宸,华尔街见闻美联储主席沃什正考虑削减联邦公开市场委员会(FOMC)每年定期议息会议的次数。此举若落地,将是美联储数十年来运作方式最重大的变革之一,也将成为沃什执掌这家央行以来迄今最具分量的政
-
周期股还是成长股?Coinbase Q2 财报揭开“估值分歧”作者:Golem,Odaily 星球日报7 月 31 日,Coinbase 公布了 2026 年 Q2 财报。Coinbase 首席执行官 Brian Armstrong 在 X 平台发文对这一季度总
-
Circle 的又一个问题作者:Alex Xu随着稳定币供给品类的增加,渠道(交易所、商家网络、钱包、发卡方、甚至 AI 终端……)相对于稳定币的议价权将进一步上升,而不是如很多人此前所说的会因为 USDC 市场份额的领先而下
-
股票跌得比币圈还狠,钱去了哪?作者:Cathy,白话区块链7月28日和29日,首尔。Kospi指数连续两天触发熔断,韩国股市历史上从未有过。 第一天跌10.84%,第二天再跌5.98%。权重最大的SK海力士,两天累计跌掉约23%。
- 成交量排行
- 币种热搜榜
World Liberty Financial USDv
泰达币
比特币
以太坊
USD Coin
Solana
瑞波币
Ronin Network
币安币
莱特币
艾达币
狗狗币
大零币
Wormhole
比特现金
SHIB
UNI
OKB
AR
ICP
DOT
LUNC
YGG
DYDX
LPT
ETC