http://www.7klian.com

一文读懂零常识证明背后的简朴逻辑

抽象代数中,同态是两个代数布局(譬喻群、环、可能向量空间)之间的保持布局稳定的映射。
3. 所依赖的安详假设。安详假设与安详密切相关,好比 Bulletproofs 依赖的是一个尺度安详假设:离散对数问题,加上一个随机预言模子;而 zk-SNARKs 依赖的是一个不行否证的安详假设问题:指数常识假设。
而只有当我们知道这些暗码学要领背后的逻辑,才不会迷失个中,才气领略它为何要这样去设计,它合用于什么样的应用场景。
之所以先容 zk-STARKs,一方面是因为它也颇为风行,另一方面是想说明零常识证明大概是一个难以摸索到界线的事物,好比 zk-STARKs 就是迥异的,因此本文只是领略零常识证明的一个角度,且因为自身认知有限,这种角度也许并不合用于所有的零常识证明要领。
这与零常识证明的干系是什么呢?我们可以把零常识证明解析为两个成果,第一个成果是埋没奥秘,第二个成果是证明本身有奥秘。而埋没奥秘,如上文所述,就是找到一个具有单向成果的计较式。
 
zk-STARKs 并没有利用暗码学中的单向函数,
简朴领略的话,它是这样做的:假设 P 有 9 个要证明的数,a1,a2,……,a9,那么把它们编码成 b1,b2,……,b9,每个bi中都含有a1,a2,……,a9 的部门信息。在做验证的时候,验证者 V 对 b1,b2,……,b9 做抽样查抄,从少量 bi 中就能阐明出编码有没有错误,这样就能够率探测到 a1,a2,……,a9 是否属实。
椭圆曲线算法(ECC)是暗码学中被普遍应用的一个具有单向成果的函数,它看起来是这样的:k × P = Q,在已知 P 的环境下,我们可以通过 k 计较出 Q,但难以通过 Q 反向计较出 k。需要留意的是,暗码学中加法或乘法运算的寄义不范围于我们熟悉的实数域上加法或乘法运算的寄义。

上述的这些指标和属性很难被同时满意,因此在设计零常识证明协议,可能选择零常识证明协议/要领作为某个协议的成果组件的时候,需要思量特定场景的需求问题。好比对质明时间有较高要求,就大概需要选择占用更多空间、可能具有较小通用性的要领;对可信配置有要求,就大概需要选择有更高证明本钱的要领。
zk-STARKs 也不是基于上文先容的 NPC 困难做验证,它是基于概率查抄做验证的。关于这类验证要领,可以从一种陈腐的验证系统 PCP(Probabilistically Checkable Proofs)中找到线索,不外在 zk-STARKs 中利用的要领叫 IOP(Interactive Oracle Proofs),与 PCP 的差异之处在于它用的是 Oracle。
5. 另辟门路
为什么能证明布尔电路,就能证明种种奥秘?因为布尔电路可满意性是一个 NPC(NP-Complete)问题,而 NPC 问题有一个「特性」,即所有的 NP 问题(包括NPC)都可以在多项式时间内归约(转换)成某一个详细的 NPC 问题。
3. 通用零常识证明:NPC 问题
为什么需要去相识它?隐私问题自不消提,另一个重要原因则在于,跟着对摸索的深入,我们发明通过暗码学的要领来实现信任是对共鸣算法信任的有效增补,这两种信任可以更低摩擦地团结在一起,因此也更易被实现和应用。这个趋势也可以从近期区块链技能的成长偏向中察觉到。
这相当于把现实空间的物体投射到影子空间后,影子空间可以用加法来组合影子,但对付一些需要用乘法才气组合的影子,它就无能为力了。
对付零常识证明来说,埋没奥秘只是第一步,我们还需要证明本身确实把握了奥秘。就像在第一段路程中只需要领略单向成果,在这第二段路程中,我们只需要领略「同态」,有了同态我们就有了证明奥秘的本领。那么什么是同态?
此刻我们把 8 个零部件的影子组合起来,假如它们可以或许构成一块完整的手表影子,就可以用该影子与第 9 号影子做比拟,假如两者是沟通的,就能证明现实空间的这块手表中是有机芯的,因为它的影子与含机芯的零部件构成的影子沟通。这其实就完成了一个
简朴的零常识证明进程。
零常识证明是指让验证者相信某个断言为真,且整个进程不泄露「断言为真」之外的任何常识。为了更容易领略,本文把它简化为埋没奥秘和证明拥有奥秘。

