在内积证明(inner product arguments)的语境下,范围证明是指证明标量 v v v 已经被承诺为 V V V ,并且对于某个非负整数 n n n ,v v v 小于 2 n 2^n 2 n 。
本文将展示 Bulletproofs 论文是如何构建这种证明的。其高层理念是,如果我们能证明向量 a L \mathbf{a}_L a L 仅由 1 和 0 组成,并且 a L \mathbf{a}_L a L 是 v v v 的二进制表示,那么 v v v 必然小于 2 n 2^n 2 n 。这就好比说一个能装进 8 位无符号整数的数字必然小于 256。
使用 Bulletproofs 进行范围证明的优势在于,可以直接构建范围证明,而无需使用算术电路 。
Monero 使用了 Bulletproofs 范围证明 (即本文介绍的算法)来确保交易金额之和不为负数(在有限域 中,负数是指大于 p / 2 p/2 p /2 的元素,因为它们是小于或等于 p / 2 p/2 p /2 的元素的加法逆元,其中 p p p 是域的阶)。
本文是 ZK Bulletproofs 系列文章的一部分。
符号说明
0 n \mathbf{0}^n 0 n 是一个全零的 n n n 维向量。
1 n \mathbf{1}^n 1 n 是一个全 1 的 n n n 维向量。
2 n \mathbf{2}^n 2 n 是一个 n n n 维向量 [ 1 , 2 , 4 , 8 , . . . , 2 n − 1 ] [1,2,4,8,...,2^{n-1}] [ 1 , 2 , 4 , 8 , ... , 2 n − 1 ] 。
y n \mathbf{y}^n y n 是一个 n n n 维向量 [ 1 , y , y 2 , y 3 , . . . , y n − 1 ] [1, y, y^2, y^3, ..., y^{n-1}] [ 1 , y , y 2 , y 3 , ... , y n − 1 ] 。
y − n \mathbf{y}^{-n} y − n 是一个 n n n 维向量 [ 1 , y − 1 , y − 2 , . . . , y − ( n − 1 ) ] [1, y^{-1}, y^{-2}, ..., y^{-(n-1)}] [ 1 , y − 1 , y − 2 , ... , y − ( n − 1 ) ] 。
注意 y n ∘ y − n = 1 n \mathbf{y}^n\circ\mathbf{y}^{-n}=\mathbf{1}^n y n ∘ y − n = 1 n 。
范围证明概述
要证明 V V V 是对一个值小于 2 n 2^n 2 n 的标量的承诺,需要证明以下几点:
a L \mathbf{a}_L a L 是二进制的(只包含值 0 0 0 和 1 1 1 )。
内积 ⟨ a L , 2 n ⟩ = v \langle \mathbf{a}_L,\mathbf{2}^n\rangle=v ⟨ a L , 2 n ⟩ = v 。
第二点很容易证明,我们进行常规的内积证明,然后揭示 2 n \mathbf{2}^n 2 n 是承诺中的向量之一——或者让验证者自己构建 2 n \mathbf{2}^n 2 n 的承诺。然而,在没有算术电路的情况下证明 a L \mathbf{a}_L a L 是二进制的,需要用到一些代数技巧。
四个实用的技巧
Bulletproofs 论文隐式地使用了四个代数技巧,在直接查看范围证明算法之前,最好先显式地讲解它们。
1. 证明 a L \mathbf{a}_L a L 是二进制的
声明 a L \mathbf{a}_L a L 是二进制的等价于以下两个断言:
a R = a L − 1 n \mathbf{a}_R = \mathbf{a}_L-\mathbf{1}^n a R = a L − 1 n
a L ∘ a R = 0 n \mathbf{a}_L \circ \mathbf{a}_R = \mathbf{0}^n a L ∘ a R = 0 n
例如,如果 a L = [ 1 , 0 , 0 , 1 ] \mathbf{a}_L = [1,0,0,1] a L = [ 1 , 0 , 0 , 1 ] ,那么 a R = [ 0 , − 1 , − 1 , 0 ] \mathbf{a}_R=[0,-1,-1,0] a R = [ 0 , − 1 , − 1 , 0 ] 。
在这种情况下,a L ∘ a R = 0 n \mathbf{a}_L \circ\mathbf{a}_R=\mathbf{0}^n a L ∘ a R = 0 n ,因为
[ 1 , 0 , 0 , 1 ] ∘ [ 0 , − 1 , − 1 , 0 ] = [ 0 , 0 , 0 , 0 ] = 0 n [1,0,0,1] \circ [0,-1,-1,0] = [0,0,0,0] = \mathbf{0}^n [ 1 , 0 , 0 , 1 ] ∘ [ 0 , − 1 , − 1 , 0 ] = [ 0 , 0 , 0 , 0 ] = 0 n
现在考虑 a L \mathbf{a}_L a L 不是二进制的情况,例如 [ 2 , 1 , 0 , 0 ] [2, 1, 0, 0] [ 2 , 1 , 0 , 0 ] 。a R \mathbf{a}_R a R 将是 [ 1 , 0 , − 1 , − 1 ] [1,0,-1,-1] [ 1 , 0 , − 1 , − 1 ] ,a L \mathbf{a}_L a L 和 a R \mathbf{a}_R a R 的 Hadamard 乘积(Hadamard product)将是 [ 2 , 0 , 0 , 0 ] ≠ 0 n [2,0,0,0] \neq \mathbf{0}^n [ 2 , 0 , 0 , 0 ] = 0 n 。
更一般地说,如果 a L \mathbf{a}_L a L 有一个非二进制的元素,该元素减去 1 1 1 后,在 a R \mathbf{a}_R a R 中对应的结果元素将是非零的。当计算 Hadamard 乘积时,在那个特定的索引处,a L \mathbf{a}_L a L 和 a R \mathbf{a}_R a R 都将是非零的,其乘积也是非零的,这意味着 a L ∘ a R ≠ 0 n \mathbf{a}_L \circ \mathbf{a}_R \neq \mathbf{0}^n a L ∘ a R = 0 n 。
然而,如果 a L \mathbf{a}_L a L 中某个特定元素为 1 1 1 ,那么 a R \mathbf{a}_R a R 在该索引处将为 0 0 0 ,因此在该索引处的 Hadamard 乘积也将为零。
最后,如果 a L \mathbf{a}_L a L 中某个特定元素为 0 0 0 ,那么 a R \mathbf{a}_R a R 在该索引处将为 − 1 -1 − 1 ,它们在该索引处的逐元素乘积仍然为零。
因此,如果 a L \mathbf{a}_L a L 是二进制的并且 a R \mathbf{a}_R a R 按 a R = a L − 1 \mathbf{a}_R = \mathbf{a}_L-\mathbf{1} a R = a L − 1 计算,那么 a L ∘ a R = 0 n \mathbf{a}_L \circ \mathbf{a}_R = \mathbf{0}^n a L ∘ a R = 0 n 。
2. 证明一个向量为全零
假设我们希望证明 Pedersen 承诺 A A A 包含一个全零向量。我们创建 Pedersen 承诺 A = ⟨ a , G ⟩ + α B A = \langle\mathbf{a},\mathbf{G}\rangle + \alpha B A = ⟨ a , G ⟩ + α B ,并希望向验证者证明 a = 0 n \mathbf{a}=\mathbf{0}^n a = 0 n 。
看起来仅仅发送盲化因子 α \alpha α 就足够了,但为了让我们的方案更具可组合性,我们不希望泄露盲化因子,因为这可能会影响我们创建的其他承诺。
相反,证明者将 A A A 发送给验证者,验证者回复一个充满随机值的向量 r \mathbf{r} r 。现在证明者必须证明
⟨ a , r ⟩ = 0 \langle\mathbf{a},\mathbf{r}\rangle = 0 ⟨ a , r ⟩ = 0
请注意,这是一个概率测试。在 a ≠ 0 n \mathbf{a}\neq\mathbf{0}^n a = 0 n 的情况下,⟨ a , r ⟩ = 0 \langle\mathbf{a},\mathbf{r}\rangle=0 ⟨ a , r ⟩ = 0 是有可能的,但概率可以忽略不计;同时证明者不可能伪造这样的 a \mathbf{a} a ,因为他们无法预先知道 r \mathbf{r} r 会是什么。
然而,传输 r \mathbf{r} r 需要 O ( n ) \mathcal{O}(n) O ( n ) 的通信开销,因此验证者改为只发送单个随机元素 y y y ,而证明者计算 y n \mathbf{y}^n y n 并将 y n \mathbf{y}^n y n 用作随机向量。
然后,证明者证明 ⟨ a , y n ⟩ = 0 \langle\mathbf{a},\mathbf{y}^n\rangle=0 ⟨ a , y n ⟩ = 0 。
3. 证明内积具有 ⟨ a L , a R ∘ y n ⟩ \langle\mathbf{a}_L,\mathbf{a}_R\circ\mathbf{y}^n\rangle ⟨ a L , a R ∘ y n ⟩ 的形式,其中 y y y 由验证者选择,且证明者计算 y n \mathbf{y}^n y n
我们还没有机制来证明 a L ∘ a R = 0 n \mathbf{a}_L\circ\mathbf{a}_R=\mathbf{0}^n a L ∘ a R = 0 n ,因为这是一个 Hadamard 乘积,而不是内积。然而,声明向量 a L ∘ a R \mathbf{a}_L\circ\mathbf{a}_R a L ∘ a R 恒等于 0 n \mathbf{0}^n 0 n 就相当于声明 ⟨ a L ∘ a R , y n ⟩ = 0 \langle\mathbf{a}_L\circ\mathbf{a}_R,\mathbf{y}^n\rangle=0 ⟨ a L ∘ a R , y n ⟩ = 0 。根据内积规则,我们可以将 a R \mathbf{a}_R a R 移到内积的另一侧,现在我们得到 ⟨ a L , a R ∘ y n ⟩ = 0 \langle\mathbf{a}_L,\mathbf{a}_R\circ\mathbf{y}^n\rangle=0 ⟨ a L , a R ∘ y n ⟩ = 0 。
验证者将收到对 a L \mathbf{a}_L a L 和 a R \mathbf{a}_R a R 的承诺,而不是对 a R ∘ y n \mathbf{a}_R\circ\mathbf{y}^n a R ∘ y n 的承诺。这就需要验证者自行构建对 a R ∘ y n \mathbf{a}_R\circ\mathbf{y}^n a R ∘ y n 的承诺,以确信证明者在内积中使用了 a R ∘ y n \mathbf{a}_R\circ\mathbf{y}^n a R ∘ y n 作为第二个向量。
我们所依赖的关键技巧是,证明者使用基向量 G \mathbf{G} G 和 H \mathbf{H} H 来对其向量进行承诺,而验证者使用 G \mathbf{G} G 和 H ∘ y − n \mathbf{H}\circ\mathbf{y}^{-n} H ∘ y − n 。
当证明者发送求值结果 r u \mathbf{r}_u r u 时,证明者必须确保 y n \mathbf{y}^n y n 项会与验证者基向量 y − n ∘ H \mathbf{y}^{-n}\circ\mathbf{H} y − n ∘ H 中的 y − n \mathbf{y}^{-n} y − n 相抵消。
具体来说,证明者构建承诺
A = ⟨ a L , G ⟩ + ⟨ a R , H ⟩ + α B S = ⟨ s L , G ⟩ + ⟨ s R , H ⟩ + β B \begin{align*}
A &= \langle\mathbf{a}_L,\mathbf{G}\rangle+\langle\mathbf{a}_R,\mathbf{H}\rangle+\alpha B\\
S &= \langle\mathbf{s}_L,\mathbf{G}\rangle+\langle\mathbf{s}_R,\mathbf{H}\rangle+\beta B
\end{align*} A S = ⟨ a L , G ⟩ + ⟨ a R , H ⟩ + α B = ⟨ s L , G ⟩ + ⟨ s R , H ⟩ + βB
并将 ( A , S ) (A, S) ( A , S ) 发送给验证者。由于在本例中 V V V 为零,所以不需要对 V V V 进行承诺并发送。
证明者的多项式将是
l ( x ) = a L + s L x r ( x ) = a R ∘ y n + s R ∘ y n x \begin{align*}
\mathbf{l}(x)&=\mathbf{a}_L + \mathbf{s}_Lx\\
\mathbf{r}(x)&=\mathbf{a}_R\circ\mathbf{y}^n + \boxed{\mathbf{s}_R\circ\mathbf{y}^n}x
\end{align*} l ( x ) r ( x ) = a L + s L x = a R ∘ y n + s R ∘ y n x
关键在于,证明者将 s R \mathbf{s}_R s R 与 y n \mathbf{y}^n y n 进行了 Hadamard 相乘。在以前,r ( x ) \mathbf{r}(x) r ( x ) 被计算为 r ( x ) = a R ∘ y n + s R x \mathbf{r}(x)=\mathbf{a}_R\circ\mathbf{y}^n + \mathbf{s}_Rx r ( x ) = a R ∘ y n + s R x (没有 y n ∘ s R \mathbf{y}^n\circ\mathbf{s}_R y n ∘ s R )。这将在稍后允许当验证者计算承诺 ⟨ r u , y − n ∘ H ⟩ \langle\mathbf{r}_u,\mathbf{y}^{-n}\circ\mathbf{H}\rangle ⟨ r u , y − n ∘ H ⟩ 时,抵消掉所有的 y n \mathbf{y}^n y n 项。在底层逻辑上,r u \mathbf{r}_u r u 是 ( a R + s R u ) ∘ y n (\mathbf{a}_R+\mathbf{s}_Ru)\circ\mathbf{y}^n ( a R + s R u ) ∘ y n ,因此当验证者计算 ⟨ ( a R + s R u ) ∘ y n , y − n ∘ H ⟩ \langle(\mathbf{a}_R+\mathbf{s}_Ru)\circ\mathbf{y}^n,\mathbf{y}^{-n}\circ\mathbf{H}\rangle ⟨( a R + s R u ) ∘ y n , y − n ∘ H ⟩ 时,y n \mathbf{y}^n y n 将被抵消,即:
⟨ ( a R + s R u ) ∘ y n , y − n ∘ H ⟩ = ⟨ ( a R + s R u ) , y n ∘ y − n ∘ H ⟩ = ⟨ ( a R + s R u ) , 1 n ∘ H ⟩ = ⟨ ( a R + s R u ) , H ⟩ \begin{align*}
&\langle(\mathbf{a}_R+\mathbf{s}_Ru)\circ\mathbf{y}^n,\mathbf{y}^{-n}\circ\mathbf{H}\rangle\\
&=\langle(\mathbf{a}_R+\mathbf{s}_Ru),\mathbf{y}^n\circ\mathbf{y}^{-n}\circ\mathbf{H}\rangle\\
&=\langle(\mathbf{a}_R+\mathbf{s}_Ru),\mathbf{1}^n\circ\mathbf{H}\rangle\\
&=\langle(\mathbf{a}_R+\mathbf{s}_Ru),\mathbf{H}\rangle
\end{align*} ⟨( a R + s R u ) ∘ y n , y − n ∘ H ⟩ = ⟨( a R + s R u ) , y n ∘ y − n ∘ H ⟩ = ⟨( a R + s R u ) , 1 n ∘ H ⟩ = ⟨( a R + s R u ) , H ⟩
然而,证明者现在还不能计算 l ( x ) \mathbf{l}(x) l ( x ) 或 r ( x ) \mathbf{r}(x) r ( x ) ,因为验证者还没有发送 y y y 。因此,在收到 ( A , S ) (A, S) ( A , S ) 后,验证者发送 y y y ,证明者计算 y n \mathbf{y}^n y n 并计算多项式 t ( x ) t(x) t ( x ) :
t ( x ) = ⟨ l ( x ) , r ( x ) ⟩ = ⟨ a L , a R ∘ y n ⟩ + t 1 x + t 2 x 2 t(x)=\langle\mathbf{l}(x),\mathbf{r}(x)\rangle=\langle\mathbf{a}_L,\mathbf{a}_R\circ\mathbf{y}^n\rangle+t_1x+t_2x^2 t ( x ) = ⟨ l ( x ) , r ( x )⟩ = ⟨ a L , a R ∘ y n ⟩ + t 1 x + t 2 x 2
其中
t 1 = ⟨ a L , s R ∘ y n ⟩ + ⟨ s L , a R ∘ y n ⟩ t 2 = ⟨ s L , s R ∘ y n ⟩ \begin{align*}
t_1&=\langle\mathbf{a}_L,\mathbf{s}_R\circ\mathbf{y}^n\rangle + \langle\mathbf{s}_L,\mathbf{a}_R\circ\mathbf{y}^n\rangle\\
t_2&=\langle\mathbf{s}_L,\mathbf{s}_R\circ\mathbf{y}
^n\rangle
\end{align*} t 1 t 2 = ⟨ a L , s R ∘ y n ⟩ + ⟨ s L , a R ∘ y n ⟩ = ⟨ s L , s R ∘ y n ⟩
证明者将系数 t 1 t_1 t 1 和 t 2 t_2 t 2 承诺为
T 1 = t 1 G + τ 1 B T 2 = t 2 G + τ 2 B \begin{align*}
T_1&=t_1G+\tau_1B\\
T_2&=t_2G+\tau_2B
\end{align*} T 1 T 2 = t 1 G + τ 1 B = t 2 G + τ 2 B
并将 ( T 1 , T 2 ) (T_1, T_2) ( T 1 , T 2 ) 发送给验证者。验证者用 u u u 回应,证明者对向量多项式 l ( x ) \mathbf{l}(x) l ( x ) 和 r ( x ) \mathbf{r}(x) r ( x ) 进行求值:
l u = a L + s L u r u = a R ∘ y n + ( s R ∘ y n ) u t u = ⟨ l u , r u ⟩ π l r = α + β u π t = τ 1 u + τ 2 u 2 \begin{align*}
\mathbf{l}_u&= \mathbf{a}_L+\mathbf{s}_Lu\\
\mathbf{r}_u&= \mathbf{a}_R\circ\mathbf{y}^n+(\mathbf{s}_R\circ\mathbf{y}^n)u\\
t_u&=\langle\mathbf{l}_u,\mathbf{r}_u\rangle\\
\pi_{lr}&=\alpha + \beta u\\
\pi_t&=\tau_1u+\tau_2u^2
\end{align*} l u r u t u π l r π t = a L + s L u = a R ∘ y n + ( s R ∘ y n ) u = ⟨ l u , r u ⟩ = α + β u = τ 1 u + τ 2 u 2
注意,π t \pi_t π t 只包含 t 1 t_1 t 1 和 t 2 t_2 t 2 的盲化因子。在之前的实现中,π t \pi_t π t 被计算为 γ + τ 1 u + τ 2 u 2 \gamma + \tau_1u+\tau_2u^2 γ + τ 1 u + τ 2 u 2 ,其中 γ \gamma γ 是 V V V 的盲化因子,它也是多项式 t ( x ) t(x) t ( x ) 的常数项系数。
这里没有盲化因子 γ \gamma γ ,因为没有对 V V V 的承诺,也就是说 v v v 不是秘密的——它是 0 0 0 。证明者发送 ( l u , r u , t u , π l r , π t ) (\mathbf{l}_u, \mathbf{r}_u, t_u, \pi_{lr}, \pi_t) ( l u , r u , t u , π l r , π t ) ,验证者检查:
t u = ? ⟨ l u , r u ⟩ A + S u = ? ⟨ l u , G ⟩ + ⟨ r u , y − n ∘ H ⟩ + π l r B t u G = ? T 1 u + T 2 u 2 − π t B \begin{align*}
t_u&\stackrel{?}=\langle\mathbf{l}_u,\mathbf{r}_u\rangle\\
A+Su&\stackrel{?}=\langle\mathbf{l}_u,\mathbf{G}\rangle+\langle\mathbf{r}_u,\mathbf{y}^{-n}\circ\mathbf{H}\rangle+\pi_{lr}B\\
t_uG&\stackrel{?}{=} T_1 u + T_2 u^2 - \pi_t B\\
\end{align*} t u A + S u t u G = ? ⟨ l u , r u ⟩ = ? ⟨ l u , G ⟩ + ⟨ r u , y − n ∘ H ⟩ + π l r B = ? T 1 u + T 2 u 2 − π t B
第一个关键区别是,由于之前讨论的原因,对 r u \mathbf{r}_u r u 的承诺是相对于基向量 y − n ∘ H \mathbf{y}^{-n}\circ\mathbf{H} y − n ∘ H 而不是 H \mathbf{H} H 进行的。
其次,t u G = ? T 1 u + T 2 u 2 − π t B t_uG\stackrel{?}{=} T_1 u + T_2 u^2 - \pi_t B t u G = ? T 1 u + T 2 u 2 − π t B 没有常数承诺。通常情况下,等式为 t u G = ? V + T 1 u + T 2 u 2 − π t B t_uG\stackrel{?}{=} \boxed{V}+T_1 u + T_2 u^2 - \pi_t B t u G = ? V + T 1 u + T 2 u 2 − π t B ,但在本例中 V V V 是对 0 0 0 的承诺。
一般来说,如果 V V V 包含验证者已知的值,验证者可以自行构建对 V V V 的承诺,正如我们在下一节中所展示的。
4. 在涉及加法公开常数的情况下证明内积
正如上一节所暗示的,如果验证者知道底层向量,验证者就可以重构承诺。
例如,假设我们要证明
⟨ a L + j , a R ∘ y n + k ⟩ = v z \langle\mathbf{a}_L + \mathbf{j},\mathbf{a}_R\circ\mathbf{y}^n + \mathbf{k}\rangle=vz ⟨ a L + j , a R ∘ y n + k ⟩ = v z
其中 j \mathbf{j} j 和 k \mathbf{k} k 是验证者已知的向量,z z z 是验证者事先已知的标量。与 y n \mathbf{y}^n y n 不同,这些向量和标量在证明开始之前就是已知的。请注意,在本例中 k \mathbf{k} k 没有被 y n \mathbf{y}^n y n 进行 Hadamard 乘法。
证明者仍然像往常一样只对秘密值 a L \mathbf{a}_L a L 、a R \mathbf{a}_R a R 和 v v v 做出承诺:
A = ⟨ a L , G ⟩ + ⟨ a R , H ⟩ + α B S = ⟨ s L , G ⟩ + ⟨ s R , H ⟩ + β B V = v G + γ B \begin{align*}
A &= \langle\mathbf{a}_L,\mathbf{G}\rangle+\langle\mathbf{a}_R,\mathbf{H}\rangle+\alpha B\\
S &= \langle\mathbf{s}_L,\mathbf{G}\rangle+\langle\mathbf{s}_R,\mathbf{H}\rangle+\beta B\\
V &= vG + \gamma B
\end{align*} A S V = ⟨ a L , G ⟩ + ⟨ a R , H ⟩ + α B = ⟨ s L , G ⟩ + ⟨ s R , H ⟩ + βB = v G + γ B
像往常一样,多项式 l ( x ) \mathbf{l}(x) l ( x ) 和 r ( x ) \mathbf{r}(x) r ( x ) 的常数项是原始内积中的向量,线性项是 s L \mathbf{s}_L s L 和 s R \mathbf{s}_R s R 。在从验证者那里收到 y y y 后,证明者计算 y n \mathbf{y}^n y n 并构造(但不求值)l ( x ) \mathbf{l}(x) l ( x ) 和 r ( x ) \mathbf{r}(x) r ( x ) :
l ( x ) = a L + j ⏟ left vector + s L x r ( x ) = a R ∘ y n + k ⏟ right vector + s R ∘ y n x \begin{align*}
\mathbf{l}(x)&=\underbrace{\mathbf{a}_L + \mathbf{j}}_\text{left vector} + \mathbf{s}_Lx\\
\mathbf{r}(x)&=\underbrace{\mathbf{a}_R\circ\mathbf{y}^n + \mathbf{k}}_\text{right vector} + \boxed{\mathbf{s}_R\circ\mathbf{y}^n}x
\end{align*} l ( x ) r ( x ) = left vector a L + j + s L x = right vector a R ∘ y n + k + s R ∘ y n x
请注意,k \mathbf{k} k 没有与 y n \mathbf{y}^n y n 进行 Hadamard 相乘,但线性项 s R \mathbf{s}_R s R 仍然进行了相乘。我们稍后将展示验证者如何处理这一点。
目前,我们将 t ( x ) t(x) t ( x ) 计算为
t ( x ) = v z + t 1 x + t 2 x 2 t(x)=vz+t_1x+t_2x^2 t ( x ) = v z + t 1 x + t 2 x 2
其中
t 1 = ⟨ a L + j , s R ∘ y n ⟩ + ⟨ s L , a R ∘ y n + k ⟩ t 2 = ⟨ s L , s R ∘ y n ⟩ \begin{align*}
t_1&=\langle\mathbf{a}_L+\mathbf{j},\mathbf{s}_R\circ\mathbf{y}^n\rangle + \langle\mathbf{s}_L,\mathbf{a}_R\circ\mathbf{y}^n+\mathbf{k}\rangle\\
t_2&=\langle\mathbf{s}_L,\mathbf{s}_R\circ\mathbf{y}
^n\rangle
\end{align*} t 1 t 2 = ⟨ a L + j , s R ∘ y n ⟩ + ⟨ s L , a R ∘ y n + k ⟩ = ⟨ s L , s R ∘ y n ⟩
注意 t ( x ) t(x) t ( x ) 中的常数项是 v z vz v z 而不是 v v v 。承诺被计算为
T 1 = t 1 G + τ 1 B T 2 = t 2 G + τ 2 B \begin{align*}
T_1 &= t_1G+\tau_1B\\
T_2 &= t_2G+\tau_2B\\
\end{align*} T 1 T 2 = t 1 G + τ 1 B = t 2 G + τ 2 B
并发送给验证者,然后验证者发送随机值 u u u 。
证明者计算:
l u = a L ∘ y n + j + ( s L ∘ y n ) u r u = a R ∘ y n + k + s R u t u = ⟨ l u , r u ⟩ π l r = α + β u π t = v z + τ 1 u + τ 2 u 2 \begin{align*}
\mathbf{l}_u&= \mathbf{a}_L\circ\mathbf{y}^n+\mathbf{j}+(\mathbf{s}_L\circ\mathbf{y}^n)u\\
\mathbf{r}_u&= \mathbf{a}_R\circ\mathbf{y}^n+\mathbf{k}+\mathbf{s}_Ru\\
t_u&=\langle\mathbf{l}_u,\mathbf{r}_u\rangle\\
\pi_{lr}&=\alpha + \beta u\\
\pi_t&=vz+\tau_1u+\tau_2u^2
\end{align*} l u r u t u π l r π t = a L ∘ y n + j + ( s L ∘ y n ) u = a R ∘ y n + k + s R u = ⟨ l u , r u ⟩ = α + β u = v z + τ 1 u + τ 2 u 2
注意 π t \pi_t π t 中的常数项是 γ z \gamma z γ z 。证明者发送 ( l u , r u , t u , π l r , π t ) (\mathbf{l}_u,\mathbf{r}_u,t_u,\pi_{lr},\pi_t) ( l u , r u , t u , π l r , π t ) 。最后,验证者计算:
t u = ? ⟨ l u , r u ⟩ A + S u + ⟨ j , G ⟩ ⏟ commitment to j in l ( x ) + ⟨ k , y − n ∘ H ⟩ ⏟ commitment to k in r ( x ) = ? ⟨ l u , G ⟩ + ⟨ r u , y − n ∘ H ⟩ + π l r B t u G = ? V z + T 1 u + T 2 u 2 − π t B \begin{align*}
t_u&\stackrel{?}=\langle\mathbf{l}_u,\mathbf{r}_u\rangle\\
A+Su+\underbrace{\langle\mathbf{j,\mathbf{G}}\rangle}_{\text{commitment to } \mathbf{j} \text{ in } \mathbf{l}(x)}+\underbrace{\langle\mathbf{k},\mathbf{y}^{-n}\circ\mathbf{H}\rangle}_{\text{commitment to } \mathbf{k} \text{ in } \mathbf{r}(x)}&\stackrel{?}=\langle\mathbf{l}_u,\mathbf{G}\rangle+\langle\mathbf{r}_u,\mathbf{y}^{-n}\circ\mathbf{H}\rangle+\pi_{lr}B\\
t_uG&\stackrel{?}{=} Vz+ T_1 u + T_2 u^2 - \pi_t B\\
\end{align*} t u A + S u + commitment to j in l ( x ) ⟨ j , G ⟩ + commitment to k in r ( x ) ⟨ k , y − n ∘ H ⟩ t u G = ? ⟨ l u , r u ⟩ = ? ⟨ l u , G ⟩ + ⟨ r u , y − n ∘ H ⟩ + π l r B = ? V z + T 1 u + T 2 u 2 − π t B
l u \mathbf{l}_u l u 和 r u \mathbf{r}_u r u 分别包含 j \mathbf{j} j 和 k \mathbf{k} k ,但 A A A 和 S S S 并不包含。因此,验证者计算对这些向量的承诺,并将它们加到承诺 A A A 和 S S S 中。对于 k \mathbf{k} k ,基向量 y − n ∘ H \mathbf{y}^{-n}\circ\mathbf{H} y − n ∘ H 会导致 k \mathbf{k} k 变成 k ∘ y − n \mathbf{k}\circ\mathbf{y}^{-n} k ∘ y − n ,因此必须相对于 y − n ∘ H \mathbf{y}^{-n}\circ\mathbf{H} y − n ∘ H 来计算承诺。最后,盲化因子 π t \pi_t π t 包含 v z vz v z ,但 V V V 并不包含 z z z 。因此,证明者必须将 V V V 乘以 z z z 。
通过计算 ⟨ j , G ⟩ \langle\mathbf{j},\mathbf{G}\rangle ⟨ j , G ⟩ 、⟨ k , y n ∘ H ⟩ \langle\mathbf{k},\mathbf{y}^n\circ\mathbf{H}\rangle ⟨ k , y n ∘ H ⟩ 和 V z Vz V z ,验证者可以确信内积计算中确实包含了这些项。
范围证明
为了证明 V V V 是一个小于 2 n 2^n 2 n 的值,我们需要证明三件事:
内积 ⟨ a L , 2 n ⟩ = V \langle \mathbf{a}_L,\mathbf{2}^n\rangle = V ⟨ a L , 2 n ⟩ = V ,即 a L \mathbf{a}_L a L 是 v v v 的二进制表示
a R = a L − 1 \mathbf{a}_R=\mathbf{a}_L-\mathbf{1} a R = a L − 1
a L ∘ a R = 0 \mathbf{a}_L \circ \mathbf{a}_R = \mathbf{0} a L ∘ a R = 0
最后两个声明并不直接采用内积的形式。然而,我们可以稍微修改它们以实现这一目标。我们实际上要表达的是,向量
a R − a L + 1 \mathbf{a}_R - \mathbf{a}_L+\mathbf{1} a R − a L + 1
a L ∘ a R \mathbf{a}_L\circ\mathbf{a}_R a L ∘ a R
都是 0 n \mathbf{0}^n 0 n 。我们可以使用上一节中的技巧来证明它们为零。也就是说,证明者需要确立
⟨ a L ∘ a R , y n ⟩ = 0 \langle\mathbf{a}_L\circ\mathbf{a}_R,\mathbf{y}^n\rangle=\mathbf{0} ⟨ a L ∘ a R , y n ⟩ = 0
和
⟨ a R − a L + 1 , y n ⟩ = 0 \langle \mathbf{a}_R - \mathbf{a}_L+\mathbf{1},\mathbf{y}^n\rangle=\mathbf{0} ⟨ a R − a L + 1 , y n ⟩ = 0
其中 y n \mathbf{y}^n y n 是从验证者发送的 y y y 值派生出的随机向量。
原始的 Bulletproofs 论文对第一个声明进行了如下微调,以便我们可以使用上一节中的第三个技巧:
⟨ a L , a R ∘ y n ⟩ = 0 \langle\mathbf{a}_L,\mathbf{a}_R\circ\mathbf{y}^n\rangle=\mathbf{0} ⟨ a L , a R ∘ y n ⟩ = 0
因此,证明者需要建立三个内积:
⟨ a L , 2 n ⟩ = v \langle \mathbf{a}_L,\mathbf{2}^n\rangle = v ⟨ a L , 2 n ⟩ = v
⟨ a L , a R ∘ y n ⟩ = 0 n \langle\mathbf{a}_L,\mathbf{a}_R\circ\mathbf{y}^n\rangle=\mathbf{0}^n ⟨ a L , a R ∘ y n ⟩ = 0 n
⟨ a L − 1 n − a R , y n ⟩ = 0 n \langle\mathbf{a}_L -\mathbf{1}^n- \mathbf{a}_R,\mathbf{y}^n\rangle=\mathbf{0}^n ⟨ a L − 1 n − a R , y n ⟩ = 0 n
将三个内积合并为一个
使用由验证者提供的随机数 z z z 进行随机线性组合,可以将这三个内积合并为一个内积。
z 2 ⋅ ⟨ a L , 2 n ⟩ + z 1 ⋅ ⟨ a L − 1 n − a R , y n ⟩ + z 0 ⟨ a L , a R ∘ y n ⟩ = z 2 ⋅ v + z 1 ⋅ 0 n + z 0 ⋅ 0 n z^2 \cdot \langle \mathbf{a_L}, 2^n \rangle + z^1 \cdot \langle \mathbf{a_L} - \mathbf{1}^n - \mathbf{a_R}, \mathbf{y}^n \rangle + z^0\langle \mathbf{a_L}, \mathbf{a_R} \circ \mathbf{y}^n \rangle = z^2 \cdot v + z^1\cdot\mathbf{0}^n+z^0\cdot\mathbf{0}^n z 2 ⋅ ⟨ a L , 2 n ⟩ + z 1 ⋅ ⟨ a L − 1 n − a R , y n ⟩ + z 0 ⟨ a L , a R ∘ y n ⟩ = z 2 ⋅ v + z 1 ⋅ 0 n + z 0 ⋅ 0 n
z 2 ⋅ ⟨ a L , 2 n ⟩ + z ⋅ ⟨ a L − 1 n − a R , y n ⟩ + ⟨ a L , a R ∘ y n ⟩ = z 2 ⋅ v z^2 \cdot \langle \mathbf{a_L}, 2^n \rangle + z \cdot \langle \mathbf{a_L} - \mathbf{1}^n - \mathbf{a_R}, \mathbf{y}^n \rangle + \langle \mathbf{a_L}, \mathbf{a_R} \circ \mathbf{y}^n \rangle = z^2 \cdot v z 2 ⋅ ⟨ a L , 2 n ⟩ + z ⋅ ⟨ a L − 1 n − a R , y n ⟩ + ⟨ a L , a R ∘ y n ⟩ = z 2 ⋅ v
通过一些非常繁琐的内积代数运算,我们可以如下合并所有的内积。我们将在附录中展示推导过程。
⟨ a L − z ⋅ 1 n , y n ∘ a R + y n ⋅ z + z 2 ⋅ 2 n ⟩ = z 2 ⋅ v + ( z − z 2 ) ⋅ ⟨ 1 n , y n ⟩ − z 3 ⟨ 1 n , 2 n ⟩ \left\langle \mathbf{a_L} - z \cdot \mathbf{1}^n, \mathbf{y}^n \circ \mathbf{a_R} + \mathbf{y}^n\cdot z + z^2 \cdot 2^n \right\rangle = z^2 \cdot v + (z - z^2) \cdot \langle \mathbf{1}^n, y^n \rangle - z^3 \langle \mathbf{1}^n, 2^n \rangle ⟨ a L − z ⋅ 1 n , y n ∘ a R + y n ⋅ z + z 2 ⋅ 2 n ⟩ = z 2 ⋅ v + ( z − z 2 ) ⋅ ⟨ 1 n , y n ⟩ − z 3 ⟨ 1 n , 2 n ⟩
下面方框中的项包含验证者已知的值,因此我们将构建验证算法来显式检查这些值。也就是说,由验证者(而不是证明者)计算对框内各项值的承诺:
⟨ a L − z ⋅ 1 n , y n ∘ a R + y n ⋅ z + z 2 ⋅ 2 n ⟩ = z 2 ⋅ v + ( z − z 2 ) ⋅ ⟨ 1 n , y n ⟩ − z 3 ⟨ 1 n , 2 n ⟩ \left\langle \mathbf{a_L} - \boxed{z \cdot \mathbf{1}^n}, \mathbf{y}^n \circ \mathbf{a_R} + \boxed{\mathbf{y}^n\cdot z + z^2 \cdot 2^n }\right\rangle = \boxed{z^2} \cdot v + \boxed{(z - z^2) \cdot \langle \mathbf{1}^n, y^n \rangle - z^3 \langle \mathbf{1}^n, 2^n \rangle} ⟨ a L − z ⋅ 1 n , y n ∘ a R + y n ⋅ z + z 2 ⋅ 2 n ⟩ = z 2 ⋅ v + ( z − z 2 ) ⋅ ⟨ 1 n , y n ⟩ − z 3 ⟨ 1 n , 2 n ⟩
为了节省篇幅,Bulletproofs 论文将项 ( z − z 2 ) ⋅ ⟨ 1 n , y n ⟩ − z 3 ⟨ 1 n , 2 n ⟩ (z - z^2) \cdot \langle \mathbf{1}^n, y^n \rangle - z^3 \langle \mathbf{1}^n, 2^n \rangle ( z − z 2 ) ⋅ ⟨ 1 n , y n ⟩ − z 3 ⟨ 1 n , 2 n ⟩ 称为 δ ( y , z ) \delta(y,z) δ ( y , z ) ,所以该内积可以写为
⟨ a L − z ⋅ 1 n , y n ∘ a R + y n ⋅ z + z 2 ⋅ 2 n ⟩ = z 2 ⋅ v + δ ( y , z ) \left\langle \mathbf{a_L} - z \cdot \mathbf{1}^n, \mathbf{y}^n \circ \mathbf{a_R} + \mathbf{y}^n\cdot z + z^2 \cdot 2^n \right\rangle = z^2 \cdot v + \delta(y,z) ⟨ a L − z ⋅ 1 n , y n ∘ a R + y n ⋅ z + z 2 ⋅ 2 n ⟩ = z 2 ⋅ v + δ ( y , z )
注意 δ ( y , z ) \delta(y,z) δ ( y , z ) 是一个验证者可以计算的值。
范围证明算法
证明者选择 v v v 及其二进制表示 a L \mathbf{a}_L a L ,并计算 a R = a L − 1 \mathbf{a}_R = \mathbf{a}_L - \mathbf{1} a R = a L − 1 。
证明者然后随机选择盲化因子 α \alpha α ,并使用基向量 G \mathbf{G} G 和 H \mathbf{H} H 计算对 a L \mathbf{a}_L a L 和 a R \mathbf{a}_R a R 的组合承诺为
A = ⟨ a L , G ⟩ + ⟨ a R , H ⟩ + α B A = \langle\mathbf{a}_L,\mathbf{G}\rangle+\langle\mathbf{a}_R,\mathbf{H}\rangle+\alpha B A = ⟨ a L , G ⟩ + ⟨ a R , H ⟩ + α B
证明者随后选择即将创建的向量多项式 l ( x ) \mathbf{l}(x) l ( x ) 和 r ( x ) \mathbf{r}(x) r ( x ) 的线性项作为 s L \mathbf{s}_L s L 和 s R \mathbf{s}_R s R ,并对它们进行承诺
S = ⟨ s L , G ⟩ + ⟨ s R , H ⟩ + β B S = \langle\mathbf{s}_L,\mathbf{G}\rangle+\langle\mathbf{s}_R,\mathbf{H}\rangle+\beta B S = ⟨ s L , G ⟩ + ⟨ s R , H ⟩ + βB
证明者将内积承诺为 V V V ,它是关于未知离散对数的基点 G G G (与 G \mathbf{G} G 无关)进行的承诺:
V = v G + γ B V = vG+\gamma B V = v G + γ B
证明者将 ( A , S , V ) (A, S, V) ( A , S , V ) 发送给验证者。
验证者回复随机值 ( y , z ) (y, z) ( y , z ) ,证明者将使用它们将三个内积合并为一个。
⟨ a L − z ⋅ 1 n , y n ∘ a R + y n ⋅ z + z 2 ⋅ 2 n ⟩ = z 2 ⋅ v + δ ( y , z ) \left\langle \mathbf{a_L} - z \cdot \mathbf{1}^n, \mathbf{y}^n \circ \mathbf{a_R} + \mathbf{y}^n\cdot z + z^2 \cdot 2^n \right\rangle = z^2 \cdot v + \delta(y,z) ⟨ a L − z ⋅ 1 n , y n ∘ a R + y n ⋅ z + z 2 ⋅ 2 n ⟩ = z 2 ⋅ v + δ ( y , z )
内积的左半部分 a L − z ⋅ 1 \mathbf{a}_L-z\cdot\mathbf{1} a L − z ⋅ 1 将作为 l ( x ) \mathbf{l}(x) l ( x ) 的常数项,而 y n ∘ a R + y n ⋅ z + z 2 ⋅ 2 n \mathbf{y}^n \circ\mathbf{a_R} + \mathbf{y}^n\cdot z + z^2 \cdot 2^n y n ∘ a R + y n ⋅ z + z 2 ⋅ 2 n 将作为 r ( x ) \mathbf{r}(x) r ( x ) 的常数项。
因此,我们将 l ( x ) \mathbf{l}(x) l ( x ) 构造为
l ( x ) = a L − z ⋅ 1 ⏟ constant term + s L x \mathbf{l}(x)=\underbrace{\mathbf{a}_L-z\cdot\mathbf{1}}_\text{constant term}+\mathbf{s}_Lx l ( x ) = constant term a L − z ⋅ 1 + s L x
并将 r ( x ) \mathbf{r}(x) r ( x ) 构造为
r ( x ) = y n ∘ ( a R + z ⋅ 1 ) + z 2 2 n ⏟ constant term + y n ∘ s R x \mathbf{r}(x)=\underbrace{\mathbf{y}^n\circ(\mathbf{a}_R+z\cdot\mathbf{1})+z^2\mathbf{2}^n}_\text{constant term}+\mathbf{y}^n\circ\mathbf{s}_Rx r ( x ) = constant term y n ∘ ( a R + z ⋅ 1 ) + z 2 2 n + y n ∘ s R x
注意,出于上面前置条件部分第 3 点所讨论的原因,我们将 s R x \mathbf{s}_Rx s R x 与 y n \mathbf{y}^n y n 进行了逐元素相乘。
证明者现在可以构造 t ( x ) = ⟨ l ( x ) , r ( x ) ⟩ t(x) = \langle\mathbf{l}(x),\mathbf{r}(x)\rangle t ( x ) = ⟨ l ( x ) , r ( x )⟩ ,其常数项系数 t 0 t_0 t 0 、线性项系数 t 1 t_1 t 1 和二次项系数 t 2 t_2 t 2 计算如下:
t 0 = ⟨ a L − z ⋅ 1 n , y n ∘ a R + y n ⋅ z + z 2 ⋅ 2 n ⟩ t 1 = ⟨ ( a L − z ⋅ 1 ) , y n ∘ s R ⟩ + ⟨ y n ∘ ( a R + z ⋅ 1 ) + z 2 2 n , s L ⟩ t 2 = ⟨ s L , y n ∘ s R ⟩ \begin{align*}
t_0 &= \left\langle \mathbf{a_L} - z \cdot \mathbf{1}^n, \mathbf{y}^n \circ \mathbf{a_R} + \mathbf{y}^n\cdot z + z^2 \cdot 2^n \right\rangle\\
t_1 &= \langle(\mathbf{a}_L-z\cdot\mathbf{1}),\mathbf{y}^n\circ\mathbf{s}_R\rangle+\langle\mathbf{y}^n\circ(\mathbf{a}_R+z\cdot\mathbf{1})+z^2\mathbf{2}^n,\mathbf{s_L}\rangle\\
t_2 &= \langle\mathbf{s}_L,\mathbf{y}^n\circ\mathbf{s}_R\rangle
\end{align*} t 0 t 1 t 2 = ⟨ a L − z ⋅ 1 n , y n ∘ a R + y n ⋅ z + z 2 ⋅ 2 n ⟩ = ⟨( a L − z ⋅ 1 ) , y n ∘ s R ⟩ + ⟨ y n ∘ ( a R + z ⋅ 1 ) + z 2 2 n , s L ⟩ = ⟨ s L , y n ∘ s R ⟩
其中 t ( x ) = t 0 + t 1 x + t 2 x 2 t(x) = t_0 + t_1x + t_2x^2 t ( x ) = t 0 + t 1 x + t 2 x 2
证明者发送对 t 1 t_1 t 1 和 t 2 t_2 t 2 的承诺如下
T 1 = t 1 G + τ 1 B T 2 = t 2 G + τ 2 B \begin{align*}
T_1 &= t_1G+\tau_1B\\
T_2 &= t_2G+\tau_2B
\end{align*} T 1 T 2 = t 1 G + τ 1 B = t 2 G + τ 2 B
不需要对 t 0 t_0 t 0 进行承诺——请注意,它正是我们试图证明的内积,因此验证者已经拥有了它的承诺,即 V V V 。
验证者发送随机数 u u u ,证明者计算
l u = l ( u ) r u = r ( u ) t u = t ( u ) π l r = α + β u π t = z 2 γ + τ 1 u + τ 2 u 2 \begin{align*}
\mathbf{l}_u &= \mathbf{l}(u) \\
\mathbf{r}_u &= \mathbf{r}(u) \\
t_u &= \mathbf{t}(u)\\
\pi_{lr} &=\alpha+\beta u\\
\pi_t &= z^2\gamma + \tau_1u + \tau_2u^2\\
\end{align*} l u r u t u π l r π t = l ( u ) = r ( u ) = t ( u ) = α + β u = z 2 γ + τ 1 u + τ 2 u 2
注意,π t \pi_t π t 的常数项乘以了 z 2 z^2 z 2 ,以反映原始内积的 z 2 ⋅ v z^2\cdot v z 2 ⋅ v 项。
验证者随后计算新的基向量 H y − 1 = y − n ∘ H \mathbf{H}_{\mathbf{y}^{-1}}=\mathbf{y}^{-n}\circ\mathbf{H} H y − 1 = y − n ∘ H 并运行以下检查:
t u = ? ⟨ l u , r u ⟩ t_u \stackrel{?}{=} \langle \mathbf{l}_u, \mathbf{r}_u \rangle t u = ? ⟨ l u , r u ⟩
A + S u + ⟨ − z ⋅ 1 n , G ⟩ + ⟨ z ⋅ y n + z 2 ⋅ 2 n , H y − 1 ⟩ = ? ⟨ l u , G ⟩ + ⟨ r u , H y − 1 ⟩ + π l r B A + Su + \boxed{\langle -z\cdot\mathbf{1}^n,\mathbf{G}\rangle} + \boxed{\langle z\cdot\mathbf{y}^n+z^2\cdot\mathbf{2}^n,\mathbf{H}_{\mathbf{y}^{-1}}\rangle}\stackrel{?}{=} \langle \mathbf{l}_u, \mathbf{G} \rangle + \langle \mathbf{r}_u, \mathbf{H}_{y^{-1}} \rangle + \pi_{lr} B A + S u + ⟨ − z ⋅ 1 n , G ⟩ + ⟨ z ⋅ y n + z 2 ⋅ 2 n , H y − 1 ⟩ = ? ⟨ l u , G ⟩ + ⟨ r u , H y − 1 ⟩ + π l r B
t u G + π t B = V z 2 + δ ( y , z ) ⋅ G + T 1 u + T 2 u 2 t_uG+\pi_tB=V\boxed{z^2}+\boxed{\delta(y,z)}\cdot G+T_1u+T_2u^2 t u G + π t B = V z 2 + δ ( y , z ) ⋅ G + T 1 u + T 2 u 2
回顾一下,证明者并没有对用于内积左右两侧的完整向量进行承诺,而只承诺了 a L \mathbf{a}_L a L 和 b L \mathbf{b}_L b L 。其余的向量是对验证者已知的加法公开向量,因此验证者通过构造对常数项的承诺,并将它们加到由证明者提供的秘密向量的承诺上,从而重构了对向量的承诺。
作为提醒,以下是原始内积,验证者已知的值已加框标出:
⟨ a L + − z ⋅ 1 n , y n ∘ a R + y n ⋅ z + z 2 ⋅ 2 n ⟩ = z 2 ⋅ v + δ ( y , z ) \left\langle \mathbf{a_L} + \boxed{-z \cdot \mathbf{1}^n}, \mathbf{y}^n \circ \mathbf{a_R} + \boxed{\mathbf{y}^n\cdot z + z^2 \cdot 2^n }\right\rangle = \boxed{z^2} \cdot v + \boxed{\delta(y,z)} ⟨ a L + − z ⋅ 1 n , y n ∘ a R + y n ⋅ z + z 2 ⋅ 2 n ⟩ = z 2 ⋅ v + δ ( y , z )
建议读者验证:在原始内积中加框的项(验证者已知的值)已经在上述的一组等式检查中,由验证者在框内各项里进行了重构。
通过复制证明者的部分计算,验证者可以断言证明者确实如其所称的那样执行了计算。
验证算法的正确性
我们现在展示,如果证明者是诚实的,那么最终的验证检查是完全正确的。
下面我们将展示精确的代数运算,但从直觉上看,验证者是在“重构”内积的左向量 a L − z ⋅ 1 n \mathbf{a_L} - z \cdot \mathbf{1}^n a L − z ⋅ 1 n 、内积的右向量 y n ∘ a R + y n ⋅ z + z 2 ⋅ 2 n \mathbf{y}^n \circ \mathbf{a_R} + \mathbf{y}^n\cdot z + z^2 \cdot 2^n y n ∘ a R + y n ⋅ z + z 2 ⋅ 2 n 以及输出结果 z 2 v + δ ( y , z ) z^2v+\delta(y,z) z 2 v + δ ( y , z ) 。
验证者并没有被给出对 a L − z ⋅ 1 n \mathbf{a_L} - z \cdot \mathbf{1}^n a L − z ⋅ 1 n 和 y n ∘ a R + y n ⋅ z + z 2 ⋅ 2 n \mathbf{y}^n \circ \mathbf{a_R} + \mathbf{y}^n\cdot z + z^2 \cdot 2^n y n ∘ a R + y n ⋅ z + z 2 ⋅ 2 n 的承诺,而只有对 a L \mathbf{a}_L a L 和 a R \mathbf{a}_R a R 的承诺。同样,验证者并没有被给出对输出 z 2 v + δ ( y , z ) z^2v + \delta(y,z) z 2 v + δ ( y , z ) 的承诺,而只给出了对 v v v 的承诺。
加法项以及被 y n \mathbf{y}^n y n 逐元素相乘的项必须由验证者进行重构。
t u = t ( u ) t_u = \mathbf{t}(u) t u = t ( u ) 的正确性
对于 t u = ? ⟨ l u , r u ⟩ t_u\stackrel{?}=\langle\mathbf{l}_u,\mathbf{r}_u\rangle t u = ? ⟨ l u , r u ⟩ 检查,根据定义这是成立的,因为这正是证明者计算 t u t_u t u 的方式。
关于 A A A 和 S S S 承诺的 l ( x ) \mathbf{l}(x) l ( x ) 和 r ( x ) \mathbf{r}(x) r ( x ) 的正确性
对于
A + S u + ⟨ − z ⋅ 1 n , G ⟩ + ⟨ z ⋅ y n + z 2 ⋅ 2 n , H y − 1 ⟩ = ? ⟨ l u , G ⟩ + ⟨ r u , H y − 1 ⟩ + π l r B A + Su + \langle -z\cdot\mathbf{1}^n,\mathbf{G}\rangle + \langle z\cdot\mathbf{y}^n+z^2\cdot\mathbf{2}^n,\mathbf{H}_{\mathbf{y}^{-1}}\rangle\stackrel{?}{=} \langle \mathbf{l}_u, \mathbf{G} \rangle + \langle \mathbf{r}_u, \mathbf{H}_{y^{-1}} \rangle + \pi_{lr} B A + S u + ⟨ − z ⋅ 1 n , G ⟩ + ⟨ z ⋅ y n + z 2 ⋅ 2 n , H y − 1 ⟩ = ? ⟨ l u , G ⟩ + ⟨ r u , H y − 1 ⟩ + π l r B
我们做以下替换:
⟨ a L , G ⟩ + ⟨ a R , H ⟩ + α B ⏟ A + ( ⟨ s L , G ⟩ + ⟨ s R , H ⟩ + β B ) ⏟ S u + ⟨ − z ⋅ 1 n , G ⟩ + ⟨ z ⋅ y n + z 2 ⋅ 2 n , H y − 1 ⟩ = ? ⟨ a L − z ⋅ 1 + s L u ⏟ l u , G ⟩ + ⟨ y n ∘ ( a R + z ⋅ 1 ) + z 2 2 n + y n ∘ s R x ⏟ r u , H y − 1 ⟩ + ( α + β u ) ⏟ π l r B \underbrace{\langle\mathbf{a}_L,\mathbf{G}\rangle+\langle\mathbf{a}_R,\mathbf{H}\rangle+\alpha B}_A + \underbrace{(\langle\mathbf{s}_L,\mathbf{G}\rangle+\langle\mathbf{s}_R,\mathbf{H}\rangle+\beta B)}_Su + \langle -z\cdot\mathbf{1}^n,\mathbf{G}\rangle + \langle z\cdot\mathbf{y}^n+z^2\cdot\mathbf{2}^n,\mathbf{H}_{\mathbf{y}^{-1}}\rangle\stackrel{?}{=} \langle \underbrace{\mathbf{a}_L-z\cdot\mathbf{1}+\mathbf{s}_Lu}_{\mathbf{l}_u}, \mathbf{G} \rangle + \langle \underbrace{\mathbf{y}^n\circ(\mathbf{a}_R+z\cdot\mathbf{1})+z^2\mathbf{2}^n+\mathbf{y}^n\circ\mathbf{s}_Rx}_{\mathbf{r}_u}, \mathbf{H}_{y^{-1}} \rangle + \underbrace{(\alpha+\beta u)}_{\pi_{lr}} B A ⟨ a L , G ⟩ + ⟨ a R , H ⟩ + α B + S (⟨ s L , G ⟩ + ⟨ s R , H ⟩ + βB ) u + ⟨ − z ⋅ 1 n , G ⟩ + ⟨ z ⋅ y n + z 2 ⋅ 2 n , H y − 1 ⟩ = ? ⟨ l u a L − z ⋅ 1 + s L u , G ⟩ + ⟨ r u y n ∘ ( a R + z ⋅ 1 ) + z 2 2 n + y n ∘ s R x , H y − 1 ⟩ + π l r ( α + β u ) B
所有 G \mathbf{G} G 项按如下方式抵消:
⟨ a L , G ⟩ + ⟨ a R , H ⟩ + α B + ( ⟨ s L , G ⟩ + ⟨ s R , H ⟩ + β B ) u + ⟨ − z ⋅ 1 n , G ⟩ + ⟨ z ⋅ y n + z 2 ⋅ 2 n , H y − 1 ⟩ = ? ⟨ a L − z ⋅ 1 + s L u , G ⟩ + ⟨ y n ∘ ( a R + z ⋅ 1 ) + z 2 2 n + y n ∘ s R x , H y − 1 ⟩ + ( α + β u ) B \cancel{\langle\mathbf{a}_L,\mathbf{G}\rangle}+\langle\mathbf{a}_R,\mathbf{H}\rangle+\alpha B + (\cancel{\langle\mathbf{s}_L,\mathbf{G}\rangle}+\langle\mathbf{s}_R,\mathbf{H}\rangle+\beta B)u + \cancel{\langle -z\cdot\mathbf{1}^n,\mathbf{G}\rangle} + \langle z\cdot\mathbf{y}^n+z^2\cdot\mathbf{2}^n,\mathbf{H}_{\mathbf{y}^{-1}}\rangle \stackrel{?}{=} \cancel{\langle \mathbf{a}_L-z\cdot\mathbf{1}+\mathbf{s}_L u, \mathbf{G} \rangle} + \langle \mathbf{y}^n\circ(\mathbf{a}_R+z\cdot\mathbf{1})+z^2\mathbf{2}^n+\mathbf{y}^n\circ\mathbf{s}_R x, \mathbf{H}_{y^{-1}} \rangle + (\alpha+\beta u) B ⟨ a L , G ⟩ + ⟨ a R , H ⟩ + α B + ( ⟨ s L , G ⟩ + ⟨ s R , H ⟩ + βB ) u + ⟨ − z ⋅ 1 n , G ⟩ + ⟨ z ⋅ y n + z 2 ⋅ 2 n , H y − 1 ⟩ = ? ⟨ a L − z ⋅ 1 + s L u , G ⟩ + ⟨ y n ∘ ( a R + z ⋅ 1 ) + z 2 2 n + y n ∘ s R x , H y − 1 ⟩ + ( α + β u ) B
⟨ a R , H ⟩ + α B + ( ⟨ s R , H ⟩ + β B ) u + ⟨ z ⋅ y n + z 2 ⋅ 2 n , H y − 1 ⟩ = ? ⟨ y n ∘ ( a R + z ⋅ 1 ) + z 2 2 n + y n ∘ s R x , H y − 1 ⟩ + ( α + β u ) B \langle\mathbf{a}_R,\mathbf{H}\rangle+\alpha B + (\langle\mathbf{s}_R,\mathbf{H}\rangle+\beta B)u + \langle z\cdot\mathbf{y}^n+z^2\cdot\mathbf{2}^n,\mathbf{H}_{\mathbf{y}^{-1}}\rangle \stackrel{?}{=} \langle \mathbf{y}^n\circ(\mathbf{a}_R+z\cdot\mathbf{1})+z^2\mathbf{2}^n+\mathbf{y}^n\circ\mathbf{s}_R x, \mathbf{H}_{y^{-1}} \rangle + (\alpha+\beta u) B ⟨ a R , H ⟩ + α B + (⟨ s R , H ⟩ + βB ) u + ⟨ z ⋅ y n + z 2 ⋅ 2 n , H y − 1 ⟩ = ? ⟨ y n ∘ ( a R + z ⋅ 1 ) + z 2 2 n + y n ∘ s R x , H y − 1 ⟩ + ( α + β u ) B
与 B B B 相关的盲化因子按如下方式抵消:
⟨ a R , H ⟩ + α B + ( ⟨ s R , H ⟩ + β B ) u + ⟨ z ⋅ y n + z 2 ⋅ 2 n , H y − 1 ⟩ = ? ⟨ y n ∘ ( a R + z ⋅ 1 ) + z 2 2 n + y n ∘ s R x , H y − 1 ⟩ + ( α + β u ) B \langle\mathbf{a}_R,\mathbf{H}\rangle+\cancel{\alpha B} + (\langle\mathbf{s}_R,\mathbf{H}\rangle+\cancel{\beta B)u} + \langle z\cdot\mathbf{y}^n+z^2\cdot\mathbf{2}^n,\mathbf{H}_{\mathbf{y}^{-1}}\rangle \stackrel{?}{=} \langle \mathbf{y}^n\circ(\mathbf{a}_R+z\cdot\mathbf{1})+z^2\mathbf{2}^n+\mathbf{y}^n\circ\mathbf{s}_R x, \mathbf{H}_{y^{-1}} \rangle + \cancel{(\alpha+\beta u) B} ⟨ a R , H ⟩ + α B + (⟨ s R , H ⟩ + βB ) u + ⟨ z ⋅ y n + z 2 ⋅ 2 n , H y − 1 ⟩ = ? ⟨ y n ∘ ( a R + z ⋅ 1 ) + z 2 2 n + y n ∘ s R x , H y − 1 ⟩ + ( α + β u ) B
⟨ a R , H ⟩ + ( ⟨ s R , H ⟩ u ) + ⟨ z ⋅ y n + z 2 ⋅ 2 n , H y − 1 ⟩ = ? ⟨ y n ∘ ( a R + z ⋅ 1 ) + z 2 2 n + y n ∘ s R u , H y − 1 ⟩ \langle\mathbf{a}_R,\mathbf{H}\rangle + (\langle\mathbf{s}_R,\mathbf{H}\rangle u) + \langle z\cdot\mathbf{y}^n+z^2\cdot\mathbf{2}^n,\mathbf{H}_{\mathbf{y}^{-1}}\rangle \stackrel{?}{=} \langle \mathbf{y}^n\circ(\mathbf{a}_R+z\cdot\mathbf{1})+z^2\mathbf{2}^n+\mathbf{y}^n\circ\mathbf{s}_R u, \mathbf{H}_{y^{-1}} \rangle ⟨ a R , H ⟩ + (⟨ s R , H ⟩ u ) + ⟨ z ⋅ y n + z 2 ⋅ 2 n , H y − 1 ⟩ = ? ⟨ y n ∘ ( a R + z ⋅ 1 ) + z 2 2 n + y n ∘ s R u , H y − 1 ⟩
H y − 1 \mathbf{H}_{y^{-1}} H y − 1 与 y n \mathbf{y}^n y n 项抵消:
⟨ a R , H ⟩ + ( ⟨ s R , H ⟩ u ) + ⟨ z ⋅ y n + z 2 ⋅ 2 n , H y − 1 ⟩ = ? ⟨ a R + z ⋅ 1 , H ⟩ + ⟨ z 2 2 n , H y − 1 ⟩ + ⟨ s R u , H ⟩ \langle\mathbf{a}_R,\mathbf{H}\rangle + (\langle\mathbf{s}_R,\mathbf{H}\rangle u) + \langle z\cdot\mathbf{y}^n+z^2\cdot\mathbf{2}^n,\mathbf{H}_{\mathbf{y}^{-1}}\rangle \stackrel{?}{=} \langle \mathbf{a}_R+z\cdot\mathbf{1},\mathbf{H}\rangle+\langle z^2\mathbf{2}^n,\mathbf{H}_{\mathbf{y}^{-1}}\rangle+\langle\mathbf{s}_R u, \mathbf{H} \rangle ⟨ a R , H ⟩ + (⟨ s R , H ⟩ u ) + ⟨ z ⋅ y n + z 2 ⋅ 2 n , H y − 1 ⟩ = ? ⟨ a R + z ⋅ 1 , H ⟩ + ⟨ z 2 2 n , H y − 1 ⟩ + ⟨ s R u , H ⟩
拆分内积:
⟨ a R , H ⟩ + ( ⟨ s R , H ⟩ u ) + ⟨ z ⋅ y n , H y − 1 ⟩ + ⟨ z 2 ⋅ 2 n , H y − 1 ⟩ = ? ⟨ a R , H ⟩ + ⟨ z ⋅ 1 , H ⟩ + ⟨ z 2 2 n , H y − 1 ⟩ + ⟨ s R u , H ⟩ \langle\mathbf{a}_R,\mathbf{H}\rangle + (\langle\mathbf{s}_R,\mathbf{H}\rangle u) + \langle z\cdot\mathbf{y}^n,\mathbf{H}_{\mathbf{y}^{-1}}\rangle+\langle z^2\cdot\mathbf{2}^n,\mathbf{H}_{\mathbf{y}^{-1}}\rangle \stackrel{?}{=} \langle \mathbf{a}_R,\mathbf{H}\rangle+\langle z\cdot\mathbf{1},\mathbf{H}\rangle+\langle z^2\mathbf{2}^n,\mathbf{H}_{\mathbf{y}^{-1}}\rangle+\langle\mathbf{s}_R u, \mathbf{H} \rangle ⟨ a R , H ⟩ + (⟨ s R , H ⟩ u ) + ⟨ z ⋅ y n , H y − 1 ⟩ + ⟨ z 2 ⋅ 2 n , H y − 1 ⟩ = ? ⟨ a R , H ⟩ + ⟨ z ⋅ 1 , H ⟩ + ⟨ z 2 2 n , H y − 1 ⟩ + ⟨ s R u , H ⟩
抵消等式两侧都出现的项:
⟨ a R , H ⟩ + ( ⟨ s R , H ⟩ u ) + ⟨ z ⋅ y n , H y − 1 ⟩ + ⟨ z 2 ⋅ 2 n , H y − 1 ⟩ = ? ⟨ a R , H ⟩ + ⟨ z ⋅ 1 , H ⟩ + ⟨ z 2 2 n , H y − 1 ⟩ + ⟨ s R u , H ⟩ \cancel{\langle\mathbf{a}_R,\mathbf{H}\rangle} + (\langle\mathbf{s}_R,\mathbf{H}\rangle u) + \langle z\cdot\mathbf{y}^n,\mathbf{H}_{\mathbf{y}^{-1}}\rangle+\langle z^2\cdot\mathbf{2}^n,\mathbf{H}_{\mathbf{y}^{-1}}\rangle \stackrel{?}{=} \cancel{\langle \mathbf{a}_R,\mathbf{H}\rangle}+\langle z\cdot\mathbf{1},\mathbf{H}\rangle+\langle z^2\mathbf{2}^n,\mathbf{H}_{\mathbf{y}^{-1}}\rangle+\langle\mathbf{s}_R u, \mathbf{H} \rangle ⟨ a R , H ⟩ + (⟨ s R , H ⟩ u ) + ⟨ z ⋅ y n , H y − 1 ⟩ + ⟨ z 2 ⋅ 2 n , H y − 1 ⟩ = ? ⟨ a R , H ⟩ + ⟨ z ⋅ 1 , H ⟩ + ⟨ z 2 2 n , H y − 1 ⟩ + ⟨ s R u , H ⟩
( ⟨ s R , H ⟩ u ) + ⟨ z ⋅ y n , H y − 1 ⟩ + ⟨ z 2 ⋅ 2 n , H y − 1 ⟩ = ? ⟨ z ⋅ 1 , H ⟩ + ⟨ z 2 2 n , H y − 1 ⟩ + ⟨ s R u , H ⟩ \cancel{(\langle\mathbf{s}_R,\mathbf{H}\rangle u)} + \langle z\cdot\mathbf{y}^n,\mathbf{H}_{\mathbf{y}^{-1}}\rangle+\langle z^2\cdot\mathbf{2}^n,\mathbf{H}_{\mathbf{y}^{-1}}\rangle \stackrel{?}{=}\langle z\cdot\mathbf{1},\mathbf{H}\rangle+\langle z^2\mathbf{2}^n,\mathbf{H}_{\mathbf{y}^{-1}}\rangle+\cancel{\langle\mathbf{s}_R u, \mathbf{H} \rangle} (⟨ s R , H ⟩ u ) + ⟨ z ⋅ y n , H y − 1 ⟩ + ⟨ z 2 ⋅ 2 n , H y − 1 ⟩ = ? ⟨ z ⋅ 1 , H ⟩ + ⟨ z 2 2 n , H y − 1 ⟩ + ⟨ s R u , H ⟩
⟨ z ⋅ y n , H y − 1 ⟩ + ⟨ z 2 ⋅ 2 n , H y − 1 ⟩ = ? ⟨ z ⋅ 1 , H ⟩ + ⟨ z 2 ⋅ 2 n , H y − 1 ⟩ \langle z\cdot\mathbf{y}^n,\mathbf{H}_{\mathbf{y}^{-1}}\rangle+\cancel{\langle z^2\cdot\mathbf{2}^n,\mathbf{H}_{\mathbf{y}^{-1}}\rangle} \stackrel{?}{=}\langle z\cdot\mathbf{1},\mathbf{H}\rangle+\cancel{\langle z^2\cdot\mathbf{2}^n,\mathbf{H}_{\mathbf{y}^{-1}}\rangle} ⟨ z ⋅ y n , H y − 1 ⟩ + ⟨ z 2 ⋅ 2 n , H y − 1 ⟩ = ? ⟨ z ⋅ 1 , H ⟩ + ⟨ z 2 ⋅ 2 n , H y − 1 ⟩
⟨ z ⋅ y n , H y − 1 ⟩ = ? ⟨ z ⋅ 1 , H ⟩ \langle z\cdot\mathbf{y}^n,\mathbf{H}_{\mathbf{y}^{-1}}\rangle \stackrel{?}{=}\langle z\cdot\mathbf{1},\mathbf{H}\rangle ⟨ z ⋅ y n , H y − 1 ⟩ = ? ⟨ z ⋅ 1 , H ⟩
将 y n \mathbf{y}^n y n 移到另一侧:
⟨ z ⋅ 1 , H ⟩ = ? ⟨ z ⋅ 1 , H ⟩ \langle z\cdot\mathbf{1},\mathbf{H}\rangle \stackrel{?}{=}\langle z\cdot\mathbf{1},\mathbf{H}\rangle ⟨ z ⋅ 1 , H ⟩ = ? ⟨ z ⋅ 1 , H ⟩
⟨ z ⋅ 1 , H ⟩ = ? ⟨ z ⋅ 1 , H ⟩ \cancel{\langle z\cdot\mathbf{1},\mathbf{H}\rangle} \stackrel{?}{=}\cancel{\langle z\cdot\mathbf{1},\mathbf{H}\rangle} ⟨ z ⋅ 1 , H ⟩ = ? ⟨ z ⋅ 1 , H ⟩
t ( u ) t(u) t ( u ) 求值的正确性
要看出
t u G + π t B = V z 2 + δ ( y , z ) G + T 1 u + T 2 u 2 t_uG+\pi_tB=Vz^2+\delta(y,z)G+T_1u+T_2u^2 t u G + π t B = V z 2 + δ ( y , z ) G + T 1 u + T 2 u 2
是正确的,我们可以如下代入各项:
⟨ l u , r u ⟩ ⏟ t u G + ( z 2 γ + τ 1 u + τ 2 u 2 ) ⏟ π t B = ( v G + γ B ) ⏟ V z 2 + δ ( y , z ) G + ( t 1 G + τ 1 B ⏟ T 1 ) u + ( t 2 G + τ 2 B ) ⏟ T 2 u 2 \underbrace{\langle \mathbf{l}_u, \mathbf{r}_u \rangle}_{t_u}G+\underbrace{(z^2\gamma + \tau_1u + \tau_2u^2)}_{\pi_t}B=\underbrace{(vG+\gamma B)}_{V}z^2+\delta(y,z)G+\underbrace{(t_1G+\tau_1B}_{T_1})u+\underbrace{(t_2G+\tau_2B)}_{T_2}u^2 t u ⟨ l u , r u ⟩ G + π t ( z 2 γ + τ 1 u + τ 2 u 2 ) B = V ( v G + γ B ) z 2 + δ ( y , z ) G + T 1 ( t 1 G + τ 1 B ) u + T 2 ( t 2 G + τ 2 B ) u 2
其中 l u \mathbf{l}_u l u 、r u \mathbf{r}_u r u 、t 1 t_1 t 1 、t 2 t_2 t 2 为:
l u = a L − z ⋅ 1 n r u = y n ∘ a R + y n ⋅ z + z 2 ⋅ 2 n t 1 = ⟨ ( a L − z ⋅ 1 ) , y n ∘ s R ⟩ + ⟨ y n ∘ ( a R + z ⋅ 1 ) + z 2 2 n , s L ⟩ t 2 = ⟨ s L , y n ∘ s R ⟩ \begin{align*}
\mathbf{l}_u &= \mathbf{a_L} - z \cdot \mathbf{1}^n\\
\mathbf{r}_u &= \mathbf{y}^n \circ \mathbf{a_R} + \mathbf{y}^n\cdot z + z^2 \cdot 2^n\\
t_1 &= \langle(\mathbf{a}_L-z\cdot\mathbf{1}),\mathbf{y}^n\circ\mathbf{s}_R\rangle+\langle\mathbf{y}^n\circ(\mathbf{a}_R+z\cdot\mathbf{1})+z^2\mathbf{2}^n,\mathbf{s_L}\rangle\\
t_2 &= \langle\mathbf{s}_L,\mathbf{y}^n\circ\mathbf{s}_R\rangle
\end{align*} l u r u t 1 t 2 = a L − z ⋅ 1 n = y n ∘ a R + y n ⋅ z + z 2 ⋅ 2 n = ⟨( a L − z ⋅ 1 ) , y n ∘ s R ⟩ + ⟨ y n ∘ ( a R + z ⋅ 1 ) + z 2 2 n , s L ⟩ = ⟨ s L , y n ∘ s R ⟩
然而,这样的代数运算将极其混乱。相反,我们观察到 z 2 v + δ ( y , z ) G z^2v+\delta(y,z)G z 2 v + δ ( y , z ) G 是向量多项式内积 ⟨ l ( x ) , r ( x ) ⟩ \langle\mathbf{l}(x),\mathbf{r}(x)\rangle ⟨ l ( x ) , r ( x )⟩ 的常数项。为了抵消 V V V 中 γ B \gamma B γ B 的盲化因子,请注意 π t \pi_t π t 包含了 z 2 γ z^2\gamma z 2 γ ,因此这将与 V z 2 = ( v G + γ B ) z 2 Vz^2 = (vG + \gamma B)z^2 V z 2 = ( v G + γ B ) z 2 中的 gamma 项相抵消。
因为 Pedersen 承诺是加法同态的,验证者可以简单地计算 δ ( y , z ) G \delta(y,z)G δ ( y , z ) G 并将其加到 V z 2 Vz^2 V z 2 上,从而计算出多项式 t ( x ) t(x) t ( x ) 常数项的承诺。
对数级大小的范围证明
我们可以通过发送一个对 l u \mathbf{l}_u l u 和 r u \mathbf{r}_u r u 的承诺 C C C ,并使用对数级大小的证明来证明所承诺的向量具有内积 t u t_u t u ,从而减少数据传输的大小,然后验证
A + S u + ⟨ − z ⋅ 1 n , G ⟩ + ⟨ z ⋅ y n + z 2 ⋅ 2 n , H y − 1 ⟩ − π l r B = ? C A + Su + \langle -z\cdot\mathbf{1}^n,\mathbf{G}\rangle + \langle z\cdot\mathbf{y}^n+z^2\cdot\mathbf{2}^n,\mathbf{H}_{\mathbf{y}^{-1}}\rangle-\pi_{lr}B\stackrel{?}{=} C A + S u + ⟨ − z ⋅ 1 n , G ⟩ + ⟨ z ⋅ y n + z 2 ⋅ 2 n , H y − 1 ⟩ − π l r B = ? C
以及
t u = ? ⟨ l u , r u ⟩ t_u \stackrel{?}{=} \langle \mathbf{l}_u, \mathbf{r}_u \rangle t u = ? ⟨ l u , r u ⟩
是相对于基向量 G \mathbf{G} G 和 H y − 1 \mathbf{H}_{\mathbf{y}^{-1}} H y − 1 成立的。
将范围证明算法应用于子集和问题
子集和问题 提出这样的问题:“给定一组数字,是否存在一个子集(可能包括整个集合)的总和为 k k k ?”例如,如果 k = 16 k = 16 k = 16 且集合为 { 3 , 5 , 7 , 11 } \set{3,5,7,11} { 3 , 5 , 7 , 11 } ,答案是“是”,因为 5 + 11 = 16 5 + 11 = 16 5 + 11 = 16 。但是,如果 k = 13 k=13 k = 13 ,则答案为“否”。
子集和问题是一个 NP-Complete(NP完全)问题,这意味着,类似于布尔电路或算术电路,它可以表示NP 中的任何问题。也就是说,NP中的任何问题都可以重写(技术术语为“归约(reduced) ”)为一个子集和问题实例。
通过将 2 n \mathbf{2}^n 2 n 替换为 [ 3 , 5 , 7 , 11 ] [3,5,7,11] [ 3 , 5 , 7 , 11 ] ,我们可以证明自己知道子集和问题的解,而无需泄露答案。具体来说,如果 k = 16 k=16 k = 16 ,证明者会知道 a L = [ 0 , 1 , 0 , 1 ] \mathbf{a}_L= [0,1,0,1] a L = [ 0 , 1 , 0 , 1 ] 。一般来说,a L \mathbf{a}_L a L 中的 1 表示我们把该元素包含在子集中,0 则表示不包含在子集中。
因此,Bulletproofs 能够为 NP 中的任何问题证明对任何见证(witness)的知识。
附录:将三个内积合并为一个的推导
从三个内积开始
z 2 ⋅ ⟨ a L , 2 n ⟩ + z ⋅ ⟨ a L − 1 n − a R , y n ⟩ + ⟨ a L , a R ∘ y n ⟩ = z 2 ⋅ v z^2 \cdot \langle \mathbf{a_L}, \mathbf{2}^n \rangle + z \cdot \langle \mathbf{a_L} - \mathbf{1}^n - \mathbf{a_R}, \mathbf{y}^n \rangle + \langle \mathbf{a_L}, \mathbf{a_R} \circ \mathbf{y}^n \rangle = z^2 \cdot v z 2 ⋅ ⟨ a L , 2 n ⟩ + z ⋅ ⟨ a L − 1 n − a R , y n ⟩ + ⟨ a L , a R ∘ y n ⟩ = z 2 ⋅ v
我们将展示如何使用之前学过的内积代数来推导最终结果
⟨ a L − z ⋅ 1 n , a R ∘ y n + z ⋅ y n + z 2 ⋅ 2 n ⟩ = z 2 ⋅ v + ( z − z 2 ) ⋅ ⟨ 1 n , y n ⟩ − z 3 ⟨ ⋅ 1 n , 2 n ⟩ \langle \mathbf{a_L}-z\cdot\mathbf{1}^n, \mathbf{a}_R\circ\mathbf{y}^n+z\cdot\mathbf{y}^n+z^2\cdot\mathbf{2}^n \rangle= z^2 \cdot v+(z-z^2)\cdot\langle\mathbf{1}^n,\mathbf{y}^n\rangle-z^3\langle\cdot\mathbf{1}^n,\mathbf{2}^n\rangle ⟨ a L − z ⋅ 1 n , a R ∘ y n + z ⋅ y n + z 2 ⋅ 2 n ⟩ = z 2 ⋅ v + ( z − z 2 ) ⋅ ⟨ 1 n , y n ⟩ − z 3 ⟨ ⋅ 1 n , 2 n ⟩
中间项可以被拆分为独立的内积:
z 2 ⋅ ⟨ a L , 2 n ⟩ + z ⋅ ⟨ a L − 1 n − a R , y n ⟩ + ⟨ a L , a R ∘ y n ⟩ = z 2 ⋅ v z^2 \cdot \langle \mathbf{a_L}, \mathbf{2}^n \rangle + \boxed{z \cdot \langle \mathbf{a_L} - \mathbf{1}^n - \mathbf{a_R}, \mathbf{y}^n \rangle} + \langle \mathbf{a_L}, \mathbf{a_R} \circ \mathbf{y}^n \rangle = z^2 \cdot v z 2 ⋅ ⟨ a L , 2 n ⟩ + z ⋅ ⟨ a L − 1 n − a R , y n ⟩ + ⟨ a L , a R ∘ y n ⟩ = z 2 ⋅ v
z 2 ⋅ ⟨ a L , 2 n ⟩ + z ⋅ ⟨ a L , y n ⟩ + z ⋅ ⟨ − 1 n , y n ⟩ + z ⋅ ⟨ − a R , y n ⟩ + ⟨ a L , a R ∘ y n ⟩ = z 2 ⋅ v z^2 \cdot \langle \mathbf{a_L}, \mathbf{2}^n \rangle+\boxed{z\cdot\langle\mathbf{a}_L,\mathbf{y}^n\rangle+z\cdot\langle-\mathbf{1}^n,\mathbf{y}^n\rangle+z\cdot\langle-\mathbf{a}_R,\mathbf{y}^n\rangle}+\langle \mathbf{a_L}, \mathbf{a_R} \circ \mathbf{y}^n \rangle=z^2\cdot v z 2 ⋅ ⟨ a L , 2 n ⟩ + z ⋅ ⟨ a L , y n ⟩ + z ⋅ ⟨ − 1 n , y n ⟩ + z ⋅ ⟨ − a R , y n ⟩ + ⟨ a L , a R ∘ y n ⟩ = z 2 ⋅ v
我们可以把常数 z z z 移到内积里面:
⟨ a L , z 2 ⋅ 2 n ⟩ + ⟨ a L , z ⋅ y n ⟩ + ⟨ − z ⋅ 1 n , y n ⟩ + ⟨ − a R , z ⋅ y n ⟩ + ⟨ a L , a R ∘ y n ⟩ = z 2 ⋅ v \langle \mathbf{a_L}, z^2\cdot\mathbf{2}^n \rangle+\langle\mathbf{a}_L,z\cdot\mathbf{y}^n\rangle+\langle-z\cdot\mathbf{1}^n,\mathbf{y}^n\rangle+\langle-\mathbf{a}_R,z\cdot\mathbf{y}^n\rangle+\langle \mathbf{a_L}, \mathbf{a_R} \circ \mathbf{y}^n \rangle= z^2 \cdot v ⟨ a L , z 2 ⋅ 2 n ⟩ + ⟨ a L , z ⋅ y n ⟩ + ⟨ − z ⋅ 1 n , y n ⟩ + ⟨ − a R , z ⋅ y n ⟩ + ⟨ a L , a R ∘ y n ⟩ = z 2 ⋅ v
把验证者已知的值移到右边:
⟨ a L , z 2 ⋅ 2 n ⟩ + ⟨ a L , z ⋅ y n ⟩ + ⟨ − z ⋅ 1 n , y n ⟩ + ⟨ − a R , z ⋅ y n ⟩ + ⟨ a L , a R ∘ y n ⟩ = z 2 ⋅ v \langle \mathbf{a_L}, z^2\cdot\mathbf{2}^n \rangle+\langle\mathbf{a}_L,z\cdot\mathbf{y}^n\rangle+\boxed{\langle-z\cdot\mathbf{1}^n,\mathbf{y}^n\rangle}+\langle-\mathbf{a}_R,z\cdot\mathbf{y}^n\rangle+\langle \mathbf{a_L}, \mathbf{a_R} \circ \mathbf{y}^n \rangle= z^2 \cdot v ⟨ a L , z 2 ⋅ 2 n ⟩ + ⟨ a L , z ⋅ y n ⟩ + ⟨ − z ⋅ 1 n , y n ⟩ + ⟨ − a R , z ⋅ y n ⟩ + ⟨ a L , a R ∘ y n ⟩ = z 2 ⋅ v
⟨ a L , z 2 ⋅ 2 n ⟩ + ⟨ a L , z ⋅ y n ⟩ + ⟨ − a R , z ⋅ y n ⟩ + ⟨ a L , a R ∘ y n ⟩ = z 2 ⋅ v − ⟨ − z ⋅ 1 n , y n ⟩ \langle \mathbf{a_L}, z^2\cdot\mathbf{2}^n \rangle+\langle\mathbf{a}_L,z\cdot\mathbf{y}^n\rangle+\langle-\mathbf{a}_R,z\cdot\mathbf{y}^n\rangle+\langle \mathbf{a_L}, \mathbf{a_R} \circ \mathbf{y}^n \rangle= z^2 \cdot v-\boxed{\langle-z\cdot\mathbf{1}^n,\mathbf{y}^n\rangle} ⟨ a L , z 2 ⋅ 2 n ⟩ + ⟨ a L , z ⋅ y n ⟩ + ⟨ − a R , z ⋅ y n ⟩ + ⟨ a L , a R ∘ y n ⟩ = z 2 ⋅ v − ⟨ − z ⋅ 1 n , y n ⟩
将所有的 a R \mathbf{a}_R a R 项都转换为 a R ∘ y n \mathbf{a}_R\circ\mathbf{y}^n a R ∘ y n :
⟨ a L , z 2 ⋅ 2 n ⟩ + ⟨ a L , z ⋅ y n ⟩ + ⟨ − a R ∘ y n , z ⋅ 1 n ⟩ + ⟨ a L , a R ∘ y n ⟩ = z 2 ⋅ v − ⟨ − z ⋅ 1 n , y n ⟩ \langle \mathbf{a_L}, z^2\cdot\mathbf{2}^n \rangle+\langle\mathbf{a}_L,z\cdot\mathbf{y}^n\rangle+\boxed{\langle-\mathbf{a}_R\circ\mathbf{y}^n,z\cdot\mathbf{1}^n\rangle}+\langle \mathbf{a_L}, \mathbf{a_R} \circ \mathbf{y}^n \rangle= z^2 \cdot v-\langle-z\cdot\mathbf{1}^n,\mathbf{y}^n\rangle ⟨ a L , z 2 ⋅ 2 n ⟩ + ⟨ a L , z ⋅ y n ⟩ + ⟨ − a R ∘ y n , z ⋅ 1 n ⟩ + ⟨ a L , a R ∘ y n ⟩ = z 2 ⋅ v − ⟨ − z ⋅ 1 n , y n ⟩
⟨ a L , z 2 ⋅ 2 n ⟩ + ⟨ a L , z ⋅ y n ⟩ + ⟨ a R ∘ y n , − z ⋅ 1 n ⟩ + ⟨ a L , a R ∘ y n ⟩ = z 2 ⋅ v − ⟨ − z ⋅ 1 n , y n ⟩ \langle \mathbf{a_L}, z^2\cdot\mathbf{2}^n \rangle+\langle\mathbf{a}_L,z\cdot\mathbf{y}^n\rangle+\boxed{\langle\mathbf{a}_R\circ\mathbf{y}^n,-z\cdot\mathbf{1}^n\rangle}+\langle \mathbf{a_L}, \mathbf{a_R} \circ \mathbf{y}^n \rangle= z^2 \cdot v-\langle-z\cdot\mathbf{1}^n,\mathbf{y}^n\rangle ⟨ a L , z 2 ⋅ 2 n ⟩ + ⟨ a L , z ⋅ y n ⟩ + ⟨ a R ∘ y n , − z ⋅ 1 n ⟩ + ⟨ a L , a R ∘ y n ⟩ = z 2 ⋅ v − ⟨ − z ⋅ 1 n , y n ⟩
⟨ a L , z 2 ⋅ 2 n ⟩ + ⟨ a L , z ⋅ y n ⟩ + ⟨ a R ∘ y n , − z ⋅ 1 n ⟩ + ⟨ a L , a R ∘ y n ⟩ = z 2 ⋅ v − ⟨ − z ⋅ 1 n , y n ⟩ \langle \mathbf{a_L}, z^2\cdot\mathbf{2}^n \rangle+\langle\mathbf{a}_L,z\cdot\mathbf{y}^n\rangle+{\langle\mathbf{a}_R\circ\mathbf{y}^n,-z\cdot\mathbf{1}^n\rangle}+\boxed{\langle \mathbf{a_L}, \mathbf{a_R} \circ \mathbf{y}^n \rangle}= z^2 \cdot v-\langle-z\cdot\mathbf{1}^n,\mathbf{y}^n\rangle ⟨ a L , z 2 ⋅ 2 n ⟩ + ⟨ a L , z ⋅ y n ⟩ + ⟨ a R ∘ y n , − z ⋅ 1 n ⟩ + ⟨ a L , a R ∘ y n ⟩ = z 2 ⋅ v − ⟨ − z ⋅ 1 n , y n ⟩
⟨ a L , z 2 ⋅ 2 n ⟩ + ⟨ a L , z ⋅ y n ⟩ + ⟨ a R ∘ y n , − z ⋅ 1 n ⟩ + ⟨ a R ∘ y n , a L ⟩ = z 2 ⋅ v − ⟨ − z ⋅ 1 n , y n ⟩ \langle \mathbf{a_L}, z^2\cdot\mathbf{2}^n \rangle+\langle\mathbf{a}_L,z\cdot\mathbf{y}^n\rangle+\langle\mathbf{a}_R\circ\mathbf{y}^n,-z\cdot\mathbf{1}^n\rangle+\langle \mathbf{a_R} \circ \mathbf{y}^n,\mathbf{a_L} \rangle = z^2 \cdot v-\langle-z\cdot\mathbf{1}^n,\mathbf{y}^n\rangle ⟨ a L , z 2 ⋅ 2 n ⟩ + ⟨ a L , z ⋅ y n ⟩ + ⟨ a R ∘ y n , − z ⋅ 1 n ⟩ + ⟨ a R ∘ y n , a L ⟩ = z 2 ⋅ v − ⟨ − z ⋅ 1 n , y n ⟩
把 a R ∘ y n \mathbf{a}_R\circ\mathbf{y}^n a R ∘ y n 项合并为一个:
⟨ a L , z 2 ⋅ 2 n ⟩ + ⟨ a L , z ⋅ y n ⟩ + ⟨ a R ∘ y n , − z ⋅ 1 n ⟩ + ⟨ a R ∘ y n , a L ⟩ ⏟ = z 2 ⋅ v − ⟨ − z ⋅ 1 n , y n ⟩ \langle \mathbf{a_L}, z^2\cdot\mathbf{2}^n \rangle+\langle\mathbf{a}_L,z\cdot\mathbf{y}^n\rangle+\underbrace{\langle\mathbf{a}_R\circ\mathbf{y}^n,-z\cdot\mathbf{1}^n\rangle+\langle \mathbf{a_R} \circ \mathbf{y}^n,\mathbf{a_L} \rangle} = z^2 \cdot v-\langle-z\cdot\mathbf{1}^n,\mathbf{y}^n\rangle ⟨ a L , z 2 ⋅ 2 n ⟩ + ⟨ a L , z ⋅ y n ⟩ + ⟨ a R ∘ y n , − z ⋅ 1 n ⟩ + ⟨ a R ∘ y n , a L ⟩ = z 2 ⋅ v − ⟨ − z ⋅ 1 n , y n ⟩
⟨ a L , z 2 ⋅ 2 n ⟩ + ⟨ a L , z ⋅ y n ⟩ + ⟨ a R ∘ y n , a L − z ⋅ 1 n ⟩ = z 2 ⋅ v − ⟨ − z ⋅ 1 n , y n ⟩ \langle \mathbf{a_L}, z^2\cdot\mathbf{2}^n \rangle+\langle\mathbf{a}_L,z\cdot\mathbf{y}^n\rangle+\langle\mathbf{a}_R\circ\mathbf{y}^n,\mathbf{a}_L-z\cdot\mathbf{1}^n\rangle= z^2 \cdot v-\langle-z\cdot\mathbf{1}^n,\mathbf{y}^n\rangle ⟨ a L , z 2 ⋅ 2 n ⟩ + ⟨ a L , z ⋅ y n ⟩ + ⟨ a R ∘ y n , a L − z ⋅ 1 n ⟩ = z 2 ⋅ v − ⟨ − z ⋅ 1 n , y n ⟩
合并左边的两个 a L \mathbf{a}_L a L 项:
⟨ a L , z 2 ⋅ 2 n ⟩ + ⟨ a L , z ⋅ y n ⟩ + ⟨ a R ∘ y n , a L − z ⋅ 1 n ⟩ = z 2 ⋅ v − ⟨ − z ⋅ 1 n , y n ⟩ \langle \boxed{\mathbf{a_L}}, z^2\cdot\mathbf{2}^n \rangle+\langle\boxed{\mathbf{a}_L},z\cdot\mathbf{y}^n\rangle+\langle\mathbf{a}_R\circ\mathbf{y}^n,\mathbf{a}_L-z\cdot\mathbf{1}^n\rangle= z^2 \cdot v-\langle-z\cdot\mathbf{1}^n,\mathbf{y}^n\rangle ⟨ a L , z 2 ⋅ 2 n ⟩ + ⟨ a L , z ⋅ y n ⟩ + ⟨ a R ∘ y n , a L − z ⋅ 1 n ⟩ = z 2 ⋅ v − ⟨ − z ⋅ 1 n , y n ⟩
⟨ a L , z ⋅ y n + z 2 ⋅ 2 n ⟩ + ⟨ a R ∘ y n , a L − z ⋅ 1 n ⟩ = z 2 ⋅ v − ⟨ − z ⋅ 1 n , y n ⟩ \langle \mathbf{a_L}, z\cdot\mathbf{y}^n+z^2\cdot\mathbf{2}^n \rangle+\langle\mathbf{a}_R\circ\mathbf{y}^n,\mathbf{a}_L-z\cdot\mathbf{1}^n\rangle= z^2 \cdot v-\langle-z\cdot\mathbf{1}^n,\mathbf{y}^n\rangle ⟨ a L , z ⋅ y n + z 2 ⋅ 2 n ⟩ + ⟨ a R ∘ y n , a L − z ⋅ 1 n ⟩ = z 2 ⋅ v − ⟨ − z ⋅ 1 n , y n ⟩
把左边最后一项拆分为两个内积:
⟨ a L , z ⋅ y n + z 2 ⋅ 2 n ⟩ + ⟨ a R ∘ y n , a L − z ⋅ 1 n ⟩ = z 2 ⋅ v − ⟨ − z ⋅ 1 n , y n ⟩ \langle \mathbf{a_L}, z\cdot\mathbf{y}^n+z^2\cdot\mathbf{2}^n \rangle+\boxed{\langle\mathbf{a}_R\circ\mathbf{y}^n,\mathbf{a}_L-z\cdot\mathbf{1}^n\rangle}= z^2 \cdot v-\langle-z\cdot\mathbf{1}^n,\mathbf{y}^n\rangle ⟨ a L , z ⋅ y n + z 2 ⋅ 2 n ⟩ + ⟨ a R ∘ y n , a L − z ⋅ 1 n ⟩ = z 2 ⋅ v − ⟨ − z ⋅ 1 n , y n ⟩
⟨ a L , z ⋅ y n + z 2 ⋅ 2 n ⟩ + ⟨ a R ∘ y n , a L ⟩ + ⟨ a R ∘ y n , − z ⋅ 1 n ⟩ = z 2 ⋅ v − ⟨ − z ⋅ 1 n , y n ⟩ \langle \mathbf{a_L}, z\cdot\mathbf{y}^n+z^2\cdot\mathbf{2}^n \rangle+\langle\mathbf{a}_R\circ\mathbf{y}^n,\mathbf{a}_L\rangle+\langle\mathbf{a}_R\circ\mathbf{y}^n,-z\cdot\mathbf{1}^n\rangle= z^2 \cdot v-\langle-z\cdot\mathbf{1}^n,\mathbf{y}^n\rangle ⟨ a L , z ⋅ y n + z 2 ⋅ 2 n ⟩ + ⟨ a R ∘ y n , a L ⟩ + ⟨ a R ∘ y n , − z ⋅ 1 n ⟩ = z 2 ⋅ v − ⟨ − z ⋅ 1 n , y n ⟩
合并 a L \mathbf{a}_L a L 项:
⟨ a L , z ⋅ y n + z 2 ⋅ 2 n ⟩ + ⟨ a R ∘ y n , a L ⟩ + ⟨ a R ∘ y n , − z ⋅ 1 n ⟩ = z 2 ⋅ v − ⟨ − z ⋅ 1 n , y n ⟩ \langle \boxed{\mathbf{a_L}}, z\cdot\mathbf{y}^n+z^2\cdot\mathbf{2}^n \rangle+\langle\mathbf{a}_R\circ\mathbf{y}^n,
\boxed{\mathbf{a}_L}\rangle+\langle\mathbf{a}_R\circ\mathbf{y}^n,-z\cdot\mathbf{1}^n\rangle= z^2 \cdot v-\langle-z\cdot\mathbf{1}^n,\mathbf{y}^n\rangle ⟨ a L , z ⋅ y n + z 2 ⋅ 2 n ⟩ + ⟨ a R ∘ y n , a L ⟩ + ⟨ a R ∘ y n , − z ⋅ 1 n ⟩ = z 2 ⋅ v − ⟨ − z ⋅ 1 n , y n ⟩
⟨ a L , a R ∘ y n + z ⋅ y n + z 2 ⋅ 2 n ⟩ + ⟨ a R ∘ y n , − z ⋅ 1 n ⟩ = z 2 ⋅ v − ⟨ − z ⋅ 1 n , y n ⟩ \langle \mathbf{a_L}, \mathbf{a}_R\circ\mathbf{y}^n+z\cdot\mathbf{y}^n+z^2\cdot\mathbf{2}^n \rangle+\langle\mathbf{a}_R\circ\mathbf{y}^n,-z\cdot\mathbf{1}^n\rangle= z^2 \cdot v-\langle-z\cdot\mathbf{1}^n,\mathbf{y}^n\rangle ⟨ a L , a R ∘ y n + z ⋅ y n + z 2 ⋅ 2 n ⟩ + ⟨ a R ∘ y n , − z ⋅ 1 n ⟩ = z 2 ⋅ v − ⟨ − z ⋅ 1 n , y n ⟩
我们可以利用规则 ⟨ x , b + c ⟩ + ⟨ b , y ⟩ = v → ⟨ x + y , b + c ⟩ = v + ⟨ y , c ⟩ \langle \mathbf{x}, \mathbf{b} + \mathbf{c}\rangle + \langle \mathbf{b}, \mathbf{y}\rangle = v \rightarrow \langle \mathbf{x} + \mathbf{y}, \mathbf{b} + \mathbf{c}\rangle = v + \langle\mathbf{y},\mathbf{c}\rangle ⟨ x , b + c ⟩ + ⟨ b , y ⟩ = v → ⟨ x + y , b + c ⟩ = v + ⟨ y , c ⟩ 来合并包含 a R ∘ y n \mathbf{a}_R\circ\mathbf{y}^n a R ∘ y n 的项。此处 b \mathbf{b} b 为 a R ∘ y n \mathbf{a}_R\circ\mathbf{y}^n a R ∘ y n ,c \mathbf{c} c 为 z ⋅ y n + z 2 ⋅ 2 n z\cdot\mathbf{y}^n+z^2\cdot\mathbf{2}^n z ⋅ y n + z 2 ⋅ 2 n ,y \mathbf{y} y 为 − z ⋅ 1 n -z\cdot\mathbf{1}^n − z ⋅ 1 n 。
⟨ a L ⏟ x , a R ∘ y n ⏟ b + z ⋅ y n + z 2 ⋅ 2 n ⏟ c ⟩ + ⟨ a R ∘ y n ⏟ b , − z ⋅ 1 n ⏟ y ⟩ = z 2 ⋅ v − ⟨ − z ⋅ 1 n , y n ⟩ ⏟ v \langle \underbrace{\mathbf{a_L}}_\mathbf{x}, \underbrace{\mathbf{a}_R\circ\mathbf{y}^n}_\mathbf{b}+\underbrace{z\cdot\mathbf{y}^n+z^2\cdot\mathbf{2}^n}_\mathbf{c} \rangle+\langle\underbrace{\mathbf{a}_R\circ\mathbf{y}^n}_\mathbf{b},\underbrace{-z\cdot\mathbf{1}^n}_\mathbf{y}\rangle= \underbrace{z^2 \cdot v-\langle-z\cdot\mathbf{1}^n,\mathbf{y}^n\rangle}_v ⟨ x a L , b a R ∘ y n + c z ⋅ y n + z 2 ⋅ 2 n ⟩ + ⟨ b a R ∘ y n , y − z ⋅ 1 n ⟩ = v z 2 ⋅ v − ⟨ − z ⋅ 1 n , y n ⟩
⟨ a L ⏟ x − z ⋅ 1 n ⏟ y , a R ∘ y n ⏟ b + z ⋅ y n + z 2 ⋅ 2 n ⏟ c ⟩ = z 2 ⋅ v − ⟨ − z ⋅ 1 n , y n ⟩ ⏟ v + ⟨ − z ⋅ 1 n ⏟ y , z ⋅ y n + z 2 ⋅ 2 n ⏟ c ⟩ \langle \underbrace{\mathbf{a_L}}_\mathbf{x}-\underbrace{z\cdot\mathbf{1}^n}_\mathbf{y}, \underbrace{\mathbf{a}_R\circ\mathbf{y}^n}_\mathbf{b}+\underbrace{z\cdot\mathbf{y}^n+z^2\cdot\mathbf{2}^n}_\mathbf{c} \rangle= \underbrace{z^2 \cdot v-\langle-z\cdot\mathbf{1}^n,\mathbf{y}^n\rangle}_v+\langle\underbrace{-z\cdot\mathbf{1}^n}_\mathbf{y},\underbrace{z\cdot\mathbf{y}^n+z^2\cdot\mathbf{2}^n}_\mathbf{c}\rangle ⟨ x a L − y z ⋅ 1 n , b a R ∘ y n + c z ⋅ y n + z 2 ⋅ 2 n ⟩ = v z 2 ⋅ v − ⟨ − z ⋅ 1 n , y n ⟩ + ⟨ y − z ⋅ 1 n , c z ⋅ y n + z 2 ⋅ 2 n ⟩
⟨ a L − z ⋅ 1 n , a R ∘ y n + z ⋅ y n + z 2 ⋅ 2 n ⟩ = z 2 ⋅ v − ⟨ − z ⋅ 1 n , y n ⟩ + ⟨ − z ⋅ 1 n , z ⋅ y n + z 2 ⋅ 2 n ⟩ \langle \mathbf{a_L}-z\cdot\mathbf{1}^n, \mathbf{a}_R\circ\mathbf{y}^n+z\cdot\mathbf{y}^n+z^2\cdot\mathbf{2}^n \rangle= z^2 \cdot v-\langle-z\cdot\mathbf{1}^n,\mathbf{y}^n\rangle+\langle-z\cdot\mathbf{1}^n,z\cdot\mathbf{y}^n+z^2\cdot\mathbf{2}^n\rangle ⟨ a L − z ⋅ 1 n , a R ∘ y n + z ⋅ y n + z 2 ⋅ 2 n ⟩ = z 2 ⋅ v − ⟨ − z ⋅ 1 n , y n ⟩ + ⟨ − z ⋅ 1 n , z ⋅ y n + z 2 ⋅ 2 n ⟩
我们现在拆分右边的项:
⟨ a L − z ⋅ 1 n , a R ∘ y n + z ⋅ y n + z 2 ⋅ 2 n ⟩ = z 2 ⋅ v − ⟨ − z ⋅ 1 n , y n ⟩ + ⟨ − z ⋅ 1 n , z ⋅ y n ⟩ + ⟨ − z ⋅ 1 n , z 2 ⋅ 2 n ⟩ \langle \mathbf{a_L}-z\cdot\mathbf{1}^n, \mathbf{a}_R\circ\mathbf{y}^n+z\cdot\mathbf{y}^n+z^2\cdot\mathbf{2}^n \rangle= z^2 \cdot v-\langle-z\cdot\mathbf{1}^n,\mathbf{y}^n\rangle+\langle-z\cdot\mathbf{1}^n,z\cdot\mathbf{y}^n\rangle+\langle-z\cdot\mathbf{1}^n,z^2\cdot\mathbf{2}^n\rangle ⟨ a L − z ⋅ 1 n , a R ∘ y n + z ⋅ y n + z 2 ⋅ 2 n ⟩ = z 2 ⋅ v − ⟨ − z ⋅ 1 n , y n ⟩ + ⟨ − z ⋅ 1 n , z ⋅ y n ⟩ + ⟨ − z ⋅ 1 n , z 2 ⋅ 2 n ⟩
将右边内积中的标量提取出来:
⟨ a L − z ⋅ 1 n , a R ∘ y n + z ⋅ y n + z 2 ⋅ 2 n ⟩ = z 2 ⋅ v + z ⋅ ⟨ 1 n , y n ⟩ − z 2 ⋅ ⟨ 1 n , y n ⟩ − z 3 ⟨ ⋅ 1 n , 2 n ⟩ \langle \mathbf{a_L}-z\cdot\mathbf{1}^n, \mathbf{a}_R\circ\mathbf{y}^n+z\cdot\mathbf{y}^n+z^2\cdot\mathbf{2}^n \rangle= z^2 \cdot v+z\cdot\langle\mathbf{1}^n,\mathbf{y}^n\rangle-z^2\cdot\langle\mathbf{1}^n,\mathbf{y}^n\rangle-z^3\langle\cdot\mathbf{1}^n,\mathbf{2}^n\rangle ⟨ a L − z ⋅ 1 n , a R ∘ y n + z ⋅ y n + z 2 ⋅ 2 n ⟩ = z 2 ⋅ v + z ⋅ ⟨ 1 n , y n ⟩ − z 2 ⋅ ⟨ 1 n , y n ⟩ − z 3 ⟨ ⋅ 1 n , 2 n ⟩
提取出公因子 ⟨ 1 n , y n ⟩ \langle\mathbf{1}^n,\mathbf{y}^n\rangle ⟨ 1 n , y n ⟩ :
⟨ a L − z ⋅ 1 n , a R ∘ y n + z ⋅ y n + z 2 ⋅ 2 n ⟩ = z 2 ⋅ v + ( z − z 2 ) ⋅ ⟨ 1 n , y n ⟩ − z 3 ⟨ ⋅ 1 n , 2 n ⟩ \langle \mathbf{a_L}-z\cdot\mathbf{1}^n, \mathbf{a}_R\circ\mathbf{y}^n+z\cdot\mathbf{y}^n+z^2\cdot\mathbf{2}^n \rangle= z^2 \cdot v+(z-z^2)\cdot\langle\mathbf{1}^n,\mathbf{y}^n\rangle-z^3\langle\cdot\mathbf{1}^n,\mathbf{2}^n\rangle ⟨ a L − z ⋅ 1 n , a R ∘ y n + z ⋅ y n + z 2 ⋅ 2 n ⟩ = z 2 ⋅ v + ( z − z 2 ) ⋅ ⟨ 1 n , y n ⟩ − z 3 ⟨ ⋅ 1 n , 2 n ⟩
因为 δ ( y , z ) = ( z − z 2 ) ⋅ ⟨ 1 n , y n ⟩ − z 3 ⟨ ⋅ 1 n , 2 n ⟩ \delta(y,z)=(z-z^2)\cdot\langle\mathbf{1}^n,\mathbf{y}^n\rangle-z^3\langle\cdot\mathbf{1}^n,\mathbf{2}^n\rangle δ ( y , z ) = ( z − z 2 ) ⋅ ⟨ 1 n , y n ⟩ − z 3 ⟨ ⋅ 1 n , 2 n ⟩ ,我们得到:
⟨ a L − z ⋅ 1 n , a R ∘ y n + z ⋅ y n + z 2 ⋅ 2 n ⟩ = z 2 ⋅ v + δ ( y , z ) \langle \mathbf{a_L}-z\cdot\mathbf{1}^n, \mathbf{a}_R\circ\mathbf{y}^n+z\cdot\mathbf{y}^n+z^2\cdot\mathbf{2}^n \rangle= z^2 \cdot v+\delta(y,z) ⟨ a L − z ⋅ 1 n , a R ∘ y n + z ⋅ y n + z 2 ⋅ 2 n ⟩ = z 2 ⋅ v + δ ( y , z )
推导完毕。■ \blacksquare ■