LWE和RLWE问题

LWE 和 RLWE 问题

目录

  1. 教程介绍

  2. 数学基础回顾

  3. 格理论基础

  4. LWE 问题深度解析

  5. LWE 安全性证明

  6. LWE 密码学应用

  7. RLWE 问题深度解析

  8. RLWE 安全性证明

  9. RLWE 密码学应用

  10. 实现与优化技术

  11. 实际案例分析

  12. 课后练习


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\)线性无关。

图3.1:二维格的可视化

基本性质

  1. 离散性:格中任意有界区域只包含有限个格点

  2. 加法封闭性:若\(\mathbf{x}, \mathbf{y} \in L\),则\(\mathbf{x} + \mathbf{y} \in L\)

  3. 标量乘法:若\(\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 提出

  • 源于学习理论中的 "带噪声学习" 问题

  • 结合了格理论和学习理论的思想

设计动机

  1. 量子抗性:基于格问题,量子计算机难以解决

  2. 最坏情况安全性:有严格的最坏情况到平均情况归约

  3. 构造简洁:基于线性代数,易于理解和实现

  4. 功能强大:支持构建各种密码学原语

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)\)上的分布,采样过程为:

  1. \(\mathbf{a} \leftarrow U(\mathbb{Z}_q^n)\)(均匀随机向量)

  2. \(e \leftarrow D_{\mathbb{Z}, \alpha q, 0}\)(离散高斯错误)

  3. \(b = \langle \mathbf{a}, \mathbf{s} \rangle + e \mod q\)

  4. 输出\((\mathbf{a}, b)\)

图4.1:LWE采样过程示意图

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\)

采样过程

  1. 随机选择\(\mathbf{a} = [2, 4]^T\)

  2. 计算\(\langle \mathbf{a}, \mathbf{s} \rangle = 2 \times 3 + 4 \times 5 = 6 + 20 = 26\)

  3. 模 7:\(26 \mod 7 = 5\)

  4. 采样错误\(e \leftarrow D_{\mathbb{Z}, 1.75, 0}\),假设得到\(e=1\)

  5. 计算\(b = 5 + 1 = 6 \mod 7\)

  6. 样本:\((\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 归约证明的核心思想

证明框架

  1. 格的构造:从 LWE 实例构造 q-ary 格

  2. 解的映射:将 LWE 解映射为格中的短向量

  3. 正确性分析:证明归约的正确性和复杂性

关键引理

引理 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. 增强区分优势:通过多次采样将区分优势提高到\(1 - 2^{-3n}\)

  2. 分量恢复:逐个恢复秘密向量的分量

  3. 验证测试:验证猜测的分量是否正确

  4. 扩展到全向量:对所有分量重复上述过程

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)\)

  1. 选择参数\(n, q, \chi\)

  2. 随机选择私钥\(\mathbf{sk} = \mathbf{s} \leftarrow \mathbb{Z}_q^n\)

  3. 返回\(\mathbf{sk}\)

加密\(\text{Enc}(\mathbf{sk}, m)\)

  1. 输入:私钥\(\mathbf{sk}\),消息\(m \in \{0, 1\}\)

  2. 随机选择\(\mathbf{a} \leftarrow U(\mathbb{Z}_q^n)\)

  3. 随机选择\(e \leftarrow \chi\)

  4. 计算\(b = \langle \mathbf{a}, \mathbf{s} \rangle + e + m \cdot \lfloor q/2 \rfloor \mod q\)

  5. 返回密文\(c = (\mathbf{a}, b)\)

解密\(\text{Dec}(\mathbf{sk}, c)\)

  1. 输入:私钥\(\mathbf{sk}\),密文\(c = (\mathbf{a}, b)\)

  2. 计算\(v = b - \langle \mathbf{a}, \mathbf{s} \rangle \mod q\)

  3. 如果\(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)\)

  1. 选择参数\(n, q, \chi\)

  2. 随机选择私钥\(\mathbf{sk} = \mathbf{s} \leftarrow \chi^n\)(小秘密)

  3. 随机选择矩阵\(A \leftarrow U(\mathbb{Z}_q^{n \times n})\)

  4. 随机选择错误向量\(\mathbf{e} \leftarrow \chi^n\)

  5. 计算\(\mathbf{y}^T = \mathbf{s}^T A + \mathbf{e}^T \mod q\)

  6. 公钥\(\mathbf{pk} = (A, \mathbf{y}^T)\)

  7. 返回\((\mathbf{pk}, \mathbf{sk})\)

