以太坊隐私保护——隐匿地址

中级1/22/2025, 4:13:36 PM
以太坊的隐私问题日益受到关注,尤其是交易透明度可能暴露用户的财务信息和活动。为解决此问题,隐匿地址(Stealth Addresses)被提出,旨在通过为每笔交易生成唯一的临时地址,确保接收者的身份和交易细节保持私密。这种方法无需依赖第三方隐私协议,直接在协议层面增强隐私性。然而,隐匿地址的实施仍面临挑战。

介绍

Web3加密用户面临的一个主要问题是隐私保护不足。由于所有交易都可以在公共账本中查看,而且越来越多的交易与一个清晰的ENS名称挂钩,这让很多用户不愿进行某些操作,或者必须采取增加使用难度的方式来完成这些操作。比如,从热钱包转账到冷钱包,或者反过来。用户可能不希望一个钱包和另一个钱包相互关联,因为他们不希望其他人看到冷钱包的余额。目前,以太坊的地址不像私人银行账户那样保密,因为任何人都可以看到你的钱包和交易记录,甚至你的社交活动(如SBT、认证、在各种dapp上的行为等)。正因为如此,Vitalik曾指出,隐私是以太坊必须解决的三大主要技术转型之一,只有这样,以太坊才能真正为普通用户提供价值。

现有的隐私解决方案,如Tornado Cash,虽然可以提供一定程度的隐私保护,但并不完美,原因有几点。首先,用户担心他们的地址可能会被集中交易所或其他平台列入黑名单。其次,使用Tornado Cash等工具的体验并不友好,更适合技术娴熟的用户。

隐匿地址提供了一种类似私人银行账户的隐私保护方式,并且这种方式非常直观易懂。此外,随着隐匿地址技术的不断发展,我们有可能在不违反各国反洗钱(AML)法规的前提下,保护用户隐私。

用户隐私需求

虽然关于Web和Web3用户对隐私的态度的研究不多,但通过网络搜索,我们发现了一些相关研究,结果显示用户对隐私保护有明显的需求。

  1. 2022年,Simin Ghesmati等人进行的调查并发布于《区块链中的用户感知隐私》一文中,指出“有一半的受访者认为交易隐私对他们至关重要”。虽然这项研究主要集中在比特币用户身上,但以太坊用户的态度很可能也类似。不过,这项研究的样本量较小(仅14位受访者)。
  2. 另一个有趣的2022年研究,发布在Frontiers期刊上的《区块链用户的政治、经济和治理态度 》研究中,调查了3710名加密用户。结果显示,大约四分之一的受访者认为隐私是“区块链和加密货币最重要的特性”。

  1. 在隐私方面的普遍态度上,Consensys发布了2023年《 Web3 和加密货币全球调查》报告,调查了来自15个国家的15,158人,讨论了关于网络的多个话题,不仅仅是加密货币。调查结果显示,83%的受访者认为数据隐私非常重要,而只有45%的受访者表示他们信任当前互联网服务商对他们的数据和个人信息的使用方式。
  2. 一个 英国金融服务补偿计划进行的调查,于 2023 年 4 月发布,强调 9% 的受访者引用了“渴望匿名/隐私”作为他们投资加密货币的原因。2023年4月,英国金融服务补偿计划(FSCS)发布的一项调查显示,9%的受访者表示,“对匿名性/隐私的需求”是他们投资加密货币的原因。

隐匿交易协议的采纳情况

Railgun的表现非常出色,截至2024年11月,协议的使用稳步增长,总价值锁仓(TVL)超过了7000万美元,交易量达到了20亿美元。

TVL(美元)Railgun在以太坊主网的表现 — 来源: ​​Railgun — DefiLlama

Umbra 的协议使用情况也持续增长(人们将隐匿地址注册到他们的ENS上),截至2024年11月,注册人数接近77,000人:

Umbra 累计注册人数(跨链) — 来源:dune.com

如果我们看一下以太坊中最广为人知的(而且现在不幸变得臭名昭著的)隐私协议——Tornado Cash,我们可以看到,尽管其合约地址技术上被列入了OFAC的SDN名单,Tornado Cash仍然得到了显著的使用。

下图显示了Tornado Cash的TVL变化。我们可以看到,2021年10月左右,Tornado Cash从峰值开始第一次大幅下降,这与加密市场的整体抛售相符;第二次下降发生在2022年8月,当时OFAC将Tornado Cash列入SDN名单;第三次下降出现在2022年11月OFAC重新指定时。然而,从那时起,Tornado Cash尽管面临制裁,仍然稳定增长,TVL几乎达到了6亿美元。这强烈表明,用户对以太坊上的基本交易隐私有着明显的需求。

TVL(美元)Tornado Cash在以太坊主网的表现 — 来源:Tornado Cash — DefiLlama

隐匿地址的现状

根据这项研究,当前在EVM链上已投入使用的四个主要隐匿地址解决方案是:

其中,Fluidkey和Umbra基于以太坊的标准,分别是:

而Labyrinth和Railgun则是基于zerocash协议,这也是zcash的基础。Zerocash使用一个受保护的资金池,用户可以将资金存入其中。它通过“票据”的概念实现私密交易,票据是加密表示的价值,每张票据包含一个隐藏值、所有者密钥和一个唯一编号(空值)。使用zk-SNARKs技术,能够在不暴露细节的情况下验证所有权,从而完成私密转账。每当票据被使用时,空值被揭示以防止双重支付,并且为接收者生成新的票据,形成一种UTXO系统。

总体来看,隐匿地址的工作原理是:第三方可以向一个从未存在的地址发送资金,而接收者通过某些方式可以发现并控制这个地址(也就是说,他们可以随后花费这些资金)。

ERC-5564标准定义了一种机制,接收者可以发布一个隐匿元地址,基于此可以衍生出新的以太坊地址。任何想要向接收者发送资金的人,都能生成新地址并且让接收者在没有任何直接沟通的情况下了解这些资金。所有隐匿地址的实现都基于这一核心原理。

隐匿地址的工作方式

隐匿元地址由两个压缩公钥组合而成,分别称为“支出密钥”和“查看密钥”。隐匿元地址采用EIP-3770标准的链特定地址格式,并在前面加上“st:”前缀。以下是一个隐匿地址的示例:

st:eth:0x036ffa94a70a5b9608aca693e12da815fe0295f3739c7b22b0284c6d85c464ba4a02c0521b6fe31714b2ca0efa159402574355b754e0b50406b0b5fb33128eec3507

为了简化,隐匿地址可以与普通的以太坊地址(以及ENS)关联,这使得向隐匿地址转账变得更加容易。发送者会解析该地址,并依据EIP-5564标准生成一个临时公钥,再根据此公钥创建隐匿地址。发送者将资金发送到新生成的隐匿地址,通常是通过一个单一合约,所有隐匿地址的接收者都会监听这个合约并订阅相关事件。每当公告事件触发时,接收者将会检查公告中的临时公钥,将其与自己的私钥结合,查看是否有权限花费发送到隐匿地址的资金。如果有,钱包或客户端会自动记住隐匿地址及其资金,并把相关余额显示给用户。要实际花费这些资金,用户只需要用支出私钥签署交易即可。

下面的图示更清晰地展示了这一流程:

这个过程完全是非交互的,也就是说,发送者和接收者之间并没有直接的沟通,第三方无法观察到两者之间的任何关联。

然而,为了让这一机制正常运作,接收者必须事先将隐匿地址告知发送者。一种实现方法是通过eip-6538 隐形元地址注册表,这是一种允许用户将隐匿元地址与普通以太坊地址绑定的合约,发送者可以通过查找这些地址来找到隐匿元地址。这就使得发送者能够通过ENS解析普通地址,并从注册表中查找关联的隐匿元地址。

这一机制打破了发送者和接收者之间的直接联系,保护了两者的隐私,防止他们的交易被公开。然而,有以下几点需要注意:

  • 当接收者花费这些资金时,他们将把资金转移给其他人,而接收者所转出的资金来源地址及原发送者的信息会被接收方看到。也就是说,转账的链条依然是完整且可追溯的,但这些信息不会直接与接收者关联(除非接收者将资金转至他们已知的非隐匿地址)。需要注意的是,这种情况仅适用于ERC-5564的实现,Railgun和Labyrinth不受此影响。
  • 另一个问题是,为了保持最佳隐私,用户可能需要将资金保留在最初接收到的隐匿地址里,直到他们真正需要使用它们,而不是将资金合并到一个单一地址。这就需要记住多个地址,并从不同地址中的资金进行转账,增加了操作的复杂性。
  • 为了从这些地址转账,接收者需要为地址充入一些ETH来支付交易费用,这可能导致接收者的匿名性被破坏。这是隐匿地址的已知问题之一,也是一些实现方案支持EIP-4337和支付方(paymaster)的原因。
  • 隐匿地址方案的一个缺点是,接收者需要监控区块链上的公告事件,并检查每个公告以确定自己是否收到了资金。这显然对大多数用户来说是一种不切实际的负担,尤其是在跨多个网络接收资金时。为了提高效率,标准中规定了一个“查看标签”(view tag),这是从共享秘密派生的一个简化哈希值,可以用来快速筛选出那些肯定不是发给自己的交易。通过使用查看标签,桌面端的性能影响不大,但在移动设备上可能会稍显明显。性能问题通常只有在钱包恢复时才会明显,因为恢复钱包时需要扫描每一个地址,直到合约部署的那一刻,这需要耗费时间。
  • 为了避免这一问题,用户可以选择将私有查看密钥与受信任的第三方共享。这个第三方服务会监控多个网络,并在用户收到资金时通知他们。当然,这也有一个取舍:虽然第三方无法实际花费用户的资金(因为他们没有私钥),但他们可以查看所有发送给某个接收者的资金,因此,用户需要信任他们保护隐私。Fluidkey 就是默认采用这种方式。
  • 虽然 ERC-5564 标准的隐匿地址协议主要用于保障转账隐私,但对于一些非金融用途,比如调用任意智能合约函数,仍然需要额外的技术支持,通常这些功能是根据具体实现来定制的。

