最精妙的ZK应用解析:深入探讨Tornado Cash运作原理与业务逻辑

导语:近期Vitalik与多位学者联合发表的新论文引发了广泛关注,论文中探讨了Tornado Cash如何实现反洗钱方案,其核心思路是让取款人证明自己的存款记录属于一个不包含黑钱的集合。…

CHAINTT 安全事件资讯

导语:近期Vitalik与多位学者联合发表的新论文引发了广泛关注,论文中探讨了Tornado Cash如何实现反洗钱方案,其核心思路是让取款人证明自己的存款记录属于一个不包含黑钱的集合。不过论文对Tornado Cash的业务逻辑与原理着墨不多,这让不少读者感到意犹未尽。

值得注意的是,以Tornado为代表的隐私项目才是真正运用了ZK-SNARK算法的零知识特性,而大多数打着ZK旗号的Rollup项目实际上只利用了ZK-SNARK的简洁性。在实际应用中,人们常常混淆Validity Proof与ZK的区别,而Tornado恰好是理解ZK应用的绝佳案例。本文作者曾在2022年为Web3Caff Research撰写过一篇关于Tornado原理的深度解析,现将其部分内容重新整理并加以拓展,希望能帮助读者更好地理解Tornado Cash的运作机制。

解密”龙卷风”的运作原理

作为一款基于零知识证明的混币器协议,Tornado Cash在2019年推出了首个版本,并于2021年底发布了新版本的测试版。旧版Tornado Cash在去中心化方面做得相当出色,其链上合约完全开源且不设多签控制,前端代码不仅开源还备份在IPFS网络中。考虑到旧版架构更为简洁明了,本文将重点解析旧版的工作原理。

Tornado Cash的核心设计理念是通过汇集大量存取款交易来混淆视听。用户存入代币后,只需出示ZK Proof证明自己曾存款,就能用新地址提取资金,从而切断存取款地址之间的关联性。

形象地说,Tornado就像一个透明的玻璃箱,里面堆满了众人投入的硬币。虽然我们能看清是谁放入了硬币,但由于硬币的高度同质化,当陌生人从中取走一枚时,我们很难追溯这枚硬币最初的主人。

(图源:rareskills)这种场景其实并不陌生:当我们在Uniswap池子里兑换ETH时,根本无法确认这些ETH来自哪个流动性提供者。但关键区别在于,使用Uniswap需要支付等值代币作为交换,且无法实现资金的私密转移;而混币器仅需提款者出示存款凭证即可。

为了确保存取款行为的一致性,Tornado池子设定了标准化的存取金额。比如某个池子的100名存款者和100名取款者,虽然交易记录公开可查,但每人存取金额完全相同,这就有效切断了资金流转的痕迹。这种设计在提供隐私保护的同时,也不可避免地为洗钱行为创造了便利条件。

这里引出一个关键问题:取款者如何在不暴露身份的情况下证明自己的存款记录?最直接的方法是披露具体存款记录,但这显然会泄露隐私。零知识证明的巧妙之处就在于,它允许取款者在不透露任何敏感信息的前提下,证明自己确实在Tornado合约中有未提取的存款记录。

这个证明过程可以转化为一个数学问题:已知Tornado的存款记录集合为{C1,C2,…C100…},取款者Bob需要证明自己持有的密钥能生成其中的某个Cn,但又不透露具体是哪一个。这就要用到Merkle Tree的特殊性质。

Tornado将所有存款记录组织成一棵Merkle Tree,每个新存款都会生成一个特征值Commitment作为叶子节点,并更新Merkle Root。例如Bob的第1万笔存款会记录在第1万个叶子节点C10000=Cn,合约随后会计算新的Root值。(注:为优化计算效率,Tornado合约会缓存最近发生变化的节点数据)

(图源:RareSkills)Merkle Proof的优势在于其简洁性。即便Merkle Tree包含超过100万个叶子节点,验证某笔交易存在的证明也仅需21个节点数值。

取款时,Bob需要证明两件事:一是Cn确实存在于Merkle Tree中,这可以通过构造包含Cn的Merkle Proof来实现;二是证明自己持有的存款凭证与Cn存在关联。

深入解析Tornado业务逻辑

