Pointproofs: Aggregating Proofs for Multiple Vector Commitments 学习笔记2

1. 引言

在博客 Pointproofs: Aggregating Proofs for Multiple Vector Commitments 学习笔记1中,主要对 Alogrand团队Gorbunov等人2020年论文《Pointproofs: Aggregating Proofs for Multiple Vector Commitments》做了一个总体的梳理。该论文在 Libert和Yung 2010年论文《Concise mercurial vector commitments and independent zero-knowledge sets with short proofs》的基础上,做了以下改进:

  • 采用了非对称bilinear pairing group,并针对G1\mathbb{G}_1域内的运算效率>G2\mathbb{G}_2>GT\mathbb{G}_T,对Verify算法做了优化(计算r=(iSmiti)1 mod pr=(\sum_{i\in S}m_it_i)^{-1}\ mod\ p,将GT\mathbb{G}_T域内的运算转移到G1\mathbb{G}_1域内):
    Pointproofs: Aggregating Proofs for Multiple Vector Commitments 学习笔记2
  • 采用Random Oracle Model,基于hash函数HH引入了随机参数ti=H(i,C,S,m[S])t_i=H(i,C,S,\vec{m}[S])来实现same-commitment aggregation;基于hash函数HHHH'引入了随机参数tj,i=H(i,Cj,Sj,mj[Sj])t_{j,i}=H(i,C_j,S_j,\vec{m}_j[S_j])tj=H(j,{Cj,Sj,mj[Sj]}j[l])t_j'=H'(j,\{C_j,S_j,\vec{m}_j[S_j]\}_{j\in[l]})来实现cross-commitment aggregation。

本博客将重点关注:

  • proof of correctness/binding for same-commitment aggregation
  • proof of correctness/binding for cross-commitment aggregation
  • same-commitment aggregation from CDH-like assumption
  • weak binding and realization
  • cross-commitment aggregation from polynomial commitments
  • https://github.com/algorand/pointproofs 代码解析

该论文实现的binding属性是基于AGW+ROM model under the ll-wBDHE assumption:(详细定义参见博客 Pointproofs: Aggregating Proofs for Multiple Vector Commitments 学习笔记1 1.1节内容)
Pointproofs: Aggregating Proofs for Multiple Vector Commitments 学习笔记2

2. proof of correctness/binding for same-commitment aggregation

2.1 same commitment aggregation

