跳转到内容

Regev LWE 2005 — 把带噪声方程变成后量子密码地基

待复核

Regev 的 LWE 论文提出了一个看起来像“小学方程组被人故意抹脏”的问题:给你很多条线性方程,每条答案都被加了一点随机误差,任务是找回隐藏的秘密向量。

日常类比:像听一群同学转述同一句话,每个人都记错一两个字。单看一句你不敢信,但如果这些“错得有规律的转述”足够多,你可能想把原话还原出来;LWE 问的就是:这件事到底有多难。

论文真正厉害的地方不是“造了一个难题”,而是证明:如果有人能高效解这类随机带错方程,那他也能解决最坏情况下的经典格问题。也就是说,随机题不好解,不只是因为研究者暂时没想到办法,而是背后连着一批被研究很久的硬问题。

这篇还给出一个公钥加密方案:公开钥匙是一堆带噪声方程,密文是把其中一些方程相加再塞进 0 或 1。安全性靠的是:外人分不清这些方程是真的“带同一个秘密的噪声方程”,还是完全随机的数表。

不理解 LWE,下面这些事都很难解释:

  • 为什么 Kyber、Dilithium 这类后量子方案经常说自己“基于格问题”,但实现里看到的却是矩阵、向量和取模运算。
  • 为什么密码学喜欢“最坏情况到平均情况归约”:攻击者遇到的是随机实例,证明却想借用最坏实例的硬度。
  • 为什么一点点噪声可以保护秘密:没有噪声时高斯消元就能解,有噪声后同样的线性代数突然失效。
  • 为什么 Regev 2005 是很多 FHE、签名、密钥交换方案的共同祖先:它把“学习问题”和“密码安全”接到了同一根地基上。
  1. 带噪声方程:普通线性方程像清晰收据,LWE 像收据金额被咖啡渍盖住几位。形式上给很多样本 (a, b),其中 b ≈ <a, s> + e (mod q),秘密是 s,噪声是 e

  2. 随机难题连到最坏格问题:平均情况像每天随机抽到的一道题,最坏情况像题库里最刁钻的一道题。Regev 证明,能解 LWE 的算法会带来解 GapSVP / SIVP 的量子算法,因此 LWE 获得了强硬度证据。

  3. 从学习问题到加密系统:公开很多带噪声样本就像公开一堆“略错账单”。合法接收者知道秘密 s,能把误差抵消到可读范围;攻击者看这些账单,应该像看随机噪声一样看不出明文。

案例 1:没有噪声时,秘密很容易被解出

Section titled “案例 1:没有噪声时,秘密很容易被解出”
import numpy as np
A = np.array([[1, 2], [3, 1]]) % 7
s = np.array([4, 5]) % 7
b = (A @ s) % 7
print(b) # [0, 3]

逐部分解释

  • A 是公开矩阵,每一行是一条问题里的 a
  • s 是秘密向量,真实系统不会公开。
  • b = A @ s 没有噪声,所以只要方程足够多,就能用线性代数还原 s

案例 2:加一点噪声后,等号变成“差不多”

Section titled “案例 2:加一点噪声后,等号变成“差不多””
q = 7
A = np.array([[1, 2], [3, 1], [2, 4]]) % q
s = np.array([4, 5]) % q
e = np.array([0, 1, -1]) % q
b = (A @ s + e) % q
print(list(zip(A.tolist(), b.tolist())))

逐部分解释

  • e 是小噪声,合法系统会控制它别太大。
  • 攻击者看到的是 (A, b),不知道每行错了多少。
  • 原本能直接消元的等式变成了近似等式,错误会在相加时累积。
