Skip to article frontmatterSkip to article content

Greyhound 承诺

Greyhound 是一个基于lattice的polynomial commitment scheme(PCS)。对于degree为NN 的多项式,evaluation 证明的尺寸是polylog(N)poly\log(N),证明的验证时间是O(N)O(\sqrt{N})。本文的主要目的是帮助读者理解Greyhound多项式承诺的方法,evaluation证明的做法,以及如何用Greyhound证明一个 Fq\mathbb{F}_q 上的多项式的求值。

1. 符号和相关背景

在介绍 Greyhound 的设计思路前,先引入一些符号。

dd是一个2的幂次,R=Z[X]/(Xd+1)\mathcal{R} = \mathbb{Z}[X]/(X^d + 1)2d2d 次分圆域的整环,用奇素数qq定义环 Rq=Zq[X]/(Xd+1)\mathcal{R}_q = \mathbb{Z}_q[X]/(X^d + 1),定义 δ=logq\delta = \lfloor \log q \rfloor. 为了避免符号混淆,后文统一使用“向量”表示 R\mathcal{R}Rq\mathcal{R}_q 上的多项式列向量。

对整数n1n \geq 1,定义一个用于二进制合成十进制的工具矩阵 Gn=I[1 2 4  2δ]Rqn×nδ\mathbf{G}_n = \mathbf{I} \otimes [1 ~2~ 4~ \cdots~ 2^\delta] \in \mathcal{R}_q^{n \times n\delta} ,对应地,二进制分解用符号 Gn1RqnRqδn\mathbf{G}_n^{-1} : \mathcal{R}_q^n \to \mathcal{R}_q^{\delta n} 表示。

例对于一个向量 tRqn\mathbf{t} \in \mathcal{R}_q^n,符号Gn1(t)\mathbf{G}_n^{-1}(\mathbf{t})表示,将 t\mathbf{t} 的系数全部分解成二进制数,再通过系数填充成的向量。 Gn\mathbf{G}_nGn1\mathbf{G}_n^{-1}是可逆的过程,有 GnGn1(t)=t\mathbf{G}_n \mathbf{G}_n^{-1}(\mathbf{t}) = \mathbf{t}.

例如,R10=Z10[X]/(X3+1)\mathcal{R}_{10} = \mathbb{Z}_{10} [X]/(X^3+1)t=(t1,t2)=(6+2X+5X2,4+X+9X2)R102\mathbf{t} = (t_1, t_2) = (6+2X+5X^2, 4+X+9X^2) \in \mathcal{R}_{10}^2 ,定义δ=log10=4\delta = \lceil \log 10 \rceil = 4。 那么 G31(t)\mathbf{G}_3^{-1}(\mathbf{t}) 是先把(6,5,1),(4,9,2)(6,5,1),(4,9,2) 全部写成二进制数(0110,0010,0101,0100,1001,0010)(0110,0010,0101,0100,1001,0010),然后填充成 Rq\mathcal{R}_q 上的向量 t^=(0+X+X2,0+0X+0X2,1+0X+0X2,1+0X+1X2,0+X+0X2,0+X+0X2,0+X+0X2,0+X+0X2)R2δ\hat{\mathbf{t}} = (0+X+X^2, 0+0X+0X^2, 1+0X+0X^2, 1+0X+1X^2, 0+X+0X^2, 0+X+0X^2, 0+X+0X^2, 0+X+0X^2)\in \mathcal{R}^{2 \delta},即G31(t)=t^\mathbf{G}_3^{-1}(\mathbf{t}) = \hat{\mathbf{t}}. 对应地,矩阵

G3=[12232400001223240000122324]\mathbf{G}_3 = \begin{bmatrix} 1 & 2 & 2^3 & 2^4 & 0 &&&&&&\cdots&0\\ 0 & & \cdots &0 & 1 & 2 & 2^3 & 2^4 &0 && \cdots & 0\\ 0 & &\cdots & & & & &0 & 1 & 2 & 2^3 & 2^4 \end{bmatrix}

表示上述过程的逆运算,即 G3t^=t=(6+2X+5X2,4+X+9X2)R102\mathbf{G}_3 \hat{\mathbf{t}} = \mathbf{t} = (6+2X+5X^2, 4+X+9X^2) \in \mathcal{R}_{10}^2.

