Applied PQC 首页 本书 在线演练 博客 @AppliedPQC English

PDF(英文) 运行本章代码 LaTeX 源文件 评论

第 13 章模 LWE(MLWE)

13.1基于格的密码的三代#

我们已经看到了基于格的密码发展中的三个主要阶段。

  • 第一代:LWE。其方程为 \[b = A s + e,\] 其中 \(A\) 是一个随机矩阵。其安全性证明很优雅,但表示规模大,计算代价高。

  • 第二代:RLWE。矩阵被多项式环结构所取代。计算变得快得多,但代数结构变得更强、更特殊。

  • 第三代:模 LWE。这是规模大但简单的 LWE 构造与紧凑但高度结构化的 RLWE 构造之间的折中。

因此,历史路径为:

13.2什么是模?#

“模”(module)一词并不是随意的行话;它是一个精确的代数结构,而 Kyber 的秘密就位于其中。它推广了第 3 章的向量空间,允许标量来自环而不是域。

定义 13.1 (环上的模). 设 \(R\) 是一个具有单位元 \(1\) 的交换环。一个(左)\(R\)-模是一个阿贝尔群 \((M,+)\),连同一个标量乘法 \(R\times M\to M\)(记作 \((r,m)\mapsto rm\)),使得对所有 \(r,s\in R\) 和 \(x,y\in M\) 有:

  1. \(r(x+y)=rx+ry\);

  2. \((r+s)x=rx+sx\);

  3. \((rs)x=r(sx)\);

  4. \(1\,x=x\)。

这些恰好就是把域换成环之后的向量空间公理。当 \(R\) 是域时,\(R\)-模就是向量空间;模是把“域”放宽为“环”所得到的严格更一般的对象。若干性质得以保留,而有一项便利之处丧失了。

  • 自由模与秩。集合 \(R^{k}=\{(m_1,\dots,m_k):m_i\in R\}\) 在逐分量运算下是一个 \(R\)-模,称为秩为 \(k\) 的自由模。与向量空间一样,它有一组基——标准单位向量 \(e_1,\dots,e_k\)——因此每个元素都能唯一地表示为它们的 \(R\)-组合。Kyber 的秘密空间恰好就是自由模 \(R_q^{k}\)。

  • 矩阵作为同态作用。矩阵 \(A\in R^{k\times k}\) 定义了一个 \(R\)-线性映射 \(R^{k}\to R^{k}\),\(\mathbf{x}\mapsto A\mathbf{x}\),称为\(R\)-模同态。模 LWE 映射 \(\mathbf{s}\mapsto A\mathbf{s}\) 就是其中之一。

  • 子模与理想。子模是子空间的类比;把 \(R\) 看作自身上的模时,其子模恰好就是它的理想(第 4 章)——这就是为什么说 RLWE 建立在理想格之上。

  • 丧失了什么。在一般的环上,并非每个模都是自由的,也并非每个子模都有基——这是与向量空间的一个实质性区别。Kyber 通过在自由模 \(R_q^{k}\) 中工作而完全避开了这一点。

精确地命名了这一结构之后,三代演进就成了关于秘密位于哪个模中的陈述: \[\underbrace{s\in\mathbb{Z}_q^{n}}_{\text{LWE}} \qquad \underbrace{s(x)\in R_q}_{\text{RLWE}} \qquad \underbrace{\mathbf{s}\in R_q^{k}}_{\text{Module-LWE}}.\] LWE 使用域元素组成的向量;RLWE 使用单个环元素;模 LWE 使用环 \(R_q\) 上长度为 \(k\) 的向量——一个秩为 \(k\) 的自由模。

13.3Kyber 的秘密#

在 ML-KEM(Kyber)中,秘密不是单个多项式,而是一个多项式向量。安全级别决定了该向量的维数。

  • Kyber512 使用 \(k=2\)。

  • Kyber768 使用 \(k=3\)。

  • Kyber1024 使用 \(k=4\)。

因此,安全级别与模的大小相关联。

13.4为什么矩阵又回来了?#

乍看之下,人们会惊讶于在 Kyber 中再次看到矩阵。但这个矩阵并不是整数上的大型随机矩阵,其元素是多项式。

例如,对于 \(k=2\),我们可以有 \[A = \begin{bmatrix} a_{11}(x) & a_{12}(x) \\ a_{21}(x) & a_{22}(x) \end{bmatrix}.\]

每个元素都是环 \(R_q\) 中的一个多项式。这个对象仍然是矩阵,但矩阵元素现在是环元素,而不是普通的数。

13.5Kyber 公钥生成#