比较矩阵

本文探讨的四种隐匿地址协议之间有许多不同之处,包括一些细微的差异和各自的优势与不足。最重要的对比点可能是关于可追溯性和隐藏金额的处理方式。

Fluidkey 和 Umbra 可以将资金转到标准的以太坊地址,同时断开与接收者身份的关联,但它们仍然保留了交易的可追溯性,意味着任何查看隐匿地址交易历史的人都能追踪到发送者。这意味着,若你收到资金并通过隐匿地址再次转账,接收者将能够看到这笔资金的来源。此外,转账金额本身也是公开的。相比之下,Railgun 和 Labyrinth 隐藏了发送者信息和转账金额,但代价是这些交易都发生在一个单一的合约内,而非传统的以太坊地址交易。

下图显示了我们在本文中比较的协议在这两个重要维度上的比较。

接下来是一个比较矩阵,展示了四种主要隐匿地址协议在六个主要维度上的比较:

  1. 端到端隐私:只有发送者和接收者能够看到交易信息。
  2. 前向保密性:通过隐匿交易接收到的资金,不会让接收方看到资金来源。
  3. 是否遵循 ERC-5564 和 ERC-6538 标准。
  4. 是否具有可扩展的模块化架构,支持与第三方 Dapp 的集成。
  5. 是否提供 SDK,供开发者集成使用。
  6. 是否提供去匿名化支持,以确保一定程度的合规性。
  7. 是否能隐藏转账的金额/价值。

|协议|端到端隐私 |前向保密性 |开放标准 |模块化架构| SDK |去匿名化支持 |隐藏金额 |

|——————|——————-|————————-|——- —————-|———————————|———|———— —————————|————————|

|Umbra | ✅ | ⛔️ | ✅ | ⛔️ | ⛔️ | ⛔️ | ⛔️ |

|Fluidkey | ⛔️ | ⛔️ | ✅ | ✅ |即将 | ✅ | ⛔️ |

|Labyrinth| ✅ | ✅ | ⛔️ | ✅ | ✅ | ✅ | ✅ |

|Railgun | ✅ | ✅ | ⛔️ | ✅ | ✅ |自愿 | ✅ |

以下部分详细描述了其他一些细节差异。每种隐匿地址实现都有其独特之处,根据你的需求不同,这些差异可能会影响你的选择。

举个例子:在 Fluidkey 中,所有的转账都会直接发送到链上的隐匿地址;而在 Umbra 中,只有 ETH 会发送到链上的隐匿地址,代币则会转移到一个中央合约中;而在 Railgun 和 Labyrinth 中,所有交易都通过核心合约处理,而不是直接发送到链上的隐匿地址。

深入解析隐匿地址的实现

Fluidkey

Fluidkey是一种基于 ERC-5564 标准的隐匿地址协议,支持用户发送、接收、交换以及桥接 ETH 和 ERC-20 代币。目前,Fluidkey 已在 Base、Optimism、Arbitrum、Polygon、Gnosis 和 Ethereum 主网部署。

用户通过 Fluidkey 的网页界面进行操作。首次登录时,用户使用钱包签署一条密钥生成消息,基于这条消息生成他们的查看密钥和支出密钥。每次用户进入应用时,密钥都会重新生成。

Fluidkey 有一些与其他隐匿地址实现不同的特点。最主要的不同之处在于,用户需要与 Fluidkey 共享他们的私密查看密钥(严格来说是从该密钥派生的一个 BIP-32 节点)。这样,Fluidkey 就能为用户生成隐匿地址,并且在用户收到资金时通知他们。然而,这也意味着 Fluidkey 可以查看用户的交易和余额,这是一个隐私上的妥协。不过,用户的资产依然是完全自主管理的。

Fluidkey 设计中的另一个亮点是,它会为每个新的隐匿地址部署一个智能合约账户。只有当隐匿地址中的资金被花费时,智能合约账户才会被创建。这个账户是一个 1/1 Safe 账户,支持如Gas 赞助等功能,使得用户可以更方便地管理多个隐匿地址。详细的技术说明可以在他们的技术手册中找到。

尽管 Fluidkey 确实有保留对用户账户透明的做法,这在合规性上可能反而是一个优势,虽然目前 Fluidkey 如何处理未来可能出现的执法请求还没有公开具体框架。但值得注意的是,Fluidkey 位于瑞士,瑞士有着严格的数据保护法——任何数据共享都必须有明确的法律依据,并且要通过法院审查(详细了解瑞士隐私法,可以参考这篇文章)。

用户可以完全自由地导出交易记录,或者将查看密钥分享给第三方(如会计),这对于企业尤其有帮助。但需要注意的是,根据 ERC-5564 规范,分享公钥意味着完全开放,无法单独查看某一笔交易。同时,像所有 ERC-5564 的实现一样,虽然无法追溯到具体用户,但每个隐匿地址的交易历史对于持有查看密钥的人仍然是公开的。为了减少这种影响,Fluidkey 提供了旋转查看密钥的功能,用户可以每月更换查看密钥,并只将特定月份的访问权限共享给第三方。

Fluidkey 还提供一个优势:隐匿地址并非由发送方生成,而是每次通过查询 ENS 时,由 Fluidkey 自行随机生成。这大大加快了流程,因为用户无需扫描公告事件来查找自己的交易。也就是说,发送方不需要拥有隐匿地址钱包,他们只需像往常一样发送资金即可。这意味着 Fluidkey 设计中没有注册合约,这也是其独特之处,带来了显著的优势。

值得一提的是,Fluidkey 承诺完全自我托管,并且已经开源了他们的 Stealth Account Kit 库。除此之外,还提供了几个独立开发的恢复接口,万一 Fluidkey 突然消失,这些接口也能帮助用户恢复账户,确保资金永远不会被锁定或卡住。

地址抽象化

通过使用智能合约账户,Fluidkey 能够自动抽象管理各个隐匿地址。这意味着,如果你希望从多个隐匿地址中转出指定金额给某个收款人,Fluidkey 可以自动计算出哪些地址组合能提供足够的资金来完成转账,同时处理所有的 gas 费用和合约部署,所有这一切都在幕后自动完成。此外,Fluidkey 还允许用户通过一个名为“标签”的酷功能,帮助用户将地址分类管理。

ENS 解析

Fluidkey 要求用户创建特定于 Fluidkey 的 ENS 名称。它们有两种形式:username.fkey.id 和 username.fkey.eth。一种是指向 Web 界面的 URL,用来向某人转账,另一种则是标准的 ENS 名称,可以与钱包一起使用。

ENS 设置使用了一个 ENS 离链解析器 (即 ERC-3668:CCIP 读取),该解析器返回隐匿地址。每次查询这个离链解析器时,它会为相应的 ENS 名称生成并返回一个新的隐匿地址。这是一个非常棒的功能,因为它允许用户使用一个易于识别的 ENS 名称,同时保持隐匿地址的隐私性,因为生成的隐匿地址与 ENS 名称之间无法回溯性地建立联系。

成本

Fluidkey可以免费使用,不收取任何费用。唯一的费用是在你想要花费这些资金时,为每个有资金的地址部署一个 Safe 合约。然而,虽然在主网部署相对较贵,但在 L2 上,费用是微不足道的,通常不到 1 美分,即使是将多个隐匿地址合并成一次转账。

通过 Safe 部署,Fluidkey 还可以进行 gas 赞助——他们计算出 gas 费用,并从用户的余额中扣除,即使是代币也能支付。如果是代币, 中继者将代表用户部署 Safe 并转移代币。

Umbra Cash

Umbra 是由 Scopelift实现的基于 eip-5564 和 eip-6538 的隐匿地址协议。当用户首次登录 Umbra 应用时,他们会经过一个设置过程,在此过程中需要签署一条消息,系统基于这条消息生成用户的支出密钥和查看密钥,以及相应的隐匿元地址。然后,用户将该隐匿元地址注册到自己的主钱包地址,并将其存储在链上,这一点与 Fluidkey 的实现方式有所不同。

Umbra 的 erc-5564 实现方式最符合标准,因为它不涉及访问用户的密钥。这意味着 Umbra(或其他任何人)无法查看用户的资金状况。但这也意味着,想要向用户发送资金的发送方,必须使用与 eip-5564 兼容的钱包(或使用 Umbra 应用)来生成隐匿元地址。

