Linear Algebra with Sub-linear Zero-Knowledge Arguments学习笔记
1. 引言
Groth 2009年论文《Linear Algebra with Sub-linear Zero-Knowledge Arguments》。
已知2个matrices A,B\mathbf{A},\mathbf{B}A,B 的commitments CA,CBC_{\mathbf{A}},C_{\mathbf{B}}CA,CB 和 1个matrix C\mathbf{C}C 的commitment CCC_{\mathbf{C}}CC,本文构建了:
- sub-linear size的零知识证明,用于证明 product of two matrices C=A∗B\mathbf{C}=\mathbf{A}*\mathbf{B}C=A∗B。
- sub-linear size的零知识证明,用于证明 Hadamard product of two matrices C=A∘B\mathbf{C}=\mathbf{A}\circ \mathbf{B}C=A∘B。
基于以上两种证明方案,可以构建其它sub-linear 零知识证明,用于证明,如:(用于证明 a set of committed vectors and matrices satisfying a set of linear algebra relations。)
- a committed matrix being upper or lower triangular;
- a committed matrix being the inverse of another committed matrix;
- a committed matrix being a permutation of another committed matrix (using either a public or a hidden permutation);
- a committed field element being the dot product of two committed vectors;
- a committed matrix being the product of two other committed matrices;
- a committed vector being the Hadamard product (the entry-wise product) of two other vectors;
- a committed matrix has a particular trace;
- compute the sums of the rows or columns of a committed matrix;
同时,可将本文技术用于证明 the satisfiability of an arithmetic circuit with NNN gates,本文所构建的arithmetic circuit 零知识证明算法具有的communication complexity 为 O(N)O(\sqrt{N})O(N) 个group elements。本文提供了2种实现方式:
- 1)constant round 的零知识证明算法;
- 2)O(log2N)O(\log_2 N)O(log2N) round 的零知识证明算法,Prover的computation complexity 为O(N/log2N)O(N/{\log_2 N})O(N/log2N)个exponentiations,Verifier的computation complexity为O(N)O(N)O(N)个multiplications。
对于只有与非门的binary circuit来说,本文基于Pedersen commitment的变体,提供了一种circuit satisfiability的public-coin 零知识证明算法:
- communication complexity为O(N)O(\sqrt{N})O(N) 个group elements;
- Prover和Verifier的computation complexity 均为O(N)O(N)O(N)个multiplications。
在构建零知识证明算法时,需要同时关注communication complexity和computation complexity。本文所构建的零知识证明算法,具有sub-linear communication的同时,也具有 low computational complexity。
对于n×nn\times nn×n矩阵A\mathbf{A}A,以行向量表示为A=[a⃗1,⋯,a⃗n]T\mathbf{A}=[\vec{a}_1,\cdots,\vec{a}_n]^TA=[a1,⋯,an]T,对每个行向量进行Pedersen commitment为 a single group element。Com(A)=[Com(a⃗1),⋯,Com(a⃗n)]TCom(\mathbf{A})=[Com(\vec{a}_1),\cdots,Com(\vec{a}_n)]^TCom(A)=[Com(a1),⋯,Com(an)]T。
本文所涉及的各证明算法性能对比:
1.1 一些定义
Argument定义:
Public coin argument定义:
Perfect special honest verifier zero-knowledge定义:
Witness-extended emulation定义:
Full Zero-Knowledge定义:
1.2 Homomorphic Commitments
本文采用的是generalized Pedersen commitment scheme。
key generation algorithm KKK 用于生成commitment key ck=(G,g1,⋯,gn,h)ck=(G,g_1,\cdots,g_n,h)ck=(G,g1,⋯,gn,h),其中 g1,⋯,gn,hg_1,\cdots,g_n,hg1,⋯,gn,h 为随机选择的generators of a group GGG of prime order ppp with ∣p∣=k|p|=\mathcal{k}∣p∣=k。对应的message space 为 Zpn\mathbb{Z}_p^nZpn,randomizer space 为 Zp\mathbb{Z}_pZp,commitment space 为 GGG。
选择随机数 r←Zpr\leftarrow \mathbb{Z}_pr←Zp,对vector (x1,⋯,xn)∈Zpn(x_1,\cdots,x_n)\in\mathbb{Z}_p^n(x1,⋯,xn)∈Zpn 的commitment 为:
c=comck(x⃗;r)=hr∏i=1ngixic=com_{ck}(\vec{x};r)=h^r\prod_{i=1}^{n}g_i^{x_i}c=comck(x;r)=hr∏i=1ngixi
以上commitment具有perfect hiding属性,同时具有computationally binding属性under the discrete logarithm assumption。
本文的SHVZK arguments中的common reference string 就是 commitment key ckckck。对于一些经典的group GGG,commitment key可 easily sampled from a common random string 同时可 easily verify that ckckck is a valid commitment key。commitment key ckckck 甚至可由Verifier来选择。
Pedersen commitment的具有加法同态属性:
comck(x⃗;r)⋅comck(x⃗′;r′)=comck(x⃗+x⃗′;r+r′)com_{ck}(\vec{x};r)\cdot com_{ck}(\vec{x}';r')=com_{ck}(\vec{x}+\vec{x}';r+r')comck(x;r)⋅comck(x′;r′)=comck(x+x′;r+r′)
comck(ax⃗+a′x⃗′;ar+a′r′)=comck(x⃗;r)a⋅comck(x⃗′;r′)a′com_{ck}(a\vec{x}+a'\vec{x}';ar+a'r')= com_{ck}(\vec{x};r)^{a}\cdot com_{ck}(\vec{x}';r')^{a'}comck(ax+a′x′;ar+a′r′)=comck(x;r)a⋅comck(x′;r′)a′
1.3 multi-exponentiation技术
采用multi-exponentiation技术,相比于单独计算 nnn 个single exponentiations,直接计算 ∏i=1ngixi\prod_{i=1}^{n}g_i^{x_i}∏i=1ngixi会更快,这将有助于快速计算Pedersen commitment。
常用的multi-exponentiation技术主要有:
- Pippenger 1980年论文《On the evaluation of powers and monomials》中提出了一种general theory of multi-exponentiations;
- Lim 2000年论文《Efficient multi-exponentiation and application to batch verification of digital signatures》中提出了一种 concrete multi-exponentiation 技术,当 nnn 很大时,其complexity低于 2nk/log2n2n\mathcal{k}/{\log_2 n}2nk/log2n multiplications in GGG。
本文推荐使用Lim的multi-exponentiation算法。
1.4 一些假设
- Schwartz-Zippel Lemma:
2. Argument of Knowledge of Commitment Openings
基本信息为:
Public info:commitment key ckckck 和 a set of commitments c1,⋯,cmc_1,\cdots,c_mc1,⋯,cm。
Private info:a set of vectors x⃗1,⋯,x⃗m∈Zpn\vec{x}_1,\cdots,\vec{x}_m\in\mathbb{Z}_p^nx1,⋯,xm∈Zpn。
Relation:for i∈[1,m]i\in [1,m]i∈[1,m] 有 ci=com(x⃗i;ri)c_i=com(\vec{x}_i;r_i)ci=com(xi;ri)。
Knowledge of content of commitments的证明算法为:(含3 rounds)
- 1)Prover:选择随机数 x⃗0←Zpn,r0←Zp\vec{x}_0\leftarrow\mathbb{Z}_p^n,r_0\leftarrow\mathbb{Z}_px0←Zpn,r0←Zp,计算c0=comck(x⃗0;r0)c_0=com_{ck}(\vec{x}_0;r_0)c0=comck(x0;r0),并将c0c_0c0值发送给Verifier。
- 2)Verifier:发送random challenge e←Zpe\leftarrow \mathbb{Z}_pe←Zp。
- 3)Prover:计算z⃗=∑i=0meixi⃗=(x01+ex11+⋯+emxm1,x02+ex12+⋯+emxm2,⋯,mx0n+emx1n+⋯+emxmn)\vec{z}=\sum_{i=0}^{m}e^i\vec{x_i}=(x_{01}+ex_{11}+\cdots+e^mx_{m1}, x_{02}+ex_{12}+\cdots+e^mx_{m2},\cdots, mx_{0n}+e^mx_{1n}+\cdots+e^mx_{mn})z=∑i=0meixi=(x01+ex11+⋯+emxm1,x02+ex12+⋯+emxm2,⋯,mx0n+emx1n+⋯+emxmn) 和 s=∑i=0meiris=\sum_{i=0}^{m}e^ir_is=∑i=0meiri。将z⃗∈Zpn\vec{z}\in\mathbb{Z}_p^nz∈Zpn和s∈Zps\in\mathbb{Z}_ps∈Zp发送给Verifier。
- 4)Verifier验证 ∏i=0mciei=comck(z⃗;s)\prod_{i=0}^{m}c_i^{e^i}=com_{ck}(\vec{z};s)∏i=0mciei=comck(z;s) 是否成立即可。
整个证明算法中,communication cost包含:1个commitment和 n+2n+2n+2 个field elements。Prover计算了1个commitment、a linear combination of the vectors x⃗i\vec{x}_ixi 和 a linear combination of the randomizer rir_iri。采用multi-exponentiation 技术,Prover需要计算大约 2nk/log2n2n\mathcal{k}/{\log_2 n}2nk/log2n 次 multiplications of group elements以及 mnmnmn 次 multiplications of field elements。Verifier采用multi-exponentiations技术来计算commitment和 multi-exponentiation of mmm commitments,需要大约 2mk/log2m+2nk/log2n2m\mathcal{k}/{\log_2 m}+2n\mathcal{k}/{\log_2 n}2mk/log2m+2nk/log2n次multiplications in the group。整个证明算法的communication和computation开销都比较低。
以上证明算法为3-move public coin argument with witness extended emulation for knowledge of the openings of a set of commitments,该argument具有perfect completeness和perfect SHVZK。(详细内容参见论文中Theorem 4 证明。)
3. matric、vector和element的线性代数关系表示
本文中 ∘\circ∘ 表示 Hadamard product (entry-wise product)。
- private info(committed info)有:矩阵 Xi,Yi,Z∈Matn×n(Zp)\mathbf{X}_i, \mathbf{Y}_i , \mathbf{Z}\in Mat_{n\times n}(\mathbb{Z}_p)Xi,Yi,Z∈Matn×n(Zp),行向量 x⃗i,y⃗i,z⃗∈Zpn\vec{x}_i,\vec{y}_i,\vec{z}\in\mathbb{Z}_p^nxi,yi,z∈Zpn 和 element z∈Zpz\in\mathbb{Z}_pz∈Zp。
- public info 有:ai∈Zpa_i\in\mathbb{Z}_pai∈Zp。
本文主要关注6种类型的关系等式为: - (1)z⃗T=∑i=1maiXiy⃗iT\vec{z}^T=\sum_{i=1}^{m}a_i\mathbf{X}_i\vec{y}_i^TzT=∑i=1maiXiyiT
- (2)Z=∑i=1maiXiYi\mathbf{Z}=\sum_{i=1}^{m}a_i\mathbf{X}_i\mathbf{Y}_iZ=∑i=1maiXiYi
- (3)Z=∑i=1mXi∘Yi\mathbf{Z}=\sum_{i=1}^{m}\mathbf{X}_i\circ\mathbf{Y}_iZ=∑i=1mXi∘Yi
- (4)z=∑i=1maix⃗iy⃗iTz=\sum_{i=1}^{m}a_i\vec{x}_i\vec{y}_i^Tz=∑i=1maixiyiT
- (5)z⃗=∑i=1maix⃗iYi\vec{z}=\sum_{i=1}^{m}a_i\vec{x}_i\mathbf{Y}_iz=∑i=1maixiYi
- (6)z⃗=∑i=1maix⃗i∘y⃗i\vec{z}=\sum_{i=1}^{m}a_i\vec{x}_i\circ\vec{y}_iz=∑i=1maixi∘yi
对于以上6种关系等式,均可转换为一系列形式如下的方程式:
z=∑i=1mx⃗i∗y⃗iz=\sum_{i=1}^{m}\vec{x}_i*\vec{y}_iz=∑i=1mxi∗yi
其中 ∗:Zpn∗Zpn→Zp*:\mathbb{Z}_p^n*\mathbb{Z}_p^n\rightarrow \mathbb{Z}_p∗:Zpn∗Zpn→Zp 为bilinear map。
本文中的bilinear map选择有两种:
- 用于表示标准的dot product of vectors:x⃗∗y⃗=x⃗y⃗T\vec{x}*\vec{y}=\vec{x}\vec{y}^Tx∗y=xyT;
- 用于表示:x⃗∗y⃗=x⃗(y⃗∘t⃗)T\vec{x}*\vec{y}=\vec{x}(\vec{y}\circ\vec{t})^Tx∗y=x(y∘t)T,其中t⃗∈Zpn\vec{t}\in\mathbb{Z}_p^nt∈Zpn为由Verifier选择的public vector。
由于矩阵可以以nnn个行向量表示,以上6种类型的前三种关系等式分别对应为nnn个后三种关系等式。(即关系式1对应nnn个关系式4,关系式2对应nnn个关系式5,关系式3对应nnn个关系式6。)
因此,将重点关注将关系式4、5、6转换为一系列形如 z=∑i=1mx⃗i∗y⃗iz=\sum_{i=1}^{m}\vec{x}_i*\vec{y}_iz=∑i=1mxi∗yi 的方程式。
3.1 将大量z=∑i=1maix⃗iy⃗iTz=\sum_{i=1}^{m}a_i\vec{x}_i\vec{y}_i^Tz=∑i=1maixiyiT reduce为一个方程式
利用Randomization,可将QQQ个形如zq=∑i=1mqaqix⃗qiy⃗qiTz_q=\sum_{i=1}^{m_q}a_{qi}\vec{x}_{qi}\vec{y}_{qi}^Tzq=∑i=1mqaqixqiyqiT的方程式reduce为一个形如z=∑i=1mz⃗iy⃗iT,其中m=∑q=1Qmqz=\sum_{i=1}^{m}\vec{z}_i\vec{y}_i^T,其中m=\sum_{q=1}^{Q}m_qz=∑i=1mziyiT,其中m=∑q=1Qmq的单一的方程式。
- Verifier选择随机数 r←Zpr\leftarrow \mathbb{Z}_pr←Zp,构建Vandermonde matrix row 为 r⃗=(r1,⋯,rQ)=(1,r,⋯,rQ−1)\vec{r}=(r_1,\cdots,r_Q)=(1,r,\cdots,r^{Q-1})r=(r1,⋯,rQ)=(1,r,⋯,rQ−1)。
- 1)接下来,需要Prover证明 ∑q=1Qrqzq=∑q=1Q∑i=1mq(rqaqix⃗qi)y⃗qiT\sum_{q=1}^{Q}r_qz_q=\sum_{q=1}^{Q}\sum_{i=1}^{m_q}(r_qa_{qi}\vec{x}_{qi})\vec{y}_{qi}^T∑q=1Qrqzq=∑q=1Q∑i=1mq(rqaqixqi)yqiT成立。【以向量形式表示z⃗=(z1,⋯,zQ)\vec{z}=(z_1,\cdots,z_Q)z=(z1,⋯,zQ),即相当于需证明z⃗r⃗T=∑q=1Q∑i=1mq(rqaqix⃗qi)y⃗qiT\vec{z}\vec{r}^T=\sum_{q=1}^{Q}\sum_{i=1}^{m_q}(r_qa_{qi}\vec{x}_{qi})\vec{y}_{qi}^TzrT=∑q=1Q∑i=1mq(rqaqixqi)yqiT】
该等式左右两侧均为以challenge rrr为变量的多项式,多项式的阶均为 Q−1Q-1Q−1,根据Schwartz-Zippel lemma,以上等式伪造成立的概率不高于 Q−1p\frac{Q-1}{p}pQ−1。
可直接设置z=∑q=1Qrqzq,x⃗qi′=rqaqix⃗qiz=\sum_{q=1}^{Q}r_qz_q, \vec{x}_{qi}'= r_qa_{qi}\vec{x}_{qi}z=∑q=1Qrqzq,xqi′=rqaqixqi【因为相应的commitment可直接计算:com(z)=∏q=1Q(com(zq))rq,com(x⃗qi′)=(com(x⃗qi))rqaqicom(z)=\prod_{q=1}^{Q}(com(z_q))^{r_q}, com(\vec{x}_{qi}')=(com(\vec{x}_{qi}))^{r_qa_{qi}}com(z)=∏q=1Q(com(zq))rq,com(xqi′)=(com(xqi))rqaqi】,则有:
z=∑q=1Q∑i=1mqx⃗qi′y⃗qiTz=\sum_{q=1}^{Q}\sum_{i=1}^{m_q}\vec{x}_{qi}'\vec{y}_{qi}^Tz=∑q=1Q∑i=1mqxqi′yqiT
3.2 将z⃗=∑i=1maix⃗iYi\vec{z}=\sum_{i=1}^{m}a_i\vec{x}_i\mathbf{Y}_iz=∑i=1maixiYi reduce为形如z=∑i=1maix⃗iy⃗iTz=\sum_{i=1}^{m}a_i\vec{x}_i\vec{y}_i^Tz=∑i=1maixiyiT
- Verifier:选择随机数 t←Zpt\leftarrow \mathbb{Z}_pt←Zp,构建Vandermonde matrix row 为 t⃗=(1,t,⋯,tn−1)\vec{t}=(1,t,\cdots,t^{n-1})t=(1,t,⋯,tn−1)。
- 1)接下来,需要Prover证明 z⃗t⃗T=(∑i=1maix⃗iYi)t⃗T=∑i=1maix⃗i(Yit⃗T)\vec{z}\vec{t}^T=(\sum_{i=1}^{m}a_{i}\vec{x}_{i}\mathbf{Y}_i)\vec{t}^T=\sum_{i=1}^{m}a_{i}\vec{x}_{i}(\mathbf{Y}_i\vec{t}^T)ztT=(∑i=1maixiYi)tT=∑i=1maixi(YitT)成立。
该等式左右两侧均为以challenge ttt为变量的多项式,多项式的阶均为 n−1n-1n−1,根据Schwartz-Zippel lemma,以上等式伪造成立的概率不高于 n−1p\frac{n-1}{p}pn−1。
存在的问题是:已知矩阵Yi\mathbf{Y}_iYi的每行向量的commitment,无法直接计算Yit⃗T\mathbf{Y}_i\vec{t}^TYitT的commitment。为证明the linear combination of the columns,需要额外再引入2个round:【矩阵转置运算有(AB)T=BTAT(\mathbf{A}\mathbf{B})^T=\mathbf{B}^T\mathbf{A}^T(AB)T=BTAT,因此有(Yit⃗T)T=t⃗YiT(\mathbf{Y}_i\vec{t}^T)^T=\vec{t}\mathbf{Y}_i^T(YitT)T=tYiT】 - 2)Prover 针对向量 y⃗i=t⃗YiT\vec{y}_i=\vec{t}\mathbf{Y}_i^Tyi=tYiT 计算commitment Cy⃗i=com(y⃗i)C_{\vec{y}_i}=com(\vec{y}_i)Cyi=com(yi),并将 Cy⃗iC_{\vec{y}_i}Cyi 发送给Verifier。
由步骤1)中的等式证明改为证明z⃗t⃗T−∑i=1maix⃗iy⃗iT=0\vec{z}\vec{t}^T-\sum_{i=1}^{m}a_{i}\vec{x}_{i}\vec{y}_i^T=0ztT−∑i=1maixiyiT=0成立且证明y⃗i=t⃗YiT\vec{y}_i=\vec{t}\mathbf{Y}_i^Tyi=tYiT。 - Verifier:选择随机数 s←Zps\leftarrow \mathbb{Z}_ps←Zp,构建Vandermonde matrix row 为 s⃗=(1,s,⋯,sn−1)\vec{s}=(1,s,\cdots,s^{n-1})s=(1,s,⋯,sn−1)。【对于向量的dot product表示,有a⃗b⃗T=b⃗a⃗T\vec{a}\vec{b}^T=\vec{b}\vec{a}^TabT=baT,于是有 yi⃗s⃗T=s⃗y⃗iT=s⃗Yit⃗T=(s⃗Yi)t⃗T\vec{y_i}\vec{s}^T=\vec{s}\vec{y}_i^T=\vec{s}\mathbf{Y}_i\vec{t}^T=(\vec{s}\mathbf{Y}_i)\vec{t}^TyisT=syiT=sYitT=(sYi)tT】
- Prover:
– (a) 对于 y⃗i=t⃗YiT\vec{y}_i=\vec{t}\mathbf{Y}_i^Tyi=tYiT 改为证明 yi⃗s⃗T=(s⃗Yi)t⃗T\vec{y_i}\vec{s}^T=(\vec{s}\mathbf{Y}_i)\vec{t}^TyisT=(sYi)tT 成立。
注意此时,(s⃗Yi)(\vec{s}\mathbf{Y}_i)(sYi)为矩阵Yi\mathbf{Y}_iYi行向量的线性组合,所以相应的commitment可直接基于矩阵Yi\mathbf{Y}_iYi行向量Yi⃗j\vec{Y_i}_jYij的commitment计算—— com(s⃗Yi)=∏j=1n(com(Yi⃗j))sjcom(\vec{s}\mathbf{Y}_i)=\prod_{j=1}^{n}(com(\vec{Y_i}_j))^{s_j}com(sYi)=∏j=1n(com(Yij))sj。此处可实现y⃗i=t⃗YiT\vec{y}_i=\vec{t}\mathbf{Y}_i^Tyi=tYiT证明。【??相当于3.1节中,Q=1,m=1Q=1,m=1Q=1,m=1 的特例情况,可转换为3.1节中的证明。】
– (b) 对于z⃗t⃗T−∑i=1maix⃗iy⃗iT=0\vec{z}\vec{t}^T-\sum_{i=1}^{m}a_{i}\vec{x}_{i}\vec{y}_i^T=0ztT−∑i=1maixiyiT=0的证明,相当于3.1中 Q=1Q=1Q=1 的特例情况,可转换为3.1节中的证明。
【??注意此处不再是对整个z⃗\vec{z}z向量的commitment,而应该是对其中每个元素进行commitment,这样才能计算com(z⃗t⃗T)=∏i=1n(com(zi))ticom(\vec{z}\vec{t}^T)=\prod_{i=1}^{n}(com(z_i))^{t_i}com(ztT)=∏i=1n(com(zi))ti】
以上整个reduction中的主要开销在于:
- 计算y⃗i\vec{y}_iyi;
- 计算s⃗Yi\vec{s}\mathbf{Y}_isYi;
- 计算y⃗i\vec{y}_iyi的commitments。
3.3 将大量z⃗=∑i=1maix⃗i∘y⃗i\vec{z}=\sum_{i=1}^{m}a_i\vec{x}_i\circ\vec{y}_iz=∑i=1maixi∘yi Hadamard Products reduce为a single Equation with a Bilinear Map
利用Randomization,可将QQQ个形如z⃗q=∑i=1mqaqix⃗qi∘y⃗qi\vec{z}_q=\sum_{i=1}^{m_q}a_{qi}\vec{x}_{qi}\circ\vec{y}_{qi}zq=∑i=1mqaqixqi∘yqi的方程式reduce为一个单一的具有Bilinear Map的方程式。
- Verifier选择随机数 r←Zpr\leftarrow \mathbb{Z}_pr←Zp,构建Vandermonde matrix row 为 r⃗=(r1,⋯,rQ)=(1,r,⋯,rQ−1)\vec{r}=(r_1,\cdots,r_Q)=(1,r,\cdots,r^{Q-1})r=(r1,⋯,rQ)=(1,r,⋯,rQ−1)。
- 1)接下来,需要Prover证明 ∑q=1Qrqz⃗q=∑q=1Q∑i=1mq(rqaqix⃗qi)∘y⃗qi\sum_{q=1}^{Q}r_q\vec{z}_q=\sum_{q=1}^{Q}\sum_{i=1}^{m_q}(r_qa_{qi}\vec{x}_{qi})\circ\vec{y}_{qi}∑q=1Qrqzq=∑q=1Q∑i=1mq(rqaqixqi)∘yqi成立。
该等式左右两侧均为以challenge rrr为变量的多项式,多项式的阶均为 Q−1Q-1Q−1,根据Schwartz-Zippel lemma,以上等式伪造成立的概率不高于 Q−1p\frac{Q-1}{p}pQ−1。
可直接设置z⃗′=∑q=1Qrqz⃗q,x⃗qi′=rqaqix⃗qi\vec{z}'=\sum_{q=1}^{Q}r_q\vec{z}_q, \vec{x}_{qi}'= r_qa_{qi}\vec{x}_{qi}z′=∑q=1Qrqzq,xqi′=rqaqixqi【因为相应的commitment可直接计算:com(z⃗′)=∏q=1Q(com(z⃗q))rq,com(x⃗qi′)=(com(x⃗qi))rqaqicom(\vec{z}')=\prod_{q=1}^{Q}(com(\vec{z}_q))^{r_q}, com(\vec{x}_{qi}')=(com(\vec{x}_{qi}))^{r_qa_{qi}}com(z′)=∏q=1Q(com(zq))rq,com(xqi′)=(com(xqi))rqaqi】,则有a Hadamard equation:
z⃗′=∑q=1Q∑i=1mqx⃗qi′∘y⃗qiT\vec{z}'=\sum_{q=1}^{Q}\sum_{i=1}^{m_q}\vec{x}_{qi}'\circ\vec{y}_{qi}^Tz′=∑q=1Q∑i=1mqxqi′∘yqiT
对于形如z⃗=∑i=1mx⃗i∘y⃗i\vec{z}=\sum_{i=1}^{m}\vec{x}_i\circ\vec{y}_iz=∑i=1mxi∘yi的Hadamard 方程式的证明:
- Verifier选择随机数 t←Zpt\leftarrow \mathbb{Z}_pt←Zp,构建Vandermonde matrix row 为 t⃗=(t1,⋯,tQ)=(1,t,⋯,tQ−1)\vec{t}=(t_1,\cdots,t_Q)=(1,t,\cdots,t^{Q-1})t=(t1,⋯,tQ)=(1,t,⋯,tQ−1)。
- 2)接下来,需要Prover 证明 z⃗t⃗T=(∑i=1mx⃗i∘y⃗i)t⃗T=∑i=1mx⃗i(y⃗i∘t⃗)T\vec{z}\vec{t}^T=(\sum_{i=1}^{m}\vec{x}_i\circ\vec{y}_i)\vec{t}^T=\sum_{i=1}^{m}\vec{x}_i(\vec{y}_i\circ\vec{t})^TztT=(∑i=1mxi∘yi)tT=∑i=1mxi(yi∘t)T
定义bilinear map为:
∗:Zpn×Zpn→Zp(x⃗,y⃗)→x⃗(y⃗∘t⃗)T*:\mathbb{Z}_p^n\times\mathbb{Z}_p^n\rightarrow \mathbb{Z}_p\ \ \ \ \ \ (\vec{x},\vec{y})\rightarrow \vec{x}(\vec{y}\circ\vec{t})^T∗:Zpn×Zpn→Zp (x,y)→x(y∘t)T
于是转为证明 0=∑i=1mx⃗i∗y⃗i−z⃗∗1⃗0=\sum_{i=1}^{m}\vec{x}_i*\vec{y}_i-\vec{z}*\vec{1}0=∑i=1mxi∗yi−z∗1,其中1⃗=(1,1,⋯,1)\vec{1}=(1,1,\cdots,1)1=(1,1,⋯,1)。
4. Vector Product Equation的零知识证明
第3节中提到的6种方程式,均可以转换为形如z=∑i=1mx⃗i∗y⃗iz=\sum_{i=1}^{m}\vec{x}_i*\vec{y}_iz=∑i=1mxi∗yi的方程式,其中∗*∗代表2种bilinear map:
- 用于表示标准的dot product of vectors:x⃗∗y⃗=x⃗y⃗T\vec{x}*\vec{y}=\vec{x}\vec{y}^Tx∗y=xyT;
- 用于表示:x⃗∗y⃗=x⃗(y⃗∘t⃗)T\vec{x}*\vec{y}=\vec{x}(\vec{y}\circ\vec{t})^Tx∗y=x(y∘t)T,其中t⃗=(1,t,⋯,tn−1)∈Zpn\vec{t}=(1,t,\cdots,t^{n-1})\in\mathbb{Z}_p^nt=(1,t,⋯,tn−1)∈Zpn为由Verifier选择的public vector。
基本信息:
- public info:commitment key ckckck及其他commitments。
- private info:z∈Zp,x⃗1,y⃗1,⋯,⋯,x⃗m,y⃗m∈Zpnz\in\mathbb{Z}_p,\vec{x}_1,\vec{y}_1,\cdots,\cdots,\vec{x}_m,\vec{y}_m\in\mathbb{Z}_p^nz∈Zp,x1,y1,⋯,⋯,xm,ym∈Zpn。
- relation:z=∑i=1mx⃗i∗y⃗iz=\sum_{i=1}^{m}\vec{x}_i*\vec{y}_iz=∑i=1mxi∗yi。
接下来,将针对以上场景构建的零知识证明算法。
4.1 m=1m=1m=1的最小化情况
首先,考虑m=1m=1m=1的最小化情况下,基本信息为:
- public info:commitment key ckckck 及 commitments a=comck(x⃗;r),b=comck(y⃗;s),c=comck(z;t)a=com_{ck}(\vec{x};r),b=com_{ck}(\vec{y};s),c=com_{ck}(z;t)a=comck(x;r),b=comck(y;s),c=comck(z;t)。
- private info:r,s,t,z∈Zp,x⃗,y⃗∈Zpnr,s,t,z\in\mathbb{Z}_p,\vec{x},\vec{y}\in\mathbb{Z}_p^nr,s,t,z∈Zp,x,y∈Zpn。
- relation:z=x⃗∗y⃗z=\vec{x}*\vec{y}z=x∗y。
【证明算法主要构建基础为:(ex⃗+d⃗x)∗(ey⃗+d⃗y)=e2x⃗∗y⃗+e(x⃗∗d⃗x+y⃗∗d⃗y)+d⃗x∗d⃗y(e\vec{x}+\vec{d}_x)*(e\vec{y}+\vec{d}_y)=e^2\vec{x}*\vec{y}+e(\vec{x}*\vec{d}_x+\vec{y}*\vec{d}_y)+\vec{d}_x*\vec{d}_y(ex+dx)∗(ey+dy)=e2x∗y+e(x∗dx+y∗dy)+dx∗dy。】
针对m=1m=1m=1的最小化情况的证明为:
Prover:选择随机数d⃗x,d⃗y←Zpn,dz←Zp,rd,sd,t1,t0←Zp\vec{d}_x,\vec{d}_y\leftarrow\mathbb{Z}_p^n,d_z\leftarrow\mathbb{Z}_p,r_d,s_d,t_1,t_0\leftarrow\mathbb{Z}_pdx,dy←Zpn,dz←Zp,rd,sd,t1,t0←Zp,计算如下commitments:
ad=comck(d⃗x;rd),bd=comck(d⃗y;sd),c1=comck(x⃗∗d⃗x+y⃗∗d⃗y;t1),c0=comck(d⃗x∗d⃗y;t0)a_d=com_{ck}(\vec{d}_x;r_d),b_d=com_ck(\vec{d}_y;s_d),c_1=com_{ck}(\vec{x}*\vec{d}_x+\vec{y}*\vec{d}_y;t_1),c_0=com_{ck}(\vec{d}_x*\vec{d}_y;t_0)ad=comck(dx;rd),bd=comck(dy;sd),c1=comck(x∗dx+y∗dy;t1),c0=comck(dx∗dy;t0)
将commitments ad,bd,c1,c0a_d,b_d,c_1,c_0ad,bd,c1,c0 发送给Verifier。Verifier:选择随机challenge e←Zpe\leftarrow \mathbb{Z}_pe←Zp发送给Prover。
Prover:计算:
f⃗x=ex⃗+d⃗x,f⃗y=ey⃗+d⃗y,rx=er+rd,sy=es+sd,tz=e2t+et1+t0\vec{f}_x=e\vec{x}+\vec{d}_x,\vec{f}_y=e\vec{y}+\vec{d}_y,r_x=er+r_d,s_y=es+s_d,t_z=e^2t+et_1+t_0fx=ex+dx,fy=ey+dy,rx=er+rd,sy=es+sd,tz=e2t+et1+t0
将 f⃗x,f⃗y,rx,sy,tz\vec{f}_x,\vec{f}_y,r_x,s_y,t_zfx,fy,rx,sy,tz发送给Verifier。Verifier:验证以下方程式是否均成立:
aead=comck(f⃗x;rx)∧bebd=comck(f⃗y;sy)∧ce2c1ec0=comck(f⃗x∗f⃗y;tz)a^ea_d=com_{ck}(\vec{f}_x;r_x)\wedge b^eb_d=com_{ck}(\vec{f}_y;s_y)\wedge c^{e^2}c_1^ec_0=com_{ck}(\vec{f}_x*\vec{f}_y;t_z)aead=comck(fx;rx)∧bebd=comck(fy;sy)∧ce2c1ec0=comck(fx∗fy;tz)。
以上算法的:
- communication cost为:4个commitment和2n+32n+32n+3 个field elements,对于large nnn来说,对应大约 2nk2n\mathcal{k}2nk bits。
- Prover的computation cost 为:计算commitments ad,bda_d,b_dad,bd。可采用Lim的multi-exponentiation技术,对应为4nk/log2n4n\mathcal{k}/{\log_2 n}4nk/log2n个multiplications in GGG。
- Veriifer的computation cost为:计算f⃗x,f⃗y\vec{f}_x,\vec{f}_yfx,fy的commitments,可采用Lim的multi-exponentiation技术,对应也为4nk/log2n4n\mathcal{k}/{\log_2 n}4nk/log2n个multiplications in GGG。但是,可在此基础上再采用randomization技术,再次reduce为2nk/log2n2n\mathcal{k}/{\log_2 n}2nk/log2n个multiplications in GGG,具体实现方法为:Verifier引入随机数α←Zp\alpha\leftarrow\mathbb{Z}_pα←Zp,同时验证2个commitments的方程式 (aead)αbebd=comck(αf⃗x+f⃗y;αrx+sy)(a^ea_d)^{\alpha}b^eb_d=com_{ck}(\alpha\vec{f}_x+\vec{f}_y;\alpha r_x+s_y)(aead)αbebd=comck(αfx+fy;αrx+sy)。
4.2 将m>1m> 1m>1的情况通过2-round reduce为m=1m=1m=1的最小化情况
m>1m> 1m>1时,基本信息为:
- public info:commitment key ckckck 及 commitments a1=comck(x⃗1;r1),b1=comck(y⃗1;s1),⋯,⋯,am=comck(x⃗m;rm),bm=comck(y⃗m;sm),c=comck(z;t)a_1=com_{ck}(\vec{x}_1;r_1),b_1=com_{ck}(\vec{y}_1;s_1),\cdots,\cdots,a_m=com_{ck}(\vec{x}_m;r_m),b_m=com_{ck}(\vec{y}_m;s_m),c=com_{ck}(z;t)a1=comck(x1;r1),b1=comck(y1;s1),⋯,⋯,am=comck(xm;rm),bm=comck(ym;sm),c=comck(z;t)。
- private info:r1,s1,⋯,⋯,rm,sm,t,z∈Zp,x⃗1,y⃗1,⋯,⋯,x⃗m,y⃗m∈Zpnr_1,s_1,\cdots,\cdots,r_m,s_m,t,z\in\mathbb{Z}_p,\vec{x}_1,\vec{y}_1,\cdots,\cdots,\vec{x}_m,\vec{y}_m\in\mathbb{Z}_p^nr1,s1,⋯,⋯,rm,sm,t,z∈Zp,x1,y1,⋯,⋯,xm,ym∈Zpn。
- relation:z=∑i=1mx⃗∗y⃗z=\sum_{i=1}^{m}\vec{x}*\vec{y}z=∑i=1mx∗y。
证明思路为:
1)将以上m>1m> 1m>1的情况通过2-round reduce为m=1m=1m=1的最小化情况;
2)reduce为m=1m=1m=1后,直接调用4.1节证明算法进行证明。
将以上m>1m> 1m>1的情况通过2-round reduce为m=1m=1m=1的最小化情况,z=∑i=1mx⃗∗y⃗z=\sum_{i=1}^{m}\vec{x}*\vec{y}z=∑i=1mx∗y主要构建思路为展开为如下矩阵表示,同时取所有对角线元素之和:(共有2m−12m-12m−1条对角线,其中cm−1=comck(z;t)=cc_{m-1}=com_{ck}(z;t)=ccm−1=comck(z;t)=c)
详细的实现过程为:
Prover:for 0≤l≤2m−20\leq l\leq 2m-20≤l≤2m−2,选择随机数tl←Zpt_l\leftarrow \mathbb{Z}_ptl←Zp,为保证主对角线cm−1=comck(z;t)=cc_{m-1}=com_{ck}(z;t)=ccm−1=comck(z;t)=c,需设置tm−1=tt_{m-1}=ttm−1=t。Prover计算除主对角线之外的其它对角线元素之和的commitment,对应为 for 0≤l≤2m−2,l≠m−10\leq l\leq 2m-2,l\neq m-10≤l≤2m−2,l=m−1,cl=comck(∑i,j;l=m+i−j−1x⃗i∗y⃗j;tl)c_l=com_{ck}(\sum_{i,j;l=m+i-j-1}\vec{x}_i*\vec{y}_j;t_l)cl=comck(∑i,j;l=m+i−j−1xi∗yj;tl)。将commitments c0,⋯,c2m−2c_0,\cdots,c_{2m-2}c0,⋯,c2m−2 发送给Verifier。
Verifier: 发送random challenge e←Zpe\leftarrow \mathbb{Z}_pe←Zp。
Prover:定义commitments a′=comck(x⃗′;r′)=∏i=1maiei−1,b′=comck(y⃗′;s′)=∏j=1mbjem−j,c′=comck(z′;t′)=∏l=02m−2clela'=com_{ck}(\vec{x}';r')=\prod_{i=1}^{m}a_i^{e^{i-1}},b'=com_{ck}(\vec{y}';s')=\prod_{j=1}^{m}b_j^{e^{m-j}},c'=com_{ck}(z';t')=\prod_{l=0}^{2m-2}c_l^{e^l}a′=comck(x′;r′)=∏i=1maiei−1,b′=comck(y′;s′)=∏j=1mbjem−j,c′=comck(z′;t′)=∏l=02m−2clel
Prover计算与这些commitments对应的openings:
x⃗′=∑i=1mei−1x⃗i,r′=∑i=1mei−1ri,y⃗′=∑j=1mem−jy⃗j,s′=∑j=1mem−jsj\vec{x}'=\sum_{i=1}^{m}e^{i-1}\vec{x}_i,r'=\sum_{i=1}^{m}e^{i-1}r_i,\vec{y}'=\sum_{j=1}^{m}e^{m-j}\vec{y}_j,s'=\sum_{j=1}^{m}e^{m-j}s_jx′=∑i=1mei−1xi,r′=∑i=1mei−1ri,y′=∑j=1mem−jyj,s′=∑j=1mem−jsj
从而改为证明 z′=x⃗′∗y⃗′=∑l=02m−2el∑i,j:l=m+i−j−1x⃗i∗y⃗jz'=\vec{x}' * \vec{y}'=\sum_{l=0}^{2m-2}e^l\sum_{i,j:l=m+i-j-1}\vec{x}_i*\vec{y}_jz′=x′∗y′=∑l=02m−2el∑i,j:l=m+i−j−1xi∗yj,而t′=∑l=02m−2eltlt'=\sum_{l=0}^{2m-2}e^lt_lt′=∑l=02m−2eltl。
基本信息为:
– public info:commitments a′=comck(x⃗′;r′),b′=comck(y⃗′;s′),c′=comck(z′;t′)a'=com_{ck}(\vec{x}';r'),b'=com_{ck}(\vec{y}';s'),c'=com_{ck}(z';t')a′=comck(x′;r′),b′=comck(y′;s′),c′=comck(z′;t′)。
– private info:x⃗′,y⃗′,r′,s′,t′,z′\vec{x}',\vec{y}',r',s',t',z'x′,y′,r′,s′,t′,z′。
– Relation:z′=x⃗′∗y⃗′z'=\vec{x}'*\vec{y}'z′=x′∗y′。
因此可采用4.1节算法进行证明。
整个证明算法的开销为:
4.3 增加interaction round来减少computation开销
由4.2节内容可知,当mmm很大时,对应的Prover和Verifier的computation cost与mmm成正比,相应的computation压力将很大。
与4.2节直接计算 m2m^2m2 个products x⃗i∗y⃗j\vec{x}_i*\vec{y}_jxi∗yj 不同,可通过增加round interaction的次数来减少。如采用 2log2m2\log_2 m2log2m-round reduction to the minimal case,Prover仅需计算 4mn4mn4mn 个multiplications。【即不再关心整个矩阵的所有对角线,只关心基于主对角线关联的2×22\times 22×2范围内的元素。】
以m=8m=8m=8为例,2log2m=62\log_2 m=62log2m=6:
整个计算过程为:
整个算法的开销为:
5. 其它线性代数方程式的零知识证明
5.1 证明矩阵互逆Inverse
- public info: commitments com(Y),com(X)com(\mathbf{Y}), com(\mathbf{X})com(Y),com(X)
- private info:矩阵Y,X\mathbf{Y},\mathbf{X}Y,X
- relation:Y=X−1\mathbf{Y}=\mathbf{X}^{-1}Y=X−1或者XY=I\mathbf{X}\mathbf{Y}=\mathbf{I}XY=I
基本思路为:
- Verifier:选择随机数s←Zps\leftarrow\mathbb{Z}_ps←Zp,构建向量s⃗=(1,s,⋯,sn−1)\vec{s}=(1,s,\cdots,s^{n-1})s=(1,s,⋯,sn−1)。
- Prover:转为证明(s⃗X)Y=s⃗(\vec{s}\mathbf{X})\mathbf{Y}=\vec{s}(sX)Y=s。可借助3.2节算法来实现,相当于m=1,Q=1m=1,Q=1m=1,Q=1的特例。
5.2 证明矩阵互为转置Transpose
- public info: commitments com(Y),com(X)com(\mathbf{Y}), com(\mathbf{X})com(Y),com(X)
- private info:矩阵Y,X\mathbf{Y},\mathbf{X}Y,X
- relation:Y=XT\mathbf{Y}=\mathbf{X}^TY=XT
基本思路为:
- Verifier:选择随机数s,t←Zps,t\leftarrow\mathbb{Z}_ps,t←Zp,构建向量s⃗=(1,s,⋯,sn−1),t⃗=(1,t,⋯,tn−1)\vec{s}=(1,s,\cdots,s^{n-1}),\vec{t}=(1,t,\cdots,t^{n-1})s=(1,s,⋯,sn−1),t=(1,t,⋯,tn−1)。
- Prover:转为证明(s⃗X)t⃗T=(t⃗Y)s⃗T(\vec{s}\mathbf{X})\vec{t}^T=(\vec{t}\mathbf{Y})\vec{s}^T(sX)tT=(tY)sT。【对于向量的dot product表示,有a⃗b⃗T=b⃗a⃗T\vec{a}\vec{b}^T=\vec{b}\vec{a}^TabT=baT】
5.3 证明矩阵的特征值eigenvalue和特征向量eigenvector
- public info: commitments com(Y),com(y⃗T),com(λ)com(\mathbf{Y}), com(\vec{y}^T),com(\lambda)com(Y),com(yT),com(λ)
- private info:矩阵X\mathbf{X}X,特征值λ\lambdaλ,特征向量y⃗T\vec{y}^TyT
- relation:λy⃗T=Xy⃗T\lambda\vec{y}^T=\mathbf{X}\vec{y}^TλyT=XyT
基本思路为:
- 首先commit to z⃗=λy⃗\vec{z}=\lambda\vec{y}z=λy,相当于证明z⃗=λ(y⃗∘1⃗)\vec{z}=\lambda(\vec{y}\circ \vec{1})z=λ(y∘1),可借助3.3节进行证明,相当于m=1,Q=1,x⃗=1⃗m=1,Q=1,\vec{x}=\vec{1}m=1,Q=1,x=1的特例。
- Verifier:选择随机数s←Zps\leftarrow\mathbb{Z}_ps←Zp,构建向量s⃗=(1,s,⋯,sn−1)\vec{s}=(1,s,\cdots,s^{n-1})s=(1,s,⋯,sn−1)。
- Prover:转为证明s⃗z⃗T=(s⃗X)y⃗T\vec{s}\vec{z}^T=(\vec{s}\mathbf{X})\vec{y}^TszT=(sX)yT,可借助3.1节算法证明,相当于m=1,Q=1m=1,Q=1m=1,Q=1的特例情况。
5.4 证明sums of Rows和sums of Columns
计算sums of Rows 相当于计算X1⃗T\mathbf{X}\vec{1}^TX1T,计算sums of columns相当于计算1⃗X\vec{1}\mathbf{X}1X,计算整个矩阵所有元素之和相当于计算1⃗X1⃗T\vec{1}\mathbf{X}\vec{1}^T1X1T。
可利用本文涉及的6种等式实现相应的证明。
5.5 证明Hadamard Products of Rows and Columns
基本证明思路与博客 Efficient Zero-Knowledge Argument for Correctness of a Shuffle学习笔记(2)第二节中的Hadamard product argument 证明思路类似。
5.6 证明矩阵为三角矩阵
5.7 证明矩阵的迹Trace
5.8 证明矩阵的判别式Absolute Value of Determinant
5.9 证明矩阵之间的known permutation
5.10 证明矩阵之间的hidden permutation
6. 用于Circuit Satisfiability证明
6.1 针对binary circuit的性能表现
参考资料:
[1] 博客 向量的Hadamard product VS Inner product
Linear Algebra with Sub-linear Zero-Knowledge Arguments学习笔记相关推荐
- Customizable constraint systems for succinct arguments学习笔记(2)
微软研究中心Srinath Setty.a16z crypto research 和 Georgetown University Justin Thaler.Carnegie Mellon Unive ...
- Chapter 1 (Linear Equations in Linear Algebra): System of linear equations (线性方程组)
本文为<Linear algebra and its applications>的读书笔记 目录 System of linear equations (线性方程组) Matrix Not ...
- Subvector Commitments with Application to Succinct Arguments学习笔记
1. 背景知识 Russell W. F. Lai 和 Giulio Malavolta 在Crypto 2019上发表的论文<Subvector Commitments with Applic ...
- Customizable constraint systems for succinct arguments学习笔记(1)
1. 引言 微软研究中心Srinath Setty.a16z crypto research 和 Georgetown University Justin Thaler.Carnegie Mellon ...
- Linear Algebra
文章目录 Mind Map GOALS CODE WORKS CONTENTS principal components analysis(PCA) WORKS Mind Map GOALS eige ...
- numpy中线性代数库的使用Linear Algebra
numpy中线性代数库的使用Linear Algebra 文章目录: 一. 一. Reference: 1.https://blog.csdn.net/pipisorry/article/detail ...
- Machine Learning week 1 quiz: Linear Algebra
Linear Algebra 1. Let two matrices be A=[4639],B=[−2−592] What is A - B? [411211] [611−1211] [611−67 ...
- 线性代数第九版pdf英文_《Linear Algebra Done Right》线性代数复习及部分习题解答(3.C)...
个人声明 本系列文章记录本人自学线性代数教材<Linear Algebra Done Right>的概念梳理(复习)和部分习题解答(练习).如有任何错误或不严谨之处恳请读者在评论区留言提醒 ...
- GAMES101课程学习笔记—Lec 02:Linear Algebra 线性代数回顾
GAMES101课程学习笔记-Lec 02:Linear Algebra 线性代数回顾 0 图形学的依赖学科 1 向量 1.1 点乘 1.2 叉乘 2 矩阵 本节课知识比较基础,大学课程里应该都学过, ...
最新文章
- [转]【 视频 】PAR、DAR和SAR都是啥
- HDU 1159 Common Subsequence 动态规划
- 【牛客 - 330C】Applese 走迷宫(bfs)
- linux初识到入门_系统
- MyBatis笔记二:配置
- 三角形周长最短问题_1.八年级数学:DE平分ABC的周长?怎么求DE的长?你想了很久吧?...
- DEA用法(1)--三阶段DEA模型与DEAP使用方法教程
- 浅析近场通信技术特点及未来可能的应用与发展
- 基于KDJ指标的Dual Thrust策略
- 【vscode 报错】Couldn‘t start client ESLint
- 学习管理系统五大好处
- Python代码画小猪佩奇--turtle绘图
- 如何快速成为谷歌web Store开发者(不用办visa/信用卡)
- 卓有成效的管理者|木深读书笔记
- kernel panic
- c语言 输出音频 单片机,单片机播放WAV格式音频的理解
- Java.lang.Character类详解
- 教你十秒钟学会剪映抠绿幕
- 从深度学习计算过程来分析深度学习工作站\服务器的硬件配置
- inventor导出tekla_Inventor iLogic - 批量导出PDF,DXF,DWF
热门文章
- 如何使用ansible管理多台远程服务器
- Android远程弹窗,Remote Desktop(远程桌面)Android平台远程电脑的又一神器!
- esxi 用途和开机自启动设置。
- elasticsearch2.4.1+kibana4.6.1+mavel2.4.1
- Visual Studio 2022下载安装及使用教程
- 计算机的色彩在哪调整w10,win10电脑色彩太冷怎么调节屏幕色彩
- 《计算机教育》专题报道:培养兴趣,渔之以愉
- Java实现微信公众号每日推送
- 超几何分布HyperGeometricDistribution
- 【CSP201609-3】炉石传说【模拟】