Ajtai 承诺

此外,介绍SIS问题与Ajtai承诺的定义。

SIS问题定义为,给定一个公开矩阵 ARqn×m\mathbf{A} \in \mathcal{R}_q^{n \times m},求解一个非零短向量 zRqm\mathbf{z} \in \mathcal{R}_q^m 满足 Az=0,zB\mathbf{A}\mathbf{z}=\mathbf{0}, |\mathbf{z}|\leq B.

对于一个二进制消息,通过系数填充将其填充成 R\mathcal{R} 上的向量 mRn\mathbf{m} \in \mathcal{R}^n,Ajtai承诺过程如下:

关于Ajtai承诺,有3个点可以进一步讨论:1. 承诺的安全性,2. 承诺消息的范数和 3. 承诺值的压缩性质。

  1. 承诺的binding性质基于 SIS 问题,如果一个恶意的攻击者想把承诺值 t\mathbf{t} 换成另一个消息的承诺 t=Am\mathbf{t} = \mathbf{Am}',等价于找到SIS问题的解 mm\mathbf{m-m'},满足 0=Amm,mm2\mathbf{0} = \mathbf{Am-m}', |\mathbf{m-m}'|_\infty \leq 2.

  2. 注意到,我们求出SIS问题的解能够满足mm2|\mathbf{m-m}'|_\infty \leq 2,是因为我们要求了承诺的消息都是二进制的。这里要求消息为二进制数实际上是在约束 m\mathbf{m} 的范数(norm)比较小。在其他情况下也可以是 m\mathbf{m} 的范数小于某一个bound BB,那么承诺的binding性质就会归约到bound为 BB 的解:mm2B|\mathbf{m-m}'|_\infty \leq 2B.

  3. 承诺值的压缩性质体现在,承诺值 tRqn\mathbf{t} \in \mathcal{R}_q^nRq\mathcal{R}_q上的nn维向量,与承诺的消息长度(Rq\mathcal{R}_q 上的 mm 维向量)无关,且在SIS问题的安全性定义下,承诺值的长度 n<mn<m.

2. Greyhound的承诺方案

Greyhound承诺可以理解为一个两层Ajtai承诺。

假设要承诺一组(例如 rr 个)任意的向量 f1,,frRqm\mathbf{f}_1, \dots, \mathbf{f}_r \in \mathcal{R}_q^m。注意每个 fi\mathbf{f}_i 都是一个Rq\mathcal{R}_q上的mm维向量,向量的每个分量为一个 Rq\mathcal{R}_q 上的元素。

承诺密钥为内层的公开矩阵 ARqn×mδ\mathbf{A}\in \mathcal{R}_q^{n\times m\delta} 与外层的公开矩阵 BRqn×rnδ\mathbf{B} \in \mathcal{R}_q^{n \times r n \delta}.

3. Greyhound承诺的多项式求值

在上一节我们只讨论了如何承诺一组向量 f1,,frRqm\mathbf{f}_1, \dots, \mathbf{f}_r \in \mathcal{R}_q^m,但我们的目标是构造一个PCS,所以需要讨论这组向量与一个要做evaluation的多项式 f(X)=i=0N1fiXiRq<N[X]f(\mathsf{X}) = \sum_{i=0}^{N-1} f_i \mathsf{X}^i \in \mathcal{R}_q^{<N}[\mathsf{X}] 之间的关系。

需要注意的是, X\mathsf{X} 是多项式 ff 的变量,与R==Z[X]/(Xd+1)\mathcal{R} = = \mathbb{Z}[X]/(X^d + 1) 中的 XX 没有关系。

假设 N=mrN=m \cdot r,我们希望证明多项式 ff 在点 xRqx \in \mathcal{R}_q 的求值为yy, 即 f(x)=i=0N1fixi=yf(x) = \sum_{i=0}^{N-1} f_i x^i = y.

类似mercury,我们可以把上述求值过程用矩阵和向量的乘法表示:

f(x)=[1 x x2  xm1][f0fmf(r1)mf1fm+1f(r1)m+1f2fm+2f(r1)m+2fm1f2m1frm1][1xm(xm)2(xm)r].f(x) = [1~x~x^2~\cdots~x^{m-1}] \begin{bmatrix} f_0 & f_m & \cdots & f_{(r-1)m} \\ f_{1} & f_{m+1} &\cdots & f_{(r-1)m+1} \\ f_{2} & f_{m+2} &\cdots & f_{(r-1)m+2} \\ &&\cdots& \\ f_{m-1} & f_{2m-1} &\cdots & f_{rm-1} \end{bmatrix} \begin{bmatrix} 1 \\ x^m \\ (x^m)^2\\ \vdots \\ (x^m)^r \end{bmatrix}.

因此,如果定义向量 fi=[f(i1)m,f(i1)m+1,...,fim1]Rqm\mathbf{f}_i = [ f_{(i-1)m}, f_{(i-1)m+1}, ... , f_{im-1}] \in \mathcal{R}_q^m,为多项式 ff 的系数组成的一组向量,那么,对f1,,frRqm\mathbf{f}_1, \dots, \mathbf{f}_r \in \mathcal{R}_q^m的承诺就是对多项式 ff 的承诺。

现在,我们定义向量 a=[1 x x2  xm1]\mathbf{a}^\top = [1~x~x^2~\cdots~x^{m-1}]b=[1 xm  (xm)r]\mathbf{b}^\top = \begin{bmatrix} 1 ~ x^m ~\dots ~ (x^m)^r \end{bmatrix} ,那么多项式 ff 的求值可以表示为

f(x)=a[f1  fr]b.f(x) = \mathbf{a}^\top [\mathbf{f}_1 ~ \cdots ~\mathbf{f}_r] \mathbf{b}.

4. 多项式求值的证明

多项式求值的证明包括2点:1. 多项式的承诺是正确计算的;2. 多项式求值的运算是正确的。

  1. 首先一个证明者需要对多项式 ff 按照1.1节的方式做承诺,那么证明承诺计算的正确性,即证明:
    si=Gm1(fi),ti=Gnt^i=Asi,u=B[t^1t^r].\begin{align*} \mathbf{s}_i &= \mathbf{G}^{-1}_m(\mathbf{f}_i), \\ \mathbf{t}_i &= \mathbf{G}_n\hat{\mathbf{t}}_i = \mathbf{As}_i, \\ \mathbf{u} &= \mathbf{B}\begin{bmatrix} \hat{\mathbf{t}}_1 \\ \vdots \\ \hat{\mathbf{t}}_r \end{bmatrix}. \end{align*}

由于G\mathbf{G}的转化是可逆的,第一个等式也可以写成 fi=Gmsi\mathbf{f}_i = \mathbf{G}_m \mathbf{s}_i.

  1. 证明多项式求值的正确性,即证明:
    f(x)=a[f1  fr]b.f(x) = \mathbf{a}^\top [\mathbf{f}_1 ~ \cdots ~\mathbf{f}_r] \mathbf{b}.

Greyhound 证明以上4个等式的思路是,由证明者计算与多项式 fi\mathbf{f}_i 直接相关的部分,由验证者计算其余部分。我们先展示证明过程,再来讨论这个证明思路。

假设协议的公开参数为承诺密钥A,B\mathbf{A,B},承诺uu与多项式ff. 整个协议由2轮交互组成:

  1. 证明者首先计算f(x)f(x)的前半部分,发送 w\mathbf{w} 给验证者:

    w:=a[f1  fr].\mathbf{w}^\top := \mathbf{a}^\top[\mathbf{f}_1 ~ \cdots ~\mathbf{f}_r].
  2. 验证者选择一个随机挑战向量 c=(c1,...,cr)Rqr\mathbf{c} = (c_1, ..., c_r) \in \mathcal{R}_q^r 发送给证明者。

  3. 证明者发送中间承诺 (t^1,...,t^r)(\hat{\mathbf{t}}_1, ...,\hat{\mathbf{t}}_r), 使用 c\mathbf{c}si\mathbf{s}_i 做线性组合: z:=[s1  sr]c=s1c1+...+srcrRqm\mathbf{z} := [\mathbf{s}_1 ~ \cdots~ \mathbf{s}_r] \mathbf{c} = \mathbf{s}_1c_1 + ... +\mathbf{s}_r c_r\in \mathcal{R}_q^m.