当有人想要 发送 资金给用户时,他们通常会使用 Umbra 应用程序来这样做。本质上,当有人想要向某个用户发送资金时,通常会通过 Umbra 应用来完成。Umbra 应用会查找与用户的 ENS 名称或钱包地址注册的隐匿元地址,并生成一个隐匿地址。收款人在登录 Umbra 应用后,可以扫描并查看自上次登录以来,发送到其隐匿地址的所有资金。得益于高效的缓存机制,这一扫描过程通常只需 10-15 秒,用户也可以选择指定一个特定区块范围来缩小扫描范围。Umbra v2 版本将引入视图标签(viewtags)功能,进一步加快这一过程。

中继者

隐匿地址的一个问题是,为了让收款人能够使用发送到隐匿地址的资金,他们需要为该地址提供 ETH 或其他支付交易费用的 gas 代币。在大多数网络中,如果隐匿地址接收到的是 ETH,通常不会出现问题。然而,如果收到的是 erc-20 代币或 NFT,使用 ETH 为该隐匿地址支付 gas 费用可能会暴露该地址与用户其他地址的关联,从而失去隐私保护。

为了绕过这一问题,Umbra 引入了中继者机制。当发送给 Umbra 用户的资产不是 ETH 时,它们会先发送到一个特殊的合约,而不是直接发送到隐匿地址。用户可以通过在 Umbra 应用中发起一个元交易,指示 Umbra 的中继者代为将资金从合约中转移到用户的隐匿地址。中继者会为用户完成这笔交易,并扣除相应的费用。

成本

为了防止垃圾邮件,Umbra 合约在低交易费用的网络中转账时,会收取一小部分费用。这是为了避免垃圾邮件增加扫描交易的成本,导致识别相关交易变得更加困难。因此,这笔费用被认为是一种合理的权衡。

支持的网络

目前,Umbra 已经部署在以太坊主网、Optimism、Polygon、Gnosis Chain 和 Arbitrum 等多个网络上。 Umbra 的注册合约设计独特,使用了 create2 部署方法,并且智能合约地址在所有网络上都是相同的。这意味着,只要合约存在于某个网络,客户端就可以确认这是正确的合约。客户端可以配置网络,任何人都可以在任何网络上部署合约。他们已经统一了字节码,并且合约没有特定的所有者,允许任何人在任何链上无权限地部署注册和公告合约。

Umbra v2

Scopelift 正在开发 Umbra的第2版本 ,新的版本引入了模块化架构,允许核心合约扩展支持更多代币标准或其他类型的用例。借助这种新架构,第三方开发者可以为各种代币标准构建模块,例如 erc-1155、erc-7621,支持 erc-4337 paymasters 或任何其他功能。目前,Umbra 核心合约支持两种主要场景,分别是 ETH 和 erc-20,版本 2 将支持更多不同的场景。

Labyrinth

Labyrinth 是一个基于零知识证明(zkp)的隐私协议,它并不像 eip-5564 + eip-6538 那样依赖标准,而是通过 zkFi 中间件为交易增加匿名性和隐私保护。Labyrinth 的白皮书将其描述为一个“zkFi”中间件:“zkFi 提供了一个封装的解决方案,作为一个隐私中间件,内置合规性。”内置合规性指的是 Labyrinth 的“选择性去匿名化”,这是一种复杂的解决方案,允许某些交易对特定授权方(即法律机构,如国际刑警等)去匿名,同时保持透明性和公开性。

Labyrinth 使用的核心智能合约包括一个多交易和多资产池,允许用户在一个交易中交易多个资产。为了花费资产,用户扫描网络并获取加密的票据数据,解密票据,并筛选出要花费的资产。随后,用户创建一个包含交易的 ZKP(零知识证明)及与票据相关的签名密钥的签名。

Labyrinth 核心合约的一部分是一个转换器合约,它与模块化代理合约接口,这些代理合约基本上是外部合约的代理。例如:如果用户想使用 Labyrinth 与 Uniswap 进行交互,用户会创建一个交易,使用转换器合约通过 Uniswap 的代理合约调用 Uniswap 池的交换操作。

Labyrinth 的 zkFi 协议使用“票据”来跟踪余额和转账。票据本质上是一个数据结构,描述了某个资产的金额及其属于哪个地址。客户端存储创建票据所需的信息,并使用这些信息来花费资产。票据的承诺(资产 ID、所有者和价值的哈希)存储在链上的 Merkle 树中。实际上,Labyrinth 使用了两棵 Merkle 树,一棵用于票据,一棵用于根地址。

票据的数据结构包括:

  • 资产ID(assetId):指示票据代表的资产类型(如 ETH、WBTC、MATIC 等)。
  • 金额(value):票据表示的金额。
  • 叶节点索引(leafIndex):票据在 Merkle 树中的索引位置。
  • 致盲因子(blinding):用于加密的随机因子。
  • 根地址(rootAddress):拥有该票据的用户地址。
  • 撤销者公钥(revoker):选择的撤销者的公钥。

您会发现,以上数据结构中没有提到资产的所有者,这有些奇怪,因为在票据 Merkle 树中记录的承诺实际上是资产 ID、金额和所有者的哈希值。实际上,所有者是根据根地址、撤销者以及一个随机的致盲因子计算出来的。因此,外部观察者看到的所有者地址其实是每笔新交易时都创建的一个新地址。

屏蔽池

Labyrinth 的独特之处在于,它与传统的隐形地址协议略有不同,采用了一种屏蔽池的方式,使用票据概念创建了一个屏蔽的 UTXO 池,提供了前向保密性。回想一下,基于 eip-5564 的实现中,当用户将资金转账给某个对象时,接收方可以看到资金的来源。举个例子,爱丽丝通过隐形地址付款给鲍勃,鲍勃又付款给查理,这样查理就能知道鲍勃最初从爱丽丝那里收到了资金,依此类推。而 Labyrinth 的屏蔽池就避免了这个问题。

为了理解这个屏蔽池的工作方式,我们需要了解资金在协议中如何转移:

用户在屏蔽池中的余额是所有相关资产票据的总和。要使用这些票据,用户必须揭示票据的“无效符”。无效符是唯一的,一旦票据被花费,无效符就会被标记,防止重复使用,并且会基于已用票据创建一个新票据。多个相同资产的票据可以合并,新的票据也可以被创建。无效符就是 (𝑙,𝑐,𝛿) 的哈希值,其中 𝑙 是票据 Merkle 树中该票据承诺的索引,𝑐 是承诺,𝛿 是一个随机的致盲因子。

隐形交易的接收方通过与 eip-5564 相同的方式识别交易,即他们监听核心合约发出的事件,识别哪些隐形地址可以用于发送资金,并将这些地址记录在本地。通过视图标签的使用,以及通过本地缓存和异步同步票据信息,接收到资金的过程变得更加高效。

例如,Aztec 提出了一个提案来加速接收资金的发现过程,具体内容请参见《提案请求:注释发现协议 — Aztec》。

为了使用这些资金,用户还需要生成 zk-proof,这与 eip-6654 实现方式不同,后者直接使用普通的以太坊地址。生成证明需要一个兼容的钱包,性能较好,一般中端安卓设备上大约 20 秒左右可以完成。

Bundler 和转换器

Labyrinth 提供了几项非常实用的功能,解决了隐形交易的一些痛点。通过 erc-4337 bundlers 发送到 Labyrinth 核心合约的交易,是作为用户操作进行的。这意味着用户可以在不需要 ETH 或 gas 代币的情况下使用票据,因为他们可以通过 erc-4337 paymaster 让系统代为支付 gas,从而增加了隐私性。唯一的例外是初始存款,它不是通过用户操作提交的。通过 erc-4337 paymaster,还可以通过转账资产本身来支付 gas,即使这些资产是 erc-20 代币,Labyrinth 还提供了 gas 价格预言机 API。

Labyrinth 另一个非常棒的功能是它的模块化架构,允许转换器合约作为第三方 dapp 的代理。这使得用户不仅可以通过隐形交易转账资金,还可以与第三方 dapp(例如 Uniswap、Aave、Lido 等)进行交互。这些代理“转换器”合约本质上实现了一个功能,该功能输入一定数量的资产并输出相应数量的资产,底层逻辑存在于某个第三方合约中。

合规解决方案

Labyrinth 使用一种叫做选择性去匿名化(SeDe)的框架,确保符合合规要求和监管标准。

在 Labyrinth 的票据数据结构中,包含一个叫做“撤销者”的字段。撤销者是一个特定实体的地址,可以启动去匿名化的过程。用户必须从预设的列表中选择至少一个撤销者。撤销者的责任不仅是识别潜在的非法或不合规活动,更重要的是在执法机关的要求下执行去匿名化操作。

需要注意的是,撤销者并没有直接去匿名化交易的权限。他们的职责是发起去匿名化的请求,而这些请求会公开发送给一个叫做“监护人”的委员会,这些监护人负责审查隐私和合规问题。监护人会投票决定是否允许去匿名化某笔交易。如果投票通过,并且达成法定人数,撤销者就能解密交易数据,从而将该笔交易与之前的交易进行关联,直到交易的来源完全去匿名化。

这种机制通过制衡确保了任何单一实体不能随意公开交易数据。即使监护人之间合谋,他们也无法绕过撤销者的权限,而撤销者也必须得到监护人委员会的多数票才能执行去匿名化操作。

Railgun

