干货 | 隐密交易的到来:深入 AZTEC 协议

栏目: 编程工具 · 发布时间: 5年前

内容简介:保证交易的私密性是许多金融服务的基本要求,但由于以太坊无法提供这种隐私保护,所以没能出现令人信服的传统金融工具替代品。现在有几个区块链项目,试图利用加密技术来提供隐私服务,但是这些项目能提供的隐私保护对区块链“原生”加密货币的作用十分有限。换句话说,构建在公共区块链协议上的数字资产,仍旧无法得到这类交易私密性保证。比如说,我不能在以太坊上编写出债权不公开的公司债券智能合约。至少到现在为止还做不到。

干货 | 隐密交易的到来:深入 AZTEC 协议

保证交易的私密性是许多金融服务的基本要求,但由于以太坊无法提供这种隐私保护,所以没能出现令人信服的传统金融 工具 替代品。现在有几个区块链项目,试图利用加密技术来提供隐私服务,但是这些项目能提供的隐私保护对区块链“原生”加密货币的作用十分有限。换句话说,构建在公共区块链协议上的数字资产,仍旧无法得到这类交易私密性保证。比如说,我不能在以太坊上编写出债权不公开的公司债券智能合约。

至少到现在为止还做不到。

一个特殊的例子,私密 DAI

喏,让我们接着往下看:

{
    "gamma": "0x20a92d2a4f0dd850314a745719dde20934db69cc8e9b5b84b5819e062d66bb7500",
    "sigma": "0x17d62693c0c9a356e2fd6b0ce877b78c6a1f8a7f195e9db4c0b68e0693d73b3600"
}

DAI 是由 MakerDAO 创造的锚定美元的稳定币,上面这种纠缠在一起的字符,就是 DAI 的样子。不过它看起来有一点奇怪对吧?通常 DAI 会包含一组以太坊地址,及表示该地址持有 DAI 数量的数字;明显上面的不是常规的 DAI 。

如你所见,当我发送 这笔交易 时,我的以太坊地址( zac.creditmint.eth )变成了这笔 DAI 的持有者;但值得注意的是,没有人能够具体知道我拥有多少 DAI。 和其他 DAI 持有者不同,我的 DAI 余额是经过加密的,并以 AZTEC 票据的零知识证明形式展现 。我可以随意地将这些 DAI 发送到不同地址,同时没有人能看到我究竟发出去多少。比如,我在 这笔交易 中发了一些 DAI 给我的同事,如果想搞清楚我发了多少,祝你好运!

这一切都还非常新颖,我非常期待能将这个结果展现给你,以及广大以太坊社群。我们已经开发了将近一年时间,不过还未进行正式的发布,因为我想向大家解释清楚那些特殊的、纠缠在一起的十六进制字符。

这不是一项天马行空的技术,不需要等到遥远的未来才能实现,也不需要修改以太坊协议;这是一项以 已经 在以太坊主网演示的技术,同时 AZTEC 零知识票据也能够加密真正的 DAI 。

关于 AZTEC 私密交易的细节

现在出现两个问题:究竟什么是 AZTEC 协议?它是怎么运作的?关于 AZTEC 是如何运作的,我只能说,你得先了解椭圆曲线加密的核心部分(这是另一篇 blog 的内容,你可以在这篇 文章 中得到详细内容。一句话快速总结 AZTEC 的运作机制:它不是 ZK-SNARK,而是一种使用 Boneh-Boyen 群签名来创建承诺,并在每个承诺中嵌入高可靠性范围证明的代数型零知识证明。)

好,解决了椭圆曲线加密是什么的问题,现在我先解释 AZTEC 协议 是什么 ;交易发送给协议后,会 发生什么 。开始之前,我们先来了解一下“私密化交易( confidential transaction )”到底什么意思。

私密化交易指的是发生在两个及以上对象之间的价值转移,其中转移的 价值 不能被观察者得知。

私密化交易可以有很多种形式,从环签名( ring signature)到 ZK-SNARK 等等。与 ZCash 类似, AZTEC 协议使用加密“票据(note)”及合并-拆分票据的概念

加密数字资产及 AZTEC 票据

AZTEC 协议不会像传统的余额形式那样直接显示出“价值”,不会直接将持有者身份和它们的持有数量映射在一起,而是用“票据 ( notes ) ”的方式来体现。票据包含以下 公开 信息:

  • AZTEC 承诺:一种加过密的表述,代表该票据拥有多少“价值”。
  • 一组持有该票据的以太坊地址。

