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

互联网 阅读 1281 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

相关资讯

  • Coinbase:对以太坊的预期——长期强劲
    Coinbase:对以太坊的预期——长期强劲

    ETH的长期定位强劲,有望在未来上涨。它在加密领域拥有强大的需求驱动因素,并具有独特优势。现货ETH ETF的批准将消除资本障碍,带来新的资本流入。Solana等可扩展的集成链的兴起可能蚕食ETH市场份额。以太坊L2上的交易活动占比17%,但稳定币供应量仍以ETH为主。ETH的质押和L2增长有利于其资产和生态系统,能够应对不同的执行环境和功能。ETF的批准可能改变BTC与ETH的相关性,但ETH仍有潜力出现意外上涨。市场可能低估了美国ETH ETF的重要性和批准的时机。.....

    每日资讯 2024-05-17 10:01 576
  • NYDIG:期货数据凸显交易者仓位
    NYDIG:期货数据凸显交易者仓位

    本期内容涵盖了比特币市场的多个方面,包括ETF流动性、难度下调对矿工经济的影响、资产管理公司的分类、比特币价格和哈希率下降等。最近,现货ETF的推出改变了交易商减少多头持仓的态势,但难度下调可能导致哈希率下降,影响矿工收入。比特币价格的稳定和4月份的消费者物价指数公布将受到投资者的关注。股票和债券市场表现良好,黄金和油价也有所上涨。.....

    每日资讯 2024-05-17 08:01 311
  • 中心化AI的未来:你就是产品,让股东价值最大化
    中心化AI的未来:你就是产品,让股东价值最大化

    AI发展超越生命周期,中心化AI竞赛,最好模型胜出。数据质量崩溃,抓取互联网数据损害模型。AI助手训练数字孪生,自动化取代工作,寡头垄断API控制成本。监管和政策制定者知识差距被利用,执行版权法和KYC GPU。AI受大公司控制,剥削人类利润。新模型取代人类工作,数字优势出售给最高出价者。AI应由民主开放和去中心化系统管理,解决重要问题。.....

    每日资讯 2024-05-17 06:01 100
  • ZKRollups:房间里的大象
    ZKRollups:房间里的大象

    ZK Rollups是一种简化的区块链技术,利用零知识和简洁性属性来保护用户隐私并提高交易速度。然而,目前仍存在隐私泄露和数据可用性的问题。生成ZKP和提交证明的速度可能成为快速终结的瓶颈,降低用户体验。ZK Rollups可能不适合所有类型的DApps,且发布状态差异的方法也存在安全风险。尽管如此,ZK技术仍有潜力解决区块链难题。.....

    每日资讯 2024-05-17 06:01 874
  • 以太坊的原生协议,逃向Solana
    以太坊的原生协议,逃向Solana

    Solana在FTX/Alameda崩溃后重生,巩固了其作为顶级区块链的地位。随着SOL价格和DeFi指标的增长,Solana生态的开发者们推出新的激励系统吸引用户和资金。许多以太坊项目选择迁移到Solana,但市场份额仍面临风险。GMSOL是一个独立的交易所,使用GMX代币进行价值衡量和存储,并实施回购机制。市场猜测Ethena和Pendle将部署到Solana生态,开发者应该多元化区块链部署来维护市场份额。加密行业必须跨越不确定性鸿沟,吸引传统资产进入链上,否则将面临失去金钱和市场份额的风险。....

    每日资讯 2024-05-17 06:01 770
  • 火星财经加密日报|5月16日
    火星财经加密日报|5月16日

    加密货币市场反弹,投资者认为疲软的通胀数据是看涨机制的转变。Bitfinex分析师表示,比特币价格上涨约2.5%,符合预期。瑞士联邦委员会拟实施加密资产报告框架,提高税收透明度。超过600家公司在美SEC监管文件中披露持有比特币ETF,总价值达35亿美元。Neoclassic Capital是由前高盛集团员工创立的加密风险投资公司,致力于为加密行业各领域注入资金。比特币价格上涨至66,035美元,受美国CPI数据低于预期的影响,投资者预期降息。多个加密货币空投项目备受关注,建议使用旗舰桥接器https:/

    每日资讯 2024-05-17 06:00 785
  • 观点:宏观经济的流动性夏天或将到来,足够的耐心是成功关键
    观点:宏观经济的流动性夏天或将到来,足够的耐心是成功关键

    作者提出了“万物法则”来解释全球经济运作机制,认为科技股和加密货币是成长型资产,受长期趋势影响。作者认为当前的债务滚动、大选和全球问题不太可能改变这种情况,但市场也存在意外。正确的时间视角、投资组合管理和耐心可以避免投资失败。总的来说,“万物法则”是理解全球经济的最佳框架,但也需要注意意外情况。.....

    每日资讯 2024-05-16 17:02 507
  • 加密KOL推文影响研究:短期喊单效应明显,跟单1000美金1月后平均产生79美金亏损
    加密KOL推文影响研究:短期喊单效应明显,跟单1000美金1月后平均产生79美金亏损

    KOL喊单是韭菜们获取财富密码的重要来源,但研究发现KOL们的推文带来的长期投资价值微乎其微。此外,KOL们的推文对加密货币价格有短期影响,但长期投资建议不可靠。投资者应谨慎遵循KOL的建议,监管机构和商业媒体也应加强审查。.....

    每日资讯 2024-05-16 17:02 890