RAILGUN 是一种隐私保护的隐形交易系统,已经在以太坊、BSC、Polygon 和 Arbitrum 上部署。它与 Labyrinth 有相似之处,都是基于“票据”概念,这些票据以承诺的形式存储在 Merkle 树中,并构成 UTXO 集。这意味着,票据可以通过创建新票据来转给其他接收者。在消费票据时,需要为该票据添加一个“无效符”来防止双重消费。而无效符只能由票据的拥有者计算出来,它是根据支出密钥的哈希值和 Merkle 树中票据的索引值计算的,意味着只有票据的拥有者才能花费该票据,且每个票据只能使用一次。

在 Railgun 中,隐形元地址的前缀为“0zk”,并且像 eip-5564 一样,它由公共查看密钥和公共支出密钥组成。不同之处在于,Railgun 使用的是 BabyJubJub 曲线上的 Ed25519 密钥,而不是 ECDSA 和 secp256k1 密钥。用户通过扫描 Railgun 合约中的所有事件,使用查看密钥来识别哪些事件表示资金已转入他们的账户。

Railgun 利用广播者网络进行操作。广播者是中继者,它们接收来自用户的元交易并将实际交易广播到目标区块链,且会代表用户支付 Gas 费用。通过这种方式,用户的交易可以被保护在广播者背后,从而保障用户的匿名性。用户向广播者发送的交易会被加密,并通过Waku协议 发送。

Railgun 具有模块化架构,允许与外部智能合约互动,提供超越简单转账的功能。它通过 AdaptRelay 合约实现,在与外部合约交互前后对代币进行遮蔽和解遮蔽,例如,解遮蔽代币 A,通过某个自动做市商(AMM)交换为代币 B,再将代币 B 遮蔽回原始所有者。

Railgun 即将发布的版本 3 将采用 eip-4337 标准,并且支持传统的元交易。团队希望通过为 Railgun 设置专门的 eip-4337 用户操作内存池,允许独立的求解者作为广播者参与交易的广播。目前,Railgun 团队正在与 Umbra 合作,共同研究这一方向,解决一些边缘案例和潜在问题。有关更多细节,可以参考下文关于 Railgun v3 的部分内容。

费用

Railgun 协议在存款和取款时收取 0.25% 的手续费,这部分费用会被转入 DAO 财库,并逐步分发给质押 RAIL 治理代币的用户。除了这笔固定的 0.25% 手续费外,广播者通常还会收取额外费用,一般来说,大约是链上交易 Gas 费用的 10%。

治理

Railgun 采用了去中心化治理系统,任何对核心合约(包括财库和治理合约)的修改都需要通过 DAO 提案流程。特别的是,Railgun 在不同网络上的实例各自拥有独立的治理体系。例如,以太坊、Polygon 和 Binance Chain 上的 Railgun 各自有不同的治理结构和代币。

SDK 和 Cookbook

Railgun 提供了详细的 SDK,供钱包和 Dapp 开发者使用,帮助他们将隐形地址功能集成到应用中。此外,Railgun 还提供了由社区维护的 cookbook ,其中包含一系列“食谱”,允许 Dapp 开发者为 Railgun 创建模块,用户通过这些模块可以与 Dapp 进行私密交互。例如,开发者可以为去中心化交易所(DEX)编写食谱,允许 Railgun 用户在不暴露交易信息的情况下交换代币。

Railgun v3

Railgun 版本 3 预计将使交易费用降低 50% 到 60%。此外,版本 3 还将支持通过专用内存池来处理 eip-4337 用户操作,并引入基于意图的架构,允许求解者竞争最佳执行方案。虽然细节仍然在开发中,但目前团队正在与CowSwap合作,计划通过前置和后置钩子机制优化求解过程,进一步提高交易效率。

Railgun Connect

Railgun Connect 可能是提议中最有趣的变化之一,它类似于 WalletConnect 的功能,允许用户通过 0zk 地址连接到大多数前端应用,以进行私密操作,而不需要这些 Dapp 特意通过自定义模块集成 Railgun。

Railgun Connect 是一个浏览器扩展,它的工作方式是通过 HardHat 在本地模拟链的状态,并将一个 web3 提供者注入到 Dapp 中,连接到本地 HardHat 版本的链。这就允许用户像平常一样与 Dapp 合约交互,记录交易,批量处理这些交易并生成 SNARK 证明,最后将证明发送到真实链上的 Railgun 合约。虽然描述有所简化,但它传达了基本概念。简单来说,用户几乎可以与任何 Dapp 进行交互,唯一的限制是对于那些需要进行额外链下处理的 Dapp 存在一些边缘情况。值得注意的是,本地保存链状态是一个资源密集型操作,但一旦完成,用户就可以像使用普通钱包一样,使用 Railgun 的隐形地址与 Dapp 交互,不会感受到任何差异。

总结

有一些关于将隐形地址纳入以太坊协议的有趣提案。例如, Inco 提出了一个 ERC-20 “包装器”的概念,它将普通的 ERC-20 合约进行包装,并加密所有余额。所有的转账和授权操作都在加密的状态下进行,使用的是完全同态加密技术。Inco 依赖于一些目前仅在其自己网络上存在的预编译功能,但未来可能会引入以太坊。

此外,还有一个叫做EIP-7503:零知识虫洞 的提案,它采用了“烧毁证明”(proof-of-burn)设计。不过这个提案似乎没有受到广泛关注,可能是因为它需要更新 EVM,若没有这一更新,它只能在代币层面实施,使用一个支持 EIP-7503 的 ERC-20 设计(或者某些 L2 可能会在他们的 EVM 操作码中加入支持)。

Aztec 是目前最复杂的隐私技术之一,但它要求用户将资金桥接到 Aztec 网络上才能使用,这可能对大多数用户来说是一个不太能接受的体验。然而,如果以太坊用户对基本交易隐私的需求日益增加,Aztec 就可能成为一个独特且有价值的 L2,尤其是在 Dapp 和用户逐渐迁移到默认提供隐私的平台时。

类似地,Intmax 是一个以太坊 L2(基于 Plasma 设计),注重隐私,并且通过 ZKP 基础的反洗钱证明验证资金的合法性,同时对交易金额施加限制。Intmax 在提供隐私方面有一定的局限性,尤其是 EVM 智能合约操作不具备隐私保护。但与 Aztec 不同,Intmax 允许开发者用 Solidity 编写智能合约,这可能更适合一些开发者(根据具体的应用场景)。

钱包支持

虽然隐形地址协议的采用逐渐增加,这是一个积极的信号,但仍然面临一些挑战。最重要的挑战之一是,目前主流的以太坊钱包还不完全支持隐形地址(至少现在不支持)。如果这些钱包打算支持隐形地址,它们可能需要做出几个选择。以下是其中一些选择:

  • 它们是会为单一实现提供有明确立场的支持,还是会构建并维护一个跨多个协议的综合聚合器?后者在开发和维护上的成本可能会非常高。
  • 是否会有监管方面的考虑?它们是否需要对选择性去匿名化的程度和机制(例如 Labyrinth 的做法)表明立场?
  • 隐形地址需要一个链上组件,通常是与注册合约(Fluidkey 除外)相关联,这意味着钱包必须显式支持每个 EVM 网络(尽管 Umbra 的设计使得注册表的无权限部署变得更加容易)。
  • 隐形地址使得与区块浏览器(例如 Etherscan)的现有集成变得更加复杂。例如,“查看在浏览器”按钮对于隐形元地址无法正常工作,因为钱包显示的是总余额。这一问题可能也会出现在转账中。类似的边缘情况需要考虑清楚。
  • 根据底层实现的不同,用户将只能在特定的去中心化应用(dapp)上有效使用隐形地址,即那些由底层协议支持的 dapp。对于模块化隐形地址架构,这一点是可能实现的。然而,并不是所有的 dapp 都会得到支持,钱包需要以某种方式告知用户这个信息。使用 eip-5506 时,虽然稍微容易一些,但它仍然存在一定的复杂性和边缘情况,这些问题可能会影响到钱包的用户体验。

对于用户隐私保护的挑战,仍然存在改进的空间。参见这篇论文:“Umbra隐形地址方案在以太坊上的匿名性分析”,作者成功地在以太坊主网去匿名化了 48.5% 的隐形交易。他们使用的启发式方法与协议本身无关,更多地与隐私管理习惯有关。例如,用户将资金发送到他们控制的隐形地址,然后再将这些资金发送回原先发送地址,误以为这样就破坏了可追溯性。总的来说,作者识别了六种不同的启发式方法,这些方法都基于不遵循最佳实践。然而,这些问题是关键的 UX 问题,必须解决。

总体而言,我对隐形地址和以太坊的隐私前景持乐观态度。我认为我们已经取得了相当显著的进展,并发现了一些非常可修复的挑战。我有信心,主流钱包将能够找到为隐形地址提供足够支持的方法,使得用户能够几乎不费力地使用它们,享受到用户期望并应得的隐私保护。

要特别感谢所有致力于研究和建设隐形地址基础设施的团队,包括我在本文中提到的四个协议。他们的辛勤工作和坚持不懈将对以太坊产生巨大的影响!

免责声明:

  1. 本文转载自【Medium】。所有版权归原作者所有【Simon Brown】。若对本次转载有异议,请联系 Gate Learn 团队,他们会及时处理。
  2. 免责声明:本文所表达的观点和意见仅代表作者个人观点,不构成任何投资建议。
  3. Gate Learn 团队将文章翻译成其他语言。未经允许,禁止复制、分发或抄袭翻译文章。

以太坊隐私保护——隐匿地址

