# 什么是 ZEXE？（第一部分）

By [Moneydao](https://paragraph.com/@moneydao-2) · 2022-06-05

---

为了欣赏 ZEXE 的设计，首先了解更多关于加密货币如何在幕后工作是至关重要的。

介绍
--

自加密货币出现以来，分布式账本系统已经变得流行起来。典型的分布式账本方案建立在一种称为区块链的技术之上，其特点是特定的数据结构以块的形式保存交易信息的记录。这些数据块通过称为散列的密码计算数字“链接”或链接在一起，并且该散列唯一地标识给定块。

尽管它们越来越受欢迎，但分布式账本系统方案通常只提供有限的隐私。此外，确实提供隐私的方案通常在其支持的程序方面的表现力受到限制。

正是这个问题促使隐私研究人员（包括几位 ZCash 创始科学家）提出了一个他们称为 [ZEXE](https://eprint.iacr.org/2018/962.pdf)或零知识执行的方案。ZEXE 是第一个基于账本的方案，在该方案中应用程序可以在不信任、私密和可扩展的情况下执行。

虽然 Aleo 是由 ZEXE 的几位作者创立的，并且研​​究是其计算模型的关键部分，但 Aleo 不仅仅是 ZEXE。它超越了提供用于编写​​私有应用程序的完整堆栈方法。

尽管如此，ZEXE 是 Aleo 中的核心组件。然而，在研究圈之外，它仍然相对不为人知。因此，本系列文章的目的是提供 ZEXE 设计策略背后的额外背景、它支持的功能以及可以使用它构建的真实世界应用程序的描述。

预赛
--

为了欣赏 ZEXE 的设计，首先了解更多关于加密货币如何在幕后工作是至关重要的。因此，首先，我们从一些额外的上下文开始，并解释使 ZEXE 成为可能的底层密码原语。

因此，在下一节中，我们将讨论有关加密货币隐私的一些关键概念，以及作为 ZEXE 和其他隐私模型的关键部分的两个加密原语：承诺方案和零知识证明。

数据隐私和功能隐私
---------

在加密货币中，交易是某种价值交换的记录，以数字资产的形式，从一个钱包地址到另一个钱包地址。例如，比特币交易由三部分组成；输入 ， _输出_ 和发送的 _数量_ ，尽管 _数量_ 实际上反映为 _输出的一部分_。

因此，如果 Bob 向 Alice 发送 50 BTC，那么

1.  _输入_是 Bob 最初从中收到 50 BTC的  旧 BTC 地址、上一笔交易的哈希值以及将这些硬币签名给 Bob 的人的签名
    
2.  _金额_ 是 Bob 发送的 50 BTC 
    
3.  _输出_ 通常包括上述 金额 _、_ Alice 的地址、当前交易的哈希值和 Bob 的签名。
    

任何查看比特币分类账的人都可以看到此交易信息。尽管没有明确记录比特币所有者的姓名，但对于具有适度计算能力的坚定攻击者来说，最终将地址与真实所有者相关联并不难。出于这个原因，比特币是匿名的，实际上并不提供真正的隐私。

为了解决这个问题，像门罗币这样的私人加密货币使用隐形地址。也就是说，对于每笔交易，硬币的发送者 A 为接收者 B 选择一个随机的一次性地址。通过使用隐形地址，只有发送者和接收者才能确定付款的发送地点。这是引入比比特币更好的隐私的一种方式。

以太坊等基于帐户的系统具有更差的隐私属性，因为每个公钥都被重复用作地址。然而，以太坊确实提供了其他隐私方案在很大程度上缺乏的额外可编程性。

承诺计划
----

承诺方案有以下三个步骤：

1.  _密钥生成_：( _pk_ ,  _vk_ )←key。密钥生成算法输出一对密钥，证明者的密钥 _pk_ 和验证者的密钥 _vk_，分别发送给证明者 P 和验证者 V。
    
2.  _承诺阶段_：( _com_ ,  _d_ )←Com( _pk_ ,  _m_ )。Com 算法将证明者的密钥和要提交的消息作为输入。然后它输出承诺 _com_ 以及一个开放值 _d_，仅在验证阶段发送到 V。承诺 _com_ 被发送到 V。
    
3.  _验证阶段_：  _b_ ←Ver( _vk_ ,  _com_ ,  _m_ ,  _d_ )。算法 Ver 将验证密钥 _vk_、承诺 _com_、原始消息 _m_ 和开放值 _d_ 作为输入。它输出一个布尔值 _b_，即 _成功_ 或 _失败_。
    

零知识证明
-----

零知识证明涉及两方，证明者 P 和验证者 V。验证者 V 挑战证明者 P 以解决给定的数学难题。_然后，证明者 P 解决了这个难题，但她没有将解决方案w_发送给 V，而是  创建了一个证明 **π** ，该证明 π 应该让 V 相信她已经正确地解决了这个难题，而没有透露任何关于她的解决方案的信息。

零知识证明的主要目的是使 V 能够轻松确定 P 的证明 **π**的真实性， 从而进行交易。

对于像比特币这样的支付用例，为了在两方之间发生任何交易，发送方需要承诺向接收方支付一定的价值。因此，需要一个承诺方案来做出应该对发送者具有约束力的承诺。但是该方案还需要对接收者隐藏，以便正确地实现零知识。也就是说，除非发送者公开它（即，向接收者发送密钥以显示金额），否则接收者应该无法确定所承诺价值的确切数量。

因此，为了让 Alice 私下向 Bob 发送硬币，她需要做两件事：

*   首先，她使用承诺方案来“加密”她想要发送给 Bob 的硬币的价值。提交的值不仅是隐藏的，而且还绑定到 A。
    
*   其次，爱丽丝创建了一个零知识证明 π，证明爱丽丝拥有她想发送给鲍勃的硬币这一事实，但没有透露任何有关交易的信息。
    

然后 Alice 将她的承诺连同相应的零知识证明 **π**一起发布。

请注意，通过实施如上所述的承诺方案和零知识证明，可以成功隐藏状态转换的输入和输出，但不能隐藏正在执行的转换函数。这实现了数据隐私，因为发送者、接收者和发送的金额都是隐藏的。

在第二部分中，我们将介绍 ZEXE 设计策略，以及该方案如何实现基本的零知识原语以启用强大的新范式：去中心化私有计算。

---

*Originally published on [Moneydao](https://paragraph.com/@moneydao-2/zexe)*
