65、低次多项式的高效批量零知识证明

低次多项式的高效批量零知识证明

1. 引言

在密码学和相关领域中,零知识证明是一种强大的工具,它允许一方(证明者)向另一方(验证者)证明某个陈述的真实性,而不泄露除该陈述为真之外的任何额外信息。本文将介绍低次多项式的高效批量零知识证明协议,该协议在多个应用场景中具有重要的价值。

2. 基本概念与原理

2.1 矩阵可逆性与多项式提取

给定一个可逆矩阵,对于任意(0 \leq k \leq m),可以通过对矩阵的列进行线性组合得到一个向量((0, \ldots, 0, 1, 0, \ldots, 0)^T),其中第(k)个元素为(1)。利用这个性质,对验证方程(com(\overline{h} 0, \ldots, \overline{h}_n; \overline{r}) = \sum {i=0}^{m} H_i x^i)进行相同的线性组合,就可以找到每个(H_k)的开放值。

定义提取的多项式向量为(h(X) = \sum_{i=0}^{m} h_{i,0} X^i + \sum_{j=1}^{n} \left(\sum_{i=0}^{m} h_{i,j} X^i\right) X^{(j - 1)m + d}),这是一个次数为(N)的多项式向量。根据承诺方案的绑定属性,对于每个接受的转录本,有(\overline{h} k = \sum {i=0}^{m} h_{i,0} (x^{(k)})^i + \sum_{j=1}^{n} \left(\sum_{i=0}^{m} h_{i,j} (x^{(k)})^i\right) (x^{(k)})^{(j - 1)m + d}),这表明所有开放值与提取的多项式(h(X))是一致的。

2.2 通信与计算成本

  • 通信成本 :证明者需要向验证者发送(m + 1)个群元素和(l(n + 1) + 1)个域元素。
  • 计算成本
    • 证明者的计算主要由(m + 1)次宽度为(l(n + 1) + 1)的多指数运算主导,大约需要(\frac{lmn}{\log \ln} + \frac{l}{\log l})次指数运算。
    • 验证者的计算主要由一次宽度为(l(n + 1) + m + 1)的多指数运算主导,大约需要(\frac{\ln + m}{\log(\ln + m)})次指数运算。

3. 低次关系的批量协议

3.1 协议背后的直觉

该协议受到拉格朗日插值多项式的启发,将同一多项式等式的多个实例嵌入到一个单一的多项式中。通过在插值点处评估该多项式,可以恢复出单个实例。

具体来说,设(z_1, \ldots, z_m)是(\mathbb{Z} p)中的不同点,(l_1(X), \ldots, l_m(X))是它们对应的拉格朗日多项式,满足(l_i(z_j) = \delta {i,j}),其中(\delta_{i,j})是克罗内克符号。令(l_0(X) = \prod_{i=1}^{m} (X - z_i))。

证明者生成一系列承诺:
(A_0 = com(a_{0,1}, a_{0,2}, \ldots, a_{0,n} ; r_0 ))
(A_1 = com(a_{1,1}, a_{1,2}, \ldots, a_{1,n} ; r_1 ))
(\cdots)
(A_m = com(a_{m,1}, a_{m,2}, \ldots, a_{m,n} ; r_m ))

其中,(a_{0,1}, \ldots, a_{0,n} \in \mathbb{Z} {l_a}^p)是随机选择的盲值,与见证值(a {1,1}, \ldots, a_{m,n})无关。在收到验证者的随机挑战(x)后,证明者为每个(j \in [n])向验证者发送(\overline{a} j = \sum {i=0}^{m} a_{i,j} l_i(x))。

