一、简介

零知识(ZK)技术能够解决去中心化世界中的隐私和安全问题。本文透过 DEX、预言机、投票、拍卖四个例子来说明 ZK 技术的关键作用。 ZK技术用于确保DEX上的交易可以被验证,同时保护用户隐私,隐藏他们的身份或其他交易细节。该技术保证了从预言机获取的数据的准确性,防止数据在传输或计算过程中被篡改。在区块链投票项目中,符合条件的选民可以匿名投票,并且可以保护投票资讯不被预先篡改。这也是ZK技术可以解决的问题。该技术还可以为区块链拍卖专案中的投标者提供身分隐私保护,解决诈欺性​​投标问题。

2. 去中心化世界中的隐私风险

众所周知,区块链没有秘密,所有信息都是公开的,在隐私保护方面有所欠缺。此外,很多智能合约的运行依赖于链下数据,带来了额外的安全风险。下面我们将详细探讨这两个特点可能带来的安全问题和潜在风险。

  1. 区块链透明性引发的安全问题。

区块链的透明性保证了交易的可追溯性,但同时也可能引发安全问题。例如,DeFi 中的个人隐私泄露风险和抢先交易风险。

隐私泄露:地址标签染色、交易IP匹配、广播节点探测等方法可以轻易关联链上地址的真实身份。这些分析方法不仅会暴露用户的身份,还会暴露其行为模式和投资策略。例如,某个地址的频繁交易或特定类型的交易活动可以揭示用户的投资偏好或习惯。这些信息通常会被不正当地用于竞争优势或不当利用。

抢先交易:攻击者可以利用区块链的透明性来监控待处理交易队列。通过分析这些未处理的交易,他们可以设置更高的交易费用,从而诱导矿工优先处理这些交易。通过这种方式,攻击者可以先于其他用户执行交易,以获得先发优势并为自己谋取利益。这种行为不仅扭曲了交易过程的公平性,还可能导致市场操纵和对其他用户不利的情况。

因此,DeFi 协议的设计和实现应该充分考虑这些潜在的安全威胁,考虑引入额外的隐私保护措施,保护用户免受隐私泄露、交易行为分析等风险。

  1. 区块链获取链下数据时的安全风险。

在区块链中,智能合约无法直接访问链下数据,只能访问区块链上的交易数据或其他合约的状态。智能合约是区块链上自动执行的程序,其执行结果必须在所有节点保持一致,即给定相同的输入,其执行结果必须完全相同。如果智能合约直接访问链下数据,则可能导致可变性,因为链下数据可能会发生变化。执行同一合约的不同节点可能会产生不同的结果,从而破坏区块链的一致性。

然而在很多场景下,智能合约需要依赖链下数据。比如一个DEX需要获取某只股票或者某加密货币的最新价格,这个价格数据一般需要从链下金融市场或者其他交易所获取。区块链系统通常使用预言机来获取链下数据。当智能合约需要链下数据时,可以向预言机发出请求,预言机获取链下数据并返回给智能合约。而且,预言机还可以将链上数据传递到链下。

然而,引入预言机也带来了新的安全风险,在某些情况下,预言机可能会由于错误或恶意行为而提供不准确的数据。因此,设计和实施预言机需要高度重视安全性。

涉及投票和拍卖的区块链项目也需要考虑特殊的安全保护措施。区块链技术为投票平台提供了透明和防篡改的特性。然而,筛选合格的投票者、投票者匿名投票、防止投票信息被提前篡改成为新的挑战。链上拍卖的核心问题是虚假出价和账户可见性。当你能看穿对方的筹码时,你就拥有了主动的优势。

3. 隐私驱动的场景创新

3.1 ZK私有DEX

区块链的透明性给 DeFi 领域的很多项目带来了隐私挑战。面对这样的挑战,Salus 将以 DEX 为例,探讨 ZK 技术在增强 DEX 隐私保护方面的关键作用。

假设有一个具有隐私保护功能的私有DEX,利用ZK技术,可以在验证交易有效性的同时隐藏部分交易信息。在这个DEX中,只有部分交易信息是公开的,比如所有注册用户、他们的银行账户以及存入和提取的资产名称和数量,如图1所示。交易者自己知道他所有的交易信息,但其他交易者无法看到其他人的完整交易信息。下面将以五个具体的交易事件为例:

