这篇文章是在公共区块链(又称去中心化账本、加密和Web3)的背景下对隐私景观的阐述。第一部分涉及为什么隐私是大规模采用的关键障碍,以及隐私的不同方面。第二部分调查了三种不同的隐私方法:通过零知识证明,仅针对匿名,以及通过一种称为MOCCAs的新抽象。
现代金融体系运作良好,我们不必担心日常交易的安全或隐私。当你在杂货店购物,通过支票支付租金,或在银行获得短期贷款时,你不必担心你的交易会受到非相关方的公开审查。在现代银行和信用卡网络中,交易细节(主要)留在相关的金融中介机构和当局。用户(理想情况下)不必担心他们的敏感信息被泄露给公众,当局(大部分)可以追踪非法活动。
不幸的是,今天在流行区块链上进行的交易却不能如此。尽管区块链技术有望分散和民主化当前的金融生态系统,但大多数系统甚至无法满足我们所期望的最基本的隐私级别。您购买的披萨可以永久记录,您的所有交易都可以在Etherscan上轻松公开访问。有一些以隐私为重点的项目,但由于功能和易用性方面的不平等,它们目前没有得到充分利用。这标志着隐私是大规模采用区块链技术的关键障碍之一。
公共区块链设置中的隐私不是全有或全无的功能。相反,这是一个复杂且多层面的问题,在导航时需要小心。让我们首先深入了解与区块链应用程序相关的隐私类型。
A轴:匿名性和保密性。广义而言,金融交易有两种隐私:匿名和保密。当非营利组织收到匿名捐款时,他们不会获得关于捐赠者的信息(匿名),但知道收到的捐款金额。当你在药店退房时,你的购买是保密的——你背后的人不知道你可能会被开哪种药以及它们的价格,但他们知道你正在购买。
轴B:链上v.s.中间应用程序。区块链和加密货币的一个基本论题是在没有可信中介的情况下进行金融交易的能力。紧随比特币的脚步,几乎所有加密货币都允许在没有中间人的情况下直接支付。以太坊(Ethereum)等智能合约平台更进一步,使支付之外的金融交易能够在没有交易和借贷等中介的情况下进行。在本文中,我们使用“链上”一词来描述用户可以直接用作共识节点操作员的功能和应用程序,如支付、交易、借贷。(需要注意的是:用户通常不会运行自己的一致性节点。例如,Web3钱包的第三方RPC端点提供商在实践中应该被视为中介。)链上应用的一些例子包括比特币和Zcash支付、Uniswap交易和复合贷款。
不幸的是,中介机构在生态系统中仍然无处不在。Coinbase等交易所是它们为用户提供服务的中介机构,用户需要将资产存入这些交易所进行交易。甚至一些“分散”协议也依赖于中央操作的中介。例如,dYdX和DiversiFi都有中央交换运营商。这与Uniswap这样的链上同行不同,Uniswap不需要与共识网络之外的服务器进行交互。dYdX和DiversiFi对Coinbase的优势在于消除了资金安全所需的信任。相反,用户需要信任密码和代码,尤其是STARKs,以确保其资金的安全。支付渠道网络(如Lightning network)和汇总(如Arbitrium、乐观主义、Aztec和Scroll)是另外两类中间应用程序。尽管目前大多数中介机构都是集中的,但它们可以被设计成分散的,这对于卷装尤其可取,因为它们直接与侧链竞争。例如,zk roll-up可以有一个具有某种形式的共识机制的roll-up sequencer网络,有效地使roll-up成为一条链。
以上两个BROBLAST应用程序的分类为我们提供了一个额外的轴来考虑隐私:链隐私与隐私的中间席。
我的信息是否已披露给我委托代表我行事的实体(比如贵行、Coinbase和1inch等掉期聚合机构)?
把斧子放在一起。通过结合两个隐私特征轴,我们获得了区块链应用程序隐私的四个概念:匿名性和机密性之间,以及链上与中间。下表列出了每个类别中的一个隐私问题。
我在Uniswap上的交易是否可以链接到我在链上进行的其他活动,例如NFT交易?
当然,对于上述任何一个问题,答案都是您的信息被永久记录在链上,并传输给中介机构。有了这样的理解,我们现在能够深入研究链上和中间区块链应用程序的隐私性。
免责声明1:尽管大多数应用程序声称是分散的,但链上智能合约的开发和访问通常是非常集中的。例如,一个编码错误通常会导致数百万美元的利用,而DEX交易通常会通过数量不断减少的挖掘池来利用用户的交易获取自身利润(这被称为MEV,或Miner Extracted Value)。我们将不在这里进一步阐述这些问题,因为我们的重点是隐私问题。
免责声明2:隐私的一个重要方面是隐私、监管和合规之间的相互作用,我们将不深入讨论。在许多情况下,金融中介机构有法律义务不仅了解其客户(KYC),而且记录和报告某些金融交易。反洗钱(AML)是该计划的主要目标之一。例如,加密货币的透明度最近帮助司法部追回了2016年Bitfinex黑客攻击中被盗的36亿美元资金。在本文中,我们将不涉及监管和合规问题,而仅从技术和理论层面关注隐私问题。
让我们首先看看支付,因为它们基本上都已解决,不需要中介机构。Zcash和Monero是两种既匿名又保密的大型硬币。它们分别依赖于零知识证明和环签名来提供不同级别的匿名性和保密性。我们还有其他更高效的私人支付方式,但需要像Mimblewimble这样的交互,或者不需要像Quisquis和Anonymous Zether这样不断扩展的UTXO集合。
然而,除了支付之外,情况就不那么明朗了。例如,支付之外最成功的应用之一是在分散金融(DeFi)领域。我们仍然不知道或广泛建立了DeFi应用程序的隐私技术。
为了从整体上对此进行推理,我们首先需要有一个良好的理论模型来讨论链上应用程序。一般链上应用程序可以建模为迭代计算,由转换函数f指定,该函数计算(s t′), o u t p u t) ← f(s t, i n p u t)用于每个启动状态和输入。
用户可以在将事务提交给共识节点进行处理之前将其构造为输入。为了在这个过程中保护用户的隐私,我们需要在不泄露用户身份和输入的情况下进行计算。有三种方法:(1)将计算推离链;(2)保持计算透明,但隐藏发起人的身份;(3)对具有透明输出的加密输入进行同态计算。
零知识证明(ZKPs)是20世纪80年代末理论计算机科学和密码学领域的一个重要发展(这些课堂讲稿的第一章给出了一个很好的综述)。区块链环境中使用的特定形式的零知识证明(ZKP)在学术上通常被称为NIZK,或非交互式零知识。当证明简洁时,它们通常被称为SNARGs(或SNARKs),或简洁的非交互论证(知识)。其他有趣的特性是透明性(S TARKs)和通用性,这使得证明系统可以用于多个电路,而无需受信任的设置或一个通用受信任的设置。
ZKPs在公共区块链中的核心应用是执行可验证的链外计算的能力。通常,验证人是最终用户(在ZK应用平台的情况下)或中间人(ZK汇总),而验证人是链,即验证人集。使用ZKPs进行一般计算的一种简单方法是直接证明状态转换的正确性。为了详细说明,用户在链外证明,对于特定的链上状态st,当应用于起始状态st时,用户有一个输入,该输入会导致新的状态st′,并带有一些o u p u t。然后,共识节点在覆盖旧状态之前验证所提议的状态转换的有效性。这是Mina Snapps和Aleo等ZK应用平台所采用的方法,它们都受到Zexe学术工作的启发。
透明链上应用程序与上述体系结构之间的关键区别在于,简单地说,更新(s t′), 哦, π) 仅对用户用于生成更新的应用程序状态ST有效。如果多个用户在没有协调的情况下与同一个应用程序交互,这将导致“竞争条件”。为了详细说明,假设有两个针对相同链状态ST0构建的有效事务,分别将其更新为ST1和ST2。当第一个事务记录在链上时,链上状态更新为s t 1。因此,第二个事务随后将使用新状态ST1而不是ST0进行验证,这可能会导致它无效。
值得注意的是,可以通过将应用程序状态分割为不同的部分来绕过这种竞争条件。例如,可以同时访问不共享全局状态的应用程序(例如,可以独立访问Aleo中的不同记录)。但许多有趣的链上应用程序——例如恒定功能市场标记(CFMM)——的状态基本上在所有用户之间共享。
尽管对于grand Claimes来说,由于上述问题,在整个应用程序状态转换中使用ZKPs是一种“向前一步,向后一步”的解决方案。构建为相互断开连接的用户服务的大型交换机的解决方案是添加一个中介或交换机运营商,使应用程序对运营商是私有的,而不是在所有用户之间共享。不幸的是,在不完全采用其他解决方案的情况下,没有已知的方法向这些中介机构隐藏贸易信息。总而言之,在Aleo和Mina等ZK应用程序平台上的交换实现了以下隐私属性。
为链上应用程序增加机密性很难。如果我们不试图提供机密性,而只是为了提供匿名性,那该怎么办?使用现有工具已经可以做到这一点:使用不倒翁和混合器,比如CoinJoin和Tornado Cash,你可以资助新的伪匿名地址来获得匿名性。不幸的是,这些工具的选择性加入性质意味着恶意用户比合法用户更容易使用它们。例如,Colonial Pipeline勒索软件使用CoinJoin,而Tornado Cash经常用于资助匿名地址以进行DeFi黑客攻击。
有两个项目试图在透明的智能合约平台上默认构建匿名性。第一个是Aztec Connect,这是以太坊即将推出的“zkzk汇总”,在与受支持的第一层应用程序进行交易时提供交易匿名性。汇总合同代表第二层用户(其身份在链上和汇总提供商都隐藏)与第一层DeFi协议交互,为这些第二层用户提供匿名性。
第二是亚麻的学术研究。它提议重新设计一个类似以太坊的智能合约平台,以支持终端用户的内置匿名性。在核心部分,FLAX提出了一个ERC20令牌标准的匿名版本,该标准允许令牌使用的匿名和原子委托。有趣的是,实现这些“匿名ERC20”不需要新的加密技术。你可以使用之前提到的任何私人支付方案中的相同技术,比如代币合同中的Zcash、Monero或Zether。
下表概述了上述解决方案的隐私功能。我们在这里省略了中间人一列,因为没有涉及任何中间人——除了Aztec Connect——它可能提供来自中间人(汇总提供商)的匿名性,这取决于分散程度和这些提供商的确切行为。
是(不倒翁和搅拌机可选,Aztec Connect和Flash默认)
如果我们可以对链上的应用程序状态和用户输入进行加密,但仍然能够对它们进行计算,甚至可以导出未加密的公共输出信息,那会怎么样?让我们把这种理想的功能称为神奇的链上机密计算设备(MOCCA)。
直观地说,MOCCA为状态转移函数f提供了尽可能好的保密性。在给定必要的加密输入的情况下,它们可以在链上计算,并且计算应该产生加密和更新的状态以及一些透明的输出值。具体来说,程序状态和输入被加密到链中,这样共识可以执行的唯一操作就是计算状态转换,这意味着只有应用程序预期的信息才会被解密和透明。假设我们有这样一个魔盒,那么在提供隐私的同时复制链上应用程序的功能就很容易了。因为应用程序设计者可以设计他们的应用程序,只将相关信息作为透明输出发布,例如现货价格或储备金额。
构建MOCCA有两种方法,一种是通过受信任的硬件,另一种是通过加密技术。在这两种情况下,我们都希望实现保护隐私的分散应用程序,而不需要具有以下特性的中介。
来自可信硬件的MOCCA。第一种解决方案是利用受信任的执行环境,特别是英特尔SGX。这是Ekiden的学术著作中首次描述的,也是Oasis和Secret Network采取的方法。这些平台上已经有一些应用程序在运行,比如Secret Swap。然而,众所周知,英特尔SGX存在缺陷。
来自密码学的MOCCAs。我们能只用加密技术构建图灵完整的mocca吗?事实证明答案是肯定的,密码学家已经发现了谜题的所有细节。
第一个难题是阈值密钥生成和重新共享。我们知道如何在节点加入和离开时,在动态一致性集中生成和管理Shamir秘密共享,即使对于大型一致性集也是如此。这些允许“n”个一致性节点中的任意数量的“t”起作用,就好像它们一起是公钥加密方案或签名方案的密钥持有者一样。这些进步分别是为了防止前端运行(如Ferveo)和构建简洁的轻客户端(如链密钥加密)。
加性MOCCA和交换。第二个难题是阈值同态加密。众所周知的和已部署的公钥加密方案,如ElGamal和Paillier,都是附加同态的,并且支持Shamir秘密共享作为密钥。使用它们,我们可以构建支持加法的mocca。
事实证明,我们已经可以使用只支持加法的MOCCA在连锁交易所(尤其是固定功能做市商,简称CFMM)上进行构建。这是对半影的天才观察,它利用ElGamal加密的加法同态特性来聚合交易,并通过阈值解密来揭示一批交易的净交易量。这以区别隐私的形式为交易提供了保密性。
从阈值FHE图灵完成MOCCAs。为了实现用于更一般计算的MOCCA,我们当然需要完全同态加密(FHE)。自Genry construction于2009年首次建造FHE以来,FHE方案的效率在过去十年中在理论和实践上都稳步提高,并且可能会继续提高(例如通过利用硬件加速)。然而,FHE本身并不是完整的解决方案,因为持有解密密钥仍然可以使任何一方获得在相应加密密钥下发布到链中的所有信息。这就是之前在区块链环境中部署FHE(如NuCypher和smartFHE)的努力无法提供保护隐私的链上应用程序的地方。
幸运的是,我们知道构造门限解密方案的方法,其中解密密钥是Shamir秘密共享。具体地说,每个一致性节点可以对加密的程序状态和输入独立地进行计算,以导出加密的新程序状态和加密的输出。关键的是,为了释放透明输出,共识节点可以通过一轮通信对加密输出进行阈值解密。这里的threshold属性保证,只要在threshold以下数量的验证器是恶意的(在任何纪元中),只有预期的信息(即透明的输出)才会被释放,输入和程序状态永远不会被解密。
结合以上内容,我们可以为完全依赖于密码学的一般图灵完备状态转移函数构建一个MOCCA,当然,它会对大量技术细节进行模块化。(据我所知,区块链设置中阈值FHE的确切用法尚未在其他地方说明。我希望您能指点我之前错过的工作。)
隐私是大规模采用公共区块链的最后障碍之一。隐私可以分为两个特征轴:匿名性与保密性,以及链上隐私与中介隐私。有三种实现隐私的方法。
首先,使用零知识(ZK)证明(特别是Stark或universal Snark),我们可以通过将计算从链上转移到中介机构来实现链上匿名性和链上保密性,从而牺牲中介机构(例如Mina Snapps和Aleo)的隐私。
其次,在不依赖中间人的情况下,我们可以在现有的链上应用生态系统中添加匿名性(无需保密),而无需对应用程序设计进行重大更改(例如CoinJoin、Tornado Cash、Aztec Connect和FLAX)。
最后,本文提出了一种称为MOCCA(魔法链上机密计算设备)的抽象,它可以对加密数据进行计算,并发布透明的输出。Mocca可用于构建通用的
......