用户登陆
正在加载
走进以太坊上的隐私层:AZTEC Protocol
互联网 · 2019-05-27 17:53:27

Muticoin 合伙人 Tushar Jain 在专访《Multicoin 管理合伙人 Tushar Jain 畅谈投资哲学与以太坊展望》中,被问及以太坊中哪个项目令他印象深刻时,毫不犹豫地提到了 AZTEC Protocol。这是一个建立在以太坊上的隐私层,通过零知识证明技术提高以太坊交易隐私性。AZTEC 于 去年 11 月 由 ConsenSys Labs 领投完成 210 万美元的种子轮融资;今年 3 月 摩根大通正测试将 AZTEC 引入其开发的企业级区块链平台 Quorum;今年 4 月,基于 AZTEC 构建的匿名投票去中心化自治组织 ZKDAO,在 ETHParis 黑客马拉松上获得亚军。取得不凡成绩的背后,AZTEC 究竟又是如何运作的?AZTEC Protocol 高级工程师 Leila Wang 亲自带你解读。

原文标题:《AZTEC 协定简介》
文章来源:Medium
作者:Leila Wang,AZTEC Protocol 高级工程师

0 (1).jpegLeila Wang,AZTEC Protocol 高级工程师

1 为什么要用 AZTEC

现在大部分的区块链应用都跟有价资产有关,服务本身也许仍以网站或 App 的形式出现,但会额外使用智能合约来管理及保护使用者的资产。例如:一个投资管理公司将用户的债券转为等值货币纪录在以太坊上,并撰写智能合约在一定条件下由发行人直接转给投资人利息,中间并不透过该公司。所以即使公司倒闭,双方仍可以继续在区块链上履行彼此的权利义务。区块链的本质确保了在链上的资料不会被窜改,且用户资料不会完全被该公司所拥有。但这也衍生了另一个问题 —— 隐私。

区块链上每笔交易的输入输出资料都是公开的。

以上面的例子来说,债券的价值及票面利率等,都必须公开于链上才能保障双方的交易。然而在真实世界中,这些资料都是被投资公司所保管的

AZTEC 协定就是用来确保在区块链上的资料仍能兼顾保密性。它运用一系列零知识证明 (zero-knowledge proofs) 及同态加密 (homomorphic encryption) 来处理数值,并可对这些加密资料做特定逻辑运算。于是我们可以存取这些加密讯息至区块链,对其做运算验证,而不会透露出它们真正的值。

2 AZTEC 运作原理

传统的零知识验证系统如果跑在区块链上将会花费相当可观的燃料费 (gas),且在链上的验证会很耗时,不同资产间也无法互相转换。当中最耗费的运算是范围证明 (range proof)。范围证明可以验证一个加密的值是否落在特定范围内,这对处理椭圆曲线上两点的相加特别重要。在椭圆曲线上,负值是极大的正值,于是需要范围证明来规范最大值。AZTEC 下的信赖建置系统 (trusted setup) 将以相对传统系统极小的花费来执行范围证明运算。

一旦确保了加密资料在可接受范围内,我们即可用椭圆曲线的点相加定理来做逻辑验证。基于同态加密原则,当我们对两个密文做处理,得到的结果也会是密文。于是我们可以安心的在区块链上验证加密资料,而不会暴露真实的值。

综合以上两项基础,我们可以衍生出一系列可运用在区块链上的逻辑陈述。如果想知道 AZTEC 协定下详尽的证明,请参考 AZTEC 白皮书。

3 AZTEC 的核心概念

AZTEC 遵照的 UTXO 模型类似于比特币的模型。AZTEC 票据 (note) 是协定里运算的基础单元。票据的值已被加密。每个票据的状态都纪录在票据登记所 (note registry) 里。

使用者的 AZTEC 资产是一个票据登记所里所有被该使用者位址所拥有的有效票据的和。

走进以太坊上的隐私层:AZTEC ProtocolAZTEC 的 UTXO 模型

公有链 (public blockchain) 有两个主要优势:独立不受任何单位控制的经济体系,以及资产的互操作性 (interoperability,从某个产品得到的收益可以用来支付另一个服务的费用)。然而当今大部分的零知识系统都缺乏互操作性。他们运作在孤立的圈子里,使得不同数位资产间难以流通。AZTEC 也解决了这项问题。

要达到互操作性,所有 AZTEC 资产将共享单一信赖建置系统,他们的状态也将由一个智能合约统一管理,此合约称为 ACE (AZTEC Cryptography Engine)。ACE 有两个主要功能:利用指派的合约来执行证明,并于验证通过后,更新票据登记所里相关票据的状态。

走进以太坊上的隐私层:AZTEC ProtocolAZTEC 架构

AZTEC 协定设计了一套开发模组来帮助开发者打造兼顾资讯保密的去中心化应用。目前 AZTEC 提供了七个工具组:

Join Split (转帐)

Join Split 证明能将一个或多个票据结合或拆解成一个或多个不同的票据,并保证输入的票据实值总和等于输出的和。

这个证明也可用来与 ERC20 互动:把公开的 ERC20 值转换成 AZTEC 票据,或是将 AZTEC 票据转回 ERC20。

Bilateral Swap (交换)

Bilateral Swap 证明能让使用者互换票据。例如用来交换代表两种资产的票据:法定货币换贷款 / 债券 / 抵押品。此证明验证甲方提供的票据等于乙方要求的票据,而乙方提供的票据等于甲方要求的票据。

Dividend

Dividend 能验证输入票据的值等于输出票据的值乘上一个公开值。此证明能用来验证收到的利息是否正确。

Mint

Mint 证明让可信的使用者能增加票据的供给。例如在收到转入帐户的稳定货币后产生一个等值的 AZTEC 票据。

Burn

Burn 证明让可信的使用者销毁票据。例如在转出稳定货币给他人后销毁一个等值的 AZTEC 票据。

Private Range

Private Range 能验证一个票据的值是否大于另一个票据的值。此证明可用来保证资产小于规范。

Public Range

Public Range 能验证一个票据的值是否大于另一个公开的整数。此证明可用来保证资产小于规范。

4 隐私、匿名、与保密

这些名词在零知识系统里很常被提到。接下来我们将解释他们之间的差异以及以 AZTEC 实作各项的可能性。

隐私 (privacy):交易的所有资讯都不被第三方得知。

匿名 (anonymity):交易的输入与输出资讯都是公开的,但保护交易的来源与去向以防透露出交易双方的身分。

保密 (confidentiality):隐藏交易的输入与输出资讯,但交易双方的身分则是公开的。

AZTEC 提供交易的保密性。透过协定加密输入输出资料,将使得第三方无法解密公开于链上的资讯。

如传递一般的以太坊位址至 AZTEC 工具组,产生的证明是无法自动达到匿名的。然而匿名仍是可以与 AZTEC 并行。协定里的验证并不要求票据的收送方为交易的发送方。于是我们可以透过第三方代为执行交易进而隐藏使用者的身分。未来版本的 AZTEC 将实作去中心化的代转交易并隐藏燃料费用,届时使用协定将可以做到完全的隐私。

5 建立保密资产

EIP 1724 旨在标准化一个介面,以与 UTXO 模型为底的保密资产互动。AZTEC 的 NPM 套件 @aztec/protocol 中参照了 EIP 1724 对资产型态的定义:

走进以太坊上的隐私层:AZTEC ProtocolEIP 1724 ZkAsset 标准

接下来让我们看一个简单的例子:

假设一个 dApp 需要做逻辑检查来确保交易方的资产在交易后会少于规范的最大值。

这个检查在一般的 dApp 里可以简单实作。合约将检查现有资产 assetBalance[buyer] 加上预计收到的款项 tradeNotional 小于规范的最大值 regulatoryMax。

走进以太坊上的隐私层:AZTEC Protocol

在资讯需被保密的情况下,同样的逻辑可以使用 AZTEC 协定达成。差别在于所有参数将被加密成 AZTEC 票据,并建构一个证明,此证明再交由 ACE 验证。

这个例子将使用 Private Range 证明:

走进以太坊上的隐私层:AZTEC Protocol

以上证明宣告 comparisonNote 的值少于 originalNote。接下来再将产生的 proofData 送至合约上由 ACE 验证:

走进以太坊上的隐私层:AZTEC Protocol

AZTEC 的设计让使用者可以运用这些逻辑检查来打造一个复杂的去中心化加密金融应用。

来源链接:medium.com

免责声明:
本网站所提供的所有信息仅供参考,不构成任何投资建议。用户在使用本网站的信息时应自行判断和承担风险。币界网不对用户因使用本网站信息而导致的任何损失负责。用户在进行任何投资活动前应自行进行调查和研究,并谨慎决策。币界网不对用户基于本网站信息做出的任何投资决策负责。用户在本网站发布的任何内容均由其个人负责,与币界网无关。
免责声明:本网站、超链接、相关应用程序、论坛、博客等媒体账户以及其他平台和用户发布的所有内容均来源于第三方平台及平台用户。币界网对于网站及其内容不作任何类型的保证,网站所有区块链相关数据以及其他内容资料仅供用户学习及研究之用,不构成任何投资、法律等其他领域的建议和依据。币界网用户以及其他第三方平台在本网站发布的任何内容均由其个人负责,与币界网无关。币界网不对任何因使用本网站信息而导致的任何损失负责。您需谨慎使用相关数据及内容,并自行承担所带来的一切风险。强烈建议您独自对内容进行研究、审查、分析和验证。
s_logo
App内打开