编者按:本文来自以太坊爱好者,作者:zac,翻译&校对:IANLIU&Elisa,来源:
medium
,Odaily星球日报经授权转载。
!webp\"data-img-size-val=\"1000,363\"\u002F\\>
保证交易的私密性是许多金融服务的基本要求,但由于以太坊无法提供这种隐私保护,所以没能出现令人信服的传统金融工具替代品。现在有几个区块链项目,试图利用加密技术来提供隐私服务,但是这些项目能提供的隐私保护对区块链“原生”加密货币的作用十分有限。换句话说,构建在公共区块链协议上的数字资产,仍旧无法得到这类交易私密性保证。比如说,我不能在以太坊上编写出债权不公开的公司债券智能合约。
至少到现在为止还做不到。
一个特殊的例子,私密DAI
喏,让我们接着往下看:
DAI是由MakerDAO创造的锚定美元的稳定币,上面这种纠缠在一起的字符,就是DAI的样子。不过它看起来有一点奇怪对吧?通常DAI会包含一组以太坊地址,及表示该地址持有DAI数量的数字;明显上面的不是常规的DAI。
如你所见,当我发送这笔交易时,我的以太坊地址变成了这笔DAI的持有者;但值得注意的是,没有人能够具体知道我拥有多少DAI。和其他DAI持有者不同,我的DAI余额是经过加密的,并以AZTEC票据的零知识证明形式展现。我可以随意地将这些DAI发送到不同地址,同时没有人能看到我究竟发出去多少。比如,我在这笔交易中发了一些DAI给我的同事,如果想搞清楚我发了多少,祝你好运!
这一切都还非常新颖,我非常期待能将这个结果展现给你,以及广大以太坊社群。我们已经开发了将近一年时间,不过还未进行正式的发布,因为我想向大家解释清楚那些特殊的、纠缠在一起的十六进制字符。
这不是一项天马行空的技术,不需要等到遥远的未来才能实现,也不需要修改以太坊协议;这是一项以已经在以太坊主网演示的技术,同时AZTEC零知识票据也能够加密真正的DAI。
关于AZTEC私密交易的细节
现在出现两个问题:究竟什么是AZTEC协议?它是怎么运作的?关于AZTEC是如何运作的,我只能说,你得先了解椭圆曲线加密的核心部分
好,解决了椭圆曲线加密是什么的问题,现在我先解释AZTEC协议是什么;交易发送给协议后,会发生什么。开始之前,我们先来了解一下“私密化交易”到底什么意思。
私密化交易指的是发生在两个及以上对象之间的价值转移,其中转移的价值不能被观察者得知。
私密化交易可以有很多种形式,从环签名到ZK-SNARK等等。与ZCash类似,AZTEC协议使用加密“票据”及合并-拆分票据的概念。
加密数字资产及AZTEC票据
AZTEC协议不会像传统的余额形式那样直接显示出“价值”,不会直接将持有者身份和它们的持有数量映射在一起,而是用“票据”的方式来体现。
票据包含以下公开信息:
AZTEC承诺:一种加过密的表述,代表该票据拥有多少“价值”。
一组持有该票据的以太坊地址。
及以下非公开信息:
票据的价值。
票据的查看密钥;知道查看密钥的人能够解密票据。
单个用户能够拥有多个票据,经过AZTEC协议确认的数字资产会构成一份票据列表,让智能合约可以恢复这些已经存在而尚未花费的票据的公共信息。
AZTEC票据如何花费?
AZTEC票据的持有者能以一种合并-拆分私密交易的形式花掉他们的票据。在该交易过程中,持有者会先销毁一些未花费的AZTEC票据,同时创建一组新的票据。新旧票据总额必须一致,同时需要附上公开承诺。
假设Alice有两份AZTEC票据,其价值总和为100个代币。现在Alice想要发给Bob20个代币,她得先创建一个或多个总额为20代币的票据,这些票据的持有人是Bob;接着她得为自己创建一个或多个总和为80代币的票据,持有人是Alice自己。
然后,Alice继续创建AZTEC零知识证明,以零知识方法证明上述的操作。紧接着,AZTEC代币智能合约会验证零知识证明的合法性,并在票据表里销毁Alice输入的旧票据,然后生成新的票据输出。
当Alice创建属于Bob的票据时,她同时会构造票据的“查看密钥”,让Bob能够通过非交互式密钥分享协议验证票据的价值。本步骤中,Bob需要依赖于Alice的操作是可信的,而且没有向其他观察者提供能够破译的查看密钥。这是默认的要求——毕竟如果Alice想要交易公开,她可以广播给全世界知道发送给Bob的具体金额。
票据的“所有权”该如何定义?
每个私密交易都要求附上数字签名——每张输入的票据都需要持有者的数字签名。签名信息是其零知识证明的哈希值,一旦在票据上签名,即可视作票据持有者同意这笔交易的输出,允许交易进行。
我们如何将价值导入AZTEC票据体系?
能够秘密地传递价值固然很好,但还缺乏能够让整个价值在AZTEC加密系统里流转的方法。这听起来有点学术,它是通过私密交易中的“公共承诺”来完成。假设AZTEC代币和某个公开的ERC20代币挂钩,完成AZTEC零知识证明需要一个公共承诺值v!=0,为了使等式成立,意味着两个条件要满足:
如果v为负,则输出票据价值比输入票据价值多-v。
如果v为正,则输入票据价值比输出票据价值多v
如果Alice发出了一笔v为负的私密交易,则AZTEC代币智能合约会从Alice那儿转走-v的ERC20代币到自己的合约中。实际上,在私密票据表中,AZTEC代币智能合约扮演的角色更像是ERC20代币的保管人。如果这笔转移被拒绝,交易也就流产了。
如果Alice发出了一笔v为正的私密交易,代表发生了一笔将AZTEC票据兑换为ERC20代币的操作。AZTEC代币智能合约会向Alice转移价值为v的ERC20代币。
这里做个小提醒——转移的代币数实际上是v乘上一个比例因子,因为AZTEC代币支持的整数范围小于ERC20支持的范围。目前我们部署在主网的PoC协议支持整数0~100万,而AZTEC协议完整版能支持约32位整数。相比之下,ERC20能支持的体量达到256位。
比例因子根据AZTEC挂钩的ERC20代币而定。我们在PoC部署中使用DAI代币,AZTEC票据中的1相当于0.1DAI。
这么做的成本为何?
AZTEC协议使用一套特定的承诺机制,能实现高效且大范围的证明。结果表明,通过智能合约进行验证的计算量远小于预期。关于私密交易主要的gas支出在于验证AZTEC零知识证明时,需要进行椭圆曲线计算。共需要花费3i+4j椭圆曲线标准运算进行证明验证,i是输入的票据数,j是输出的票据数。
每个confidentialTransfer交易还需要进行单一椭圆曲线双线性对校验。
这里我讲的如此玄乎,是因为要强调这些运算成本将会在为geth和parity进行协议升级后,大幅降低。目前发布一笔包含4个票据的私密交易,大约需要消耗900,000gas;等到EIP-1108实施后,费用能降至200000-300000gas。
从私密交易中能收集哪些信息?
过去十一个月里,我痴迷于AZTEC协议,在完全发挥出协议的优势及找到局限之前我不会感到满足。我相信这些超前的工作是非常重要的。在这种形式中,任何将公开转账转为私密交易的操作,都会在加密系统的入口和出口留下一些信息。
如果你将代币加入票据系统,观察者就会知道,输出的票据价值至少是你转换的公共代币价值。
同样的,当赎回价值为v的公开代币后,观察者能知道剩余的AZTEC票据价值至少会减去价值v。
通过将AZTEC代币和公开代币转换作结合,以上问题能得到改善。举例来说,假设Bob持有一张价值100代币的票据,并想转换成公共代币。这时候,Bob应该添加一些附加的输入票据和输出票据,即便这些额外的票据价值为0也无所谓。这么做能防止观察者得知Bob秘密地转换了多少资产,即使Bob已经转换所有资产,也会留下一堆价值为0的“烟雾弹”票据。
AZTEC票据的持有者由以太坊地址所定义。表面上来看,票据持有者并非匿名的;AZTEC协议中包含一种类似门罗币的隐性地址,这也是个以太坊地址,但只会被使用一次,无法和其他任何地址产生关联性。(e.g.如果你有AZTEC钱包,我可以向你持有的以太坊地址“转账”票据;除了你和我,没有人知道这件事情的发生)。
AZTEC协议支持隐性地址,也支持一般以太坊地址。
拥有双重公\u002F私钥的用户越多,能提供的隐私保障就越大。举例来说,当我们在主网上进行测试部署,我将50DAI转换成AZTEC票据并发送一部分给我同事;这时候很明显的所有输出票据总和就是值50DAI,票据没有得到很好的加密保护。现在假设某个人创建了值1000DAI的私密票据,然后我们进行了几次票据的合并及拆分——这样一来,想要搞清楚这些票据究竟值多少DAI成为一件不可能的事,只知道价值总和为1050DAI。
为了将信息泄露风险降至最低——如果我将10DAI转成单一的AZTEC票据,这对隐私保护毫无帮助——创建没有价值的“烟雾弹”票据能很大的提升隐私性——如果你将10DAI转换成票据以供使用,那么你最好同时创建几个不具备价值的票据,来掩饰你实际转换的价值。
如果协议使用者“偷懒”,仍会泄露一定的信息。举例来说,你将10DAI转换成5个票据,其中4个为价值0的烟雾弹票据。假如你忘了这几个烟雾弹票据的存在,并在之后的交易中再也不碰它们,对于观察者来说,这几个票据很明显不具备任何价值。因此后续尽可能以合并-拆分交易形式使用这些烟雾弹票据,能够一定程度减少外部观察者获得交易信息的可能。
AZTEC协议的可信设置
AZTEC协议高效的原因在于,我们在单个承诺方法中结合了Boneh-Boyen群签名和Pedersen承诺,以一种高效的方式嵌入承诺。在使用AZTEC协议前,要求椭圆曲线数据库先创建好;这个数据库被用来构造无需再次验证的证明。
其实有点像ZCash,这种可信设置会生成“多余的”私钥,如果私钥被泄露,就有可能被用来构造双花攻击使得协议失效。
我们该如何解决这个问题呢?我们不指望用户会无条件信任我们,所以我们开发了一款可扩展的多方计算协议,使得任何人都能参与可信设置过程。如果你参与进来,你就可以生成“多余的”私钥的一部分。也就是说,可信设置私钥,只能通过拼凑所有参与者的“多余”私钥部分来获得。所以,除非离散对数问题被攻破,只要有一位参与者是诚实的,这个方法就绝对安全
我们会在接下来几个月发布可信设置过程的正式版,并开始招募参与者。这与ZCash的“powersoftau”协议有些类似,不过AZTEC协议不使用ZK-SNARK,因此结果差异很大。我们希望可信设置协议易于参与,同时也希望与广大以太坊社群互动,以创建出值得社区信任的可信设置数据库。
我们的PoC智能合约使用内置的可信设置,因为实现多方计算可信设置还需要数个月的时间部署。在我们完成上述工作之前,使用AZTEC协议的用户得承担一定风险;虽然我们已经清除多余的私钥,但没有办法提供证明我们的确这么做了。
最后一点,可信设置数据库的大小会随着协议证明范围线性增长,目前PoC的数据库只支持0~1048575的整数范围,因为我希望从github上下载我们的PoC不会成为一件头疼事;完整版会支持更大范围的整数。
为什么AZTEC协议如此重要?
我当然会说这很重要,我是你所能知道对这个问题最有主观偏见的人!以下是为什么我认为AZTEC协议是规则的开创者:AZTEC协议可以创建通用的私密数字资产。目前我们选择从DAI开始,但以后只需单击某个按钮,AZTEC协议就可以应用于任何ERC20代币;它还可以构建无需任何ERC20代币作为等价物的私密资产,不需要额外的加密体系,也无需额外的可信设置过程。这也是史无前例的,AZTEC协议能够在不牺牲隐私的情况下,享有公共区块链的不可逆和去中心化优势。
AZTEC零知识证明在扩展性方面也非常高效,完全在硬件钱包的承载能力范围内。能够直接从硬件钱包发布私密交易,并且从不暴露敏感私钥,这真的令人非常兴奋!
AZTEC协议的未来?
与我们的智能合约验证和技术白皮书内容最立即相关的,是发布AZTEC证明构造API。同时我们还有几个关于AZTEC协议的扩展工作要做,完整的未来愿景会在2019年上半年发布。其中包含几个重要的目标:
私密的去中心化交易所——使用者能够在完全保密的情况下交易不同的AZTEC资产,任何交易数量和价格都无法从交易过程中获取。去中心化交易所使用了中继者模式和预想的AZTECDeX零知识证明实现上述功能。
私密的加权投票——在很大范围的金融应用中,保障投票者隐私的机制至关重要,而AZTEC协议的有效范围证明使其成为可能。
匿名身份共享方案——在许多进行承诺和KYC的场景下,无需透露身份便能证明你属于某个团体,有很重要的应用价值;AZTEC代币标准能够支持这样的身份系统。
结合以上扩展功能,AZTEC协议能提供开发者需要的工具来创建下一代去中心化金融服务,重新构建具有绝对隐私且私密化治理的数字资产。
为了实现这个愿景,我们将开源我们的技术——如果你想要在以太坊上创建具备私密性的资产,AZTEC协议提供智能合约、资源、工具,使得一切再简单不过了。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。