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

互联网 阅读 1235 2023-06-05 19:14:00

前言

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

相关资讯

  • Bankless:Degen 玩家如何抓住比特币减半机会
    Bankless:Degen 玩家如何抓住比特币减半机会

    作者:Jack Inabinet 来源:Bankless 翻译:善欧巴,比特币减半在即!如何抓住机会放大收益?比特币减半定于 4 月 20 日星期六举行,但对于加密货币爱好者来说,持有比特币并

    每日资讯 2024-04-19 19:20 8
  • Runes生态快人一步,如何使用工具铸造符文(附教程)
    Runes生态快人一步,如何使用工具铸造符文(附教程)

    比特币减半即将到来,市场关注4月份的比特币生态。Runes备受瞩目,已有近20家平台提供铸造、交易等服务。老玩家熟悉铸造流程,新手可选择使用Xverse、Unisat和OKX WEB3钱包。Unisat将推出铭刻服务和交易市场。在测试网上可熟悉主网流程,选择铸造数量和速度后即可完成。打开Unisat插件,创建新钱包并备份助记词,选择地址后即可成功创建。在测试网的"Inscribe"页面选择"Mint"选项,输入铸造信息并支付,等待区块确认后铸造完成。BTCBot和Rune pro是新的比特币生态工

    每日资讯 2024-04-19 18:31 309
  • 币安Web3钱包“放大招”,新平台Megadrop究竟是什么?
    币安Web3钱包“放大招”,新平台Megadrop究竟是什么?

    币安推出新的代币发行平台Megadrop,首个项目为比特币再质押项目BounceBit。该平台整合了币安Simple Earn和币安Web3钱包,用户可通过申购BNB和完成Web3任务获得积分,积分占比决定空投奖励。与币安Launchpool不冲突,用户可同时参与。此举旨在推广币安Web3钱包,平台尚未上线,更多详情待更新。.....

    每日资讯 2024-04-19 18:31 515
  • SignalPlus宏观分析(20240419):美联储表示今年将不会降息
    SignalPlus宏观分析(20240419):美联储表示今年将不会降息

    美国市场开局平稳,地缘政治紧张局势和负面情绪似乎正迅速瓦解,初请失业金人数保持在极度稳定的水平(6 周中有 5 周维持在 21 万左右),美国费城联储制造业指数攀升至 2022 年 4 月以来的最高水

    每日资讯 2024-04-19 15:00 23
  • Web3.0日报 | 币安获得迪拜虚拟资产服务提供商许可证
    Web3.0日报 | 币安获得迪拜虚拟资产服务提供商许可证

    DeFi数据1.DeFi代币总市值:840.75亿美元DeFi总市值 数据来源:coingecko2.过去24小时去中心化交易所的交易量49.04亿美元过去24小时去中心化交易所的交易量 数据来源:c

    每日资讯 2024-04-19 09:50 35
  • Bankless:Ordinals 与以太坊 NFT 的优缺点
    Bankless:Ordinals 与以太坊 NFT 的优缺点

    作者:William M. Peaster 来源:bankless 翻译:善欧巴,近期围绕 Ordinals 的积极情绪似乎达到了历史最高点。同样地,排名前列的 Ordinals 藏品也一路飙

    每日资讯 2024-04-19 09:10 33
  • Variant合伙人:加密复制时代的艺术
    Variant合伙人:加密复制时代的艺术

    原文作者:Li Jin原文编译:深潮 TechFlow在 2024 年 3 月,佳士得宣布推出了SOURCE (关于 NFT 的),这是这家拍卖行的第一个链上生成艺术收藏品。这次拍卖恰好是数字艺术家

    每日资讯 2024-04-19 00:40 37
  • 比特币的对冲意义是什么?
    比特币的对冲意义是什么?

    作者:Daniel Kuhn 来源:coindesk 翻译:善欧巴,关于比特币 (BTC) 是否真正能起到避险作用的讨论又开始了。这场辩论始于上周六,当时伊朗导弹袭击加沙失败后,加密货币市场暴

    每日资讯 2024-04-18 22:00 41