格密码基础 —— Lattices
- \(Updata:2026.09.11:\)参考【2012年BIU密码学冬令营-01-Introduction to Lattices(中文字幕)】,更新一些格密码的基本思想。
\(The\ fundamental\ idea\ of\ lattice-based\ cryptography\)
- 一个指定的格的格基(\(basis\))并不是唯一的,可以尝试用格基隐藏格原本的结构特性。
- 格密码方案构造的基本思想为:在高维格中,我们选定一个格点(\(P\)),然后进行扰乱,将该点移动到了另外一个位置(\(Q\))。在仅知 \(Q\)的前提下,从计算角度获悉 \(P\)的位置是困难的,因为高维空间中的“移动(\(move\))”是极其复杂的。
\(Why\ use\ lattice-based\ cryptography?\)
- 可证明安全性(\(Provable\ security\));
- 安全性证明基于最糟糕情况困难问题(\(Security\ based\ on\ a\ worst-case\ problem\));
- 极简的运算操作(\(Very\ simple\ computations\))
\(Provable\ security\)
因为 \(gcd(p,q)=1\),有同构 \(\mathbb{Z}_N≅\mathbb{Z}_p\times\mathbb{Z}_q\),\(x\mapsto(x\pmod{p}, x\pmod{q})\)。
于是 \(x^2\equiv y\pmod{N}\leftrightarrow \begin{cases}x^2\equiv y\pmod{p}\\x^2\equiv y\pmod{q}\end{cases}\)
对每个模素数的情况,方程至多有两个解(当 \(y\) 是二次剩余时):\(±x_p\) 与 \(±x_q\)。因此 \(x^2\equiv y\pmod{Z}\)在 \(\mathbb{Z}_N^*\)中恰好有 \(4\)个解(当 \(y\)同时是模 \(p\)、模 \(q\)的二次剩余时),它们由符号的四种组合给出: \((±x_p,±x_q)\)。
设已知其中一个平方根 \(x\),其 \(CRT\)(中国剩余定理)表示为 \((x_p,x_q)\),另外三个解为:\((-x_p,x_q)\),\((x_p,-x_q)\),\((-x_p,-x_q)\)。
考虑其中两个“混合符号”的解: \(r=(x_p,-x_q)\), \(s=(-x_p,x_q)\),则 \(r\not\equiv ±x\pmod{N}\), \(r^2\equiv x^2\equiv y\pmod{N}\)。计算一下 \(r-x\)的 \(CRT\)分量: \(r-x=(0,-2x_q)\),因此 \(r-x\equiv0\pmod{p}\),即 \(p|(r-x)\); \(r-x\not\equiv 0\pmod{q}\)(因为 \(q∤2x_q\),只要 \(x_q\not=0\)且 \(q\)为奇素数).
于是 \(gcd(r-x,N)=p\),类似地, \(gcd(r+x,N)=q\)。
假设由算法 \(\mathcal{A}\)能求模 \(N\)的平方根,构造分解算法 \(\mathcal{B}\)如下:
- 随机选取 \(x\in\mathbb{Z}_N^*\);
- 计算 \(y\equiv x^2\pmod{N}\);
- 调用 \(\mathcal{A}\),得到某个平方根 \(r\)(注意: \(r\)是四个解中随机的一个,因为 \(\mathcal{A}\)无法区分它们);
- 若 \(r\equiv ±x\pmod{N}\),则返回第 \(1\)步中重新选取;
- 否则计算 \(gcd(r-x,N)\),输出该非平凡因子。
四个平方根中,只有两个满足 \(r\equiv ±x\pmod{N}\)(即“同号”的两个),另外两个是“混合符号”的,会导致成功分解。由于 \(\mathcal{A}\)返回的解在四个根中不可区分,成功概率至少为 \(Pr[success]\ge{1\over2}\),重复 \(k\)次后,失败概率为 \(2^{-k}\),可忽略。
综上所述,若存在多项式时间算法求解模平方的平方根(即攻破模平方的单向性),则存在多项式时间算法分解 \(N\),这与大整数分解困难假设相矛盾。
由此,我们将了 \(f(x)\equiv x^2\pmod{N}\)这个函数与整数分解问题联系了起来,并由于整数分解问题的困难性,我们认为这个单向函数还不错,但是这个函数的安全性证明仅仅是一个 \(average-case\)困难性证明,因为该证明过程中并没有给出我们该如何选择参数 \(N\)。
\(Security\ based\ on\ a\ worst-case\ problem\)
不论是我们前面进行 \(Security\ proof\)的单向函数还是 \(RSA\)问题,安全性证明都是基于平均情况(\(average-case\))的困难问题。平均情况的困难问题表明,如果能够破解 \(RSA\),并不意味着你能完成所有整数的分解,只意味着你能分解特定的数(\(N\))。例如,\(RSA\)已经被证明存在特定参数结构下的有效攻击算法。
如果你相信 \(RSA\)或大整数分解的困难性,你相信的是在平均情况下这两个问题是困难的,并非所有的大整数分解都是困难的。
但最糟糕情况(\(the\ worst-case\))问题则恰恰相反,它意味着如果你可以破解了某个基于格困难问题的密码学算法,那么你就可以对任意的格解决这个特定困难问题。并且最糟糕情况下的安全性证明会告诉你按照某个分布选择参数就一定是安全可靠的。
当前很多的格密码方案都是基于 \(Short\ Integer\ Solution(SIS)\)与 \(Learing\ With\ Errors(LWE)\)这两个中间问题进行构造,它们的最糟糕情况困难性已经完成了证明。并且如果我们只考虑具有特定代数结构的循环格,设计得当的话,关于格密码学方案的效率也会得到提升,\(Ring-SIS\)与 \(Ring-LWE\)。
\(Lattice\)
-
\(Lattice\)是\(n\)维线性空间\(V\)中具有周期性结构的点集合,也可以视作\(\mathbb{R}^n\)的一个离散加法子群。
“离散”意味着点不是稠密的,点与点之间是有间隔的,否则就会变成实数上的加法子群。
-
定义1:给定\(n\)个线性无关向量\(\vec{b_1},\vec{b_2},\cdots,\vec{b_n}\in\mathbb{R}^m\),由它们产生的格被定义为:
\[\mathcal{L}(\vec{b_1},\vec{b_2},\cdots,\vec{b_n})=\{\sum x_i\vec{b_i}|x_i\in\mathbb{Z}\} \]我们把\(\vec{b_1},\vec{b_2},\cdots,\vec{b_n}\)叫做格的基。等价地,如果定义\(B=\left(\begin{matrix}\vec{b_1} & \vec{b_2} & \cdots & \vec{b_n}\end{matrix}\right)_{m×n}\),那么\(B\)生成的格为:
\[\mathcal{L}(B)=\mathcal{L}(\vec{b_1},\vec{b_2},\cdots,\vec{b_n})=\{B\vec{x}|\vec{x}\in\mathbb{Z}^n\} \]我们说格的秩为\(n\),其维数为\(m\),显然\(n\leq m\),其中如果\(n=m\),则称格为满格。
-
定义2:格\(\mathcal{L}(B)\)中的基向量的所有线性组合所形成的集合,就叫做这组基向量所张成(生成)的空间(\(span\)):
\[span(\mathcal{L}(B))=span(B)=\{B\vec{y}|\vec{y}\in\mathbb{R}^n\} \]\(span(\mathcal{L}(B))=V_m\),其中 \(m\)是 \(\mathcal{L}\)的维度。
-
定义3:对于任意格基\(B\),定义
\[\mathcal{P}=\{B\vec{x}|\vec{x}\in\mathbb{R}^n,\forall i:0\leq x_i<1\} \]为格\(\mathcal{L}(B)\)的基础区域,\(\mathcal{P}(B)\)取决于\(B\)。并且,如果我们在\(\mathcal{L}(B)\)的每一个格点处放置一个\(\mathcal{P}(B)\)的副本,就可以得到\(span(B)\),从格与基本区域的代数定义出发可以证明该结论。
\(Remark:\)基本区域内恰好包含了每一个陪集中的一个元素,其内部不存在两个空间等价的点,只包含不等价陪集内的点集。
-
如何判断给定的向量集是否构成格的\(basis\)?
一个格可能有不同的基,给定一个格的前提下,判定一个向量集是否是该格的基。- 引理1:设\(\mathcal{L}\)为秩为\(n\)的格,设\(\vec{b_1},\vec{b_2},\cdots,\vec{b_n}\in\mathcal{L}\)为\(n\)个线性无关的格向量。\(\vec{b_1},\vec{b_2},\cdots,\vec{b_n}\)表示为\(\mathcal{L}\)的\(basis\),当且仅当\(\mathcal{P}(\vec{b_1},\vec{b_2},\cdots,\vec{b_n})∩\mathcal{L}=\{\vec{0}\}\)。
证明:
必要性:
设\(B=\left(\begin{matrix}\vec{b_1} & \vec{b_2} & \cdots & \vec{b_n}\end{matrix}\right)\)是\(\mathcal{L}\)的基,由于\(\mathcal{L}\)是\(B\)的所有整数的线性组合,而\(\mathcal{P}(B)\)被定义为\(B\)线性组合的集合,其系数在\([0,1)\)之间,由线性无关向量表出向量的方式唯一且\(\mathcal{L}\)与\(\mathcal{P}(B)\)的系数交集是\(\vec{0}\),因此\(\mathcal{P}(B)∩\mathcal{L}=\{\vec{0}\}\)。
充分性:
设\(\mathcal{L}∩\mathcal{P}(B)=\{\vec{0}\}\),因为\(\mathcal{L}\)为秩\(n\)的格,\(B\)是线性无关的(一定为线性空间的基),对于\(y_i\in\mathbb{R}\),可以将任何格向量\(\vec{x}\in\mathcal{L}\)写成\(\sum y_i\vec{b_i}\)。由定义,\(\mathcal{L}\)是离散的加法群,加法计算是封闭的,所以一定有\(\vec{x}'=\sum(y_i-\lfloor y_i \rfloor)\vec{b_i}\in \mathcal{L}\)。根据假设,\(\vec{x}'=\vec{0}\),由线性无关向量的定义,\(y_i=\lfloor y_i\rfloor\),即\(y_i\)是整数,\(\vec{x}\)是\(B\)的整数线性组合。
- 引理1:设\(\mathcal{L}\)为秩为\(n\)的格,设\(\vec{b_1},\vec{b_2},\cdots,\vec{b_n}\in\mathcal{L}\)为\(n\)个线性无关的格向量。\(\vec{b_1},\vec{b_2},\cdots,\vec{b_n}\)表示为\(\mathcal{L}\)的\(basis\),当且仅当\(\mathcal{P}(\vec{b_1},\vec{b_2},\cdots,\vec{b_n})∩\mathcal{L}=\{\vec{0}\}\)。
-
如何确定两个给定的\(basis\),即\(B_1\)、\(B_2\)是否等价?即生成相同的格(\(\mathcal{L}(B_1)=\mathcal{L}(B_2)\))?
- 定义4:假设矩阵为\(U\in\mathbb{Z}^{n×n}\),\(|U|=±1\),则称\(U\)为幺模矩阵。
- 引理2:如果\(U\)是幺模矩阵,那么\(U^{-1}\)也是幺模矩阵,特别是\(U^{-1}\in\mathbb{Z}^{n×n}\)。
- 引理3:两个\(basis\)是等价的,当且仅当\(B_2=B_1U\),其中\(U\)表示某个幺模矩阵。
证明:
必要性:
若\(\mathcal{L}(B_1)=\mathcal{L}(B_2)\),则\(span(B_1)=span(B_2)\),于是一定存在过渡矩阵\(U\)使得\(B_2=B_1U\)。由于\(\vec{b_{2,i}}\in\mathcal{L}(B_1)\),则\(U\in\mathbb{Z}^{n×n}\);同理,存在矩阵\(V\in\mathbb{Z}^{n×n}\),使得\(B_1=B_2V\)。\(B_2=B_1U=B_2VU\),进一步有\(B_2^TB_2=(VU)^TB_2^TB_2(VU)\),两边取行列式,可以得到\(det(B_2^TB_2)=(det(VU)^2)det(B_2^TB_2)\),从而一定有\(det(V)\cdot det(U)=±1\)。矩阵的乘法只涉及到(+,×)运算,没有(÷)运算,因此如果\(A\)是整数矩阵,则\(det(A)\)一定是整数,故\(det(U)=±1\)。
充分性:
假设\(B_2=B_1U\),\(U\)为幺模矩阵,因为幺模矩阵一定是整数矩阵,那么\(B_2\)的列向量\(\vec{b_{2,i}}\)一定包含在\(\mathcal{L}(B_1)\)中,即\(\mathcal{L}(B_2)\subseteq \mathcal{L}(B_1)\)。并且由引理2可知\(B_1=B_2U^{-1}\),同理,\(\mathcal{L}(B_1)\subseteq\mathcal{L}(B_2)\)。\(\mathcal{L}(B_1)=\mathcal{L}(B_2)\)得证。
-
作为一个直接的推论,\(B\)是\(\mathbb{Z}^n\)的\(basis\),当且仅当\(B\)是幺模矩阵。
因为\(\mathbb{Z}^n\)可由\(I_n\)生成,即\(\mathcal{L}(I_n)=\mathbb{Z}^{n}\),\(det(I_n)=1\)。由引理3可得,\(\mathcal{L}(B)=\mathbb{Z}^n\leftrightarrow B\in\mathbb{Z}^{n×n}\ and\ det(B)=±1\) -
另一种确定两个\(basis\)是否等价的方法是在下面的引理中给出的:
- 引理4:两个\(basis\)是等价的,当且仅当一个可以通过列上(基向量)的以下操作从另一个\(basis\)中获得:
- \(\vec{b_i}\leftarrow \vec{b_i}+k\vec{b_j}[k\in\mathbb{Z}]\);
- \(\vec{b_i}\leftrightarrow \vec{b_j}\);
- \(\vec{b_i}\leftarrow -\vec{b_i}\)
- 引理4:两个\(basis\)是等价的,当且仅当一个可以通过列上(基向量)的以下操作从另一个\(basis\)中获得:
-
定义5:设\(\mathcal{L}\)是秩为\(n\)的格,定义\(\mathcal{L}\)的行列式为\(det(\mathcal{L})=vol(\mathcal{P})\),其中\(vol(\mathcal{P})\)称为基本区域\(\mathcal{P}\)的体积。\(n=1\)时,\(vol(\mathcal{P})\)指的是长度;\(n=2\)时,\(vol(\mathcal{P})\)值得是面积;\(\cdots\cdots\)
\(det(\mathcal{L})=\sqrt{det(B^TB)}\),在\(\mathcal{L}\)是满格的前提下,\(B\)是方阵,于是有\(det(\mathcal{L})=|det(B)|\)。在线性代数中,行列式绝对值的几何意义为空间内平行多面体的体积。
- 格的行列式是一个很好的定义,由引理3可知,同一个格即使在选择的基不同的情况下,\(det(B_1)=det(B_2)\),这意味着格的行列式只取决于格本身,与基的选取无关。这和基本区域只取决于格本身是相通的。
- 格的行列式与其密度成反比:行列式越小,格的密度越大,这与当我们将\(\mathcal{P}\)的副本放置在\(\mathcal{L}\)的格点上时可以铺满整个空间又是相通的。
- 对于周期性的数学结构,我们只需要详细存储和关注其中一个 \(preiod\)的数值/数学性质即可。在格的后续学习中,空间内的点与格的相对关系是关注的重点。
参考资料:

格密码基础 —— Lattices
浙公网安备 33010602011771号