看论文自己的疑惑:
1.为什么在notation中定义离散对数时说是biding不是hinding,不能理解说不是hinding,是因为向量a最终是公开的吗
特点 |
---|
Characteristic:short proofs and without a trusted setup 【使用的是一篇名叫Short signatures from the weil pairing论文中的方法,使公开参数能用一个种子通过哈希函数生成】 |
Proof size:logarithmic in the witness size【使用了改进的内积论证减少证明大小】 |
Application:[1]efficient range proofs on committed values.[2]provide short zero-knowledge proofs for general arithmetic circuits while only relying on the discrete logarithm assumption and without requiring a trusted setup【论文中最后的协议并没有指明公开参数的生成过程,但是也是用Short signatures from the weil pairing生成的】 |
Proof generation and verification times :linear in n. 【PV经过了一系列的计算,我并没有完全弄懂linear in n】 |
Suited:the distributed and trustless nature of blockchains. |
改进 |
---|
improve on the linear (in n) sized range proofs in existing proposals for confidential transactions in Bitcoin and other cryptocurrencies. 【优化为了n的对数大小】 |
supports aggregation of range proofs:a party can prove that m commitments lie in a given range by providing only an additive Oplogpmqq group elements over the length of a single proof.【支持聚合】 |
aggregate proofs from multiple parties:we enable the parties to generate a single proof without revealing their inputs to each other via a simple multi-party computation (MPC) protocol for constructing Bulletproofs. [This MPC protocol uses either a constant number of rounds and linear communication, or a logarithmic number of rounds and logarithmic communication] |
1. 介绍
这里对这一段中的关键地方做一个摘要:
[1] 支付的隐私性分为身份的隐私性以及交易数额的隐私性。提出了比特币的一个缺陷:弱匿名性,即现实世界于比特币地址之间的关系。ZeroCash中提出的方案解决了这个问题。
[2] 目前对于CT的解决方案:Max16实现了隐藏,但似乎失去了公共验证性且数额均为正值,作者提出可以通过零知识证明解决。[PBF+]太大,需要一个信任阶段,不是我们想要的。 [BSCG+13, GGPR13],用零知识证明的方案需要一个可信的第三方。STARK [BSBTHR18]虽无可信第三方,但存在效率问题。
[3]基于此,作者提出了short proofs(解决了大小问题),无可信第三方,的非交互的零知识证明。
1.1 我们的贡献
文章 |
---|
![]() ![]() |
[1]首先说明做了什么,提出了一个零知识论证系统,证明承诺的秘密值在一个给定的区间中,且不需要一个可信设置。使用离散对数假设并设用Fiat-Shamir技术实现非交互。 |
[2]相对于BCC+16,在内积上做出了改进,且消除了其中使用承诺公开算法作为验证电路的一部分。 |
[3]支持MPC协议,多部门对于他们的秘密值共同产生一个小的范围证明。 |
[4]可用于NP languages,证明大小是乘法门的对数大小且允许输入为Pedersen承诺 |
[5]多BulletProos的组合验证提高效率 |
1.2 应用
此处暂且不论
2. Preliminaries
![]() |
[1]定义了非平凡离散对数关系。离散对数关系假设即敌手不能聪随机选择的群元素中找到一个非平凡离散对数关系。当n为大于等于一时等价于离散对数假设。 |
![]() |
Efficient Zero-Knowledge Arguments forArithmetic Circuits in the Discrete Log Setting与此文章中定义相同。 |
![]() |
同态承诺 |
![]() |
可与Efficient Zero-Knowledge Arguments forArithmetic Circuits in the Discrete Log Setting比较,注意P[:]和P[|]的区别,:代表的是由左得右,右是果,左边是条件。而|代表得是左是果,右边是条件。 |
![]() |
注意此处的定义与上面引用文章中Binding定义有所不同,一个是 PPT adversaries A,一个是non-uniform polynomial time adversaries,一个是约等于0,一个是小于等于可忽略的函数。 |
![]() |
![]() |
介绍了什么是零知识证明,给出了CRS-dependent language的定义 |
![]() |
这个定义的概念的意思在敌手产生的u,s的情况下P生成合法的tr与模拟器产生的tr是以相同概率同分布的。即通过则可以提取出witness |
![]() |
![]() ![]() |
上文说这意味着给定验证者挑战值,可能在不知道witness的情况下模拟论证。这意思是什么呢,即即使是由敌手选择statements和witness,对于合法的statements和witness,由诚实者和模拟器产生的tr对敌手来说是不可区分的。这里A1和A2是交互式敌手,注意此定义。 |
![]() |
上文定义了什么是范围证明 |
![]() ![]() |
本节定义了此论文中要用到的术语。此处值得注意的点:[1] 向量的两种乘积方式。[2] 向量多项式的定义,注意系数是向量,同时注意多项式的乘积。 |
3. 改善的内积论证
![]() |
对BCC+16论文内积做了改进如下 |
![]() |
最简单的方法是直接将a,b发给验证者,但大小是2n,下面作者将介绍一个更好的方法 |
![]() ![]() |
这里注意等式(3),提出了与BCC+16不同的承诺方案,可以看到,上述此方法比将向量a,b直接给验证者多出了[1] 验证者要向证明者发送一个x。 [2]证明者要两次向验证者发送消息[3] 证明者发送的消息比直接的方法少了接近一半的通信量。总的来说一次完整的交互增加了两次单项通信,减少了一半的消息 |
![]() |
这里说明了通过rewind提取a,b的方法。 |
![]() |
由于可以写成上述形式,也就是初始状态的形式,所以这个协议可以循环使用,当使用 log2n轮的时候,最后P一共向V发送了2log2n 加上最后的a,b;V向P发送了log2n个x,一共进行了2log2n + 1次单向交流。,3.1中会将PV中的指数降低至一个多重化指数,section将进一步优化。下面将证明其安全性。 |
![]() ![]() |
上述说明了(1)可以向(2)转化 |
![]() |
将所有的取幂推到最后一轮以达到multi-exponentiation的目的。最后的压缩代表V一次向P传送log2n个x。这里的难点主要在等式的左边 |
![]() ![]() |
上述等式已验证 |
![]() |
4.1 展示如何构造一个范围证明,验证者可以检查一个内积在两个向量间。 |
4.2 4.1中的check可以被替换为一个高效的内积论证。 |
4.3 展示如何将m个范围论证聚合成为一个短的论证。 |
4.4 使用Fiat-Shamir使交互变为非交互。 |
4.5 展示了允许多方构造一个简单的聚合范围证明。 |
4.5讨论了一个拓展到后量子安全范围证明。 |
![]() |
工具:[1] Pedersen commitment [2] 证明取值0或1的方法 [3]将多个限制转变为内积论证的方式 [4] 零点的稀疏性的运用 |
![]() |
盲化的方法 |
![]() |
![]() |
验证等式成立的方法(包括如何隐藏witness,如何检查内容的一致性,如何验证相等) |
![]() |
![]() |
作者说可以用上一节的内积优化的方法对目前的方法进行优化,减少要发送的群元素。具体的优化后的协议没有给出。这里注意优化需要与V多进行一次交互。 |
![]() |
通过对4.1的简单修改就可以达到多交易聚合的目的,其主要思想就是将向量变为矩阵的形式,基本思想是一样的。 |
![]() |
作者此处的思想:[1] 使用Fiat-Shamir将交互变为非交互(带有st的哈希函数,这里为什么不带st不安全暂且不论),作者提出使用Fiat-shamir容易出错,建议使用第三方库。[2]使用哈希函数生成公共参数以避免使用可信第三方【参考文献:Short signatures from the weil pairing】 |
![]() |
![]() |
MPC步骤如下:[1] 首先给每个party生成公开参数。[2] 每个party生成自己的证明 [3] 将所有的证明交给一个人[4] 个人将生成的证明组建发送给每个party。[5]最后各个party将l,r发送给个人[6]个人声称内积论证和最后的证明 |
MPC的特点:有一定的交互cost,但我没有计算;使用零知识证明保证安全;需要一个汇总者 |
作者提出:将MPC有效的用于复杂的电路是一个待解决的问题 |
下面是对算数电路的零知识证明部分
![]() ![]() ![]() |
顶层思想是将Hadamard-product 关系和约束转化为一个简单的内积关系。《Efficient Zero-Knowledge Arguments forArithmetic Circuits in the Discrete Log Setting》这篇文献中是转化为多项式的系数。本文的思想是线性组合,其组合是由验证者随机选取的。下面对协议的关系做了一个简要的说明,咱也没太看懂,看下下面的协议。 |
![]() ![]() ![]() |
可以结合4.3一起来分析,其本质还是多内积聚合以及一个限制嵌入。但是可以看到其是交互的过程,可以用Fiat—Shamir 或者 上述作者提到的库的方法使其变为非交互。看其协议结构仍需可信第三方,不知可以用上述作者提到的方法消除可信第三方。 |
下面是理论上的性能分析,这里暂且不论。
接下来看下附录
总结
值得学习的技术:内积优化技术;运用内积进行范围证明和电路的零知识证明。
现在的疑惑点:协议的零知识性以及安全性还比较模糊,就是缺乏soundness。