厦门市思明区前埔路168号三楼01单元(西侧) 16556529378 unsmilingundefined

项目展示

V神发布《隐身地址不完整指南》解决以太坊隐私难题

2025-04-07

目前以太坊Ethereum生态系统中最大挑战之一是隐私Privacy。默认情况下,进入公共区块链的任何内容都是公开的,这不仅意味着资产和交易活动,还意味着 ENS 域名、POAP、NFT 和灵魂绑定代币等。使用一系列以太坊应用就意味着你的很多活动会公开给其他任何人查看和分析。本文源自于以太坊共同创办人 Vitalik Buterin 的部落格文章《An incomplete guide to stealth addresses》,由动区专栏 theBlockBeats 编译、整理与撰稿。前情提要:V神预测2023 年三大机会:钱包普及、抗通膨稳定币、以太坊登入背景补充:V神对以太坊技术不再兴奋,更看好落地应用:加密支付、身份生态、DAO未来

我们需要改善这种状况。然而,到目前为止,关于改善隐私的讨论主要围绕一个特定的用例,即:ETH 和主流 ERC20 代币的隐私保护转移。

这篇文章将描述一种不同类别工具的机制和用例,可以在许多其他情况下改善以太坊的隐私状态,也就是隐身地址stealth addresses概念。

隐身地址 (stealth addresses) 系统是什么?

假设 Alice 想要给 Bob 转移资产,可能是一定数量的加密货币例如 1 ETH、500 RAI,也可能是一个 NFT。当 Bob 收到资产时,他不想让其他人知道该笔资产的接收人是他。隐藏已经转移发生的事实是不可能的,特别是如果转移的是一个在链上仅存在一个副本的 NFT,不过隐藏谁是接收者可能更可行。

Alice 和 Bob 更想要的应该是这样一个支付流程系统,即,Bob 向 Alice或支持 ENS 域名发送某种能接收付款的地址编码,仅此信息就足以让 Alice或其他任何人向他发送资产,而且这与目前的支付工作流程几乎完全相同。

需要注意的是,这种隐私性与 Tornado Cash 提供的隐私完全不同。Tornado Cash 可以隐藏 ETH 或主要 ERC20 等主流可替代资产的转帐经常用于私下发送给自己,但在为鲜为人知的 ERC20 转帐添加隐私方面非常薄弱,并且根本无法为 NFT 转帐添加隐私。

使用加密货币进行支付的普通工作流程。 我们想增加隐私没有人能知道是 Bob 收到了资产,但保持工作流程不变。

如上提到的使用加密货币进行支付的普通工作流程,增加了隐私性,即没有人能知道资产接收人是 Bob,而且工作流程未发生改变。

隐身地址是可以由 Alice 或 Bob 生成的地址,但只能由 Bob 控制。Bob 生成一个支出密钥spending key并对此进行保密,然后使用该密钥生成一个隐藏元地址stealth metaaddress。他将这个元地址传递给 Alice或在ENS 上注册。Alice 可以对该元地址执行计算以生成属于 Bob 的隐身地址。然后 Alice 可以将她想发送的任何资产发送到这个地址,Bob 将完全控制这些资产。转移过程中,Alice 在链上发布了一些额外的加密数据一个临时公钥,来帮助 Bob 发现这个地址属于他。

另一种看待它的方式是:隐身地址提供与 Bob 相同的隐私属性,为每笔交易生成一个新地址,但不需要Bob 的任何交互。

隐身地址方案的完整工作流程如下所示:

Bob 生成他的根支出密钥root spending keym和隐身元地址stealth metaaddressM。Bob 添加了一条 ENS 记录来注册M为 bobeth 的隐身元地址 bobeth。我们假设 Alice 知道 Bob 的地址为 bobeth。Alice 在ENS 上查找 Bob 的隐身元地址M。Alice 生成一个只有她知道的临时密钥ephemeral key,并且她仅能使用一次生成这个特定的隐身地址。Alice 使用一种算法,将她的临时密钥和 Bob 的元地址metaaddress结合起来生成一个隐身地址。她现在可以将资产发送到这个地址。Alice 还生成她的临时公钥ephemeral public key,并将其发布到临时公钥注册表ephemeral public key registry这可以在与第一个将资产发送到这个隐身地址的交易相同的交易中完成。为了让 Bob 发现属于他的隐身地址,Bob 需要扫描临时公钥注册表,以查找自其上次扫描以来任何人发布的整个临时公钥列表。对于每个临时公钥,Bob 尝试将其与他的根支出密钥结合起来生成一个隐身地址,并检查该地址中是否有任何资产。如果有,Bob 计算该地址的支出密钥并记住它。

这一切都依赖于密码欺骗的两种用途。首先,我们需要一对算法来生成共享密钥shared secret:一个算法使用Alice 临时密钥和Bob 的元地址,另一个算法使用Bob 的根支出密钥和Alice 的临时公钥。这可以通过多种方式完成;DiffieHellman 密钥交换是建立现代密码学领域的成果之一,它恰好实现了这一点。

