FHE之NTT()NWC NTT与PWC NTT

PWC NTT与NWC NTT

NTT在不同多项式环的不同版本

常规有限域上的多项式相乘

Ring:Zq[x]Z_q [x]

对于多项式 aZq[x],bZq[x],a=[a0,a1,,a(n1)],b=[b0,b1,,b(n1)]\mathbf a∈Z_q [x],\mathbf b∈Z_q [x], \mathbf a=[a_0,a_1, ⋯,a_{(n-1)} ],\mathbf b=[b_0,b_1, ⋯,b_{(n-1)} ]

cZq[x],c=ab\mathbf c∈Z_q [x], \mathbf c=\mathbf a∙\mathbf b, 那么

INTT2N(NTT2N( zeropadding (a))NTT2N( zeropadding (b)))(1)\operatorname{INTT}_{2 N}\left(\operatorname{NTT}_{2 N}(\text { zeropadding }(\boldsymbol{a})) \odot \operatorname{NTT}_{2 N}(\text { zeropadding }(\boldsymbol{b}))\right) \tag{1}

多项式环一:Positive Wrapped Convolution

Ring:Zq[x]xn1\frac{Z_q [x]}{x^n-1}

对于多项式 a(Zq[x])((xn1)),b(Zq[x])((xn1)),a=[a0,a1,,a(n1)],b=[b0,b1,,b(n1)]\mathbf{a}∈(Z_q [x])⁄((x^n-1)),\mathbf{b}∈(Z_q [x])⁄((x^n-1)), \mathbf{a}=[a_0,a_1, ⋯,a_{(n-1)} ],\mathbf{b}=[b_0,b_1, ⋯,b_{(n-1)} ]

cZq[x]xn1\mathbf c∈\frac{Z_q [x]}{x^n-1}, c=ab\mathbf c=\mathbf a∙\mathbf b, 那么

c=INTTN(NTTN(a)NTTN(b))(2)\boldsymbol{c}=\operatorname{INTT}_{N}\left(\operatorname{NTT}_{N}(\boldsymbol{a}) \odot \operatorname{NTT}_{N}(\boldsymbol{b})\right) \tag{2}

多项式环二:Negative Wrapped Convolution

Ring:Zq[x]xn+1\frac{Z_q [x]}{x^n+1}

对于多项式 a(Zq[x])((xn+1)),b(Zq[x])((xn+1)),a=[a0,a1,,a(n1)],b=[b0,b1,,b(n1)]\mathbf a∈(Z_q [x])⁄((x^n+1)),\mathbf b∈(Z_q [x])⁄((x^n+1)), \mathbf a=[a_0,a_1, ⋯,a_(n-1) ],\mathbf b=[b_0,b_1, ⋯,b_(n-1) ]

cZq[x]xn+1\mathbf c∈\frac{Z_q [x]}{x^n+1}, c=ab\mathbf c=\mathbf a∙\mathbf b, 那么令 γ2N=ωN12=gq12N\gamma_{2N}=\omega_{N}^{\frac{1}{2}}=g^{\frac{q-1}{2N}}

c=INTT(NTT(a)NTTN(b))(3)\overline{\boldsymbol{c}}=\operatorname{INTT}\left(\operatorname{NTT}(\overline{\boldsymbol{a}}) \odot \operatorname{NTT}_{N}(\overline{\boldsymbol{b}})\right) 。 \tag{3}

a=[γ2N0,γ2N1,,γ2NN1]a,b=[γ2N0,γ2N1,,γ2NN1]bc=[γ2N0,γ2N1,,γ2NN1]c\overline{\mathbf a}=[γ_{2N}^0,γ_{2N}^1,⋯,γ_{2N}^{N-1}]⊙\mathbf a,\\\overline{\mathbf b}=[γ_{2N}^0,γ_{2N}^1,⋯,γ_{2N}^{N-1}]⊙\mathbf b\\\overline{\mathbf c}=[γ_{2N}^0,γ_{2N}^1,⋯,γ_{2N}^{N-1}]⊙\mathbf c

分析

传统NTT计算多项式,多项式取自Zq[x]Z_q[x],可以表示为:

INTT2N(NTT2N( zeropadding (a))NTT2N( zeropadding (b)))(1)\operatorname{INTT}_{2 N}\left(\operatorname{NTT}_{2 N}(\text { zeropadding }(\boldsymbol{a})) \odot \operatorname{NTT}_{2 N}(\text { zeropadding }(\boldsymbol{b}))\right) \tag{1}

其中符号 \odot 表示逐点乘法,函数 zeropadding(a)zeropadding (\boldsymbol{a}) 将向量a\boldsymbol{a}的长度从NN扩展到2N2 N,末尾用零填充。可以看到,这种方式需要执行2N2N的NTT,十分浪费资源。

我们其实可以让多项式取自Zq[x]/(xN1)\mathbb{Z}_{q}[x] /(x^N-1),当NN大于多项式的最高次数时,约化多项式xN1x^N-1这一步并不需要进行。但此时我们可以使用正向循环卷积(Positive Wrapped Convolution,PWC)高效地执行 Zq[x]/(xN1)\mathbb{Z}_{q}[x] /(x^N-1) 上的乘法,这只需要3个NN点的NTT/INTT,而不需要像(1)(1)那样将NTT/INTT的大小加倍。

