参考文献:
Hash-and-Sign 范式:令 f f f 是一个公开的 trapdoor OWF,签名者持有其陷门 t t t。我么用 H H H 表示随机神谕(Random Oracle)。给定消息 m m m,签名者访问 RO 获得随机数 d = H ( m ) d=H(m) d=H(m),令签名值为 s = f − 1 ( d ) s=f^{-1}(d) s=f−1(d)。验证者计算 d = f ( s ) d = f(s) d=f(s),判断它是否等于 H ( m ) H(m) H(m)。出于安全归约的需要,有时需要引入随机盐 r r r 以及随机带 r d rd rd,签名值的计算变为 s = f − 1 ( H ( m ∥ r ) ; r d ) s=f^{-1}(H(m\|r);rd) s=f−1(H(m∥r);rd)。
基于格上陷门的签名方案最早是在 [GGH97] 中描述:由满秩矩阵 A ∈ Z q n × m A \in \mathbb Z_q^{n \times m} A∈Zqn×m(行矢, m > n m > n m>n)定义的垂直格 Λ q ⊥ = { x ∈ Z m : A x = 0 ( m o d q ) } \Lambda_q^\perp = \{x \in \mathbb Z^m:Ax = 0 \pmod q\} Λq⊥={x∈Zm:Ax=0(modq)},假设 B ∈ Z q m × m B \in \mathbb Z_q^{m \times m} B∈Zqm×m 是格 Λ q ⊥ \Lambda_q^\perp Λq⊥ 的一组 “好” 的基底, B A T = 0 BA^T=0 BAT=0。令 c ∈ Z q m c \in \mathbb Z_q^{m} c∈Zqm 是实向量,通过求解线性方程组 c A T = H ( m ) ( m o d q ) cA^T = H(m) \pmod q cAT=H(m)(modq) 得到。那么根据 [Babai86] 的 Round-off 算法, v = ⌊ c B − 1 ⌉ B v = \lfloor cB^{-1} \rceil B v=⌊cB−1⌉B 就是接近 c c c 的一个 Λ q ⊥ \Lambda_q^\perp Λq⊥ 上格点,计算短向量 s = c − v s=c-v s=c−v 作为签名值,容易验证 s A T = c A T = H ( m ) sA^T = cA^T = H(m) sAT=cAT=H(m)。由于函数 f ( c ) : = c A T f(c) := cA^T f(c):=cAT 基于 SIS 问题,它的定义域是短向量 c c c 的收集,因此验签者首先需要检查 s s s 的长度。然而 Round-off 算法的输出满足 v − c ∈ P ( B ) v-c \in \mathcal P(B) v−c∈P(B),因此签名值 s s s 泄露了 P ( B ) \mathcal P(B) P(B) 的形状。
[Babai86] 描述的另一个 Nearest Plane 算法,其输出满足 v − c ∈ P ( B ~ ) v-c \in \mathcal P(\tilde B) v−c∈P(B~),这里 B ~ \tilde B B~ 是 Gram-Schmidt 正交基,因此它也一样会泄露私钥 B B B 的信息。[Klein00] 提出了 NP 算法的一个随机化变体,在 [GPV08] 中对这个算法进行了详细分析,指出当高斯参数满足 s ≥ η ϵ ( Z ) ⋅ ∥ B ∥ G S s \ge \eta_\epsilon(\mathbb Z) \cdot \|B\|_{GS} s≥ηϵ(Z)⋅∥B∥GS 时,Klein 采样算法的输出分布与 D Λ q ⊥ , s , c D_{\Lambda_q^\perp,s,c} DΛq⊥,s,c 统计接近,因此在计算困难的意义下它不会泄露私钥的信息。[GPV08] 给出了 PSF(Preimage Sampleable Functions)的定义,并将 Klein 算法作为基于 SIS 问题的 PSF 实例化。[GPV08] 使用 Klein 算法,按照中心 c c c 的球面高斯分布采样 Λ q ⊥ \Lambda_q^\perp Λq⊥ 上格点 v ← D Λ q ⊥ , s , c v \leftarrow D_{\Lambda_q^\perp,s,c} v←DΛq⊥,s,c,那么签名值 s = c − v s=c-v s=c−v 是服从离散高斯分布 D c + Λ q ⊥ , s , 0 D_{c+\Lambda_q^\perp,s,0} Dc+Λq⊥,s,0 的短向量,这不会泄露私钥 B B B 的信息。这就给出了第一个可证明安全的基于格上陷门的签名算法,其签名算法的复杂度主要依赖于 PSF 中的陷门原像采样算法的复杂度。
Klein 算法的复杂度是 O ( m 2 ) O(m^2) O(m2),对于实际密码算法中成百上千的维度这个平方量级的复杂度是不可接受的。实用化的格密码算法基本都通过引入代数结构(例如 RSIS, RLWE, MLWE 等等),来追求安全性和计算/通信效率之间的平衡。[DP16] 研究了理想格上的正交分解算法,通过构造一组数域塔上的线性同构,可以预计算基底 B B B 的稀疏分解树,它提供了 FFT 域下多项式运算与 NP 算法的兼容性,将复杂度降低到了 O ( m log m ) O(m \log m) O(mlogm)。[SS11] 基于 [GPV08] 介绍的 PSF,第一次构造出了可证明安全的 NTRU 签名方案。由于 NTRU 问题可以视为特殊的 RSIS 问题,因此它可以使用 [DP16] 的陷门采样器,利用 FFT 来加速签名过程。
陷门采样器中的一个关键组件是离散高斯采样器,更精确地说是整数环 Z \mathbb Z Z 上的一维离散高斯采样器。[BLISS] 中对于标准差为 σ 0 = 1 / ( 2 ln 2 ) \sigma_0=\sqrt{1/(2\ln2)} σ0=1/(2ln2) 的半高斯分布 D σ 0 + D_{\sigma_0}^+ Dσ0+ 提出了高效的二进制采样算法(观察到 e − t / 2 σ 0 2 = 2 − t e^{-t/2\sigma_0^2} = 2^{-t} e−t/2σ02=2−t),再通过拒绝采样算法裁剪出离散高斯分布 D k σ 0 , ∀ k ∈ Z + D_{k\sigma_0},\forall k \in \mathbb Z^+ Dkσ0,∀k∈Z+。在 [ZS20] 中使用卷积定理和超越函数的多项式逼近技术,用多项式来模拟指数函数 2 − t , t ∈ [ 0 , ln 2 ] 2^{-t},t \in [0,\ln2] 2−t,t∈[0,ln2],获得了更快更紧凑的高斯采样器。
定义参数 s > 0 s>0 s>0 的高斯函数为 ρ s , c ( x ) : = e x p ( − π ∥ x − c ∥ 2 / s 2 ) \rho_{s,c}(x) := exp(-\pi\|x-c\|^2/s^2) ρs,c(x):=exp(−π∥x−c∥2/s2),格 Λ \Lambda Λ 上以 c c c 为中心的离散高斯分布为
D Λ , s , c ( x ) : = ρ s , c ( x ) ρ s , c ( Λ ) D_{\Lambda,s,c}(x) := \dfrac{\rho_{s,c}(x)}{\rho_{s,c}(\Lambda)} DΛ,s,c(x):=ρs,c(Λ)ρs,c(x)
给定 ϵ > 0 \epsilon>0 ϵ>0,平滑参数 η ϵ ( Λ ) \eta_\epsilon(\Lambda) ηϵ(Λ) 定义为满足 ρ 1 / s ( Λ ∗ − { 0 } ) ≤ ϵ \rho_{1/s}(\Lambda^*-\{0\}) \le \epsilon ρ1/s(Λ∗−{0})≤ϵ 的最小实数。对于任意的 ϵ ∈ ( 0 , 1 ) \epsilon \in (0,1) ϵ∈(0,1), c ∈ R n c \in \mathbb R^n c∈Rn,如果 s ≥ η ϵ ( Λ ) s \ge \eta_\epsilon(\Lambda) s≥ηϵ(Λ),那么
1 − ϵ 1 + ϵ ⋅ ρ s ( Λ ) ≤ ρ s , c ( Λ ) ≤ ρ s ( Λ ) \frac{1-\epsilon}{1+\epsilon} \cdot \rho_s(\Lambda) \le \rho_{s,c}(\Lambda) \le \rho_s(\Lambda) 1+ϵ1−ϵ⋅ρs(Λ)≤ρs,c(Λ)≤ρs(Λ)
非齐次 SIS 问题(ISIS)定义为:给定素数 q q q 和实数 β \beta β,均匀选取矩阵 A ∈ Z q n × m A \in \mathbb Z_q^{n \times m} A∈Zqn×m(列矢, m < n m
定理 1([Ajtai99])给定素数 q = p o l y ( n ) q=poly(n) q=poly(n) 以及 m ≥ 5 n log q m \ge 5n\log q m≥5nlogq,存在 PPT 算法,输出 A ∈ Z q n × m A \in \mathbb Z_q^{n \times m} A∈Zqn×m 以及满秩向量组 S ⊆ Λ q ⊥ ( A ) S \subseteq \Lambda_q^\perp(A) S⊆Λq⊥(A)(不一定是格基),使得 A A A 是统计均匀的,并且满足 ∥ S ∥ ≤ m 2.5 \|S\| \le m^{2.5} ∥S∥≤m2.5。
定理 2([MG02])存在确定性多项式时间算法,给定格 Λ \Lambda Λ 的一组基 B B B(列矢)以及满秩向量组 S ⊆ Λ S \subseteq \Lambda S⊆Λ,输出新的格基 T T T,满足 ∥ t ~ i ∥ ≤ ∥ s ~ i ∥ , ∀ i ∈ [ n ] \|\tilde t_i\| \le \|\tilde s_i\|,\forall i \in [n] ∥t~i∥≤∥s~i∥,∀i∈[n]。确切地说,求解 S = B Q S=BQ S=BQ 得到 Q Q Q,找出使得 U Q UQ UQ 是上三角阵的幺正变换 U U U ,那么 T = B U − 1 T=BU^{-1} T=BU−1 就是满足上述条件的一组格基。
定理 3([GPV08])存在一个期望 PPT 的算法(Klein 算法),给定 n n n 维格 Λ \Lambda Λ 的一组基 B B B,中心 c ∈ R n c \in \mathbb R^n c∈Rn,以及满足 s ≥ ∥ B ∥ G S ⋅ w ( log n ) s \ge \|B\|_{GS} \cdot w(\sqrt{\log n}) s≥∥B∥GS⋅w(logn) 的高斯参数(其中 w ( log n ) ≥ η ϵ ( Z ) w(\sqrt{\log n}) \ge \eta_\epsilon(\mathbb Z) w(logn)≥ηϵ(Z)),它的输出分布与离散高斯分布 D Λ , s , c D_{\Lambda,s,c} DΛ,s,c 的统计距离至多为 ( ( 1 + ϵ 1 − ϵ ) n − 1 ) / 2 ((\frac{1+\epsilon}{1-\epsilon})^n-1)/2 ((1−ϵ1+ϵ)n−1)/2。
[GPV08] 中提出了原像采样函数(PSFs),它是一组 PPT 算法 ( T r a p G e n , S a m p l e D o m , S a m p l e P r e ) (TrapGen, SampleDom, SamplePre) (TrapGen,SampleDom,SamplePre):
如果对于随机选取的 a a a 和 y ∈ R n y \in R_n y∈Rn,任意的 PPT 敌手 A A A 都无法以显著概率求出原像 f a − 1 ( y ) ∈ D n f_a^{-1}(y) \in D_n fa−1(y)∈Dn,那么我们称它是一族单向 PSFs。如果任意的 y ∈ R n y \in R_n y∈Rn,使得条件 f a ( x ) = y f_a(x)=y fa(x)=y 下 x x x 的最小熵至少为 w ( log n ) w(\log n) w(logn),且 f a f_a fa 是抗碰撞函数,那么我们称它是一族抗碰撞 PSFs。
现在,我们给出 PSF 的一个实例化。根据定理 1 和定理 2,我们可以生成 A ∈ Z q n × m , T ⊆ Λ q ⊥ ( A ) A \in \mathbb Z_q^{n \times m}, T \subseteq \Lambda_q^\perp(A) A∈Zqn×m,T⊆Λq⊥(A),其中 A A A 是格 Λ q ⊥ ( A ) \Lambda_q^\perp(A) Λq⊥(A) 的描述, T T T 是它的一组短格基,满足 ∥ T ∥ G S ≤ m 2.5 \|T\|_{GS} \le m^{2.5} ∥T∥GS≤m2.5。定义 f A ( x ) : = A x ( m o d q ) f_A(x):=Ax \pmod q fA(x):=Ax(modq),选取 s ≥ m 2.5 ⋅ w ( log m ) s \ge m^{2.5} \cdot w(\sqrt{\log m}) s≥m2.5⋅w(logm),它的定义域为 D n : = { x ∈ Z m : ∥ x ∥ ≤ s m } D_n :=\{x \in \mathbb Z^m: \|x\| \le s\sqrt{m}\} Dn:={x∈Zm:∥x∥≤sm},输入分布为 D Z m , s D_{\mathbb Z^m,s} DZm,s,值域为 R n : = Z q n R_n:=\mathbb Z_q^n Rn:=Zqn,而 T T T 是它的陷门。它的陷门采样算法为:给定 y ∈ R n y \in R_n y∈Rn,首先求解线性方程组 A t = y ( m o d q ) At=y \pmod q At=y(modq) 获得 t ∈ Z m t \in \mathbb Z^m t∈Zm(不一定属于 D n D_n Dn),然后根据定理 3,我们可以使用陷门 T T T 按照 D Λ q ⊥ ( A ) , s , t D_{\Lambda_q^\perp(A),s,t} DΛq⊥(A),s,t 采样某个格点 v v v,这使得 x = t − v x=t-v x=t−v 是服从 D t + Λ q ⊥ ( A ) , s D_{t+\Lambda_q^\perp(A),s} Dt+Λq⊥(A),s 的原像。
定理4([GPV08])如果 I S I S q , m , s m ISIS_{q,m,s\sqrt{m}} ISISq,m,sm 是困难的,则上述构造是一族单向 PSFs。如果 I S I S q , m , 2 s m ISIS_{q,m,2s\sqrt{m}} ISISq,m,2sm 是困难的,则上述构造是一族抗碰撞 PSFs。
下面我们描述 [GPV08] 的 PSFs 最关键的部分,[Klein00] 的随机化 NP 算法。如果给定格基 B B B,对于远大于 ∥ B ∥ G S \|B\|_{GS} ∥B∥GS 的高斯参数 s s s,直接从连续高斯分布中采样,然后舍入到最近格点上,可以获得较好的近似。然而,对于略大于 ∥ B ∥ G S \|B\|_{GS} ∥B∥GS 的那些高斯参数 s s s,上述舍入策略获得的输出分布将与目标离散高斯分布有着显著的统计距离。首先利用拒绝采样技术(rejection sampling),直接在整数格 Z \mathbb Z Z 上进行离散高斯采样,然后再利用 Babai 的 NP 算法合成出任意格上的离散高斯分布。
定理 5([GPV08])对于任意的 ϵ > 0 \epsilon>0 ϵ>0, s ≥ η ϵ ( Z ) s \ge \eta_\epsilon(\mathbb Z) s≥ηϵ(Z),给定任意的 t > 0 t>0 t>0,都有
P r [ ∣ x − c ∣ ≥ t ⋅ s : x ← D Z , s , c ] ≤ 2 e − π t 2 ⋅ 1 + ϵ 1 − ϵ Pr\left[|x-c| \ge t \cdot s: x \leftarrow D_{\mathbb Z,s,c}\right] \le 2e^{-\pi t^2} \cdot \dfrac{1+\epsilon}{1-\epsilon} Pr[∣x−c∣≥t⋅s:x←DZ,s,c]≤2e−πt2⋅1−ϵ1+ϵ
对于整数格 Z \mathbb Z Z 上中心 c ∈ R c \in \mathbb R c∈R 参数 s > 0 s>0 s>0 的离散高斯分布 D Z , s , c D_{\mathbb Z,s,c} DZ,s,c,选取高斯截尾(tailcut)界 t ( n ) = log n ≥ w ( log n ) t(n)=\log n\ge w(\sqrt{\log n}) t(n)=logn≥w(logn),采样算法 S a m p l e Z ( c , s ) Sample\mathbb Z(c,s) SampleZ(c,s) 的执行步骤如下:
根据定理 5,选取 t ( n ) ≥ w ( log n ) t(n) \ge w(\sqrt{\log n}) t(n)≥w(logn),这使得高斯尾部的累计密度是可忽略的,因此 S a m p l e Z ( c , s ) Sample\mathbb Z(c,s) SampleZ(c,s) 的输出分布与 D Z , s , c D_{\mathbb Z,s,c} DZ,s,c 的统计距离可忽略。接下来,我们将若干的 D Z , s i , c i D_{\mathbb Z,s_i,c_i} DZ,si,ci 组合成任意格 Λ \Lambda Λ 上的离散高斯分布,实际上就是随机化的 NP 算法。
对于任意格 Λ \Lambda Λ,给定格基 B ∈ R n × n B \in \mathbb R^{n \times n} B∈Rn×n,中心 c ∈ R n c \in \mathbb R^n c∈Rn 参数 s > 0 s>0 s>0 的离散高斯分布 D Λ , s , c D_{\Lambda,s,c} DΛ,s,c,采样算法 S a m p l e D ( B , c , s ) SampleD(B,c,s) SampleD(B,c,s) 的执行步骤如下:
它与 Babai 的 NP 算法唯一的不同之处,就是组合系数 z i z_i zi 是按照离散高斯分布采样得到的,而非直接舍入到最近整数。[GPV08] 对上述的 Klein 随机化 NP 算法进行了细致的分析:给定格 Λ \Lambda Λ 的一组格基 B B B,对于任意的满足 s ≥ ∥ B ∥ G S ⋅ w ( log n ) s \ge \|B\|_{GS} \cdot w(\sqrt{\log n}) s≥∥B∥GS⋅w(logn) 的高斯参数, S a m p l e D ( B , c , s ) SampleD(B,c,s) SampleD(B,c,s) 的输出分布与离散高斯分布 D Λ , s , c D_{\Lambda,s,c} DΛ,s,c 的统计距离可忽略。
在上一小节的 PSF 实例化中,陷门 T T T 和高斯参数 s s s 满足这个不等式,因此陷门采样的输出分布与陪集 t + Λ q ⊥ ( A ) t+\Lambda_q^\perp(A) t+Λq⊥(A) 上的离散高斯分布计算不可区分,这不会泄露陷门 T T T 的信息。因此将这个基于 ISIS 问题的 PSF 应用到 Hash-and-Sign 签名算法中,其签名值不会泄露私钥的信息,这就导致了可证明安全的格签名方案。如果高斯参数 s s s 选择的过小,那么采样算法的输出结果将会泄露陷门的信息(极端地选取 s = 0 s=0 s=0,则它退化为 Babai 的确定性 NP 算法)。但是如果 s s s 选取的过大,那么 f A f_A fA 的定义域 D n D_n Dn 将会有一个较大的范围,则敌手可以计算一个不太短的向量 x ∈ Z m x \in \mathbb Z^m x∈Zm 使它满足 A x = H ( m ) ( m o d q ) Ax=H(m) \pmod q Ax=H(m)(modq),这导致伪造签名变得容易。因此我们应当选取合适的高斯参数 s s s,使得私钥恢复是困难的,同时使得签名伪造也是困难的。
现在,我们描述基于 ISIS 问题的 Hash-and-Sign 签名方案。在它的安全归约过程中,要求签名者对于每个像 y y y 只给出至多一个原像。为了获得无状态的随机化签名方案,我们在签名算法中添加随机盐 r r r,确保对于固定的消息 m m m,每次签名中的哈希值 H ( m ∥ r ) H(m\|r) H(m∥r) 不发生碰撞。
假设 I S I S q , m , 2 s m ISIS_{q,m,2s\sqrt{m}} ISISq,m,2sm 是困难的,那么这个 PSF 是抗碰撞的,可证明上述签名方案在 RO 模型下是选择消息攻击下强不可伪造的(SEUF-CMA)。
然而 Klein 陷门采样算法的复杂度是 O ( m 2 ) O(m^2) O(m2),这对于实际密码算法中数百维的格来说是不可接受的,我们更期望密码算法的复杂度拟线性级别的。一种常用的优化技术是在格上引入代数结构,例如环结构,那么空间复杂度从 O ( n 2 ) O(n^2) O(n2) 降低到 O ( n ) O(n) O(n),采用 FFT/NTT 技术可以把时间复杂度从 O ( n 2 ) O(n^2) O(n2) 降低到 O ( n log n ) O(n \log n) O(nlogn)。
然而 NP 算法中用到的 Gram-Schmidt 正交化没有考虑代数结构,它与 FFT 算法不兼容。[DP16] 考虑了环的塔结构,定义塔上的线性映射,将高维格上的最近平面问题分解到若干个低维格上的最近平面问题,然后再把这些低维格的解提升到高维格上。[DP16] 中的原始表述令人费解,下面我们采用了不同的记号和描述方式,试图给出更容易理解的介绍。
考虑多项式环 R d = R [ x ] / ( x d − 1 ) \mathcal R_d=\mathbb R[x]/(x^d-1) Rd=R[x]/(xd−1),假设 d = ∏ i = 1 h p i d=\prod_{i=1}^h p_i d=∏i=1hpi,其中 p i p_i pi 都是素因子。不失一般性的,我们将 p i p_i pi 按照从大到小的顺序排列,令 d i = ∏ j = 1 i p j d_i=\prod_{j=1}^{i} p_j di=∏j=1ipj,那么 1 = d 0 ∣ d 1 ∣ ⋯ ∣ d h = d 1=d_0|d_1|\cdots|d_h=d 1=d0∣d1∣⋯∣dh=d,由它可以诱导出一个塔结构:
R = R [ x ] / ( x d 0 − 1 ) ⊆ R [ x ] / ( x d 1 − 1 ) ⊆ ⋯ ⊆ R [ x ] / ( x d h − 1 ) = R \mathbb R = \mathbb R[x]/(x^{d_0}-1) \subseteq \mathbb R[x]/(x^{d_1}-1) \subseteq \cdots \subseteq \mathbb R[x]/(x^{d_h}-1) = \mathcal R R=R[x]/(xd0−1)⊆R[x]/(xd1−1)⊆⋯⊆R[x]/(xdh−1)=R
简记 k i = ∏ j = i + 1 h p j k_i = \prod_{j=i+1}^h p_j ki=∏j=i+1hpj,其中 k 0 = d , k h = 1 k_0=d,k_h=1 k0=d,kh=1,这个塔对应的环同构链为:
R d = R d 0 k 0 ≅ R d 1 k 1 ≅ ⋯ ≅ R d h k h = R d \mathbb R^d = \mathcal R_{d_0}^{k_0} \cong \mathcal R_{d_1}^{k_1} \cong \cdots \cong \mathcal R_{d_h}^{k_h} = \mathcal R_d Rd=Rd0k0≅Rd1k1≅⋯≅Rdhkh=Rd
令 y = x p i y=x^{p_i} y=xpi,我们定义线性映射 V d i / d i − 1 : R d i → R d i − 1 p i V_{d_{i}/d_{i-1}}: \mathcal R_{d_{i}} \to \mathcal R_{d_{i-1}}^{p_i} Vdi/di−1:Rdi→Rdi−1pi 为:
V d i + 1 / d i ( ∑ j = 0 p i − 1 x j a j ( y ) ) : = ( a 0 ( y ) , ⋯ , a p i − 1 ( y ) ) V_{d_{i+1}/d_{i}}\left(\sum_{j=0}^{p_i-1} x^{j}a_j(y)\right) := (a_0(y),\cdots,a_{p_i-1}(y)) Vdi+1/di(j=0∑pi−1xjaj(y)):=(a0(y),⋯,api−1(y))
假如 p i = 2 p_i=2 pi=2 那么这就是 [CT65] 中的 FFT 算法的一轮递归,按照奇数项和偶数项把数组 a ∈ R d a \in \mathbb R^d a∈Rd 分成 ( a 0 , a 1 ) ∈ R 2 (a_0,a_1) \in \mathbb R^2 (a0,a1)∈R2。对于 d ′ ′ ∣ d ′ ∣ d d''|d'|d d′′∣d′∣d 的情况,我们递归地定义 V d / d ′ ′ = V d ′ / d ′ ′ ∘ V d / d ′ V_{d/d''} = V_{d'/d''} \circ V_{d/d'} Vd/d′′=Vd′/d′′∘Vd/d′,并定义 V 1 / 1 = i d V_{1/1}=id V1/1=id。对于 R d p \mathcal R_{d}^p Rdp 的情况,我们令 V d / d ′ V_{d/d'} Vd/d′ 分别独立地作用于各个分量。
假定 f ( x ) = ∑ i = 0 p − 1 x i f i ( x p ) f(x)=\sum_{i=0}^{p-1}x^if_i(x^p) f(x)=∑i=0p−1xifi(xp),做线性映射 V d / d ′ ( f ) ( x ) = [ f 0 ( x ) , ⋯ , f p − 1 ( x ) ] V_{d/d'}(f)(x)=[f_0(x),\cdots,f_{p-1}(x)] Vd/d′(f)(x)=[f0(x),⋯,fp−1(x)]。我们考虑 f ( x ) f(x) f(x) 的 FFT 域表示:
f ( w k + i d / p ) = ∑ j = 0 p − 1 w ( k + i d / p ) j f j ( w k p ) f(w^{k+id/p}) = \sum_{j=0}^{p-1} w^{(k+id/p)j}f_j(w^{kp}) f(wk+id/p)=j=0∑p−1w(k+id/p)jfj(wkp)
其中 k = 0 , ⋯ , d / p − 1 k=0,\cdots,d/p-1 k=0,⋯,d/p−1, i = 0 , 1 , ⋯ , p − 1 i=0,1,\cdots,p-1 i=0,1,⋯,p−1。由于 w + w 1 + d / p + ⋯ + w 1 + ( p − 1 ) d / p = 0 w+w^{1+d/p}+\cdots+w^{1+(p-1)d/p} = 0 w+w1+d/p+⋯+w1+(p−1)d/p=0,求解上述的线性方程组,得到
f j ( w k p ) = ∑ i = 0 p − 1 [ w − i j d / p ⋅ f ( w k + i d / p ) ] p ⋅ w k j f_j(w^{kp}) = \dfrac{\sum_{i=0}^{p-1} [w^{-ijd/p} \cdot f(w^{k+id/p})]}{p \cdot w^{kj}} fj(wkp)=p⋅wkj∑i=0p−1[w−ijd/p⋅f(wk+id/p)]
其中 w w w 是 d d d 次本原单位根, w p w^p wp 是 d / p d/p d/p 次本原单位根,于是 f j ( w k p ) f_j(w^{kp}) fj(wkp) 就是 f j ( x ) f_j(x) fj(x) 的 FFT 域表示。如果 p = 2 p=2 p=2,那么上述的 FFT 域下的 V d / d ′ V_{d/d'} Vd/d′ 变换恰好是 GS 蝴蝶。也就是说,这个线性映射可以在 FFT 域下快速计算,复杂度为 O ( p d ) O(pd) O(pd)。
实际上线性映射 V d / d ′ : R d → R d ′ p V_{d/d'}: \mathcal R_{d} \to \mathcal R_{d'}^p Vd/d′:Rd→Rd′p,它可以视作 R d \mathcal R_{d} Rd 在 R d ′ \mathcal R_{d'} Rd′ - 基 { 1 , x , ⋯ , x p − 1 } \{1,x,\cdots,x^{p-1}\} {1,x,⋯,xp−1} 下的坐标表示。容易验证
V d / d ′ ( c ( y ) ⋅ f ( x ) ) = c ( y ) ⋅ V d / d ′ ( f ( x ) ) , ∀ f ( x ) ∈ R d , ∀ c ( y ) ∈ R d ′ V_{d/d'}(c(y) \cdot f(x)) = c(y) \cdot V_{d/d'}(f(x)), \forall f(x) \in \mathcal R_{d}, \forall c(y) \in \mathcal R_{d'} Vd/d′(c(y)⋅f(x))=c(y)⋅Vd/d′(f(x)),∀f(x)∈Rd,∀c(y)∈Rd′
所以 V d / d ′ V_{d/d'} Vd/d′ 是一个 R d ′ \mathcal R_{d'} Rd′ - 模同构。对于某固定的 f ∈ R d f \in \mathcal R_{d} f∈Rd,我们考虑自同态(endomorphism) ϕ f : g ∈ R d ↦ g f ∈ R d \phi_f: g \in \mathcal R_{d} \mapsto gf \in \mathcal R_{d} ϕf:g∈Rd↦gf∈Rd,如果 f ( x ) = ∑ i = 0 p − 1 x i f i ( y ) , g ( x ) = ∑ i = 0 p − 1 x i g i ( y ) f(x) = \sum_{i=0}^{p-1}x^if_i(y), g(x) = \sum_{i=0}^{p-1}x^ig_i(y) f(x)=∑i=0p−1xifi(y),g(x)=∑i=0p−1xigi(y),其中 x p = y x^p=y xp=y,那么
( g f ) ( x ) = g 0 ( y ) f 0 ( y ) + x g 0 ( y ) f 1 ( y ) + ⋯ + x p − 1 g 0 ( y ) f p − 1 ( y ) + y g 1 ( y ) f p − 1 ( y ) + x g 1 ( y ) f 0 ( y ) + ⋯ + x p − 1 g 1 ( y ) f p − 2 ( y ) + ⋯ + y g p − 1 ( y ) f 1 ( y ) + x y g p − 1 ( y ) f 2 ( y ) + ⋯ + x p − 1 g p − 1 ( y ) f 0 ( y ) \begin{aligned} (gf)(x) &= g_0(y)f_0(y) + xg_0(y)f_1(y) + \cdots + x^{p-1}g_0(y)f_{p-1}(y)\\ &+ yg_1(y)f_{p-1}(y) + xg_1(y)f_0(y) + \cdots + x^{p-1}g_1(y)f_{p-2}(y) + \cdots\\ &+ yg_{p-1}(y)f_{1}(y) + xyg_{p-1}(y)f_2(y) + \cdots + x^{p-1}g_{p-1}(y)f_{0}(y) \end{aligned} (gf)(x)=g0(y)f0(y)+xg0(y)f1(y)+⋯+xp−1g0(y)fp−1(y)+yg1(y)fp−1(y)+xg1(y)f0(y)+⋯+xp−1g1(y)fp−2(y)+⋯+ygp−1(y)f1(y)+xygp−1(y)f2(y)+⋯+xp−1gp−1(y)f0(y)
在 V d / d ′ V_{d/d'} Vd/d′ 模同构下,自同态 ϕ f \phi_f ϕf 是一个线性映射,其变换矩阵为
V d / d ′ ( ϕ f ( g ) ) = V d / d ′ ( g ) ⋅ [ f 0 f 1 ⋯ f p − 2 f p − 1 y f p − 1 f 0 ⋯ f p − 3 f p − 2 y f p − 2 y f p − 1 ⋯ f p − 4 f p − 3 ⋮ ⋱ ⋮ y f 1 y f 2 ⋯ y f p − 1 f 0 ] = V d / d ′ ( g ) ⋅ [ V d / d ′ ( f ) V d / d ′ ( x f ) ⋮ V d / d ′ ( x p − 1 f ) ] \begin{aligned} V_{d/d'}(\phi_f(g)) &= V_{d/d'}(g) \cdot \begin{bmatrix} f_0 & f_1 & \cdots & f_{p-2} & f_{p-1}\\ yf_{p-1} & f_0 & \cdots & f_{p-3} & f_{p-2}\\ yf_{p-2} & yf_{p-1} & \cdots & f_{p-4} & f_{p-3}\\ \vdots & & \ddots && \vdots\\ yf_{1} & yf_2 & \cdots & yf_{p-1} & f_{0}\\ \end{bmatrix}\\ &= V_{d/d'}(g) \cdot \begin{bmatrix} V_{d/d'}(f)\\ V_{d/d'}(xf)\\ \vdots\\ V_{d/d'}(x^{p-1}f)\\ \end{bmatrix} \end{aligned} Vd/d′(ϕf(g))=Vd/d′(g)⋅ f0yfp−1yfp−2⋮yf1f1f0yfp−1yf2⋯⋯⋯⋱⋯fp−2fp−3fp−4yfp−1fp−1fp−2fp−3⋮f0 =Vd/d′(g)⋅ Vd/d′(f)Vd/d′(xf)⋮Vd/d′(xp−1f)
我们将这个变换矩阵记作 M d / d ′ ( f ) M_{d/d'}(f) Md/d′(f),它满足 V d / d ′ ( g f ) = V d / d ′ ( g ) ⋅ M d / d ′ ( f ) V_{d/d'}(gf) = V_{d/d'}(g) \cdot M_{d/d'}(f) Vd/d′(gf)=Vd/d′(g)⋅Md/d′(f) 以及 M d / d ′ ( g f ) = M d / d ′ ( g ) ⋅ M d / d ′ ( f ) M_{d/d'}(gf) = M_{d/d'}(g) \cdot M_{d/d'}(f) Md/d′(gf)=Md/d′(g)⋅Md/d′(f)。对于 d ′ ′ ∣ d ′ ∣ d d''|d'|d d′′∣d′∣d,我们递归定义 M d / d ′ ′ = M d ′ / d ′ ′ ∘ M d / d ′ M_{d/d''} = M_{d'/d''} \circ M_{d/d'} Md/d′′=Md′/d′′∘Md/d′,并设置 M 1 / 1 = i d M_{1/1}=id M1/1=id。对于 R d n × m \mathcal R_{d}^{n \times m} Rdn×m 上的某矩阵,线性映射 M d / d ′ M_{d/d'} Md/d′ 独立作用于它的每个分量。由于 V d / d ′ V_{d/d'} Vd/d′ 可以在 FFT 域下的计算复杂度为 O ( p d ) O(pd) O(pd),因此 M d / d ′ M_{d/d'} Md/d′ 可以在 FFT 域下的计算复杂度为 O ( p 2 d ) O(p^2d) O(p2d),也是可以高效计算的。
我们将环 R : = R [ x ] / ( h ( x ) ) \mathcal R:= \mathbb R[x]/(h(x)) R:=R[x]/(h(x)) 作为厄米内积空间(Hermitian inner product
space)。对于 a , b ∈ R a,b \in \mathcal R a,b∈R,定义 a † a^\dagger a† 是 a a a 的厄米,它对于 h ( x ) h(x) h(x) 所有的根 ξ \xi ξ 都满足 a † ( ξ ) = a ( ξ ) ‾ a^\dagger(\xi)=\overline{a(\xi)} a†(ξ)=a(ξ),这里 ⋅ ˉ \bar \cdot ⋅ˉ 是共轭运算。我们定义环元素的厄米内积为 ⟨ a , b ⟩ : = ∑ h ( ξ ) = 0 a ( ξ ) b ( ξ ) ‾ \langle a,b \rangle := \sum_{h(\xi)=0} a(\xi)\overline{b(\xi)} ⟨a,b⟩:=∑h(ξ)=0a(ξ)b(ξ),范数为 ∥ a ∥ : = ⟨ a , a ⟩ \|a\|:=\sqrt{\langle a,a \rangle} ∥a∥:=⟨a,a⟩。对于向量空间 R m \mathcal R^m Rm 中的元素 u ⃗ , v ⃗ \vec u,\vec v u,v,定义 ⟨ u ⃗ , v ⃗ ⟩ : = ∑ i ⟨ u i , v i ⟩ \langle \vec u,\vec v \rangle := \sum_i \langle u_i,v_i \rangle ⟨u,v⟩:=∑i⟨ui,vi⟩。
对于卷积环 R [ x ] / ( x d − 1 ) \mathbb R[x]/(x^d-1) R[x]/(xd−1),
a † ( x ) = a 0 + ∑ i = 1 d − 1 a i x d − i a^\dagger(x) = a_0+\sum_{i=1}^{d-1}a_ix^{d-i} a†(x)=a0+i=1∑d−1aixd−i
对于分园环 R [ x ] / ( x d + 1 ) \mathbb R[x]/(x^d+1) R[x]/(xd+1),其中 d d d 是 2 2 2 的幂次,
a † ( x ) = a 0 − ∑ i = 1 d − 1 a i x d − i a^\dagger(x) = a_0-\sum_{i=1}^{d-1}a_ix^{d-i} a†(x)=a0−i=1∑d−1aixd−i
容易验证, a † ( x ) a^\dagger(x) a†(x) 对应的格的 { 1 , x , ⋯ , x d − 1 } \{1,x,\cdots,x^{d-1}\} {1,x,⋯,xd−1} - 基底,就是 a ( x ) a(x) a(x) 对应的格基 B B B 的共轭转置 B † B^\dagger B†。
定义 1(Gram-Schimdt 分解)令 B ∈ R n × m B \in \mathcal R^{n \times m} B∈Rn×m 是满秩矩阵,那么存在唯一分解 B = L ⋅ B ~ B = L \cdot \tilde B B=L⋅B~,其中 L L L 是单位下三角阵(对角线元素全为 1 1 1 的下三角阵), B ~ \tilde B B~ 的行矢两两正交。实际上, B ~ \tilde B B~ 就是矩阵 B B B 的 GS 正交化。
定义 2( L D L † LDL^\dagger LDL† 分解)令 G ∈ R n × n G \in \mathcal R^{n \times n} G∈Rn×n 是正定矩阵( ∀ v , v † G v > 0 \forall v,v^\dagger Gv>0 ∀v,v†Gv>0),那么存在唯一分解 L D L † LDL^\dagger LDL†,其中 L L L 是单位下三角阵, D D D 是对角阵。如果 G = B B † G=BB^\dagger G=BB†,那么 G = ( L B ~ ) ( L B ~ ) † = L ( B B † ) L † G = (L\tilde B)(L\tilde B)^\dagger = L(BB^\dagger)L^\dagger G=(LB~)(LB~)†=L(BB†)L†,即两种分解的 L L L 是相同的。
为了方便 FFT 运算,[DP16] 研究了正定矩阵的 L D L † LDL^\dagger LDL† 分解,并在 Babai 的最近平面算法中使用 L D L † LDL^\dagger LDL† 分解取代了 GS 分解。我们考虑 f ∈ R d f \in \mathcal R_d f∈Rd,对应的矩阵 M d / d ′ ( f ) ∈ R d ′ p × p M_{d/d'}(f) \in \mathcal R_{d'}^{p \times p} Md/d′(f)∈Rd′p×p 可以在环 R d ′ \mathcal R_{d'} Rd′ 上执行 L D L † LDL^\dagger LDL† 分解,简记 M d / d ′ ( f ) = L D ( L ) † M_{d/d'}(f) = LD(L)^\dagger Md/d′(f)=LD(L)†。对于 d ′ ′ ∣ d ′ ∣ d d''|d'|d d′′∣d′∣d,我们继续考虑 M d / d ′ ′ ( f ) = M d ′ / d ′ ′ ∘ M d / d ′ ( f ) M_{d/d''}(f) = M_{d'/d''} \circ M_{d/d'}(f) Md/d′′(f)=Md′/d′′∘Md/d′(f) 的 L D L † LDL^\dagger LDL† 分解,假设 d / d ′ = p d/d'=p d/d′=p,则:
M d / d ′ ′ ( f ) = M d ′ / d ′ ′ ( L D L † ) = M d ′ / d ′ ′ ( L ) ⋅ M d ′ / d ′ ′ ( [ D 1 , 1 D 2 , 2 ⋱ p , p ] ) ⋅ M d ′ / d ′ ′ ( L † ) = M d ′ / d ′ ′ ( [ 1 L 2 , 1 1 ⋮ ⋱ L p , 0 ⋯ L p , p − 1 1 ] ) ⋅ [ M d ′ / d ′ ′ ( D 1 , 1 ) M d ′ / d ′ ′ ( D 2 , 2 ) ⋱ M d ′ / d ′ ′ ( D p , p ( 1 ) ) ] ⋅ M d ′ / d ′ ′ ( [ 1 L 2 , 1 1 ⋮ ⋱ L p , 0 ⋯ L p , p − 1 1 ] ) † \begin{aligned} M_{d/d''}(f) &= M_{d'/d''}(LDL^\dagger)\\ &= M_{d'/d''}\left(L\right) \cdot M_{d'/d''}\left(\begin{bmatrix} D_{1,1}\\ & D_{2,2}\\ && \ddots\\ &&& _{p,p} \end{bmatrix}\right) \cdot M_{d'/d''}\left(L^\dagger\right)\\ &= M_{d'/d''}\left(\begin{bmatrix} 1\\ L_{2,1} & 1\\ \vdots && \ddots\\ L_{p,0} & \cdots & L_{p,p-1} & 1 \end{bmatrix}\right) \cdot \begin{bmatrix} M_{d'/d''}(D_{1,1})\\ & M_{d'/d''}(D_{2,2})\\ && \ddots\\ &&& M_{d'/d''}(D^{(1)}_{p,p}) \end{bmatrix} \cdot M_{d'/d''}\left(\begin{bmatrix} 1\\ L_{2,1} & 1\\ \vdots && \ddots\\ L_{p,0} & \cdots & L_{p,p-1} & 1 \end{bmatrix}\right)^\dagger \end{aligned} Md/d′′(f)=Md′/d′′(LDL†)=Md′/d′′(L)⋅Md′/d′′ D1,1D2,2⋱p,p ⋅Md′/d′′(L†)=Md′/d′′ 1L2,1⋮Lp,01⋯⋱Lp,p−11 ⋅ Md′/d′′(D1,1)Md′/d′′(D2,2)⋱Md′/d′′(Dp,p(1)) ⋅Md′/d′′ 1L2,1⋮Lp,01⋯⋱Lp,p−11 †
假设 d ′ / d ′ ′ = p ′ d'/d''=p' d′/d′′=p′,那么矩阵 M d ′ / d ′ ′ ( D ) M_{d'/d''}(D) Md′/d′′(D) 的每个对角元都可以在环 R d ′ ′ \mathcal R_{d''} Rd′′ 上继续执行 L D L † LDL^\dagger LDL† 分解 M d ′ / d ′ ′ ( D i , i ) = L i , i ′ D i , i ′ ( L i , i ′ ) † M_{d'/d''}(D_{i,i}) = L_{i,i}'D_{i,i}'(L_{i,i}')^\dagger Md′/d′′(Di,i)=Li,i′Di,i′(Li,i′)†,这使得 M d ′ / d ′ ′ ( D ) = L ′ D ′ ( D ′ ) † M_{d'/d''}(D) = L'D'(D')^\dagger Md′/d′′(D)=L′D′(D′)†,其中 L ′ L' L′ 和 D ′ D' D′ 是由这些对角元的 L D L † LDL^\dagger LDL† 分解所组成的分块对角阵:
L ′ = [ L 1 , 1 ′ L 2 , 2 ′ ⋱ L p ′ , p ′ ′ ] , D ′ = [ D 1 , 1 ′ D 2 , 2 ′ ⋱ D p ′ , p ′ ′ ] L' = \begin{bmatrix} L_{1,1}'\\ & L_{2,2}'\\ && \ddots\\ &&& L_{p',p'}' \end{bmatrix}, D' = \begin{bmatrix} D_{1,1}'\\ & D_{2,2}'\\ && \ddots\\ &&& D_{p',p'}' \end{bmatrix} L′= L1,1′L2,2′⋱Lp′,p′′ ,D′= D1,1′D2,2′⋱Dp′,p′′
假设 d = ∏ i p i d=\prod_i p_i d=∏ipi,我们令 d i = ∏ j = 1 i p j d_i=\prod_{j=1}^{i} p_j di=∏j=1ipj, k i = ∏ j = i + 1 h p j k_i = \prod_{j=i+1}^h p_j ki=∏j=i+1hpj,其中 d 0 = 1 , k 0 = d , d h = d , k h = 1 d_0=1,k_0=d,d_h=d,k_h=1 d0=1,k0=d,dh=d,kh=1,那么对应的环同构链为:
R d = R d 0 k 0 ≅ R d 1 k 1 ≅ ⋯ ≅ R d h k h = R d \mathbb R^d = \mathcal R_{d_0}^{k_0} \cong \mathcal R_{d_1}^{k_1} \cong \cdots \cong \mathcal R_{d_h}^{k_h} = \mathcal R_d Rd=Rd0k0≅Rd1k1≅⋯≅Rdhkh=Rd
那么利用线性算子 M d / d ′ M_{d/d'} Md/d′ 在同构链上游走,得到 M d / 1 ( f ) = L D L † M_{d/1}(f) = LDL^\dagger Md/1(f)=LDL†,其中 D ∈ R d D \in \mathbb R^d D∈Rd 是对角阵,
L = M d h / 1 ( L ( h ) ) M d h − 1 / 1 ( L ( h − 1 ) ) ⋯ M d 1 / 1 ( L ( 1 ) ) L = M_{d_{h}/1}(L^{(h)})M_{d_{h-1}/1}(L^{(h-1)}) \cdots M_{d_{1}/1}(L^{(1)}) L=Mdh/1(L(h))Mdh−1/1(L(h−1))⋯Md1/1(L(1))
这里的 L ( i ) L^{(i)} L(i) 是从空间 R d i k i × k i \mathcal R_{d_i}^{k_i \times k_i} Rdiki×ki 分解到空间 R d i − 1 k i − 1 , k i − 1 \mathcal R_{d_{i-1}}^{k_{i-1},k_{i-1}} Rdi−1ki−1,ki−1 时所对应的单位下三角阵。我们按照上述的 M d i / d i − 1 ( D ( i ) ) M_{d_i/d_{i-1}}(D^{(i)}) Mdi/di−1(D(i)) 的对角元的 L D L † LDL^\dagger LDL† 的分解次序,将这些 L ( i ) L^{(i)} L(i) 和 D ( i ) D^{(i)} D(i) 组织成一颗树:根节点存储 L ( h ) L^{(h)} L(h),深度为 i i i 的中间节点存储 L j , j ( h − i ) L^{(h-i)}_{j,j} Lj,j(h−i),它有 p h − i p_{h-i} ph−i 个子树,每个子树都是对角元 M d h − i / 1 ( D j , j ( h − i ) ) M_{d^{h-i}/1}(D^{(h-i)}_{j,j}) Mdh−i/1(Dj,j(h−i)) 的 L D L † LDL^\dagger LDL† 分解的稀疏树状表示。
假如我们对矩阵 G ∈ R d n × n G \in \mathcal R_d^{n \times n} G∈Rdn×n 进行 FFT 版本的 F F L D L † FFLDL^\dagger FFLDL† 分解,那么我们首先执行矩阵的 L D L † LDL^\dagger LDL† 分解,得到 L ( h + 1 ) , D ( h + 1 ) ∈ R d n × n L^{(h+1)},D^{(h+1)} \in \mathcal R_d^{n \times n} L(h+1),D(h+1)∈Rdn×n。对于每个对角元 D j , j ( h + 1 ) ∈ R d D^{(h+1)}_{j,j} \in \mathcal R_d Dj,j(h+1)∈Rd 做线性映射 M d h / d h − 1 ( D j , j ( h + 1 ) ) M_{d_{h}/d_{h-1}}(D^{(h+1)}_{j,j}) Mdh/dh−1(Dj,j(h+1)),然后递归地进行 F F L D L † FFLDL^\dagger FFLDL† 分解,以构建矩阵 G G G 的树状表示。由于 M d / d ′ M_{d/d'} Md/d′ 可以在 FFT 域上高效计算,并且 L D L † LDL^\dagger LDL† 分解中用到所有 R d \mathcal R_d Rd 上的**多项式运算(乘法/除法)**可以在 O ( d log d ) O(d \log d) O(dlogd) 的时间内完成。最终 F F L D L † FFLDL^\dagger FFLDL† 的复杂度是 O ( n 2 d log d ) O(n^2d\log d) O(n2dlogd),其中 n n n 是固定的小常数,而 d d d 是安全参数。
[DP16] 利用 FFT 域下的 L D L † LDL^\dagger LDL† 分解的树状表示,给出了 Babai 的最近平面算法的高效实现。下面我们描述与 FFT 兼容的 Klein 离散高斯采样算法。
简记 Z d = Z [ x ] / ( x d − 1 ) \mathcal Z_d = \mathbb Z[x]/(x^d-1) Zd=Z[x]/(xd−1) 是实数空间 R d = R [ x ] / ( x d − 1 ) \mathcal R_d = \mathbb R[x]/(x^d-1) Rd=R[x]/(xd−1) 内的一维整数格。给定空间 R d m \mathcal R_d^m Rdm 中某 n n n 维格的一组基 B ∈ R d n × m B \in \mathcal R_d^{n \times m} B∈Rdn×m,目标向量是 c = t B ∈ R d m c=tB \in \mathcal R_d^m c=tB∈Rdm,其中 t ∈ R d n t \in \mathcal R_d^n t∈Rdn,我们希望按照中心 t i t_i ti 参数 s i = s / ∥ b ~ i ∥ s_i=s/\|\tilde b_i\| si=s/∥b~i∥ 的离散高斯分布 D Z d , s i , t i D_{\mathcal Z_d,s_i,t_i} DZd,si,ti 来采样 z i ∈ Z d z_i \in \mathcal Z_d zi∈Zd,这使得 ( t − z ) B (t-z)B (t−z)B 是服从 D c + Λ ( B ) , s D_{c+\Lambda(B),s} Dc+Λ(B),s 的随机变量。
线性变换 V d / d ′ V_{d/d'} Vd/d′ 仅仅是对多项式系数的位置做了置换,容易证明它是保距的(isometry): ⟨ V d / d ′ ( a ) , V d / d ′ ( b ) ⟩ = ⟨ a , b ⟩ \langle V_{d/d'}(a),V_{d/d'}(b) \rangle = \langle a,b \rangle ⟨Vd/d′(a),Vd/d′(b)⟩=⟨a,b⟩,因此寻找靠近 t i ∈ R d t_i \in \mathcal R_d ti∈Rd 的整数 z i ∈ Z d z_i \in \mathcal Z_d zi∈Zd,这就等价于寻找靠近向量 V d / d ′ ( t i ) ∈ R d ′ p V_{d/d'}(t_i) \in \mathcal R_{d'}^p Vd/d′(ti)∈Rd′p 的向量 z i ′ ∈ Z d ′ p z_i' \in \mathcal Z_{d'}^p zi′∈Zd′p,然后再计算 z i = V d / d ′ − 1 ( z i ′ ) z_i = V_{d/d'}^{-1}(z_i') zi=Vd/d′−1(zi′) 将它提升回来。对于塔 1 = d 0 ∣ d 1 ∣ ⋯ ∣ d h = d 1=d_0|d_1|\cdots|d_h=d 1=d0∣d1∣⋯∣dh=d,我们递归地执行上述过程,直到最底层 t ′ ∈ R d 1 t' \in \mathcal R_{d_1} t′∈Rd1,这使得 V d 1 / 1 ( t ′ ) ∈ R p 1 V_{d_1/1}(t') \in \mathbb R^{p_1} Vd1/1(t′)∈Rp1 是实向量,那么我们就可以依据 GS 正交基 b ~ i \tilde b_i b~i 的长度 D i , i D_{i,i} Di,i,计算高斯参数 s i = s / D i , i s_i=s/D_{i,i} si=s/Di,i,在整数格 Z \mathbb Z Z 上采样。
算法 F F S a m p l e d ( t , T , s ) FFSample_{d}(t,T,s) FFSampled(t,T,s),输入目标向量 t ∈ R d n t \in \mathcal R_d^n t∈Rdn,格基 B ∈ R d n × m B \in \mathcal R_d^{n \times m} B∈Rdn×m 对应的分解树 T : = ( L , { T i } ) T:=(L,\{T_i\}) T:=(L,{Ti}),以及高斯参数 s > 0 s>0 s>0,其输出为 z ∈ Z d n z \in \mathcal Z_d^n z∈Zdn,