本篇主要介绍学习格密码必备的格论知识,以下内容为理解格基规约算法必备的数学基础。
文章目录
欧氏空间
想理解格基约化算法,首先必须理解施密特正交化。有了向量空间,就可以在空间中随意对向量进行数乘和加减法(怎么做都不会跑出这个空间)。再定义向量的长度和夹角,施密特正交化就显得很自然了。
欧氏空间和范数
向量空间
向量空间的定义保证了向量的数乘和加减法有很好的性质。具体定义略,可参阅蓝以中的《高等代数简明教程》等。
欧氏空间
欧氏空间:设 V \,V\, V是实数域 R \,\mathbb{R}\, R上的向量空间。如果 V \,V\, V内任意两个向量 α , β \,\alpha,\ \beta\, α, β都按某一法则对应于 R \mathbb{R} R内一个唯一确定的数,记作 ⟨ α , β ⟩ \,\langle\alpha,\beta\rangle\, ⟨α,β⟩,且满足以下三个条件:
- 对任意
k
1
,
k
2
∈
R
\,k_1,k_2\in\mathbb{R}\,
k1,k2∈R和任意
α
1
,
α
2
,
β
∈
V
\,\alpha_1,\alpha_2,\beta\in V\,
α1,α2,β∈V,有
⟨ k 1 α 1 + k 2 α 2 , β ⟩ = k 1 ⟨ α 1 , β ⟩ + k 2 ⟨ α 2 , β ⟩ ; \left\langle{k_1\alpha}_1+k_2\alpha_2,\beta\right\rangle=\ k_1\left\langle\alpha_1,\beta\right\rangle+\ k_2\left\langle\alpha_2,\beta\right\rangle; ⟨k1α1+k2α2,β⟩= k1⟨α1,β⟩+ k2⟨α2,β⟩; - 对任意
α
,
β
∈
V
\,\alpha,\ \beta\in V\,
α, β∈V,有
⟨ α , β ⟩ = ⟨ β , α ⟩ ; \left\langle\alpha,\beta\right\rangle=\ \langle\beta,\alpha\rangle; ⟨α,β⟩= ⟨β,α⟩; - (非退化性)对任意 α ∈ V \,\alpha\in V\, α∈V,有 ⟨ α , α ⟩ ≥ 0 \,\left\langle\alpha,\alpha\right\rangle \geq 0\, ⟨α,α⟩≥0,且 ⟨ α , α ⟩ = 0 \,\left\langle\alpha,\alpha\right\rangle = 0\, ⟨α,α⟩=0的充分必要条件是 α = 0 , \,\alpha=0, α=0,
则称 ⟨ α , β ⟩ \,\left\langle\alpha,\beta\right\rangle\, ⟨α,β⟩为向量 α , β \,\alpha,\ \beta\, α, β的内积。 V V\, V称为欧几里得空间,简称欧氏空间。
内积是一种具有非退化性的双线性映射,与密码学中常用的双线性对非常类似。
取 R m \mathbb{R}^{m} \, Rm的内积为向量的点乘,可以验证向量空间 R m \, \mathbb{R}^m\, Rm是欧氏空间。
对于 R m \mathbb{R}^m Rm中的向量 α \,\alpha\, α,定义其欧氏范数为 ∥ α ∥ = ⟨ α , α ⟩ \, \left\| \alpha \right\| = \sqrt{\left\langle\alpha,\alpha\right\rangle} \, ∥α∥=⟨α,α⟩。实际上,欧氏范数就是平时所说的向量长度。
向量的欧氏范数计算方法是对其各分量的平方和开方,因此也称 2 − \, 2 - \, 2−范数。格密码中还会用到 ∞ − \, \infty \,- ∞−范数。在本篇中,“范数”默认指欧氏范数。
子空间的正交补
正交补:设 V \,V\, V是一个 n \,n\, n维欧氏空间, M \,M\, M是它的一个子空间,易知 M \,M\, M关于 V \,V\, V的内积也成一欧氏空间。定义 M ⊥ ⊂ V \,M^\bot\!\subset V\, M⊥⊂V为 M ⊥ = { α ∈ V : ∀ β ∈ M , ⟨ α , β ⟩ = 0 } , M^\bot=\left\{\alpha\in V:\forall\beta\in M,\left\langle\alpha,\beta\right\rangle=0\right\}, M⊥={α∈V:∀β∈M,⟨α,β⟩=0},称 M ⊥ \,M^\bot\, M⊥为 M \,M\, M的正交补。 M ⊥ \,M^\bot\, M⊥关于 V \,V\, V中向量的加法及数乘运算显然封闭,故 M ⊥ \,M^\bot\, M⊥也为 V \,V\, V的子空间。
为了从几何的角度理解正交补,不妨思考一下 R 2 \,\mathbb{R}^{2}\, R2和 R 3 \,\mathbb{R}^{3}\, R3中过原点的直线、平面的正交补分别是什么。
施密特正交化
在欧氏空间
R
m
\,\mathbb{R}^m\,
Rm中有施密特正交化方法。施密特正交化方法是由一个线性无关向量组得到一个正交向量组的方法,并且输入的向量组和输出的向量组张成的是同一个向量空间。格基约化算法的思路与施密特正交化相似并且算法中会调用施密特正交化,因此理解向量空间中的施密特正交化方法是理解格基约化算法的一个关键。设
b
1
,
…
,
b
n
\,\mathbf{b}_1,\ldots,\mathbf{b}_n\,
b1,…,bn 为
R
m
\,\mathbb{R}^m\,
Rm上一组线性无关的向量,施密特正交化方法如下:
令
b
1
∗
=
b
1
,
\,\mathbf{b}_1^\ast=\mathbf{b}_1,
b1∗=b1, 依次计算
b
i
∗
=
b
i
−
∑
j
=
1
i
−
1
μ
i
,
j
b
j
∗
,
i
>
1
\, \mathbf{b}_i^\ast=\mathbf{b}_i-\sum_{j=1}^{i-1}{\mu_{i,j}\mathbf{b}_j^\ast},\quad i>1\,
bi∗=bi−∑j=1i−1μi,jbj∗,i>1,其中
μ
i
,
j
=
⟨
b
i
,
b
j
∗
⟩
⟨
b
j
∗
,
b
j
∗
⟩
,
1
≤
j
\,\mu_{i,j}=\frac{\left\langle\mathbf{b}_i,\mathbf{b}_j^\ast\right\rangle}{\left\langle\mathbf{b}_j^\ast,\mathbf{b}_j^\ast\right\rangle}\ ,\ 1\le j\,
μi,j=⟨bj∗,bj∗⟩⟨bi,bj∗⟩ , 1≤j。那么
b
1
∗
,
⋯
,
b
n
∗
\,\mathbf{b}_1^\ast,\cdots,\mathbf{b}_n^\ast\,
b1∗,⋯,bn∗就是
R
m
\,\mathbb{R}^m\,
Rm上的一组正交向量。
核心思路:先选 b 1 ∗ = b 1 \,\mathbf{b}_1^\ast=\mathbf{b}_1 b1∗=b1作为基准,然后将 b 2 \, \mathbf{b}_2 \, b2分解为与 b 1 \, \mathbf{b}_1 \, b1平行和正交的两个分量,只保留正交的那个分量。
更进一步的理解是, b i ∗ \mathbf{b}_i^\ast\, bi∗是 b i \, \mathbf{b}_i\, bi在 ∑ j = 1 i − 1 R b j = ∑ j = 1 i − 1 R b j ∗ \, \sum_{j=1}^{i-1}{\mathbb{R}\mathbf{b}}_j=\sum_{j=1}^{i-1}{\mathbb{R}\mathbf{b}_j^\ast} ∑j=1i−1Rbj=∑j=1i−1Rbj∗ 的正交补上的投影。理解这一点才能搞懂格基约化算法的具体细节和优化。
格论基础
格的相关概念
格和格基
格:给定
n
n
n个线性无关的向量
b
1
,
…
,
b
n
∈
R
m
\mathbf{b}_1,\ldots,\mathbf{b}_n\in\mathbb{R}^m
b1,…,bn∈Rm,则称其整系数线性组合构成的集合
L
=
∑
i
=
1
n
b
i
⋅
Z
=
{
∑
i
=
1
n
c
i
b
i
:
c
i
∈
Z
}
\mathcal{L}=\sum_{i=1}^{n}\mathbf{b}_i\cdot\mathbb{Z}=\left\{\sum_{i=1}^{n}{c_i\mathbf{b}_i}:c_i\in\mathbb{Z}\right\}
L=i=1∑nbi⋅Z={i=1∑ncibi:ci∈Z}
为
R
m
\mathbb{R}^m
Rm上的格。我们称
L
\mathcal{L}
L的秩为
n
n
n,
L
\mathcal{L}
L的维数为
m
m
m。我们称上述格的定义中出现的
b
1
,
…
,
b
n
\mathbf{b}_1,\ldots,\mathbf{b}_n
b1,…,bn为格
L
\mathcal{L}
L的一组基,简称格基。
记
B
=
(
b
1
,
…
,
b
n
)
\ \mathbf{B}={(\mathbf{b}}_1,\ldots,\mathbf{b}_n)
B=(b1,…,bn),称
B
\mathbf{B}
B为基矩阵,那么格
L
\mathcal{L}
L可以进一步表示为
L
=
∑
i
=
1
n
b
i
⋅
Z
=
{
B
x
:
x
∈
Z
n
}
\mathcal{L}=\sum_{i=1}^{n}\mathbf{b}_i\cdot\mathbb{Z}=\{\mathbf{B}x:x\in\mathbb{Z}^n\}
L=∑i=1nbi⋅Z={Bx:x∈Zn}
可以验证
L
\, \mathcal{L}\,
L为
R
m
\,\mathbb{R}^{m}\,
Rm的离散加法子群。与向量空间
R
m
\mathbb{R}^m
Rm类似地,格
L
\mathcal{L}
L的基不止一个。事实上[3],任意一个秩为1的格有两组基,而秩大于等于2的格有无数组基。取格
L
\mathcal{L}
L的任意两组基,一组基矩阵可由另一组基矩阵左乘一个幺模矩阵
U
\mathbf{U}
U得到,
U
\mathbf{U}
U是两个格基之间的过渡矩阵。
基本域和体积(volume)
称格 L \mathcal{L} L的一组格基围成的基本平行体为格 L \mathcal{L} L的基本域,其严谨定义如下。
基本域:设
L
\mathcal{L}
L为一个
n
n
n维的格,且
L
\mathcal{L}
L的一组基为
v
1
,
v
2
,
…
,
v
n
\mathbf{v}_1,\mathbf{v}_2,\ldots,\mathbf{v}_n
v1,v2,…,vn。则格
L
\mathcal{L}
L(就格基
v
1
,
v
2
,
…
,
v
n
\mathbf{v}_1,\mathbf{v}_2,\ldots,\mathbf{v}_n
v1,v2,…,vn而言)的基本域
F
\mathcal{F}
F为
F
(
v
1
,
…
,
v
n
)
=
{
t
1
v
1
+
t
2
v
2
+
⋯
+
t
n
v
n
:
0
≤
t
i
<
1
}
\mathcal{F}\left(\mathbf{v}_1,\ldots,\mathbf{v}_n\right)=\left\{t_1\mathbf{v}_1+t_2\mathbf{v}_2+\cdots+t_n\mathbf{v}_n:0\le t_i<1\right\}
F(v1,…,vn)={t1v1+t2v2+⋯+tnvn:0≤ti<1}
之后定义格
L
\mathcal{L}
L的行列式如下。
行列式:设
L
\mathcal{L}
L为一个
n
n
n维的格,其基本域为
F
\mathcal{F}
F,则称
F
\mathcal{F}
F的体积(volume)为格
L
\mathcal{L}
L的行列式,记作
det
(
L
)
=
V
o
l
(
F
)
\det{\left(\mathcal{L}\right)}=\mathrm{Vol}\left(\mathcal{F}\right)
det(L)=Vol(F)。设
B
=
(
b
1
,
…
,
b
n
)
为
L
\mathbf{B}={(\mathbf{b}}_1,\ldots,\mathbf{b}_n)为\mathcal{L}
B=(b1,…,bn)为L的一组基,根据
det
(
L
)
\det{\left(\mathcal{L}\right)}
det(L)的几何含义可知
det
(
L
)
=
∣
det
(
B
)
∣
\det{\left(\mathcal{L}\right)}=\left|\det{\left(\mathbf{B}\right)}\right|
det(L)=∣det(B)∣。由此易知,虽然
det
(
L
)
\det{\left(\mathcal{L}\right)}
det(L)被定义
F
\mathcal{F}
F的体积,且
F
\mathcal{F}
F与选取的格基有关,但**
det
(
L
)
\det{\left(\mathcal{L}\right)}
det(L)是格
L
\mathcal{L}
L的一个不变量**。即任意选取格
L
\mathcal{L}
L的基本域(或者说选取格
L
\mathcal{L}
L的任何一个格基),
det
(
L
)
\det{\left(\mathcal{L}\right)}
det(L)的值都相同。这也是我们将其记为
det
(
L
)
\det{\left(\mathcal{L}\right)}
det(L)的理由:其值只与格
L
\mathcal{L}
L本身有关。
整格(integral lattice)
密码学中的运算对象基本都是整数,因此实际应用中往往使用整格(integral lattice),其定义如下:若格 L \mathcal{L} L中任意向量的坐标,其每个分量均为整数,则称格 L \mathcal{L} L为整数格。当 L \mathcal{L} L为整格时, L \mathcal{L} L是 Z m \mathbb{Z}^m Zm的加法子群。
整格有时候也称为整数格(integer lattice)。
格上的短向量
格上的最短向量问题(SVP)是格密码方案安全性基于的难题,也是在格密码和传统公钥密码分析时常使用的问题。SVP及近似SVP问题正是格基约化算法求解的问题。
为了更好地描述格上短向量的长度,首先给出逐次最小长度的概念。
逐次最小长度(successive minima)
逐次最小长度:设
L
\mathcal{L}
L是
R
m
\mathbb{R}^m
Rm中秩为
n
n
n的格,设
λ
1
,
…
,
λ
n
∈
R
\lambda_1,\ldots,\lambda_n\in\mathbb{R}
λ1,…,λn∈R,若
λ
i
(
1
≤
i
≤
n
)
\lambda_{i}\left(1\le i\le n\right)
λi(1≤i≤n)为满足以下条件的最小值:
存在
i
i
i个线性无关的的向量
v
1
,
…
,
v
i
∈
L
\mathbf{v}_1,\ldots,\mathbf{v}_i\in\mathcal{L}
v1,…,vi∈L,使得
v
j
≤
λ
i
(
1
≤
j
≤
i
)
v_j ≤λ_i (1≤j≤i)
vj≤λi(1≤j≤i)
则称
λ
1
,
…
,
λ
n
\lambda_1,\ldots,\lambda_n
λ1,…,λn为
L
\mathcal{L}
L的逐次最小长度。为了表明
λ
i
\lambda_i
λi是格
L
\mathcal{L}
L的逐次最小长度,记
λ
i
=
λ
i
(
L
)
\lambda_i=\lambda_i(\mathcal{L})
λi=λi(L)。
用通俗的语言来讲,
λ
1
\lambda_1
λ1是
L
\mathcal{L}
L中非零最短向量的长度,
λ
2
\lambda_2
λ2是所有非零向量长度中(并列)第二小的长度。这就是逐次最小长度的意义。
短向量的长度
为了让读者对 λ 1 \lambda_1 λ1的大小有一个认识,这里给出一系列相关定理来描述 λ 1 \lambda_1 λ1的上界。首先给出Minkowski定理作为引理。
Minkowski定理:设 L \mathcal{L} L是 R m \mathbb{R}^m Rm中的格, S ⊂ R m S \subset \mathbb{R}^m S⊂Rm是一个关于原点对称的可测凸集,若 S S S的体积为 V o l ( S ) ≥ 2 m d e t ( L ) \mathrm{Vol}\left(S\right)\geq2^m\mathrm{det}\left(\mathcal{L}\right) Vol(S)≥2mdet(L),则 S ∩ L \, S\cap\mathcal{L}\, S∩L中有非零向量。
解读:看起来有些高深,但是在 L = Z 2 \mathcal{L} = \mathbb{Z}^{2} L=Z2中是显然的。要想让对称的凸集 S S S尽量大,且 S ∩ L = 0 \ S\cap\mathcal{L}\ = \mathbf{0} S∩L =0,那么正方形应该是最好的选择,此时 V o l ( S ) = 2 2 d e t ( L ) \mathrm{Vol}\left(S\right) = 2^2\mathrm{det}\left(\mathcal{L}\right) Vol(S)=22det(L)。类似地,在 L = Z m \mathcal{L} = \mathbb{Z}^{m} L=Zm选取超立方体是最好的。照此思路, L \mathcal{L} L为整数格时Minkowski定理也是很显然的。这样就理解了密码学所用的格中该定理成立。
利用Minkowski定理可证明下面的Minkowski第一定理(一些文献称其为Hermite定理)。
Minkowski第一定理:设
L
\mathcal{L}
L是
R
m
\mathbb{R}^m
Rm中秩为
n
n
n的格,则
λ
1
(
L
)
≤
n
d
e
t
(
L
)
1
/
n
\lambda_1\left(\mathcal{L}\right) \leq \sqrt n\mathrm{det}(L)^{1/n}
λ1(L)≤ndet(L)1/n。称
n
d
e
t
(
L
)
1
/
n
\sqrt n\mathrm{det}(L)^{1/n}
ndet(L)1/n为
λ
1
(
L
)
\lambda_1\left(\mathcal{L}\right)
λ1(L)的Minkowski’s bound。
解读:如果 L = Z n \mathcal{L} = \mathbb{Z}^{n} L=Zn,那么 d e t ( L ) 1 / n \mathrm{det}(L)^{1/n} det(L)1/n就是超立方体 S S S的边长,而 n d e t ( L ) 1 / n \sqrt n\mathrm{det}(L)^{1/n} ndet(L)1/n就是它的对角线长度。由于对角线的另一端就是一个格点,因此 λ 1 ( L ) ≤ n d e t ( L ) 1 / n \lambda_1\left(\mathcal{L}\right) \leq \sqrt n\mathrm{det}(L)^{1/n} λ1(L)≤ndet(L)1/n。
以上两个解读参考了Steven Yue的笔记,笔记的这部分写的很好推荐看一下。
对于
λ
1
(
L
)
\lambda_1\left(\mathcal{L}\right)
λ1(L),我们还能得到比Minkowski’s bound更好的理论上界。下面给出Hermite因子的概念。
Hermite因子:给定格的维度
n
n
n,定义Hermite因子
γ
n
∈
R
\gamma_n\in\mathbb{R}
γn∈R为满足以下条件的最小值:
对于任意维度为
n
n
n的格
L
\mathcal{L}
L,存在
v
∈
L
\, \mathbf{v}\in\mathcal{L}\,
v∈L满足
∥
v
∥
2
≤
γ
n
det
(
L
)
2
/
n
\ \left\|\mathbf{v}\right\|^{2} ≤γ_{n}\det{(L)}^{2/n}
∥v∥2≤γndet(L)2/n。称
γ
n
d
e
t
(
L
)
1
/
n
\sqrt{\gamma_n}\mathrm{det}\left(\mathcal{L}\right)^{1/n}
γndet(L)1/n为
λ
1
(
L
)
\ \lambda_1\left(\mathcal{L}\right) \,
λ1(L)的Hermite bound。
根据定义可知,Hermite因子的大小只与
n
n
n有关,目前我们只知道
γ
n
\gamma_n
γn在
1
≤
n
≤
8
1\le n\le 8
1≤n≤8 和
n
=
24
n=24
n=24 时的精确值:
γ
2
2
=
4
3
,
γ
3
3
=
2
,
γ
4
4
=
4
,
γ
5
5
=
8
,
γ
6
6
=
64
3
,
γ
7
7
=
64
,
γ
8
8
=
256
,
γ
24
=
4
\gamma_2^2=\frac{4}{3},\gamma_3^3=2,\gamma_4^4=4,\gamma_5^5=8,\gamma_6^6=\frac{64}{3},\gamma_7^7=64,\gamma_8^8=256,\gamma_{24}=4
γ22=34,γ33=2,γ44=4,γ55=8,γ66=364,γ77=64,γ88=256,γ24=4
在格密码学中我们更关心
n
n
n较大
(
n
>
200
)
(n > 200)
(n>200)时
γ
n
\gamma_n
γn的值,此时
γ
n
\gamma_n
γn满足
n
2
π
e
≤
γ
n
≤
n
π
e
.
\ \frac{n}{2\pi e}\le\gamma_n\le\frac{n}{\pi e} \ .
2πen≤γn≤πen .
由Hermite因子能够得到比Minkowski’s bound更精确的
λ
1
\lambda_1
λ1上界。以维度为
n
=
2
n=2
n=2的格
L
\mathcal{L}
L为例,Minkowski’s bound告诉我们
λ
1
(
L
)
<
2
d
e
t
(
L
)
1
/
2
\ \lambda_{1}\left(\mathcal{L}\right)<\sqrt2\mathrm{det}(L)^{1/2}
λ1(L)<2det(L)1/2 ,而由Hermite因子可得
λ
1
(
L
)
<
4
/
3
d
e
t
(
L
)
1
/
2
\lambda_{1} \left(\mathcal{L}\right) < \sqrt{4/3} \mathrm{det}\left(\mathcal{L}\right)^{1/2}
λ1(L)<4/3det(L)1/2。
下面的高斯启发函数与Hermite因子的下界很好地对应了起来。
高斯启发函数(Gaussian Heuristic): G H ( L ) = n 2 π e d e t ( L ) 1 / n GH(\mathcal{L})= \sqrt{\frac{n}{2\pi e}}\mathrm{det}(\mathcal{L})^{1/n} GH(L)=2πendet(L)1/n
上述GH函数只能用于估计高维格的
λ
1
(
L
)
\lambda_1\left(\mathcal{L}\right)
λ1(L),在低维格中有另一个公式。然而低维格一般只在公钥密码分析中用的比较多,并且很多公钥密码分析中采用的是Minkowski’s bound作为假设。因此这里不给出(其实就是不想起敲公式了) ,具体可以看An Introduction to Mathematical Cryptography的相关小节。
我们往往不知道某个高维格的 λ 1 ( L ) \, \lambda_1\left(\mathcal{L}\right)\, λ1(L)到底是多少,因此我们用 G H ( L ) GH(\mathcal{L}) GH(L)作为参考。在[SVP Challenge (latticechallenge.org)]中,若格基中最短向量的范数小于 1.05 G H ( L ) 1.05GH(\mathcal{L}) 1.05GH(L),就视为成功求解了SVP。
如果以上内容还有疑问,可以看看 An Introduction to Mathematical Cryptography 这本书的相关章节,也可以看看这个视频:数学潜水艇:初等数论、初等群论
参考资料
-
蓝以中. 高等代数简明教程.下册, 2002.
-
王小云, 王明强, 孟宪萌. 公钥密码学的数学基础, 2013.
-
Hoffstein J , Pipher J C , Silverman J H . An Introduction to Mathematical Cryptography, 2014.
-
Galbraith S D . Mathematics of Public Key Cryptography: Lattices. 2012.