1. 埋没奥秘:单向成果
假如原空间与映射空间既满意加法同态,也满意乘法同态,我们称其为全同态。全同态意味着可以对密文举办任意的运算(可以对影子举办任意方法的组合),这对实现数据隐私有着重要的意义,但实现全同态是一件很是坚苦的工作。
当 V 对 P 作随机抽样时,P 可以或许主动用随机数夹杂抽样的 bi,同时又能使 V 完成验证,从而实现零常识性。
假如你愿意,路程到此就可以竣事了;假如你想继承,接下来的这一段有点「野」。
让我们看看它是如何做到单向性的。在该函数中,P 是椭圆曲线上的一个点,我们把一个小球放在该点并沿切线偏向击打出去,小球在椭圆曲线中撞来撞去撞了 k 次(大抵可以这么领略),最后会落在一个点 Q 上。假如我们知道初始位置 P 和撞击次数 k,是能算出小球的落点 Q 的;但假如我们只瞥见小球落在 Q 上,是无法算出从 P 点到 Q 点撞了几多次,也就是 k 的。
此刻,第二段路程抵达了终点。我们需要相识的是,同态是证明奥秘的要害地址,但并不是所有的映射干系都有「精采」的同态,而差异的应用场景对同态的要求也纷歧样,在实际的设计中,需要按照详细需求实现差异的同态。
这是关于 zk-STARKs 的。它也是零常识证明协议,但它是基于信息编码的零常识证明,这是完全差异的一条阶梯,而且有大概打乱你已经清晰的思路。
好比下图是 ZCash 首席执行官 Zooko Wilcox 在谈到零常识证明协议时用到的表格,主要较量的就是差异协议的证明时间、验证时间和证明巨细。

因此理论上,我们可以或许以任何一个 NPC 问题为基本构建一个通用的零常识证明协议。但这仅仅是理论上的,因为利用它们做证明的难易度是截然差异的。今朝主流的要领是选择布尔电路或算术电路,因为它们实现起来相对容易、电路局限小,zk-SNARKs 和 Bulletproofs 都是选择的这种要领。

接下来让我们看看这个进程在真实的暗码学中是奈何的,以椭圆曲线数字签名算法(ECDSA)为例,它是一个具有「零知属性」的算法。你可以选择不看,它不会影响你对同态的领略。

在该算法中,要害的进程是验证 f(Z + dA × R) = f(Z) + f(dA × R) = f(Z) + Qa × R,个中,Z 是需要用私钥签名的动静,dA 是私钥,R 与随机数相关,Qa 是公钥。因为同态属性,这个等式是创立的,我们就可以用等式右边的 Qa(公钥)来验证 Z 是否是用等式左边的 dA(私钥) 签名的。
你必然留意到了,我们说椭圆曲线数字签名算法具有「零知属性」,却并没有说它是零常识证明协议,因为它的主业是做数字签名,埋没私钥只不外是它必需要实现的一个成果。并且它也只能埋没私钥,假如想让它帮你埋没一个你本身的奥秘,它是做不到的。
椭圆曲线算法的同态属性使得其他算法,好比椭圆曲线数字签名算法,可以操作它来埋没并证明奥秘,但该算法的本领有限,因为它只具备加法同态,也就是 f(a+b) = f(a) + f(b),但不具备乘法同态,即 f(a×b) = f(a) × f(b)。
下图是 k = 2 的一个示例,小球从 P 点出发,,撞击了两次落在 Q 点上,因此 Q 便是2 × P。椭圆曲线算法常被用于生成公钥和私钥,公钥就是小球最后的落点 Q,私钥就是撞击次数 k。k × P = Q 的单向成果使得它可以埋没私钥这个奥秘。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。