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(log⁡2N)O(\log_2 N)O(log2​N) round 的零知识证明算法,Prover的computation complexity 为O(N/log⁡2N)O(N/{\log_2 N})O(N/log2​N)个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=1n​gixi​​
以上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=1n​gixi​​会更快,这将有助于快速计算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/log⁡2n2n\mathcal{k}/{\log_2 n}2nk/log2​n 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=0m​eixi​​=(x01​+ex11​+⋯+emxm1​,x02​+ex12​+⋯+emxm2​,⋯,mx0n​+emx1n​+⋯+emxmn​) 和 s=∑i=0meiris=\sum_{i=0}^{m}e^ir_is=∑i=0m​eiri​。将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=0m​ciei​=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/log⁡2n2n\mathcal{k}/{\log_2 n}2nk/log2​n 次 multiplications of group elements以及 mnmnmn 次 multiplications of field elements。Verifier采用multi-exponentiations技术来计算commitment和 multi-exponentiation of mmm commitments,需要大约 2mk/log⁡2m+2nk/log⁡2n2m\mathcal{k}/{\log_2 m}+2n\mathcal{k}/{\log_2 n}2mk/log2​m+2nk/log2​n次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​,y​i​,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=1m​ai​Xi​y​iT​
  • (2)Z=∑i=1maiXiYi\mathbf{Z}=\sum_{i=1}^{m}a_i\mathbf{X}_i\mathbf{Y}_iZ=∑i=1m​ai​Xi​Yi​
  • (3)Z=∑i=1mXi∘Yi\mathbf{Z}=\sum_{i=1}^{m}\mathbf{X}_i\circ\mathbf{Y}_iZ=∑i=1m​Xi​∘Yi​
  • (4)z=∑i=1maix⃗iy⃗iTz=\sum_{i=1}^{m}a_i\vec{x}_i\vec{y}_i^Tz=∑i=1m​ai​xi​y​iT​
  • (5)z⃗=∑i=1maix⃗iYi\vec{z}=\sum_{i=1}^{m}a_i\vec{x}_i\mathbf{Y}_iz=∑i=1m​ai​xi​Yi​
  • (6)z⃗=∑i=1maix⃗i∘y⃗i\vec{z}=\sum_{i=1}^{m}a_i\vec{x}_i\circ\vec{y}_iz=∑i=1m​ai​xi​∘y​i​

对于以上6种关系等式,均可转换为一系列形式如下的方程式:
z=∑i=1mx⃗i∗y⃗iz=\sum_{i=1}^{m}\vec{x}_i*\vec{y}_iz=∑i=1m​xi​∗y​i​
其中 ∗: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​=xy​T;
  • 用于表示: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=1m​xi​∗y​i​ 的方程式。

3.1 将大量z=∑i=1maix⃗iy⃗iTz=\sum_{i=1}^{m}a_i\vec{x}_i\vec{y}_i^Tz=∑i=1m​ai​xi​y​iT​ reduce为一个方程式

利用Randomization,可将QQQ个形如zq=∑i=1mqaqix⃗qiy⃗qiTz_q=\sum_{i=1}^{m_q}a_{qi}\vec{x}_{qi}\vec{y}_{qi}^Tzq​=∑i=1mq​​aqi​xqi​y​qiT​的方程式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=1m​zi​y​iT​,其中m=∑q=1Q​mq​的单一的方程式。

  • 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=1Q​rq​zq​=∑q=1Q​∑i=1mq​​(rq​aqi​xqi​)y​qiT​成立。【以向量形式表示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​​(rq​aqi​xqi​)y​qiT​】
    该等式左右两侧均为以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=1Q​rq​zq​,xqi′​=rq​aqi​xqi​【因为相应的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​))rq​aqi​】,则有:
    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=1mq​​xqi′​y​qiT​

