用户: Guoh064/Bulletproofs

Bulletproofs 是一种无需信任基础设置的范围证明. 其特点在于零知识证明性、与 Pedersen 承诺的兼容性以及应用 Fiat–Shamir 后得到的非交互式证明.

1基础知识

以下, 我们约定 是阶为 的群, 那么群上有自然的数乘 . 我们要求在群 上离散对数问题是困难的 (一般采用椭圆曲线上的加法群) .

定义 1.1. 给定群 , 群的生成元 和群中元素 , 离散对数问题要求找到 , 使得 . (作为乘法群时为 ) 形式化地可以将等式改写为 , 离散对数因此得名.

注 1.2. 时, 我们可以 “计算” 出 的值, 这是因为 不仅是一个群而且是一个域; 但对一般的加法群 我们并没有这一结构.

离散对数问题困难性假设是指, 对于上述的离散对数问题, 不存在 (经典) 概率多项式算法求解. 使用 Shor 算法 (量子算法) 可以在多项式时间内处理这一问题, 但这超出了我们的篇幅.

以下, 我们均假设离散对数问题是困难的.

我们有推论:

推论 1.3. 给定群 , 群的生成元 和群中元素 , 寻找一组解 , 使得 , 是困难的.

承诺

定义 1.4 (Pedersen 承诺). 证明者需要向验证者证明其知道 . 利用群 中公开的生成元 , 证明者随机选取致盲因子 , 计算 并将 发送给验证者. 当需要验证时, 证明者将 发送给验证者, 验证者计算并证明等式是否成立.

Pedersen 承诺具有完全掩藏性和计算绑定性. 掩藏性指的是只有承诺 的情况下无法直接得到 的信息; 绑定性指的是给出承诺 后证明者无法更改信息.

Pedersen 承诺具有同态性, 这是因为群 -模的结构. 同态性的好处是在公开关于初始值的多项式时, 可以只发送致盲因子的多项式 (发送一个值) 达到打开承诺的目的. 比如说证明者生成了 两个承诺, 当其需要打开 时, 其只需要发送 两个值即可, 这样不会单独暴露 的信息.

我们可以把 Pedersen 承诺推广到需要同时证明多个量 , 的情况. 此时我们利用公开的生成元 , 以及 , 计算 并将 发送给验证者. 在离散对数困难性假设的前提下, 对于随机选取的 , 在多项式时间内无法找到这些生成元之间的线性关系, 从而这一承诺是计算可靠的 (是绑定的) .

2内积论证

我们给出内积论证的定义:

定义 2.1 (内积论证). 给定公开的生成元 , 证明者发给验证者的 , , 证明者需要向验证者证明其知道两个向量 , 使得

一种变种为:

定义 2.2. 给定公开的生成元 , 证明者发给验证者的 , 证明者需要向验证者证明其知道两个向量 , 使得

3范围证明

对于 , 令 . 特别地 .

证明者需要在 Pedersen 承诺的基础上向验证者证明 , 其中 一般取 2 的幂次. 令 在二进制表示下的各位构成的向量, 即 . 令 , 那么应当有 .

当向量 时, 对任意的 . 反过来对任意取定的 , 当 随机选取时, 的概率不超过 (考虑关于 的不超过 次多项式, 至多有 个不重复的根) 对于较大的 (Bulletproofs 考虑 ) 这一情况可以忽略不计.

于是对于验证者提供的随机的 , 只需要验证

对于验证者提供的随机的 , 将上述式子组合得到等号右边进行一些合并: 那么(1)

其中

注意到 都由验证者提供, 所以 可以由验证者自行算出.

为了验证 (1) 成立, 一般需要将内积的两个向量发给验证者, 但这当然会暴露关于 的信息 (想象一下不诚实的验证者使用了 , 从而得到了 的信息) ;

这里采用的处理方法是证明者引入随机的掩盖向量 并承诺; 将原本内积中的 变更为 . 这样左边的内积记为 , 其中 , .

证明者将 承诺给验证者 (因为这些系数都包含 , 所以不会暴露关于 的信息. 对于验证者随机选取的 , 证明者计算 , , , 将 发送给验证者, 将 发给验证者.

验证者得到 的 Pedersen 承诺后利用同态可以算出 的 Pedersen 承诺, 但仍然需要验证几件事情:

1.

, ;

2.

;

3.

为了验证 , 利用 的 Pedersen 承诺 , 验证者计算等式于是证明者需要保证此时验证者只需验证

为了验证 , , 我们利用已有的承诺 , . 那么第一项很容易拆成 . 第二项较为复杂: 第三项中注意到 同时出现, 所以可以设 , 此时有(2)其中 可以由验证者得到 后自行计算, 需要由证明者发给验证者.

以下我们写出具体的协议步骤. (待整理) 记证明者为 , 验证者为 , 公开的生成元为 .

1.

: ,

2.

:

3.

:

4.

: , ,

5.

:

6.

:

7.

:

8.

: ,

9.

: , , .

10.

:

11.

:

12.

:

13.

: , ; ;

14.

: ,

15.

:

16.

: ,

17.

验证: , ,

4基于对数内积证明的改进

注意到最后一步中后两个式子形同于在 处对 的内积论证, 所以可以调用优化, 不直接发送 , 将发送的元素个数从 降低到 .