http://www.7klian.com

利用零常识证明重塑裂痕披露方法

新型的bug披露模式
我们但愿当验证人向措施中导入会造成裂痕操作的输入时,电路可以或许吸收(accept),譬喻:可以或许让进攻者取得措施执行权限的缓冲区溢出(buffer overflow)。由于大大都二进制裂痕操作针对的是二进制(binary)和特定的处理惩罚器,因此,我们的电路必需精确地对措施的方针编译架构举办建模。最后,当措施乐成运行时,以及当裂痕操作在执行进程中被触发时,我们需要一个电路来吸收。

最后一个要办理的问题是,验证人不受阻挠地利用与最初环境不符而且无法建设假证明的内存排序跟踪。要办理此问题,我们必需添加一个“分列查抄器”(permutation checker)电路来验证我们是否确实按照内存位置对措施跟踪举办了排序。欲进一步相识相关接头,请拜见SNARKs for C论文。
*在此我们要出格感激Colleen Swanson和Marcella Hastings,感激他们的校对事情,以及他们关于本文的名贵反馈。

低级的要领是开拓一个电路来代表方针建模处理惩罚器的“一步”(one step)。接着,我们按照要执行的措施,将容纳该措施的内存初始化;凭据措施的启动时间,配置措施计数器;验证人使措施运行在本身的恶意输入上——反复处理惩罚器电路,直至措施竣事,查抄每一步是否均满意了裂痕操作条件。也就是说查抄措施计数器是否被配置成了一个已知的“恶意”(bad)值,或被写入了一个有权限的内存地点。关于此计策的重要留意事项:在每一步均需要完整运行整个处理惩罚器电路(即便实际上只有一条指令在运行),因为单独列出一项成果会泄露相关的跟踪信息。
为什么是ZK可操作性
证明?
连年来,ZK研究主要会合在应用规模,个中参加方需要证明其生意业务切合公认的底层法则。而我们的研究则大幅拓宽了ZK可证明的语句种类。该项目竣事后,用户将可以或许验证x86处理惩罚器措施的相关语句。

接着,我们谈一谈今朝的难点以及影响ZK证明投入实践的主要障碍。大大都传统的ZK协议要求底层语句必需首先用布尔电路(Boolean circuit)或无轮回的运算电路(即组合电路)来暗示。对付布尔电路,可以用AND门、NOT门和XOR门,而对付运算电路,可以用ADD门和MULT门可以想象,要想把一个要证明的语句转换成这样的电路并不容易,假如还没有简捷的数学公式,更是难上加难。譬喻,假如一个措施包括轮回行为,那么在电路生成之前,必需先把它展开,而当措施包括数据依赖型轮回时,那就无法展开了。

就bug的发明和陈诉,软件开拓者和裂痕研究人员无法告竣一致。披露过多的裂痕信息会中伤第三方研究人员的收益,而披露过早则会对软件厂商的诺言造成永久的损失。各方之间的相同往往以失败了却,同时技能财富的损失也十分惨重。
由于ZK证明一般会吸收写成布尔电路的语句,因此,这里的难点在于需要布尔电路仅在裂痕操作乐成时返回“true”,以此暗示存在裂痕操作。
建模x86

今朝,我们正在与约翰斯·霍普金斯大学(Johns Hopkins University)的Matthew Green传授配合研究通过零常识(ZK)证明创设一个可信靠得住的情况,让科技企业和裂痕研究人员可以或许在这样的情况中无后顾之忧地相同交换。在将来四年中,我们将敦促ZK证明从理论走向实践,并面向裂痕研究人员提供可得出ZK可操作性证明的软件。此项研究附属于美国国防部高级研究打算局(DARPA)所扶助的加密验证和评估信息安详(SIEVE)项目。
要证明逻辑有效性,必需将处理惩罚器电路应用于措施跟踪中持续的每一对指令(sequential pair of instructions)。该电路可以验证一个寄存器状态可否正当地跟从另一寄存器状态。假如每一对状态均有效,则电路吸收。不外要留意,这里的前提是内存操纵是正确的。假如转移函数电路中存在一个存储器查抄器,则会发生开销,此开销与所利用的RAM巨细成比例。

更遍及地说,我们想把ZK证明从学术界带入财富界,使其更贴近当今的软件、更实际。关于此技能,若您有特定用途且未在本文中未提及,我们接待您来函。关于ZK证明方案与电路编译器的巨大生态系统,我们积聚了相应的专业常识,可为您提供辅佐!
可以或许与约翰斯·霍普金斯大学以及DARPA SIEVE项目标同仁配合启动这项事情,我们倍感欢快。我们但愿获得可以或许从基础上颠覆裂痕披露
方法的东西,以便企业可以或许明晰其bug悬赏范畴,裂痕研究人员可以安详地提交能明晰证明其把握了裂痕操作环境的证明。并且,我们还但愿ZK裂痕披露能成为消费者的掩护伞。研究人员可以在不发布相关裂痕的环境下,告诫用户特定设备存在潜在危险,这么做是在向企业施压,欺压他们办理本不肯办理的问题。
设计ZK证明
此刻你已经知道了ZK证明的用处,可是这些算法是如何开拓的呢?需要衡量哪些利弊呢?关于高效系统的开拓,有三大权衡指标:验证时间(prover time)、校验时间(verifier time)和带宽(bandwidth)(即一方必需通过协议向另一方发送的数据量)。某些ZK证明不需要验证人与校验人举办交互,在此环境下,带宽仅是证明的巨细。

通过ZK证明,验证人可以或许让校验人相信本身持有一段信息,同时不需要袒露信息自己。譬喻,Alice但愿让Bob相信本身知道了某个值Y的SHA256预映射X,可是并不需要汇报Bob X详细是什么。(或者X是Alice的暗码)。ZK证明最知名的家产应用或者是在ZCash等注重隐私掩护的区块链规模,在此规模,用户在提交生意业务时,但愿本身的身份、吸收人的身份、生意业务金额都能保持匿名。为此,他们需要提交一个ZK证明,证明其生意业务切合区块链法则,而且发送者具有足够的资金。(请阅读Matt Green的文章相识ZK证明及相关示例。)
知道了如何证明ZK中存在裂痕操作,接下来我们需要把相关的处理惩罚器架构建模成布尔电路。此前已经有人对TinyRAM举办了建模,这是一种RISC架构,其方针是在ZK情况中高效运行。不幸的是,TinyRAM并未商用,并且由于裂痕操作大多依赖特定于架构的行为,因此TinyRAM不能为现实措施提供ZK可操作性证明。

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

相关文章阅读