公钥生成在思想上与 LWE 非常相似。我们选取一个秘密向量 \(\mathbf{s}\)、一个噪声向量 \(\mathbf{e}\) 以及一个多项式矩阵 \(A\),然后计算 \[\mathbf{t} = A\mathbf{s} + \mathbf{e}.\]

这与 LWE 的支配思想完全相同,只是标量现在变成了环元素。下图针对最小情形 \(k=2\) 具体展示了 \(A\) 与 \(\mathbf{s}\) 的形状(下标从 \(0\) 到 \(k-1\),与下面的 Sage 代码一致)。

图 13.1 \(k=2\) 时模结构的具体形态:公开矩阵 \(A \in R_q^{2\times2}\)(蓝色,左)有四个元素 \(a_{00}(x),a_{01}(x),a_{10}(x),a_{11}(x)\),每个都是 \(R_q\) 中的完整多项式;秘密 \(\mathbf{s}=(s_0(x),s_1(x))\)(橙色,右)是由这样的多项式组成的长度为 \(2\) 的向量。与前面的“秘密对象”一栏对照:普通 LWE 会在每个方框中放一个标量,而 RLWE 会把整幅图压缩成仅一个方框。

13.6为什么这比普通 LWE 更好?#

我们可以比较这三种设计。

  • LWE:矩阵巨大,公钥很大。

  • RLWE:表示紧凑,但代数结构非常强。

  • 模 LWE:矩阵小,元素是多项式,在紧凑性与灵活性之间取得了非常好的折中。

换言之,模 LWE 使用一个小的多项式矩阵,而不是一个巨大的整数矩阵或单个大多项式。

13.7用 Sage 构造一个玩具版模#

我们可以在 Sage 中构造一个非常小的玩具版示例。首先定义环。

q = 17
R.<x> = PolynomialRing(GF(q))
S = R.quotient(x^8 + 1)

现在把秘密定义为由两个多项式组成的向量。

from random import choice
def small_poly():
    return S([choice([-1, 0, 1]) for _ in range(8)])

s = vector(S, [small_poly(), small_poly()])
print(s)

构造一个小的多项式矩阵。

A = Matrix(S, [[S.random_element(), S.random_element()],
               [S.random_element(), S.random_element()]])
print(A)

构造一个噪声向量。

e = vector(S, [small_poly(), small_poly()])
assert all(c in [0, 1, 16] for p in list(s) + list(e) for c in p.lift().list())

然后计算类似公钥的值。

t = A * s + e
print(t)

这具有模 LWE 样本的代数形状。公开矩阵是均匀分布的,而秘密和误差使用小系数;它仍然只是一个玩具版示例,而不是 FIPS 203 的采样器。

13.8模 LWE 问题#

有了模结构,模 LWE 就是把第 11 章的 LWE 分布中的标量从 \(\mathbb{Z}_q\) 提升到环 \(R_q\) 而得到的分布。

定义 13.2 (模 LWE). 固定环 \(R_q=\mathbb{Z}_q[x]/(x^n+1)\)、模秩 \(k\),以及 \(R_q\) 上集中于小元素的误差分布 \(\chi\)。对于秘密 \(\mathbf{s}\in R_q^{k}\),模 LWE 分布输出 \[(\mathbf{a},\,b),\qquad \mathbf{a}\leftarrow R_q^{k}\ \text{uniform},\quad e\leftarrow\chi,\quad b=\langle \mathbf{a},\mathbf{s}\rangle + e\in R_q.\] 把 \(m\) 个样本作为 \(A\in R_q^{m\times k}\) 的行堆叠起来,便得到矩阵形式 \((A,\ \mathbf{t}=A\mathbf{s}+\mathbf{e})\)。搜索 MLWE 是要恢复 \(\mathbf{s}\);判定 MLWE 是要区分 \((A,\,A\mathbf{s}+\mathbf{e})\) 与均匀的二元组 \((A,\,\mathbf{u})\)。

有两个特殊情形界定了这一定义的两端:\(k=1\) 即为 RLWE(单个环元素),而 \(n=1\) 且 \(R_q=\mathbb{Z}_q\) 则还原为普通 LWE。模 LWE 在二者之间插值,并继承了与 LWE 同类的最坏情形困难性保证:在平均情形下求解它至少与模格上的标准问题一样困难 [1]。在 Kyber 中矩阵是方阵(\(m=k\)),从而得到紧凑形式 \[\mathbf{t} = A\mathbf{s} + \mathbf{e}, \qquad A\in R_q^{k\times k},\ \ \mathbf{s},\mathbf{e}\in R_q^{k}.\]

