共计 5169 个字符,预计需要花费 13 分钟才能阅读完成。
【摘要】零常识证实技术不论利用于金融还是其余畛域,都能够对隐衷爱护,性能晋升,或者安全性等场景带来很多帮忙。本文通过介绍华为如何在同态加密及零常识证实框架的集成介绍来介绍了一些对金融畛域交易隐衷爱护的思路,通过代码结和利用场景形容了 zksnark 如何集成到现有联盟链体系爱护交易隐衷。以及目前零常识证实畛域利用的技术挑战,华为是通过什么样的技术解决以后的挑战问题的,并提出对将来区块链的隐衷爱护思路。什么是零常识证实?证实者在不泄露任何无效常识的状况下,验证者能够验证某个论断是正确的。图 1 给出一个乏味的例子,Alice 把本人的签名的信封放到一个保险箱中,Bob 说他晓得这个保险箱的明码,Alice 让 Bob 证实给她看。Bob 关上保险箱,把信封拿进去给 Alice。Alice 验证信封上的签名,确认了 Bob 的确晓得这个明码。这个例子就是 Bob 没有通知 Alice 明码却证实本人晓得明码的的过程很好的解释了零常识证实的概念。基于非对称加密和数字签名的证书认证过程,其实也是一个零常识证实的过程,验证者并不需要通晓 CA 证书,就能够验证对方是由 CA 签发的下一级证书。零常识证实技术不论利用于金融还是其余畛域,都能够对隐衷爱护,性能晋升,或者安全性等场景带来很多帮忙。上面,次要从隐衷维度来分享华为零常识证实相干技术。
图 1 零常识证实零常识证实利用于同态加密爱护交易隐衷,使能金融业务 目前金融转账交易场景中对于隐衷爱护曾经越来越器重,隐衷也成为区块链急需解决的一个重要问题。那基于如下问题, A 向 B 转账 10 元,须要区块链节点记账,然而不想让区块链节点晓得交易金额以及最新余额,也是金融场景中一个十分常见的问题。
图 2 同态加密 基于这种场景如何解决区块链技术利用于金融的隐衷和可用性?华为目前引入同态加密 (解决隐衷问题)。同态加密(英語:Homomorphic encryption)是一种加密模式,它容许人们对密文进行特定模式的代数运算失去依然是加密的后果,将其解密所失去的后果与对明文进行同样的运算后果一样。换言之,这项技术令人们能够在加密的数据中进行诸如检索、比拟等操作,得出正确的后果,而在整个处理过程中无需对数据进行解密。在此基础上翻新式提出了同态加密范畴证实 (一种针对数字的零常识证实技术,在不泄露具体数字值的状况下,取得数字的范畴,从而验证数字所代表的交易的有效性)。基于集成到区块链零碎中的同态加密库以及批改同态加密库实现的零常识证实能力实现了隐衷转账的能力,一个密文和另一个密文相加或相乘实现转账中的密文交易,零常识证实在整个的计算过程中不裸露任一方的信息证实对方能够实现转账这一流程,在不泄露具体数字的状况下失去数字的范畴。从而验证数字所代表交易的有效性。应用同态加密库的 上面咱们看一下零常识证实在代码中是如何利用的,同态加密链代码 图 4 是同态加密外围的 transfer 链代码,在这个办法中首先通过 getstate 获取 A 和 B 两个账户的以后余额,而后最重要的一步,是验证他的余额,在办法 validatetxinfo 中会基于范畴 / 等式证实验证交易数据的合规性,基于同态加密算法计算交易后的账户余额,最初更新交易后 A 账户和 B 账户的余额。同态加密的这一步中,利用了零常识证实的相干的技术和能力来促成同态加密更加高效和平安。基于交互式证实和非交互式证实
图 5 交互式证实 零常识证实又分为交互式证实和非交互式证实,有两个乏味的例子很好的解释了这个概念。如上图 5 所示,女子向男子宣称有 CD 处的钥匙,男子不置信说“你拿进去给我看啊”,女子想“你让我拿我就拿多没面子啊”,女子说”这样吧,按上面步骤玩个游戏”1. 男子站在 A 点 2. 女子从 B 点走到 C 点或者 D 点 3. 女子从 B 点隐没后,男子从 A 点走到 B 点 4. 男子喊话“从右边进去”,或者“从左边进去”5. 女子依照男子的要求从对应一侧走出男子说“你必定舞弊,方才我喊右边进去,你刚好就是从右边进去的”,女子说:“你回到 A 点,咱们再来一遍”如果每次都胜利,阐明 B 的确有 CD 处的钥匙,该证实是须要 A,B 不停的交互。非交互式零常识(NizK)证实计划由算法设置、证实和验证定义,具体来说,咱们有 params=Setup(),其中输出是平安参数,输入是 ZKP 算法零碎的参数。证实语法由证实 = 证实(x,w)给出。该算法接管某些 NP 语言 L 的实例 x 和见证 w 作为输出,并输入零常识证实。验证算法接管证实作为输出,并输入位 b,如果验证者承受证实,则该位等于 1。艰深一点就比如说我有一个机密,我不想通知他人,然而我又得让他人置信。我是晓得这个机密的,相似于这种,然而咱们为什么须要有这种非交互式呢?因为交互式证实的其实只对原始的验证者无效,其余的任何人都不可能信赖这个证实。这种场景下呢,就会导致这个验证者能够和这个证实人串通,证实人能够伪造证实。验证者也能够用这种形式做一些伪造。因而,验证者必须保留一些数据,直到相干的证实被验证结束。这样就会造成一些机密参数泄露的这种危险。这种交互式证实也有它的用途,就比如说一个证实人只想让一个特定的验证者来去验证,然而这个证证实人和验证者必须放弃在线,并且去对每一个验证者执行同样的计算。什么是 zk-SNARK 是 Zero-knowledge succinct non-interactive arguments of knowledge 的缩写,他的意思是:zero knowledge:零常识,即在证实的过程中不走漏任何隐衷数据:succinct:简洁的,次要是指验证过程不波及大量数据传输以及验证算 法简略;non-interactive:无交互。证实者与验证者之间不须要交互即可实现证 明,交互的零常识证实要求每个验证者都要向证实者发送数据来实现证实,而无交互的零常识证实,证实者只须要计算一次产生一个 proof,所有的验 证者都能够验证这个 proof。zk-SNARK 是证实某个申明是真却不泄露对于该申明的隐衷信息的一 个很有创新性的算法,他能够证实某人晓得某个机密却不会泄露对于这个 机密的任何信息。这个算法能够解决什么问题呢?它是对所有零常识证实问题的通用解决办法,由加密数字货币 zcash 首次应用并开源。zk-SNARK 的长处:1. 通用库,能够解很多零常识证实问题 2. 验证证实性能较高(300tps)zk-SNARK 的有余:1. 底层模型不容易了解,用户须要依据具体的零常识证实问题,在下层构建本人的业务模型,这块开发的工作量较大。2. 生成每笔交易时延较长(57s)利用场景 ZKP 的利用场景包含匿名可验证投票、数字资产平安替换、平安近程生物辨认认证和平安拍卖,具体如下。匿名可核查投票:投票是保障一个国家或控股公司专制的重要组成部分。然而,选民的隐衷可能在投票过程中被泄露。此外,投票后果很难失去平安的核实。ZKP 是施行匿名可核查投票的一种可用办法。依据 ZKP 的应用,符合条件的选民能够在不泄露身份的状况下投票表决显示他们的权力。此外,ZKP 容许符合条件的选民要求提供可核查的证据,证实他们的选票蕴含在负责报告投票后果的机构的最终计票中。数字资产的平安替换:数字资产是二进制数据的汇合,它们是惟一可辨认和有价值的。如果两个用户心愿替换其数字资产,则用户的隐衷,包含身份和替换数字资产的内容,可能会在替换过程中泄露。依据 ZKP 的应用,数字资产能够在不泄露用户隐衷的状况下替换。此外,ZKP 生成了可验证的证据,其中蕴含数字资产替换的过程。平安近程生物辨认身份验证:近程生物辨认身份验证是一种可用于通过应用指纹、面部图像、虹膜或血管模式等生物识别模式辨认用户拜访权限的办法。然而,在施行近程生物辨认认证时,用户的生物识别模式可能会泄露给不受信赖的第三方。应用 ZKP 能够解决这个问题。此外,ZKP 生成还提供了可核查的证据,其中包含辨认用户拜访权限的过程。平安拍卖:政府拍卖是政府从多个供应商中抉择最低出价的拍卖,这些供应商以竞争性形式销售其商品和服务。本次拍卖包含两个阶段。在第一阶段,多个供应商招标,但公众不晓得。在第二阶段,这些招标是凋谢的。政府抉择中标供应商,后者出价最低。然而,中标供应商的抉择可能会泄露其余中标供应商的招标和身份。ZKP 能够解决这个问题。ZKP 为每个输标供应商生成可核查的证据。该证实证实输标供应商的招标与中标供应商的招标之间的差额是正的。zk-snark 零常识证实是指一方(证实者)向另 一方(验证者)证实一个陈说是正确的,而无需走漏除该陈说正确以外的任何信 息,实用于解决 任 何 NP 问题。而区块 链 恰好能够形象成多方验证交易是否无效(NP 问题)的平台,因而,两者是人造相 适 应的。将零常识证实利用到区块 链中 须要思考的 技 术 挑战分为两大类:一类 是实用于隐衷爱护的区块链架构设计方 案,包含隐秘交易所花资产存在性证实、匿 名资产双花问题、匿名资产破费与转移、隐 秘交易不可辨别等技术挑战;另一类是零 常识证实技 术 自身带来的 挑战,包含 参 数 初始化阶段、算法 性能以及安 全问题 等技术挑战。华为集成了 zksnark 架构到区块链零碎中来解决下面的挑战。咱们晓得有多种办法能够为区块链启用 zkSNark。这些都升高了配对函数和椭圆曲线操作的实际成本。1. 进步合约虚拟机的性能相较第二种更难实现。能够在合约虚拟机中增加性能和限度,这将容许更好的实时编译和解释,而无需在现有实现中进行太多必要的更改。上面的转账场景就是基于此种计划的实现。2. 仅进步某些配对函数和椭圆曲线乘法的在合约虚拟机的性能通过强制所有区块链客户端实现特定的配对函数和在特定椭圆曲线上的乘法作为所谓的预编译契约来实现。益处是,这可能更容易和更快地实现。另一方面,毛病是咱们固定在肯定的配对函数和肯定的椭圆曲线上。区块链的任何新客户端都必须从新施行这些预编译的合同。此外,如果有人找到更好的 zkSNark、更好的配对函数或更好的椭圆曲线,或者如果在椭圆曲线、配对函数或 zkSNark 中发现缺点,必须增加新的预编译合同。转账利用
图 6 转账初始化 图 6 蕴含了对这个余额初始化的过程,生成交易也就是真正转账的过程蕴含验证,证实,实现验证,生成交易即收款等步骤。拿初始化举个例子,比如说爱丽丝初始化了一个 100 块钱的一个余额,而后鲍勃十块钱。转账的过程就能够形容为,爱丽丝转 20 块钱给鲍勃,外部生成一对 Spending key / Paying Key , 相当于长期交易的一个账户,Paying Key 给对方,Spending Key 留给本人,用于证实交易链上的交易是属于谁的。拿到生成的交易和相干的证实,就实现了交易生成这一步。下一步就要进行转账的验证证实,验证逻辑如下:Nullifier NF.axxxxx1 和 NF.axxxxx2 是否在 Nullifiers 列表中,也就是说,是否有被花过; 验证 NF.axxxxx1 和 NF.axxxxx2 是格局是否非法的破费凭据,且对应的 commitment 在链上 (Proof + Merkle tree root),这里有须要验证 Merkle tree root 在 是无效的; 验证 input == output 金额守恒,即:100 + 0 = 80+0+20; 数字范畴满足要求:100-20 >0 && 20 > 0 过程验证完了当前就进入最初一步。实现验证还会做一些相似于交易内容的暗藏, 身份暗藏,交易行为的暗藏,来爱护整个的这个转账交易过程的安全性,包含做一些混同电路的能力。混同交易内容且加密,验证者并不知道应用链上是哪个 Commitment 作为输出,只晓得没有被花过,且在链上。身份暗藏让其无奈确定接管方是谁,交易行为暗藏让其无奈确定这个交易是发送还是接管。基于安全性的保障,能力实现整个验证过程。最初生成交易,而后收款,整个转账过程就完结了。基于零常识证实的转账,被华为集成在零常识证实应用接口中。集成的零常识证实架构也能用来开发一些隐衷之类的利用,实现区块链隐衷爱护的解决方案。总结 交易隐衷爱护这块的技术应该是比拟多的,零常识证实技术并不一定是一个最好的抉择,在平安畛域中还有很多诸如同态,机密分享,不经意传输,或者基于 TEE 硬件的一些隐衷爱护能力,能够去做一些隐衷爱护。然而零常识证实其长处也是很显著,将来区块链的隐衷爱护依然任重而道远,如何实现疾速高效、可信的零常识证 明算法以及如何实现可能抵制量子计算 的零常识证实算法,都是须要进一步解决 的问题。基于线上咱们提供的一些根本的能力,要是大家感兴趣,能够到之前的网址下载相应的代码示例。