验证者检查收到的(\overline{a} j)与承诺(A_i)是否一致,这证明了证明者对(a)值的知识。接下来,需要证明(a {i,j}, b_{i,j})满足陈述中的多项式关系。令(\overline{b} j = \sum {i=1}^{m} b_{i,j} l_i(x)),验证者使用(\overline{a} j)和(\overline{b}_j)对每个(j)评估(P)和(Q)。根据(\overline{a}_j)和(\overline{b}_j)的定义,在插值点(z_i)处评估时,可以得到原始多项式的单个评估值(P(a {i,j}, b_{i,j}))。这意味着(P(\overline{a}_j, \overline{b}_j) \equiv 0 \mod l_0(x)),即(P(\overline{a}_j, \overline{b}_j))是(l_0(X))的倍数。证明者需要提前对(\frac{P(\overline{a}_j, \overline{b}_j)}{l_0(x)})的系数进行承诺,并使用多项式承诺方案同时对每个(j)实现这一点。

2.2 完整协议流程

以下是完整的协议流程:
1. 公共参考字符串 :(crs = (ck, z_1, \ldots, z_m)),其中(ck \leftarrow Gen(1^{\lambda})),(z_1, \ldots, z_m)是(\mathbb{Z} p)中的不同点,定义了拉格朗日多项式(l_1(X), \ldots, l_m(X))和(l_0(X) = \prod {j=1}^{m} (X - z_j))。
2. 陈述 :({C_i} {i \in [m]}, {b {i,j}} {i \in [m], j \in [n]}, P, Q)多项式。
3. 证明者的见证 :({a
{i,j}} {i \in [m], j \in [n]}, {r_i} {i \in [m]}),使得(P(a_{i,j}, b_{i,j}) = 0)对于(i \in [m], j \in [n])成立,并且(C_i = com(Q(a_{i,1}, b_{i,1}), Q(a_{i,2}, b_{i,2}), \ldots, Q(a_{i,n}, b_{i,n}); r_i))对于(i \in [m])成立。
4. 证明者到验证者的消息(第一轮)
- 选择(r_0, s_0, \ldots, s_m \leftarrow \mathbb{Z} p),(a {0,1}, \ldots, a_{0,n} \leftarrow \mathbb{Z} {l_a}^p)和(c_1, \ldots, c_n \leftarrow \mathbb{Z} {l_Q}^p)。
- 计算(C_0 = Com_{ck}(c_1, \ldots, c_n; r_0))和(A_i = Com_{ck} (a_{i,1}, \ldots, a_{i,n}; s_i))对于(i \in {0} \cup [m])。
- 定义(\overline{a} j(X) = \sum {i=0}^{m} a_{i,j} l_i(X)),(\overline{b} j(X) = \sum {i=1}^{m} b_{i,j} l_i(X))。
- 计算(P_j^ (X) = \frac{P(\overline{a}_j(X), \overline{b}_j(X))}{l_0(X)}),(Q_j^ (X) = c_j + \frac{\sum_{i=1}^{m} Q(a_{i,j}, b_{i,j}) l_i(X) - Q(\overline{a} j(X), \overline{b}_j(X))}{l_0(X)})。
- 运行(PolyCommit(ck, {P_j^ (X)} {j \in [n]}) \rightarrow (msg {P,1}, st_P))和(PolyCommit(ck, {Q_j^ (X)}
{j \in [n]}) \rightarrow (msg_{Q,1}, st_Q))。
- 证明者向验证者发送({A_i} {i \in [m]}),(msg {P,1})和(msg_{Q,1})。
5. 验证者到证明者的消息 :发送随机挑战(x \leftarrow \mathbb{Z} p \setminus {z_1, \ldots, z_m})给证明者。
6. 证明者到验证者的消息(第二轮)
- 运行(PolyEval(st_P, x) \rightarrow msg
{P,2})和(PolyEval(st_Q, x) \rightarrow msg_{Q,2})。
- 计算(\overline{a} j = \overline{a}_j(x)),(\overline{r} = \sum {i=0}^{m} r_i l_i(x)),(\overline{s} = \sum_{i=0}^{m} s_i l_i(x))。
- 证明者向验证者发送({\overline{a} j} {j \in [n]}),(\overline{r}),(\overline{s}),(msg_{P,2})和(msg_{Q,2})。
7. 验证者的验证步骤
- 运行(PolyVerify(ck, msg_{P,1}, msg_{P,2}, x) \rightarrow \overline{p} = (\overline{p} 1, \ldots, \overline{p}_n))和(PolyVerify(ck, msg {Q,1}, msg_{Q,2}, x) \rightarrow \overline{q} = (\overline{q} 1, \ldots, \overline{q}_n))。
- 如果(\overline{p} = \perp)或(\overline{q} = \perp),则返回(0)。
- 检查(Com
{ck}(\overline{a} 1, \ldots, \overline{a}_n; \overline{s}) = \sum {i=0}^{m} A_i l_i(x))。
- 计算(\overline{b} j = \overline{b}_j(x))并检查对于所有(j \in [n]),(P(\overline{a}_j, \overline{b}_j) = \overline{p}_j l_0(x))。
- 检查(Com
{ck}({\overline{q} j l_0(x) + Q(\overline{a}_j, \overline{b}_j)} {j \in [n]}; \overline{r}) = \sum_{i=0}^{m} C_i l_i(x))。
- 如果所有检查都满足,则验证者输出(1),否则输出(0)。