当用户在Tornado Cash界面点击存款按钮时,前端代码会在本地生成两个随机数K和r,计算出Cn=Hash(K,r)的值后,将这个commitment提交给Tornado合约,存入Merkle Tree。这里的K和r相当于私钥,用户必须妥善保管,因为后续取款时仍需使用。

(encryptedNote是可选项,允许用户用私钥加密凭证K和r并存储在链上以防丢失)需要强调的是,这些操作都发生在链下,Tornado合约和外部观察者都无法获取K和r。一旦这些凭证泄露,就相当于钱包私钥被盗。

Tornado合约收到存款后,会将Cn记录为Merkle Tree的新叶子节点并更新Root值。因此,每个Cn都对应着特定的存款行为,外界可以观察到哪些地址进行了存款,以及对应的Cn值。

取款时,用户在前端输入凭证K和r,系统会使用这些参数生成ZK Proof,证明Cn存在于Merkle Tree中且与用户持有的凭证对应。这个过程中,所有关键参数都被隐藏,既保护了隐私,又验证了取款资格。同时公开的参数包括:当前Merkle root、收款地址A和防重放攻击标识符nf。

设计上采用两个随机数K和r生成Cn是出于安全考虑,单一随机数可能导致碰撞风险。其中nf=Hash(K)作为防重放攻击的标识符,与Cn一一对应。这个机制类似于以太坊的nonce,确保每笔取款只能执行一次。

如果没有nf机制,虽然可以通过检查ZK Proof是否重复来防止重放攻击,但这会带来巨大的存储开销。相比之下,记录小巧的nf标识符是更经济的解决方案。

取款函数的参数设计体现了精妙的平衡:用户提交的ZK Proof隐藏了关键信息,自定义的收款地址通常为新创建地址,而nf则确保交易唯一性。不过这里存在一个小问题:新创建的取款地址往往没有ETH支付gas费,因此系统允许用户指定中继者(relayer)代付gas,费用从提款金额中扣除。

综上所述,Tornado Cash通过巧妙的密码学设计,在用户基数足够大的情况下,就像让目标消失在茫茫人海中。其中ZK-SNARK技术的应用尤为关键,它成功隐藏了取款人的关键信息。可以说,Tornado是目前将ZK技术应用于实际场景中最精妙的项目之一。

声明:文章不代表CHAINTT观点及立场,不构成本平台任何投资建议。投资决策需建立在独立思考之上,本文内容仅供参考,风险 自担!转载请注明出处:https://www.chaintt.cn/11908.html

上一篇 2025年9月10日 13:15
下一篇 2025年9月10日 13:51

