flatter算法出自论文《Fast Practical Lattice Reduction through Iterated Compression》,作者是 Keegan Ryan 和 Nadia Heninger。论文介绍了一种新的格基约简算法,该算法具有与LLL算法类似的近似保证,并且在实际性能上远远超过了当前的最佳水平。
该论文的代码仓库如链接所示
- 贡献:提出了一种新的格基约减算法,通过迭代应用精度管理技术,在递归算法结构中实现,并且展示了这种方法的稳定性。
- 性能:分析了算法的渐近行为,表明启发式运行时间为 O ( n ω ( C + n ) 1 + ϵ ) O(n^\omega(C + n)^{1+\epsilon}) O(nω(C+n)1+ϵ),其中 n n n是格的维度, ω ∈ ( 2 , 3 ] \omega \in (2, 3] ω∈(2,3]界定了大小约减、矩阵乘法和QR分解的成本, C C C界定了输入基 B B B条件数的对数。对于常见的应用,精度 p = O ( log ∥ B ∥ m a x ) p = O(\log \|B\|_{max}) p=O(log∥B∥max),算法的运行时间为 O ( n ω ( p + n ) 1 + ϵ ) O(n^\omega(p + n)^{1+\epsilon}) O(nω(p+n)1+ϵ)。
- 背景:格基约减是密码分析中的一个基本技术。LLL算法在时间上是多项式的,但大的指数使得该算法在实际中对于中等大小的格很快变得不可行。
- 现有算法:实践中常用的格基约减算法是L2算法,它通过精确管理精度来改进性能。
- 新算法:作者提出了一种新的递归变体的LLL算法,通过一种新颖的迭代策略来管理精度。
- 迭代压缩:开发了新的工具来支持算法的实现和分析,使用一种新的度量标准(称为格基的“drop”)来区分格基的约减。
在论文中,迭代压缩(Iterated Compression)是实现新格基约减算法的关键技术之一。通过迭代压缩来改进格基约减的过程。
迭代压缩的概念
迭代压缩是一种新的技术,用于在格基约减过程中管理精度和数值稳定性。它基于一个新的度量标准——格基的“drop”。这个度量标准与LLL算法中使用的Lovász条件类似,但适用于新的算法结构。
格基的“drop”
“drop”是迭代压缩过程中的一个关键参数,它不仅影响压缩策略和精度管理,还直接关系到算法的数值稳定性和效率。通过合理控制“drop”,算法可以在保持格基约简质量的同时,优化计算资源的使用,实现更快的格基约减。
格基的“drop”定义为:
- 给定一个秩为 n n n的格基 B B B,如果它是大小约减的,并且满足 drop ( B ) ≤ α n \text{drop}(B) \leq \alpha n drop(B)≤αn,则称 B B B是 α \alpha α-格基约减的。
- 格基的“drop”定义为格基轮廓(profile)中相邻区域之间的最大落差,轮廓是一个向量 ℓ ⃗ \vec{\ell} ℓ,其中 ℓ i = log ∥ b ⃗ i ∗ ∥ \ell_i = \log \|\vec{b}_i^*\| ℓi=log∥bi∗∥, b ⃗ i ∗ \vec{b}_i^* bi∗是第 i i i个Gram-Schmidt向量,“drop”衡量的是轮廓中不同区域的最大差异。
计算步骤
-
计算轮廓:首先,对于给定的格基 B B B,计算其轮廓 ℓ ⃗ \vec{\ell} ℓ。轮廓是一个向量,其中每个元素 ℓ i \ell_i ℓi 是对应Gram-Schmidt向量 b ⃗ i ∗ \vec{b}_i^* bi∗的对数范数。
-
寻找区间:确定轮廓中的所有区间 [ i , j ] [i, j] [i,j],其中 i i i 和 j j j 是轮廓中值变化的边界点。这些区间可以是连续的,也可以是基于某些特定条件(如值的突变)确定的。
-
计算区间差:对于每个区间 [ i , j ] [i, j] [i,j],计算该区间内的最大轮廓值和最小轮廓值之差。这可以通过遍历轮廓向量并记录每个区间的最大值和最小值来实现。
-
求和:将所有区间的差值相加,得到格基的“drop”。
作用:
通过控制“drop”的值,算法可以在保持格基几何属性的同时,减小计算中的数值误差,提高算法的数值稳定性和效率。
用于衡量格基在约减过程中的某种“下降”或“落差”,它对迭代压缩过程有着重要的影响。
在迭代压缩过程中,“drop”提供了一个量化的度量,用以判断何时停止压缩。它帮助算法决定在压缩过程中需要保留多少精度,以确保格基的约减质量。
-
影响迭代压缩的决策
- 压缩策略:“drop”的大小直接影响压缩策略的选择。如果“drop”较大,意味着格基中存在较大的“落差”,可能需要更多的压缩来减小这种差异,以保持格基的约简质量。
- 精度管理:“drop”的大小也决定了在压缩过程中需要保留的精度。较大的“drop”可能需要更高的精度来避免在压缩过程中丢失重要的信息,而较小的“drop”则可能允许较低的精度,从而减少计算复杂度。
-
控制数值稳定性
- 累积误差:在迭代压缩过程中,每次压缩都可能引入一些舍入误差。通过监控“drop”,算法可以控制这些累积误差,确保它们不会对最终结果产生过大的影响。
- 迭代次数:“drop”的大小也影响迭代压缩的次数。如果“drop”较大,可能需要更多的迭代来逐渐减小“drop”,直到达到满意的约简质量。
-
算法性能
- 效率:“drop”的监控有助于提高算法的效率。通过在“drop”较小时减少压缩的力度,算法可以避免不必要的计算,从而提高性能。
- 稳定性:通过控制“drop”,算法可以在保持数值稳定性的同时,减少因过度压缩而导致的不稳定因素。
算法伪代码
算法 1: Reduce
输入:格基
B
B
B的秩
n
n
n和约减质量
α
\alpha
α
输出:幺模矩阵
U
U
U,使得
B
U
BU
BU是
α
\alpha
α-格基约减的
- 当
drop
(
B
)
>
α
\text{drop}(B) > \alpha
drop(B)>α时:
- 对于投影子格索引 [ i : j ] [i: j] [i:j]在 { [ n / 4 : 3 n / 4 ] , [ 0 : n / 2 ] , [ n / 2 : n ] } \{[n/4: 3n/4], [0: n/2], [n/2: n]\} {[n/4:3n/4],[0:n/2],[n/2:n]}中:
- U k ← Reduce ( B [ i : j ] , α ′ ) U_k \leftarrow \text{Reduce}(B[i:j], \alpha') Uk←Reduce(B[i:j],α′)以提高约减质量 α ′ < α \alpha' < \alpha α′<α。
- B ← Compress ( B U k ) B \leftarrow \text{Compress}(BU_k) B←Compress(BUk)以减小条目大小
- 返回 U ← 累积所有之前的幺模变换 U \leftarrow \text{累积所有之前的幺模变换} U←累积所有之前的幺模变换
其中“Compress”函数是设计的关键,它负责实现迭代压缩,以确保数值稳定性。
算法 2: CompressLattice (压缩格基)
输入:格基
B
∈
Z
n
×
n
B \in \mathbb{Z}^{n \times n}
B∈Zn×n,精度参数
γ
≤
1
/
2
\gamma \leq 1/2
γ≤1/2,条件数上界
C
>
log
κ
(
B
)
C > \log \kappa(B)
C>logκ(B)
输出:压缩后的格基
B
^
\hat{B}
B^,幺模矩阵
U
U
U,对角矩阵
D
=
diag
(
2
d
1
,
…
,
2
d
n
)
D = \text{diag}(2^{d_1}, \ldots, 2^{d_n})
D=diag(2d1,…,2dn) 使得
B
^
≈
2
−
O
(
drop
(
B
)
+
n
)
γ
B
U
D
\hat{B} \approx_{2^{-O(\text{drop}(B)+n)}\gamma} BUD
B^≈2−O(drop(B)+n)γBUD
- 对 B B B进行QR分解,得到上三角矩阵 R R R 和正交矩阵 Q Q Q,使得 B = Q R B = QR B=QR。
- 从 R R R的对角线计算轮廓 ℓ ⃗ \vec{\ell} ℓ。
- 使用轮廓 ℓ ⃗ \vec{\ell} ℓ和 LLL约减中的技术计算整数缩放向量 d ⃗ \vec{d} d。
- 按 d ⃗ \vec{d} d缩放并四舍五入 R R R的条目至整数。
- 对缩放后的矩阵进行尺寸约减,得到压缩后的格基 B ^ \hat{B} B^和幺模矩阵 U U U。
- 返回 B ^ \hat{B} B^, U U U,和 D D D 。
算法 3: ReduceSublattice (约减子格)
输入:压缩后的格基
B
(
k
)
∈
Z
n
×
n
B^{(k)} \in \mathbb{Z}^{n \times n}
B(k)∈Zn×n,子格索引
1
≤
i
<
j
≤
n
1 \leq i < j \leq n
1≤i<j≤n,约减质量
α
(
⋅
)
\alpha(\cdot)
α(⋅),近似质量
γ
≤
2
−
1
\gamma \leq 2^{-1}
γ≤2−1,约减函数
LatRed
\text{LatRed}
LatRed
输出:压缩后的格基
B
(
k
+
1
)
B^{(k+1)}
B(k+1),幺模矩阵
U
U
U,和对角矩阵
D
D
D使得
B
(
k
+
1
)
≈
2
−
O
(
drop
(
B
(
k
+
1
)
)
+
n
)
γ
B
(
k
)
U
D
B^{(k+1)} \approx{2^{-O(\text{drop}(B(k+1))+n)}\gamma} B^{(k)}UD
B(k+1)≈2−O(drop(B(k+1))+n)γB(k)UD且
drop
(
B
[
i
:
j
]
(
k
+
1
)
)
≤
(
α
(
j
−
i
)
+
γ
)
(
j
−
i
)
\text{drop}(B^{(k+1)}_{[i:j]}) \leq (\alpha(j-i) + \gamma)(j-i)
drop(B[i:j](k+1))≤(α(j−i)+γ)(j−i)
- B sub ′ , U sub ′ , D sub ← CompressLattice ( B ( k ) [ i : j ] , γ ) B'_{\text{sub}}, U'_{\text{sub}}, D_{\text{sub}} \leftarrow \text{CompressLattice}(B(k)[i:j], \gamma) Bsub′,Usub′,Dsub←CompressLattice(B(k)[i:j],γ)
- U sub ′ ′ ← LatRed ( B sub ′ , α , γ ) U''_{\text{sub}} \leftarrow \text{LatRed}(B'_{\text{sub}}, \alpha, \gamma) Usub′′←LatRed(Bsub′,α,γ)
- U ′ ← diag ( I i − 1 , U sub ′ D sub U sub ′ ′ D sub − 1 , I n − j ) U' \leftarrow \text{diag}(I_{i-1}, U'_{\text{sub}}D_{\text{sub}}U''_{\text{sub}}D^{-1}_{\text{sub}}, I_{n-j}) U′←diag(Ii−1,Usub′DsubUsub′′Dsub−1,In−j)
- B ( k + 1 ) , U ′ ′ , D ← CompressLattice ( B ( k ) U ′ , γ ) B^{(k+1)}, U'', D \leftarrow \text{CompressLattice}(B^{(k)}U', \gamma) B(k+1),U′′,D←CompressLattice(B(k)U′,γ)
- U ← U ′ U ′ ′ U \leftarrow U'U'' U←U′U′′
- 返回 B ( k + 1 ) B^{(k+1)} B(k+1), U U U,和 D D D。
迭代压缩的分析
论文中还提供了对迭代压缩过程的详细分析,包括:
- 压缩函数的设计:压缩函数的设计对于实现数值稳定性至关重要。它不仅仅是简单地取最显著的位,而是更复杂。
- 累积舍入误差的控制:算法迭代压缩过程,因此需要额外注意以确保累积舍入误差保持在可控范围内。
- 压缩基的条目大小和精度的界定:使用摄动理论来界定压缩基的条目大小和迭代压缩的精度。
压缩函数是实现格基约减算法的关键部分,它负责将格基转换为具有相似几何属性但具有更小条目和更好数值稳定性的新的格基。
压缩函数的目的
- 减小条目大小:压缩函数旨在减小格基中向量的条目大小,这有助于提高后续计算的数值稳定性。
- 保持几何属性:在减小条目大小的同时,压缩函数需要保持格基的几何属性,确保压缩后的格基在结构上与原格基相似。
- 提高数值稳定性:通过减小条目大小,减少在后续计算中可能出现的舍入误差和数值溢出问题。
压缩函数的工作流程
-
QR分解:首先,对格基 B B B进行QR分解,得到一个上三角矩阵 R R R和一个正交矩阵 Q Q Q,使得 B = Q R B = QR B=QR。这一步是为了获得一个具有较小条目的上三角矩阵。
-
轮廓分析:计算格基 B B B的轮廓(profile),即计算每个Gram-Schmidt向量的对数范数,并形成一个向量 ℓ ⃗ \vec{\ell} ℓ。
-
计算缩放因子:根据轮廓 ℓ ⃗ \vec{\ell} ℓ,计算一个缩放向量 d ⃗ \vec{d} d,该向量用于调整格基中每个向量的缩放比例,以保持格基的几何属性。
-
缩放和舍入:使用缩放向量 d ⃗ \vec{d} d对QR分解得到的上三角矩阵 R R R进行缩放,然后将结果舍入到最近的整数,得到一个新的整数格基 B ^ \hat{B} B^。
-
尺寸约简:对缩放和舍入后的格基 B ^ \hat{B} B^进行尺寸约减(size reduction),确保得到的格基是数值稳定的,并且满足格基约减算法的要求。
-
累积幺模变换:在压缩过程中,记录所有执行的幺模变换(unimodular transformations),这些变换将在最终的格基约减结果中被累积起来。
压缩函数的关键点
- 迭代过程:压缩函数可能需要多次迭代,以确保累积的舍入误差保持在可控范围内。
- 精度管理:压缩函数需要精心设计,以确保在减小条目大小的同时,不会损失过多的精度。
- 稳定性分析:使用摄动理论来界定压缩基的条目大小和迭代压缩的精度。
通过这种压缩函数,论文中的格基约简算法能够在保持格基几何属性的同时,减小计算中的数值误差,提高算法的效率和稳定性。这种方法的创新之处在于它结合了递归结构和精度管理,以实现在实际中更快的格基约简。
以下是该论文中出现的公式:
公式 1: 格基的轮廓 (Profile) 定义
ℓ
⃗
=
(
log
∥
b
⃗
1
∗
∥
,
log
∥
b
⃗
2
∗
∥
,
…
,
log
∥
b
⃗
n
∗
∥
)
\vec{\ell} = (\log \|\vec{b}_1^*\|, \log \|\vec{b}_2^*\|, \ldots, \log \|\vec{b}_n^*\|)
ℓ=(log∥b1∗∥,log∥b2∗∥,…,log∥bn∗∥)
解释:这个公式定义了格基的轮廓(profile),它是一个向量,其中的每个元素
ℓ
i
\ell_i
ℓi是对应Gram-Schmidt向量
b
⃗
i
∗
\vec{b}_i^*
bi∗的欧几里得范数的对数。这个轮廓向量用于描述格基中向量的大小分布,是分析格基约减行为和设计压缩策略的基础。
公式 2: 格基的“drop”定义
drop
(
B
)
=
∑
i
=
1
n
−
1
[
max
i
≤
j
≤
n
ℓ
j
−
min
1
≤
j
≤
i
ℓ
j
]
\text{drop}(B) = \sum_{i=1}^{n-1} \left[ \max_{i \leq j \leq n} \ell_j - \min_{1 \leq j \leq i} \ell_j \right]
drop(B)=∑i=1n−1[maxi≤j≤nℓj−min1≤j≤iℓj]
解释:这个公式定义了格基的“drop”,它衡量了格基轮廓中相邻区域之间的最大落差。具体来说,对于轮廓中的每个区间
[
i
,
j
]
[i, j]
[i,j],计算该区间内的最大值和最小值之差,并将所有这些差值相加。这个量用于控制压缩过程中的精度,确保压缩后的格基在结构上与原格基相似,同时减小计算中的数值误差。
公式 3: α \alpha α-格基约减条件
B
is
α
-lattice-reduced if drop
(
B
)
≤
α
n
B \text{ is } \alpha\text{-lattice-reduced if } \text{drop}(B) \leq \alpha n
B is α-lattice-reduced if drop(B)≤αn
解释:这个公式定义了一个格基是
α
\alpha
α-格基约减的条件,即如果格基的“drop”小于或等于
α
n
\alpha n
αn,则称该格基是
α
\alpha
α-格基约减的。这个条件用于衡量格基约减的质量,是算法中判断何时停止约减过程的关键标准。
公式 4: 算法运行时间的渐近行为
Running time
=
O
(
n
ω
(
C
+
n
)
1
+
ϵ
)
\text{Running time} = O(n^\omega(C + n)^{1+\epsilon})
Running time=O(nω(C+n)1+ϵ)
解释:这个公式描述了算法的渐近运行时间,其中
n
n
n是格的维度,
ω
∈
(
2
,
3
]
\omega \in (2, 3]
ω∈(2,3] 是矩阵乘法的复杂度指数,
C
C
C 是输入基条件数的对数,
ϵ
\epsilon
ϵ是一个正的小常数。这个公式用于分析和比较新算法与现有算法(如LLL算法)的效率。
公式 5: 轮廓压缩和轮廓“drop”的关系
spread
(
ℓ
⃗
^
)
=
drop
(
ℓ
⃗
)
+
O
(
n
)
\text{spread}(\hat{\vec{\ell}}) = \text{drop}(\vec{\ell}) + O(n)
spread(ℓ^)=drop(ℓ)+O(n)
解释:这个公式说明了压缩后的轮廓的扩散(spread)与原始轮廓的“drop”之间的关系。它表明通过压缩操作,可以控制格基的扩散,这对于保证算法的数值稳定性和效率至关重要。
公式 6: Potential: Π ( B ) = ∑ i = 1 n ( n − i + 1 ) ℓ i \Pi(B) = \sum_{i=1}^{n} (n - i + 1) \ell_i Π(B)=∑i=1n(n−i+1)ℓi
解释:
- B B B 是一个秩为 n n n的格基。
- ℓ ⃗ \vec{\ell} ℓ是格基 B B B 的轮廓(profile),其中 e l l i = log ∥ b ⃗ i ∗ ∥ ell_i = \log \|\vec{b}_i^*\| elli=log∥bi∗∥, b ⃗ i ∗ \vec{b}_i^* bi∗ 是第 i i i 个Gram-Schmidt向量。
- ( \Pi(B) ) 是格基 B B B 的“Potential”,它是一个衡量格基“能量”或“分散度”的量。
这个公式的计算方法如下:
- 对于轮廓中的每个元素 ℓ i \ell_i ℓi,将其乘以一个权重 ( n − i + 1 ) (n - i + 1) (n−i+1)。
- 将所有加权的轮廓值相加,得到格基的“Potential”。
“Potential”的概念在论文中用于分析格基约减过程中的行为。具体来说:
- 在格基约减过程中,算法的目标是减少格基中向量的长度,这通常会导致“Potential”的减少。
- 通过监控“Potential”的变化,可以估计格基约减的进度和剩余工作量。
- “Potential”的减少也与格基中向量精度的要求有关,因为较大的“Potential”可能需要更高的精度来准确表示格基中的向量。
“Potential”是衡量格基约减过程中整体进展的一个有用工具,它帮助算法决定何时停止约减过程,以确保得到的格基既约减又数值稳定。

4311

被折叠的 条评论
为什么被折叠?