2.3 协议性质

  • 完美完备性 :协议的完美完备性由(PolyCommit)子协议的完美完备性以及仔细的检查得出。
  • 完美特殊诚实验证者零知识 :存在一个高效的模拟器,它可以模拟协议的执行,使得模拟的证明与真实证明具有相同的分布。
  • 特殊稳健性 :假设对于相同的第一条消息和不同的挑战(x),有(ms = (m \max(d_P, d_Q) + 1))个接受的转录本。通过对验证方程进行线性组合,可以提取出每个承诺(A_i)的开放值({a_{i,j}} {j \in [n]})和(s_i)。同时,根据多项式承诺协议的特殊稳健性,可以提取出多项式(P_j^ (X))和(Q_j^ (X)),从而证明(P(a {i,j}, b_{i,j}) = 0)和(Q(a_{i,j}, b_{i,j}) = c_{i,j})对于所有(i \in [m], j \in [n])成立。

2.4 通信与计算成本

  • 通信成本 :设(k_1, k_2)是在(PolyCommit)子协议中对(P^ )进行承诺时使用的矩阵的维度,(t_1, t_2)是对(Q^ )进行承诺时使用的矩阵的维度。协议的总通信成本为(m + k_1 + t_1 + 4)个群元素和(l_a n + l_P n(k_2 + 1) + l_Q n(t_2 + 1) + 4)个域元素。
    • 单证明情况 :当(t = mn = 1)时,根据不同的参数选择,可以优化通信成本。例如,当协议在有限域的乘法子群上实例化时,设置(k_1 = t_1 = 1),(k_2 = d_P - 1),(t_2 = d_Q - 1),协议的通信成本为(7)个群元素加上(l_a + l_P d_P + l_Q d_Q + 4)个域元素。当使用椭圆曲线群时,可以通过选择合适的参数进一步优化。
    • 批量证明情况 :当(t)较大时,选择合适的参数可以使通信成本与(\sqrt{t})成正比,而不是与(t)成正比。
  • 计算成本
    • 证明者的计算成本主要由(O\left(\frac{l_a t}{\log l_a n} + \frac{l_Q n}{\log l_Q n} + \frac{l_P d_P t}{\log l_P n k_2} + \frac{l_P d_P t}{\log l_P n t_2}\right))次指数运算主导。在(\mathbb{Z}_p)上,证明者还需要进行(O((l_a + l_b + l_P) t d_P \log m d_P + (l_a + l_b + l_Q) t d_Q \log m d_Q) + t d_P Eval_P + t d_Q Eval_Q)次乘法运算,其中(Eval_P)和(Eval_Q)分别是评估(P)和(Q)一次的成本。
    • 验证者的计算成本主要由(O\left(\frac{m + l_a n}{\log(m + l_a n)} + \frac{m + l_Q n}{\log(m + l_Q n)} + \frac{k_1 + l_P n k_2}{\log(k_1 + l_P n k_2)} + \frac{t_1 + l_Q n t_2}{\log(t_1 + l_Q n t_2)}\right))次指数运算主导。在(\mathbb{Z}_p)上,验证者需要进行(O((l_P + l_Q) n) + n Eval_P + n Eval_Q)次乘法运算。

