后量子签名:Hash-and-Sign(上篇)

参考文献:

  1. [CT65] Cooley J W, Tukey J W. An algorithm for the machine calculation of complex Fourier series[J]. Mathematics of computation, 1965, 19(90): 297-301
  2. [Babai86] Babai L. On Lovász’lattice reduction and the nearest lattice point problem[J]. Combinatorica, 1986, 6: 1-13.
  3. [GGH97] Goldreich O, Goldwasser S, Halevi S. Public-key cryptosystems from lattice reduction problems[C]//Advances in Cryptology—CRYPTO’97: 17th Annual International Cryptology Conference Santa Barbara, California, USA August 17–21, 1997 Proceedings 17. Springer Berlin Heidelberg, 1997: 112-131.
  4. [HPS98] Hoffstein J, Pipher J, Silverman J H. NTRU: A ring-based public key cryptosystem[C]//International algorithmic number theory symposium. Berlin, Heidelberg: Springer Berlin Heidelberg, 1998: 267-288.
  5. [Ajtai99] Ajtai M. Generating hard instances of the short basis problem[C]//Automata, Languages and Programming: 26th International Colloquium, ICALP’99 Prague, Czech Republic, July 11–15, 1999 Proceedings 26. Springer Berlin Heidelberg, 1999: 1-9.
  6. [Klein00] Klein P. Finding the closest lattice vector when it’s unusually close[C]//Proceedings of the eleventh annual ACM-SIAM symposium on Discrete algorithms. 2000: 937-941.
  7. [GPV08] Gentry C, Peikert C, Vaikuntanathan V. Trapdoors for hard lattices and new cryptographic constructions[C]//Proceedings of the fortieth annual ACM symposium on Theory of computing. 2008: 197-206.
  8. [SS11] Stehlé D, Steinfeld R. Making NTRU as secure as worst-case problems over ideal lattices[C]//Advances in Cryptology–EUROCRYPT 2011: 30th Annual International Conference on the Theory and Applications of Cryptographic Techniques, Tallinn, Estonia, May 15-19, 2011. Proceedings 30. Springer Berlin Heidelberg, 2011: 27-47.
  9. [BLISS] Ducas L, Durmus A, Lepoint T, et al. Lattice signatures and bimodal Gaussians[C]//Advances in Cryptology–CRYPTO 2013: 33rd Annual Cryptology Conference, Santa Barbara, CA, USA, August 18-22, 2013. Proceedings, Part I. Springer Berlin Heidelberg, 2013: 40-56.
  10. [DP16] Ducas L, Prest T. Fast fourier orthogonalization[C]//Proceedings of the ACM on International Symposium on Symbolic and Algebraic Computation. 2016: 191-198.
  11. [Falcon] Fouque P A, Hoffstein J, Kirchner P, et al. Falcon: Fast-Fourier lattice-based compact signatures over NTRU[J]. Submission to the NIST’s post-quantum cryptography standardization process, 2018, 36(5).
  12. [ZS19] Zhao R K, Steinfeld R, Sakzad A. FACCT: fast, compact, and constant-time discrete Gaussian sampler over integers[J]. IEEE Transactions on Computers, 2019, 69(1): 126-137.
  13. [MG02] Micciancio D, Goldwasser S. Complexity of lattice problems: a cryptographic perspective[M]. Springer Science & Business Media, 2002.

文章目录

  • 简介
  • 陷门采样技术
    • 原像采样函数
    • Klein’s algorithm
    • GPV Framework
  • 快速傅里叶正交化
    • Tower of Rings
    • 稀疏的矩阵分解
    • 快速傅里叶 Klein 算法

