格基约简:BKZ算法

参考文献:

  1. Schnorr C P, Euchner M. Lattice basis reduction: Improved practical algorithms and solving subset sum problems[J]. Mathematical programming, 1994, 66(1): 181-199.
  2. Chen Y, Nguyen P Q. BKZ 2.0: Better lattice security estimates[C]//International Conference on the Theory and Application of Cryptology and Information Security. Springer, Berlin, Heidelberg, 2011: 1-20.
  3. Gama N, Nguyen P Q, Regev O. Lattice enumeration using extreme pruning[C]//Annual International Conference on the Theory and Applications of Cryptographic Techniques. Springer, Berlin, Heidelberg, 2010: 257-278.

欧几里得球(Euclidean ball)

半径 R R R n n n维球,它的体积为:
V n ( R ) = R n ⋅ π n / 2 Γ ( n / 2 + 1 ) = R n ⋅ V n ( 1 ) V_n(R) = R^n \cdot \frac{\pi^{n/2}}{\Gamma(n/2 + 1)} = R^n \cdot V_n(1) Vn(R)=RnΓ(n/2+1)πn/2=RnVn(1)
其中 Γ ( s ) \Gamma(s) Γ(s) G a m m a Gamma Gamma函数:
Γ ( s ) = ∫ 0 ∞ t s − 1 e − t d t \Gamma(s) = \int_0^\infty t^{s-1} e^{-t} dt Γ(s)=0ts1etdt
利用斯特林公式( Stirling’s approximation),得到:
V n ( 1 ) − 1 / n ≈ n 2 π e ≈ n / 17 V_n(1)^{-1/n} \approx \sqrt{\frac{n}{2 \pi e}} \approx \sqrt{n/17} Vn(1)1/n2πen n/17
高斯启发式(Gaussian Heuristic):对于 n n n维格 L L L和连续集合 S ⊂ R m S \subset R^m SRm,在 S ∩ L S \cap L SL中的格点数大约是 v o l ( S ) / v o l ( L ) vol(S)/vol(L) vol(S)/vol(L)

假设 S S S是半径 R R R n n n维球,那么其中的格点数约为 V n ( R ) / d e t ( L ) V_n(R)/det(L) Vn(R)/det(L)

格的高斯启发式
λ 1 ( L ) ≈ ( d e t ( L ) V n ( 1 ) ) 1 / n ≈ n / 17 ⋅ ∏ i = 1 n ∥ b i ∗ ∥ \lambda_1(L) \approx (\frac{det(L)}{V_n(1)})^{1/n} \approx \sqrt{n/17} \cdot \prod_{i=1}^{n} \|b_i^*\| λ1(L)(Vn(1)det(L))1/nn/17 i=1nbi
其中 b i ∗ b_i^* bi​是施密特正交基(Gram-Schmidt orthogonal basis)

简记为: G H ( L ) = d e t ( L ) 1 / n / V n ( 1 ) 1 / n GH(L) = det(L)^{1/n} / V_n(1)^{1/n} GH(L)=det(L)1/n/Vn(1)1/n

高维球的性质

  1. 高维球的体积集中在薄球壳
  2. 高维球的体积集中在任意赤道面
  3. d d d维的正态分布,虽然密度在原点处最高,但原点附近的球体几乎没有体积;随机点集中在半径 σ d − 1 ± O ( 1 ) \sigma \sqrt{d-1} \pm O(1) σd1 ±O(1)的薄球壳上
  4. 高维球体的体积趋近于0,高维立方的体积恒等于1;高维球体可以包裹高维立方的面中心点,但顶点间最远距离为 d ≫ 2 \sqrt{d} \gg 2 d 2
  5. 下面是高维立方的面中心点到顶点的距离渐变过程:
# 假设立方体棱长为2,方便观察
>>> f=lambda d: [np.sqrt(1+(d-1)*x**2) for x in np.arange(0, 1.1, 0.1)]
>>> f(100)
[1.0, 1.4106735979665885, 2.227105745132009, 3.148015247739439, 4.1036569057366385, 5.07444578254611, 6.053098380168623, 7.036334272900913, 8.022468448052633, 9.010549372818508, 10.0]

