我们只看到了 ZK 技术潜力的冰山一角,其真正的能力远远没有被完全挖掘出来。
撰文:Salus
零知识证明(Zero-Knowledge, 或简称 ZK)技术可以解决去中心化世界中的隐私和安全问题。本文通过 DEX、Oracle、投票和拍卖四个实例,说明了 ZK 技术在其中发挥的关键作用。ZK 技术被用于确保在 DEX 上的交易既可以被验证,又可以保护用户的隐私,隐藏用户的身份或其他交易细节。基于 ZK 技术可以保证从预言机获取的数据的准确性,防止数据在传输或计算过程中被篡改。在区块链投票项目中,有资格的投票者可以以匿名身份进行投票,投票信息能够防止被预篡改,也是 ZK 技术能够解决的。该技术也可以为区块链拍卖项目中的竞拍者提供身份隐私保护功能,同时还能解决虚假出价的问题。
区块链没有秘密,所有信息都在公众视野之下,这使得其在隐私保护方面有所欠缺。此外,很多智能合约的运行离不开链下数据,这就带来的额外的安全风险。下文,我们将详细探讨这两大特性会引发的安全问题和潜在风险。
区块链的公开透明性保证了交易的可追溯性,但同时也会引发安全性问题。比如,DeFi 中的个人隐私的泄露风险和抢跑交易风险。
隐私泄露:通过地址标签染色法、交易 IP 匹配和广播节点探针等方法可以轻易关联链上地址在现实世界中的真实身份。这些分析方法不仅可以揭露用户的身份,还透露了用户的行为模式和投资策略。例如,某个地址的频繁交易或特定类型的交易活动会透露出该用户的投资偏好或习惯,这种信息经常被不正当地用于竞争优势或不恰当地利用。
抢跑交易:攻击者能够利用区块链的透明性来监控待确认的交易队列。他们通过分析这些未处理交易,可以在交易中设置更高的手续费,从而诱导矿工优先处理这些交易。这样,攻击者可以在其他用户之前执行交易,以获取先机优势,为自己谋取利益。这种行为不仅扭曲了交易过程的公平性,还会导致市场操纵和不利于其他用户的情况。
因此,DeFi 协议的设计和实施应当充分考虑这些潜在的安全威胁。我们应考虑引入额外的隐私保护措施,以保护用户免受隐私泄露和交易行为分析等风险。
在区块链中,智能合约无法直接获取链下数据,它们只能访问区块链上的交易数据或其他合约的状态。智能合约是区块链上自动执行的程序,其运行结果必须在所有节点中保持一致性,即给定相同的输入,其执行结果必须完全一致。由于链下数据可能变化,如果智能合约直接获取链下数据,不同节点在执行相同的合约时可能得到不同的结果,这将破坏区块链的一致性。
然而,许多场景下,智能合约需要依赖链下的数据。例如,一个 DEX 需要获取特定股票或者数字货币的最新价格。这些价格数据一般需要从链下的金融市场或者其他交易所获取。区块链系统通常会通过预言机来获取链下的数据。当智能合约需要链下数据时,它可以请求预言机,预言机将获取链下数据并返回给智能合约。而且,预言机也可以将链上的数据传输至链下。
不过,引入预言机也带来了新的安全风险,在一些场景下预言机会因错误或恶意行为提供不准确的数据。因此,预言机的设计和实现需要对安全性给予高度重视。
涉及到投票和拍卖的区块链项目,也需要考虑特别的安全保护措施。区块链技术为投票平台提供了透明和不可篡改的特性。然而,筛选合格选民、选民匿名投票、防止投票信息被预先篡改已经成为了新的挑战。链上拍卖的核心问题是虚假出价和账户可视。当你可以看透对方的筹码,那你就具有了先发优势。
区块链的公开透明性为 DeFi 领域的许多项目带来了隐私上的挑战。面对这样的挑战,Salus 将以 DEXs 为例,探讨 ZK 技术在增强 DEXs 隐私保护方面的关键作用。
假设有一个具有隐私保护功能的 private DEX。通过使用 ZK 技术,它能够隐藏交易信息的部分内容,同时还能验证这些交易的有效性。在这个 DEX 中,只有部分交易信息是公开的,例如所有注册用户,他们的银行账户、存款和取款的资产名称以及数量,如图 1 所示。交易者本人会知道自己的全部交易信息,但其他交易者无法看到他人的完整交易信息。以下,以五个具体的交易事件为例:
图 1 只知道部分公开信息的 Private DEXs ,图片来源 https://arxiv.org/pdf/2309.01667.pdf
假设在这个 private DEX 平台上发生了五笔交易,他们相对应的事件信息是:
这个 private DEX 平台基于 ZK 技术实现了隐私保护功能,其中完整的交易信息只对参与交易的用户可见。该平台不会公开展示完整的交易事件信息,而是提供隐私的事件信息。接下来,我们将详细说明这些隐私事件信息具体指什么,以及如何进行验证:
假设存在一个基于区块链的农业保险智能合约,该合约根据预言机提供的天气数据来判断是否向投保的农场主支付赔偿。例如,如果某地区发生严重干旱,那么该地区的农场主就能从这个保险合约中获得赔偿。
但是,如果预言机由于某些原因错误报告了该地区的天气状况,比如实际上该地区正遭受严重干旱,而预言机却报告称降雨量正常,这种错误的信息将导致智能合约做出错误判断,从而拒绝向实际上正面临干旱困境的农场主支付赔偿。
从上面这个例子可以看出,保证预言机提供数据的准确性是至关重要的。zkOracle是基于 ZK 技术的预言机,一个无需信任且安全的预言机。以下,我们将具体介绍传统预言机和 zkOracle 的主要区别,并解释为什么 ZK 技术在其中发挥了关键作用。
传统的预言机可以被划分为三种不同的类型,我们将从以下四个维度来阐述和比较每种预言机之间的差异:
在本文中,我们专注于对 Output Oracle 和 I/O Oracle 的讨论。这两种预言机的数据均源自区块链,这意味着这些数据已经经过了区块链的验证和保护。如何保证预言机计算和传输的安全性是我们讨论的重点问题。
为了实现一个安全的预言机,我们可以对 output oracle 和 I/O oracle 进行 ZK 改造,实现 output zkOracle 和 I/O zkOracle。以下部分将比较传统 oracle、output zkOracle 和 I/O zkOracle 的工作流程,并阐述 output zkOracle 和 I/O zkOracle 在哪些方面进行了 ZK 改造。
传统预言机的工作流程如图 2 所示:
步骤①:从数据源获取数据
步骤②:在 computation 组件中对数据进行计算
步骤③:将计算结果输出
图 2 Traditional Oracle
可以使用 ZK 技术对传统预言机工作流程中的步骤②和步骤③进行 ZK 改造,步骤①保持不变:
步骤②-ZK 改造:计算和生成 ZK 证明
在 computation 组件中基于 ZK 技术对从数据源获取到的数据进行计算,通常是排序、聚合和过滤,计算的结果是一个 ZK 证明。使计算和输出可验证。
步骤③-ZK 改造:验证 ZK 证明
步骤②计算得到的 ZK 证明可以在智能合约或任何其他环境中被验证。可以通过确认步骤②验证计算的有效性。
图 3 Output zkOracle
步骤②-ZK 改造:计算和生成 ZK 证明
I/O zkOracle 的计算组件由 output zkOracle 和 input zkOracle 组成。I/O zkOracle 与前述的 output zkOracle 相比,计算的主要内容变多了,即 input zkOracle 涉及将链下的计算结果设置为智能合约调用的 calldata。这两部分的结合,使得利用复杂的链下计算来实现智能合约自动化操作成为可能。
步骤③-ZK 改造:验证 ZK 证明
步骤②计算的输出包括链上数据(作为 calldata 完成智能合约调用)和一个可验证的 ZK 证明。这个 ZK 证明可以在智能合约或任何其他环境中被验证。验证可以确认步骤②计算的有效性。
图 4 I/O zkOracle
在区块链上进行的投票活动,所有信息都是公开的,这会使投票者的隐私信息被潜在的攻击者获取。基于区块链的投票项目面临着两大挑战:
在基于区块链的投票项目中,如何既保护投票者的身份隐私,又确保投票结果的可验证性,是一个需要巧妙处理的问题。利用 ZK 技术,可以有效地实现这两者的平衡。
在区块链匿名投票项目中,结合使用 ZK 技术和 merkle tree 实现匿名投票并验证。我们将投票流程分为三个主要阶段:
投票者在进行投票之前需要使用自己的真实身份信息进行资格确认和身份验证。验证通过后,他们将得到一个与自己真实身份无关的匿名身份(anonymous identity)。投票者以该匿名身份进行投票可以保护个人身份信息不被泄露。
投票者使用匿名身份进行投票之前,需要验证其匿名身份,验证通过的投票者才可以投票。
使用一个Merkle tree来存储所有投票者的匿名身份,这样可以防篡改,保证投票者身份信息的完整性。
将投票者的匿名身份信息生成的身份承诺作为叶子结点,由一定数量的叶子结点构造 merkle tree。使用一个基于 merkle tree 的验证电路验证投票者的身份。验证需要三方面的数据:
在由输入目标节点和路径索引生成根节点的过程中,使用由兄弟节点和用户信息生成的身份承诺来确定用户的身份。为了确保用户选票的唯一性,我们使用经过哈希处理后的身份标识符和外部标识符作为投票证明。
3. 投票并验证
这个阶段可以分为以下六个步骤,如图 5 所示:
图 5 投票验证过程
基于此,我们可以实现一个区块链匿名投票项目。
区块链公开拍卖存在一个弊端。由于区块链交易都是公开的,任何人都可以观察到投标者的出价和资金状况。如果一个投标者知道了其他投标者的出价。或者,他知道了其他投标者的身份,就可以根据区块链公开的交易信息得知此账号拥有的可用资金。这个投标者就可以根据其他投标者的出价或者可用资金来调整自己的出价以赢得拍卖。公开区块链拍卖面临着投标者身份公开和资金敞口等挑战。隐私拍卖可以防止这种不公平现象的发生。
在隐私拍卖中,投标者可以在不透露身份或可用资金的情况下提交出价。要想实现隐私拍卖,必须攻克两大难关。
使用 ZK 技术来保护投标者的身份隐私,同时能够验证他们拥有出价的可用资金。
在隐私拍卖中,每一个投标者需要两个账户地址:
这两个账户地址毫不相关,其他人无法通过投标者质押账户的交易来确定隐私账户下的最高出价。
隐私拍卖的过程如下:
每一个投标者将账户地址的哈希值和可用资金的哈希值预提交至 merkle tree。基于 ZK 技术验证该用户确实拥有该账户地址,即哈希值的原像(原始数据)与账户地址和可用资金一致。
在投标者递交报价之前,隐私拍卖合约可以检验上一位投标者的账户。为了防止同一账户人为抬高价格,上一位投标者不能和当前投标者是同一人。虽然这样的设置无法完全避免一个人同时控制两个质押账户和两个隐私账户,但需要注意的是,拥有两个账户意味着每个账户中的可用资金会减少。这进一步降低了赢得拍卖的机会,因为在资金被质押给 merkle tree 之后,将无法将其转移到隐私账户中。
使用比较器电路(comparator circuit)来验证投标者的可用资金是否高于出价,主要验证以下内容:
基于此,我们可以实现一个区块链隐私拍卖项目。
我们不能忽视区块链项目在安全性方面所面临的挑战。ZK 技术可以为 DeFi 项目提供隐私保护功能,避免用户身份泄露和抢跑攻击等安全问题。该技术也可以为预言机提供更安全的数据验证方法。在区块链投票项目中,ZK 技术的应用可实现匿名投票,既保护了投票者的身份隐私,又能验证投票信息的真实性。在区块链拍卖项目中,使用该技术可以保护投标者的身份隐私,同时验证他们拥有足够的出价资金,从而保护卖方的利益。
然而,这仅仅是 ZK 技术潜力的冰山一角,其真正的能力远远没有被完全挖掘出来。在未来,我们期望看到 ZK 技术在更多的区块链项目中得到应用,为用户提供更好的隐私保护和安全保障。
【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。