TornadoCash V2: Privacy-Pools 及 Proof-of-Innocence

互联网 阅读 1395 2023-06-05 19:14:00
欧易OKX交易所
欧意OKX交易所注册下载领取神秘豪礼
官网注册

前言

TornadoCash是加密货币世界中最著名的匿名交易服务。TornadoCash利用ZKP(Zero-Knowledge Proof)技术来隐藏资金来源。美国政府主张这样的机制助长了非法金流活动,最终在2022 年8 月被美国财政部制裁而被迫下架。隐私保护和洗钱活动在很多情况下似乎总是紧密相连。在追求隐私的同时,不法分子往往利用这些隐私特性进行非法资金清洗。是否能找到一种方法,既能让人们拥有隐私,又能有效遏制洗钱活动?TornadoCash 早期开发者ameen.ethPrivacy-Pools或许给出了一个方向。(关于下架的部分只有前端网站和GitHub Repository 受到影响,合约部份因在区块链上则不受影响。最后在电子前哨基金会的争取之下GitHub 有恢复Repository,详情可以参考

简介TornadoCash 原理

在介绍Privacy-Pools 之前,需要先理解TornadoCash 相关的设计原理。详细介绍可以参考我之前的文章「Breaking Down TornadoCash: A Beginner's Guide to Explaining its Functionality to Friends」。这边简单复习一下TornadoCash 的设计原理。

TornadoCash 使用收据(commitment)来控制访问权限。收据是由secret(秘密值)和nullifier(注销码)一起Hash 产生,每个收据只能提款一次。使用Merkle Tree (杂凑树)记录存款信息,将收据作为leaf 节点并计算出Merkle Root (杂凑树根)。使用者只需提供leaf 到root 中间经过的数据,即可证明该数据是否Merkle Tree 的leaves 之一,也间接证明之前有存款资金到TornadoCash。使用Zero-Knowledge Proof 来隐藏存款来源,另外使用nullifier防止Double Withdrawal 攻击。

TornadoCash 的收据有两个含义

  • 证明之前发送者有存入资金
  • 确保每个接收者只能领取一次资金

“Proof-of-Innocence”

根据TornadoCash 设计的原理,只能知道领款的资金一定是来自之前的某笔存款的资金,但却不知道是来自哪一笔存款。这是不法份子使用TornadoCash 进行不法的洗钱活动的主要目的,也是美国政府为什么要监管TornadoCash 原因。若我们可以提出另外的Proof(ZKP),来证明领款时的资金不是来自拒绝清单的存款,是否就能证明这笔领款并非来自于不法份子,这就是“Proof-of-Innocence” (“无罪证明”)核心概念。

“Proof-of-Innocence” 概念可以分成两个方向

  • 证明领款的资金是来自允许清单中存款的资金集合(允许清单)
  • 证明领款的资金并没有来自拒绝清单的存款资金集合(拒绝清单)

这两种做法都是可以证明领款资金都不是来自于拒绝清单里的存款。下图的做法是采用拒绝清单的方式,证明领款的资金并非来自于拒绝清单的存款(红色)。

美国政府source:https://medium.com/@chainway_xyz/introducing-proof-of-innocence-built-on-tornado-cash-7336d185cda6Privacy-Pools 设计原理

Privacy-Pools 在TornadoCash 基础上多加上了“Proof-of-Innocence” 的概念。Privacy-Pools 领款收据除了TorandoCash 收据原本代表的意义之外,还有第三个意思:『证明领款的资金来自于允许清单中的存款』。

Privacy-Pools 收据代表意义:

  • 证明之前发送者有存入资金
  • 确保每个接收者只能领取一次资金
  • 证明领款的资金来自于允许清单中的存款

这边我们使用Allow Merkle Tree 来解释Privacy-Pools 是如何把“Proof-of-Innocence” 运用在这个系统中(Allow Merkle Tree 是运用允许清单的概念)。首先Allow Merkle Tree 有几个特点

  • Allow Merkle Tree 顾名思义是一个Merkle Tree
  • 树高和节点数都跟Privacy-Pools 的Deposit Merkle Tree 相同。
  • Allow Merkle Tree 的leaf 皆对应Deposit Merkle Tree leaf(存款) 位置。

Allow Merkle Tree leaf 资料可以分成下面二类:

  • allowed:表示该位置的存款是允许。(尚未有存款的位置也是预设allowed)
  • blocked:表示该位置的存款是拒绝。

下图可以看到index0和1的位置在Deposit Merkle Tree 皆为legal funds,对应的Allow Merkle Tree leaf 位置也是allowed。

美国政府假设今天有一名不法份子想要进行洗钱活动,他把攻击后所得不法资金存进Privacy-Pools ,存款位置是Deposit Merkle Treeindex:2的位置。我们知道那是不法的资金,所以在对应的Allow Merkle Treeindex:2位置我们更新为blocked。

美国政府允许清单领款情形

假设今天有一名在美国政府允许清单存款的用户想要提领资金,需要提供『 有存款在Dposit Merkle Tree 中的证明』之外,还需要提供『 在美国允许清单的是Allowed 的证明』。对应美国允许清单的证明包含了Allow Merkle Root (由用户自行提供,在程式码中为subetRoot)和中途会经过的node 值。Privacy-Pools 在验证ZKP 阶段时,会以leaf 值为allowed(实际程式码中是keccak256(allowed))和给定中途会经过的node 值去建构出Merkle Root。验证此Merkle Root 与用户提供的Allow Merkle Root 是否相同。若相同代表验证通过,表示该领款的资金是来存在于美国政府允许清单中的存款。

美国政府拒绝清单领款情形

今天有一名不在美国政府允许清单存款的用户想要提领资金,而对应的存款的位置在美国政府允许清单中被标记成blocked。这样会导致用户无法使用美国政府允许清单的Allow Merkle Root 去领出资金,因为产生不出对应的证明而导致验证失败(因为Privacy-Pools 使用leaf 是值allowed去做计算,而美国政府允许清单将该位置标记成blocked,导致计算不出相同的Merkle Root )。

美国政府这样的设计被迫这名用户需要提供其他的Allow Merkle Root 才能提领资金(其他的Allow Merkle Tree 需将该存款位置标记成allowed,才能计算出相同的Allow Merkle Root 来通过验证)。这个其他的Allow Merkle Tree 可能来自于其他政府或机构所维护,甚至是这名用户自行产生。今天美国政府就可以藉由提领时所用的Allow Merkle Root, 来判断用户的资金是否符合美国政府的法律规范,借此来达到追踪的目的。若用户是使用自己产生或不具公信力的的Allow Merkle Tree ,基本上该笔领款资金极有可能来自有问题的存款(每个具公信力的第三方Allow Merkle Tree 都将该存款位置标记成blocked)。

美国政府常见的问题

Q: 如果Allowroot 是由提领人提供,是不是可以假造一个假Allow Merkle Root 来证明该leaf 是允许清单中的存款,是不是代表还是可以把钱领走呢?

A: 答案是肯定的,确实是可以把钱领走。这一点作者有特别提出说,这样的机制并不是要禁止不法份子把钱领走,而是就算可以领走也会被知道说这笔资金是拒绝清单的资金。当提领人提供了一个没有说服力的Allow Merkle Root,基本上可以视为他是从拒绝清单存款提领。笔者这边猜测允许这样做的原因是想要保持这个服务的去中心化性质。因为每个Allow Merkle Tree 都需要有一定的权限管理去更新每个leaf 的status。若强制指定某个allow tree root 的话,代表有人有一定权限控制资金的提领,这一点并不符合去中心化的精神。

Q: 会是由谁来决定这笔交易是来自于拒绝清单资金呢?

A: 笔者看到的部分并没有特别提,理解是这部分应该由各监管单位自己去做。假设今天美国政府要查Privacy-Pools 的脏钱,他可以透过去检查每笔的Allow Merkle Root 来判断他是不是脏钱。至于怎样的Allow Merkle Root 是允许,那就是各监管单位他们自己去判断。

Privacy-Pools 程式码

这里附上主要的程式码和笔者自己的注解,希望可以帮助大家可以透过程式码理解主要逻辑。

// circuits/withdraw_from_subset.circom

template WithdrawFromSubset (levels, expectedValue) {

// public

signal input root;

signal input subsetRoot;

signal input nullifier;

signal input assetMetadata; // abi.encode(token, amount).snarkHash();

signal input withdrawMetadata; // abi.encode(recipient, refund, relayer, fee).snarkHash();

// private

signal input secret;

signal input path; // Indicate whether the data represents the left leaf or the right leaf.

signal input mainProof[levels]; // Construct the data required for deposit root.

signal input subsetProof[levels];// Construct the data required for allow root.

// Calculate the nullifier and commitment.

component hasher = CommitmentNullifierHasher();

hasher.secret <== secret;

hasher.path <== path;

hasher.assetMetadata <== assetMetadata;

nullifier === hasher.nullifier;

// expectedValue: keccak256("allowed") % p

component doubleTree = DoubleMerkleProof(levels, expectedValue);

doubleTree.leaf <== hasher.commitment;

// Convert the path to bits to specify whether it is the left leaf or the right leaf.

// It can be observed that the deposit tree and allow tree share the same path.

doubleTree.path <== path;

for ( var i = 0 ; i < levels; i++) {

doubleTree.mainProof[i] <== mainProof[i];

doubleTree.subsetProof[i] <== subsetProof[i];

}

root === doubleTree.root; // Verify the deposit root.

subsetRoot === doubleTree.subsetRoot; // Verify the allow root.

signal withdrawMetadataSquare;

withdrawMetadataSquare <== withdrawMetadata * withdrawMetadata;

}

TLDR

  • “Proof-of-Innocence”是用另一个Proof 来证明该笔领款是来自于允许清单中的存款。“Proof-of-Innocence” 可以从允许清单拒绝清单两个角度来建构。
  • Privacy-Pools 在TornadoCash 基础上叠加了”Proof-of-Innocence“ 的概念,原本的收据代表意义多了第三个意思:『证明领款的资金来自于允许清单中的存款』。
  • Allow Merkle Tree 存在可以证明提领资金是存在允许清单中。Allow Merkle Tree 的leaf 位置相对应于Deposit Merkle Tree 的存款leaf 位置。Allow Merkle Tree leaf 资料为allowed和blocked。
  • 领款者除了需要提供建构Deposit Merkle Root 所需资料之外,还需要另外提供Allow Merkle Root 和建构Allow Merkle Root 的资料来证明提领资金的是存在允许清单中。
  • 由于Allow Merkle Root 是由领款者提供,不法份子仍有办法透过假造的Allow Merkle Root 来把不法资金领走。假造的Allow Merkle Root 依然会呈现在链上并被其他人视为这笔领款仍有存有疑虑,借此来达到追踪不法资金的流向。

开发者ameen.eth将”Proof-of-Innocence“ 概念和TornadoCash 结合,提供另一个『 隐私不等同于犯罪』的方向。笔者觉得有趣的角度是利用另一个ZKP 来证明另一件事实,有点像是ZKP 的加法。这样的使用方式会比建构一个更大行更复杂的ZKP 更来为简单,效率也更高。关于Allow Merkle Tree 的选择,感觉之后会是由一个比较公正的单位来建构,这样对于其他人也有比较高的说服性。

最后感谢Chih-Cheng Liang以及Ping Chen帮忙Review 文章和给出宝贵的意见!

免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
上一篇:被猜测是赵长鹏的接任者,负责币安美国以外所有市场的Richard Teng究竟有何来头? 下一篇:Kakarot路线图:从将EVM带入Starknet,至成为type 1 zkEVM

您可能感兴趣

  • 为什么链抽象会成为下一个主流热门叙事?
    为什么链抽象会成为下一个主流热门叙事?

    作者:Haotian为什么“链抽象”会成为“模块化”之后又一个主流热门叙事?除了Mass Adoption这种看似“假大空”的目标之外,真正的内核原因我认为如下:1)链抽象是模块化到一定阶段之后的必然,因为区块链技术架构就大致包括共识层、执行层、DA层、可交互操作性、结算层等等。传统意义上monolithic单一链要协调好各个分层综合强化,而模块化打破了这一局面。DA层、可交互操作性层甚至执行层等部分都可以被单拎出来进行性能优化并以可组合性的协作方式发挥作用。因此,“模块化”成了开发者寻求链构建差异化的主

    每日资讯 2024-07-27 15:02 794
  • 观点:八月或将成为加密市场的主要拐点
    观点:八月或将成为加密市场的主要拐点

    作者:Digital Asset Research编译:Peisen,BlockBeats编者按:Digital Asset Research 通过详细的时间范围、价格范围以及时间角度等多方面的数据,展示了 8 月 6 日至 12 日可能出现重大事件或新闻的高概率。文中还将当前市场周期与之前的周期进行对比,指出市场趋势变化的时间规律,并结合月度和周度图表分析,提供了充分的证据。这是我已经公开讨论了一段时间的事情,但今天我想再次确认,证据显示 8 月 6 日至 12 日期间,BTC 和更广泛的加密货币市场可

    每日资讯 2024-07-27 14:02 956
  • 一瞥全球最大网红马斯克的加密观:以名入局,浅尝辄止
    一瞥全球最大网红马斯克的加密观:以名入局,浅尝辄止

    原创|Odaily星球日报(@OdailyChina)作者|Wenser(@wenser 2010 )7月22日,马斯克应X平台用户@Chriswinig 的请求,换上了激光眼账号头像。由于 #LaserRayUntil100K(指比特币价格突破10万美元前,都将保持激光眼头像) 这一比特币 Meme的存在,此举被视为马斯克对加密货币行业的再一次明牌支持(尽管其目前已换回原来的头像)。一时间,马斯克再次成为“加密货币焦点”,而此时距离他上一次将头像换为“激光眼少女”,已经过去了3年。Odaily星球日报将

    每日资讯 2024-07-27 11:02 616
  • 一周精选丨以太坊ETF正式上市;哈里斯接替拜登竞选总统;比特币大会上演开生面的“政治盛会”
    一周精选丨以太坊ETF正式上市;哈里斯接替拜登竞选总统;比特币大会上演开生面的“政治盛会”

    PANews编者按:PANews精选了一周的优质内容,帮助大家利用周末时间查漏补缺,点击标题即可阅读。宏观视角合规难、挣钱难,全球化成香港Web3唯一方向?港府对Web3政策愈发收紧、及外资撤离的当下,摆在这些在香港合规发展的Web3企业来说,所需要应对的重中之重其实是如何立足于香港,再打开更大的市场。币安研究院2024年半年报:6个关键要点总结2024年上半年,尽管第二季度出现了回调,加密市场总市值增长37.3%,受益于比特币ETF的推出和去中心化金融(DeFi)的强劲增长。美国政府持有21万个比特币,

    每日资讯 2024-07-27 10:02 727
  • 市场转向不确定看涨:ETF、政治因素与内部创新的角力
    市场转向不确定看涨:ETF、政治因素与内部创新的角力

    作者:IGNAS | DEFI RESEARCH编译:深潮 TechFlow市场从沉闷转向了不确定的看涨。自五月以来,加密市场一直表现平淡。价格停滞不前,空投让人失望,基础设施项目也让人感到疲惫(人们不再关注技术帖子),普通投资者(不是我们,而是那些随便买的普通投资者)也不活跃。Crypto Twitter 现在讨论政治的内容比加密货币更多。市场依然不确定,但这种不确定性更倾向于看涨而非看跌。让我解释一下。外部的不确定性首先,以太坊 ETF 终于上线了,数据也开始公布。在第一天,ETH ETF 的交易量达

    每日资讯 2024-07-27 09:02 834
  • DeSec:去中心化协议在监控和执法中的潜在应用
    DeSec:去中心化协议在监控和执法中的潜在应用

    原文标题:《DeSec? Where Crypto Meets Security, Surveillance, and Defense》撰文:Luffistotle,Zee Prime Capital编译:Tia,Techub News近来,西方的安全秩序问题开始显现。通常,我们用来衡量秩序是否良好的方法是在白天以及晚上在城市和公园里散步(看是否安全)。但现在这种测量方式变得越来越不可靠。社会秩序是通过三个组成部分来构建和维持的:法律和社会规范执法(警察、监视等)司法(法律的应用)这三者之间的相互作用是复

    每日资讯 2024-07-27 08:02 714
  • 为啥Lista DAO推出veLISTA模型,能促进稳定币进一步发展?
    为啥Lista DAO推出veLISTA模型,能促进稳定币进一步发展?

    ⚡️这两天在一直关注京东的稳定币提案,觉得他可能会冲击BUSD,成为第3大稳定币。正在想 Binance 会不会有什么动作,就看到@ListaDAO 推出$veLISTA 社区治理模式,这是 LISTA 上线币安后的另一个大动作。这跟币安有什么关系呢?我们来看看背景:一、LISTA 是 BNB Chain 布局的3个稳定币协议之一我在之前的分析文章:《以一姐为什么看好稳定币为背景分析:作为BSC上稳定币和质押协议龙头,领取 $LISTA 空投后:要不要抛,什么时候抛售?》https://link.medi

    每日资讯 2024-07-26 22:02 312
  • SevenX Ventures:Ronin,天真与经验之歌
    SevenX Ventures:Ronin,天真与经验之歌

    By Yinghao, SevenX Ventures投资人(Twitter@linsajiao)故事的开始:我们对于Web3 Game的讨论缘何而起?答案是来源于1个交叉点。从Web3到游戏当我们在谈论”Web3"时,我们在谈论三件事情:区块链技术、去中心化理念和代币经济学。所有建设者和信仰者都希望Web3是颠覆式创新。布莱恩·阿瑟在《技术的本质》中对颠覆式创新的描述是“重新预定”,即对过去所有技术的范式变革,是重新划定对人类某个重要的需求的技术使用规范。颠覆式创新和边缘创新的区别如下:颠覆式创新边缘

    每日资讯 2024-07-26 21:02 41