中级1/22/2025, 4:13:36 PM
以太坊的隐私问题日益受到关注,尤其是交易透明度可能暴露用户的财务信息和活动。为解决此问题,隐匿地址(Stealth Addresses)被提出,旨在通过为每笔交易生成唯一的临时地址,确保接收者的身份和交易细节保持私密。这种方法无需依赖第三方隐私协议,直接在协议层面增强隐私性。然而,隐匿地址的实施仍面临挑战。

介绍

Web3加密用户面临的一个主要问题是隐私保护不足。由于所有交易都可以在公共账本中查看,而且越来越多的交易与一个清晰的ENS名称挂钩,这让很多用户不愿进行某些操作,或者必须采取增加使用难度的方式来完成这些操作。比如,从热钱包转账到冷钱包,或者反过来。用户可能不希望一个钱包和另一个钱包相互关联,因为他们不希望其他人看到冷钱包的余额。目前,以太坊的地址不像私人银行账户那样保密,因为任何人都可以看到你的钱包和交易记录,甚至你的社交活动(如SBT、认证、在各种dapp上的行为等)。正因为如此,Vitalik曾指出,隐私是以太坊必须解决的三大主要技术转型之一,只有这样,以太坊才能真正为普通用户提供价值。

现有的隐私解决方案,如Tornado Cash,虽然可以提供一定程度的隐私保护,但并不完美,原因有几点。首先,用户担心他们的地址可能会被集中交易所或其他平台列入黑名单。其次,使用Tornado Cash等工具的体验并不友好,更适合技术娴熟的用户。

隐匿地址提供了一种类似私人银行账户的隐私保护方式,并且这种方式非常直观易懂。此外,随着隐匿地址技术的不断发展,我们有可能在不违反各国反洗钱(AML)法规的前提下,保护用户隐私。

用户隐私需求

虽然关于Web和Web3用户对隐私的态度的研究不多,但通过网络搜索,我们发现了一些相关研究,结果显示用户对隐私保护有明显的需求。

  1. 2022年,Simin Ghesmati等人进行的调查并发布于《区块链中的用户感知隐私》一文中,指出“有一半的受访者认为交易隐私对他们至关重要”。虽然这项研究主要集中在比特币用户身上,但以太坊用户的态度很可能也类似。不过,这项研究的样本量较小(仅14位受访者)。
  2. 另一个有趣的2022年研究,发布在Frontiers期刊上的《区块链用户的政治、经济和治理态度 》研究中,调查了3710名加密用户。结果显示,大约四分之一的受访者认为隐私是“区块链和加密货币最重要的特性”。

  1. 在隐私方面的普遍态度上,Consensys发布了2023年《 Web3 和加密货币全球调查》报告,调查了来自15个国家的15,158人,讨论了关于网络的多个话题,不仅仅是加密货币。调查结果显示,83%的受访者认为数据隐私非常重要,而只有45%的受访者表示他们信任当前互联网服务商对他们的数据和个人信息的使用方式。
  2. 一个 英国金融服务补偿计划进行的调查,于 2023 年 4 月发布,强调 9% 的受访者引用了“渴望匿名/隐私”作为他们投资加密货币的原因。2023年4月,英国金融服务补偿计划(FSCS)发布的一项调查显示,9%的受访者表示,“对匿名性/隐私的需求”是他们投资加密货币的原因。

隐匿交易协议的采纳情况

Railgun的表现非常出色,截至2024年11月,协议的使用稳步增长,总价值锁仓(TVL)超过了7000万美元,交易量达到了20亿美元。

TVL(美元)Railgun在以太坊主网的表现 — 来源: ​​Railgun — DefiLlama

Umbra 的协议使用情况也持续增长(人们将隐匿地址注册到他们的ENS上),截至2024年11月,注册人数接近77,000人:

Umbra 累计注册人数(跨链) — 来源:dune.com

如果我们看一下以太坊中最广为人知的(而且现在不幸变得臭名昭著的)隐私协议——Tornado Cash,我们可以看到,尽管其合约地址技术上被列入了OFAC的SDN名单,Tornado Cash仍然得到了显著的使用。

下图显示了Tornado Cash的TVL变化。我们可以看到,2021年10月左右,Tornado Cash从峰值开始第一次大幅下降,这与加密市场的整体抛售相符;第二次下降发生在2022年8月,当时OFAC将Tornado Cash列入SDN名单;第三次下降出现在2022年11月OFAC重新指定时。然而,从那时起,Tornado Cash尽管面临制裁,仍然稳定增长,TVL几乎达到了6亿美元。这强烈表明,用户对以太坊上的基本交易隐私有着明显的需求。

TVL(美元)Tornado Cash在以太坊主网的表现 — 来源:Tornado Cash — DefiLlama

隐匿地址的现状

根据这项研究,当前在EVM链上已投入使用的四个主要隐匿地址解决方案是:

其中,Fluidkey和Umbra基于以太坊的标准,分别是:

而Labyrinth和Railgun则是基于zerocash协议,这也是zcash的基础。Zerocash使用一个受保护的资金池,用户可以将资金存入其中。它通过“票据”的概念实现私密交易,票据是加密表示的价值,每张票据包含一个隐藏值、所有者密钥和一个唯一编号(空值)。使用zk-SNARKs技术,能够在不暴露细节的情况下验证所有权,从而完成私密转账。每当票据被使用时,空值被揭示以防止双重支付,并且为接收者生成新的票据,形成一种UTXO系统。

总体来看,隐匿地址的工作原理是:第三方可以向一个从未存在的地址发送资金,而接收者通过某些方式可以发现并控制这个地址(也就是说,他们可以随后花费这些资金)。

ERC-5564标准定义了一种机制,接收者可以发布一个隐匿元地址,基于此可以衍生出新的以太坊地址。任何想要向接收者发送资金的人,都能生成新地址并且让接收者在没有任何直接沟通的情况下了解这些资金。所有隐匿地址的实现都基于这一核心原理。

隐匿地址的工作方式

隐匿元地址由两个压缩公钥组合而成,分别称为“支出密钥”和“查看密钥”。隐匿元地址采用EIP-3770标准的链特定地址格式,并在前面加上“st:”前缀。以下是一个隐匿地址的示例:

st:eth:0x036ffa94a70a5b9608aca693e12da815fe0295f3739c7b22b0284c6d85c464ba4a02c0521b6fe31714b2ca0efa159402574355b754e0b50406b0b5fb33128eec3507

为了简化,隐匿地址可以与普通的以太坊地址(以及ENS)关联,这使得向隐匿地址转账变得更加容易。发送者会解析该地址,并依据EIP-5564标准生成一个临时公钥,再根据此公钥创建隐匿地址。发送者将资金发送到新生成的隐匿地址,通常是通过一个单一合约,所有隐匿地址的接收者都会监听这个合约并订阅相关事件。每当公告事件触发时,接收者将会检查公告中的临时公钥,将其与自己的私钥结合,查看是否有权限花费发送到隐匿地址的资金。如果有,钱包或客户端会自动记住隐匿地址及其资金,并把相关余额显示给用户。要实际花费这些资金,用户只需要用支出私钥签署交易即可。

下面的图示更清晰地展示了这一流程:

这个过程完全是非交互的,也就是说,发送者和接收者之间并没有直接的沟通,第三方无法观察到两者之间的任何关联。

然而,为了让这一机制正常运作,接收者必须事先将隐匿地址告知发送者。一种实现方法是通过eip-6538 隐形元地址注册表,这是一种允许用户将隐匿元地址与普通以太坊地址绑定的合约,发送者可以通过查找这些地址来找到隐匿元地址。这就使得发送者能够通过ENS解析普通地址,并从注册表中查找关联的隐匿元地址。

这一机制打破了发送者和接收者之间的直接联系,保护了两者的隐私,防止他们的交易被公开。然而,有以下几点需要注意:

  • 当接收者花费这些资金时,他们将把资金转移给其他人,而接收者所转出的资金来源地址及原发送者的信息会被接收方看到。也就是说,转账的链条依然是完整且可追溯的,但这些信息不会直接与接收者关联(除非接收者将资金转至他们已知的非隐匿地址)。需要注意的是,这种情况仅适用于ERC-5564的实现,Railgun和Labyrinth不受此影响。
  • 另一个问题是,为了保持最佳隐私,用户可能需要将资金保留在最初接收到的隐匿地址里,直到他们真正需要使用它们,而不是将资金合并到一个单一地址。这就需要记住多个地址,并从不同地址中的资金进行转账,增加了操作的复杂性。
  • 为了从这些地址转账,接收者需要为地址充入一些ETH来支付交易费用,这可能导致接收者的匿名性被破坏。这是隐匿地址的已知问题之一,也是一些实现方案支持EIP-4337和支付方(paymaster)的原因。
  • 隐匿地址方案的一个缺点是,接收者需要监控区块链上的公告事件,并检查每个公告以确定自己是否收到了资金。这显然对大多数用户来说是一种不切实际的负担,尤其是在跨多个网络接收资金时。为了提高效率,标准中规定了一个“查看标签”(view tag),这是从共享秘密派生的一个简化哈希值,可以用来快速筛选出那些肯定不是发给自己的交易。通过使用查看标签,桌面端的性能影响不大,但在移动设备上可能会稍显明显。性能问题通常只有在钱包恢复时才会明显,因为恢复钱包时需要扫描每一个地址,直到合约部署的那一刻,这需要耗费时间。
  • 为了避免这一问题,用户可以选择将私有查看密钥与受信任的第三方共享。这个第三方服务会监控多个网络,并在用户收到资金时通知他们。当然,这也有一个取舍:虽然第三方无法实际花费用户的资金(因为他们没有私钥),但他们可以查看所有发送给某个接收者的资金,因此,用户需要信任他们保护隐私。Fluidkey 就是默认采用这种方式。
  • 虽然 ERC-5564 标准的隐匿地址协议主要用于保障转账隐私,但对于一些非金融用途,比如调用任意智能合约函数,仍然需要额外的技术支持,通常这些功能是根据具体实现来定制的。