但是仅共享秘密远远不够:如果我们只是从共享秘密生成一个私钥,那么 Alice 和 Bob 都可以从这个地址消费。我们还添加了一个密钥盲化机制:在一对算法中,其中 Bob 可以将共享密钥与他的根花费密钥结合起来,而Alice 可以将共享密钥与 Bob 的元地址结合起来,这样 Alice 就可以生成隐身地址,并且 Bob 可以为该隐身地址生成支出密钥,所有这些都无需在隐身地址和 Bob 的元地址之间创建公共链接或一个隐身地址与另一个隐身地址之间。

使用椭圆曲线密码学隐藏地址

使用椭圆曲线密码学隐藏地址最初是由 Peter Todd 于 2014 年在比特币背景下引入的。该技术的工作原理如下:

这满足了我们上面的所有要求,而且非常简单。

www.binance.com

甚至有一个 EIP 试图为以太坊定义一个隐身地址标准,它既支持这种方法,又为用户提供了开发其他方法的空间例如,支持Bob 拥有单独的支出和查看密钥,或者使用不同的密码学来实现抗量子安全。现在你可能会想:隐身地址并不是很难,理论知识已经扎实,采用仅是一个实施细节。然而,问题在于,真正有效的实现还需要通过一些重要的实施细节。

隐身地址和支付交易费用

假设有人给你发了一个 NFT。如果你想要确保隐私,他们会将其发送到您控制的隐身地址。扫描链上的临时公钥后,你的钱包会自动发现该地址。你现在可以自由证明NFT 的所有权或将其转让给其他人。

V神发布《隐身地址不完整指南》解决以太坊隐私难题

但有一个问题是,该帐户中的 ETH 余额为 0,因此也无法支付交易费用。即使是 ERC4337 代币付款人也不会奏效,因为它们只适用于可替代的 ERC20 代币。而且你不能从你的主钱包向它发送 ETH,因为那样你就创建了一个公开可见的链接,也就是说没了隐私性。

有一种简单的方法可以解决这个问题:只需使用 ZKSNARKs 转移资金来支付费用。但这样会消耗大量的 Gas,仅单次转帐就会额外消耗数几十万 Gas。

另一种比较聪明的方法涉及信任专门的交易聚合器MEV 术语中的搜寻者searchers。这些聚合器将允许用户支付一次以购买一组可用于支付链上交易的tickets。

当用户需要在一个不包含任何其他内容的隐身地址中花费 NFT 时,他们会向聚合器提供其中一张 ticket,使用Chaumian 盲法进行编码。这是在 1980 年代和 1990 年代提出的集中式隐私保护电子现金方案中使用的原始协议。搜索者接受ticket,并重复将交易免费包含在他们的捆绑包中,直到交易在一个区块中被成功接受。

隐身地址和分离支出和查看密钥

假设 Bob 不是只有一个可以做所有事情的主根支出密钥,而是想要一个单独的根支出密钥和查看密钥。该查看密钥可以看到Bob 的所有隐身地址,但不能进行支出。

在椭圆曲线世界中,这可以使用一个非常简单的密码技巧来解决:

Bob 的元地址M现在的形式为(K V),编码G k 和G v,其中k 是支出密钥,v 是查看密钥。

共享密钥现在为S = V r = v R,其中r 仍然是Alice 的临时密钥,R 仍然是Alice 发布的临时公钥。

隐身地址的公钥是P = K G hash(S),私钥是p = k hash(S)。

第一个步骤生成共享秘密使用查看密钥,第二个步骤Alice 和Bob 的并行算法生成隐身地址及其私钥使用根支出密钥。

这有很多用例。例如,如果Bob 想要接收POAP,那么Bob 可以给他的POAP 钱包或者甚至是一个不太安全的Web 界面查看密钥来扫描链并查看他的所有POAP,而不需要给这个界面花费那些POAP 的权力。

隐身地址和易扫描

为了更容易地扫描整个临时公钥集,一种技术是向每个临时公钥添加一个视图标签。在上述机制中执行此操作的一种方法是使视图标签成为共享密钥的一个字节例如,S modulo 256 的x 坐标,或hash(S) 的第一个字节。

这样,Bob 只需要为每个临时公钥执行一次椭圆曲线乘法来计算共享密钥,由于有了视图标签,也更容易进行扫描。

隐身地址和抗量子安全

上面的方案依赖于椭圆曲线,不过尽管这种方案效果很好,但不幸的是,容易受到量子计算机的攻击。我们将需要切换到抗量子算法。有两个自然的候选者:椭圆曲线同源和格lattices。

椭圆曲线同源是一种非常不同的基于椭圆曲线的数学构造,具有线性特性,可以让我们使用与上面所做的类似的密码技巧,但巧妙地避免了构造可能容易受到量子计算机离散对数攻击的循环群。

基于同源密码学的主要弱点是其高度复杂的底层数学,以及在这种复杂性下隐藏可能的攻击的风险。一些基于同源密码学的协议去年被攻击,但其他协议仍然安全。同源的主要优势是相对较小的密钥大小,以及直接移植多种基于椭圆曲线的方法的能力。

