基于格的密码学
基于格的密码学
1. 数学定义
在数学中,格是由一组线性无关向量,通过整数线性组合生成的点集。
给定基向量
格定义为:
直观理解
- 在 2D:像无限延伸的“网格点”
- 在 256 维 / 1024 维:无法可视化的高维结构
- 同一个格可以有 无数种不同的基表示
2. “好基”和“坏基”
这是格密码学的关键直觉。
- 好基:向量短、接近正交
- 坏基:向量长、彼此夹角小、严重纠缠
但重要的是:
给定一个格,你很难从坏基计算出好基
这正是安全性的来源之一。
二、格密码的核心困难问题
1. SVP(Shortest Vector Problem)
最短向量问题
在一个格中,找到除零向量外长度最短的向量。
- 在高维下是 NP-hard
- 即使近似版本也极其困难
2. CVP(Closest Vector Problem)
最近向量问题
给定一个点,找到格中距离它最近的向量。
- 比 SVP 更难
- 破解很多格密码等价于解决 CVP
3. 为什么量子计算也帮不上忙?
-
Shor 算法只适用于:
- 整数分解
- 离散对数
-
对 SVP / CVP:
- 没有已知的多项式时间量子算法
- 最优量子算法只提供多项式或常数级改进
三、从“纯格问题”到“可用密码”:LWE
直接用 SVP/CVP 太抽象,工程上不可用,于是引入:
1. LWE(Learning With Errors)
定义(核心)
给定若干样本:
其中:
- :随机向量
- :秘密向量
- :小噪声
- :模数
攻击者目标:
从这些样本中恢复
2. 为什么 LWE 很难?
-
如果 没有噪声:
- 线性方程组 → 高斯消元直接解
-
加入噪声后:
- 每个方程都“差一点”
- 高维空间中误差指数级放大
关键定理(Regev, 2005):
平均情况下的 LWE 问题 ≥ 最坏情况下的格问题(SVP/CVP)
这是密码学中极其重要的“最坏情况归约”。
3. 噪声是安全性的灵魂
- 噪声太小 → 可线性求解
- 噪声太大 → 解密失败
- 工程上精确控制噪声分布(通常是离散高斯)
四、Ring-LWE / Module-LWE:工程化优化
1. 为什么需要 Ring-LWE?
原始 LWE 问题:
- 向量维度大
- 公钥、密文体积巨大
- 计算慢
Ring-LWE 的改进
将向量换成多项式:
- 向量 → 多项式
- 内积 → 多项式乘法
- 可用 FFT / NTT 加速
2. Module-LWE(现代主流)
Module-LWE 介于:
- LWE(安全性高,但慢)
- Ring-LWE(效率高,但结构强)
Kyber、Dilithium 使用 Module-LWE
优势:
- 平衡安全性与效率
- 更易参数化
- 抗结构攻击能力更强
五、基于格的密钥交换:KEM 原理
以 Kyber 为例说明。
1. 基本思想
- 公钥中包含一个“带噪声的线性关系”
- 私钥是噪声和秘密
- 解密方可以“近似恢复”共享密钥
- 攻击者无法消除噪声
2. 高层流程(简化)
KeyGen
- 生成秘密多项式
- 生成噪声
- 公钥:
Encapsulate
- 生成随机消息
- 用公钥计算密文(再次引入噪声)
- 从 派生共享密钥
Decapsulate
- 使用私钥消噪
- 近似恢复
- 派生相同密钥
3. “近似正确”是允许的
- 解密不是精确计算
- 而是“在噪声容忍区间内”
- 通过取整 / 比较阈值恢复比特
六、为什么基于格的算法“天生抗量子”
总结关键原因:
1. 数学问题不同
| 传统密码 | 格密码 |
|---|---|
| 因数分解 | 高维几何 |
| 离散对数 | 噪声线性代数 |
| 代数结构强 | 统计结构复杂 |
2. 无已知量子特攻算法
- Shor 不适用
- Grover 仅提供搜索加速
- 目前最优攻击仍是 BKZ(经典/量子)
3. 安全性有理论背书
- 最坏情况 → 平均情况归约
- 非经验假设
- 学术界信心高
七、工程层面的代价与挑战
1. 密钥和密文更大
- ECC 公钥:32~64 字节
- Kyber 公钥:800~1500 字节
2. 实现复杂
- 噪声采样
- 常数时间实现
- 防侧信道攻击
3. 参数必须非常谨慎
- 噪声分布
- 模数选择
- 维度选择