# 对于单位立方,公式为
>>> f=lambda d: [np.sqrt(0.5**2+(d-1)*x**2) for x in np.arange(0, 0.55, 0.05)]
>>> f(100)
[0.5, 0.7053367989832943, 1.1135528725660044, 1.5740076238697196, 2.0518284528683193, 2.537222891273055, 3.0265491900843116, 3.5181671364504563, 4.011234224026317, 4.505274686409254, 5.0]

# 很明显,0.5 < 1 < 5.0

正交投影(orthogonal projection)

对于 n n n维格,格基 { b 1 , b 2 , ⋯   , b n } \{b_1,b_2,\cdots,b_n\} {b1,b2,,bn} m m m维向量), i ∈ { 1 , ⋯   , n } i \in\{1,\cdots,n\} i{1,,n},定义映射
π i : R m ↦ s p a n ( b 1 , ⋯   , b i − 1 ) ⊥ \pi_i: R^m \mapsto span(b_1,\cdots,b_{i-1})^{\bot} πi:Rmspan(b1,,bi1)
易知
v − π i ( v ) ∈ s p a n ( b 1 , ⋯   , b i − 1 ) v - \pi_i(v) \in span(b_1,\cdots,b_{i-1}) vπi(v)span(b1,,bi1)
特别地, π 1 ( ⋅ ) = i d \pi_1(\cdot)=id π1()=id,是恒等映射。

平凡的计算方法:
π i ( v ) = v − ∑ i = 1 i − 1 v ⋅ b i ∗ b i ∗ ⋅ b i ∗ ⋅ b i ∗ \pi_i(v) = v - \sum_{i=1}^{i-1} \frac{v \cdot b_i^*}{b_i^* \cdot b_i^*} \cdot b_i^* πi(v)=vi=1i1bibivbibi
但实际上,假设 v = v 1 b 1 + ⋯ + v n b n v=v_1b_1+\cdots+v_nb_n v=v1b1++vnbn,由于
b k = b k ∗ + ∑ j = 1 k − 1 μ k , j b j ∗ b_k = b_k^* + \sum_{j=1}^{k-1} \mu_{k,j} b_j^* bk=bk+j=1k1μk,jbj
那么
v = ∑ j = 1 n ( v j + ∑ k = j + 1 n μ k , j v k ) b j ∗ v = \sum_{j=1}^{n} (v_j + \sum_{k=j+1}^{n} \mu_{k,j}v_k) b_j^* v=j=1n(vj+k=j+1nμk,jvk)bj
根据施密特正交基的性质,截断
π i ( v ) = ∑ j = i n ( v j + ∑ k = j + 1 n μ k , j v k ) b j ∗ \pi_i(v) = \sum_{j=i}^{n} (v_j + \sum_{k=j+1}^{n} \mu_{k,j}v_k) b_j^* πi(v)=j=in(vj+k=j+1nμk,jvk)bj
因此计算他们的范数是容易的,不必反复计算内积:
∥ π i ( v ) ∥ 2 = ∑ j = i n ( v j + ∑ k = j + 1 n μ k , j v k ) 2 ⋅ ∥ b j ∗ ∥ 2 \| \pi_i(v) \|^2 = \sum_{j=i}^{n} (v_j + \sum_{k=j+1}^{n} \mu_{k,j}v_k)^2 \cdot \| b_j^* \|^2 πi(v)2=j=in(vj+k=j+1nμk,jvk)2bj2
投影子格(projective sublattice):
L i , j : = L ( π i ( b i ) , π i ( b i + 1 ) , ⋯   , π i ( b j ) ) L_{i,j} := L(\pi_i(b_i),\pi_i(b_{i+1}),\cdots,\pi_i(b_j)) Li,j:=L(πi(bi),πi(bi+1),,πi(bj))
局部块(local block):
B i : = { π i ( b i ) , π i ( b i + 1 ) , ⋯   , π i ( b j ) } B_i := \{\pi_i(b_i),\pi_i(b_{i+1}),\cdots,\pi_i(b_j)\} Bi:={πi(bi),πi(bi+1),,πi(bj)}
块长为 β = j − i + 1 \beta=j-i+1 β=ji+1

枚举算法

