Zero Knowledge Proof 解密 QAP
2019独角兽企业重金招聘Python工程师标准>>>
本文的内容来自于V神的博客文章,再加上一些自己的理解。验证代码在https://github.com/ethereum/research/blob/master/zksnark/
零知识的证明逻辑需要花很多篇幅仔细介绍,涉及到QAP,KCA,Groth16,同态隐藏,双线性映射等。这篇文章主要介绍quadratic arithmetic program(QAP)。
ZK-snark不能直接拿来应用,我们必须把原始数据转换成适合ZK-snark处理的方式。以如下的3次方等式为例:
x**3 + x + 5 == 35 (答案是 3)
编程Python程序如下:
def qeval(x):
y = x**3
return x + y + 5
扁平化展开
上面的2元3次方程可以展开为:【1】
sym_1 = x * x
y = sym_1 * x
sym_2 = y + x
~out = sym_2 + 5
R1CS转换
rank-1 constraint system (R1CS) 是一个(a.b.c)的3个向量,R1CS的解答是一个向量S,满足s . a * s . b - s . c = 0, 此处 . 代表相应位置的乘法,然后再将乘法的结果相加,随后,对b 和s ,以及 c 和 s做同样的操作。
S.a=(1×5 +3×0 +35×0 + 9×0 + 27 ×0 + 30 ×1) =35
S.b=(1×1 + 3×0 +35×0+9×0+27×0+30×0)=1
S.c=(1×0 +3×0 + 35×1 + 9×0+27×0+30×0)=35
显然上面的S向量(1,3,35,9,27,30)就是上述二元3次方程的一个解
为了规范化,我们加了一个哑元'~one',以及中间变量'sym_1', 'sym_2',向量变成下面这样:
'~one', 'x', '~out', 'sym_1', 'y', 'sym_2'
第一个门:
a = [0, 1, 0, 0, 0, 0]
b = [0, 1, 0, 0, 0, 0]
c = [0, 0, 0, 1, 0, 0]
上面的(a,b,c)矢量组表示下面的语句:s.a*s.b-s.c=0
sym_1 = x * x
同理:
a = [0, 0, 0, 1, 0, 0]
b = [0, 1, 0, 0, 0, 0]
c = [0, 0, 0, 0, 1, 0]
代表:
sym_1 * x = y
上面的语句来自【1】
sym_1 = x * x
y = sym_1 * x
sym_2 = y + x
~out = sym_2 + 5
上面语句的完整的R1CS如下:【2】
A
[0, 1, 0, 0, 0, 0]
[0, 0, 0, 1, 0, 0]
[0, 1, 0, 0, 1, 0]
[5, 0, 0, 0, 0, 1]
B
[0, 1, 0, 0, 0, 0]
[0, 1, 0, 0, 0, 0]
[1, 0, 0, 0, 0, 0]
[1, 0, 0, 0, 0, 0]
C
[0, 0, 0, 1, 0, 0]
[0, 0, 0, 0, 1, 0]
[0, 0, 0, 0, 0, 1]
[0, 0, 1, 0, 0, 0]
下面利用拉格朗日插值来把R1CS编成QAP
拉格朗日插值
学过数值分析的应该很容易理解,对于一列坐标:(x0,y0),(x1,y1)...(xi,yi),可以通过拉格朗日插值,找到一个多项式,它通过这个坐标序列里的每一个点。具体的方法是:
对于(x0,y0), 我们找到一个多项式,在x1,x2....xi处,y1,y2,..yi均为零。这样的多项式很容易找,比如,下面就是一个例子:
y= (x-x1)(x-x2)...(x-xi)
举个例子,比如有3个点:(1, 3), (2, 2) 和(3, 4)。
- 首先我们找到通过(1, 3), (2, 0)和 (3, 0)的多项式。
- 其次我们找到通过(1, 0), (2, 2)和 (3, 0)的多项式。
- 再次我们找到通过(1, 0), (2, 0)和 (3, 4)的多项式。
- 最后,我们把上面得到的多项式加起来就是通过这三个点的多项式
我们用拉格朗日插值来变换上面的【2】
程序如下
#Assumes vec[0] = p(1), vec[1] = p(2), etc, tries to find p,
#expresses result as [deg 0 coeff, deg 1 coeff...]
def lagrange_interp(vec):
o=[]
for i in range (len(vec)):
o=add_polys(o, mk_singleton(i+1, vec[i],len(vec)))
for i in range(len(vec)):
assert abs(eval_poly(o, i+1)-vec[i]<10**-10), (o, eval_poly(o, i+1), i+1)
return o
def transpose(matrix):
return list(map(list,zip(*matrix)))
#A, B, C = matrices of m vectors of length n, where for each
#0 <= i < m, we want to satisfy A[i] * B[i] - C[i] = 0
def r1cs_to_qap(A,B,C):
A, B, C=transpose(A), transpose(B), transpose(C)
new_A=[lagrange_interp(a) for a in A]
new_B=[lagrange_interp(b) for b in B]
new_C=[lagrange_interp(c) for c in C]
Z=[1]
for i in range(1,len(A[0])+1):
Z=multiply_polys(Z, [-i,1])
return(new_A, new_B, new_C, Z)
結果如下
A 多项式
[-5.0, 9.166, -5.0, 0.833]
[8.0, -11.333, 5.0, -0.666]
[0.0, 0.0, 0.0, 0.0]
[-6.0, 9.5, -4.0, 0.5]
[4.0, -7.0, 3.5, -0.5]
[-1.0, 1.833, -1.0, 0.166]
B 多项式
[3.0, -5.166, 2.5, -0.333]
[-2.0, 5.166, -2.5, 0.333]
[0.0, 0.0, 0.0, 0.0]
[0.0, 0.0, 0.0, 0.0]
[0.0, 0.0, 0.0, 0.0]
[0.0, 0.0, 0.0, 0.0]
C 多项式
[0.0, 0.0, 0.0, 0.0]
[0.0, 0.0, 0.0, 0.0]
[-1.0, 1.833, -1.0, 0.166]
[4.0, -4.333, 1.5, -0.166]
[-6.0, 9.5, -4.0, 0.5]
[4.0, -7.0, 3.5, -0.5]
附录
拉格朗日的定义和证明可以参看这里和这里
转载于:https://my.oschina.net/gavinzheng731/blog/3032170
Zero Knowledge Proof 解密 QAP相关推荐
- 零知识证明(Zero—Knowledge Proof)
零知识证明概念 零知识证明(Zero-Knowledge Proof),是由S.Goldwasser.S.Micali及C.Rackoff在20世纪80年代初提出的.它指的是证明者能够在不向验证者提供 ...
- 零知识证明(Zero Knowledge Proof,ZKP)
零知识证明(Zero Knowledge Proof,ZKP)并非新鲜事物,其概念初见于1985年的论文<互动证明系统的知识复杂性>.ZKP是一种密码学技术,允许两方(证明者和验证者)来证 ...
- 学习笔记:公钥私钥 签名验签 加密解密 CA 证书
重点: 1.区分加密解密和签名验签(在非对称加密情景下) 加密解密:#A给B发消息# A用B的公钥进行运算(加密),B收到后用B自己的私钥进行逆向运算(解密) 签名验签:#A给B发消息# A用A自己的 ...
- 隐私保护和数据安全:区块链的隐私问题、零钞:基于zkSNARK的完美混币池、Hawk:保护合约数据私密性、Coco框架、Baby Zoe
第十章 文章目录 第十章 一.区块链的隐私问题 1.化名和匿名 2.去匿名攻击:交易表分析 二.零钞:基于zkSNARK的完美混币池 1.零知识证明 2.零钞的运行原理 三.Hawk:保护合约数据私密 ...
- 零知识证明学习资源汇总
本文将继续会持续进行更新,更新后的版本将在 Github 和知乎上发布,欢迎关注. Github 地址:https://github.com/sec-bit/learning-zkp/blob/mas ...
- 记录我看的密码学方案中的技术,Shamir秘密共享,Schnorr零知识证明,EIGamal密码体制
记录我看的论文中基于的技术,对他们进行大概介绍 Shamir 秘密共享方案 零知识证明 EIGamal密码体制 Shamir 秘密共享方案 1979年,Shamir提出的一个基于拉格朗日插值的(k,n ...
- 区块链学习者终极指南
什么是加密经济学(cryptoeconomics)?以太坊社区开发者Vlad Zamfir解释道: "这是一门独立的学科,旨在研究去中心化数字经济学中的协议,这些协议被用于管理商品及服务的生 ...
- 密码学的100个基本概念
密码学的100个基本概念 一.密码学历史 二.密码学基础 三.分组密码 四.序列密码 五.哈希函数 六.公钥密码 七.数字签名 八.密码协议 九.密钥管理 十.量子密码 2022年主要完成了密码学专栏 ...
- 零知识证明经典文献大汇总(可收藏)
从去年的DAO经典到更早的NFT经典(以及在此之前是最初的加密经典). 本文, 为那些寻求理解.深入和构建零知识的人挑选了一组资源:强大的基础技术,这些基础技术掌握着区块链可扩展性的关键,代表着隐私应 ...
最新文章
- java条件操作_关于java:条件为true时,从头开始执行各种操作的顺序
- SAP freelancer如何找到一个不苦逼的项目?
- java 数组 题_(第22讲)java数组的一些编程题
- Java的synchronized关键字:同步机制总结
- python输出格式化及函数format
- windows下实现c++版faster-rcnn
- django不修改数据库创外键_Django——model(建表,增删改查,外键,多对多)
- 蓝桥杯基础模块4_3:矩阵按键
- Linux——软件包简单学习笔记
- liferay search container的两种实现方式
- java游戏贪吃蛇_Java实现贪吃蛇游戏
- assets和res/raw的用法
- centso7.5 安装minconda3和创建项目所需python3环境
- 学生选课系统,第二版
- 浙大计算机学院 数字媒体处理与企业智能计算实验室在哪个校区,浙大计算机学院各大实验室介绍.pdf...
- 计算机维护工作周报,运维周报怎么写呀,这一周没什么事做
- TS流基本知识【HI3798 AVPLAY播放TS流】
- Log Parser Lizard的安装
- 根据特征图画热图_heatmap
- dell服务器设置bios设置u盘启动不了系统,戴尔台式机bios设置图解教程|dell bios设置u盘启动...
热门文章
- 根据先序序列和中序,后序和中序序列创建二叉树
- 拼多多618手机品牌官旗销量同比增长124%,4000+高价位手机同比增长156%
- Nodejs+vue网上鲜花店销售信息系统express+mysql
- 2021 考研英语题难度如何?英语一英语二有哪些亮点和槽点?
- 室内场馆360全景拍摄的注意事项
- 淘宝权重及其大数据分析
- Qt读取/写入Excel数据--QAxObject
- 飞鱼CRM是什么?巨量引擎线索如何自动同步至CRM系统
- 【C语言详解】——文件操作(建议收藏)
- python reset_index()_python 问题 reset_index(drop=True