简介

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=f1(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=f1(H(mr);rd)

基于格上陷门的签名方案最早是在 [GGH97] 中描述:由满秩矩阵 A ∈ Z q n × m A \in \mathbb Z_q^{n \times m} AZqn×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={xZm:Ax=0(modq)},假设 B ∈ Z q m × m B \in \mathbb Z_q^{m \times m} BZqm×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} cZqm 是实向量,通过求解线性方程组 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=cB1B 就是接近 c c c 的一个 Λ q ⊥ \Lambda_q^\perp Λq 上格点,计算短向量 s = c − v s=c-v s=cv 作为签名值,容易验证 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) vcP(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) vcP(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)BGS 时,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} vDΛq,s,c,那么签名值 s = c − v s=c-v s=cv 是服从离散高斯分布 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} et/2σ02=2t),再通过拒绝采样算法裁剪出离散高斯分布 D k σ 0 , ∀ k ∈ Z + D_{k\sigma_0},\forall k \in \mathbb Z^+ Dkσ0,kZ+。在 [ZS20] 中使用卷积定理和超越函数的多项式逼近技术,用多项式来模拟指数函数 2 − t , t ∈ [ 0 , ln ⁡ 2 ] 2^{-t},t \in [0,\ln2] 2t,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(πxc2/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 cRn,如果 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} AZqn×m(列矢, m < n mm<n)和校验子 y ∈ Z q n y \in \mathbb Z_q^n yZqn,寻找 x ∈ Z m x \in \mathbb Z^m xZm 使得 A x = y ( m o d q ) Ax=y \pmod q Ax=y(modq),并满足 ∥ x ∥ ≤ β \|x\| \le \beta xβ。它可以被视作格 Λ q ⊥ ( A ) \Lambda_q^\perp(A) Λq(A) 上的校验子解码问题(syndrome decoding problem)。

定理 1([Ajtai99])给定素数 q = p o l y ( n ) q=poly(n) q=poly(n) 以及 m ≥ 5 n log ⁡ q m \ge 5n\log q m5nlogq,存在 PPT 算法,输出 A ∈ Z q n × m A \in \mathbb Z_q^{n \times m} AZqn×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} Sm2.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~is~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=BU1 就是满足上述条件的一组格基。

定理 3([GPV08])存在一个期望 PPT 的算法(Klein 算法),给定 n n n 维格 Λ \Lambda Λ 的一组基 B B B,中心 c ∈ R n c \in \mathbb R^n cRn,以及满足 s ≥ ∥ B ∥ G S ⋅ w ( log ⁡ n ) s \ge \|B\|_{GS} \cdot w(\sqrt{\log n}) sBGSw(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+ϵ)n1)/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)

  1. T r a p G e n ( 1 n ) TrapGen(1^n) TrapGen(1n) 输出 ( a , t ) (a,t) (a,t),其中 a a a 索引一个函数 f a : D n → R n f_a:D_n \to R_n fa:DnRn,而 t t t 是它的陷门信息。
  2. S a m p l e D o m ( 1 n ) SampleDom(1^n) SampleDom(1n) 在域 D n D_n Dn 上按照某种分布 χ \chi χ 采样 x x x,使得 f a ( x ) f_a(x) fa(x) 是值域 R n R_n Rn 上的均匀分布。
  3. S a m p l e P r e ( t , y ) SamplePre(t,y) SamplePre(t,y) 在域 D n D_n Dn 上采样 x x x,它服从条件 f a ( x ) = y f_a(x)=y fa(x)=y 下的 χ \chi χ 分布。

如果对于随机选取的 a a a y ∈ R n y \in R_n yRn,任意的 PPT 敌手 A A A 都无法以显著概率求出原像 f a − 1 ( y ) ∈ D n f_a^{-1}(y) \in D_n fa1(y)Dn,那么我们称它是一族单向 PSFs。如果任意的 y ∈ R n y \in R_n yRn,使得条件 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) AZqn×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} TGSm2.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}) sm2.5w(logm ),它的定义域为 D n : = { x ∈ Z m : ∥ x ∥ ≤ s m } D_n :=\{x \in \mathbb Z^m: \|x\| \le s\sqrt{m}\} Dn:={xZm:xsm },输入分布为 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 yRn,首先求解线性方程组 A t = y ( m o d q ) At=y \pmod q At=y(modq) 获得 t ∈ Z m t \in \mathbb Z^m tZm(不一定属于 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=tv 是服从 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。

Klein’s algorithm

下面我们描述 [GPV08] 的 PSFs 最关键的部分,[Klein00] 的随机化 NP 算法。如果给定格基 B B B,对于远大于 ∥ B ∥ G S \|B\|_{GS} BGS 的高斯参数 s s s,直接从连续高斯分布中采样,然后舍入到最近格点上,可以获得较好的近似。然而,对于略大于 ∥ B ∥ G S \|B\|_{GS} BGS 的那些高斯参数 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[xcts:xDZ,s,c]2eπt21ϵ1+ϵ
对于整数格 Z \mathbb Z Z 上中心 c ∈ R c \in \mathbb R cR 参数 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)=lognw(logn ),采样算法 S a m p l e Z ( c , s ) Sample\mathbb Z(c,s) SampleZ(c,s) 的执行步骤如下:

  1. 在集合 S : = Z ∩ [ c − s ⋅ t ( n ) , c + s ⋅ t ( n ) ] S:= \mathbb Z \cap [c-s \cdot t(n),c+s \cdot t(n)] S:=Z[cst(n),c+st(n)] 上均匀采样 x ∈ S x \in S xS
  2. 计算 p = ρ s ( x − c ) ∈ ( 0 , 1 ] p=\rho_s(x-c) \in (0,1] p=ρs(xc)(0,1],按照伯努利分布 B p \mathcal B_p Bp 掷硬币 b b b
  3. 如果 b = 1 b=1 b=1,则输出 x x x。否则拒绝样本,并回到 step 1。