图 1:私有 DEX,仅知晓部分公开信息。图片来源:https://arxiv.org/pdf/2309.01667.pdf

假设该私有DEX平台上发生了五笔交易,其对应的事件信息为:

  1. Alice 在平台上存入 1000 美元。

  2. Bob在平台存入10BTC,此时BTC的价格为1000美元。

  3. Alice在平台上进行一笔交易,用800美元兑换0.5BTC,此时BTC的价格为1600美元。

  4. Alice在平台上提现0.3BTC,此时BTC的价格为2000美元。

  5. 平台记录了Alice的全部花费和全部收益,分别为480美元和600美元。

该隐私DEX平台基于ZK技术,实现了隐私保护功能,完整的交易信息只有参与交易的用户才能看到。平台不公开展示完整的交易事件信息,但提供隐私事件信息。接下来我们详细解释一下隐私事件信息指的是什么以及如何验证:

  1. 当存入 1000 美元时,银行账户将显示 Alice 的身份。然后 Alice 会收到平台生成的资产证书或签名。为了防止双重支付并确保合规,签名消息必须包含资产详细信息之外的其他属性。这些属性包括唯一的资产标识符,即 Alice 的用户标识符。此信息应隐藏以保持用户的匿名性。Alice 需要基于 ZK 技术证明她的盲用户标识符等于她的注册凭证。为了满足税务报告客户端合规性,需要计算在兑换和取款交易中出售资产的收益。这需要在存款和交易中包含资产购买时的确切成本。为此,我们在资产证书中引入了购买价格作为附加属性。

  2. 当 Bob 存入 10 BTC 时,平台不知道 Bob 的身份,因为这笔交易不是法定存款。

  3. 当 Alice 将 800 美元兑换成 0.5 BTC 时,她使用 1000 美元的资产证明请求两份新证明,即剩余的 200 美元和 0.5 BTC,并隐藏详细信息。平台在某些条件下批准她的请求,包括基于 ZK 技术证明她有足够的美元、确保证书共享相同的用户标识符、确认剩余美元金额非负、将 BTC 价格与最新证书匹配以及验证交易总价值等值。

  4. 当提取 0.3 BTC 时,与兑换操作类似,只是兑换入的资产不同。Alice 也在区块链上验证提取的 BTC 是否到账。

  5. 当文件全部成本为 480 且全部收益为 600 时,Alice 出示一份有效的注册证书,并请求一份更新的注册证书,其中包含新的索引,将成本和收益重置为零,并获得一份文件证书以提交给监管机构。该文件证书包含 Alice 的真实身份、正确的成本 480 和收益 600,以及一些监管辅助信息。由于平台隐藏了成本和收益以避免信息泄露,Alice 应该证明承诺的成本和收益等于她的注册证书中的值,平台将进行盲签名。Alice 对其进行盲签名并将消息签名对提交给监管机构进行税务申报。

3.2 zkOracle

假设有一个基于区块链的农业保险智能合约,依靠预言机提供的数据来决定是否向投保的农民支付赔偿。如果某个地区遭受严重干旱,那么该地区的农民可以从这个保险合约中获得赔偿。


然而,如果预言机错误地报告了某个地区的天气数据,则可能会出现重大问题。例如,假设该地区正面临严重干旱,但预言机显示降雨量正常。这种不准确的信息会导致智能合约错误评估情况,从而拒绝向真正遭受干旱困扰的农民支付赔偿金。

从上面的例子可以看出,保证预言机提供的数据的准确性是至关重要的。zkOracle是基于ZK技术的预言机,是一个安全且不需要信任的预言机。下面我们将具体介绍传统预言机和zkOracle的主要区别,并解释为什么ZK技术在其中起着关键作用。

传统的预言机可以分为三种不同的类型,输入预言机、输出预言机和输入/输出(I/O)预言机。我们将从以下四个维度来阐述和比较每种预言机之间的区别:

本文重点讨论输出预言机和输入/输出预言机。这两类预言机的数据来源于区块链,也就是说这些数据是经过区块链验证和保护的。如何保证预言机计算和传输的安全性是我们讨论的重点问题。

为了构建安全的预言机,我们可以在输出预言机和 I/O 预言机中实现零知识技术,从而创建输出 zkOracles 和 I/O zkOracles。下一节将比较传统预言机、输出 zkOracles 和 I/O zkOracles 的工作流程,并详细说明如何使用零知识(ZK)技术改造输出 zkOracles 和 I/O zkOracles。

