本文介绍了 ZEXE 协议,该协议旨在实现无需信任方的共识,并解决分布式账本中的隐私和扩展性问题。ZEXE 允许离线执行程序并提交计算正确的证明,从而实现数据和函数隐私,并利用zk-SNARKs密码学技术,为去中心化应用(如金融、游戏和治理等)提供了一个基础平台。
当前世界中的一个关键问题是如何在无需信任的各方之间达成共识。自从加密货币出现以来,建立在区块链技术之上的分布式账本变得越来越流行。其中一个主要问题是这些账本提供的隐私有限,并且对它们可以运行的程序类型有相当的限制。Aleo 提供了一种用于编写私有应用程序的完整堆栈方法。它的核心组件之一是 ZEXE 协议,这是第一个应用程序可以私下、无需信任地运行并可以轻松扩展的账本系统。
正如我们之前提到的,基于账本的系统可以支持丰富的应用程序,但通常存在两个主要缺点:
后者产生了大量隐私至关重要的问题,因为它可能会泄露有关个人病史、支付记录、熟人和贸易伙伴等的相关信息,这些信息可能会被恶意方利用。
另一方面,第一个缺点会产生可扩展性问题,因为每次转换都必须由组成网络的每个设备重新计算(这些设备可能具有非常不同的计算能力),而最弱的设备充当瓶颈。这导致引入了诸如 gas 之类的机制,使用户为昂贵的计算支付更多费用,并阻止拒绝服务攻击。
一些协议,例如 Zerocash,提供隐私保护的支付,而 Hawk 允许状态转换,其中私人数据对第三方隐藏。我们可以说它们实现了数据隐私,但没有实现函数隐私,因为正在执行的转换函数没有隐藏(即使输入和输出参数可能是秘密的)。函数隐私意味着观察者无法区分彼此离线执行的不同计算。
ZEXE 的目标是为这些问题提供可扩展的解决方案,从而实现数据和函数隐私。这可以作为数据共享、金融系统和治理的新形式的坚实基础。主要思想基于以下几点:
为了使该系统发挥作用,这些证明必须满足两个属性:
ZEXE 将为用户提供丰富的功能,离线计算用于实现运行在同一账本之上的多个应用程序的状态转换。共享执行环境提供以下属性:
在下一节中,我们将介绍主要成分以及协议的工作原理:诸如 zk-SNARK、椭圆曲线密码学、配对等术语将被揭开神秘面纱。
ZEXE 的核心依赖于一种新的加密原语,用于在账本上执行计算,称为分布式私有计算 (DPC),它扩展了 Zerocash 的工作原理。我们可以离线执行计算,并出示证明断言它是账本上的有效转换;账本的节点可以快速验证该证明(比每个节点重复我们的原始计算要快得多)并接受该证明。一个缺点是,即使证明验证速度很快,它们的生成也可能非常昂贵(请记住,我们希望允许用户运行任意程序;因此,证明系统应该能够处理许多不同类型的语句和指令)。我们可以利用这种构造并创建一个可委托的 DPC:我们可以让无需信任的服务器或设备执行计算,并向我们提供计算按预期执行且不泄露相关信息的证明。
DPC 方案的构建块是:
为了启用可委托的 DPC,我们需要另一个要素:随机化签名。
在 Zerocash 中,当创建币时,它们的承诺 (1) 会发布在账本上;当它们被消耗时,它们的序列号会被发布。每笔交易都表明一些“旧”币被消耗以创建“新”币:它具有已花费币的序列号,“新”币的承诺,以及“旧”和“新”币的值加起来的证明(该证明表明这是一笔有效交易,并且在交易期间没有创建或销毁额外的钱)。该交易是私密的,因为我们不知道交换的币的值或地址。由于序列号已发布,因此任何币都不能花费多次。
称为记录的数据单元(ZEXE 中的币)绑定到任意程序并指定创建和消耗记录的条件。我们可以将其视为拥有可以花费的 token 或币来运行程序并获得我们所做的事情有效的证明(就像在街机游戏中一样)。为了将这个想法扩展到任意函数,我们可以将记录视为存储一些任意数据有效负载。每当创建记录时,都会发布记录的承诺,并且当记录被消耗时,会显示其序列号。账本上的交易包含有关操作期间花费和创建的记录的信息,以及在新记录的数据有效负载上调用函数会生成旧记录的数据有效负载的证明。
记录结构包含:
记录的承诺是对所有上述属性(公钥、有效负载、出生和死亡谓词以及序列 nonce)的承诺。
这是一个在记录上运行的执行环境。我们可以将其视为账本的一种操作系统。它提供进程隔离、数据所有权、进程间通信处理等。RNK 确保满足出生和死亡谓词,以便在记录的生命周期内强制执行某些约束。换句话说,根据输入数据,谓词可以决定是否允许与该记录进行某些交互。
在账本上,交易包含以下信息:
最近,交易已更新,并由转换组成。换句话说,一个交易由几个转换组成。
零知识简洁非交互式知识论证(朋友们称 zk-SNARK)是一种加密原语,允许一方(证明者)说服另一方(验证者)某个声明/计算的有效性。它具有以下属性:
鉴于我们希望让用户执行任意计算,我们需要证明系统能够以相当通用的方式处理许多不同的语句;这将代表 ZEXE 协议中最大的成本。这些语句属于 NP 类(非确定性多项式时间),这些问题可以在多项式时间内有效地验证。我们需要证明的 NP 语句包含用户定义的谓词,这将迫使我们构建用于通用计算的 zk-SNARK 的所有内容,这依赖于非常昂贵的工具。zk-SNARK 的一个优点是,验证是在恒定时间内完成的;换句话说,验证所需的时间与计算的大小无关。从隐私的角度来看,这是一个理想的属性,因为不同的验证时间可能会提示正在执行的操作类型。
为了解决这个问题,该协议依赖于递归证明组合:我们可以检查证明声明有效性的简洁证明,而不是检查任意 NP 语句。这样,我们可以避免用于通用计算的 zk-SNARK,而可以专注于简洁的证明,这些证明可以硬编码在语句中。我们可以通过使用 携带数据的证明 来实现目标:我们向消息附加一个简洁的证明,断言结果是一致的。例如,我们可以验证证明 πbπb 和 πdπd 符合这些谓词的简洁证明,而不是直接检查出生和死亡谓词(可能相当一般)。由于内部证明是简洁的,因此验证它们(相对)便宜。此外,由于外部证明是零知识的(因此,不透露用于生成证明的任何内容),因此内部证明不必是零知识的,从而进一步简化了计算。
我们可以将任何 NP 语句简化为等效的 NP 完全问题,例如图着色或布尔电路可满足性。ZEXE 通过将我们的任意程序转换为在有限域 FrFr 上定义的算术电路可满足性问题来证明计算的正确性 。出现的问题是,证明验证涉及在字段 FqFq 上的操作,其中 r≠qr≠q。原则上,可以在 FrFr 上模拟 FqFq 中的操作,但这非常昂贵并且会使整个系统变得繁重。另一种选择是使用一对具有一些所需属性的椭圆曲线;我们称它们为配对友好的椭圆曲线。
给定在某个有限域 FqFq 上定义的椭圆曲线 EE,我们可以定义曲线上的点的运算,使得它们在该运算下形成一个群。子群 GG 的阶数(即元素的数量)为 rr,其中 r≠qr≠q。如果一个基域 FF 的大小等于另一个子群的阶数,反之亦然,则称域 FqFq 和 FrFr 上的两个素数阶曲线 E1E1 和 E2E2 是配对友好的。
椭圆曲线配对是一个双线性函数 e:G1×G2→GTe:G1×G2→GT。这里,G1G1 和 G2G2 是椭圆曲线上的群。双线性意味着,给定 G1G1 中的两个点 P1P1 和 Q1Q1 以及 G2G2 中的 P2P2 和 Q2Q2,以下属性成立(我们将所有群运算写成加法):
出于效率原因,我们需要两个字段都具有子群,其阶数是 22 的大幂。ZEXE 使用来自 Barreto-Scott-Lynn 系列的曲线 EBLSEBLS(嵌入度 (2) 为 12),该曲线保守地实现了 128 位的安全性。配对友好的曲线是通过 Cocks-Pinch 方法 ECPECP 生成的。这是一个非常耗时的步骤,因为它涉及探索许多不同的曲线,直到我们找到一个具有所需属性的曲线。
鉴于 ECPECP 的基域大于 EBLSEBLS 的基域,因此对前者的操作更昂贵。为了避免这个缺点,关系 ReRe 分为两个:RBLSRBLS 和 RCPRCP。最后一个负责验证谓词满足的证明,而所有其他检查都取决于 EBLSEBLS 曲线。
承诺和抗冲突哈希函数可以表示为 Edwards 曲线上的 Pedersen 型构造的有效算术电路。因此,选择了在字段 FrFr 和 FqFq 上的另外两个曲线 EEd,BLSEEd,BLS 和 EEd,CPEEd,CP,以便实现重要的加密原语,例如哈希、承诺和可随机化的签名。这使我们能够降低 NP 关系的多次检查的难度。
ZEXE 是一种协议,旨在使用户可以在公共账本上执行任意程序,而不会损害隐私。它解决了迄今为止分布式账本的两个主要缺点:首先,可以离线执行计算,并将正确计算的证明提交给账本。由于验证证明的速度很快,因此避免了幼稚的重新执行问题并提供了可扩展的解决方案。其次,它实现了数据和函数隐私:观察者无法获取有关计算中涉及的数据的信息,甚至无法获取有关正在调用的特定函数的信息。
该协议引入了新的加密原语,例如 DPC 和可委托的 DPC;后者允许设备功能较弱的用户(例如智能手机)将其计算交给不受信任的各方,并获得证明,表明获得的结果与程序的正确执行相对应。这些由 zk-SNARK 支持,它依赖于椭圆曲线配对和用于将任意程序转换为算术电路的工具,我们可以在其中检查计算的有效性。
它为完全私有的应用程序奠定了基础,成为金融、游戏、身份验证、治理等去中心化应用程序的理想平台。
(1) 承诺允许用户承诺一个值,并能够在以后公开它。例如,在轮盘赌中,我可以选择“25”(我真的感觉非常自信),并且通过承诺,我绑定了我选择的“25”(尽管没有人可以先验地知道我选择了 25,因为它被隐藏了)。实现此目的的一种方法是使用抗冲突哈希函数并发布生成的哈希(为了使其工作,我们需要添加其他内容,否则我们可以哈希所有可能性并查看哪个哈希具有相应的哈希)。如果我然后尝试更改我的赌注,则哈希将与我的原始赌注的哈希不匹配。
(2) 椭圆曲线在 FqFq 上的嵌入度是最小的正整数 kk,使得 qk−1qk−1 可被群的阶数 rr 整除。嵌入度应该很高,以便离散对数问题难以解决。但是,如果 kk 太大,则曲线上的算术运算会变得慢得多。
- 原文链接: blog.lambdaclass.com/ful...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!