def encrypt_bit(samples, bit, q=7):
chosen = samples[:2]
a_sum = sum((a for a, _ in chosen), start=np.array([0, 0])) % q
b_sum = sum(b for _, b in chosen) % q
return a_sum, (b_sum + bit * (q // 2)) % q

逐部分解释

  • samples 是公开钥匙里的一批带噪声方程。
  • 加密时随机选几条相加,仍然得到一条带同一秘密的噪声方程。
  • bit * (q // 2) 把 0 和 1 推到圆环上相隔很远的位置,合法者用秘密 s 消掉主项后只需判断更靠近哪边。
  1. 把 LWE 当成普通线性代数题:没有噪声才是线性方程组,加噪声后消元会把错误一起放大,所以难度来源不是矩阵乘法本身。

  2. 以为“量子归约”表示加密算法是量子的:Regev 的公钥加密和安全证明里的加密步骤都是经典的,量子只出现在最坏格问题到 LWE 的硬度归约里。

  3. 把搜索版和判定版混在一起:搜索版要找出秘密 s,判定版只问样本像 LWE 还是像随机;论文说明在合适参数下二者可互相转化。

  4. 忽略参数条件:噪声太小会泄露结构,噪声太大又会让合法解密失败,所以 q、维度、噪声宽度必须一起看。

适用

  • 构造后量子公钥加密、密钥交换和签名方案的安全假设。
  • 解释 Kyber / Dilithium / FHE 为什么能把安全性落到矩阵向量取模运算上。
  • 学习 worst-case 到 average-case 归约:随机实例的硬度如何借最坏格问题背书。
  • 需要把“随机线性码解码很难”与“格问题很难”放在同一张图里理解。

不适用

  • 直接替代 AES 这类高速对称加密;LWE 主要服务公钥密码与高级构造。
  • 在不选参数的情况下直接上生产;安全强度、失败概率和性能都依赖具体参数。
  • 证明所有格方案都安全;NTRU、SIS、Ring-LWE、Module-LWE 各有自己的结构和证明边界。
  • 解释抗量子安全的全部来源;哈希签名、多变量、多方安全计算还有其他路线。
  • 1996 年:Ajtai 证明某些格问题存在 worst-case 到 average-case 连接,格密码从“看起来难”走向“可证明地难”。
  • 2003 年:Blum、Kalai、Wasserman 给 LPN 这类带错奇偶学习问题提出子指数算法,说明“加一点错”真的会改变难度。
  • 2005 年:Regev 在 STOC 发表 LWE,提出高模数带噪声学习问题,并把它和 GapSVP / SIVP 的量子最坏情况硬度相连。
  • 2009 年:JACM 版本补充更多后续工作;同年 Peikert 给出经典归约方向上的重要推进。
  • 2010 年以后:Ring-LWE、Module-LWE 和一批 FHE / 签名方案沿着这条路继续工程化,最终进入后量子标准化视野。
  1. 噪声不是麻烦,是安全边界:LWE 用可控错误把“能解的线性方程”变成“外人难区分的随机样本”。
  2. 好密码假设要能落到平均实例:用户每天生成的是随机钥匙,不是手挑的最坏题;Regev 的贡献就是把两者连起来。
  3. 归约会留下边界:原论文的核心硬度归约是量子的,参数也有限制,所以读结论时要同时读假设。
  4. 简单接口背后可以有深数学:实现层面只是矩阵、向量、取模和采样,证明层面却需要格、离散高斯和傅里叶分析。
  • gentry-fhe-2009 —— FHE 依赖格假设把“加密后还能计算”变成可行路线。
  • brakerski-bgv-2012 —— BGV 展示 LWE / Ring-LWE 思想如何服务同态加密。
  • cheon-ckks-2017 —— CKKS 面向近似数计算,仍站在格密码安全假设之上。
  • chillotti-tfhe-2016 —— TFHE 使用 LWE 风格样本支持快速自举。
  • rsa —— RSA 代表前量子时代的数论公钥密码,适合和 LWE 对照。
  • diffie-hellman-1976 —— Diffie-Hellman 解释公钥密码的起点,LWE 是后量子时代的新地基。
  • reed-solomon-1960 —— Regev 论文把 LWE 也解释成随机线性码解码问题,和纠错码有概念桥梁。
  • bos-kyber-2018 —— Bos-Kyber 2018 — 把后量子密钥交换做成可落地的标准候选
  • ducas-dilithium-2018 —— CRYSTALS-Dilithium 2018 — 后量子时代的主力数字签名