您能否提供一个用zk-SNARKs进行程序验证的示例,以解释:
发布于 2018-09-22 15:38:47
我认为使用zk来验证计算(程序)执行的系统最简单也是最好的例子是由微软和IBM研究小组开发的皮诺曹系统。在这个URL中,您可以访问它们的源文件,其中有一些示例。
关于你的问题,验证执行的意思是你检查你的目标程序或电路的计算是否正确。假设您有一个程序P(.),您需要使用一些输入来运行这个程序,例如x。由于某些原因(例如,低功耗设备,省钱),您将计算外包,并要求一些云计算服务(如Amazon服务、Google、Microsoft)为您执行此程序,并返回结果。云使用输入x执行程序,并将y=P(x)返回给您。但是,如果您不信任服务器,则无法确信y是P(x)的正确答案。为了解决这个问题,云(服务提供商)需要给出一个正式的证据,证明P(x)的执行是正确的。
请注意,只有当检查由服务提供者生成的证据比由验证者自己重新计算P(x)更容易(更轻)时,外包计算才有意义。
zk-SNARKs (如Pinocchio )使用基于配对的密码技术,使得验证尺寸非常短(小于1KB),对验证器(客户端)非常有效,在当前的智能手机或笔记本电脑上验证时间大约为0.1秒。
为了清楚地了解如何使用zk-SNARKs来证明电路的执行是正确的,我强烈建议查看皮诺曹系统。要获得快速的概述,请查看以下幻灯片。在一个非常高的层次上,下图显示了Pinocchio系统(使用zk)所采取的步骤,以给出一个计算的证明。
https://crypto.stackexchange.com/questions/59324
复制相似问题