相关推荐

  • Bitlayer:探索BitVM方案的比特币Layer 2扩容技术

    Bitlayer是首个基于BitVM方案的比特币Layer 2网络,通过分层虚拟机技术实现与比特币主链同等级别的安全性,同时支持图灵完备的智能合约。其核心技术包括:1)BitVM虚拟机实现EVM兼容的复杂合约执行;2)乐观验证机制提升交易吞吐量;3)OP_DLC桥确保资产跨链安全转移。项目已完成500万美元种子轮融资,计划2024年4月上线主网V1,目标实现1亿美元TVL和百万级日交易量。Bitlayer通过技术创新解决了比特币扩展性与功能性难题,为DeFi等复杂应用提供了基础设施支持。

    2025年10月20日
    1950
  • 全面解析zKSync生态系统:核心技术与应用指南

    zkSync是基于零知识rollup技术的以太坊第二层扩容方案,通过链下计算和加密证明实现低成本、高吞吐量交易,同时保持以太坊主网安全性。其EVM兼容性和账户抽象功能简化了开发流程,吸引Uniswap等主流dApp迁移。zkSync Era的推出进一步优化交易效率,并可能通过空投激励用户参与生态。作为ZK-Rollup代表方案,zkSync在性能、费用和提款速度上优于Optimistic Rollup,成为开发者扩展以太坊应用的热门选择。

    2025年9月12日
    2190
  • zkRollup技术解析:原理与架构深度剖析

    Rollup 概述 Rollup 是一类区块链 Layer 2 扩展解决方案。在 Rollup 方案中,项目运营商在扩展的主链(即 Layer 1)之下运行一个相对独立的 Layer 2 平台。用户可以在 Layer 2 平台上执行合约或划转代币。 Layer 2 平台的安全性由其所依赖的 Layer 1 区块链来保证。当 Layer 2 中生成新的区块时,来自 Layer 2 区块的交易信息以及 Layer 2 的交易后状态根将被捆绑为 Rollup 交易并发布在 Layer 1 链上。实际的交易执行和状态变化都是在主链下面的 Layer 2 平台上处理的,Layer 1 只需要验证 Layer 2 状态转换的正确性。由于验证状态转换正确性的成本远低于执行这些Layer 1,Layer 2上的交易可以实现Layer 1平台的扩展。与 Layer 1 相比,Layer 2 平台可以提供更高的交易吞吐量和更低的交易成本,同时保持同等的安全性。 相比其他链下交易方案,Rollups 有两大特点: Layer 2 状态数据的可用性是通过将其存储在主链上来解决的。Layer 2 平台在主链上的区块中记录所有交易信息或完整的 Layer 2 状态变化。如果 Layer 2 状态丢失,任何人都可以从主链上存储的信息中恢复丢失的状态。 Rollup方案中,打包存储在主链上的 Layer 2 状态根变化需要通过某种方式在主链上进行验证。经过验证后,Layer 2 的状态将被锁定在 Layer 1 主链上。因此,在安全验证方案的条件下,Layer 2 可以享受与 Layer 1 相同级别的安全性。 基于主链对 Layer 2 状态更新的验证方式,目前Rollup技术方案主要有两类。一是乐观汇总(Optimistic Rollup)。在此类方案中,主链合约不会直接验证 Layer 2 提交的新状态,而是为每个提交的新状态准备一个质疑期。由于Rollup将所有交易信息提交到主链并公开,因此任何人都可以验证状态更新(尤其是当更新涉及自己的钱包时)。如果新状态不正确,验证者可以针对该错误状态生成欺诈证明并在质疑期内提交,从而使不正确的状态更新无效。 另一种 Rollup 解决方案是 zk Rollup。在此类方案中,执行 Layer 2 状态更新后,Layer 2 的操作者必须提供状态更新正确性的零知识证明,并将其与状态更新一起提交到主链。主链上的合约将验证证明以确定状态更新的正确性。 与乐观汇总方案相比,zk Rollup 不需要漫长的质疑期来最终确认Layer 2 上的交易,并且可以更快地得到确认。此外,zk Rollup 并不依赖于这样的假设:网络中总会有诚实的验证者,当欺诈发生时,他们会及时提交欺诈证明。但同时,zk Rollup也面临着零知识证明技术计算成本高、复杂度高、开发难度大等问题,这些阻碍了zk Rollup技术在Rollups中的实际落地。随着近两年零知识证明技术的进一步发展,人们正逐渐克服这些障碍。zk Rollup 技术开始在 Layer 2 市场占据越来越大的份额。

    2025年8月26日
    2780
  • 6大AI可验证性解决方案全面解析 提升区块链技术透明度

    随着AI与区块链融合加深,可验证性成为信任基石。EigenLayer通过再质押协议复用以太坊验证网络降低成本;Hyperbolic的PoSP机制以1%计算开销实现高效验证;Mira通过分布式节点网络验证AI输出准确性;Atoma采用TEE保障隐私与验证;Lagrange和EZKL运用零知识证明确保模型完整性;ORA协议通过opML实现链上AI验证。这些方案在成本、效率与安全性间寻求平衡,共同推动去中心化AI的可信发展。

    2025年8月18日
    1990
  • 环形签名(Ring Signatures)的工作原理与区块链应用解析

    环形签名是一种密码学技术,通过将发送者身份隐藏在”环”形公钥组中实现交易匿名性,最早由CryptoNote协议应用于区块链。门罗币等隐私币利用该技术结合隐匿地址实现强隐私保护,但存在交易体积大、监管风险等缺点。相比零知识证明,环形签名仅隐藏发送者身份,计算成本较低但隐私性较弱。这项技术在隐私保护与合规监管之间面临持续挑战。

    2025年10月3日
    2090
风险提示:防范以"数字货币""区块链"名义进行非法集资的风险