CRYSTALS-Kyber 后量子密钥封装机制
字数 2014 2025-11-04 08:32:42

CRYSTALS-Kyber 后量子密钥封装机制

题目描述

CRYSTALS-Kyber 是一种基于格的后量子密码学算法,专为密钥封装(Key Encapsulation Mechanism, KEM)设计。其安全性依赖于模块化格上带错误学习问题(Module-LWE)的困难性。题目要求理解 Kyber 的密钥生成、封装和解封装过程,并分析其如何通过多项式环上的向量运算实现安全性与效率的平衡。


解题过程

1. 背景知识:Module-LWE 问题

  • 核心思想:在多项式环 \(R_q = \mathbb{Z}_q[X]/(X^n + 1)\) 上(例如 \(n=256, q=3329\)),攻击者需要从一组形如 \((A, A s + e)\) 的方程中恢复秘密向量 \(s\)(其中 \(A\) 为随机矩阵,\(s, e\) 为小随机向量)。
  • Kyber 的优化:使用模块格(Module-LWE)而非标准 LWE,通过调整维度参数平衡安全性与计算效率。

2. Kyber 的参数设置

以 Kyber-512(NIST 安全级别 1)为例:

  • 环维度 \(n = 256\),模数 \(q = 3329\)
  • 模块维度 \(k = 2\)(即向量长度为 2);
  • 错误分布:中心二项分布 \(B_\eta\)(例如 \(\eta=2\))。

3. 密钥生成(KeyGen)

步骤分解

  1. 生成随机矩阵 \(A\)
    • 通过扩展函数(如 SHAKE-128)从种子 \(\rho\) 确定性地生成 \(A \in R_q^{k \times k}\),避免存储大矩阵。
  2. 生成秘密向量 \(s\) 和错误向量 \(e\)
    • \(s, e \leftarrow B_\eta^k\)(每个分量从二项分布采样)。
  3. 计算公钥 \(t\)
    • \(t = A s + e \in R_q^k\)
  4. 输出
    • 公钥 \(pk = (t, \rho)\)
    • 私钥 \(sk = s\),并保存 \(pk\) 的哈希值用于封装时验证。

关键点:公钥中的 \(t\) 看似随机,但隐藏了 \(s\)\(e\) 的结构。


4. 封装(Encapsulate)

目标:生成共享密钥 \(K\) 和其密文 \(c\)
步骤

  1. 生成随机向量 \(r\) 和错误项 \(e_1, e_2\)
    • \(r, e_1 \leftarrow B_\eta^k\)\(e_2 \leftarrow B_\eta\)
  2. 计算密文组件
    • \(u = A^T r + e_1 \in R_q^k\)(转置确保维度匹配);
    • \(v = t^T r + e_2 + \lfloor q/2 \rfloor \cdot m \in R_q\),其中 \(m\) 为 1 比特编码的明文(0 或 1)。
  3. 压缩密文
    • \(u, v\) 进行无损压缩(如四舍五入到较低精度),减少密文大小。
  4. 派生密钥 \(K\)
    • 使用 \((c, \text{哈希}(pk))\) 通过哈希函数(SHAKE-256)生成密钥 \(K\)

安全性:攻击者仅知 \((u, v)\),而恢复 \(m\) 需要解决 Module-LWE 问题。


5. 解封装(Decapsulate)