c=INTTN(NTTN(a)NTTN(b))(2)\boldsymbol{c}=\operatorname{INTT}_{N}\left(\operatorname{NTT}_{N}(\boldsymbol{a}) \odot \operatorname{NTT}_{N}(\boldsymbol{b})\right) \tag{2}

g(x)g(x)xN1x^{N}-1 更改为另一种特定形式 xN+1x^{N}+1 时,可以使用负向循环卷积(Negative Wrapped Convolution, NWC)在 Zq[x]/xN+1\mathbb{Z}_{q}[x] /\left\langle x^{N}+1\right\rangle 上执行乘法,仍然只需要三个 NN 点的NTT/INTT,而无且需像 Zq[x]/xN1\mathbb{Z}_{q}[x] /\left\langle x^{N}-1\right\rangle 上的乘法那样显式约化。

注:NWC“无需显式约化”的性质可能与“分圆多项式”有关,这点我暂未研究。

NWC方法要求质数 qq 满足 q1(mod2N)q \equiv 1(\bmod 2 N),从而 ωN\omega_{N} 及其平方根 γ2N\gamma_{2 N}存在。然而,此方法额外引入了一步旋转,需要在NTT之前预处理,在INTT之后附加后处理,如下所述。令 aˉi=aiγ2Ni\bar{a}_{i}=a_{i} \gamma_{2 N}^{i}bˉi=biγ2Ni\bar{b}_{i}=b_{i} \gamma_{2 N}^{i}cˉi=ciγ2Ni\bar{c}_{i}=c_{i} \gamma_{2 N}^{i}。为了在 Zq[x]/xN+1\mathbb{Z}_{q}[x] /\left\langle x^{N}+1\right\rangle 上计算 c=ab\boldsymbol{c}=\boldsymbol{a} \cdot \boldsymbol{b},进行NWC如下:

c=INTT(NTT(a)NTTN(b))(3)\overline{\boldsymbol{c}}=\operatorname{INTT}\left(\operatorname{NTT}(\overline{\boldsymbol{a}}) \odot \operatorname{NTT}_{N}(\overline{\boldsymbol{b}})\right) 。 \tag{3}

通过这种方式,在缩放向量 a\overline{\boldsymbol{a}}b\overline{\boldsymbol{b}} 上执行经典的 NN 点的NTT,经典的 NN点的INTT后,得到缩放向量cˉ\bar{c},通过计算 ci=cˉiγ2Nic_{i}=\bar{c}_{i} \gamma_{2 N}^{-i} 可以得到最终结果 cc。因此,NWC方法避免了将NTT/INTT的大小加倍和显式约化,但它要求在NTT之前将系数缩放为 γ2Ni\gamma_{2 N}^{i},在INTT之后将结果缩放为 γ2Ni\gamma_{2 N}^{-i}

比较

我们以N=8N=8为例,看看各个版本的NTT的参数有哪些规律

PWC NTT(DIF)

image-20240414172125199

PWC INTT(DIT)

image-20240414172136236

NWC NTT(DIT)

image-20240414173411522

NWC INTT(DIF)

image-20240414174354328

注意

同为NTT,PWC一般采用DIF,NWC一般采用DIT;同为INTT,PWC一般采用DIT,NWC一般采用DIF。

实际上我认为PWC采用DIT还是DIF无所谓,而NWC则必须按以上方法采样,这主要是由于γ\gamma的限制:

  • NWC NTT需要对输入预处理:aˉi=aiγ2Ni\bar{a}_{i}=a_{i} \gamma_{2 N}^{i}bˉi=biγ2Ni\bar{b}_{i}=b_{i} \gamma_{2 N}^{i},因此只能采用DIT。
  • NWC INTT则需要对输出后处理:cˉi=ciγ2Ni\bar{c}_{i}=c_{i} \gamma_{2 N}^{i},因此只能采用DIF。

归纳

at the ii-th stage for NN-point NTT PWC NTT(DIF) NWC NTT(DIT) PWC INTT(DIT) NWC INTT(DIF)
num_stages (number of stages) logNlogN logNlogN logNlogN logNlogN
bf_pairs (number of pairs in a group) 2logN12^{logN-1} 2logN12^{logN-1} 2i2^i 2i2^i
bf_groups (number of groups at a stage) 2i2^i 2i2^i 2logN12^{logN-1} 2logN12^{logN-1}
the power of ω\omega 同一group内以2i2^i沿pair递增
不同group对应位置相同
同一group内相同
同一stage内第jj个group的power为N2\frac{N}{2}jj的位逆序
同group内以2i2^i沿pair递增
不同group对应位置相同
同一group内相同
同一stage内第jj个group的power为N2\frac{N}{2}jj的位逆序
the power of γ\gamma ~ ~ 2i2^i 2i2^i
index_stride (the index stride within the pair) bf_pairs bf_pairs bf_pairs bf_pairs