格密码(Lattice-based Cryptography)
Background
为什么要引入格密码?
在经典计算机上,质因数分解是一个非常困难的问题,特别是对于非常大的整数。质因数分解的目标是将一个大的整数分解为其素因数的乘积。例如,对于整数N,我们要找到素数p和q,使得N = p * q。对于经典计算机而言,随着整数N的位数增加,质因数分解的计算复杂度急剧增加,从而变得非常耗时。
然而,彼得·肖尔的Shor算法却可以在量子计算机上以多项式时间复杂度完成质因数分解。具体而言,Shor算法的时间复杂度是O((log N)^3),其中N是要分解的整数的位数。这意味着,对于足够大的整数N,Shor算法在量子计算机上能够以极快的速度完成质因数分解,而经典计算机则无法在合理的时间内完成相同的任务。
Shor算法的出现引起了密码学领域的轰动,因为目前广泛使用的非对称加密算法(如RSA)依赖于大数分解的困难性。一旦量子计算机发展到足够强大的程度,它们可能会破解目前被认为是安全的加密算法,从而对信息安全造成严重威胁。
格基密码学的主要目标是提供一种在量子计算机出现时仍然安全的加密和签名方案。它利用了格的结构和性质,这些结构可以看作是高维空间中的向量组成的网格。这些向量可以用来表示一些复杂的数学问题,这些问题在传统计算机上难以解决,在量子计算机上也是计算困难的。
总结
- 格密码学是指利用格的概念或安全性证明来构造密码学原语的方法。
- 格密码学是后量子密码学的重要候选方案,因为它们可以抵抗经典和量子计算机的攻击。
- 格密码学的安全性通常基于一些格难题,如最短向量问题(SVP)和带误差的学习问题(LWE)。
Mathematical background
什么是格?
在抽象代数的课程当中,我们已经对群、环、域这些代数结构有了一定的了解。类似地,**格(Lattice)**也是一种代数结构。下面是wiki中对格的定义:
在]数学中,格是其非空有限子集都有一个上确界(称为并)和一个下确界(称为交)的偏序集合(poset)。
因为两个定义是等价的,格理论从序理论和泛代数二者提取内容。半格包括了格,依次包括海廷代数和布尔代数。这些"格样式"的结构都允许序理论和抽象代数的描述。
概念理解
-
格的集合:考虑一个集合S,其中的元素是某种类型的对象,而且S中的元素可以与其他元素进行比较。
-
偏序关系:格的核心特性是偏序关系:定义了S中的元素之间的一种顺序或等级关系。偏序关系通常表示为≤(小于等于)符号。这个关系需要满足以下性质:
- 自反性:对于S中的任何元素a,a ≤ a(每个元素都小于或等于自己)。
- 反对称性:如果a ≤ b且b ≤ a,则a和b相等。
- 传递性:如果a ≤ b且b ≤ c,则a ≤ c(如果a小于等于b,b小于等于c,那么a小于等于c)。
-
上确界和下确界:在一个格中,对于任意元素a和b,存在它们的最小公共上界(上确界)和最大公共下界(下确界),通常分别表示为a∨b和a∧b。上确界是格中大于等于a和b的元素中最小的一个,而下确界是小于等于a和b的元素中最大的一个。
-
格的性质:格可以是有限的或无限的。有限格通常表示为有限集合上的偏序关系,而无限格可以是无限集合上的。
一个常见的例子是整数集合Z上的自然偏序关系≤,其中a ≤ b表示a小于等于b。在这种情况下,Z中的上确界是最小公共上界(最小的上限),下确界是最大公共下界(最大的下限)。
密码学中的格
在格基密码学中,我们往往采用线性代数的角度定义格:
给定n个线性无关的向量 b 1 , … , b n ∈ R m b_1,\dots,b_n \in \mathbb R^m b1,…,bn∈Rm,由它们生成的格
L ( b 1 , … , b n ) = { ∑ i = 1 n x i b i ∣ x i ∈ Z } \mathbb{L}(b_1,\dots,b_n)=\{\sum\limits_{i=1}^nx_ib_i|\ x_i\in\mathbb{Z}\} L(b1,…,bn)={i=1∑nxibi∣ xi∈Z}
其中, b 1 , … , b n b_1,\dots,b_n b1,…,bn叫做该格的一组基, n n n叫做格的秩(rank), m m m叫做格的维数(dimension).
一般来说, n ≤ m n\leq m n≤m,当 n = m n=m n=m时,称该格满秩(full-rank),为了便于研究,我们之后的讨论中只关注满秩的格,事实上很多结论对于非满秩的格也适用。
令
B
=
(
b
1
…
b
n
)
B=(b_1\ \dots\ b_n)
B=(b1 … bn),上述定义也可以简记为
L
(
B
)
=
{
B
x
∣
x
∈
Z
n
}
\mathbb{L}(B)=\{Bx|\ x\in \mathbb{Z}^n\}
L(B)={Bx∣ x∈Zn}
无特殊说明,一般把向量都处理为列向量,便于研究。
从群论角度对格下的定义可以看作上述定义的几何解释:
一些例子,其中(d)展示了非满秩的格
一组向量生成的格与它们张成的子空间是有一定联系的,回顾一下后者的定义:
给定n个线性无关的向量 b 1 , … , b n ∈ R m b_1,\dots,b_n \in \mathbb R^m b1,…,bn∈Rm,由它们张成的线性空间
S p a n ( b 1 , … , b n ) = { ∑ i = 1 n x i b i ∣ x i ∈ R } Span(b_1,\dots,b_n)=\{\sum\limits_{i=1}^nx_ib_i|\ x_i\in\mathbb{R}\} Span(b1,…,bn)={i=1∑nxibi∣ xi∈R}
唯一的区别就是格中
x
i
∈
Z
x_i\in \mathbb{Z}
xi∈Z,而张成的线性空间中
x
i
∈
R
x_i\in \mathbb{R}
xi∈R,即有
L
(
b
1
,
…
,
b
n
)
⊂
S
p
a
n
(
b
1
,
…
,
b
n
)
\mathbb{L}(b_1,\dots,b_n) \subset Span(b_1,\dots,b_n)
L(b1,…,bn)⊂Span(b1,…,bn)
显然,格的基并不是唯一的,如例子中的(a)与(b);更确切地说,任何格都有无穷组基。
思考:给定两组基,如何判断它们生成的格是否相同呢?
参考资料
CSC 2414 Lattices in Computer Science
《格理论与密码学》周福才