目标:从密文 \(c\) 恢复共享密钥 \(K\)
步骤

  1. 解压缩 \(u, v\):恢复近似值 \(u', v'\)
  2. 计算近似明文 \(m'\)
    • \(w = v' - s^T u' \in R_q\)
    • 比较 \(w\)\(\lfloor q/2 \rfloor\):若距离更近则解码为 1,否则为 0。
  3. 重新派生密钥 \(K\)
    • 使用相同的哈希函数处理 \((c, \text{哈希}(pk))\) 得到 \(K\)
    • 关键验证:解密者需验证密文是否由合法公钥生成,防止攻击者注入恶意密文。

错误容忍性:由于压缩引入误差,但 \(\lfloor q/2 \rfloor\) 的缩放确保解码容错。


6. 安全性分析

  • IND-CCA2 安全:通过 Fujisaki-Okamoto 变换将 Module-LWE 的 CPA 安全提升至 CCA2 安全。
  • 侧信道防护:采用常数时间实现,避免通过运行时间泄露秘密信息。

总结

Kyber 通过多项式环上的向量运算和错误容忍设计,实现了高效且抗量子攻击的密钥封装。其核心在于 Module-LWE 的困难性,以及通过压缩和哈希函数优化实际性能。

CRYSTALS-Kyber 后量子密钥封装机制 题目描述 CRYSTALS-Kyber 是一种基于格的后量子密码学算法,专为密钥封装(Key Encapsulation Mechanism, KEM)设计。其安全性依赖于模块化格上带错误学习问题(Module-LWE)的困难性。题目要求理解 Kyber 的密钥生成、封装和解封装过程,并分析其如何通过多项式环上的向量运算实现安全性与效率的平衡。 解题过程 1. 背景知识:Module-LWE 问题 核心思想 :在多项式环 \( R_ q = \mathbb{Z}_ q[ X ]/(X^n + 1) \) 上(例如 \( n=256, q=3329 \)),攻击者需要从一组形如 \( (A, A s + e) \) 的方程中恢复秘密向量 \( s \)(其中 \( A \) 为随机矩阵,\( s, e \) 为小随机向量)。 Kyber 的优化 :使用模块格(Module-LWE)而非标准 LWE,通过调整维度参数平衡安全性与计算效率。 2. Kyber 的参数设置 以 Kyber-512(NIST 安全级别 1)为例: 环维度 \( n = 256 \),模数 \( q = 3329 \); 模块维度 \( k = 2 \)(即向量长度为 2); 错误分布:中心二项分布 \( B_ \eta \)(例如 \( \eta=2 \))。 3. 密钥生成(KeyGen) 步骤分解 : 生成随机矩阵 \( A \) : 通过扩展函数(如 SHAKE-128)从种子 \( \rho \) 确定性地生成 \( A \in R_ q^{k \times k} \),避免存储大矩阵。 生成秘密向量 \( s \) 和错误向量 \( e \) : \( s, e \leftarrow B_ \eta^k \)(每个分量从二项分布采样)。 计算公钥 \( t \) : \( t = A s + e \in R_ q^k \)。 输出 : 公钥 \( pk = (t, \rho) \); 私钥 \( sk = s \),并保存 \( pk \) 的哈希值用于封装时验证。 关键点 :公钥中的 \( t \) 看似随机,但隐藏了 \( s \) 和 \( e \) 的结构。 4. 封装(Encapsulate) 目标 :生成共享密钥 \( K \) 和其密文 \( c \)。 步骤 : 生成随机向量 \( r \) 和错误项 \( e_ 1, e_ 2 \) : \( r, e_ 1 \leftarrow B_ \eta^k \),\( e_ 2 \leftarrow B_ \eta \)。 计算密文组件 : \( u = A^T r + e_ 1 \in R_ q^k \)(转置确保维度匹配); \( v = t^T r + e_ 2 + \lfloor q/2 \rfloor \cdot m \in R_ q \),其中 \( m \) 为 1 比特编码的明文(0 或 1)。 压缩密文 : 对 \( u, v \) 进行无损压缩(如四舍五入到较低精度),减少密文大小。 派生密钥 \( K \) : 使用 \( (c, \text{哈希}(pk)) \) 通过哈希函数(SHAKE-256)生成密钥 \( K \)。 安全性 :攻击者仅知 \( (u, v) \),而恢复 \( m \) 需要解决 Module-LWE 问题。 5. 解封装(Decapsulate) 目标 :从密文 \( c \) 恢复共享密钥 \( K \)。 步骤 : 解压缩 \( u, v \) :恢复近似值 \( u', v' \)。 计算近似明文 \( m' \) : \( w = v' - s^T u' \in R_ q \)。 比较 \( w \) 与 \( \lfloor q/2 \rfloor \):若距离更近则解码为 1,否则为 0。 重新派生密钥 \( K \) : 使用相同的哈希函数处理 \( (c, \text{哈希}(pk)) \) 得到 \( K \)。 关键验证 :解密者需验证密文是否由合法公钥生成,防止攻击者注入恶意密文。 错误容忍性 :由于压缩引入误差,但 \( \lfloor q/2 \rfloor \) 的缩放确保解码容错。 6. 安全性分析 IND-CCA2 安全 :通过 Fujisaki-Okamoto 变换将 Module-LWE 的 CPA 安全提升至 CCA2 安全。 侧信道防护 :采用常数时间实现,避免通过运行时间泄露秘密信息。 总结 Kyber 通过多项式环上的向量运算和错误容忍设计,实现了高效且抗量子攻击的密钥封装。其核心在于 Module-LWE 的困难性,以及通过压缩和哈希函数优化实际性能。