具体的实现为:

  • Setup(1λ,1N1^{\lambda},1^N):取随机值αZp\alpha\leftarrow \mathbb{Z}_p,输出:【其中a=(α,α2,,αN)\vec{a}=(\alpha,\alpha^2,\cdots,\alpha^N)
    g1a=(g1α,,g1αN)g_1^{\vec{a}}=(g_1^\alpha,\cdots,g_1^{\alpha^N})
    g1αNa[1]=(g1αN+2,,g1α2N)g_1^{\alpha^N\vec{a}[-1]}=(g_1^{\alpha^{N+2}},\cdots,g_1^{\alpha^{2N}})
    g2a=(g2α,,g2αN)g_2^{\vec{a}}=(g_2^\alpha,\cdots,g_2^{\alpha^N})
    gTαN+1=e(g1α,g2αN)g_T^{\alpha^{N+1}}=e(g_1^{\alpha},g_2^{\alpha^N})
    Prove key为:g1ag1αNa[1]g_1^{\vec{a}},g_1^{\alpha^N\vec{a}[-1]}
    Verify key为:g2a,gTαN+1g_2^{\vec{a}},g_T^{\alpha^{N+1}}
    α\alpha为有毒垃圾,trusted setup后应直接丢弃,must never be known to the adversary。

  • Commit(m\vec{m}) for mZpN\vec{m}\in \mathbb{Z}_p^N
    C=g1mTa=g1iSmiαiC=g_1^{\vec{m}^T\vec{a}}=g_1^{\sum_{i\in S}m_i\alpha^i}

  • UpdateCommit(C,S,m[S],m[S]C,S,\vec{m}[S],\vec{m}'[S]):
    C=Cg1(m[S]m[S])Ta[S]=Cg1iS(mimi)αiC'=C\cdot g_1^{(\vec{m}'[S]-\vec{m}[S])^T\vec{a}[S]}=C\cdot g_1^{\sum_{i\in S}(m_i'-m_i)\alpha^i}

  • Prove(i,mi,\vec{m}):open第ii个位置。
    πi=g1αN+1im[i]Ta[i]=g1j[N]{i}mjαN+1i+j\pi_i=g_1^{\alpha^{N+1-i}\vec{m}[-i]^T\vec{a}[-i]}=g_1^{\sum_{j\in [N]-\{i\}}m_j\alpha^{N+1-i+j}}
    其中g1αN+1ia[i]g_1^{\alpha^{N+1-i}\vec{a}[-i]}均已包含在了Prove key中了。
    mjm_j at index jij\neq i changes to mjm_j',则πi=πg1(mjmj)αN+1i+j\pi_i'=\pi\cdot g_1^{(m_j'-m_j)\alpha^{N+1-i+j}},若mim_i changes to mim_i',则proof 不变πi=πi\pi_i'=\pi_i。但是两种情况下,commitment CC均需要更新为CC'

  • Aggregate(C,S,m[S],{πi:iS}C,S,\vec{m}[S],\{\pi_i:i\in S\}):
    π^=iSπiti\hat{\pi}=\prod_{i\in S}\pi_i^{t_i}
    其中 ti=H(i,C,S,m[S])t_i=H(i,C,S,\vec{m}[S])

  • Verify(C,S,m[S],π^C,S,\vec{m}[S],\hat{\pi}):
    验证e(C,g2iSαN+1iti)=e(π^,g2)gTαN+1iSmitie(C,g_2^{\sum_{i\in S}\alpha^{N+1-i}t_i})=e(\hat{\pi},g_2)\cdot g_T^{\alpha^{N+1}\sum_{i\in S}m_it_i} 是否成立。
    其中 ti=H(i,C,S,m[S])t_i=H(i,C,S,\vec{m}[S])

2.2 proof of correctness for same-commitment aggregation

对于任意的i[N],πi=Prove(i,m)=g1αN+1im[i]Ta[i]i\in [N],\pi_i=Prove(i,\vec{m})=g_1^{\alpha^{N+1-i}\vec{m}[-i]^T\vec{a}[-i]},对Commit/Prove/Aggregate/Verify整个流程,可分两步证明:

  • 1)证明e(C,g2αN+1i)=e(πi,g2)gTαN+1mie(C,g_2^{\alpha^{N+1-i}})=e(\pi_i,g_2)\cdot g_T^{\alpha^{N+1}m_i}
  • 2)证明e(C,g2iSαN+1iti)=e(π^,g2)gTαN+1iSmitie(C,g_2^{\sum_{i\in S}\alpha^{N+1-i}t_i})=e(\hat{\pi},g_2)\cdot g_T^{\alpha^{N+1}\sum_{i\in S}m_it_i}

具体为:
1)有 mTa=m[i]Ta[i]+αimi\vec{m}^T\vec{a}=\vec{m}[-i]^T\vec{a}[-i]+\alpha^im_i
等式左右两边同时乘以αN+1i\alpha^{N+1-i},有:
(mTa)αN+1i=αN+1im[i]Ta[i]+αN+1mi(\vec{m}^T\vec{a})\alpha^{N+1-i}=\alpha^{N+1-i}\vec{m}[-i]^T\vec{a}[-i]+\alpha^{N+1}m_i
转换为pairing计算,有:
e(g1mTa,g2αN+1i)=e(g1αN+1im[i]Ta[i],g2)gTαN+1mie(g_1^{\vec{m}^T\vec{a}},g_2^{\alpha^{N+1-i}})=e(g_1^{\alpha^{N+1-i}\vec{m}[-i]^T\vec{a}[-i]},g_2)\cdot g_T^{\alpha^{N+1}m_i}
从而证明了e(C,g2αN+1i)=e(πi,g2)gTαN+1mie(C,g_2^{\alpha^{N+1-i}})=e(\pi_i,g_2)\cdot g_T^{\alpha^{N+1}m_i} 成立。

2)在e(C,g2αN+1i)=e(πi,g2)gTαN+1mie(C,g_2^{\alpha^{N+1-i}})=e(\pi_i,g_2)\cdot g_T^{\alpha^{N+1}m_i}的基础上,等式左右两侧均进行tit_i次幂乘,则有:
e(C,g2αN+1iti)=e(πiti,g2)gTαN+1mitie(C,g_2^{\alpha^{N+1-i}t_i})=e(\pi_i^{t_i},g_2)\cdot g_T^{\alpha^{N+1}m_it_i}
将要open的SS集合内的所有公式均乘一块,有(for all iSi\in S):
e(C,g2iSαN+1iti)=e(iSπiti,g2)gTαN+1iSmiti=e(π^,g2)gTαN+1iSmitie(C,g_2^{\sum_{i\in S}\alpha^{N+1-i}t_i})=e(\prod_{i\in S}\pi_i^{t_i},g_2)\cdot g_T^{\alpha^{N+1}\sum_{i\in S}m_it_i}=e(\hat{\pi},g_2)\cdot g_T^{\alpha^{N+1}\sum_{i\in S}m_it_i} 成立。