根据定理 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} BRn×n,中心 c ∈ R n c \in \mathbb R^n cRn 参数 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) 的执行步骤如下:

  1. 设置 v n = 0 ∈ R n v_n=0 \in \mathbb R^n vn=0Rn c n = c ∈ R n c_n=c \in \mathbb R^n cn=cRn
  2. B = { b 1 , ⋯   , b n } B = \{b_1,\cdots,b_n\} B={b1,,bn},计算 GS 正交基 B ~ = { b ~ 1 , ⋯   , b ~ n } \tilde B = \{\tilde b_1,\cdots,\tilde b_n\} B~={b~1,,b~n}
  3. 对于 i = n , ⋯   , 1 i=n,\cdots,1 i=n,,1 依次执行
    1. 计算中心 c i ′ = ⟨ c i , b ~ i ⟩ ⟨ b ~ i , b ~ i ⟩ ∈ R c_i'=\dfrac{\langle c_i,\tilde b_i\rangle}{\langle \tilde b_i,\tilde b_i\rangle} \in \mathbb R ci=b~i,b~ici,b~iR 和高斯参数 s i ′ = s ∥ b ~ i ∥ s_i' = \dfrac{s}{\|\tilde b_i\|} si=b~is
    2. 利用 S a m p l e Z ( c i ′ , s i ′ ) Sample\mathbb Z(c_i',s_i') SampleZ(ci,si) 采样服从 D Z , s i ′ , c i ′ D_{\mathbb Z,s_i',c_i'} DZ,si,ci 的随机变量 z i z_i zi
    3. 计算 c i − 1 = c i − z i b i c_{i-1}=c_i-z_ib_i ci1=cizibi,计算 v i − 1 = v i + z i b i v_{i-1}=v_i+z_ib_i vi1=vi+zibi
  4. 输出 v 0 ∈ Λ ⊆ R n v_0 \in \Lambda \subseteq\mathbb R^n v0ΛRn