3.2 将z⃗=∑i=1maix⃗iYi\vec{z}=\sum_{i=1}^{m}a_i\vec{x}_i\mathbf{Y}_iz=∑i=1m​ai​xi​Yi​ reduce为形如z=∑i=1maix⃗iy⃗iTz=\sum_{i=1}^{m}a_i\vec{x}_i\vec{y}_i^Tz=∑i=1m​ai​xi​y​iT​

  • 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=1m​ai​xi​Yi​)tT=∑i=1m​ai​xi​(Yi​tT)成立。
    该等式左右两侧均为以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}^TYi​tT的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(Yi​tT)T=tYiT​】
  • 2)Prover 针对向量 y⃗i=t⃗YiT\vec{y}_i=\vec{t}\mathbf{Y}_i^Ty​i​=tYiT​ 计算commitment Cy⃗i=com(y⃗i)C_{\vec{y}_i}=com(\vec{y}_i)Cy​i​​=com(y​i​),并将 Cy⃗iC_{\vec{y}_i}Cy​i​​ 发送给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=1m​ai​xi​y​iT​=0成立且证明y⃗i=t⃗YiT\vec{y}_i=\vec{t}\mathbf{Y}_i^Ty​i​=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}^Tyi​​sT=sy​iT​=sYi​tT=(sYi​)tT】
  • Prover:
    – (a) 对于 y⃗i=t⃗YiT\vec{y}_i=\vec{t}\mathbf{Y}_i^Ty​i​=tYiT​ 改为证明 yi⃗s⃗T=(s⃗Yi)t⃗T\vec{y_i}\vec{s}^T=(\vec{s}\mathbf{Y}_i)\vec{t}^Tyi​​sT=(sYi​)tT 成立。
    注意此时,(s⃗Yi)(\vec{s}\mathbf{Y}_i)(sYi​)为矩阵Yi\mathbf{Y}_iYi​行向量的线性组合,所以相应的commitment可直接基于矩阵Yi\mathbf{Y}_iYi​行向量Yi⃗j\vec{Y_i}_jYi​​j​的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(Yi​​j​))sj​。此处可实现y⃗i=t⃗YiT\vec{y}_i=\vec{t}\mathbf{Y}_i^Ty​i​=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=1m​ai​xi​y​iT​=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}_iy​i​;
  • 计算s⃗Yi\vec{s}\mathbf{Y}_isYi​;
  • 计算y⃗i\vec{y}_iy​i​的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=1m​ai​xi​∘y​i​ 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=1mq​​aqi​xqi​∘y​qi​的方程式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=1Q​rq​zq​=∑q=1Q​∑i=1mq​​(rq​aqi​xqi​)∘y​qi​成立。
    该等式左右两侧均为以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=1Q​rq​zq​,xqi′​=rq​aqi​xqi​【因为相应的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​))rq​aqi​】,则有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=1mq​​xqi′​∘y​qiT​