4. 应用场景

4.1 公共列表成员证明

在成员证明中,证明者希望说服验证者一个承诺包含给定列表(L = (\lambda_0, \ldots, \lambda_{N - 1}))中的一个值。
- 陈述 :((c, \lambda_0, \ldots, \lambda_{N - 1}))
- 见证 :(\ell, r),使得(c = Com_{ck}(\lambda_{\ell}; r))
- 多项式编码
- 二进制编码 :设(m = \log_2 N),((l_0, \ldots, l_{m - 1}))是(\ell)的二进制展开,满足(l_j(1 - l_j) = 0)对于(0 \leq j \leq m - 1)。定义(l_{j,1} := l_j)和(l_{j,0} = 1 - l_j),则(\sum_{i=0}^{N - 1} \lambda_i \prod_{j=0}^{m - 1} l_{j,i_j} = \lambda_{\ell}),其中((i_0, \ldots, i_{m - 1}))是(i)的二进制展开。
- (n)进制编码 :设(m = \log_n N),((l_0, \ldots, l_{m - 1}))是(\ell)的(n)进制展开。使用克罗内克符号(\delta_{rs}),可以得到类似的多项式编码。
- 参数选择 :根据不同的编码方式,选择合适的参数(l_a, l_b, l_P, d_P, l_Q, d_Q)。
- 效率分析 :当(t = 1)且目标是使用恒定数量的群元素时,简单的二进制版本的证明具有最低的通信成本。否则,在(t)较大或(t = 1)且目标是最小化通信元素总数的情况下,设置(n = 3)可以得到最低的通信成本。

4.2 多项式评估证明

在多项式评估证明中,证明者有一个次数为(N)的多项式(h(X)),以及对一个点(u)和其在该点的声称评估值(v)的承诺。证明者希望说服验证者承诺的评估值是正确的。
- 陈述 :((c_u, c_v, h(X)))
- 见证 :(u, \eta, v, \nu),使得(c_u = Com_{ck}(u; \eta)),(c_v = Com_{ck}(v, \nu)),且(h(u) = v)。
- 多项式编码
- 二进制编码 :设(u_i = u^{2^i})对于(0 \leq i \leq \log_2 N - 1),则(h(u) = \sum_{i=0}^{N - 1} h_i \prod_{j=0}^{\log_2 N - 1} u_{i_j}^j)。
- (n)进制编码 :设(u_i = u^{n^i})对于(0 \leq i \leq \log_n N - 1),可以得到类似的多项式编码。
- 参数选择 :根据不同的编码方式,选择合适的参数(l_a, l_b, l_P, d_P, l_Q, d_Q)。
- 效率分析 :当(t = 1)且目标是使用恒定数量的群元素时,设置(n = 4)可以得到最低的通信成本。当(t = 1)且目标是最小化通信元素总数时,设置(n = \frac{\log_2 N}{\log_2 \log_2 N})。当(t)较大时,设置(n = 6)可以得到最低的通信成本。

4.3 范围证明

在范围证明中,证明者有一个承诺和一个范围([A; B]),希望说服验证者承诺的值落在给定的范围内。一种常见的策略是将承诺的值用二进制表示,证明所有的位都是(0)或(1),并且它们的加权和在范围内。为了简单起见,这里主要关注区间([0, N]),其中(N = 2^m - 1)。

5. 总结

本文介绍的低次多项式的高效批量零知识证明协议在多个应用场景中具有重要的优势。通过合理选择参数和编码方式,可以在不同的情况下优化通信和计算成本。该协议为密码学和相关领域的应用提供了一种强大的工具,能够在保证安全性的同时,提高证明的效率。

以下是协议流程的 mermaid 流程图:

graph TD;
    A[证明者选择随机值并计算承诺] --> B[证明者发送承诺给验证者];
    B --> C[验证者发送随机挑战 x 给证明者];
    C --> D[证明者计算并发送响应给验证者];
    D --> E[验证者进行验证];
    E --> F{验证是否通过};
    F -- 是 --> G[验证者输出 1];
    F -- 否 --> H[验证者输出 0];