1 传统预言机

传统预言机的工作流程如下图2所示:

  • 步骤①:从数据源获取数据。

  • 步骤②:在计算组件中计算数据。

  • 步骤③:输出计算结果。

图 2:传统预言机

利用ZK技术可以修改传统Oracle工作流程中的步骤②和步骤③,步骤①保持不变:

2 输出 zkOracle

步骤 ②——ZK 修改:计算和 ZK 证明生成

在计算组件中,基于ZK技术对从数据源获取的数据进行计算,通常是索引、聚合、过滤等,计算的结果即为ZK证明。

步骤③-ZK修改:验证ZK证明

步骤②中的计算得到的零知识证明可以在智能合约或者其他环境中进行验证,该验证可以确认步骤②中计算的有效性。

图 3:输出 zkOracle

3 I/O zkOracle

步骤 ②——ZK 修改:计算和 ZK 证明生成

I/O zkOracle 的计算组件包括输出 zkOracle 和输入 zkOracle。相比于之前提到的输出 zkOracle,计算的主要内容增加了,特别是输入 zkOracle,它将链下计算的结果转化为供智能合约调用的 calldata。这两部分的结合使得通过复杂的链下计算实现智能合约的自动化成为可能。

步骤③-ZK修改:验证ZK证明

步骤 2 中的计算的输出包括链上数据(作为完成智能合约调用的调用数据)和可验证的零知识证明。此零知识证明可以在智能合约或任何其他环境中进行验证。该验证可以确认步骤 2 中的计算的有效性。

图 4:I/O zkOracle

3.3 匿名投票

在区块链上进行的投票活动,所有信息都是公开的,这可能使潜在的攻击者获得投票者的隐私信息。基于区块链的投票面临两大挑战:

  1. 选民身份隐私:为确保选民隐私,投票需要以匿名身份进行。

  2. 投票结果的可验证性:为了防止投票数据被篡改,需要设计一种机制来保证投票结果的可验证性。

在基于区块链的投票中,如何保护投票者身份的隐私和保证投票结果的可验证性是一个需要巧妙处理的问题,利用ZK技术可以有效地在两者之间取得平衡。

区块链上的匿名投票,采用ZK技术与Merkle树相结合的方式,实现匿名投票与验证。我们将投票流程分为三个主要阶段:

1 使用哈希和签名方法为选民生成匿名身份

投票前,选民需使用真实身份信息进行资格审核和身份验证,验证通过后将获得一个与真实身份无关的匿名身份,使用该匿名身份进行投票可防止个人身份信息泄露。

2 基于ZK技术和Merkle Tree验证选民匿名身份

投票者在使用匿名身份进行投票前,需要验证自己的匿名身份,只有通过验证的人才有资格进行投票。

采用Merkle树存储所有选民的匿名身份,防止篡改,保证选民身份信息的完整性。

以投票人匿名身份信息生成的身份承诺作为叶子节点,由一定数量的叶子节点构建Merkle树,通过基于Merkle树的验证电路对投票人身份进行验证,验证需要三部分数据:

  • 当前投票者的身份承诺,称为输入目标节点。

  • Merkle 树的根节点。

  • 输入的目标节点到根节点的路径索引,路径索引表示目标节点在Merkle树中的位置信息,用左0、右1表示。

在由输入的目标节点和路径索引生成根节点的过程中,通过兄弟节点和由用户信息生成的身份承诺来确定用户的身份。为保证用户投票的唯一性,我们使用经过哈希处理的身份标识符和外部标识符作为投票凭证。

3 投票与验证

此阶段可分为以下六个步骤,如图5所示:

  • 计算问题:将投票者的匿名身份插入到Merkle树中,并进行验证。

  • 等效转换:将问题依次转化为ZK低阶电路、R1CS结构(秩1约束系统)、QAP(二次算术程序)问题,生成验证与证明密钥的过程。

  • 公共参数生成:为了保证ZK系统的安全性,需要一个可信的设置来生成用于生成证明和验证证明的公共字符串。

  • 生成零知识证明:使用零知识电路可以为投票者生成零知识证明。生成这样的证明需要将投票者的匿名身份信息和投票信息作为零知识电路的输入。这一步通常在链下完成。然后,生成的零知识证明将上传到区块链。

  • 验证零知识证明:链上验证证明,确定投票的有效性,即检查投票者的投票是否符合电路的有界系统。如果验证成功,则返回 1;否则,返回 0。

  • 投票合约:投票合约根据部署的验证合约和验证密钥对投票结果进行验证。在用户与合约交互过程中,ZK证明的生成与验证都是基于零知识电路进行计算,可以极大程度地保护投票者的身份信息。