及以下 非公开 信息:

  • 票据的价值。
  • 票据的 查看密钥( viewing key ;知道查看密钥的人能够解密票据(但不能够花掉票据)。

单个用户能够拥有多个票据,经过 AZTEC 协议确认的数字资产会构成一份票据列表,让智能合约可以恢复这些已经存在而尚未花费的票据的公共信息。

AZTEC 票据如何花费?

AZTEC 票据的持有者能以一种合并-拆分(join-split)私密交易的形式花掉他们的票据。在该交易过程中,持有者会先销毁一些未花费的 AZTEC 票据,同时创建一组新的票据。新旧票据总额必须一致,同时需要附上 公开 承诺(稍后我会做说明,先假设这个公开承诺价值为 0 )。

假设 Alice 有两份 AZTEC 票据,其价值总和为 100 个代币。现在 Alice 想要发给 Bob 20 个代币,她得先创建一个或多个总额为 20 代币的票据,这些票据的持有人是 Bob;接着她得为自己创建一个或多个总和为 80 代币的票据,持有人是 Alice 自己。

然后,Alice 继续创建 AZTEC 零知识证明,以零知识方法证明上述的操作(即,Alice 不用向任何人透露这些票据的真实价值,只证明上述操作关系成立)。紧接着, AZTEC 代币智能合约会验证零知识证明的合法性,并在票据表里销毁 Alice 输入的旧票据,然后生成新的票据输出。

当 Alice 创建属于 Bob 的票据时,她同时会构造票据的“查看密钥”,让 Bob 能够通过非交互式密钥分享协议验证票据的价值。本步骤中,Bob 需要依赖于 Alice 的操作是可信的,而且没有向其他观察者提供能够破译的查看密钥。 这是默认的要求——毕竟如果 Alice 想要交易公开,她可以广播给全世界知道发送给 Bob 的具体金额。

票据的“所有权”该如何定义?

每个私密交易都要求附上数字签名——每张输入的票据都需要持有者的数字签名。签名信息是其零知识证明的哈希值,一旦在票据上签名,即可视作票据持有者同意这笔交易的输出,允许交易进行。

我们如何将价值导入 AZTEC 票据体系?

能够秘密地传递价值固然很好,但还缺乏能够让整个价值(我们用 v 来表示该价值)在 AZTEC 加密系统里流转的方法。这听起来有点学术,它是通过私密交易中的“公共承诺”来完成。假设 AZTEC 代币和某个公开的 ERC 20 代币挂钩,完成 AZTEC 零知识证明需要一个公共承诺值 v != 0 ,为了使等式成立,意味着两个条件要满足:

  1. 如果 v 为负,则输出票据价值比输入票据价值多 -v (输出票据的价值会更大,因为 v 为负值)。
  2. 如果 v 为正,则输入票据价值比输出票据价值多 v

如果 Alice 发出了一笔 v 为负的私密交易,则 AZTEC 代币智能合约会从 Alice 那儿转走 -v 的 ERC 20 代币到自己的合约中。 实际上,在私密票据表中, AZTEC 代币智能合约扮演的角色更像是 ERC 20 代币的保管人。如果这笔转移被拒绝(e.g. Alice 没有足够代币),交易也就流产了。

如果 Alice 发出了一笔 v 为正的私密交易,代表发生了一笔将 AZTEC 票据兑换为 ERC 20 代币的操作。AZTEC 代币智能合约会向 Alice 转移价值为 v 的 ERC 20 代币。

这里做个小提醒——转移的代币数实际上是 v 乘上一个比例因子,因为 AZTEC 代币支持的整数范围小于 ERC 20 支持的范围。目前我们部署在主网的 PoC 协议支持整数 0 ~ 100 万,而 AZTEC 协议完整版能支持约 32 位整数(保守估计)。相比之下,ERC 20 能支持的体量达到 256 位。

比例因子根据 AZTEC 挂钩的 ERC 20 代币而定。我们在 PoC 部署中使用 DAI 代币,AZTEC 票据中的 1 相当于 0.1 DAI。

这么做的成本为何?

AZTEC 协议使用一套特定的承诺机制,能实现高效且大范围的证明。结果表明,通过智能合约进行验证的计算量远小于预期。关于私密交易主要的 gas 支出在于验证 AZTEC 零知识证明时,需要进行椭圆曲线计算。共需要花费 3i + 4j 椭圆曲线标准运算进行证明验证,i 是输入的票据数,j 是输出的票据数。

每个 confidentialTransfer 交易还需要进行单一椭圆曲线双线性对校验。

这里我讲的如此玄乎,是因为要强调这些运算成本将会在为 geth 和 parity 进行协议升级( EIP-1108 )后,大幅降低。目前发布一笔包含 4 个票据的私密交易,大约需要消耗 900,000 gas (这是总的 gas 消耗,包含验证交易加密性的成本);等到 EIP-1108 实施后,费用能降至 200000 - 300000 gas。

从私密交易中能收集哪些信息?

过去十一个月里,我痴迷于 AZTEC 协议,在完全发挥出协议的优势及找到局限之前我不会感到满足。我相信这些超前的工作是非常重要的。在这种形式中,任何将公开转账转为私密交易的操作,都会在加密系统的入口和出口留下一些信息。

如果你将代币加入票据系统,观察者就会知道,输出的票据价值至少是你转换的公共代币价值。

同样的,当赎回价值为 v 的公开代币后,观察者能知道剩余的 AZTEC 票据价值至少会减去价值 v

通过将 AZTEC 代币和公开代币转换作结合,以上问题能得到改善。举例来说,假设 Bob 持有一张价值 100 代币的票据,并想转换成公共代币。这时候,Bob 应该添加一些附加的输入票据和输出票据,即便这些额外的票据价值为 0 也无所谓。 这么做能防止观察者得知 Bob 秘密地转换了多少资产,即使 Bob 已经转换所有资产,也会留下一堆价值为 0 的“烟雾弹”票据

AZTEC 票据的持有者由以太坊地址所定义。表面上来看,票据持有者并非匿名的(e.g. 人们可以看到 我的以太坊地址 持有零知识 DAI 代币);AZTEC 协议中包含一种类似门罗币的隐性地址,这也是个以太坊地址,但只会被使用一次,无法和其他任何地址产生关联性。(e.g. 如果你有 AZTEC 钱包,我可以向你持有的以太坊地址“转账”票据;除了你和我,没有人知道这件事情的发生) 。AZTEC 协议支持隐性地址(这要求特定的钱包来完成;你需要两份公/私钥对,所以常规的以太坊钱包不管用),也支持一般以太坊地址(非匿名的——如果你在这个地址持有票据,所有人都看得到)。

拥有双重公/私钥的用户越多,能提供的隐私保障就越大。举例来说,当我们在主网上进行测试部署,我将 50 DAI 转换成 AZTEC 票据并发送一部分给我同事;这时候很明显的所有输出票据总和就是值 50 DAI,票据没有得到很好的加密保护。现在假设某个人创建了值 1000 DAI 的私密票据,然后我们进行了几次票据的合并及拆分——这样一来,想要搞清楚这些票据究竟值多少 DAI 成为一件不可能的事,只知道价值总和为 1050 DAI。

为了将信息泄露风险降至最低——如果我将 10 DAI 转成单一的 AZTEC 票据,这对隐私保护毫无帮助——创建没有价值的“烟雾弹”票据能很大的提升隐私性——如果你将 10 DAI 转换成票据以供使用,那么你最好同时创建几个不具备价值的票据,来掩饰你实际转换的价值。

如果协议使用者“偷懒”,仍会泄露一定的信息。举例来说,你将 10 DAI 转换成 5个票据,其中 4 个为价值 0 的烟雾弹票据。假如你忘了这几个烟雾弹票据的存在,并在之后的交易中再也不碰它们,对于观察者来说,这几个票据很明显不具备任何价值。因此后续尽可能以合并-拆分交易形式使用这些烟雾弹票据,能够一定程度减少外部观察者获得交易信息的可能。

AZTEC 协议的可信设置

AZTEC 协议高效的原因在于,我们在单个承诺方法中结合了 Boneh-Boyen 群签名和 Pedersen 承诺,以一种高效的方式嵌入承诺。在使用 AZTEC 协议前,要求椭圆曲线数据库先创建好;这个数据库被用来构造无需再次验证的证明。

其实有点像 ZCash ,这种可信设置会生成 “多余的”私钥 ,如果私钥被泄露,就有可能被用来构造双花攻击使得协议失效。

我们该如何解决这个问题呢?我们不指望用户会无条件信任我们,所以我们开发了一款可扩展的多方计算协议,使得任何人都能参与可信设置过程。如果你参与进来,你就可以生成“多余的”私钥的一部分。也就是说, 可信设置私钥 ,只能通过拼凑所有参与者的“多余”私钥部分来获得。 所以,除非离散对数问题被攻破,只要有一位参与者是诚实的,这个方法就绝对安全 (离散对数问题被攻破意味着椭圆曲线加密失效,这时候我们得面临的安全问题远远大于 AZTEC 协议的安全性问题。)

我们会在接下来几个月发布可信设置过程的正式版,并开始招募参与者。这与 ZCash 的 “powers of tau” 协议有些类似,不过 AZTEC 协议不使用 ZK-SNARK ,因此结果差异很大。我们希望可信设置协议易于参与,同时也希望与广大以太坊社群互动,以创建出值得社区信任的可信设置数据库。

我们的 PoC 智能合约使用内置的可信设置,因为实现多方计算可信设置还需要数个月的时间部署。在我们完成上述工作之前,使用 AZTEC 协议的用户得承担一定风险;虽然我们已经清除多余的私钥,但没有办法提供证明我们的确这么做了。

最后一点(啊......),可信设置数据库的大小会随着协议证明范围线性增长,目前 PoC 的数据库只支持 0 ~ 1048575 的整数范围,因为我希望从 github 上下载我们的 PoC 不会成为一件头疼事;完整版会支持更大范围的整数。

为什么 AZTEC 协议如此重要?

我当然会说这很重要,我是你所能知道对这个问题最有主观偏见的人!以下是为什么我认为 AZTEC 协议是规则的开创者:AZTEC协议可以创建通用的私密数字资产。目前我们选择从 DAI 开始,但以后只需单击某个按钮,AZTEC 协议就可以应用于任何 ERC 20 代币;它还可以构建无需任何 ERC 20 代币作为等价物的私密资产,不需要额外的加密体系,也无需额外的可信设置过程。这也是史无前例的, AZTEC 协议能够在不牺牲隐私的情况下,享有公共区块链的不可逆和去中心化优势

AZTEC 零知识证明在扩展性方面也非常高效,完全在硬件钱包的承载能力范围内。能够直接从硬件钱包发布私密交易,并且从不暴露敏感私钥,这真的令人非常兴奋!

AZTEC 协议的未来?

与我们的 智能合约验证和技术白皮书 内容最立即相关的,是发布 AZTEC 证明构造 API。同时我们还有几个关于 AZTEC 协议的扩展工作要做,完整的未来愿景会在 2019 年上半年发布。其中包含几个重要的目标:

  1. 私密的去中心化交易所——使用者能够在完全保密的情况下交易不同的 AZTEC 资产,任何交易数量和价格都无法从交易过程中获取。去中心化交易所使用了 中继者模式( relayer pattern ) 和预想的 AZTEC DeX 零知识证明实现上述功能(实际上有三个部分,在 DeX 白皮书完成后我会深入描述)。
  2. 私密的加权投票——在很大范围的金融应用中,保障投票者隐私的机制至关重要,而 AZTEC 协议的有效范围证明使其成为可能。
  3. 匿名身份共享方案——在许多进行承诺和 KYC 的场景下,无需透露身份便能证明你属于某个团体,有很重要的应用价值; AZTEC 代币标准能够支持这样的身份系统。

结合以上扩展功能, AZTEC 协议能提供开发者需要的工具来创建下一代去中心化金融服务,重新构建具有绝对隐私且私密化治理的数字资产。

为了实现这个愿景,我们将开源我们的技术——如果你想要在以太坊上创建具备私密性的资产,AZTEC 协议提供智能合约、资源、工具,使得一切再简单不过了。

如果你有兴趣一同构建 AZTEC 协议,请联系我们 hello@aztecprotocol.com 。我们同时也在持续招进行聘,如果你是个有想法的开发者,并希望能和我们为下一代去中心化金融服务做出贡献,请联系我们。

耶!

原文链接: https://medium.com/aztec-protocol/confidential-transactions-have-arrived-a-dive-into-the-aztec-protocol-a1794c00c009

作者:zac

翻译&校对:IAN LIU & Elisa

本文由作者授权 EthFans 翻译及再出版。


以上所述就是小编给大家介绍的《干货 | 隐密交易的到来:深入 AZTEC 协议》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

ACM国际大学生程序设计竞赛题解

ACM国际大学生程序设计竞赛题解

赵端阳//袁鹤 / 电子工业 / 2010-6 / 38.00元

《ACM国际大学生程序设计竞赛题解(1)》可以作为高等院校有关专业的本科和大专学生参加国际大学生程序设计竞赛的辅导教材,或者作为高等院校数据结构、C/C++程序设计或算法设计与分析等相关课程的教学参考书。随着各大专院校参加ACM/ICPC热情的高涨,迫切需要有关介绍ACM国际大学生程序设计竞赛题解的书籍。《ACM国际大学生程序设计竞赛题解(1)》根据浙江大学在线题库的前80题,进行了解答(个别特别......一起来看看 《ACM国际大学生程序设计竞赛题解》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具