比较矩阵

本文探讨的四种隐匿地址协议之间有许多不同之处,包括一些细微的差异和各自的优势与不足。最重要的对比点可能是关于可追溯性和隐藏金额的处理方式。

Fluidkey 和 Umbra 可以将资金转到标准的以太坊地址,同时断开与接收者身份的关联,但它们仍然保留了交易的可追溯性,意味着任何查看隐匿地址交易历史的人都能追踪到发送者。这意味着,若你收到资金并通过隐匿地址再次转账,接收者将能够看到这笔资金的来源。此外,转账金额本身也是公开的。相比之下,Railgun 和 Labyrinth 隐藏了发送者信息和转账金额,但代价是这些交易都发生在一个单一的合约内,而非传统的以太坊地址交易。

下图显示了我们在本文中比较的协议在这两个重要维度上的比较。

接下来是一个比较矩阵,展示了四种主要隐匿地址协议在六个主要维度上的比较:

  1. 端到端隐私:只有发送者和接收者能够看到交易信息。
  2. 前向保密性:通过隐匿交易接收到的资金,不会让接收方看到资金来源。
  3. 是否遵循 ERC-5564 和 ERC-6538 标准。
  4. 是否具有可扩展的模块化架构,支持与第三方 Dapp 的集成。
  5. 是否提供 SDK,供开发者集成使用。
  6. 是否提供去匿名化支持,以确保一定程度的合规性。
  7. 是否能隐藏转账的金额/价值。

|协议|端到端隐私 |前向保密性 |开放标准 |模块化架构| SDK |去匿名化支持 |隐藏金额 |

|——————|——————-|————————-|——- —————-|———————————|———|———— —————————|————————|

|Umbra | ✅ | ⛔️ | ✅ | ⛔️ | ⛔️ | ⛔️ | ⛔️ |

|Fluidkey | ⛔️ | ⛔️ | ✅ | ✅ |即将 | ✅ | ⛔️ |

|Labyrinth| ✅ | ✅ | ⛔️ | ✅ | ✅ | ✅ | ✅ |

|Railgun | ✅ | ✅ | ⛔️ | ✅ | ✅ |自愿 | ✅ |

以下部分详细描述了其他一些细节差异。每种隐匿地址实现都有其独特之处,根据你的需求不同,这些差异可能会影响你的选择。

举个例子:在 Fluidkey 中,所有的转账都会直接发送到链上的隐匿地址;而在 Umbra 中,只有 ETH 会发送到链上的隐匿地址,代币则会转移到一个中央合约中;而在 Railgun 和 Labyrinth 中,所有交易都通过核心合约处理,而不是直接发送到链上的隐匿地址。

深入解析隐匿地址的实现

Fluidkey

Fluidkey是一种基于 ERC-5564 标准的隐匿地址协议,支持用户发送、接收、交换以及桥接 ETH 和 ERC-20 代币。目前,Fluidkey 已在 Base、Optimism、Arbitrum、Polygon、Gnosis 和 Ethereum 主网部署。

用户通过 Fluidkey 的网页界面进行操作。首次登录时,用户使用钱包签署一条密钥生成消息,基于这条消息生成他们的查看密钥和支出密钥。每次用户进入应用时,密钥都会重新生成。

Fluidkey 有一些与其他隐匿地址实现不同的特点。最主要的不同之处在于,用户需要与 Fluidkey 共享他们的私密查看密钥(严格来说是从该密钥派生的一个 BIP-32 节点)。这样,Fluidkey 就能为用户生成隐匿地址,并且在用户收到资金时通知他们。然而,这也意味着 Fluidkey 可以查看用户的交易和余额,这是一个隐私上的妥协。不过,用户的资产依然是完全自主管理的。

Fluidkey 设计中的另一个亮点是,它会为每个新的隐匿地址部署一个智能合约账户。只有当隐匿地址中的资金被花费时,智能合约账户才会被创建。这个账户是一个 1/1 Safe 账户,支持如Gas 赞助等功能,使得用户可以更方便地管理多个隐匿地址。详细的技术说明可以在他们的技术手册中找到。

尽管 Fluidkey 确实有保留对用户账户透明的做法,这在合规性上可能反而是一个优势,虽然目前 Fluidkey 如何处理未来可能出现的执法请求还没有公开具体框架。但值得注意的是,Fluidkey 位于瑞士,瑞士有着严格的数据保护法——任何数据共享都必须有明确的法律依据,并且要通过法院审查(详细了解瑞士隐私法,可以参考这篇文章)。

用户可以完全自由地导出交易记录,或者将查看密钥分享给第三方(如会计),这对于企业尤其有帮助。但需要注意的是,根据 ERC-5564 规范,分享公钥意味着完全开放,无法单独查看某一笔交易。同时,像所有 ERC-5564 的实现一样,虽然无法追溯到具体用户,但每个隐匿地址的交易历史对于持有查看密钥的人仍然是公开的。为了减少这种影响,Fluidkey 提供了旋转查看密钥的功能,用户可以每月更换查看密钥,并只将特定月份的访问权限共享给第三方。

Fluidkey 还提供一个优势:隐匿地址并非由发送方生成,而是每次通过查询 ENS 时,由 Fluidkey 自行随机生成。这大大加快了流程,因为用户无需扫描公告事件来查找自己的交易。也就是说,发送方不需要拥有隐匿地址钱包,他们只需像往常一样发送资金即可。这意味着 Fluidkey 设计中没有注册合约,这也是其独特之处,带来了显著的优势。

值得一提的是,Fluidkey 承诺完全自我托管,并且已经开源了他们的 Stealth Account Kit 库。除此之外,还提供了几个独立开发的恢复接口,万一 Fluidkey 突然消失,这些接口也能帮助用户恢复账户,确保资金永远不会被锁定或卡住。

地址抽象化

通过使用智能合约账户,Fluidkey 能够自动抽象管理各个隐匿地址。这意味着,如果你希望从多个隐匿地址中转出指定金额给某个收款人,Fluidkey 可以自动计算出哪些地址组合能提供足够的资金来完成转账,同时处理所有的 gas 费用和合约部署,所有这一切都在幕后自动完成。此外,Fluidkey 还允许用户通过一个名为“标签”的酷功能,帮助用户将地址分类管理。

ENS 解析

Fluidkey 要求用户创建特定于 Fluidkey 的 ENS 名称。它们有两种形式:username.fkey.id 和 username.fkey.eth。一种是指向 Web 界面的 URL,用来向某人转账,另一种则是标准的 ENS 名称,可以与钱包一起使用。

ENS 设置使用了一个 ENS 离链解析器 (即 ERC-3668:CCIP 读取),该解析器返回隐匿地址。每次查询这个离链解析器时,它会为相应的 ENS 名称生成并返回一个新的隐匿地址。这是一个非常棒的功能,因为它允许用户使用一个易于识别的 ENS 名称,同时保持隐匿地址的隐私性,因为生成的隐匿地址与 ENS 名称之间无法回溯性地建立联系。

成本

Fluidkey可以免费使用,不收取任何费用。唯一的费用是在你想要花费这些资金时,为每个有资金的地址部署一个 Safe 合约。然而,虽然在主网部署相对较贵,但在 L2 上,费用是微不足道的,通常不到 1 美分,即使是将多个隐匿地址合并成一次转账。

通过 Safe 部署,Fluidkey 还可以进行 gas 赞助——他们计算出 gas 费用,并从用户的余额中扣除,即使是代币也能支付。如果是代币, 中继者将代表用户部署 Safe 并转移代币。

Umbra Cash

Umbra 是由 Scopelift实现的基于 eip-5564 和 eip-6538 的隐匿地址协议。当用户首次登录 Umbra 应用时,他们会经过一个设置过程,在此过程中需要签署一条消息,系统基于这条消息生成用户的支出密钥和查看密钥,以及相应的隐匿元地址。然后,用户将该隐匿元地址注册到自己的主钱包地址,并将其存储在链上,这一点与 Fluidkey 的实现方式有所不同。

Umbra 的 erc-5564 实现方式最符合标准,因为它不涉及访问用户的密钥。这意味着 Umbra(或其他任何人)无法查看用户的资金状况。但这也意味着,想要向用户发送资金的发送方,必须使用与 eip-5564 兼容的钱包(或使用 Umbra 应用)来生成隐匿元地址。

当有人想要 发送 资金给用户时,他们通常会使用 Umbra 应用程序来这样做。本质上,当有人想要向某个用户发送资金时,通常会通过 Umbra 应用来完成。Umbra 应用会查找与用户的 ENS 名称或钱包地址注册的隐匿元地址,并生成一个隐匿地址。收款人在登录 Umbra 应用后,可以扫描并查看自上次登录以来,发送到其隐匿地址的所有资金。得益于高效的缓存机制,这一扫描过程通常只需 10-15 秒,用户也可以选择指定一个特定区块范围来缩小扫描范围。Umbra v2 版本将引入视图标签(viewtags)功能,进一步加快这一过程。

