科普 | 天冷了,干了这碗“零知识证明”鸡汤_GRO:ROT

前言:从一锅鸡汤说起

当读者刚开始接触零知识证明的概念时,面临第一关就是如何搞懂突如其来的大量名词,比如离散对数问题、双线性对还有Groth16、PLONK、RedShift等。不妨我们借用“烹饪”这个生活场景来类比其中的层次关系。

如果把“密码学”比做“烹饪”,那么上个系列中对双线性对的学习就类似于学习炖汤前先简单了解的高压锅的工作原理,而zkSNARK则相当于在说明如何用高压锅炖出美味鸡汤。

由此可见,双线性对是类似基础工具的角色:就像高压锅既可以炖鸡汤也可以炖排骨汤,双线性对既可以用于零知识证明也可以用于构造签名等密码学算法。而Groth16、PLONK、RedShift等,它们同属于zkSNARK,属于同一层次,如果沿用上述类比,那大概就是对应用高压锅做汤的风味选择了。Groth16算法是JensGroth提出的一种zkSNARK算法,相关论文不仅对已有算法进行改进,而且讨论了基于配对的非交互式零知识论证的证明大小问题。Groth16因其精简的证明大小和高效的验证效率,在ZCash等项目中多有应用,是最经典的零知识证明算法之一。

动态 | 美国演说家Anthony Robbins开始科普什么是比特币:美国演说家安东尼·罗宾(Anthony Robbins)在自己的网站上发布了一篇比特币的科普文章,并在推特上向自己的粉丝介绍什么是比特币,目前他的推特账户共有粉丝304万人。[2019/1/1]

上一个系列中我们完整介绍了零知识证明中用到的椭圆曲线和双线性配对相关的基础知识。本系列通过动手算的方式,以Groth16算法为例,循序渐进地介绍zkSNARK的基本原理。

本篇是“动手算Groth16”的上篇,主要介绍如何从程序转化为电路和描述算数电路的一种约束系统R1CS。下篇会介绍如何从R1CS转化为多项式相关的约束问题,并且详细给出完整的Groth16从头到尾的手算步骤。

程序与电路

初始接触通用零知识证明算法时,读者可能最容易感到疑惑的地方就是各种资料中频繁提到的“电路”一词。这里的“电路”是指什么?它又如何等价地对同一个问题进行描述呢?回答这些问题最简单的方式就是使用具体的一个算法例子进行说明。比如我们有下面一段程序代码,如何将其转化为等价的电路呢?

声音 | 火星人朋友圈科普RAM:火星人在朋友圈发文称,“什么是RAM?简单来说就是EOS这个国家的土地,所有的经济行为都离不开土地。只要EOS的BP们能投票形成一个稳定的供给预期,并且不改变目前的Bancor算法,那么RAM后续的价格有可能会像北上广深的房价走势。房价下跌不行,房价过快上涨也不行,EOS的生态越来越像某国了,真有意思。”[2018/7/6]

▲需要被转化为电路的代码

这里需要注意到程序中值被存储在变量中,而电路中的值是用电路门之间的连线表示的。这其中有个关键的不同是:变量的值是会随着时间变化的,而电路中连线的值是固定不能改变的。因此首先我们通过引入一些中间量的方式表示随循环而不断变化的各阶段的变量值,中间量命名为tmp1,tmp2...这样的形式:

中科院自动化研究所将面向大中小学生开展区块链等主题的科普讲座:5月21日,新华网讯,今年,中国科学院自动化研究所将举办第十四届“自动化之光”公众科学开放日活动。届时,自动化所将面向大中小学生分别开展《脑与智能》、《区块链技术与平行智能》、《大数据时代的视觉智能》、《动画真奇妙》等4个主题报告,用实例和生动的演示深入浅出地为大家揭示智能技术的原理和奥妙。[2018/5/21]

▲引入辅助的中间量

最后我们可以转化为只有加法门和乘法门的算数电路:

▲电路示意图

科普时报:区块链与云计算长期发展目标不谋而合:据《科普时报》今日报道,区块链与云计算两项技术的结合,从宏观上来说,一方面,利用云计算已有的基础服务设施或根据实际需求做相应改变,实现开发应用流程加速,满足未来区块链生态系统中初创企业、学术机构、开源机构、联盟和金融等机构对区块链应用的需求。另一方面,对于云计算来说,“可信、可靠、可控制”被认为是云计算发展必须要翻越的“三座山”,而区块链技术以去中心化、匿名性,以及数据不可篡改为主要特征,与云计算长期发展目标不谋而合。[2018/5/4]

