1. 背景
以太坊联合创始人 Vitalik Buterin 曾明确指出,如果不进行隐私过渡的技术转变,以太坊就会失败。因为所有交易都公开可见,对许多用户来说隐私牺牲太大,大家都会转向至少在某种程度上隐藏数据的中心化解决方案。
2023 年,Vitalik 在隐私保护和零知识证明(zero-knowledge proofs,ZK)技术的推进上进行了一系列的研究。上半年,Vitalik 在他的网站上发布了三篇专门讨论 ZK 和隐私保护的文章。4 月,他在 Reddit 上也展示了一项关于钱包监护人隐私问题的研究。9 月,他与其他专业人士共同撰写了一篇论文,提出了一种针对平衡隐私与合规之间的解决方案。
此外,以太坊生态也在积极推动这个话题的讨论和普及。在 3 月份的 ETHDenver 活动中,举办了一场专注于隐私的特别活动。在 5 月份的 EDCON(Ethereum Community Conference)年度会议上,Vitalik 强调了“未来 10 年,ZK-SNARK 将与区块链一样重要”。
本文追踪了 2023 年以太坊生态在利用 ZK 技术推进隐私保护方面的最新动态。如果您想跻身于以太坊 ZK 赛道,本文能提供必要的解读和指导。
2. 以太坊 ZK 赛道:打造隐私保护的未来
以太坊的透明性可能使用户的个人信息面临泄露风险。以太坊等区块链上没有秘密,所有信息都是公开的,这包括交易、投票等其他链上活动。这样的公开性可能导致特定的交易和地址被追踪,并与真实用户身份关联。因此,在以太坊上实现隐私保护变得至关重要。想要隐藏链上信息可以通过加密技术来实现,但挑战在于在保护隐私的同时,确保这些交易的有效性得以验证。ZK技术提供了一种解决方案,能够在不透露额外信息的情况下证明交易的真实性,兼顾了隐私和可验证性。
以太坊高度重视 ZK-SNARK,特别是在某些关键的隐私保护应用场景中,其重要性尤为突出。这一点在 Vitalik 的研究和提议中得到了明显体现,Salus 整理了 Vitalik 在其研究中提出的典型场景,即隐私交易和社交恢复。
2.1 隐私交易
关于隐私交易,Vitalik 提出了两个概念:隐私地址(Stealth Addresses)和隐私池(Privacy Pools)。
1. 隐私地址方案允许在隐藏交易接受者身份的前提下进行交易。这种方案既提供了隐私保护功能,同时又确保了交易的透明度和可审计性。
2. 基于隐私池协议,用户可以在不披露历史交易的前提下,证明自己的交易资金属于已知合规来源。这种方案允许用户在遵守法规的前提下,进行隐私交易。
这两个方案都离不开 ZK。在这两种场景下,允许用户生成零知识证明,来证明他们的交易的有效性。
2.1.1 隐私地址
假设 Alice 打算向 Bob 转移某种资产,当 Bob 接收该资产时,他并不希望全球公众都知道他是接收者。尽管难以掩盖资产转移行为的事实,但隐藏接收者的身份则具有可能性。正是在这样的背景下,隐私地址方案应运而生,其主要解决的问题便是如何有效隐藏交易接收方的身份。
那么,隐私地址究竟与普通的以太坊地址有什么区别?如何使用基于 ZK 的隐私地址进行隐私交易?Salus 将逐一为您进行介绍。
(1)隐私地址与普通的以太坊地址有什么区别?
隐私地址是允许交易发送者以非交互方式生成,且只能由其接收者访问的地址。我们从隐私地址由谁生成,谁可以访问两个维度来说明其与普通的以太坊地址的区别。
由谁生成?
普通的以太坊地址由用户本人根据加密和哈希算法生成。而隐私地址可以由本人生成,也可以由交易的另一方生成。例如,Alice 向 Bob 转账时,Bob 用来进行接受转账的地址可以由 Bob 生成,也可以由 Alice 生成,但只能由 Bob 控制 。
谁可以访问?
普通的以太坊账户下的资金种类、数量和来源都是公开可见的。而在使用隐私地址进行的交易中,只有接收者才能访问存储在其隐形地址中的资金。观察者无法将接受者的隐私地址与他们的身份关联起来,从而保护了收件人的隐私。
(2)如何使用基于 ZK 的隐私地址进行隐私交易?
如果 Alice 想要向 Bob 的隐私地址发送资产,以此来隐藏交易接收方。下面是交易过程的详细说明:
1. 生成隐私地址
Bob 生成并保存一个消费密钥(spending key),这是一个私钥,可以用来消费发送到 Bob 的隐私地址的资金。
Bob 使用消费密钥生成一个隐私元地址(stealth meta-address),这个地址可以用来为给定的接收者计算一个隐私地址,并将隐私元地址传递给 Alice。Alice 对隐私元地址进行计算,生成一个属于 Bob 的隐私地址。
2. 发送资产到隐私地址
Alice 将资产发送到 Bob 的隐私地址。
由于 Bob 此时并不知道这个隐私地址是自己的,所以 Alice 还需要在链上发布一些额外的加密数据(一个临时公钥,ephmeral pubkey),帮助 Bob 发现这个隐私地址属于他。
上述过程中的隐私地址也可以使用由哈希构造的零知识证明和公钥加密来构建。隐私地址中的智能合约代码可以与 ZK 集成。通过嵌入零知识证明验证逻辑,智能合约能够自动验证交易的有效性。这种构建隐私地址的方案相比其他方案,包括椭圆曲线加密技术(elliptic curve cryptography)、椭圆曲线同源(elliptic curve isogenies)、格(lattices)、通用黑盒原语(generic black-box primitives)更为简单。
2.1.2 隐私池
无论是通过隐藏交易接收者的身份还是交易的其他信息来实现隐私交易,都存在一个主要的问题:用户如何证明自己的交易资金属于已知合规来源,而不必披露他们的整个交易历史。以太坊作为一个公开的区块链平台,必须避免成为洗钱和其他违法行为的媒介。
Vitalik 提出了一个名为隐私池的解决方案,致力于平衡区块链的隐私保护和合规需求。然而,隐私保护和合规性的挑战是什么?如何平衡隐私和合规性?对于这两个问题,Salus 提供了深入且具有指导意义的讨论。
(1)隐私保护和合规性挑战
在实现隐私保护的同时,确保交易合规是一项挑战,这一点可以通过分析 Tornado Cash 案例得到生动的展示。
Tornado Cash 是一种加密货币的混合器(mixer),将大量的存取款行为混合在一起。用户在一个地址存入 token 后,出示 ZK Proof 证明自己存过款,再用一个新地址提款。 这两种操作是公开在链上的,但二者之间的对应关系不公开,所以具有匿名性。虽然它可以用户增强隐私性,但通常被非法行为者用来洗钱。因此,美国财政部 OFAC 最终将 Tornado Cash 的智能合约地址列入了制裁名单。监管机构认为该协议为洗钱提供了方便,不利于打击金融犯罪。
Tornado Cash 在隐私保护中的不足之处在于,无法验证用户的 token 来源是否合规。针对此问题,Tornado Cash 提供了一个中心化服务器用来帮助用户证明他的 token 是合规的。但是,服务器必须获取用户提供提款的具体信息,确定这个提款对应的是哪一个存款,以此来生成证明。这种中心化的机制不仅存在信任假设代价,还会产生信息不对等。最终,该机制几乎没有用户使用。虽然 Tornado Cash 实现了隐私功能,但它并没有提供一个有效的机制来验证用户 token 的来源是否合规,这才让犯罪分子有机可乘。
(2)如何平衡隐私和合规性?
基于以上挑战,Vitalik 提出了 Privacy Pools 的概念,允许用户在不泄露历史交易信息的前提下,证明自己的资金来源是合规的。以此在隐私和合规性之间寻求平衡。
Privacy Pools 是基于 ZK 和关联集合(association set)的,允许用户生成并发布 ZK-SNARK 证明,证明他们的资金来自于已知的合规来源。这意味着这笔资金属于一个合规的关联集合,或者不属于一个不合规的关联集合。
关联集合由关联集合提供者根据特定的策略来构建:
1. Membership Proof:将来自所有受信任交易平台的存款放入一个关联集合,而且,有确切证据认为它们是低风险的。
2. Exclusion Proof:确定一组被标记为有风险的存款,或者有确切证据认为是不合规资金的存款。构建一个包含除这些存款以外的所有存款的关联集合。
存款时,用户通过 ZK 生成一个 secret,并哈希计算出一个公开的 coin ID,来标记自己与这笔资金的关联。提款时,用户提交一个与 secret 对应的 nullifier(nullifier 是 secret 中派生的唯一标识符),证明这笔资金是自己的。而且,用户通过 ZK 来证明两个 merkle 分支,以此证明自己的资金属于已知的合规来源:
1. 他的 coin ID 属于 coin ID tree,这是当前发生的所有交易的集合;
2. 他的 coin ID 属于关联集合树(association set tree),这是用户认为的一些合规交易的集合。
(3)ZK 在隐私池中的应用场景?
1. 保证隐私交易的灵活性:为了在隐私交易中也能处理任意面额的转账,每笔交易中附加了额外的零知识证明。这个证明能确保创建的 token 的总面额不会超过被消费的 token 的总面额,以此来保证交易的有效性。其次,ZK 通过验证每个交易对原始存款 token ID 的承诺来维护交易的连续性和隐私性,使得即使在部分取款的情况下,也能保证每笔取款与其对应的原始存款相关联。
2. 抵抗余额求和攻击(balance-summing attacks):通过合并 token 并对一组 token ID 进行承诺,以及对多个输入的交易进行父交易的并集承诺,可以抵抗余额求和攻击。这种方法依赖于 ZK,确保所有承诺的 token ID 都在其关联集合中,从而增强交易的隐私性。
2.2 社交恢复
在现实生活中,我们可能有多个银行卡账户。丢失银行卡密码就意味着我们无法使用银行卡里面的资金。在这种情况下,我们通常会去银行寻求帮助来找回密码。
类似的,在以太坊等区块链中,我们可能有多个地址(账户)。私钥就如同银行卡密码,是控制账户资金的唯一工具。一旦你丢失了私钥,你就失去了对账户的控制权,无法再访问账户中的资金。类似于现实世界的密码找回,区块链钱包提供了社交恢复机制来帮助用户找回自己丢失的私钥。这种机制允许用户在创建钱包时选择一组可信任的个体作为监护人(guardians)。这些监护人可以在用户丢失私钥的情况下,批准重置用户的私钥的操作,从而帮助用户找回对账户的控制权。
在这种社交恢复和监护人机制下,Vitalik 提出了两个需关注的隐私保护要点:
1. 隐藏用户多个地址之间的关联性:为了保护用户隐私,我们需要防止在使用单一恢复短语恢复多个地址时,这些地址的归属关系被暴露。
2. 保护用户财产隐私免受监护人侵犯:我们必须确保在批准用户操作的过程中,监护人无法获取用户的资产信息或观察其交易行为,以防止用户财产隐私被侵犯。
实现这两种隐私保护的关键技术是零知识证明。
2.2.1 隐藏用户多个地址之间的关联性
(1)社交恢复中的隐私问题:地址之间的关联性被披露
在以太坊等区块链中,用户为了保护自己的隐私,通常会生成多个地址进行各种交易。通过使用不同的地址进行每一笔交易,可以防止外部观察者轻易地将这些交易关联到同一用户。
然而,如果用户的私钥丢失,由该私钥生成的多个地址下的资金也将无法找回。在这种情况下,就需要进行社交恢复。一种简单的恢复方法是通过一键恢复多个地址,即用户使用同一个恢复短语来恢复由一个私钥生成的多个地址。但这种方法并不理想,因为用户生成多个地址的初衷就是为了防止它们被相互关联。如果用户选择在同一时间或相近的时刻恢复所有地址,这实际上等于向外界透露了这些地址都是同一用户所拥有的。这种做法违背了用户最初创建多个地址为了保护隐私的初衷。这就构成了社交恢复过程中的一个隐私保护问题。
(2)ZK 解决方案:如何避免多个地址的关联性被披露?
ZK 技术可以用来隐藏区块链上一个用户的多个地址之间的关联性,通过一种将验证逻辑和资产持有分开的架构(an architecture that separates verification logic and asset holdings)来解决社交恢复时的隐私问题。
1. 验证逻辑:用户在区块链上拥有多个地址,但所有这些地址的验证逻辑都连接到一个主要的身份验证合约(keystore contract)。
2. 资产持有和交易:当用户从任一地址进行操作时,他们利用 ZK 技术来验证操作权限,而无需透露具体是哪个地址。
这样,即使所有地址都连接到同一个 keystore 合约,外部观察者也无法确定这些地址是否属于同一用户,从而实现了地址之间的隐私保护。
设计一个既能够同时恢复用户多个地址,又不揭示地址之间关联性的隐私社交恢复方案是非常重要的。
2.2.2 保护用户财产隐私免受监护人侵犯
(1)隐私问题:监护人的特权
在以太坊等区块链中,用户可以在创建钱包时设置多个监护人(guardians)。特别是对于多重签名钱包(multisig wallets)和社交恢复钱包(social recovery wallets),监护人的角色是至关重要的。通常,监护人是由其他人持有的 N 个地址的集合,其中任意 M 个地址都可以批准一个操作。
监护人有哪些特权?比如:
1. 对于多重签名钱包,每笔交易必须得到 N 个监护人中的 M 个的签名才能进行。
2. 对于社交恢复钱包,如果用户的私钥丢失,那么 N 个监护人中的 M 个就必须签署一条消息以重置私钥。
监护人可以批准您的操作。在多重签名中,这将是任何交易。在社交恢复钱包中,这将是重置您的帐户私钥。如今,监护人机制面临的挑战之一是,如何能够保护用户的财务隐私不受监护人侵犯?
(2)ZK 解决方案:保护用户财产隐私免受监护人侵犯
Vitalik 在这篇文章中展望,监护人保护的不是你的账户,而是一个“保险箱(lockbox)”合约,你的账户与这个保险箱之间的链接是隐藏的。这意味着监护人无法直接访问用户的账户,只能通过一个隐藏的 lockbox 合约来进行操作。
ZK 的主要作用是提供一个证明系统,允许监护人证明某个语句是真实的,而无需透露语句的具体细节。在这种情况下,监护人可以使用 ZK-SNARK 来证明他们有权执行某个操作,而不需要揭示与“账户和锁箱之间的链接”相关的任何详细信息。
2.3 探索:以太坊生态中 ZK 和隐私的新篇章
以太坊 ZK 赛道目前虽然还处于发展阶段,许多创新的想法和概念仍在构思和研究中,但以太坊生态系统已经展开了更为广泛的实际探索活动。
(1)以太坊基金会的资助
今年 9 月份,以太坊基金会(Ethereum Foundation)资助了两个关于隐私保护的项目,IoTeX和ZK-Team。IoTex 是一个基于零知识证明的账户抽象钱包,ZK-Team 致力于使组织能够在管理团队成员的同时维护个人隐私。
(2)投资
今年 10 月份,以太坊联合创始人 Vitalik 投资了 Nocturne Labs,旨在将私人账户(private accounts)引入以太坊。用户将在 Nocturne 中拥有‘internal’账户,从这些账户接收/支出资金的方式是匿名的。通过 ZK 技术,用户可以证明他们拥有足够的资金用于支付、质押等交易。
(3)会议和活动
ETHDenver 被认为是全球最重要的以太坊和区块链技术相关活动之一。今年 3 月份,ETHDenver 举办了一场专注于隐私的特别活动。这个活动不仅表明了以太坊社区对于隐私问题的关注,也反映了全球区块链社区对于隐私保护的重视。在这次特别活动中,举办了Privacy by Design、Privacy vs Security等九场隐私有关的主题会议。
EDCON(Ethereum Community Conference)是由以太坊社区主办的一场全球范围内的年度会议,旨在促进以太坊的发展和创新,加强以太坊社区的联系和合作。在今年 5 月份的 EDCON 会议上,Vitalik 发表了一项重要声明,他表示:“在未来 10 年,ZK-SNARKs 将与区块链一样重要” 。这个声明强调了 ZK-SNARKs 在区块链技术发展趋势中的重要地位。
(4)项目
目前,已有一些应用层项目开始使用 ZK 技术为用户和交易提供隐私保护服务。这些应用层项目被称为 ZK Applications。比如,部署在以太坊上的 ZK Application,unyfy,一个隐私资产交易所。这里的交易订单价格被隐藏,这些被隐藏价格的订单的完整性由 ZK 技术进行验证。除了 unyfy,还有其他一些L2s上的 ZK Applications,例如 ZigZag 和 Loopring 等。虽然这些 ZK Applications 基于 ZK 实现了隐私保护功能,但目前还不能部署在以太坊上,因为 EVM 不能直接运行这些 ZK Applications。
(5)研究
而且,研究者们在Ethereum Research平台上对 ZK 技术及其应用进行了激烈的讨论,其中,有一篇来自 Salus 的研究文章致力于利用 ZK 来促进以太坊应用层的隐私保护等实现。这篇文章测试了几种不同的 ZK 语言的性能,Circom、Noir 和 Halo 2 ,结果显示,Circom 具有更好的性能。这篇文章也提出了一个通用性的解决方案,在 Solidity 中集成 Circom,可实现基于 ZK 的以太坊应用层项目。这对以太坊实现隐私过渡具有重要意义。这项研究在 2023 年获得了显著的关注度,位列榜首。
这篇研究文章是 Ethereum Research 上 2023 年阅读量最高的研究---作者 Salus
3. 挑战
尽管众多现有的以太坊应用层项目迫切需要引入基于 ZK 的隐私保护机制,但这一进程面临着一系列的挑战。
1. ZK 人才资源匮乏:ZK 技术的学习要求坚实的理论基础,尤其是在密码学和数学领域。由于 ZK 技术的实施涉及复杂的公式,学习者还需要具备较强的公式解读能力。但问题是,专注于学习 ZK 技术的人群相对较少。
2. ZK 开发语言的局限性:Rust、Cairo、Halo 2 等语言被用于开发 ZK 证明电路,但它们通常只能适用于特定的场景,不适用应用层项目。其中一些语言(比如 Cairo)还处于实验阶段,不同版本之间可能存在兼容性问题,这增加了在实际应用中采用它们的难度和复杂性。
3. ZK 技术实施难度:Vitalik 提出的将 ZK 技术应用于以太坊隐私保护的方案,在实际执行中可能面临多种复杂问题,比如,如何避免隐私交易不会遭到余额求和攻击(balance-summing attacks),双花攻击等。解决这些问题有一定的技术难度。
4. 隐私保护 vs.合规性:隐私交易虽然可以保护用户的身份和交易细节,但同时也可能掩盖非法活动,如洗钱。未来,以太坊上的 ZK Applications 在实现隐私保护过程中是否可以合规,还有待验证。
尽管存在挑战,以太坊要实现隐私转变--确保提供隐私保护的资金转移,并确保正在开发的所有其他工具(社交恢复、身份、声誉)都能保护隐私的前提是--广泛部署 ZK Applications。上文提到 Salus 发布的研究基于 ZK 技术来促进以太坊应用层的隐私保护等功能。而且,Salus 首次提出了一种集成 Circom 和 Solidity,并应用于以太坊应用层项目的通用性解决方案,基于 Circom 在链下实现 ZK 证明系统,基于 Solidity 在以太坊上实现智能合约和 ZK 验证逻辑。如果您需要支持或有任何问题,欢迎随时联系Salus。
4. 总结与展望
2023 年,以太坊社区在 Vitalik Buterin 的引领下,深入探索了零知识证明技术的潜力,目的是增强平台的隐私保护功能。虽然这些提议还处于研究阶段,但 Vitalik 的研究和论文,特别是关于隐私保护与合规性平衡的方案,为零知识技术在保护用户隐私奠定了理论基础。
尽管在将零知识证明技术整合到以太坊中存在挑战,但随着技术的成熟和社区的持续努力,预计零知识证明将在不久的将来在以太坊生态系统中发挥更加重要的作用。因此,及时参与和积极探索这一领域,利用早期机遇,将有助于在这一新兴领域中占据有利位置。