中继者

隐匿地址的一个问题是,为了让收款人能够使用发送到隐匿地址的资金,他们需要为该地址提供 ETH 或其他支付交易费用的 gas 代币。在大多数网络中,如果隐匿地址接收到的是 ETH,通常不会出现问题。然而,如果收到的是 erc-20 代币或 NFT,使用 ETH 为该隐匿地址支付 gas 费用可能会暴露该地址与用户其他地址的关联,从而失去隐私保护。

为了绕过这一问题,Umbra 引入了中继者机制。当发送给 Umbra 用户的资产不是 ETH 时,它们会先发送到一个特殊的合约,而不是直接发送到隐匿地址。用户可以通过在 Umbra 应用中发起一个元交易,指示 Umbra 的中继者代为将资金从合约中转移到用户的隐匿地址。中继者会为用户完成这笔交易,并扣除相应的费用。

成本

为了防止垃圾邮件,Umbra 合约在低交易费用的网络中转账时,会收取一小部分费用。这是为了避免垃圾邮件增加扫描交易的成本,导致识别相关交易变得更加困难。因此,这笔费用被认为是一种合理的权衡。

支持的网络

目前,Umbra 已经部署在以太坊主网、Optimism、Polygon、Gnosis Chain 和 Arbitrum 等多个网络上。 Umbra 的注册合约设计独特,使用了 create2 部署方法,并且智能合约地址在所有网络上都是相同的。这意味着,只要合约存在于某个网络,客户端就可以确认这是正确的合约。客户端可以配置网络,任何人都可以在任何网络上部署合约。他们已经统一了字节码,并且合约没有特定的所有者,允许任何人在任何链上无权限地部署注册和公告合约。

Umbra v2

Scopelift 正在开发 Umbra的第2版本 ,新的版本引入了模块化架构,允许核心合约扩展支持更多代币标准或其他类型的用例。借助这种新架构,第三方开发者可以为各种代币标准构建模块,例如 erc-1155、erc-7621,支持 erc-4337 paymasters 或任何其他功能。目前,Umbra 核心合约支持两种主要场景,分别是 ETH 和 erc-20,版本 2 将支持更多不同的场景。

Labyrinth

Labyrinth 是一个基于零知识证明(zkp)的隐私协议,它并不像 eip-5564 + eip-6538 那样依赖标准,而是通过 zkFi 中间件为交易增加匿名性和隐私保护。Labyrinth 的白皮书将其描述为一个“zkFi”中间件:“zkFi 提供了一个封装的解决方案,作为一个隐私中间件,内置合规性。”内置合规性指的是 Labyrinth 的“选择性去匿名化”,这是一种复杂的解决方案,允许某些交易对特定授权方(即法律机构,如国际刑警等)去匿名,同时保持透明性和公开性。

Labyrinth 使用的核心智能合约包括一个多交易和多资产池,允许用户在一个交易中交易多个资产。为了花费资产,用户扫描网络并获取加密的票据数据,解密票据,并筛选出要花费的资产。随后,用户创建一个包含交易的 ZKP(零知识证明)及与票据相关的签名密钥的签名。

Labyrinth 核心合约的一部分是一个转换器合约,它与模块化代理合约接口,这些代理合约基本上是外部合约的代理。例如:如果用户想使用 Labyrinth 与 Uniswap 进行交互,用户会创建一个交易,使用转换器合约通过 Uniswap 的代理合约调用 Uniswap 池的交换操作。

Labyrinth 的 zkFi 协议使用“票据”来跟踪余额和转账。票据本质上是一个数据结构,描述了某个资产的金额及其属于哪个地址。客户端存储创建票据所需的信息,并使用这些信息来花费资产。票据的承诺(资产 ID、所有者和价值的哈希)存储在链上的 Merkle 树中。实际上,Labyrinth 使用了两棵 Merkle 树,一棵用于票据,一棵用于根地址。

票据的数据结构包括:

  • 资产ID(assetId):指示票据代表的资产类型(如 ETH、WBTC、MATIC 等)。
  • 金额(value):票据表示的金额。
  • 叶节点索引(leafIndex):票据在 Merkle 树中的索引位置。
  • 致盲因子(blinding):用于加密的随机因子。
  • 根地址(rootAddress):拥有该票据的用户地址。
  • 撤销者公钥(revoker):选择的撤销者的公钥。

您会发现,以上数据结构中没有提到资产的所有者,这有些奇怪,因为在票据 Merkle 树中记录的承诺实际上是资产 ID、金额和所有者的哈希值。实际上,所有者是根据根地址、撤销者以及一个随机的致盲因子计算出来的。因此,外部观察者看到的所有者地址其实是每笔新交易时都创建的一个新地址。

屏蔽池

Labyrinth 的独特之处在于,它与传统的隐形地址协议略有不同,采用了一种屏蔽池的方式,使用票据概念创建了一个屏蔽的 UTXO 池,提供了前向保密性。回想一下,基于 eip-5564 的实现中,当用户将资金转账给某个对象时,接收方可以看到资金的来源。举个例子,爱丽丝通过隐形地址付款给鲍勃,鲍勃又付款给查理,这样查理就能知道鲍勃最初从爱丽丝那里收到了资金,依此类推。而 Labyrinth 的屏蔽池就避免了这个问题。

为了理解这个屏蔽池的工作方式,我们需要了解资金在协议中如何转移:

用户在屏蔽池中的余额是所有相关资产票据的总和。要使用这些票据,用户必须揭示票据的“无效符”。无效符是唯一的,一旦票据被花费,无效符就会被标记,防止重复使用,并且会基于已用票据创建一个新票据。多个相同资产的票据可以合并,新的票据也可以被创建。无效符就是 (𝑙,𝑐,𝛿) 的哈希值,其中 𝑙 是票据 Merkle 树中该票据承诺的索引,𝑐 是承诺,𝛿 是一个随机的致盲因子。

隐形交易的接收方通过与 eip-5564 相同的方式识别交易,即他们监听核心合约发出的事件,识别哪些隐形地址可以用于发送资金,并将这些地址记录在本地。通过视图标签的使用,以及通过本地缓存和异步同步票据信息,接收到资金的过程变得更加高效。

例如,Aztec 提出了一个提案来加速接收资金的发现过程,具体内容请参见《提案请求:注释发现协议 — Aztec》。

为了使用这些资金,用户还需要生成 zk-proof,这与 eip-6654 实现方式不同,后者直接使用普通的以太坊地址。生成证明需要一个兼容的钱包,性能较好,一般中端安卓设备上大约 20 秒左右可以完成。

Bundler 和转换器

Labyrinth 提供了几项非常实用的功能,解决了隐形交易的一些痛点。通过 erc-4337 bundlers 发送到 Labyrinth 核心合约的交易,是作为用户操作进行的。这意味着用户可以在不需要 ETH 或 gas 代币的情况下使用票据,因为他们可以通过 erc-4337 paymaster 让系统代为支付 gas,从而增加了隐私性。唯一的例外是初始存款,它不是通过用户操作提交的。通过 erc-4337 paymaster,还可以通过转账资产本身来支付 gas,即使这些资产是 erc-20 代币,Labyrinth 还提供了 gas 价格预言机 API。

Labyrinth 另一个非常棒的功能是它的模块化架构,允许转换器合约作为第三方 dapp 的代理。这使得用户不仅可以通过隐形交易转账资金,还可以与第三方 dapp(例如 Uniswap、Aave、Lido 等)进行交互。这些代理“转换器”合约本质上实现了一个功能,该功能输入一定数量的资产并输出相应数量的资产,底层逻辑存在于某个第三方合约中。

合规解决方案

Labyrinth 使用一种叫做选择性去匿名化(SeDe)的框架,确保符合合规要求和监管标准。

在 Labyrinth 的票据数据结构中,包含一个叫做“撤销者”的字段。撤销者是一个特定实体的地址,可以启动去匿名化的过程。用户必须从预设的列表中选择至少一个撤销者。撤销者的责任不仅是识别潜在的非法或不合规活动,更重要的是在执法机关的要求下执行去匿名化操作。

需要注意的是,撤销者并没有直接去匿名化交易的权限。他们的职责是发起去匿名化的请求,而这些请求会公开发送给一个叫做“监护人”的委员会,这些监护人负责审查隐私和合规问题。监护人会投票决定是否允许去匿名化某笔交易。如果投票通过,并且达成法定人数,撤销者就能解密交易数据,从而将该笔交易与之前的交易进行关联,直到交易的来源完全去匿名化。

这种机制通过制衡确保了任何单一实体不能随意公开交易数据。即使监护人之间合谋,他们也无法绕过撤销者的权限,而撤销者也必须得到监护人委员会的多数票才能执行去匿名化操作。

Railgun