假设 λ 1 ( L ) < R \lambda_1(L) < R λ1(L)<R,为了解决 S V P SVP SVP,我们搜索向量 v v v对应的系数组合 ( v 1 , v 2 , ⋯   , v n ) (v_1,v_2,\cdots,v_n) (v1,v2,,vn),并满足 n n n个不等式:
∥ π n + 1 − k ( v ) ∥ 2 ≤ R 2 ,    1 ≤ k ≤ n \| \pi_{n+1-k}(v) \|^2 \le R^2,\,\, 1 \le k \le n πn+1k(v)2R2,1kn
关于格 L L L的搜索半径为 R R R枚举树:树的深度为 n n n,其深度 k k k的节点是 r a n k − k rank-k rankk的投影格 π n + 1 − k ( L ) \pi_{n+1-k}(L) πn+1k(L)中所有的范数不超过 R R R的向量。

对于一个深度 k k k的节点 u ∈ π n + 1 − k ( L ) u \in \pi_{n+1-k}(L) uπn+1k(L),它的父节点是深度 k − 1 k-1 k1 π n + 2 − k ( u ) \pi_{n+2-k}(u) πn+2k(u),因此节点 v v v的祖先节点的范数不比 ∥ v ∥ \|v\| v大,这个序列可以用于剪枝

特别的,节点是零向量,因为 π n + 1 ( L ) = { 0 } \pi_{n+1}(L)=\{0\} πn+1(L)={0};而叶子节点,就是所有满足 ∥ v ∥ ≤ R \|v\| \le R vR的向量,因为 π 1 ( v ) = v \pi_{1}(v)=v π1(v)=v

不剪枝的枚举算法,对于不等式组, 1 ≤ k ≤ n 1 \le k \le n 1kn
∥ π n + 1 − k ( v ) ∥ 2 = ∑ j = n + 1 − k n ( v j + ∑ i = j + 1 n μ i , j v i ) 2 ⋅ ∥ b j ∗ ∥ 2 ≤ R 2 \| \pi_{n+1-k}(v) \|^2 = \sum_{j=n+1-k}^{n} (v_j + \sum_{i=j+1}^{n} \mu_{i,j}v_i)^2 \cdot \| b_j^* \|^2 \le R^2 πn+1k(v)2=j=n+1kn(vj+i=j+1nμi,jvi)2bj2R2
提出第 n + 1 − k n+1-k n+1k项:
∣ v n + 1 − k + ∑ i = n + 2 − k n μ i , n + 1 − k ⋅ v i ∣ ≤ R 2 − ∑ j = n + 2 − k n ( v j + ∑ i = j + 1 n μ i , j v i ) 2 ⋅ ∥ b j ∗ ∥ 2 ∥ b n + 1 − k ∗ ∥ | v_{n+1-k} + \sum_{i=n+2-k}^{n} \mu_{i,n+1-k} \cdot v_i | \le \frac{\sqrt{R^2 - \sum_{j=n+2-k}^{n} (v_j + \sum_{i=j+1}^{n} \mu_{i,j}v_i)^2 \cdot \| b_j^* \|^2}}{\|b_{n+1-k}^*\|} vn+1k+i=n+2knμi,n+1kvibn+1kR2j=n+2kn(vj+i=j+1nμi,jvi)2bj2
于是,对于 k = 1 k=1 k=1,考虑对称性,有枚举范围 0 ≤ v n ≤ R / ∥ b n ∗ ∥ 0 \le v_n \le R/\|b_n^*\| 0vnR/bn

假设整系数 v n + 2 − k , ⋯   , v n v_{n+2-k},\cdots,v_n vn+2k,,vn已经确定,那么 v n + 1 − k v_{n+1-k} vn+1k的枚举范围 I n + 1 − k I_{n+1-k} In+1k也可以确定下来。区间中心为 v n + 1 − k = ⌊ − ∑ i = n + 2 − k n μ i , n + 1 − k ⋅ v i ⌉ v_{n+1-k} = \lfloor -\sum_{i=n+2-k}^{n} \mu_{i,n+1-k} \cdot v_i \rceil vn+1k=i=n+2knμi,n+1kvi,然后依次搜索 ± 1 , ± 2 , ⋯ \pm1,\pm2,\cdots ±1,±2,

剪枝枚举算法(Pruned Enumeration),设置更严格的不等式,即
∥ π n + 1 − k ( v ) ∥ 2 ≤ R k 2 ,    1 ≤ k ≤ n \| \pi_{n+1-k}(v) \|^2 \le R_k^2,\,\, 1 \le k \le n πn+1k(v)2Rk2,1kn
其中边界参数(bounding parameters) R 1 ≤ R 2 ≤ ⋯ ≤ R n = R R_1 \le R_2 \le \cdots \le R_n = R R1R2Rn=R n n n个实数,由剪枝策略确定。