对于形如z⃗=∑i=1mx⃗i∘y⃗i\vec{z}=\sum_{i=1}^{m}\vec{x}_i\circ\vec{y}_iz=∑i=1m​xi​∘y​i​的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=1m​xi​∘y​i​)tT=∑i=1m​xi​(y​i​∘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=1m​xi​∗y​i​−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=1m​xi​∗y​i​的方程式,其中∗*∗代表2种bilinear map:

  • 用于表示标准的dot product of vectors:x⃗∗y⃗=x⃗y⃗T\vec{x}*\vec{y}=\vec{x}\vec{y}^Tx∗y​=xy​T;
  • 用于表示: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​,y​1​,⋯,⋯,xm​,y​m​∈Zpn​。
  • relation:z=∑i=1mx⃗i∗y⃗iz=\sum_{i=1}^{m}\vec{x}_i*\vec{y}_iz=∑i=1m​xi​∗y​i​。

接下来,将针对以上场景构建的零知识证明算法。

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​=comc​k(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_0f​x​=ex+dx​,f​y​=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_zf​x​,f​y​,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​(f​x​;rx​)∧bebd​=comck​(f​y​;sy​)∧ce2c1e​c0​=comck​(f​x​∗f​y​;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/log⁡2n4n\mathcal{k}/{\log_2 n}4nk/log2​n个multiplications in GGG。
  • Veriifer的computation cost为:计算f⃗x,f⃗y\vec{f}_x,\vec{f}_yf​x​,f​y​的commitments,可采用Lim的multi-exponentiation技术,对应也为4nk/log⁡2n4n\mathcal{k}/{\log_2 n}4nk/log2​n个multiplications in GGG。但是,可在此基础上再采用randomization技术,再次reduce为2nk/log⁡2n2n\mathcal{k}/{\log_2 n}2nk/log2​n个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​(αf​x​+f​y​;α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​(y​1​;s1​),⋯,⋯,am​=comck​(xm​;rm​),bm​=comck​(y​m​;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​,y​1​,⋯,⋯,xm​,y​m​∈Zpn​。
  • relation:z=∑i=1mx⃗∗y⃗z=\sum_{i=1}^{m}\vec{x}*\vec{y}z=∑i=1m​x∗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=1m​x∗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−1​xi​∗y​j​;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=1m​aiei−1​,b′=comck​(y​′;s′)=∏j=1m​bjem−j​,c′=comck​(z′;t′)=∏l=02m−2​clel​
    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=1m​ei−1xi​,r′=∑i=1m​ei−1ri​,y​′=∑j=1m​em−jy​j​,s′=∑j=1m​em−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−2​el∑i,j:l=m+i−j−1​xi​∗y​j​,而t′=∑l=02m−2eltlt'=\sum_{l=0}^{2m-2}e^lt_lt′=∑l=02m−2​eltl​。
    基本信息为:
    – 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​∗y​j​ 不同,可通过增加round interaction的次数来减少。如采用 2log⁡2m2\log_2 m2log2​m-round reduction to the minimal case,Prover仅需计算 4mn4mn4mn 个multiplications。【即不再关心整个矩阵的所有对角线,只关心基于主对角线关联的2×22\times 22×2范围内的元素。】
以m=8m=8m=8为例,2log⁡2m=62\log_2 m=62log2​m=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(y​T),com(λ)
  • private info:矩阵X\mathbf{X}X,特征值λ\lambdaλ,特征向量y⃗T\vec{y}^Ty​T
  • relation:λy⃗T=Xy⃗T\lambda\vec{y}^T=\mathbf{X}\vec{y}^Tλy​T=Xy​T

基本思路为:

  • 首先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)y​T,可借助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学习笔记相关推荐

  1. Customizable constraint systems for succinct arguments学习笔记(2)

    微软研究中心Srinath Setty.a16z crypto research 和 Georgetown University Justin Thaler.Carnegie Mellon Unive ...

  2. Chapter 1 (Linear Equations in Linear Algebra): System of linear equations (线性方程组)

    本文为<Linear algebra and its applications>的读书笔记 目录 System of linear equations (线性方程组) Matrix Not ...

  3. Subvector Commitments with Application to Succinct Arguments学习笔记

    1. 背景知识 Russell W. F. Lai 和 Giulio Malavolta 在Crypto 2019上发表的论文<Subvector Commitments with Applic ...

  4. Customizable constraint systems for succinct arguments学习笔记(1)

    1. 引言 微软研究中心Srinath Setty.a16z crypto research 和 Georgetown University Justin Thaler.Carnegie Mellon ...

  5. Linear Algebra

    文章目录 Mind Map GOALS CODE WORKS CONTENTS principal components analysis(PCA) WORKS Mind Map GOALS eige ...

  6. numpy中线性代数库的使用Linear Algebra

    numpy中线性代数库的使用Linear Algebra 文章目录: 一. 一. Reference: 1.https://blog.csdn.net/pipisorry/article/detail ...

  7. 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 ...

  8. 线性代数第九版pdf英文_《Linear Algebra Done Right》线性代数复习及部分习题解答(3.C)...

    个人声明 本系列文章记录本人自学线性代数教材<Linear Algebra Done Right>的概念梳理(复习)和部分习题解答(练习).如有任何错误或不严谨之处恳请读者在评论区留言提醒 ...

  9. GAMES101课程学习笔记—Lec 02:Linear Algebra 线性代数回顾

    GAMES101课程学习笔记-Lec 02:Linear Algebra 线性代数回顾 0 图形学的依赖学科 1 向量 1.1 点乘 1.2 叉乘 2 矩阵 本节课知识比较基础,大学课程里应该都学过, ...

最新文章

  1. [转]【 视频 】PAR、DAR和SAR都是啥
  2. HDU 1159 Common Subsequence 动态规划
  3. 【牛客 - 330C】Applese 走迷宫(bfs)
  4. linux初识到入门_系统
  5. MyBatis笔记二:配置
  6. 三角形周长最短问题_1.八年级数学:DE平分ABC的周长?怎么求DE的长?你想了很久吧?...
  7. DEA用法(1)--三阶段DEA模型与DEAP使用方法教程
  8. 浅析近场通信技术特点及未来可能的应用与发展
  9. 基于KDJ指标的Dual Thrust策略
  10. 【vscode 报错】Couldn‘t start client ESLint
  11. 学习管理系统五大好处
  12. Python代码画小猪佩奇--turtle绘图
  13. 如何快速成为谷歌web Store开发者(不用办visa/信用卡)
  14. 卓有成效的管理者|木深读书笔记
  15. kernel panic
  16. c语言 输出音频 单片机,单片机播放WAV格式音频的理解
  17. Java.lang.Character类详解
  18. 教你十秒钟学会剪映抠绿幕
  19. 从深度学习计算过程来分析深度学习工作站\服务器的硬件配置
  20. inventor导出tekla_Inventor iLogic - 批量导出PDF,DXF,DWF

热门文章

  1. 如何使用ansible管理多台远程服务器
  2. Android远程弹窗,Remote Desktop(远程桌面)Android平台远程电脑的又一神器!
  3. esxi 用途和开机自启动设置。
  4. elasticsearch2.4.1+kibana4.6.1+mavel2.4.1
  5. Visual Studio 2022下载安装及使用教程
  6. 计算机的色彩在哪调整w10,win10电脑色彩太冷怎么调节屏幕色彩
  7. 《计算机教育》专题报道:培养兴趣,渔之以愉
  8. Java实现微信公众号每日推送
  9. 超几何分布HyperGeometricDistribution
  10. 【CSP201609-3】炉石传说【模拟】