RAILGUN 是一种隐私保护的隐形交易系统,已经在以太坊、BSC、Polygon 和 Arbitrum 上部署。它与 Labyrinth 有相似之处,都是基于“票据”概念,这些票据以承诺的形式存储在 Merkle 树中,并构成 UTXO 集。这意味着,票据可以通过创建新票据来转给其他接收者。在消费票据时,需要为该票据添加一个“无效符”来防止双重消费。而无效符只能由票据的拥有者计算出来,它是根据支出密钥的哈希值和 Merkle 树中票据的索引值计算的,意味着只有票据的拥有者才能花费该票据,且每个票据只能使用一次。

在 Railgun 中,隐形元地址的前缀为“0zk”,并且像 eip-5564 一样,它由公共查看密钥和公共支出密钥组成。不同之处在于,Railgun 使用的是 BabyJubJub 曲线上的 Ed25519 密钥,而不是 ECDSA 和 secp256k1 密钥。用户通过扫描 Railgun 合约中的所有事件,使用查看密钥来识别哪些事件表示资金已转入他们的账户。

Railgun 利用广播者网络进行操作。广播者是中继者,它们接收来自用户的元交易并将实际交易广播到目标区块链,且会代表用户支付 Gas 费用。通过这种方式,用户的交易可以被保护在广播者背后,从而保障用户的匿名性。用户向广播者发送的交易会被加密,并通过Waku协议 发送。

Railgun 具有模块化架构,允许与外部智能合约互动,提供超越简单转账的功能。它通过 AdaptRelay 合约实现,在与外部合约交互前后对代币进行遮蔽和解遮蔽,例如,解遮蔽代币 A,通过某个自动做市商(AMM)交换为代币 B,再将代币 B 遮蔽回原始所有者。

Railgun 即将发布的版本 3 将采用 eip-4337 标准,并且支持传统的元交易。团队希望通过为 Railgun 设置专门的 eip-4337 用户操作内存池,允许独立的求解者作为广播者参与交易的广播。目前,Railgun 团队正在与 Umbra 合作,共同研究这一方向,解决一些边缘案例和潜在问题。有关更多细节,可以参考下文关于 Railgun v3 的部分内容。

费用

Railgun 协议在存款和取款时收取 0.25% 的手续费,这部分费用会被转入 DAO 财库,并逐步分发给质押 RAIL 治理代币的用户。除了这笔固定的 0.25% 手续费外,广播者通常还会收取额外费用,一般来说,大约是链上交易 Gas 费用的 10%。

治理

Railgun 采用了去中心化治理系统,任何对核心合约(包括财库和治理合约)的修改都需要通过 DAO 提案流程。特别的是,Railgun 在不同网络上的实例各自拥有独立的治理体系。例如,以太坊、Polygon 和 Binance Chain 上的 Railgun 各自有不同的治理结构和代币。

SDK 和 Cookbook

Railgun 提供了详细的 SDK,供钱包和 Dapp 开发者使用,帮助他们将隐形地址功能集成到应用中。此外,Railgun 还提供了由社区维护的 cookbook ,其中包含一系列“食谱”,允许 Dapp 开发者为 Railgun 创建模块,用户通过这些模块可以与 Dapp 进行私密交互。例如,开发者可以为去中心化交易所(DEX)编写食谱,允许 Railgun 用户在不暴露交易信息的情况下交换代币。

Railgun v3

Railgun 版本 3 预计将使交易费用降低 50% 到 60%。此外,版本 3 还将支持通过专用内存池来处理 eip-4337 用户操作,并引入基于意图的架构,允许求解者竞争最佳执行方案。虽然细节仍然在开发中,但目前团队正在与CowSwap合作,计划通过前置和后置钩子机制优化求解过程,进一步提高交易效率。

Railgun Connect

Railgun Connect 可能是提议中最有趣的变化之一,它类似于 WalletConnect 的功能,允许用户通过 0zk 地址连接到大多数前端应用,以进行私密操作,而不需要这些 Dapp 特意通过自定义模块集成 Railgun。

Railgun Connect 是一个浏览器扩展,它的工作方式是通过 HardHat 在本地模拟链的状态,并将一个 web3 提供者注入到 Dapp 中,连接到本地 HardHat 版本的链。这就允许用户像平常一样与 Dapp 合约交互,记录交易,批量处理这些交易并生成 SNARK 证明,最后将证明发送到真实链上的 Railgun 合约。虽然描述有所简化,但它传达了基本概念。简单来说,用户几乎可以与任何 Dapp 进行交互,唯一的限制是对于那些需要进行额外链下处理的 Dapp 存在一些边缘情况。值得注意的是,本地保存链状态是一个资源密集型操作,但一旦完成,用户就可以像使用普通钱包一样,使用 Railgun 的隐形地址与 Dapp 交互,不会感受到任何差异。

总结

有一些关于将隐形地址纳入以太坊协议的有趣提案。例如, Inco 提出了一个 ERC-20 “包装器”的概念,它将普通的 ERC-20 合约进行包装,并加密所有余额。所有的转账和授权操作都在加密的状态下进行,使用的是完全同态加密技术。Inco 依赖于一些目前仅在其自己网络上存在的预编译功能,但未来可能会引入以太坊。

此外,还有一个叫做EIP-7503:零知识虫洞 的提案,它采用了“烧毁证明”(proof-of-burn)设计。不过这个提案似乎没有受到广泛关注,可能是因为它需要更新 EVM,若没有这一更新,它只能在代币层面实施,使用一个支持 EIP-7503 的 ERC-20 设计(或者某些 L2 可能会在他们的 EVM 操作码中加入支持)。

Aztec 是目前最复杂的隐私技术之一,但它要求用户将资金桥接到 Aztec 网络上才能使用,这可能对大多数用户来说是一个不太能接受的体验。然而,如果以太坊用户对基本交易隐私的需求日益增加,Aztec 就可能成为一个独特且有价值的 L2,尤其是在 Dapp 和用户逐渐迁移到默认提供隐私的平台时。

类似地,Intmax 是一个以太坊 L2(基于 Plasma 设计),注重隐私,并且通过 ZKP 基础的反洗钱证明验证资金的合法性,同时对交易金额施加限制。Intmax 在提供隐私方面有一定的局限性,尤其是 EVM 智能合约操作不具备隐私保护。但与 Aztec 不同,Intmax 允许开发者用 Solidity 编写智能合约,这可能更适合一些开发者(根据具体的应用场景)。

钱包支持

虽然隐形地址协议的采用逐渐增加,这是一个积极的信号,但仍然面临一些挑战。最重要的挑战之一是,目前主流的以太坊钱包还不完全支持隐形地址(至少现在不支持)。如果这些钱包打算支持隐形地址,它们可能需要做出几个选择。以下是其中一些选择:

  • 它们是会为单一实现提供有明确立场的支持,还是会构建并维护一个跨多个协议的综合聚合器?后者在开发和维护上的成本可能会非常高。
  • 是否会有监管方面的考虑?它们是否需要对选择性去匿名化的程度和机制(例如 Labyrinth 的做法)表明立场?
  • 隐形地址需要一个链上组件,通常是与注册合约(Fluidkey 除外)相关联,这意味着钱包必须显式支持每个 EVM 网络(尽管 Umbra 的设计使得注册表的无权限部署变得更加容易)。
  • 隐形地址使得与区块浏览器(例如 Etherscan)的现有集成变得更加复杂。例如,“查看在浏览器”按钮对于隐形元地址无法正常工作,因为钱包显示的是总余额。这一问题可能也会出现在转账中。类似的边缘情况需要考虑清楚。
  • 根据底层实现的不同,用户将只能在特定的去中心化应用(dapp)上有效使用隐形地址,即那些由底层协议支持的 dapp。对于模块化隐形地址架构,这一点是可能实现的。然而,并不是所有的 dapp 都会得到支持,钱包需要以某种方式告知用户这个信息。使用 eip-5506 时,虽然稍微容易一些,但它仍然存在一定的复杂性和边缘情况,这些问题可能会影响到钱包的用户体验。

对于用户隐私保护的挑战,仍然存在改进的空间。参见这篇论文:“Umbra隐形地址方案在以太坊上的匿名性分析”,作者成功地在以太坊主网去匿名化了 48.5% 的隐形交易。他们使用的启发式方法与协议本身无关,更多地与隐私管理习惯有关。例如,用户将资金发送到他们控制的隐形地址,然后再将这些资金发送回原先发送地址,误以为这样就破坏了可追溯性。总的来说,作者识别了六种不同的启发式方法,这些方法都基于不遵循最佳实践。然而,这些问题是关键的 UX 问题,必须解决。

总体而言,我对隐形地址和以太坊的隐私前景持乐观态度。我认为我们已经取得了相当显著的进展,并发现了一些非常可修复的挑战。我有信心,主流钱包将能够找到为隐形地址提供足够支持的方法,使得用户能够几乎不费力地使用它们,享受到用户期望并应得的隐私保护。

要特别感谢所有致力于研究和建设隐形地址基础设施的团队,包括我在本文中提到的四个协议。他们的辛勤工作和坚持不懈将对以太坊产生巨大的影响!

免责声明:

  1. 本文转载自【Medium】。所有版权归原作者所有【Simon Brown】。若对本次转载有异议,请联系 Gate Learn 团队,他们会及时处理。
  2. 免责声明:本文所表达的观点和意见仅代表作者个人观点,不构成任何投资建议。
  3. Gate Learn 团队将文章翻译成其他语言。未经允许,禁止复制、分发或抄袭翻译文章。
即刻开始交易
注册并交易即可获得
$100
和价值
$5500
理财体验金奖励!