图5:投票和验证流程

基于此,我们可以实现一个区块链匿名投票项目。

3.4 隐私拍卖

区块链上的公开拍卖有一个缺点。由于区块链交易是公开的,任何人都可以观察竞标者的出价和财务状况。如果竞标者知道其他竞标者的出价,或者知道其他竞标者的身份,他们可以根据区块链上公开的交易信息推断出该账户的可用资金。然后,该竞标者可以根据其他竞标者的出价或可用资金调整其出价以赢得拍卖。开放式区块链拍卖面临着竞标者身份公开和财务曝光等挑战。隐私拍卖可以防止这种不公平的情况。

在隐私拍卖中,竞标者可以不透露身份或可用资金来提交竞标。要实施隐私拍卖,必须克服两大挑战。

  • 保护买家身份:买家账户的身份需要保密,因为泄露账户信息将会泄露他们在拍卖中的可用资金。

  • 保护卖家的利益:拍卖需要防止恶意竞拍者(买家)提交超出其可用资金的出价。

ZK技术用于保护投标人的身份,同时验证他们是否有足够的资金进行投标。

在隐私拍卖中,每个竞标者需要两个账户地址:

  • 公共质押账户:用于提前转移拍卖的入场费。

  • 私人账户:此账户存放竞标者用于支付中标价的实际资金。换句话说,如果竞标者中标,此账户中的资金将用于支付中标价。

这两个账户地址彼此无关,其他人无法根据竞标者质押账户的交易情况来确定私人账户下的最高出价。

隐私拍卖的流程如下:

1 基于ZK技术验证账户地址和可用资金

每个竞拍者预先将账户地址的哈希值和可用资金的哈希值提交到Merkle树中,基于ZK技术验证用户确实拥有该账户地址,即哈希值的原像(原始数据)与账户地址和可用资金一致。

2. 核实账户,防止人为涨价

在竞标者提交竞标之前,隐私拍卖合约可以检查前一位竞标者的账户。为防止同一账户人为抬高价格,前一位竞标者不能与当前竞标者是同一个人。虽然这种设置不能完全防止一个人同时控制两个质押账户和两个隐私账户,但需要注意的是,拥有两个账户意味着每个账户中的可用资金将减少。这进一步降低了赢得拍卖的机会,因为一旦资金被质押到 Merkle 树,就不可能将它们转移到隐私账户。

3 基于ZK技术验证投标人的可用资金是否高于投标价

使用比较器电路来验证投标人的可用资金是否高于出价,主要验证以下内容:

  • 比较可用资金和竞买人的出价,如果比较器的ZK电路返回的结果为真,则表示竞买人的可用资金等于或高于出价,即出价有效;否则,出价无效。

  • 该电路还包括中间检查,以防止见证文件被篡改。

  • 检查Merkle树中是否存在账户地址和可用资金的哈希值。

基于此,我们可以实现区块链隐私拍卖项目。

4. 结论

我们不能忽视区块链项目面临的安全挑战。ZK技术可以为DeFi项目提供隐私保护,避免用户身份泄露、抢先交易等安全问题。该技术还可以为预言机提供更安全的数据验证方式。在区块链投票中,ZK技术的应用可以实现匿名投票,既保护了投票者的身份隐私,又可以验证投票信息的真实性。在区块链拍卖中,使用该技术可以在保护竞拍者身份隐私的同时验证其是否有足够的竞拍资金,从而保护卖家的利益。

然而,这只是 ZK 技术潜力的冰山一角,其真正的能力尚未得到充分挖掘。未来,我们期待看到 ZK 技术应用于更多区块链项目,为用户提供更好的隐私保护和安全保障。Salus 致力于利用 ZK 技术实现区块链应用层项目的隐私保护。如果您想增强 DApp 的隐私性,请随时联系 Salus。我们随时为您提供所需的一切帮助。