证明UpdateCommit算法正确性的思路为:
mTa=(m[S]m[S])Ta[S]+mTa\vec{m}'^T\vec{a}=(\vec{m}'[S]-\vec{m}[S])^T\vec{a}[S]+\vec{m}^T\vec{a} 等式恒成立。

2.3 proof of binding for same-commitment aggregation

采用归谬法来证明,假设adversary 可计算C=g1zTaC=g_1^{\vec{z}^T\vec{a}},并为(S,m[S])(S,\vec{m}[S])提供proof π^\hat{\pi}【其中m[S]z[S]\vec{m}[S]\neq \vec{z}[S]】,使得π^\hat{\pi}可被Verify通过。
e(g1zTa,g2iSαN+1iti)=e(π^,g2)gTαN+1iSmiti=e(π^,g2)gTαN+1iSzitie(g_1^{\vec{z}^T\vec{a}},g_2^{\sum_{i\in S}\alpha^{N+1-i}t_i})=e(\hat{\pi},g_2)\cdot g_T^{\alpha^{N+1}\sum_{i\in S}m_it_i}=e(\hat{\pi},g_2)\cdot g_T^{\alpha^{N+1}\sum_{i\in S}z_it_i}

注意adversary也不知道g1αN+1g_1^{\alpha^{N+1}},即logg1π^\log_{g_1}\hat{\pi}αN+1\alpha^{N+1} 项的系数应为 00
比较上述等式中gTαN+1g_T^{\alpha^{N+1}}的系数应满足:
iSmitipiSziti\sum_{i\in S}m_it_i\equiv_p \sum_{i \in S}z_it_i
用向量表示,应满足:
z[S]Ttpm[S]Tt\vec{z}[S]^T\vec{t}\equiv_p \vec{m}[S]^T\vec{t}
其中t=(H(i,C,S,m[S]),iS)\vec{t}=(H(i,C,S,\vec{m}[S]),i\in S)

假设当(S,z[S],m[S])(S,\vec{z}[S],\vec{m}[S])确定后,tZpS\vec{t}\leftarrow \mathbb{Z}_p^{|S|}为chosen uniformly at random 时,则有:
Prt[z[S]̸pm[S] and z[S]Ttpm[S]Tt]=1/p\Pr_{\vec{t}}[\vec{z}[S]\not\equiv_p \vec{m}[S]\ and\ \vec{z}[S]^T\vec{t}\equiv_p \vec{m}[S]^T\vec{t}]=1/p
即相应的概率可忽略。

因此问题的关键在于:ensure the uniform choice of t\vec{t} for any fixed (S,z[S],m[S])(S,\vec{z}[S],\vec{m}[S])
注意有:

  • CC determines z\vec{z} in AGM;
  • C,S,m[S]C,S,\vec{m}[S]为random oracle H(i,,,)H(i,\cdot,\cdot,\cdot) 的input,输出为 tit_i

若adversary可以找到相应的mizim_i\neq z_i值,使得:
iSzitipiSmiti\sum_{i\in S}z_it_i\equiv_p \sum_{i \in S}m_it_i
成立,则binding属性不成立。

ti=H(i,,,)t_i=H(i,\cdot,\cdot,\cdot),为什么需要将S,m[S]S,\vec{m}[S]作为HH的input?

  • tit_imim_i无关,则adversary可指定S1|S|-1mim_i的值,并根据iSzitipiSmiti\sum_{i\in S}z_it_i\equiv_p \sum_{i \in S}m_it_i等式计算最后一个mim_i的值。从而破坏了binding属性。
  • ti=H(i,C)t_i=H(i,C),Wanger’s attack可产生a 2logp2^{\sqrt{\log p}} algorithm that given {ziti,miti}i[N]\{z_it_i,m_it_i\}_{i \in [N]},从而计算a set SS of size 2logp2^{\sqrt{\log p}} 使得 iSzitipiSmiti\sum_{i\in S}z_it_i\equiv_p \sum_{i \in S}m_it_i 等式成立。对于128-bit security level for the curve(如 logp256\log p\approx 256),2logp2162^{\sqrt{\log p}}\approx 2^{16},which makes for a very pratical attack。
  • ti=H(i,C,S)t_i=H(i,C,S),可能存在与ti=H(i,C)t_i=H(i,C)类似的攻击。【It seems plausible that the attack also extends to the setting of ti=H(i,C,S)t_i = H(i, C, S): it would suffice to extend Wagner’s algorithm to finding values that sum to a given constant, because the values of the elements of S are not committed, and thus, although iSziti\sum_{i\in S} z_it_i is fixed, the attacker can choose from a list of random mim_i for each iSi \in S.】