文章介绍了一种名为“Gas Ticketing”的隐私保护方案,用户从协调者处购买“gas票”,赎回后,可以资助一个未注资的以太坊地址(EOA)。该方案利用盲签名技术,在保持隐私的同时,协调者也不知道谁购买了赎回的票,使得用户可以在不暴露身份的情况下为新账户提供资金,从而打破了用户身份账户和新账户之间的链上关联。
TL;DR - 用户从“协调者”处购买“票”,当兑换时,资助一个未资助的 EOA。这样做,同时保持隐私,以至于连协调者都不知道谁购买了已兑换的票。
感谢 Matt (lightclient), Guillaume, Matt Solomon, Barnabé, Chris Hager 和 Vitalik 的审查和反馈!
在 这个 仓库中找到用 Python (CLI) 实现的 PoC 和用 Go (Coordinator) 实现的 PoC。
当今以太坊格局的挑战之一是隐私。
用户资助他们的账户,被曝光,设置新的账户,重复。
管理大量的地址是一项复杂的任务,并且维护安全金融交易所需的必要隐私水平变得越来越具有挑战性。
这种隐私问题也延伸到 隐身地址。隐身地址可以通过创建不可链接的交易来增强隐私,但它们面临的挑战是,接收者的账户最初并没有 ETH 资助。如果发送者没有在隐身地址交易中附加足够的 ETH,接收者将无法使用它,并且必须首先从另一个可能被曝光的账户资助隐身地址。请查看 Vitalik 的博客文章 以获取有关该主题的更多详细信息。
无法显示图片可能的原因
一些隐私挑战归结为这样一个事实:EOA 需要有最少数量的 ETH 才能支付 gas 费用,然后才能在以太坊上执行操作。
通过 EIP-1559 和协议强制执行的基础费用的引入,提交零 gas 交易变得不可能。但是,我们可以通过让一个(最小程度信任的)外部方,即协调者,通过购买和兑换“gas 票”来处理未资助 EOA 的资金。在这样做的同时,我们能够有效地打破用户被曝光的账户(购买票)和用户未资助的账户(兑换票)之间的链接,从而提供更高的隐私。
对于以下内容,让我们假设我们正在处理一个有两个账户 A
和 B
的用户。
账户 A
已被资助并已曝光,而账户 B
代表一个刚刚创建的账户,尚未在以太坊上执行任何操作。用户持有这些账户的私钥,已收到 1000 DAI 的赠款支付到地址 B
。出于隐私原因,用户不希望将这笔钱收到地址 A
。
无法显示图片可能的原因
在这种情况下,用户无法使用 1000 DAI 做任何事情,因为他的账户中没有 ETH 来将 DAI 兑换为 ETH 或将 DAI 转移到 CEX。用户希望避免通过账户 A
为该账户提供资金,因为这将在 A
和 B
之间创建一条链上链接,并破坏最初设置账户 B
的原因。
用户现在有不同的选择:
B
在 CEX 前面被曝光。假设用户来自美国,因此被禁止与 Tornado Cash 互动,同时又不是一个铁杆的反叛自由主义者。那么,使用 Tornado Cash 将不是一个选择。
除了违反制裁(或增加恶意方的匿名性集合)的风险之外,基于 zk-SNARK 的混合器还具有高 gas 成本(存款 + 取款大约 100 万 gas),并且还需要用户具备一定的复杂性,因为他们需要本地构造一个 Merkle 证明才能进行提款。因此,选项 1 不适用于此用例。
选项 2 假设 CEX 在安全性和可靠性方面都可以完全信任,并且知道用户拥有账户“B”中的资金。因此,用户也放弃了这个选项。
还剩下选项 3……
在建立了背景之后,我们现在将更详细地研究 Gas 票务概念。这篇文章的灵感来自 Vitalik 的一篇 博客文章,其中概述了这样一个系统如何运作。这个票务概念最吸引人的特性之一是,它允许用户在使用未资助的 EOA 时保持他们的隐私。
票务解决方案基于 David Chaum 1983 年提出的 "不可追踪支付的盲签名" 的概念,该概念巧妙地实现了中心化电子现金系统上的不可追踪支付。从那时起,该方法已用于各种需要隐私的应用中,例如数字投票,以及更多与加密货币相关的 CoinJoin 协议,例如比特币上的 Wasabi Wallet。盲签名具有一些非常酷的属性,允许它们用于构建 gas 费票务解决方案。
它的工作原理如下:
A
从协调者处购买一张“票”,价格为 0.001 ETH。为此,用户将 ETH 连同一些盲化的数据发送给协调者。理论上,这些“数据”可能是一个哈希字符串,内容为“这是我的第一张票”。“盲化”是一种加密技术,可防止协调者以明文形式查看所提供的数据。盲化需要一个随机生成的数字,即盲化因子,用于“盲化”数据,并由用户保密。B
,可以通过首先“解盲”已签名的盲化数据(有效地获得协调者的有效签名),然后向协调者展示签名来兑换票,同时向协调者提供持有 1000 DAI 的待资助账户。(1) 用户生成随机/任意数据并对其进行盲化。(2) 用户将其与一些 ETH 一起发送给协调者。(3) 协调者确认收到并对盲化的数据进行签名。(4) 协调者返回已签名的盲化数据。(5) 用户解盲已签名的盲化数据并获得协调者的签名。(6) 用户使用一个未资助的账户,提交一个待资助的地址以及协调者的签名和未盲化的票。(7) 协调者验证签名并使用票的值资助所提供的地址。
重要的是,协调者在签名之前从未见过未盲化的数据,但会遇到它自己的有效签名,用户从协调者返回的已签名的盲化数据中提取了该签名。只有通过解盲返回的已签名的盲化数据,才能提取签名。看到签名后,协调者可以确信该用户(记住,使用的是账户 B
)有权获得一些账户的资助以兑换票,而不知道确切兑换了哪张票。
为了保持这篇文章的可读性,而又不会因代码过多而使其不堪重负,我选择不包括具体的代码示例。在 此存储库 中可以找到用 Python 实现的盲签名的 PoC。
更多地思考这个概念,人们可以识别出几个挑战,其中一些可能只是实现细节,而另一些则更具有根本性。
如上所述,票务需要对协调者有一定的信任,协调者可能会潜在地撤回你的资金并带着尚未兑换的票(基本上是 ETH)逃跑。虽然有人可能会争辩说,最好采用无需信任的解决方案,但我同意 Vitalik 的 评估,即,即使需要对协调者有一定的信任,所涉及的资金数量也很少,因此优势大于劣势。
然而,识别值得信赖的协调者仍然具有挑战性。恶意协调者可能会出售票而不提供签名或资助地址,因此我们必须依赖协调者的信誉系统。
协调者可以为此服务收取一些费用,从而开辟额外的、潜在的有利可图的收入来源。用户重视他们的隐私,并且愿意支付更多费用来私下资助他们未资助的账户。
出于隐私原因,票务服务需要具有固定大小的票。
广义上讲,一张票应该携带足够的价值(以 ETH 衡量),因此只需要少量票即可补偿协调者为未资助的 EOA 提供资金。对于较小的票尺寸,需要一次兑换更多的票。但是,这不会构成问题,因为用户可以同时购买和兑换多张票。
例如,用户可以通过向协调者发送 0.01 ETH 以及 10 条盲化的数据来购买 10 张票。无需处理“零钱”,因为协调者在扣除一些费用后,可以只使用整个票的价值来资助用户指定的地址。
用户应该有能力通过发送 ETH 并向他们提供盲化的数据来从协调者处购买一张票。如果没有访问盲化因子(用于盲化的随机数),则此盲化的数据对于任何其他用户都是无关紧要的。因此,可以将此盲化的数据作为 calldata 附加到交易中,而无需担心。
另一方面,协调者还必须与用户建立通信以在确认收到 ETH 后传递已签名的盲化的数据,此过程可能会带来某些挑战。
链下通信 - 一种解决方案是使用私有通信渠道。用户将向协调者发送一个 API 请求,以发送包括票购买和盲化的票的 txhash。之后,用户直接收到已签名的盲化的数据(协调者验证收到情况)并使用盲化因子对其进行解盲,该过程涉及模乘逆。
当用户希望通过提供协调者的签名和明文形式的“数据”来兑换票时,可以在协调者处设置另一个 API 端点以用于该目的,以避免暴露“数据”和明文票,因为如果暴露,其他人可能会抢先用户并兑换票。
无法显示图片可能的原因
总而言之,仍然需要付出大量的努力来解决上述挑战。
票务可以被视为一个侧信道,尽管侧信道在 MEV 的上下文中声誉很差(因为它们是一种中心化力量),但它们可以通过使不可链接的交易更方便来用于提高隐私。
如果你计划成为协调者,请与我联系。我很乐意在整合方面提供帮助。特别是,考虑到隐身地址,票务方法具有显着改善用户体验的潜力,这是我个人很乐意看到的。此外,如果你有任何疑虑或反馈,请随时在 Twitter 上联系 - 我很乐意回答即将到来的问题或参与讨论。
- 原文链接: hackmd.io/@Nerolation/rk...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!