加密\(\text{Enc}(\mathbf{pk}, m)\)

  1. 输入:公钥\(\mathbf{pk}\),消息\(m \in \{0, 1\}\)

  2. 随机选择\(\mathbf{r}, \mathbf{x} \leftarrow \chi^n\)

  3. 随机选择\(x' \leftarrow \chi\)

  4. 计算\(\mathbf{a} = A \mathbf{r} + \mathbf{x} \mod q\)

  5. 计算\(b = \mathbf{y}^T \mathbf{r} + x' + m \cdot \lfloor q/2 \rfloor \mod q\)

  6. 返回密文\(c = (\mathbf{a}, b)\)

解密\(\text{Dec}(\mathbf{sk}, c)\)

  1. 输入:私钥\(\mathbf{sk}\),密文\(c = (\mathbf{a}, b)\)

  2. 计算\(v = b - \mathbf{s}^T \mathbf{a} \mod q\)

  3. 解密规则同私钥加密

安全性证明

通过混合论证证明 CPA 安全性:

  1. 混合 0:真实加密

  2. 混合 1:用随机矩阵替换公钥

  3. 混合 2:用随机向量替换密文

  4. 混合 3:完全随机密文

6.3 数字签名方案

算法 6.3(LWE 数字签名)

密钥生成\(\text{Gen}(1^\lambda)\)

  1. 选择参数\(n, q, m, \chi\)

  2. 随机选择\(A \leftarrow U(\mathbb{Z}_q^{n \times m})\)

  3. 随机选择\(\mathbf{s} \leftarrow \chi^n\)\(\mathbf{e} \leftarrow \chi^m\)

  4. 计算\(\mathbf{t} = A \mathbf{e} + q \mathbf{s} \in \mathbb{Z}^n\)

  5. 公钥\(\mathbf{pk} = (A, \mathbf{t})\)

  6. 私钥\(\mathbf{sk} = \mathbf{e}\)

  7. 返回\((\mathbf{pk}, \mathbf{sk})\)

签名\(\text{Sign}(\mathbf{sk}, M)\)

  1. 输入:私钥\(\mathbf{sk}\),消息\(M\)

  2. 计算哈希\(h = H(M) \in \mathbb{Z}_q^n\)

  3. 随机选择\(\mathbf{r} \leftarrow \chi^m\)

  4. 计算\(\mathbf{c} = A \mathbf{r} \mod q\)

  5. 计算\(\mathbf{z} = \mathbf{r} + \mathbf{e} \cdot H(\mathbf{c}, h) \in \mathbb{Z}^m\)

  6. 如果\(\|\mathbf{z}\|\)太大,重新选择\(\mathbf{r}\)

  7. 返回签名\((\mathbf{z}, H(\mathbf{c}, h))\)

验证\(\text{Verify}(\mathbf{pk}, M, (\mathbf{z}, c))\)

  1. 输入:公钥\(\mathbf{pk}\),消息\(M\),签名\((\mathbf{z}, c)\)

  2. 计算哈希\(h = H(M) \in \mathbb{Z}_q^n\)

  3. 计算\(\mathbf{c}' = A \mathbf{z} - c \cdot \mathbf{t} \mod q\)

  4. 检查\(c = H(\mathbf{c}', h)\)\(\|\mathbf{z}\|\)是否足够小

  5. 有效则返回 1,否则返回 0

6.4 全同态加密基础

同态加密概念

允许对密文进行计算,得到的结果解密后与对明文计算的结果相同。

部分同态加密

只支持加法或乘法中的一种运算。

全同态加密

支持任意数量的加法和乘法运算。

基于 LWE 的 FHE 构造思路

  1. 引导技术(Bootstrapping):使用自身的解密电路对密文进行重加密

  2. 层级结构:使用不同模数的层级,每级支持有限次数的运算

  3. 密钥切换:在不同密钥之间转换密文


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.1:LWE与RLWE效率对比

7.2 环的选择与性质

常用环结构

  1. 分圆多项式环\(R = \mathbb{Z}[x]/\Phi_m(x)\)\(\Phi_m(x)\)是 m 次分圆多项式

  2. 多项式环\(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\)上的分布,采样过程为:

  1. \(a \leftarrow U(R_q)\)(环上均匀随机元素)

  2. \(e \leftarrow \psi\)(环上错误分布)

  3. \(b = a \cdot s + e \in R_q\)(环乘法)

  4. 输出\((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 问题一样难。

证明思路

  1. 嵌入:将 LWE 实例嵌入到 RLWE 实例中

  2. 解的提取:从 RLWE 解中提取 LWE 解

  3. 复杂度分析:证明归约的多项式时间复杂性

实际意义

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}\)问题。

归约框架

  1. 理想格构造:从 RLWE 实例构造理想格

  2. 短向量提取:将 RLWE 解转换为理想格中的短向量

  3. 正确性证明:证明归约的正确性

关键技术

  • 环嵌入:将环元素嵌入到欧几里得空间

  • 范数分析:分析嵌入向量的范数

  • 错误传播:控制归约过程中的错误增长

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)\)

  1. 随机选择私钥\(s \leftarrow \psi\)

  2. 随机选择\(a \leftarrow U(R_q)\)

  3. 随机选择\(e \leftarrow \psi\)

  4. 计算\(b = a \cdot s + e \in R_q\)

  5. 公钥\(\mathbf{pk} = (a, b)\)

  6. 返回\((\mathbf{pk}, s)\)

加密\(\text{Enc}(\mathbf{pk}, m)\)

  1. 将消息编码:\(m' = m \cdot \lfloor q/2 \rfloor \in R_q\)

  2. 随机选择\(r \leftarrow \psi\)

  3. 随机选择\(e_1, e_2 \leftarrow \psi\)

  4. 计算\(u = a \cdot r + e_1 \in R_q\)

  5. 计算\(v = b \cdot r + e_2 + m' \in R_q\)

  6. 返回密文\(c = (u, v)\)

解密\(\text{Dec}(s, c)\)

  1. 计算\(w = v - u \cdot s \in R_q\)

  2. 对每个系数\(w_i\)

  • 如果\(|w_i| < q/4\),解码为 0

  • 否则解码为 1

  1. 返回解码后的消息

图9.1:RLWE公钥加密流程图

性能分析

  • 密钥大小:公钥约 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)\)

  1. 随机选择\(A \leftarrow U(R_q^{k \times l})\)

  2. 随机选择\(\mathbf{s} \leftarrow \psi^l\)\(\mathbf{t}_1 \leftarrow \psi^k\)

  3. 计算\(\mathbf{t}_0 = A \mathbf{s} + \mathbf{t}_1 \in R_q^k\)

  4. 公钥\(\mathbf{pk} = (A, \mathbf{t}_0)\)

  5. 私钥\(\mathbf{sk} = (\mathbf{s}, \mathbf{t}_1)\)

  6. 返回\((\mathbf{pk}, \mathbf{sk})\)

签名\(\text{Sign}(\mathbf{sk}, M)\)

  1. 计算\(h = H(M) \in R_q^k\)

  2. 随机选择\(\mathbf{y} \leftarrow D_{R^l, \gamma}\)

  3. 计算\(\mathbf{w} = A \mathbf{y} \in R_q^k\)

  4. 计算\(c = H(\mathbf{w}, h) \in R\)

  5. 计算\(\mathbf{z} = \mathbf{y} + c \cdot \mathbf{s} \in R^l\)

  6. 计算\(\mathbf{h} = c \cdot \mathbf{t}_1 \in R^k\)

  7. 如果\(\|\mathbf{z}\|\)\(\|\mathbf{h}\|\)太大,重新选择\(\mathbf{y}\)

  8. 返回签名\((\mathbf{z}, c, \mathbf{h})\)

验证\(\text{Verify}(\mathbf{pk}, M, (\mathbf{z}, c, \mathbf{h}))\)

  1. 计算\(h = H(M) \in R_q^k\)

  2. 计算\(\mathbf{w}' = A \mathbf{z} - c \cdot \mathbf{t}_0 + \mathbf{h} \in R_q^k\)

  3. 计算\(c' = H(\mathbf{w}', h) \in R\)

  4. 检查\(c = c'\)\(\|\mathbf{z}\|, \|\mathbf{h}\|\)是否足够小

  5. 有效则返回 1,否则返回 0

9.3 密钥交换协议(NewHope)

NewHope 概述

  • 基于 RLWE 的密钥交换协议

  • 后量子密钥交换的代表方案

  • 支持双方安全地协商共享密钥

算法 9.3(NewHope 密钥交换)

参数

  • \(R = \mathbb{Z}[x]/(x^1024 + 1)\)

  • 模数\(q = 12289\)

  • 错误分布:中心二项分布\(\psi = \Psi_{16}\)

Alice 的操作

  1. 随机选择私钥\(\mathbf{s}_A \leftarrow \psi\)

  2. 随机选择\(\mathbf{a} \leftarrow U(R_q)\)

  3. 计算\(\mathbf{b}_A = \mathbf{a} \cdot \mathbf{s}_A + \mathbf{e}_A \in R_q\)

  4. 发送\((\mathbf{a}, \mathbf{b}_A)\)给 Bob

Bob 的操作

  1. 接收\((\mathbf{a}, \mathbf{b}_A)\)

  2. 随机选择私钥\(\mathbf{s}_B \leftarrow \psi\)

  3. 计算\(\mathbf{b}_B = \mathbf{a} \cdot \mathbf{s}_B + \mathbf{e}_B \in R_q\)

  4. 计算\(\mathbf{u}_B = \mathbf{b}_A \cdot \mathbf{s}_B + \mathbf{e}_{B2} \in R_q\)

  5. 发送\(\mathbf{b}_B\)给 Alice

  6. \(\mathbf{u}_B\)进行舍入得到共享密钥\(K_B\)

Alice 的操作

  1. 接收\(\mathbf{b}_B\)

  2. 计算\(\mathbf{u}_A = \mathbf{b}_B \cdot \mathbf{s}_A + \mathbf{e}_{A2} \in R_q\)

  3. \(\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)\)

  1. 选择基础模数\(q_0\)和层级模数\(q_1, \ldots, q_L\)

  2. 随机选择私钥\(s \leftarrow \psi\)

  3. 随机选择\(a \leftarrow U(R_{q_L})\)

  4. 随机选择\(e \leftarrow \psi\)

  5. 计算\(b = a \cdot s + e \in R_{q_L}\)

  6. 公钥\(\mathbf{pk} = (a, b)\)

  7. 密钥切换密钥\(\text{KSK}\):用于在不同层级之间转换

  8. 返回\((\mathbf{pk}, s, \text{KSK})\)

加密\(\text{Enc}(\mathbf{pk}, m)\)

  1. 将消息\(m\)编码为\(m' \in R_{q_0}\)

  2. 随机选择\(r \leftarrow \psi\)

  3. 随机选择\(e_1, e_2 \leftarrow \psi\)

  4. 计算\(u = a \cdot r + e_1 \in R_{q_L}\)

  5. 计算\(v = b \cdot r + e_2 + m' \in R_{q_L}\)

  6. 返回密文\(c = (u, v)\)

同态加法\(c_3 = c_1 + c_2\)

  1. \(u_3 = u_1 + u_2 \mod q\)

  2. \(v_3 = v_1 + v_2 \mod q\)

  3. 返回\(c_3 = (u_3, v_3)\)

同态乘法\(c_3 = c_1 \times c_2\)

  1. \(u_3 = u_1 \cdot u_2 \mod q\)

  2. \(v_3 = u_1 \cdot v_2 + u_2 \cdot v_1 + v_1 \cdot v_2 \mod q\)

  3. 使用密钥切换减小密文维度

  4. 返回\(c_3 = (u_3, v_3)\)

模数切换\(\text{ModSwitch}(c, q, q')\)

  1. 对密文\(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\)

  1. 返回\(c' = (u', v')\)

10. 实现与优化技术

10.1 环运算优化

多项式乘法优化

  • 快速傅里叶变换(FFT):将多项式乘法转换为点积

  • 数论变换(NTT):在有限域上的 FFT,避免浮点运算

  • 中国剩余定理(CRT):将大模数运算分解为小模数运算

NTT 优化步骤

  1. 预处理:选择合适的根和预处理因子

  2. 正向变换:将多项式转换到频域

  3. 点积:在频域中进行点积运算

  4. 逆向变换:将结果转换回多项式域

代码示例

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 方案

图11.1:NIST后量子密码竞赛时间线

基于 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.

posted @ 2026-01-06 16:19  3cH0_Nu1L  阅读(7)  评论(0)    收藏  举报