Zexe vs. VeriZexe vs. Taiga
对比分析 Zexe、VeriZexe 和 Taiga 三种隐私保护协议的技术特点和应用场景。
目录
Zexe vs. VeriZexe vs. Taiga
本文的目标是理解 Taiga 与 Zexe 和 Verizexe 等先前工作之间的主要架构差异,以及这种新范式带来的可能性、解决方案和挑战。
TL;DR
Taiga 是一个以意图为中心的执行环境,用于隐私保护应用程序,使用零知识证明。意图是条件性程序,使用户能够表达他们的兴趣,同时对最终状态转换存在一些不确定性。
侧注:信息流控制可能比隐私更合适的术语,因为它包含了用户控制其信息如何流动的概念,有时向他们选择的某些方透露(有时只向自己透露)。没有任何系统可以完全私密,也就是说,如果没有人能读取系统中输入的数据。对某些人来说私密的,对其他人来说可能不是私密的。在 Taiga 这样的系统中,重要的是用户控制他们的数据。然而,为了方便和熟悉,本文将使用“隐私”这一术语。
介绍
引言
以太坊和 Solana 等智能合约系统是完全可编程的,但它们不私密,也就是说,交易程序和数据都以明文形式存储,任何区块链的观察者都能看到所有状态变化的历史和当前状态。
Zexe 是首个基于账本系统,支持私有、可编程的应用。VeriZexe 在 Zexe 的基础上,引入了使用 Plonk 的通用设置,在证明效率上取得了显著提升,但其他架构上没有重大变化。直到 Taiga 出现之前,Zexe(以及 VeriZexe)是唯一实现功能隐私的具体构建方案。与 VeriZexe 类似,Taiga 也选择了不同的证明系统,这次是为了完全去除可信设置,通过 Halo2 累积实现高效的递归。此外,Taiga 引入了全新的意图和求解器架构,意图可以异步、非交互、可组合地增量或部分解决。Taiga 还引入了可编程授权,其中谓词控制消费(而非公钥)。简而言之,Taiga 将授权方法扩展到谓词,而非 Zexe 更严格的签名检查。这些变化带来的影响深远,使得 Zexe 模型中不可能的新应用得以涌现,例如订阅或自动交易,用户无需在线即可进行。
由于 VeriZexe 在概念上与 Zexe 没有区别,我们将重点关注 Taiga 和 Zexe 之间的差异。
隐私
Zexe 和 Taiga 都能实现数据和函数的隐私保护,也就是说,它们隐藏用户数据,并且应用程序之间无法区分。数据隐私通过承诺和零知识证明实现。实现函数隐私的思路包括固定一个单一的通用函数,该函数接受用户定义的函数作为输入。
特别是,为了隐藏函数,Zexe 架构提供了一个极简的执行环境,称为"记录纳米内核"(RKN),它接受包含两个布尔函数的记录,即所谓的"出生"和"死亡"谓词。出生谓词是在记录创建时需要满足的转换规则,而死亡谓词是在记录被消耗时需要满足的规则。这两个布尔函数可以看作是单一通用函数的数据输入。如果交易中所有涉及的记录的谓词都得到满足,那么这个交易就是有效的。
类似地,Taiga 也提供了一个记录(相当于 Zexe 中的记录)的执行环境,并带有一个名为"应用有效性谓词"(或简写为 AppVP )的布尔函数。
Zexe 中的记录与 Taiga 中的笔记之间的主要重要区别在于,笔记不包含地址公钥apk ,而在 Zexe 中,该公钥用于花费笔记(通过证明知道地址私钥 ask )。那么在 Taiga 中,用户如何花费笔记呢?在 Taiga 中,笔记纯粹是某种应用状态,而确定笔记如何花费的任务以及是否需要用户花费笔记,则由应用本身来决定。与 Zexe 中证明私钥所有权不同,应用可能需要使用谓词来处理花费授权。这种谓词的一个特例是 userVP ,除了其他检查外,它还可以要求提供未来花费者的公钥来证明对私钥的知识。这种授权方法的灵活性使得某些类型的应用成为可能,例如无需用户干预的自动交易。
在 Taiga 中,每个交易中的笔记内的 AppVPs 只需要满足。然而,用户可以在两个不同的字段 app_data_static 和 app_data_dynamic 中编码进一步的约束和其他任意数据,这种编码的规则取决于每个应用。 app_data_static 包含使应用独特的固定数据,并与 AppVP 一起构成笔记类型。笔记类型用作标识符来检查交易中不同笔记的余额。另一方面, app_data_dynamic 包含上下文数据或"运行时"数据。
说明 app_data_static 和 app_data_dynamic 之间差异的一个例子是代币应用。代币应用的规则在 AppVP 中定义。 app_data_static 字段是一个标量值,用于编码它是 "BTC" 还是 "ETH" 代币。 app_data_dynamic 字段可能编码一些用户特定的约束,例如他在任何给定交易中愿意花费的金额上限,以及他的签名。
也就是说,具有相同 AppVP 和 app_data_static 的笔记(在价值上)是可替代的,即使它们的 app_data_dynamic 不同。如前所述,编码机制是灵活且依赖于应用的;只要应用描述了如何解码它们各自的有限域中的数据,任何数据都可以被编码在 app_data_static 或 app_data_dynamic 中。在某些其他情况下,这些字段可能表示一个查找表中的键,其中数据实际存储,或谓词的验证密钥。这种设计选择使得 Taiga 中的笔记轻量级且大小恒定。
此外,Taiga 的架构支持可组合的隐私、可组合的求解和透明的执行。可组合的隐私意味着当用户在 Taiga 中构建一个私有应用程序时,它可以与另一个私有 Taiga 应用程序组合(无权限地),并且它们的组合仍然是私有的。可组合的求解是指意图最终可以通过组合部分求解的意图来完全求解。透明的执行是指 Taiga 使隐私可选,允许屏蔽和明文交易在同一个系统中共存。Taiga 上的应用程序对于透明和屏蔽的执行是相同的方式编写的,并且透明和屏蔽的执行都可以在一个交易中发生——例如,许多透明和屏蔽的意图可以原子性地匹配。这与那些两者之间存在硬边界系统的差异很大。接下来我们将探讨 Taiga 的架构,以了解如何实现可组合的隐私和透明的执行。
架构
Zexe 和 Taiga 都遵循 UTXO 模型,在该模型中,如果它们各自的出生和死亡谓词得到满足,交易将花费并创建相同应用程序的记录。然而,Zexe 在如何在其上构建应用程序方面在很多层面上都持中立态度。Zexe 论文中有几个基于 Zexe 构建的应用程序示例,例如自定义资产或私有 DEX。
Zexe 协议对通信层是无关的;发起者如何与发起者沟通以商定条款和共享信息是 Zexe 范围之外的事,但它需要(离线)系统参与者之间的交互来匹配意图。这限制了可以在该系统上构建的应用类型。
下面的图表概括了这个 DEX 示例。Maker 和 Taker 都从一个他们可以通过揭示其 nullifier 来花费的记录承诺开始。红色箭头代表双方之间的直接离线通信。
Taiga 是为非交互式匹配而设计的,与 Zexe(至少不是明确为这个目的设计的)形成对比。Taiga 在通信层方面只是部分无关紧要,因为它需要足够的结构来进行非交互式匹配,但它仍然无关紧要于流言传播和解决的实际模式看起来像什么。Taiga 允许创建部分交易,这些交易可以独立检查,并在最终交易中无论执行顺序如何组合。
为实现可组合的隐私性和非交互性,Taiga 引入了意图、求解器和部分交易的概念。部分交易是一种不检查已花费和输出笔记之间余额的交易。在 Taiga 中,意图是一种特殊类型的应用。例如,部分交易可以包含某种代币的已花费笔记,以及一个编码可能交换条件的意图笔记:
这个例子中的部分交易显然是不平衡的:无论是代币还是意图应用都没有其对应的支出/输出记录。为了让部分交易成为(平衡的)交易,并使意图得到满足,Taiga 引入了“解决者”的概念。解决者是一个接收部分交易并尝试从它们中构建有效平衡交易的实体。
我们可以使用上面与 Zexe 一起使用的基于意图的 DEX 示例来说明 Taiga 的工作原理以及求解器的具体作用。
与 Zexe 不同,在 Taiga 中用户无需离线沟通。解决者的任务是监控部分交易,并根据其笔记(甚至其他部分交易,如果解决者认为它们将有助于创建未来的最终交易)来构建最终交易。最终交易基本上是一组不可变的部分交易,使得最终交易保持平衡。可组合隐私得以实现,因为两个(私有)部分交易的组合仍然是私有的。为了让解决者读取笔记的内容,他们需要特定的查看密钥。解决者如何使用他们的密钥不在本文的范围内(参见 Taiga 文档)。
一旦解决者创建了一个最终交易,它就会被广播到某个存储中。Taiga 可以接入任何类似以太坊的区块链系统。特别是,Anoma 协议将其作为其堆栈的一部分整合了 Taiga,并选择 Typhon(一个异构 BFT 系统,用于存储、排序和(抽象地)执行交易)作为其当前的存储选择。
证明系统
尽管选择的证明系统可以被视为实现细节,但值得提及。Zexe 使用 Groth16,它需要每个电路进行一次可信仪式,尽管一些 Zexe 协议的实现使用不同的证明系统 1。如前所述,VeriZexe 只需要一次通用的可信设置。VeriZexe 的实现根据电路使用 TurboPlonk 和 UltraPlonk。
VeriZexe 还引入了进一步优化的措施,例如将昂贵的配对检查从 SNARK 验证器电路中移出,将最终证明验证步骤延迟到验证者,通过将出生和死亡谓词合并为一个更大的谓词来减半证明数量,证明批处理以及利用查找参数的使用。
Taiga 目前依赖于 Halo2,后者无需可信设置。虽然移除可信设置在隐私方面并非大问题(实际上,它并不会使系统更安全),但在进行递归证明组合(即检查嵌套电路中的证明)时变得相关。在 VeriZexe 等基于配对的系统中使用嵌套递归效率低下,从而失去了可信设置带来的性能优势。Halo2 使用非配对 Pasta 曲线,这些曲线相互形成循环。这使得能够进行高效的多层(递归)证明组合,而不是只能通过 VeriZexe 高效实现的单层证明组合。
在 Taiga 中,我们需要递归,因为我们希望谓词保持私密;没有递归,跟踪是可能的,从而会泄露信息。支持完全递归的另一个原因是可扩展性。一旦系统开始处理大量证明和验证,就需要高效的递归来维持系统性能。此外,Halo2 的实现高度优化,这主要归功于 ZCash 团队的工程努力。
谢谢!
Taiga 目前正处于积极开发中,无论是设计还是实现方面。如果您想了解更多关于 Taiga 的信息,可以在这里找到我们的作品。
[1] Aleo 使用 Marlin 证明系统,该系统需要通用可信设置。
讨论
请到论坛上讨论。