它与 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}) sBGSw(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 xZm 使它满足 A x = H ( m ) ( m o d q ) Ax=H(m) \pmod q Ax=H(m)(modq),这导致伪造签名变得容易。因此我们应当选取合适的高斯参数 s s s,使得私钥恢复是困难的,同时使得签名伪造也是困难的。

GPV Framework

现在,我们描述基于 ISIS 问题的 Hash-and-Sign 签名方案。在它的安全归约过程中,要求签名者对于每个像 y y y 只给出至多一个原像。为了获得无状态的随机化签名方案,我们在签名算法中添加随机盐 r r r,确保对于固定的消息 m m m,每次签名中的哈希值 H ( m ∥ r ) H(m\|r) H(mr) 不发生碰撞。

  • K e y G e n ( 1 n ) KeyGen(1^n) KeyGen(1n):调用 PSF 陷门生成算法 T r a p G e n ( 1 n ) TrapGen(1^n) TrapGen(1n),获得 A ∈ Z q n × m , T ⊆ Λ q ⊥ ( A ) A \in \mathbb Z_q^{n \times m}, T \subseteq \Lambda_q^\perp(A) AZqn×m,TΛq(A),将 A A A 作为公钥,将 T T T 作为私钥
  • S i g n ( T , m ; r d ) Sign(T,m;rd) Sign(T,m;rd):随机采样 r ← { 0 , 1 } k r \leftarrow \{0,1\}^k r{0,1}k,计算哈希值 y = H ( m ∥ r ) y=H(m\|r) y=H(mr),求解线性方程组 A t = y ( m o d q ) At=y \pmod q At=y(modq),利用 S a m p l e D ( T , t , s ; r d ) SampleD(T,t,s;rd) SampleD(T,t,s;rd) 采样格点 v ∈ Λ q ⊥ ( A ) v \in \Lambda_q^\perp(A) vΛq(A),计算 σ = t − v \sigma=t-v σ=tv,输出签名值 ( r , σ ) (r,\sigma) (r,σ)
  • V e r i f y ( A , m , ( r , σ ) ) Verify(A,m,(r,\sigma)) Verify(A,m,(r,σ)):首先检查 ∥ σ ∥ ≤ s ⋅ m \|\sigma\| \le s \cdot \sqrt m σsm ,然后验证 A σ = H ( m ∥ r ) ( m o d q ) A\sigma = H(m\|r)\pmod q Aσ=H(mr)(modq) 是否成立

假设 I S I S q , m , 2 s m ISIS_{q,m,2s\sqrt{m}} ISISq,m,2sm 是困难的,那么这个 PSF 是抗碰撞的,可证明上述签名方案在 RO 模型下是选择消息攻击下强不可伪造的(SEUF-CMA)。

快速傅里叶正交化

Tower of Rings

然而 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]/(xd1),假设 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=d0d1dh=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]/(xd01)R[x]/(xd11)R[x]/(xdh1)=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=Rd0k0Rd1k1Rdhkh=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/di1:RdiRdi1pi 为:
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=0pi1xjaj(y)):=(a0(y),,api1(y))
假如 p i = 2 p_i=2 pi=2 那么这就是 [CT65] 中的 FFT 算法的一轮递归,按照奇数项和偶数项把数组 a ∈ R d a \in \mathbb R^d aRd 分成 ( a 0 , a 1 ) ∈ R 2 (a_0,a_1) \in \mathbb R^2 (a0,a1)R2。对于 d ′ ′ ∣ d ′ ∣ d d''|d'|d d′′dd 的情况,我们递归地定义 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=0p1xifi(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),,fp1(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=0p1w(k+id/p)jfj(wkp)
其中 k = 0 , ⋯   , d / p − 1 k=0,\cdots,d/p-1 k=0,,d/p1 i = 0 , 1 , ⋯   , p − 1 i=0,1,\cdots,p-1 i=0,1,,p1。由于 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+(p1)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)=pwkji=0p1[wijd/pf(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:RdRdp,它可以视作 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,,xp1} 下的坐标表示。容易验证
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} fRd,我们考虑自同态(endomorphism) ϕ f : g ∈ R d ↦ g f ∈ R d \phi_f: g \in \mathcal R_{d} \mapsto gf \in \mathcal R_{d} ϕf:gRdgfRd,如果 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=0p1xifi(y),g(x)=i=0p1xigi(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)++xp1g0(y)fp1(y)+yg1(y)fp1(y)+xg1(y)f0(y)++xp1g1(y)fp2(y)++ygp1(y)f1(y)+xygp1(y)f2(y)++xp1gp1(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) f0yfp1yfp2yf1f1f0yfp1yf2fp2fp3fp4yfp1fp1fp2fp3f0 =Vd/d(g) Vd/d(f)Vd/d(xf)Vd/d(xp1f)
我们将这个变换矩阵记作 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′′dd,我们递归定义 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,bR,定义 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 :=iui,vi

