Greyhound 是一个基于lattice的polynomial commitment scheme(PCS)。对于degree为N N N 的多项式,evaluation 证明的尺寸是p o l y log ( N ) poly\log(N) p o l y log ( N ) ,证明的验证时间是O ( N ) O(\sqrt{N}) O ( N ) 。本文的主要目的是帮助读者理解Greyhound多项式承诺的方法,evaluation证明的做法,以及如何用Greyhound证明一个 F q \mathbb{F}_q F q 上的多项式的求值。
1. 符号和相关背景 ¶ 在介绍 Greyhound 的设计思路前,先引入一些符号。
设d d d 是一个2的幂次,R = Z [ X ] / ( X d + 1 ) \mathcal{R} = \mathbb{Z}[X]/(X^d + 1) R = Z [ X ] / ( X d + 1 ) 是 2 d 2d 2 d 次分圆域的整环,用奇素数q q q 定义环 R q = Z q [ X ] / ( X d + 1 ) \mathcal{R}_q = \mathbb{Z}_q[X]/(X^d + 1) R q = Z q [ X ] / ( X d + 1 ) ,定义 δ = ⌊ log q ⌋ \delta = \lfloor \log q \rfloor δ = ⌊ log q ⌋ . 为了避免符号混淆,后文统一使用“向量”表示 R \mathcal{R} R 或 R q \mathcal{R}_q R q 上的多项式列向量。
对整数n ≥ 1 n \geq 1 n ≥ 1 ,定义一个用于二进制合成十进制的工具矩阵 G n = I ⊗ [ 1 2 4 ⋯ 2 δ ] ∈ R q n × n δ \mathbf{G}_n = \mathbf{I} \otimes [1 ~2~ 4~ \cdots~ 2^\delta] \in \mathcal{R}_q^{n \times n\delta} G n = I ⊗ [ 1 2 4 ⋯ 2 δ ] ∈ R q n × n δ ,对应地,二进制分解用符号 G n − 1 : R q n → R q δ n \mathbf{G}_n^{-1} : \mathcal{R}_q^n \to \mathcal{R}_q^{\delta n} G n − 1 : R q n → R q δ n 表示。
例对于一个向量 t ∈ R q n \mathbf{t} \in \mathcal{R}_q^n t ∈ R q n ,符号G n − 1 ( t ) \mathbf{G}_n^{-1}(\mathbf{t}) G n − 1 ( t ) 表示,将 t \mathbf{t} t 的系数全部分解成二进制数,再通过系数填充成的向量。
G n \mathbf{G}_n G n 与 G n − 1 \mathbf{G}_n^{-1} G n − 1 是可逆的过程,有 G n G n − 1 ( t ) = t \mathbf{G}_n \mathbf{G}_n^{-1}(\mathbf{t}) = \mathbf{t} G n G n − 1 ( t ) = t .
例如,R 10 = Z 10 [ X ] / ( X 3 + 1 ) \mathcal{R}_{10} = \mathbb{Z}_{10} [X]/(X^3+1) R 10 = Z 10 [ X ] / ( X 3 + 1 ) ,t = ( t 1 , t 2 ) = ( 6 + 2 X + 5 X 2 , 4 + X + 9 X 2 ) ∈ R 10 2 \mathbf{t} = (t_1, t_2) = (6+2X+5X^2, 4+X+9X^2) \in \mathcal{R}_{10}^2 t = ( t 1 , t 2 ) = ( 6 + 2 X + 5 X 2 , 4 + X + 9 X 2 ) ∈ R 10 2 ,定义δ = ⌈ log 10 ⌉ = 4 \delta = \lceil \log 10 \rceil = 4 δ = ⌈ log 10 ⌉ = 4 。
那么 G 3 − 1 ( t ) \mathbf{G}_3^{-1}(\mathbf{t}) G 3 − 1 ( t ) 是先把( 6 , 5 , 1 ) , ( 4 , 9 , 2 ) (6,5,1),(4,9,2) ( 6 , 5 , 1 ) , ( 4 , 9 , 2 ) 全部写成二进制数( 0110 , 0010 , 0101 , 0100 , 1001 , 0010 ) (0110,0010,0101,0100,1001,0010) ( 0110 , 0010 , 0101 , 0100 , 1001 , 0010 ) ,然后填充成 R q \mathcal{R}_q R q 上的向量 t ^ = ( 0 + X + X 2 , 0 + 0 X + 0 X 2 , 1 + 0 X + 0 X 2 , 1 + 0 X + 1 X 2 , 0 + X + 0 X 2 , 0 + X + 0 X 2 , 0 + X + 0 X 2 , 0 + X + 0 X 2 ) ∈ R 2 δ \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} t ^ = ( 0 + X + X 2 , 0 + 0 X + 0 X 2 , 1 + 0 X + 0 X 2 , 1 + 0 X + 1 X 2 , 0 + X + 0 X 2 , 0 + X + 0 X 2 , 0 + X + 0 X 2 , 0 + X + 0 X 2 ) ∈ R 2 δ ,即G 3 − 1 ( t ) = t ^ \mathbf{G}_3^{-1}(\mathbf{t}) = \hat{\mathbf{t}} G 3 − 1 ( t ) = t ^ .
对应地,矩阵
G 3 = [ 1 2 2 3 2 4 0 ⋯ 0 0 ⋯ 0 1 2 2 3 2 4 0 ⋯ 0 0 ⋯ 0 1 2 2 3 2 4 ] \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} G 3 = ⎣ ⎡ 1 0 0 2 2 3 ⋯ ⋯ 2 4 0 0 1 2 2 3 2 4 0 0 1 2 ⋯ ⋯ 2 3 0 0 2 4 ⎦ ⎤ 表示上述过程的逆运算,即 G 3 t ^ = t = ( 6 + 2 X + 5 X 2 , 4 + X + 9 X 2 ) ∈ R 10 2 \mathbf{G}_3 \hat{\mathbf{t}} = \mathbf{t} = (6+2X+5X^2, 4+X+9X^2) \in \mathcal{R}_{10}^2 G 3 t ^ = t = ( 6 + 2 X + 5 X 2 , 4 + X + 9 X 2 ) ∈ R 10 2 .
Ajtai 承诺 ¶ 此外,介绍SIS问题与Ajtai承诺的定义。
SIS问题定义为,给定一个公开矩阵 A ∈ R q n × m \mathbf{A} \in \mathcal{R}_q^{n \times m} A ∈ R q n × m ,求解一个非零短向量 z ∈ R q m \mathbf{z} \in \mathcal{R}_q^m z ∈ R q m 满足 A z = 0 , ∣ z ∣ ≤ B \mathbf{A}\mathbf{z}=\mathbf{0}, |\mathbf{z}|\leq B Az = 0 , ∣ z ∣ ≤ B .
对于一个二进制消息,通过系数填充将其填充成 R \mathcal{R} R 上的向量 m ∈ R n \mathbf{m} \in \mathcal{R}^n m ∈ R n ,Ajtai承诺过程如下:
KeyGen 输入安全参数λ \lambda λ ,生成承诺密钥 A ∈ R q n × m \mathbf{A} \in \mathcal{R}_q^{n\times m} A ∈ R q n × m Com 输入承诺密钥 A ∈ R q n × m \mathbf{A} \in \mathcal{R}_q^{n\times m} A ∈ R q n × m 与二进制的消息m ∈ R m \mathbf{m} \in \mathcal{R}^m m ∈ R m , 计算承诺 t = A m \mathbf{t} = \mathbf{Am} t = Am . 关于Ajtai承诺,有3个点可以进一步讨论:1. 承诺的安全性,2. 承诺消息的范数和 3. 承诺值的压缩性质。
承诺的binding性质基于 SIS 问题,如果一个恶意的攻击者想把承诺值 t \mathbf{t} t 换成另一个消息的承诺 t = A m ′ \mathbf{t} = \mathbf{Am}' t = Am ′ ,等价于找到SIS问题的解 m − m ′ \mathbf{m-m'} m − m ′ ,满足 0 = A m − m ′ , ∣ m − m ′ ∣ ∞ ≤ 2 \mathbf{0} = \mathbf{Am-m}', |\mathbf{m-m}'|_\infty \leq 2 0 = Am − m ′ , ∣ m − m ′ ∣ ∞ ≤ 2 .
注意到,我们求出SIS问题的解能够满足∣ m − m ′ ∣ ∞ ≤ 2 |\mathbf{m-m}'|_\infty \leq 2 ∣ m − m ′ ∣ ∞ ≤ 2 ,是因为我们要求了承诺的消息都是二进制的。这里要求消息为二进制数实际上是在约束 m \mathbf{m} m 的范数(norm)比较小。在其他情况下也可以是 m \mathbf{m} m 的范数小于某一个bound B B B ,那么承诺的binding性质就会归约到bound为 B B B 的解:∣ m − m ′ ∣ ∞ ≤ 2 B |\mathbf{m-m}'|_\infty \leq 2B ∣ m − m ′ ∣ ∞ ≤ 2 B .
承诺值的压缩性质体现在,承诺值 t ∈ R q n \mathbf{t} \in \mathcal{R}_q^n t ∈ R q n 是 R q \mathcal{R}_q R q 上的n n n 维向量,与承诺的消息长度(R q \mathcal{R}_q R q 上的 m m m 维向量)无关,且在SIS问题的安全性定义下,承诺值的长度 n < m n<m n < m .
2. Greyhound的承诺方案 ¶ Greyhound承诺可以理解为一个两层Ajtai承诺。
假设要承诺一组(例如 r r r 个)任意的向量 f 1 , … , f r ∈ R q m \mathbf{f}_1, \dots, \mathbf{f}_r \in \mathcal{R}_q^m f 1 , … , f r ∈ R q m 。注意每个 f i \mathbf{f}_i f i 都是一个R q \mathcal{R}_q R q 上的m m m 维向量,向量的每个分量为一个 R q \mathcal{R}_q R q 上的元素。
承诺密钥为内层的公开矩阵 A ∈ R q n × m δ \mathbf{A}\in \mathcal{R}_q^{n\times m\delta} A ∈ R q n × m δ 与外层的公开矩阵 B ∈ R q n × r n δ \mathbf{B} \in \mathcal{R}_q^{n \times r n \delta} B ∈ R q n × r n δ .
内层承诺:在上一节提到Ajtai承诺的消息应当为二进制字符串。因此,要使用Ajtai承诺对 f 1 , … , f r \mathbf{f}_1, \dots, \mathbf{f}_r f 1 , … , f r 承诺,首先需要利用进制转化的工具矩阵 G − 1 \mathbf{G}^{-1} G − 1 将这组向量转化成二进制的向量s i ∈ R q m δ \mathbf{s}_i \in \mathcal{R}_q^{m \delta} s i ∈ R q m δ ,即 s i = G m − 1 ( f i ) \mathbf{s}_i = \mathbf{G}_m^{-1}(\mathbf{f}_i) s i = G m − 1 ( f i ) 。现在,可以对消息s i \mathbf{s}_i s i 做Ajtai承诺:
t i : = A s i = A G m − 1 ( f i ) \mathbf{t}_i := \mathbf{As}_i = \mathbf{AG}^{-1}_m(\mathbf{f}_i) t i := As i = AG m − 1 ( f i ) 这样,可以得到 r r r 个消息f 1 , . . . , f r \mathbf{f}_1, ...,\mathbf{f}_r f 1 , ... , f r 的承诺值 t 1 , . . . , t r ∈ R q n \mathbf{t}_1, ..., \mathbf{t}_r \in \mathcal{R}_q^n t 1 , ... , t r ∈ R q n .
外层承诺:内层承诺完成后,我们得到了 r r r 个向量t 1 , . . . , t r ∈ R q n \mathbf{t}_1, ..., \mathbf{t}_r \in \mathcal{R}_q^n t 1 , ... , t r ∈ R q n ,目前的承诺值与消息的长度(r r r 组 长度为m m m 的向量),即O ( m r ) \mathcal{O}(mr) O ( m r ) 是亚线性的关系。为了获得更压缩的承诺值,即O ( 1 ) \mathcal{O}(1) O ( 1 ) ,我们希望对内层承诺值 t 1 , . . . , t r \mathbf{t}_1, ..., \mathbf{t}_r t 1 , ... , t r 再做一次Ajtai承诺。可以通过把 t 1 , . . . , t r \mathbf{t}_1, ..., \mathbf{t}_r t 1 , ... , t r 看成承诺消息,重复上面的过程来完成。首先使用 G − 1 \mathbf{G}^{-1} G − 1 将 t 1 , . . . , t r \mathbf{t}_1, ..., \mathbf{t}_r t 1 , ... , t r 转化成二进制系数的向量 t ^ i = G − 1 ( t i ) \hat{\mathbf{t}}_i = \mathbf{G}^{-1}(\mathbf{t}_i) t ^ i = G − 1 ( t i ) ,然后计算外层承诺值:
u : = B [ t ^ 1 ⋮ t ^ r ] ∈ R q n \mathbf{u} := \mathbf{B}\begin{bmatrix} \hat{\mathbf{t}}_1 \\ \vdots \\ \hat{\mathbf{t}}_r \end{bmatrix} \in \mathcal{R}_q^n u := B ⎣ ⎡ t ^ 1 ⋮ t ^ r ⎦ ⎤ ∈ R q n 最后,对一组向量 f 1 , … , f r ∈ R q m \mathbf{f}_1, \dots, \mathbf{f}_r \in \mathcal{R}_q^m f 1 , … , f r ∈ R q m 的承诺就是向量 u ∈ R q n \mathbf{u} \in \mathcal{R}_q^n u ∈ R q n .
3. Greyhound承诺的多项式求值 ¶ 在上一节我们只讨论了如何承诺一组向量 f 1 , … , f r ∈ R q m \mathbf{f}_1, \dots, \mathbf{f}_r \in \mathcal{R}_q^m f 1 , … , f r ∈ R q m ,但我们的目标是构造一个PCS,所以需要讨论这组向量与一个要做evaluation的多项式 f ( X ) = ∑ i = 0 N − 1 f i X i ∈ R q < N [ X ] f(\mathsf{X}) = \sum_{i=0}^{N-1} f_i \mathsf{X}^i \in \mathcal{R}_q^{<N}[\mathsf{X}] f ( X ) = ∑ i = 0 N − 1 f i X i ∈ R q < N [ X ] 之间的关系。
需要注意的是, X \mathsf{X} X 是多项式 f f f 的变量,与R = = Z [ X ] / ( X d + 1 ) \mathcal{R} = = \mathbb{Z}[X]/(X^d + 1) R == Z [ X ] / ( X d + 1 ) 中的 X X X 没有关系。
假设 N = m ⋅ r N=m \cdot r N = m ⋅ r ,我们希望证明多项式 f f f 在点 x ∈ R q x \in \mathcal{R}_q x ∈ R q 的求值为y y y , 即 f ( x ) = ∑ i = 0 N − 1 f i x i = y f(x) = \sum_{i=0}^{N-1} f_i x^i = y f ( x ) = ∑ i = 0 N − 1 f i x i = y .
类似mercury,我们可以把上述求值过程用矩阵和向量的乘法表示:
f ( x ) = [ 1 x x 2 ⋯ x m − 1 ] [ f 0 f m ⋯ f ( r − 1 ) m f 1 f m + 1 ⋯ f ( r − 1 ) m + 1 f 2 f m + 2 ⋯ f ( r − 1 ) m + 2 ⋯ f m − 1 f 2 m − 1 ⋯ f r m − 1 ] [ 1 x m ( x m ) 2 ⋮ ( x m ) 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}. f ( x ) = [ 1 x x 2 ⋯ x m − 1 ] ⎣ ⎡ f 0 f 1 f 2 f m − 1 f m f m + 1 f m + 2 f 2 m − 1 ⋯ ⋯ ⋯ ⋯ ⋯ f ( r − 1 ) m f ( r − 1 ) m + 1 f ( r − 1 ) m + 2 f r m − 1 ⎦ ⎤ ⎣ ⎡ 1 x m ( x m ) 2 ⋮ ( x m ) r ⎦ ⎤ . 因此,如果定义向量 f i = [ f ( i − 1 ) m , f ( i − 1 ) m + 1 , . . . , f i m − 1 ] ∈ R q m \mathbf{f}_i = [ f_{(i-1)m}, f_{(i-1)m+1}, ... , f_{im-1}] \in \mathcal{R}_q^m f i = [ f ( i − 1 ) m , f ( i − 1 ) m + 1 , ... , f im − 1 ] ∈ R q m ,为多项式 f f f 的系数组成的一组向量,那么,对f 1 , … , f r ∈ R q m \mathbf{f}_1, \dots, \mathbf{f}_r \in \mathcal{R}_q^m f 1 , … , f r ∈ R q m 的承诺就是对多项式 f f f 的承诺。
现在,我们定义向量 a ⊤ = [ 1 x x 2 ⋯ x m − 1 ] \mathbf{a}^\top = [1~x~x^2~\cdots~x^{m-1}] a ⊤ = [ 1 x x 2 ⋯ x m − 1 ] 与 b ⊤ = [ 1 x m … ( x m ) r ] \mathbf{b}^\top = \begin{bmatrix} 1 ~ x^m ~\dots ~ (x^m)^r \end{bmatrix} b ⊤ = [ 1 x m … ( x m ) r ] ,那么多项式 f f f 的求值可以表示为
f ( x ) = a ⊤ [ f 1 ⋯ f r ] b . f(x) = \mathbf{a}^\top [\mathbf{f}_1 ~ \cdots ~\mathbf{f}_r] \mathbf{b}. f ( x ) = a ⊤ [ f 1 ⋯ f r ] b . 4. 多项式求值的证明 ¶ 多项式求值的证明包括2点:1. 多项式的承诺是正确计算的;2. 多项式求值的运算是正确的。
首先一个证明者需要对多项式 f f f 按照1.1节的方式做承诺,那么证明承诺计算的正确性,即证明:
s i = G m − 1 ( f i ) , t i = G n t ^ i = A s i , u = B [ t ^ 1 ⋮ t ^ 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*} s i t i u = G m − 1 ( f i ) , = G n t ^ i = As i , = B ⎣ ⎡ t ^ 1 ⋮ t ^ r ⎦ ⎤ . 由于G \mathbf{G} G 的转化是可逆的,第一个等式也可以写成 f i = G m s i \mathbf{f}_i = \mathbf{G}_m \mathbf{s}_i f i = G m s i .
证明多项式求值的正确性,即证明:f ( x ) = a ⊤ [ f 1 ⋯ f r ] b . f(x) = \mathbf{a}^\top [\mathbf{f}_1 ~ \cdots ~\mathbf{f}_r] \mathbf{b}. f ( x ) = a ⊤ [ f 1 ⋯ f r ] b . Greyhound 证明以上4个等式的思路是,由证明者计算与多项式 f i \mathbf{f}_i f i 直接相关的部分,由验证者计算其余部分。我们先展示证明过程,再来讨论这个证明思路。
假设协议的公开参数为承诺密钥A , B \mathbf{A,B} A , B ,承诺u u u 与多项式f f f . 整个协议由2轮交互组成:
证明者首先计算f ( x ) f(x) f ( x ) 的前半部分,发送 w \mathbf{w} w 给验证者:
w ⊤ : = a ⊤ [ f 1 ⋯ f r ] . \mathbf{w}^\top := \mathbf{a}^\top[\mathbf{f}_1 ~ \cdots ~\mathbf{f}_r]. w ⊤ := a ⊤ [ f 1 ⋯ f r ] . 验证者选择一个随机挑战向量 c = ( c 1 , . . . , c r ) ∈ R q r \mathbf{c} = (c_1, ..., c_r) \in \mathcal{R}_q^r c = ( c 1 , ... , c r ) ∈ R q r 发送给证明者。
证明者发送中间承诺 ( t ^ 1 , . . . , t ^ r ) (\hat{\mathbf{t}}_1, ...,\hat{\mathbf{t}}_r) ( t ^ 1 , ... , t ^ r ) , 使用 c \mathbf{c} c 对s i \mathbf{s}_i s i 做线性组合: z : = [ s 1 ⋯ s r ] c = s 1 c 1 + . . . + s r c r ∈ R q m \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 z := [ s 1 ⋯ s r ] c = s 1 c 1 + ... + s r c r ∈ R q m .
最后,验证者使用证明者发送的所有信息w , t ^ i , z \mathbf{w}, \hat{\mathbf{t}}_i, \mathbf{z} w , t ^ i , z ,验证以下的等式是否成立:
w ⊤ b = y , w ⊤ c = a ⊤ G m z , A z = c 1 G n t ^ 1 + ⋯ + c r G n t ^ r , u = B [ t ^ 1 ⋮ t ^ 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} w ⊤ b w ⊤ c Az u = y , = a ⊤ G m z , = c 1 G n t ^ 1 + ⋯ + c r G n t ^ r , = B ⎣ ⎡ t ^ 1 ⋮ t ^ r ⎦ ⎤ . 第一个等式实际上是在验证多项式 f ( x ) f(x) f ( x ) 求值运算的后半部分,因为如果 w \mathbf{w} w 是正确的(这由第二个等式保证),那么
f ( x ) = a ⊤ [ f 1 ⋯ f r ] b = w ⊤ b = y . f(x) = \mathbf{a}^\top[\mathbf{f}_1 ~ \cdots ~\mathbf{f}_r] \mathbf{b} = \mathbf{w}^\top \mathbf{b} = y. f ( x ) = a ⊤ [ f 1 ⋯ f r ] b = w ⊤ b = y . 第二个等式在挑战向量 c \mathbf{c} c 的参与下验证了f ( x ) f(x) f ( x ) 求值运算前半部分的正确性
w ⊤ c = a ⊤ [ f 1 ⋯ f r ] c = a ⊤ G m [ s 1 ⋯ s r ] c = a ⊤ G m z . \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*}. w ⊤ c = a ⊤ [ f 1 ⋯ f r ] c = a ⊤ G m [ s 1 ⋯ s r ] c = a ⊤ G m z . 第三个等式验证了PCS内层承诺的正确性
A z = A s 1 c 1 + . . . + A s r c r = c 1 G n t ^ 1 + ⋯ + c r G n t ^ 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*} Az = As 1 c 1 + ... + As r c r = c 1 G n t ^ 1 + ⋯ + c r G n t ^ r . 第四个等式验证了PCS的外层承诺。
这个证明可以进一步使用 Labrador 的递归证明来优化证明尺寸,通过把 (1) 中的等式改写成 Labrador 证明的标准形式,具体细节请参考Greyhound文档。
5. 使用 R q \mathcal{R}_q R q 证明 F q \mathbb{F}_q F q 上的多项式求值 ¶ 在之前的介绍中,我们忽略了一个重要的问题:就是所有的运算与证明都是在 R q \mathcal{R}_q R q 上执行的,而大部分实际应用都是用F q \mathbb{F}_q F q 上的多项式。本节讨论如何将 F q \mathbb{F}_q F q 上的多项式等价表示为 R q \mathcal{R}_q R q 上的多项式,进而使用前几节的证明方法。
从 F q \mathbb{F}_q F q 到 R q \mathcal{R}_q R q 的转化需要把 F q \mathbb{F}_q F q 上的向量通过系数填充填充到 R q \mathcal{R}_q R q 上,然后利用 R q \mathcal{R}_q R q 上的运算表示 F q \mathbb{F}_q F q 上的运算。
定义一种自同构映射 σ : R q → R q \sigma: \mathcal{R}_q \to \mathcal{R}_q σ : R q → R q ,该映射把 R q \mathcal{R}_q R q 上的元素映射到负幂次,σ X = X − 1 \sigma{X} = X^{-1} σ X = X − 1 . 例如,a = a 0 + ∑ i = 1 d − 1 a i X i ∈ R q a = a_0 + \sum_{i=1}^{d-1} a_i X^i \in \mathcal{R}_q a = a 0 + ∑ i = 1 d − 1 a i X i ∈ R q ,那么 σ ( a ) = a 0 + ∑ i = 1 d − 1 a i X − i ∈ R q \sigma(a) = a_0 +\sum_{i=1}^{d-1} a_i X^{-i} \in \mathcal{R}_q σ ( a ) = a 0 + ∑ i = 1 d − 1 a i X − i ∈ R q .
在 R q \mathcal{R}_q R q 上,a σ a a\sigma{a} aσ a 的常数项为:a 0 a 0 + ∑ i = 1 d − 1 a i a i = ∑ i = 0 d − 1 a i a i c a_0 a_0 + \sum_{i=1}^{d-1} a_i a_i = \sum_{i=0}^{d-1} a_i a_ic a 0 a 0 + ∑ i = 1 d − 1 a i a i = ∑ i = 0 d − 1 a i a i c ,即 a a a 中的项 与 σ ( a ) \sigma(a) σ ( a ) 中的项乘积不包含X X X 的所有项求和。
先明确以下符号:F q \mathbb{F}_q F q 上的多项式记为 F ( U ) = ∑ i = 0 N ′ − 1 F i U i = V ∈ F q F(U) = \sum_{i=0}^{N'-1} F_i U^i = V \in \mathbb{F}_q F ( U ) = ∑ i = 0 N ′ − 1 F i U i = V ∈ F q , R q \mathcal{R}_q R q 上的多项式记为 f ( x ) = ∑ i = 0 N − 1 f i x i = y ∈ R q f(x) = \sum_{i=0}^{N-1} f_i x^i = y \in \mathcal{R}_q f ( x ) = ∑ i = 0 N − 1 f i x i = y ∈ R q ,我们用f f f 表示F F F 通过系数填充到R q \mathcal{R}_q R q 上的多项式。 为了区分,我们用 N − 1 N-1 N − 1 表示 f f f 的多项式次数,N ′ − 1 N'-1 N ′ − 1 表示 F F F 的次数。经过系数填充后,N N N 与 N ′ N' N ′ 是不相等的。
当 N ′ ≤ d N' \leq d N ′ ≤ d 时, 不失一般性地,我们讨论 N ′ = d N'=d N ′ = d ,当 N ′ < d N' < d N ′ < d 时,我们可以通过对 F F F 填充 0 让 N ′ = d N'=d N ′ = d 成立。此时只需要一个R q \mathcal{R}_q R q 上的元素就可以存储 F F F 的所有系数,因此 N = 1 N = 1 N = 1 。 我们定义F F F 系数填充后的求值式为 f ( x ) = f 0 σ ( x ) f(x) = f_0 \sigma(x) f ( x ) = f 0 σ ( x ) .
这里的 f 0 = ∑ i = 0 d − 1 F i X i ∈ R q f_0 = \sum_{i=0}^{d-1} F_i X^i \in \mathcal{R}_q f 0 = ∑ i = 0 d − 1 F i X i ∈ R q 是F F F 的所有系数( F 0 , . . . , F N ′ − 1 ) (F_0, ..., F_{N'-1}) ( F 0 , ... , F N ′ − 1 ) 通过系数填充得到的,σ ( x ) \sigma(x) σ ( x ) 是 F F F 的求值点 U U U 的所有幂次 ( 1 , U , . . . , U N ′ − 1 ) (1, U, ..., U^{N'-1}) ( 1 , U , ... , U N ′ − 1 ) ,先通过系数填充到x = ∑ i = 0 d − 1 U i X i ∈ R q x = \sum_{i=0}^{d-1} U^i X^i\in \mathcal{R}_q x = ∑ i = 0 d − 1 U i X i ∈ R q ,再做 σ \sigma σ 映射得到的, σ ( x ) = 1 + ∑ i = 1 d − 1 U i X i ∈ R q \sigma(x) = 1+ \sum_{i=1}^{d-1} U^i X^i \in \mathcal{R}_q σ ( x ) = 1 + ∑ i = 1 d − 1 U i X i ∈ R q 。
需要再次提醒的是,此处的 X X X 是R q \mathcal{R}_q R q 中的符号,没有实际意义。
那么,利用上面讨论的 σ \sigma σ 映射,f ( x ) = f 1 σ ( x ) f(x) = f_1 \sigma(x) f ( x ) = f 1 σ ( x ) 的常数项为
∑ i = 0 N ′ − 1 F i U i = V . \sum_{i=0}^{N'-1} F_i U^{i} = V. i = 0 ∑ N ′ − 1 F i U i = V . 这意味着,一个Greyhound的验证者可以通过检查 f ( x ) f(x) f ( x ) 的常数项是否为 V V V 来检查F ( U ) = V F(U) = V F ( U ) = V 是否成立。
当 N ′ > d N' > d N ′ > d 时,我们讨论 N ′ = N d N' = Nd N ′ = N d . 此时,F F F 的系数 ( F 0 , . . . , F N ′ − 1 ) (F_0, ..., F_{N'-1}) ( F 0 , ... , F N ′ − 1 ) 会填充到 N N N 个 R q \mathcal{R}_q R q 上的元素 f 0 , f 1 . . . , f N − 1 ∈ R q f_0, f_1 ..., f_{N-1} \in \mathcal{R}_q f 0 , f 1 ... , f N − 1 ∈ R q ,但是多项式f ( x ) f(x) f ( x ) 的运算方法与 N ′ = d N'=d N ′ = d 时是类似的。 我们只需要把 F F F 的系数依次填充到 ( f 0 , f 1 . . . , f N − 1 ) (f_0, f_1 ..., f_{N-1}) ( f 0 , f 1 ... , f N − 1 ) , 再把 ( 1 , U , . . . , U N ′ − 1 ) (1, U, ..., U^{N'-1}) ( 1 , U , ... , U N ′ − 1 ) 依次填充到 x 1 , x 2 , . . . , x N ∈ R q x_1, x_2, ..., x_N \in \mathcal{R}_q x 1 , x 2 , ... , x N ∈ R q , 然后定义
f ( x ) = ∑ i = 0 N f i x i . f(x) = \sum_{i=0}^{N} f_i x_i. f ( x ) = i = 0 ∑ N f i x i . 那么,f ( x ) f(x) f ( x ) 中 f i f_i f i 与 x i x_i x i 的乘法运算会分段地将∑ j = 0 d F i d + j U i d + j \sum_{j=0}^{d} F_{id+j}{U^{id+j}} ∑ j = 0 d F i d + j U i d + j 保存在 f i x i f_i x_i f i x i 的常数项中,这与先前的讨论类似。
由于 R q \mathcal{R}_q R q 上的加法运算是对应系数相加,那么外层从 i = 0 i=0 i = 0 到 N N N 的加法运算 ∑ i = 0 N − 1 f i x i \sum_{i=0}^{N-1} f_i x_i ∑ i = 0 N − 1 f i x i ,会把各个常数项中的 ∑ j = 0 d F i d + j U i d + j \sum_{j=0}^{d} F_{id+j}{U^{id+j}} ∑ j = 0 d F i d + j U i d + j 进一步合并起来,即 f ( x ) f(x) f ( x ) 的常数项为
∑ i = 0 N − 1 ∑ j = 0 d F i d + j U i d + j = ∑ i = 0 N ′ − 1 F i U i = 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. i = 0 ∑ N − 1 j = 0 ∑ d F i d + j U i d + j = i = 0 ∑ N ′ − 1 F i U i = V . 现在,我们已经可以使用greyhound对任意的 F q \mathbb{F}_q F q 上的多项式做承诺,以及证明它们的evaluations了,感谢阅读致此。
参考文献
[1] Ngoc Khanh Nguyen, Gregor Seiler: Greyhound: Fast Polynomial Commitments from Lattices. CRYPTO (10) 2024: 243-275.