剪枝,实际上是将“不太可能”是最短向量的枝丫去除,因此剪枝算法的“成功概率”并不是 1 1 1。我们通过反复执行剪枝枚举算法,提高求解 C V P CVP CVP的成功率。注意,剪枝算法是确定性的,因此我们执行剪枝枚举之前,需要将格基“随机化”。

极限剪枝(Extreme Pruning):选择某种边界参数,使得算法成功率很小,但却以指数级降低时间复杂度。

BKZ(Block Korkin Zolotarev reduction)

对于格 L L L的有序基底 { b 1 , b 2 , ⋯   , b n } \{b_1,b_2,\cdots,b_n\} {b1,b2,,bn},若它是 s i z e − r e d u c e d size-reduced sizereduced,并且满足
∥ b i ∗ ∥ = λ 1 ( π i ( L ) ) \|b_i^*\| = \lambda_1(\pi_i(L)) bi=λ1(πi(L))
那么它称为: K o r k i n − Z o l o t a r e v     b a s i s Korkin-Zolotarev\,\,\,basis KorkinZolotarevbasis

任意的 K Z KZ KZ基,都满足:
4 i + 3 ≤ ∥ b i ∥ 2 λ i 2 ≤ i + 3 4 ,     i = 1 , 2 , ⋯   , n \frac{4}{i+3} \le \frac{\|b_i\|^2}{\lambda_i^2} \le \frac{i+3}{4},\,\,\, i=1,2,\cdots,n i+34λi2bi24i+3,i=1,2,,n
然而,计算出 K Z KZ KZ基的时间复杂度是指数级的。

我们退而求其次,使得长度为 β \beta β的局部块 B i B_i Bi,满足 s i z e − r e d u c e d size-reduced sizereduced,并且
δ ⋅ ∥ b i ∗ ∥ ≤ λ 1 ( π i ( L ( b i , ⋯   , b min ⁡ ( i + β − 1 , n ) ) ) ) = λ 1 ( L i , min ⁡ ( i + β − 1 , n ) ) ,     i = 1 , 2 , ⋯   , n − 1 \delta \cdot \| b_i^* \| \le \lambda_1(\pi_i(L(b_i,\cdots,b_{\min(i+\beta-1,n)}))) = \lambda_1(L_{i,\min(i+\beta-1,n)}),\,\,\, i=1,2,\cdots,n-1 δbiλ1(πi(L(bi,,bmin(i+β1,n))))=λ1(Li,min(i+β1,n)),i=1,2,,n1
其中 1 / 4 ≤ δ ≤ 1 1/4 \le \delta \le 1 1/4δ1,这称为 β − r e d u c e d    w i t h    δ \beta-reduced\,\,with\,\,\delta βreducedwithδ

BKZ算法:先做格约简(格基越好,枚举树越小),然后对于 i = 1 , ⋯   , n − 1 i=1,\cdots,n-1 i=1,,n1,在投影子格 L i , min ⁡ ( n , i + β − 1 ) L_{i,\min(n,i+\beta-1)} Li,min(n,i+β1)上执行枚举算法,得到局部块 B i B_i Bi上的最短向量 v v v,并把它插入原始格基中
( b 1 , b 2 , ⋯   , b i − 1 , v , b i , ⋯   , b min ⁡ ( n , i + β − 1 ) ) (b_1,b_2,\cdots,b_{i-1},v,b_{i},\cdots,b_{\min(n,i+\beta-1)}) (b1,b2,,bi1,v,bi,,bmin(n,i+β1))
这使得这些向量线性相关。需要对它做格基约化(例如 L L L LLL LLL算法),重新得到格基,它满足
∥ b i ∗ ∥ = λ 1 ( L i , min ⁡ ( i + β − 1 , n ) ) \| b_i^* \| = \lambda_1(L_{i,\min(i+\beta-1,n)}) bi=λ1(Li,min(i+β1,n))

然后继续枚举,继续格约简,直到格基不再变化。实际上,在算法的前若干轮,格基的质量会有明显提高;再之后,其格基的质量就很接近 B K Z BKZ BKZ算法的约简极限了,可以提前终止。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值