以下是不同应用场景的参数选择和效率总结表格:
| 应用场景 | 编码方式 | 参数选择 | 最低通信成本情况 |
| ---- | ---- | ---- | ---- |
| 成员证明 | 二进制 | (l_a = \log_2 N),(l_b = N),(l_P = \log_2 N),(d_P = 2),(l_Q = 1),(d_Q = \log_2 N) | (t = 1)且目标是恒定群元素数量 |
| 成员证明 | (n)进制 | (l_a = n \log_n N),(l_b = N),(l_P = n \log_n N),(d_P = 2),(l_Q = 1),(d_Q = \log_n N) | (t)较大或(t = 1)且目标是最小化通信元素总数,(n = 3) |
| 多项式评估证明 | 二进制 | (l_a = \log_2 N),(l_b = N),(l_P = \log_2 N - 1),(d_P = 2),(l_Q = 1),(d_Q = \log_2 N) | (t = 1)且目标是恒定群元素数量,(n = 4) |
| 多项式评估证明 | (n)进制 | (l_a = \log_n N),(l_b = N),(l_P = \log_n N),(d_P = n),(l_Q = 1),(d_Q = \log_n N) | (t)较大,(n = 6);(t = 1)且目标是最小化通信元素总数,(n = \frac{\log_2 N}{\log_2 \log_2 N}) |

4.3 范围证明(续)

  • 陈述 :((c, N)),其中 (c) 是承诺,(N = 2^m - 1) 是范围上限。
  • 见证 :(x, r) ,使得 (c = Com_{ck}(x; r)) 且 (0 \leq x \leq N) 。
  • 多项式编码
    • 将 (x) 写成二进制形式 (x=\sum_{i = 0}^{m - 1}x_i2^i) ,其中 (x_i\in{0, 1}) 。
    • 定义 (P(a,b)) 来保证 (x_i(1 - x_i)=0) ,即所有位都是 (0) 或 (1) 。设 (a=(x_0,\cdots,x_{m - 1})) ,则 (P(a,b)=(x_0(1 - x_0),\cdots,x_{m - 1}(1 - x_{m - 1}))) 。
    • 定义 (Q(a,b)) 来保证这些位的加权和在范围内。设 (b=(2^0,\cdots,2^{m - 1})) ,则 (Q(a,b)=\sum_{i = 0}^{m - 1}x_i2^i - x) 。
  • 参数选择
    • (\ell_a = m) ,(\ell_b = m) ,(\ell_P = m) ,(d_P = 2) ,(\ell_Q = 1) ,(d_Q = 1) 。
  • 效率分析 :通过批量协议,可以在一次证明中处理多个范围证明,从而提高效率。通信成本和计算成本可以根据前面提到的批量协议的参数选择方法进行优化。

5. 不同应用场景的效率对比

应用场景 通信成本优化情况 计算成本特点
公共列表成员证明 二进制编码在 (t = 1) 且追求恒定群元素时最优;(n = 3) 的 (n) 进制编码在其他情况更优 证明者和验证者的计算成本与所选编码和参数有关
多项式评估证明 (n = 4) 用于 (t = 1) 恒定群元素;(n = 6) 用于 (t) 大时;(n=\frac{\log_2 N}{\log_2 \log_2 N}) 用于 (t = 1) 最小化元素总数 计算成本受多项式次数和编码方式影响
范围证明 可通过批量协议优化,根据批量协议参数选择优化通信和计算成本 主要计算在于保证位的取值和加权和在范围内

6. 操作步骤总结

6.1 公共列表成员证明操作步骤
  1. 确定参数 :根据列表长度 (N) ,选择合适的编码方式(二进制或 (n) 进制),并确定 (\ell_a, \ell_b, \ell_P, d_P, \ell_Q, d_Q) 。
  2. 多项式编码 :按照所选编码方式对见证值进行多项式编码。
  3. 运行批量协议
    • 证明者按照批量协议流程选择随机值、计算承诺、响应挑战。
    • 验证者发送挑战并进行验证。
