LWE和RLWE问题
LWE 和 RLWE 问题
目录
1. 教程介绍
1.1 教程目标
-
深入理解 LWE 和 RLWE 问题的数学本质
-
掌握格密码学的核心理论基础
-
理解 LWE 和 RLWE 的安全性证明
1.2 预备知识
建议具备:
-
线性代数基础
-
抽象代数基础(群、环、域)
-
基本概率统计知识
-
算法复杂度分析基础
2. 数学基础回顾
2.1 线性代数回顾
向量空间:
-
n 维向量空间\(\mathbb{R}^n\)
-
内积:\(\langle \mathbf{a}, \mathbf{b} \rangle = \sum_{i=1}^n a_i b_i\)
-
范数:\(\|\mathbf{a}\| = \sqrt{\langle \mathbf{a}, \mathbf{a} \rangle}\)
矩阵运算:
-
矩阵乘法:\(A \mathbf{x} = \sum_{j=1}^n x_j \mathbf{a}_j\)
-
转置:\((A^T)_{ij} = A_{ji}\)
-
逆矩阵:\(A A^{-1} = I\)
2.2 抽象代数回顾
群:
-
定义:非空集合 G,配备二元运算\(\cdot\),满足封闭性、结合律、单位元、逆元
-
交换群:运算满足交换律
环:
-
定义:非空集合 R,配备加法\(+\)和乘法\(\cdot\)
-
加法构成交换群
-
乘法构成半群
-
乘法对加法满足分配律
域:
- 乘法构成交换群(除 0 外)
2.3 概率分布回顾
离散分布:
-
均匀分布:\(U(S)\),所有元素概率相等
-
高斯分布:\(D_{\sigma}(x) \propto e^{-x^2/(2\sigma^2)}\)
分布的性质:
-
支持集:概率非零的元素集合
-
期望和方差
-
尾部概率
3. 格理论基础
3.1 格的定义与基本性质
定义 3.1(格):
格是 n 维欧几里得空间中由整数线性组合生成的离散点集:
$ L = \mathcal{L}(\mathbf{B}) = \left{ \mathbf{B} \mathbf{z} \mid \mathbf{z} \in \mathbb{Z}^n \right} $
其中\(\mathbf{B} = [\mathbf{b}_1 \mid \mathbf{b}_2 \mid \cdots \mid \mathbf{b}_n] \in \mathbb{R}^{m \times n}\)是格的基矩阵,列向量\(\mathbf{b}_1, \ldots, \mathbf{b}_n\)线性无关。
基本性质:
-
离散性:格中任意有界区域只包含有限个格点
-
加法封闭性:若\(\mathbf{x}, \mathbf{y} \in L\),则\(\mathbf{x} + \mathbf{y} \in L\)
-
标量乘法:若\(\mathbf{x} \in L\),则\(k\mathbf{x} \in L\)对所有\(k \in \mathbb{Z}\)
3.2 格的基本不变量
行列式:
$ \det(L) = \sqrt{\det(\mathbf{B}^T \mathbf{B})} $
几何意义:基本平行六面体的体积
最短向量长度:
$ \lambda_1(L) = \min_{\mathbf{x} \in L \setminus {0}} |\mathbf{x}| $
连续极小值:
\(\lambda_i(L)\)是包含 i 个线性无关格向量的最小球半径
3.3 重要的格问题
最短向量问题(SVP):
给定格基\(\mathbf{B}\),找到非零格向量\(\mathbf{x} \in L\)使得\(\|\mathbf{x}\| = \lambda_1(L)\)
最近向量问题(CVP):
给定格基\(\mathbf{B}\)和目标向量\(\mathbf{t} \in \mathbb{R}^m\),找到格向量\(\mathbf{x} \in L\)使得\(\|\mathbf{t} - \mathbf{x}\|\)最小
有界距离解码问题(BDD):
给定格基\(\mathbf{B}\)和目标向量\(\mathbf{t} \in \mathbb{R}^m\),已知存在\(\mathbf{x} \in L\)使得\(\|\mathbf{t} - \mathbf{x}\| \leq \lambda_1(L)/2\),找到\(\mathbf{x}\)
3.4 q-ary 格
定义 3.2(q-ary 格):
q-ary 格是满足\(q\mathbb{Z}^n \subseteq L \subseteq \mathbb{Z}^n\)的格,其中\(q \geq 2\)是整数。
重要的 q-ary 格:
-
\(\Lambda_q^\perp(A) = \left\{ \mathbf{x} \in \mathbb{Z}^m \mid A \mathbf{x} \equiv 0 \mod q \right\}\)
-
\(\Lambda_q(A) = \left\{ \mathbf{x} \in \mathbb{Z}^m \mid \exists \mathbf{s} \in \mathbb{Z}_q^n, \mathbf{x} \equiv A^T \mathbf{s} \mod q \right\}\)
对偶关系:
\(\Lambda_q(A) = q \cdot \widehat{\Lambda_q^\perp(A)}\),其中\(\widehat{L}\)表示格 L 的对偶格
4. LWE 问题深度解析
4.1 LWE 问题的起源与动机
历史背景:
-
2005 年由 Oded Regev 提出
-
源于学习理论中的 "带噪声学习" 问题
-
结合了格理论和学习理论的思想
设计动机:
-
量子抗性:基于格问题,量子计算机难以解决
-
最坏情况安全性:有严格的最坏情况到平均情况归约
-
构造简洁:基于线性代数,易于理解和实现
-
功能强大:支持构建各种密码学原语
4.2 LWE 分布的严格定义
定义 4.1(离散高斯分布):
参数为\(s\)(标准差)和\(c\)(中心)的离散高斯分布定义为:
$ D_{\mathbb{Z}, s, c}(x) = \frac{\exp\left(-\pi \frac{(x - c)2}{s2}\right)}{\sum_{k \in \mathbb{Z}} \exp\left(-\pi \frac{(k - c)2}{s2}\right)} $
对于向量情况,各分量独立采样。
定义 4.2(LWE 分布):
设\(n \geq 1\),\(q \geq 2\),\(\alpha \in (0, 1)\),\(\mathbf{s} \in \mathbb{Z}_q^n\)。LWE 分布\(D_{n, q, \alpha}(\mathbf{s})\)是\((\mathbb{Z}_q^n \times \mathbb{Z}_q)\)上的分布,采样过程为:
-
\(\mathbf{a} \leftarrow U(\mathbb{Z}_q^n)\)(均匀随机向量)
-
\(e \leftarrow D_{\mathbb{Z}, \alpha q, 0}\)(离散高斯错误)
-
\(b = \langle \mathbf{a}, \mathbf{s} \rangle + e \mod q\)
-
输出\((\mathbf{a}, b)\)
4.3 LWE 问题的两个版本
定义 4.3(搜索 LWE 问题):
输入:任意多个从\(D_{n, q, \alpha}(\mathbf{s})\)中采样的样本\((\mathbf{a}_i, b_i)\)
目标:找到秘密向量\(\mathbf{s} \in \mathbb{Z}_q^n\)
定义 4.4(决策 LWE 问题):
输入:任意多个样本\((\mathbf{a}_i, b_i)\)
目标:区分这些样本是来自\(D_{n, q, \alpha}(\mathbf{s})\)还是来自均匀分布\(U(\mathbb{Z}_q^n \times \mathbb{Z}_q)\)
4.4 LWE 的矩阵形式
LWE 问题可以表示为矩阵形式:
$ \mathbf{b} = A \mathbf{s} + \mathbf{e} \mod q $
其中:
-
\(A \in \mathbb{Z}_q^{m \times n}\):m 个随机向量\(\mathbf{a}_i\)组成的矩阵
-
\(\mathbf{s} \in \mathbb{Z}_q^n\):秘密向量
-
\(\mathbf{e} \in \mathbb{Z}^m\):错误向量,各分量独立采样自\(D_{\mathbb{Z}, \alpha q, 0}\)
-
\(\mathbf{b} \in \mathbb{Z}_q^m\):输出向量,\(\mathbf{b}_i = b_i\)
4.5 LWE 问题的实例分析
小参数实例:
设\(n=2\),\(q=7\),\(\alpha=0.25\),秘密\(\mathbf{s} = [3, 5]^T\)
采样过程:
-
随机选择\(\mathbf{a} = [2, 4]^T\)
-
计算\(\langle \mathbf{a}, \mathbf{s} \rangle = 2 \times 3 + 4 \times 5 = 6 + 20 = 26\)
-
模 7:\(26 \mod 7 = 5\)
-
采样错误\(e \leftarrow D_{\mathbb{Z}, 1.75, 0}\),假设得到\(e=1\)
-
计算\(b = 5 + 1 = 6 \mod 7\)
-
样本:\((\mathbf{a} = [2, 4]^T, b = 6)\)
5. LWE 安全性证明
5.1 计算复杂性基础
复杂性类:
-
P:多项式时间可解问题
-
NP:非确定性多项式时间可验证问题
-
NP-hard:至少和 NP 中最难问题一样难
-
NP-complete:既是 NP 又是 NP-hard
归约:
问题 A 可以归约到问题 B(A ≤ B),如果存在多项式时间算法,将 A 的实例转换为 B 的实例,使得 B 的解可以转换为 A 的解。
5.2 LWE 与格问题的归约
定理 5.1(Regev 2005):
设\(q\)是质数,\(q \leq \text{poly}(n)\),\(\alpha q \geq 2\sqrt{n}\)。存在多项式时间量子算法,将\(n\)维\(\text{GapSVP}_{\tilde{O}(n/\alpha)}\)问题归约到\(\text{LWE}_{n, q, \alpha}\)问题。
定理 5.2(Brakerski 等 2013):
对于任意\(q\),存在多项式时间经典算法,将\(\sqrt{n}\)维\(\text{GapSVP}_{\tilde{O}(n/\alpha)}\)问题归约到\(\text{LWE}_{n, q, \alpha}\)问题。
5.3 归约证明的核心思想
证明框架:
-
格的构造:从 LWE 实例构造 q-ary 格
-
解的映射:将 LWE 解映射为格中的短向量
-
正确性分析:证明归约的正确性和复杂性
关键引理:
引理 5.3:设\(A \in \mathbb{Z}_q^{m \times n}\)是 LWE 实例的矩阵,\(\mathbf{s} \in \mathbb{Z}_q^n\)是秘密,\(\mathbf{e} \in \mathbb{Z}^m\)是错误向量。则向量\(\mathbf{v} = (\mathbf{e}, -A^T \mathbf{e} + q \mathbf{z}) \in \Lambda_q^\perp(A^T)\),其中\(\mathbf{z} \in \mathbb{Z}^n\)选择使得\(\mathbf{v}\)较短。
5.4 搜索 LWE 到决策 LWE 的归约
定理 5.4:
如果存在 PPT 算法解决决策 LWE 问题,那么存在 PPT 算法解决搜索 LWE 问题。
证明步骤:
-
增强区分优势:通过多次采样将区分优势提高到\(1 - 2^{-3n}\)
-
分量恢复:逐个恢复秘密向量的分量
-
验证测试:验证猜测的分量是否正确
-
扩展到全向量:对所有分量重复上述过程
5.5 安全性参数选择
安全参数关系:
-
维度\(n\):主要安全参数,通常 128-1024
-
模数\(q\):\(q = \tilde{O}(n/\alpha)\)
-
错误参数\(\alpha\):控制错误大小,通常 0.001-0.1
安全级别对应:
-
80 位安全:\(n \approx 512\),\(q \approx 2^{13}\)
-
128 位安全:\(n \approx 1024\),\(q \approx 2^{17}\)
-
256 位安全:\(n \approx 2048\),\(q \approx 2^{21}\)
6. LWE 密码学应用
6.1 私钥加密方案
算法 6.1(LWE 私钥加密):
参数:
-
安全参数\(\lambda\)
-
维度\(n = n(\lambda)\)
-
模数\(q = q(\lambda)\)
-
错误分布\(\chi = \chi(\lambda)\),通常是离散高斯分布
密钥生成\(\text{Gen}(1^\lambda)\):
-
选择参数\(n, q, \chi\)
-
随机选择私钥\(\mathbf{sk} = \mathbf{s} \leftarrow \mathbb{Z}_q^n\)
-
返回\(\mathbf{sk}\)
加密\(\text{Enc}(\mathbf{sk}, m)\):
-
输入:私钥\(\mathbf{sk}\),消息\(m \in \{0, 1\}\)
-
随机选择\(\mathbf{a} \leftarrow U(\mathbb{Z}_q^n)\)
-
随机选择\(e \leftarrow \chi\)
-
计算\(b = \langle \mathbf{a}, \mathbf{s} \rangle + e + m \cdot \lfloor q/2 \rfloor \mod q\)
-
返回密文\(c = (\mathbf{a}, b)\)
解密\(\text{Dec}(\mathbf{sk}, c)\):
-
输入:私钥\(\mathbf{sk}\),密文\(c = (\mathbf{a}, b)\)
-
计算\(v = b - \langle \mathbf{a}, \mathbf{s} \rangle \mod q\)
-
如果\(v < q/4\)或\(v > 3q/4\),返回 0;否则返回 1
正确性分析:
当错误分布的支持集满足\(\text{Supp}(\chi) \subseteq (-q/4, q/4)\)时,解密正确。
安全性证明:
基于决策 LWE 假设,证明 CPA 安全性。
6.2 公钥加密方案(LPR 方案)
算法 6.2(LWE 公钥加密 - LPR 方案):
密钥生成\(\text{Gen}(1^\lambda)\):
-
选择参数\(n, q, \chi\)
-
随机选择私钥\(\mathbf{sk} = \mathbf{s} \leftarrow \chi^n\)(小秘密)
-
随机选择矩阵\(A \leftarrow U(\mathbb{Z}_q^{n \times n})\)
-
随机选择错误向量\(\mathbf{e} \leftarrow \chi^n\)
-
计算\(\mathbf{y}^T = \mathbf{s}^T A + \mathbf{e}^T \mod q\)
-
公钥\(\mathbf{pk} = (A, \mathbf{y}^T)\)
-
返回\((\mathbf{pk}, \mathbf{sk})\)
加密\(\text{Enc}(\mathbf{pk}, m)\):
-
输入:公钥\(\mathbf{pk}\),消息\(m \in \{0, 1\}\)
-
随机选择\(\mathbf{r}, \mathbf{x} \leftarrow \chi^n\)
-
随机选择\(x' \leftarrow \chi\)
-
计算\(\mathbf{a} = A \mathbf{r} + \mathbf{x} \mod q\)
-
计算\(b = \mathbf{y}^T \mathbf{r} + x' + m \cdot \lfloor q/2 \rfloor \mod q\)
-
返回密文\(c = (\mathbf{a}, b)\)
解密\(\text{Dec}(\mathbf{sk}, c)\):
-
输入:私钥\(\mathbf{sk}\),密文\(c = (\mathbf{a}, b)\)
-
计算\(v = b - \mathbf{s}^T \mathbf{a} \mod q\)
-
解密规则同私钥加密
安全性证明:
通过混合论证证明 CPA 安全性:
-
混合 0:真实加密
-
混合 1:用随机矩阵替换公钥
-
混合 2:用随机向量替换密文
-
混合 3:完全随机密文
6.3 数字签名方案
算法 6.3(LWE 数字签名):
密钥生成\(\text{Gen}(1^\lambda)\):
-
选择参数\(n, q, m, \chi\)
-
随机选择\(A \leftarrow U(\mathbb{Z}_q^{n \times m})\)
-
随机选择\(\mathbf{s} \leftarrow \chi^n\),\(\mathbf{e} \leftarrow \chi^m\)
-
计算\(\mathbf{t} = A \mathbf{e} + q \mathbf{s} \in \mathbb{Z}^n\)
-
公钥\(\mathbf{pk} = (A, \mathbf{t})\)
-
私钥\(\mathbf{sk} = \mathbf{e}\)
-
返回\((\mathbf{pk}, \mathbf{sk})\)
签名\(\text{Sign}(\mathbf{sk}, M)\):
-
输入:私钥\(\mathbf{sk}\),消息\(M\)
-
计算哈希\(h = H(M) \in \mathbb{Z}_q^n\)
-
随机选择\(\mathbf{r} \leftarrow \chi^m\)
-
计算\(\mathbf{c} = A \mathbf{r} \mod q\)
-
计算\(\mathbf{z} = \mathbf{r} + \mathbf{e} \cdot H(\mathbf{c}, h) \in \mathbb{Z}^m\)
-
如果\(\|\mathbf{z}\|\)太大,重新选择\(\mathbf{r}\)
-
返回签名\((\mathbf{z}, H(\mathbf{c}, h))\)
验证\(\text{Verify}(\mathbf{pk}, M, (\mathbf{z}, c))\):
-
输入:公钥\(\mathbf{pk}\),消息\(M\),签名\((\mathbf{z}, c)\)
-
计算哈希\(h = H(M) \in \mathbb{Z}_q^n\)
-
计算\(\mathbf{c}' = A \mathbf{z} - c \cdot \mathbf{t} \mod q\)
-
检查\(c = H(\mathbf{c}', h)\)和\(\|\mathbf{z}\|\)是否足够小
-
有效则返回 1,否则返回 0
6.4 全同态加密基础
同态加密概念:
允许对密文进行计算,得到的结果解密后与对明文计算的结果相同。
部分同态加密:
只支持加法或乘法中的一种运算。
全同态加密:
支持任意数量的加法和乘法运算。
基于 LWE 的 FHE 构造思路:
-
引导技术(Bootstrapping):使用自身的解密电路对密文进行重加密
-
层级结构:使用不同模数的层级,每级支持有限次数的运算
-
密钥切换:在不同密钥之间转换密文
7. RLWE 问题深度解析
7.1 RLWE 的动机与优势
LWE 的局限性:
-
密钥大小:\(O(n^2 \log q)\)
-
计算复杂度:\(O(n^2)\) per operation
-
存储需求大,计算效率低
RLWE 的优势:
-
密钥大小:\(O(n \log q)\)
-
计算复杂度:\(O(n \log n)\) per operation
-
利用环结构,效率显著提升
7.2 环的选择与性质
常用环结构:
-
分圆多项式环:\(R = \mathbb{Z}[x]/\Phi_m(x)\),\(\Phi_m(x)\)是 m 次分圆多项式
-
多项式环:\(R = \mathbb{Z}[x]/(x^n + 1)\),n 是 2 的幂
选择标准:
-
代数结构:是否是唯一分解整环
-
数论性质:分圆多项式的分裂性质
-
计算效率:FFT 友好性
-
安全性:理想格的困难性
环** ****的性质**:
-
维度:n
-
乘法:多项式乘法后模\(x^n + 1\)
-
自同构:\(\sigma_k(x) = x^k\),k 与 2n 互质
-
中国剩余定理:\(R_q \cong \mathbb{Z}_q^n\)当 q ≡ 1 mod 2n
7.3 RLWE 分布的定义
定义 7.1(环上的离散高斯分布):
设\(R = \mathbb{Z}[x]/(x^n + 1)\),\(\sigma > 0\),\(c \in R\)。环上的离散高斯分布\(D_{R, \sigma, c}\)定义为:
$ D_{R, \sigma, c}(f) = \prod_{i=0}^{n-1} D_{\mathbb{Z}, \sigma, c_i}(f_i) $
其中\(f = \sum_{i=0}^{n-1} f_i x^i\),\(c = \sum_{i=0}^{n-1} c_i x^i\)。
定义 7.2(RLWE 分布):
设\(R = \mathbb{Z}[x]/(x^n + 1)\),\(R_q = R/qR\),\(\psi\)是\(R\)上的错误分布,\(s \in R_q\)是秘密。RLWE 分布\(A_{s, \psi}^R\)是\(R_q^2\)上的分布,采样过程为:
-
\(a \leftarrow U(R_q)\)(环上均匀随机元素)
-
\(e \leftarrow \psi\)(环上错误分布)
-
\(b = a \cdot s + e \in R_q\)(环乘法)
-
输出\((a, b)\)
7.4 RLWE 问题的版本
定义 7.3(搜索 RLWE 问题):
输入:任意多个从\(A_{s, \psi}^R\)中采样的样本\((a_i, b_i)\)
目标:找到秘密元素\(s \in R_q\)
定义 7.4(决策 RLWE 问题):
输入:任意多个样本\((a_i, b_i)\)
目标:区分这些样本是来自\(A_{s, \psi}^R\)还是来自均匀分布\(U(R_q^2)\)
环结构带来的优势:
-
紧凑表示:环元素可以用 n 维向量表示
-
高效运算:利用 FFT 加速环乘法
-
并行计算:环运算可以并行化
7.5 RLWE 的矩阵形式
RLWE 问题可以表示为:
$ \mathbf{b} = A \star \mathbf{s} + \mathbf{e} \mod q $
其中:
-
\(\star\)表示环上的卷积乘法
-
\(A \in R_q^{m \times 1}\):m 个环元素组成的矩阵
-
\(\mathbf{s} \in R_q\):秘密环元素
-
\(\mathbf{e} \in R^m\):错误环元素向量
-
\(\mathbf{b} \in R_q^m\):输出环元素向量
7.6 RLWE 与 LWE 的关系
定理 7.5:
RLWE 问题至少与相应的 LWE 问题一样难。
证明思路:
-
嵌入:将 LWE 实例嵌入到 RLWE 实例中
-
解的提取:从 RLWE 解中提取 LWE 解
-
复杂度分析:证明归约的多项式时间复杂性
实际意义:
RLWE 继承了 LWE 的所有安全性保证,同时提供更好的效率。
8. RLWE 安全性证明
8.1 理想格的概念
定义 8.1(理想格):
设\(K\)是代数数域,\(R = \mathcal{O}_K\)是\(K\)的整数环。理想格是形如\(\sigma(R)\)的格,其中\(\sigma: K \rightarrow \mathbb{R}^n\)是嵌入映射。
重要性质:
-
乘法封闭性:若\(\mathbf{x}, \mathbf{y} \in L\),则\(\mathbf{x} \cdot \mathbf{y} \in L\)
-
理想结构:对应于环中的理想
-
维度:等于数域的次数\(n = [K : \mathbb{Q}]\)
8.2 RLWE 与理想格问题的归约
定理 8.2(Lyubashevsky 等 2010):
设\(R = \mathbb{Z}[x]/(x^n + 1)\),\(q = 1 \mod 2n\)是质数,\(\alpha q \geq \omega(\sqrt{n \log n})\)。存在量子多项式时间算法,将\(\text{Ideal-SVP}_{\tilde{O}(n/\alpha)}\)问题归约到\(\text{RLWE}_{R, q, \alpha}\)问题。
归约框架:
-
理想格构造:从 RLWE 实例构造理想格
-
短向量提取:将 RLWE 解转换为理想格中的短向量
-
正确性证明:证明归约的正确性
关键技术:
-
环嵌入:将环元素嵌入到欧几里得空间
-
范数分析:分析嵌入向量的范数
-
错误传播:控制归约过程中的错误增长
8.3 搜索 RLWE 到决策 RLWE 的归约
定理 8.3:
设\(R = \mathbb{Z}[x]/(x^n + 1)\),\(q = 1 \mod 2n\)是质数。搜索 RLWE 问题可以多项式时间归约到决策 RLWE 问题。
证明关键:
-
环自同构:利用环的自同构性质\(\sigma_k(f)(x) = f(x^k)\)
-
分量提取:通过自同构提取秘密的各个分量
-
测试验证:验证提取的分量是否正确
8.4 模数切换技术
定理 8.4(Langlois 等 2014):
设\(q\)和\(q'\)是两个模数,满足\(q' \approx q\)。则\(\text{RLWE}(q)\)可以多项式时间归约到\(\text{RLWE}(q')\)。
归约过程:
$ (a, b) \in R_q^2 \mapsto \left( \left\lfloor \frac{q'}{q} a \right\rceil, \left\lfloor \frac{q'}{q} b \right\rceil \right) \in R_{q'}^2 $
分析:
-
均匀性保持:证明归约后的分布接近均匀
-
错误控制:分析归约过程中的错误增长
-
正确性:证明归约的正确性
应用:
-
层级 FHE:在不同模数层级之间转换
-
参数优化:调整模数以优化性能
-
密文压缩:减小密文大小
8.5 RLWE 安全性参数选择
参数关系:
-
环维度\(n\):主要安全参数,通常 256-1024
-
模数\(q\):\(q = \tilde{O}(n/\alpha)\)
-
错误分布\(\psi\):通常是离散高斯分布,标准差\(\sigma = \alpha q / \sqrt{n}\)
安全级别对应:
-
80 位安全:\(n = 256\),\(q = 2^{15}\),\(\sigma = 3.2\)
-
128 位安全:\(n = 512\),\(q = 2^{17}\),\(\sigma = 3.2\)
-
256 位安全:\(n = 1024\),\(q = 2^{21}\),\(\sigma = 3.2\)
9. RLWE 密码学应用
9.1 高效公钥加密
算法 9.1(RLWE 公钥加密):
参数选择:
-
环\(R = \mathbb{Z}[x]/(x^n + 1)\),\(n = 256\)
-
模数\(q = 2^{15} = 32768\)
-
错误分布\(\psi = D_{R, \sigma}\),\(\sigma = 3.2\)
-
消息空间\(M = \{0, 1\}\)
密钥生成\(\text{Gen}(1^\lambda)\):
-
随机选择私钥\(s \leftarrow \psi\)
-
随机选择\(a \leftarrow U(R_q)\)
-
随机选择\(e \leftarrow \psi\)
-
计算\(b = a \cdot s + e \in R_q\)
-
公钥\(\mathbf{pk} = (a, b)\)
-
返回\((\mathbf{pk}, s)\)
加密\(\text{Enc}(\mathbf{pk}, m)\):
-
将消息编码:\(m' = m \cdot \lfloor q/2 \rfloor \in R_q\)
-
随机选择\(r \leftarrow \psi\)
-
随机选择\(e_1, e_2 \leftarrow \psi\)
-
计算\(u = a \cdot r + e_1 \in R_q\)
-
计算\(v = b \cdot r + e_2 + m' \in R_q\)
-
返回密文\(c = (u, v)\)
解密\(\text{Dec}(s, c)\):
-
计算\(w = v - u \cdot s \in R_q\)
-
对每个系数\(w_i\):
-
如果\(|w_i| < q/4\),解码为 0
-
否则解码为 1
- 返回解码后的消息
性能分析:
-
密钥大小:公钥约 4KB,私钥约 2KB
-
加密速度:约 10000 次 / 秒(单线程)
-
解密速度:约 20000 次 / 秒(单线程)
-
密文扩展率:约 8 倍
9.2 数字签名方案(Dilithium)
Dilithium 概述:
-
基于 RLWE 的数字签名方案
-
NIST 后量子密码标准候选方案
-
安全性基于格问题的最坏情况困难性
算法 9.2(Dilithium 签名方案):
参数集(Dilithium2):
-
环\(R = \mathbb{Z}[x]/(x^256 + 1)\)
-
模数\(q = 8380417\)
-
签名长度:2420 字节
-
公钥长度:1312 字节
密钥生成\(\text{Gen}(1^\lambda)\):
-
随机选择\(A \leftarrow U(R_q^{k \times l})\)
-
随机选择\(\mathbf{s} \leftarrow \psi^l\),\(\mathbf{t}_1 \leftarrow \psi^k\)
-
计算\(\mathbf{t}_0 = A \mathbf{s} + \mathbf{t}_1 \in R_q^k\)
-
公钥\(\mathbf{pk} = (A, \mathbf{t}_0)\)
-
私钥\(\mathbf{sk} = (\mathbf{s}, \mathbf{t}_1)\)
-
返回\((\mathbf{pk}, \mathbf{sk})\)
签名\(\text{Sign}(\mathbf{sk}, M)\):
-
计算\(h = H(M) \in R_q^k\)
-
随机选择\(\mathbf{y} \leftarrow D_{R^l, \gamma}\)
-
计算\(\mathbf{w} = A \mathbf{y} \in R_q^k\)
-
计算\(c = H(\mathbf{w}, h) \in R\)
-
计算\(\mathbf{z} = \mathbf{y} + c \cdot \mathbf{s} \in R^l\)
-
计算\(\mathbf{h} = c \cdot \mathbf{t}_1 \in R^k\)
-
如果\(\|\mathbf{z}\|\)或\(\|\mathbf{h}\|\)太大,重新选择\(\mathbf{y}\)
-
返回签名\((\mathbf{z}, c, \mathbf{h})\)
验证\(\text{Verify}(\mathbf{pk}, M, (\mathbf{z}, c, \mathbf{h}))\):
-
计算\(h = H(M) \in R_q^k\)
-
计算\(\mathbf{w}' = A \mathbf{z} - c \cdot \mathbf{t}_0 + \mathbf{h} \in R_q^k\)
-
计算\(c' = H(\mathbf{w}', h) \in R\)
-
检查\(c = c'\)和\(\|\mathbf{z}\|, \|\mathbf{h}\|\)是否足够小
-
有效则返回 1,否则返回 0
9.3 密钥交换协议(NewHope)
NewHope 概述:
-
基于 RLWE 的密钥交换协议
-
后量子密钥交换的代表方案
-
支持双方安全地协商共享密钥
算法 9.3(NewHope 密钥交换):
参数:
-
环\(R = \mathbb{Z}[x]/(x^1024 + 1)\)
-
模数\(q = 12289\)
-
错误分布:中心二项分布\(\psi = \Psi_{16}\)
Alice 的操作:
-
随机选择私钥\(\mathbf{s}_A \leftarrow \psi\)
-
随机选择\(\mathbf{a} \leftarrow U(R_q)\)
-
计算\(\mathbf{b}_A = \mathbf{a} \cdot \mathbf{s}_A + \mathbf{e}_A \in R_q\)
-
发送\((\mathbf{a}, \mathbf{b}_A)\)给 Bob
Bob 的操作:
-
接收\((\mathbf{a}, \mathbf{b}_A)\)
-
随机选择私钥\(\mathbf{s}_B \leftarrow \psi\)
-
计算\(\mathbf{b}_B = \mathbf{a} \cdot \mathbf{s}_B + \mathbf{e}_B \in R_q\)
-
计算\(\mathbf{u}_B = \mathbf{b}_A \cdot \mathbf{s}_B + \mathbf{e}_{B2} \in R_q\)
-
发送\(\mathbf{b}_B\)给 Alice
-
对\(\mathbf{u}_B\)进行舍入得到共享密钥\(K_B\)
Alice 的操作:
-
接收\(\mathbf{b}_B\)
-
计算\(\mathbf{u}_A = \mathbf{b}_B \cdot \mathbf{s}_A + \mathbf{e}_{A2} \in R_q\)
-
对\(\mathbf{u}_A\)进行舍入得到共享密钥\(K_A\)
正确性:
\(K_A = K_B\),因为:
$ \mathbf{u}_A = \mathbf{b}_B \cdot \mathbf{s}A + \mathbf{e} = (\mathbf{a} \cdot \mathbf{s}_B + \mathbf{e}_B) \cdot \mathbf{s}A + \mathbf{e} = \mathbf{a} \cdot \mathbf{s}_A \cdot \mathbf{s}_B + \mathbf{e}_B \cdot \mathbf{s}A + \mathbf{e} $
$ \mathbf{u}_B = \mathbf{b}_A \cdot \mathbf{s}B + \mathbf{e} = (\mathbf{a} \cdot \mathbf{s}_A + \mathbf{e}_A) \cdot \mathbf{s}B + \mathbf{e} = \mathbf{a} \cdot \mathbf{s}_A \cdot \mathbf{s}_B + \mathbf{e}_A \cdot \mathbf{s}B + \mathbf{e} $
9.4 同态加密(BGV 方案)
BGV 概述:
-
基于 RLWE 的层级全同态加密方案
-
支持任意数量的加法和乘法
-
使用模数切换技术控制噪声增长
算法 9.4(BGV 同态加密):
参数选择:
-
环\(R = \mathbb{Z}[x]/(x^n + 1)\)
-
模数层级\(q_0 < q_1 < \cdots < q_L\)
-
错误分布\(\psi = D_{R, \sigma}\)
密钥生成\(\text{Gen}(1^\lambda)\):
-
选择基础模数\(q_0\)和层级模数\(q_1, \ldots, q_L\)
-
随机选择私钥\(s \leftarrow \psi\)
-
随机选择\(a \leftarrow U(R_{q_L})\)
-
随机选择\(e \leftarrow \psi\)
-
计算\(b = a \cdot s + e \in R_{q_L}\)
-
公钥\(\mathbf{pk} = (a, b)\)
-
密钥切换密钥\(\text{KSK}\):用于在不同层级之间转换
-
返回\((\mathbf{pk}, s, \text{KSK})\)
加密\(\text{Enc}(\mathbf{pk}, m)\):
-
将消息\(m\)编码为\(m' \in R_{q_0}\)
-
随机选择\(r \leftarrow \psi\)
-
随机选择\(e_1, e_2 \leftarrow \psi\)
-
计算\(u = a \cdot r + e_1 \in R_{q_L}\)
-
计算\(v = b \cdot r + e_2 + m' \in R_{q_L}\)
-
返回密文\(c = (u, v)\)
同态加法\(c_3 = c_1 + c_2\):
-
\(u_3 = u_1 + u_2 \mod q\)
-
\(v_3 = v_1 + v_2 \mod q\)
-
返回\(c_3 = (u_3, v_3)\)
同态乘法\(c_3 = c_1 \times c_2\):
-
\(u_3 = u_1 \cdot u_2 \mod q\)
-
\(v_3 = u_1 \cdot v_2 + u_2 \cdot v_1 + v_1 \cdot v_2 \mod q\)
-
使用密钥切换减小密文维度
-
返回\(c_3 = (u_3, v_3)\)
模数切换\(\text{ModSwitch}(c, q, q')\):
- 对密文\(c = (u, v)\)的每个系数:
-
\(u'_i = \left\lfloor \frac{q'}{q} u_i \right\rceil\)
-
\(v'_i = \left\lfloor \frac{q'}{q} v_i \right\rceil\)
- 返回\(c' = (u', v')\)
10. 实现与优化技术
10.1 环运算优化
多项式乘法优化:
-
快速傅里叶变换(FFT):将多项式乘法转换为点积
-
数论变换(NTT):在有限域上的 FFT,避免浮点运算
-
中国剩余定理(CRT):将大模数运算分解为小模数运算
NTT 优化步骤:
-
预处理:选择合适的根和预处理因子
-
正向变换:将多项式转换到频域
-
点积:在频域中进行点积运算
-
逆向变换:将结果转换回多项式域
代码示例:
def ntt(poly, root, mod):
"""正向NTT变换"""
n = len(poly)
if n == 1:
return poly
even = ntt(poly[0::2], root*root % mod, mod)
odd = ntt(poly[1::2], root*root % mod, mod)
res = [0] * n
w = 1
for i in range(n//2):
res[i] = (even[i] + w * odd[i]) % mod
res[i + n//2] = (even[i] - w * odd[i]) % mod
w = w * root % mod
return res
10.2 错误分布优化
离散高斯分布采样:
-
拒绝采样:从连续分布采样后舍入,拒绝不满足条件的样本
-
Ziggurat 算法:高效的连续分布采样算法
-
中心二项分布:\(\Psi_t\),由 t 次独立伯努利试验的和组成
中心二项分布的优势:
-
高效采样:\(O(t)\)时间复杂度
-
确定性边界:最大错误为 t
-
易于分析:概率分布易于分析
参数选择:
-
对于安全级别\(\lambda\),选择\(t = O(\lambda)\)
-
通常\(t = 16\)或\(t = 32\)
代码示例:
def sample_centered_binomial(t):
"""采样中心二项分布Ψ_t"""
return sum(random.choice([-1, 1]) for _ in range(t))
10.3 模数优化
模数选择原则:
-
NTT 友好:\(q = 1 \mod 2n\),支持 NTT
-
安全性:\(q\)足够大以抵抗格攻击
-
效率:\(q\)不宜过大以保持效率
常用模数:
-
\(q = 12289\)(14 位,\(12289 = 1 \mod 2048\))
-
\(q = 32768\)(15 位,\(32768 = 0 \mod 2\))
-
\(q = 8380417\)(23 位,\(8380417 = 1 \mod 2048\))
模数切换优化:
-
舍入方法:最近整数舍入或高斯舍入
-
错误分析:分析舍入过程中的错误增长
-
参数调整:调整模数比以优化性能
10.4 并行计算优化
并行化策略:
-
数据并行:对多个密文同时进行操作
-
任务并行:将不同的操作分配给不同的处理器
-
流水线:将复杂操作分解为流水线阶段
GPU 加速:
-
CUDA 实现:利用 GPU 的并行计算能力
-
内存优化:优化数据布局以提高内存带宽
-
同步控制:减少处理器之间的同步开销
10.5 实际实现示例
RLWE 加密实现:
import numpy as np
from numpy.fft import rfft, irfft
class RLWE:
def __init__(self, n=256, q=32768, sigma=3.2):
self.n = n
self.q = q
self.sigma = sigma
self.root = self.find_primitive_root()
def find_primitive_root(self):
"""找到2n次本原根"""
# 简化实现,实际中需要根据q和n计算
return 17
def ntt(self, a):
"""数论变换"""
return rfft(a) * self.root
def intt(self, a):
"""逆数论变换"""
return irfft(a / self.root)
def poly_mul(self, a, b):
"""多项式乘法"""
return np.round(self.intt(self.ntt(a) * self.ntt(b))).astype(int) % self.q
def sample_gaussian(self):
"""采样离散高斯分布"""
return np.random.normal(0, self.sigma, self.n).astype(int)
def keygen(self):
"""密钥生成"""
s = self.sample_gaussian()
a = np.random.randint(0, self.q, self.n)
e = self.sample_gaussian()
b = (self.poly_mul(a, s) + e) % self.q
return (a, b), s
def encrypt(self, pk, m):
"""加密"""
a, b = pk
m_encoded = m * (self.q // 2)
r = self.sample_gaussian()
e1 = self.sample_gaussian()
e2 = self.sample_gaussian()
u = (self.poly_mul(a, r) + e1) % self.q
v = (self.poly_mul(b, r) + e2 + m_encoded) % self.q
return (u, v)
def decrypt(self, s, c):
"""解密"""
u, v = c
w = (v - self.poly_mul(u, s)) % self.q
return 0 if abs(w[0]) < self.q // 4 else 1
11. 实际案例分析
11.1 NIST 后量子密码标准
NIST 竞赛概述:
-
2016 年启动,旨在标准化后量子密码算法
-
第三轮候选算法包括基于格、编码、哈希等的方案
-
基于格的方案表现突出,特别是 RLWE-based 方案
基于 RLWE 的候选方案:
-
CRYSTALS-Kyber:密钥封装机制
-
CRYSTALS-Dilithium:数字签名
-
Saber:密钥封装和数字签名
-
FrodoKEM:基于 LWE 的密钥封装
11.2 CRYSTALS-Kyber 分析
Kyber 概述:
-
基于 RLWE 的密钥封装机制
-
第三轮候选方案,表现优秀
-
平衡了安全性、效率和实现复杂度
参数集:
-
Kyber512:128 位安全,公钥 768 字节,密文 800 字节
-
Kyber768:192 位安全,公钥 1152 字节,密文 1088 字节
-
Kyber1024:256 位安全,公钥 1536 字节,密文 1568 字节
算法分析:
-
安全性:基于 RLWE 问题的困难性
-
效率:比传统 RSA 快 10-100 倍
-
实现:代码简洁,易于优化
11.3 CRYSTALS-Dilithium 分析
Dilithium 概述:
-
基于 RLWE 的数字签名方案
-
第三轮候选方案
-
安全性基于格问题的最坏情况困难性
参数集:
-
Dilithium2:128 位安全,公钥 1312 字节,签名 2420 字节
-
Dilithium3:192 位安全,公钥 1952 字节,签名 3293 字节
-
Dilithium5:256 位安全,公钥 2592 字节,签名 4595 字节
性能特点:
-
签名速度:约 1000 次 / 秒
-
验证速度:约 2000 次 / 秒
-
抗碰撞性:基于格问题的困难性
11.4 实际部署案例
Google Chrome:
-
支持 TLS 1.3 的后量子密钥交换
-
实现了 NewHope 和 Kyber
-
逐步向用户推广
Cloudflare:
-
提供后量子密码服务
-
支持 Kyber 和其他后量子方案
-
为网站提供后量子安全
11.5 性能优化案例
ARM 优化:
-
利用 NEON 指令集加速 NTT
-
优化内存访问模式
-
实现循环展开和流水线
FPGA 实现:
-
硬件加速 NTT 运算
-
并行处理多个密文
-
低功耗设计
参考资料:
-
Regev, O. (2005). On lattices, learning with errors, random linear codes, and cryptography.
-
Lyubashevsky, V., Peikert, C., & Regev, O. (2010). On ideal lattices and learning with errors over rings.
-
Micciancio, D., & Goldwasser, S. (2002). Complexity of lattice problems: a cryptographic perspective.
-
CRYSTALS-Kyber and CRYSTALS-Dilithium specifications.

LWE和RLWE
浙公网安备 33010602011771号