13.9为什么模 LWE 被视为一种折中#

许多人误以为模 LWE 之所以“更好”,只是因为它使用了更多的结构。这不是正确的理解。真正的要点在于,模 LWE 削弱了纯 RLWE 最强的代数结构,同时保留了其效率优势。换言之,它在以下几者之间进行权衡:

  • 普通 LWE 的巨大规模,

  • RLWE 的强结构,

  • 以及 MLWE 所提供的实用中间地带。

这种平衡是 Kyber 设计的核心。

13.10为什么 Kyber 的参数是 \(k=2,3,4\)#

取值 \(k=2,3,4\) 对应模的不同维数,恰好就是 Kyber 的三个安全级别 [1, 2]。在实践中:

  • \(k=2\) 给出 Kyber512,

  • \(k=3\) 给出 Kyber768,

  • \(k=4\) 给出 Kyber1024。

增大 \(k\) 会增大模的规模,从而提高安全级别。环的维数和模数保持不变,但标准化的 ML-KEM 参数集也使用了不同的参数元组:特别地,对于 ML-KEM-512、-768 和 -1024,\(\eta_1\) 分别为 \(3,2,2\),\((d_u,d_v)\) 分别为 \((10,4),(10,4),(11,5)\) [3]。

13.11一个完整的玩具版 MLWE 实验#

一个有益的练习是完整地实现一个玩具版 MLWE。

  1. 定义环 \(R_q\)。

  2. 构造一个小的多项式矩阵 \(A\)。

  3. 构造一个多项式向量 \(\mathbf{s}\)。

  4. 构造一个噪声向量 \(\mathbf{e}\)。

  5. 计算 \(\mathbf{t}=A\mathbf{s}+\mathbf{e}\)。

  6. 打印结果并考察其结构。

这能让人切实理解为什么 Kyber 可以看作 LWE 的一种结构化推广。用伪代码写出,并沿用上面 Sage 代码中的名称 \(A\)、\(\mathbf{s}\)、\(\mathbf{e}\)、\(\mathbf{t}\),同样的六个步骤即为算法 11。

输入: 环 \(R_q = \mathbb{Z}_q[x]/(x^n+1)\);模维数 \(k\)
输出: MLWE 样本 \((A,\mathbf{t})\);秘密 \(\mathbf{s}\)
1:\(A \gets\) \(R_q\) 上均匀随机的 \(k\times k\) 矩阵
2:\(\mathbf{s} \gets\) 由 \(R_q\) 中小(噪声量级)元素组成的长度为 \(k\) 的向量▷ 秘密
3:\(\mathbf{e} \gets\) 由 \(R_q\) 中小(噪声量级)元素组成的长度为 \(k\) 的向量▷ 误差
4:\(\mathbf{t} \gets A\mathbf{s} + \mathbf{e}\)▷ 由 \(k\) 个环元素组成的向量,而非单个标量
5:return 以 \((A,\mathbf{t})\) 作为样本,\(\mathbf{s}\) 作为秘密
算法 11 模 LWE 样本生成

实际的 ML-KEM 具有这种算法形状,其中 \(n=256\)、\(k=2,3,4\),但各标准化参数集之间的差异不止在于 \(k\);它们的采样参数和压缩参数在 FIPS 203 中规定。

13.12小结#

关键的教训是:模 LWE 并不只是“带有更多多项式的 LWE”。它是两个极端之间的中间地带:

方案 秘密对象 主要思想
LWE \(\mathbb{Z}_q\) 上的向量 简单通用,但规模大
RLWE \(R_q\) 上的单个多项式 紧凑快速,但高度结构化
模 LWE \(R_q\) 上的多项式向量 均衡的折中,为 Kyber 所采用

重要的洞见在于,Kyber 并不只是换了个名字的 RLWE。它是同一带噪声线性结构的模版本,其组织方式在保持强安全假设的同时带来了实用的效率。

参考文献

[1]
A. Langlois and D. Stehlé. Worst-case to average-case reductions for module lattices. Designs, Codes and Cryptography, 75(3):565–599, 2015.
[2]
J. Bos, L. Ducas, E. Kiltz, T. Lepoint, V. Lyubashevsky, J. M. Schanck, P. Schwabe, G. Seiler, and D. Stehlé. CRYSTALS-Kyber: A CCA-secure module-lattice-based KEM. In IEEE European Symposium on Security and Privacy (EuroS&P), pages 353–367, 2018.
[3]
National Institute of Standards and Technology. Module-Lattice-Based Key-Encapsulation Mechanism Standard. FIPS 203, 2024.

评论