A 3isogeny in CSIDH

格lattices是一种非常不同的密码结构,依赖于比椭圆曲线同构简单的数学,并且能够做一些非常强大的事情例如完全同态加密。隐身地址方案可以建立在格上,尽管设计最好的方案是一个悬而未决的问题。然而,基于格的结构往往具有更大的密钥大小。

全同态加密,格的应用。FHE 还可以用于以不同的方式帮助隐身地址协议:帮助Bob 外包检查整个链中是否包含资产的隐身地址的计算,而无需透露他的视图密钥。

第三种方法是从通用黑盒原语构建隐身地址的方案。该方案的共享密钥生成部分直接映射到密钥交换,这是公钥加密系统中的重要组成部分。更难的部分是让Alice 只生成隐身地址而不是支出密钥并让Bob 生成支出密钥的并行算法。

不幸的是,你无法使用比构建公钥加密系统所需的更简单的成分来构建隐身地址。有一个简单的证明是,可以用一个隐身地址方案构建一个公钥加密系统。如果Alice 想给Bob 加密一条消息,她可以发送N 笔交易,每笔交易要么发往Bob 的一个隐身地址,要么发往一个属于她自己的隐身地址,Bob 可以看到他收到了哪些交易来读取消息。这很重要,在数学证明中你不能只用哈希来做公钥加密,而你可以只用哈希来做零知识证明,因此,隐身地址不能只用哈希来完成。

这确实是一种使用相对简单成分的方法:零知识证明,可以由哈希和密钥隐藏公钥加密组成。Bob 的元地址是一个公开的加密密钥加上一个哈希h = hash(x),他的支出密钥是对应的解密密钥加上x。要创建一个隐身地址,Alice 生成一个值c,并将Bob 可读的c 加密作为她的临时公钥发布。该地址本身是一个ERC4337 帐户,其代码通过要求交易提供零知识证明来验证交易,证明值x 和c 的所有权,使得k = hash(hash(x) c)其中k 是帐户代码的一部分。知道x 和c,Bob 就可以自己重建地址及代码。

(c) 的加密不会告诉除 Bob 之外的其他任何人任何信息,并且(k) 是一个哈希,它几乎不会透露有关c 的任何事情。钱包代码本身只包含(k),(c) 私有意味着(k) 无法追溯到(h)。

然而,这需要一个 STARK。最终,我认为后量子以太坊世界很可能会涉及使用许多STARK 的应用,因此我提倡像此处描述的聚合协议将所有这些STARK 组合成一个递归 STARK 以节省空间。

隐身地址和社交恢复以及多L2 钱包

很长一段时间以来,我一直很感兴趣社交恢复钱包,社交恢复钱包具有多重签名机制,其密钥能在机构、你的其他设备和朋友的某种组合之间共享。如若你丢失主要密钥,绝大多数密钥允许恢帐帐户访问。

然而,社交恢复钱包不能很好地与隐身地址结合:如果你必须恢复你的帐户改变控制它的私钥,你还必须执行一些步骤来改变你的 N 个隐身钱包的帐户验证逻辑,这将需要N 笔交易,以高昂的费用、便利性和隐私成本为代价。

社交恢复和多个 L2 协议的相互作用也存在类似的担忧:如果你在Optimism、Arbitrum、StarkNet、Scroll、Polygon 上有帐户,出于扩展原因有十几个并行实例,并且您在每个实例上都有一个帐户,那么更改密钥可能是一个非常复杂的操作。

更改多条链中多个帐户的密钥是一项巨大的工作

也许你可以使用一些自动化软件在两周的时间跨度内以随机间隔将资产转移到新的隐身地址,以降低基于时间的关联的有效性。但这远非完美。另一种方法是在监护人之间秘密共享根密钥,而不是使用智能合约恢复。但是,这会消除停用监护人帮助恢复您帐户的权力的能力,因此存在长期风险。

一种更复杂的方法涉及零知识证明。这允许许多帐户,甚至跨越许多L2 协议,在某处在基础链上或某些L2 上由单个k 值控制,其中更改该值足以更改所有帐户的所有权,所有这些都不会泄你的多个帐户之间的联系。

结论

当前基本的隐身地址可以快速实施,并且可以显着提高以太坊上用户的隐私。我认为出于其他与隐私相关的原因,钱包应该开始转向更原生的多地址模型例如,为你与之交互的每个应用创建一个新地址可能是一种选择。

然而,隐身地址确实会带来一些长期的可用性问题,例如社交恢复的困难。从长远来看,这些问题是可以解决的,不过隐身地址生态系统看起来确实严重依赖于零知识证明。

相关报导

Vitalik撰文:到底什么是制度?

全文Vitalik :中心化交易所如何做资产证明?

Vitalik撰文以太坊Layer3的愿景 怎样的L3才合理?不该重复堆叠Rollups (全文)

Vitalik Buterin 长文:什么是网路国家?以及我对构建网路国家的看法

骇客也看涨ETH!Wormhole攻击者将15亿赃款杠杆做多以太坊