最后,验证者使用证明者发送的所有信息w,t^i,z\mathbf{w}, \hat{\mathbf{t}}_i, \mathbf{z},验证以下的等式是否成立:

wb=y,wc=aGmz,Az=c1Gnt^1++crGnt^r,u=B[t^1t^r].\begin{align} \mathbf{w}^\top \mathbf{b} &= y, \\ \mathbf{w}^\top \mathbf{c} &= \mathbf{a}^\top \mathbf{G}_m \mathbf{z},\\ \mathbf{Az} & = c_1\mathbf{G}_n \hat{\mathbf{t}}_1 + \cdots + c_r \mathbf{G}_n \hat{\mathbf{t}}_r,\\ \mathbf{u} &= \mathbf{B}\begin{bmatrix} \hat{\mathbf{t}}_1 \\ \vdots \\ \hat{\mathbf{t}}_r \end{bmatrix}. \end{align}

第一个等式实际上是在验证多项式 f(x)f(x) 求值运算的后半部分,因为如果 w\mathbf{w} 是正确的(这由第二个等式保证),那么

f(x)=a[f1  fr]b=wb=y.f(x) = \mathbf{a}^\top[\mathbf{f}_1 ~ \cdots ~\mathbf{f}_r] \mathbf{b} = \mathbf{w}^\top \mathbf{b} = y.

第二个等式在挑战向量 c\mathbf{c} 的参与下验证了f(x)f(x)求值运算前半部分的正确性

wc=a[f1  fr]c=aGm[s1  sr]c=aGmz.\begin{align*} \mathbf{w}^\top \mathbf{c} &= \mathbf{a}^\top [\mathbf{f}_1 ~ \cdots ~\mathbf{f}_r] \mathbf{c} \\ & = \mathbf{a}^\top \mathbf{G}_m [\mathbf{s}_1~ \cdots ~\mathbf{s}_r] \mathbf{c} \\ & = \mathbf{a}^\top \mathbf{G}_m \mathbf{z} \end{align*}.

第三个等式验证了PCS内层承诺的正确性

Az=As1c1+...+Asrcr=c1Gnt^1++crGnt^r.\begin{align*} \mathbf{Az} & = \mathbf{A s}_1 c_1 + ... + \mathbf{A s}_r c_r\\ &= c_1\mathbf{G}_n \hat{\mathbf{t}}_1 + \cdots + c_r \mathbf{G}_n \hat{\mathbf{t}}_r. \\ \end{align*}

第四个等式验证了PCS的外层承诺。

这个证明可以进一步使用 Labrador 的递归证明来优化证明尺寸,通过把 (1) 中的等式改写成 Labrador 证明的标准形式,具体细节请参考Greyhound文档。

5. 使用 Rq\mathcal{R}_q 证明 Fq\mathbb{F}_q 上的多项式求值

在之前的介绍中,我们忽略了一个重要的问题:就是所有的运算与证明都是在 Rq\mathcal{R}_q 上执行的,而大部分实际应用都是用Fq\mathbb{F}_q 上的多项式。本节讨论如何将 Fq\mathbb{F}_q 上的多项式等价表示为 Rq\mathcal{R}_q 上的多项式,进而使用前几节的证明方法。

Fq\mathbb{F}_qRq\mathcal{R}_q 的转化需要把 Fq\mathbb{F}_q 上的向量通过系数填充填充到 Rq\mathcal{R}_q 上,然后利用 Rq\mathcal{R}_q 上的运算表示 Fq\mathbb{F}_q 上的运算。

定义一种自同构映射 σ:RqRq\sigma: \mathcal{R}_q \to \mathcal{R}_q,该映射把 Rq\mathcal{R}_q 上的元素映射到负幂次,σX=X1\sigma{X} = X^{-1}. 例如,a=a0+i=1d1aiXiRqa = a_0 + \sum_{i=1}^{d-1} a_i X^i \in \mathcal{R}_q,那么 σ(a)=a0+i=1d1aiXiRq\sigma(a) = a_0 +\sum_{i=1}^{d-1} a_i X^{-i} \in \mathcal{R}_q. 在 Rq\mathcal{R}_q 上,aσaa\sigma{a}的常数项为:a0a0+i=1d1aiai=i=0d1aiaica_0 a_0 + \sum_{i=1}^{d-1} a_i a_i = \sum_{i=0}^{d-1} a_i a_ic,即 aa 中的项 与 σ(a)\sigma(a) 中的项乘积不包含XX的所有项求和。