6.2 多项式评估证明操作步骤
  1. 确定参数 :根据多项式次数 (N) ,选择合适的编码方式(二进制或 (n) 进制),确定 (\ell_a, \ell_b, \ell_P, d_P, \ell_Q, d_Q) 。
  2. 多项式编码 :将点 (u) 的幂次按照所选编码方式进行编码,构建 (P) 和 (Q) 多项式。
  3. 运行批量协议 :同公共列表成员证明的批量协议流程。
6.3 范围证明操作步骤
  1. 确定参数 :根据范围上限 (N = 2^m - 1) ,确定 (\ell_a, \ell_b, \ell_P, d_P, \ell_Q, d_Q) 。
  2. 多项式编码 :将承诺值写成二进制形式,构建 (P) 和 (Q) 多项式保证位的取值和加权和在范围内。
  3. 运行批量协议 :证明者和验证者按照批量协议流程完成证明和验证。

7. 技术点深入分析

7.1 拉格朗日插值多项式的作用

拉格朗日插值多项式在批量协议中起到了关键作用。它允许将多个多项式实例嵌入到一个单一的多项式中,通过在插值点处评估该多项式,可以恢复出单个实例。这种方法减少了证明的数量,提高了效率。例如,在批量协议中,证明者通过计算 (\overline{a} j(X)=\sum {i = 0}^{m}a_{i,j}l_i(X)) 和 (\overline{b} j(X)=\sum {i = 1}^{m}b_{i,j}l_i(X)) ,将多个 (a_{i,j}) 和 (b_{i,j}) 的值组合成一个多项式,验证者可以通过在随机挑战 (x) 处评估这些多项式来验证证明者的知识。

7.2 多项式承诺方案的重要性

多项式承诺方案是协议的核心组成部分。它允许证明者对多项式进行承诺,并在后续提供多项式在特定点的评估值,同时保证承诺的绑定性和隐藏性。在批量协议中,证明者使用 (PolyCommit) 对 (P_j^ (X)) 和 (Q_j^ (X)) 进行承诺,验证者使用 (PolyVerify) 来验证这些承诺和评估值的一致性。这种方案确保了证明的正确性和安全性。

7.3 参数选择的影响

参数选择直接影响协议的通信成本和计算成本。不同的应用场景需要根据具体需求选择合适的参数。例如,在单证明情况下,为了最小化通信成本,可以选择特定的矩阵维度;在批量证明情况下,通过合理选择 (m) 和 (n) ,可以使通信成本与 (\sqrt{t}) 成正比,而不是与 (t) 成正比。因此,在实际应用中,需要根据具体的场景和性能要求进行参数的优化选择。

8. 总结与展望

本文介绍的低次多项式的高效批量零知识证明协议为多个应用场景提供了强大的支持。通过拉格朗日插值多项式和多项式承诺方案,协议实现了多个证明的批量处理,提高了效率。不同的应用场景可以根据自身特点选择合适的编码方式和参数,以优化通信成本和计算成本。

未来,可以进一步研究如何在更多复杂的场景中应用该协议,例如处理更高次的多项式或更复杂的关系。同时,可以探索更高效的多项式承诺方案和参数选择方法,以进一步降低通信成本和计算成本,推动零知识证明技术在更多领域的应用。

以下是范围证明的 mermaid 流程图:

graph TD;
    A[证明者确定见证和范围] --> B[证明者进行多项式编码];
    B --> C[证明者运行批量协议选择随机值和计算承诺];
    C --> D[证明者发送承诺给验证者];
    D --> E[验证者发送随机挑战 x 给证明者];
    E --> F[证明者计算并发送响应给验证者];
    F --> G[验证者进行验证];
    G --> H{验证是否通过};
    H -- 是 --> I[验证者输出 1];
    H -- 否 --> J[验证者输出 0];

综上所述,低次多项式的高效批量零知识证明协议在密码学和相关领域具有广阔的应用前景,通过不断的优化和改进,将为信息安全和隐私保护提供更强大的支持。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值