对于卷积环 R [ x ] / ( x d − 1 ) \mathbb R[x]/(x^d-1) R[x]/(xd1)
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=1d1aixdi
对于分园环 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)=a0i=1d1aixdi
容易验证, a † ( x ) a^\dagger(x) a(x) 对应的格的 { 1 , x , ⋯   , x d − 1 } \{1,x,\cdots,x^{d-1}\} {1,x,,xd1} - 基底,就是 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} BRn×m 是满秩矩阵,那么存在唯一分解 B = L ⋅ B ~ B = L \cdot \tilde B B=LB~,其中 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} GRn×n 是正定矩阵( ∀ v , v † G v > 0 \forall v,v^\dagger Gv>0 v,vGv>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 fRd,对应的矩阵 M d / d ′ ( f ) ∈ R d ′ p × p M_{d/d'}(f) \in \mathcal R_{d'}^{p \times p} Md/d(f)Rdp×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′′dd,我们继续考虑 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,2p,p Md/d′′(L)=Md/d′′ 1L2,1Lp,01Lp,p11 Md/d′′(D1,1)Md/d′′(D2,2)Md/d′′(Dp,p(1)) Md/d′′ 1L2,1Lp,01Lp,p11
假设 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,iDi,i(Li,i),这使得 M d ′ / d ′ ′ ( D ) = L ′ D ′ ( D ′ ) † M_{d'/d''}(D) = L'D'(D')^\dagger Md/d′′(D)=LD(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,1L2,2Lp,p ,D= D1,1D2,2Dp,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=Rd0k0Rd1k1Rdhkh=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 DRd 是对角阵,
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))Mdh1/1(L(h1))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}} Rdi1ki1,ki1 时所对应的单位下三角阵。我们按照上述的 M d i / d i − 1 ( D ( i ) ) M_{d_i/d_{i-1}}(D^{(i)}) Mdi/di1(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(hi),它有 p h − i p_{h-i} phi 个子树,每个子树都是对角元 M d h − i / 1 ( D j , j ( h − i ) ) M_{d^{h-i}/1}(D^{(h-i)}_{j,j}) Mdhi/1(Dj,j(hi)) L D L † LDL^\dagger LDL 分解的稀疏树状表示

假如我们对矩阵 G ∈ R d n × n G \in \mathcal R_d^{n \times n} GRdn×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/dh1(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 是安全参数。

快速傅里叶 Klein 算法

[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]/(xd1) 是实数空间 R d = R [ x ] / ( x d − 1 ) \mathcal R_d = \mathbb R[x]/(x^d-1) Rd=R[x]/(xd1) 内的一维整数格。给定空间 R d m \mathcal R_d^m Rdm 中某 n n n 维格的一组基 B ∈ R d n × m B \in \mathcal R_d^{n \times m} BRdn×m,目标向量是 c = t B ∈ R d m c=tB \in \mathcal R_d^m c=tBRdm,其中 t ∈ R d n t \in \mathcal R_d^n tRdn,我们希望按照中心 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 ziZd,这使得 ( t − z ) B (t-z)B (tz)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 tiRd 的整数 z i ∈ Z d z_i \in \mathcal Z_d ziZd,这就等价于寻找靠近向量 V d / d ′ ( t i ) ∈ R d ′ p V_{d/d'}(t_i) \in \mathcal R_{d'}^p Vd/d(ti)Rdp 的向量 z i ′ ∈ Z d ′ p z_i' \in \mathcal Z_{d'}^p ziZdp,然后再计算 z i = V d / d ′ − 1 ( z i ′ ) z_i = V_{d/d'}^{-1}(z_i') zi=Vd/d1(zi) 将它提升回来。对于塔 1 = d 0 ∣ d 1 ∣ ⋯ ∣ d h = d 1=d_0|d_1|\cdots|d_h=d 1=d0d1dh=d,我们递归地执行上述过程,直到最底层 t ′ ∈ R d 1 t' \in \mathcal R_{d_1} tRd1,这使得 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 tRdn,格基 B ∈ R d n × m B \in \mathcal R_d^{n \times m} BRdn×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 zZdn

  1. 如果 d = 1 d=1 d=1,那么说明 t ∈ R n t \in \mathbb R^n tRn,此时 L = D i , i L=D_{i,i} L=Di,i 记录了 b ~ i \tilde b_i b~i 的长度。计算归一化的高斯参数 s ′ = s / L s'=s/L <

你可能感兴趣的:(#,后量子密码学,哈希算法,算法,密码学,机器学习,零知识证明)