先明确以下符号:Fq\mathbb{F}_q 上的多项式记为 F(U)=i=0N1FiUi=VFqF(U) = \sum_{i=0}^{N'-1} F_i U^i = V \in \mathbb{F}_qRq\mathcal{R}_q 上的多项式记为 f(x)=i=0N1fixi=yRqf(x) = \sum_{i=0}^{N-1} f_i x^i = y \in \mathcal{R}_q,我们用ff表示FF通过系数填充到Rq\mathcal{R}_q上的多项式。 为了区分,我们用 N1N-1 表示 ff 的多项式次数,N1N'-1 表示 FF 的次数。经过系数填充后,NNNN'是不相等的。

我们定义FF系数填充后的求值式为 f(x)=f0σ(x)f(x) = f_0 \sigma(x) . 这里的 f0=i=0d1FiXiRqf_0 = \sum_{i=0}^{d-1} F_i X^i \in \mathcal{R}_qFF 的所有系数(F0,...,FN1)(F_0, ..., F_{N'-1}) 通过系数填充得到的,σ(x)\sigma(x)FF 的求值点 UU 的所有幂次 (1,U,...,UN1)(1, U, ..., U^{N'-1}),先通过系数填充到x=i=0d1UiXiRqx = \sum_{i=0}^{d-1} U^i X^i\in \mathcal{R}_q ,再做 σ\sigma 映射得到的, σ(x)=1+i=1d1UiXiRq\sigma(x) = 1+ \sum_{i=1}^{d-1} U^i X^i \in \mathcal{R}_q。 需要再次提醒的是,此处的 XXRq\mathcal{R}_q 中的符号,没有实际意义。

那么,利用上面讨论的 σ\sigma 映射,f(x)=f1σ(x)f(x) = f_1 \sigma(x) 的常数项为

i=0N1FiUi=V.\sum_{i=0}^{N'-1} F_i U^{i} = V.

这意味着,一个Greyhound的验证者可以通过检查 f(x)f(x) 的常数项是否为 VV 来检查F(U)=VF(U) = V是否成立。

我们只需要把 FF 的系数依次填充到 (f0,f1...,fN1)(f_0, f_1 ..., f_{N-1}), 再把 (1,U,...,UN1)(1, U, ..., U^{N'-1}) 依次填充到 x1,x2,...,xNRqx_1, x_2, ..., x_N \in \mathcal{R}_q, 然后定义

f(x)=i=0Nfixi.f(x) = \sum_{i=0}^{N} f_i x_i.

那么,f(x)f(x)fif_ixix_i 的乘法运算会分段地将j=0dFid+jUid+j\sum_{j=0}^{d} F_{id+j}{U^{id+j}} 保存在 fixif_i x_i 的常数项中,这与先前的讨论类似。 由于 Rq\mathcal{R}_q 上的加法运算是对应系数相加,那么外层从 i=0i=0NN 的加法运算 i=0N1fixi\sum_{i=0}^{N-1} f_i x_i ,会把各个常数项中的 j=0dFid+jUid+j\sum_{j=0}^{d} F_{id+j}{U^{id+j}}进一步合并起来,即 f(x)f(x)的常数项为

i=0N1j=0dFid+jUid+j=i=0N1FiUi=V.\sum_{i=0}^{N-1} \sum_{j=0}^{d} F_{id+j}{U^{id+j}} = \sum_{i=0} ^{N'-1} F_i U^i = V.

现在,我们已经可以使用greyhound对任意的 Fq\mathbb{F}_q 上的多项式做承诺,以及证明它们的evaluations了,感谢阅读致此。


参考文献 [1] Ngoc Khanh Nguyen, Gregor Seiler: Greyhound: Fast Polynomial Commitments from Lattices. CRYPTO (10) 2024: 243-275.