这里除去输入和输出外,其他的圆圈代表了电路中的门:可以是乘法门或者加法门。而门和门之间的连线对应了程序中的中间变量在某个时刻的值。

如果站在更高的角度思考,其实可以发现有很多结构都能实现“运算”功能,比如说神经元组成的人脑,比如冯·诺伊曼结构的计算机,甚至更早的机械计算器和当今的人工神经网络。算数电路也是这样的一种能够完成一定运算的结构,而且基于这种结构我们能够完成对计算输入和过程的“零知识证明”。因此通用零知识证明算法普遍引入了“电路”这个运算结构并且会研究,如何更好的将高级语言描述的问题转化为等价的算法电路。

金色财经独家分析 监管机构、媒体、业界提示风险 区块链科普道阻且长:新华社今日发文表示,近来“区块链”类案件频发,不法分子以“投资虚拟货币周期短、收益高、风险低”为借口,取用户信任并诱使其转账进行投资。无独有偶,同日消息,腾讯手机管家安全专家也提醒此类风险,并从技术上提出防建议。在美国,监管机构警示加密货币欺诈现象普遍承诺高收益而不披露潜在风险。金色财经独家分析,不法分子假借新技术之名进行,一方面是抓住民众趋利的心理,一方面反映出区块链科普的欠缺。区块链是新兴科技和底层技术并有改变社会生产关系的潜力,应该进行系统性的科普教育,当前,部分大学已经开始设置了区块链课程,但对于普通民众仍然有科普的需求,人们应该了解到系统和正确的知识,不仅要了解区块链的好,也要明确局限和弊端,以在高收益的诱惑下,保持清醒客观。[2018/4/11]

上面例子中约束较多,会给后续的“动手算”产生较多的计算量压力,因此在下文中我们以一个新的例子重新展示这个转化的过程。本系列后续文章都会以这个新的例子为主线进行叙述,从而真实展示证明和验证的具体计算过程。新例子的程序代码如下:

这里涉及到4个连线以及两个等式关系。这两个等式关系用更规范的方式重写一下可以帮助读者看地更清晰:

观察这两个式子的特点,可以发现两个等式关系其实都可以写作A×B=C的形式,其中A、B和C都是变量的“加权组合”。这并非巧合,而是我们有意为之。通过这种形式我们避免了对加法门的约束产生额外开销,而是在对乘法门进行约束的同时零开销的对加法关系进行约束,这是groth16的特点之一。在Groth16算法中,加法门和乘法门的地位并不是等价的,我们更关心乘法门。

下面对a,b,c,d四个变量赋予编号,以便下一步的处理,按照groth16的习惯我们将输出排列在输入之前:

可以看到除了连线a、b、c和d,还有一个特殊的连线“1”,“1”其实可以看作是一个特殊的公共输入,他的存在让我们在算法中能更容易地处理常量。“1”的值总是1。

从电路到R1CS

本部分之前先回顾一下向量的内积概念,向量的内积是从两个同维向量得到一个标量的运算,其几何意义对应了“投影”这个概念。比方说两个二维向量的乘法:

·=2×4+3×1=11

回过头看刚才的结果,因为A×B=C这个形式的存在,我们其实能够进一步的对这些等式关系进行抽象。抽象的目的是为了方便编程处理和下一步的讨论。以式子(2)为例,我们其实可以认为他是如下的形式:

根据上面介绍的向量内积,可以发现这里的A,B,C其实都是向量内积的形式:

这里的s其实就是全部的连线的值,如果证明者P是真的计算过这个电路的,则P能够获知s的值,否则P无法得知s的值。我们将这个s称为witness。因此通过上面的向量a,b,c我们就能够对s进行一定的约束,即s应该满足:

这就构成了一个一阶约束,这样的一个约束对应了电路中的一个乘法门。如果我们将所有的约束联立起来,就得到一个一阶约束系统。通过R1CS我们可以更方便的形式化描述一个零知识证明问题,从而为我们后续解决该问题提供了条件。

下篇我们会介绍如何将R1CS描述转换为多项式描述,并且通过完整的计算过程展示groth16算法的相关内容,敬请关注。

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

金智博客

[0:0ms0-7:147ms