美文网首页
TornadoCash V2: 隐私池和 Proof of i

TornadoCash V2: 隐私池和 Proof of i

作者: 雪落无留痕 | 来源:发表于2023-09-06 12:14 被阅读0次

    TornadoCash是加密货币世界中最著名的匿名交易服务。 TornadoCash利用零知识证明(ZKP)技术来掩盖资金来源。TornadoCash背后的机制被美国政府批评为非法金融活动提供便利,导致其在2022年8月被美国财政部强制除名。在许多情况下,隐私保护和洗钱活动似乎经常紧密地交织在一起。在追求隐私的同时,恶意行为者往往利用这些隐私功能进行非法洗钱。有没有可能找到一种方法,让人们既能维护自己的隐私,又能有效地遏制洗钱活动?隐私池和 无罪证明 (Proof of innocence) 机制是一个可能的解决方案。

    TornadoCash利用被称为 commitment 的收据来控制访问权。承诺是通过散列一个 secret 值和一个 nullifier 代码来生成的。每个commitment 只能用于一次提款。存款信息使用Merkle树结构记录,commitment作为叶子节点,并计算Merkle根。用户只需要提供从叶子到根的数据路径,就可以证明该数据是Merkle树中的一个叶子,从而间接证明之前向TornadoCash的资金存款。零知识证明用于隐藏存款来源,而nullifiers则用于防止双重提款攻击。

    TornadoCash的commitment 主要实现两个目的:

    • 提供先前的存款;
    • 保证单次的取款。

    Proof of innocence

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

    无罪证明的概念可以分为两个方向:

    1. 证明所提取的资金来自白名单(允许的名单)上所列的存款集。
    2. 证明被提取的资金不是来自黑名单(拒绝名单)上的存款。

    这两个方向的目的是通过证明其与授权存款的关联性或与禁止存款的关联性来确定被提取资金的合法性。

    隐私池设计原则

    隐私池的设计原则建立在TornadoCash的基础上,并增加了无罪证明的概念。在隐私池中,提款收据不仅具有代表TornadoCash收据的原始目的,而且还具有第三种意义: 证明所提取的资金来自白名单上的存款 。通过纳入这种额外的证明,Privacy-Pools旨在为提取的资金的合法性提供更高的保证,确保它们可以被追溯到白名单上列出的授权存款。

    来自Privacy-Pools的收据代表了以下含义:

    1. 证明以前的存款。
    2. 保证单次提款
    3. 证明所提取的资金来自白名单上的存款

    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,改为阻止。这个动作确保被阻止的资金不能被提取,因为它们与非法活动有关。

    如何从被拒绝的名单上提款

    如果一个用户,其存款没有列在美国政府的允许名单上,试图提取资金,而他们在美国允许名单上的相应存款位置被标记为阻止,这将阻止该用户使用与美国政府允许名单相关的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被认为是有效或允许的标准将由各监管机构自己决定。

    参考

    https://github.com/ameensol/privacy-pools

    https://ipfs.io/ipns/tornadocash.eth/

    https://github.com/tornadocash

    https://mirror.xyz/albertlin.eth/6g6RKC_BttfcRhyZ7yvD2Z0B6qd6L4kjRS_gzrsKTlc

    https://mirror.xyz/albertlin.eth/9odRdkZHI0T_vY857Dnft1ZCpEMR4-RctNkfBDFH0c4

    https://www.privacypools.com/

    https://news.marsbit.co/20230613084758780099.html

    相关文章

      网友评论

          本文标题:TornadoCash V2: 隐私池和 Proof of i

          本文链接:https://www.haomeiwen.com/subject/lwpkvdtx.html