Regev LWE 2005 — 把带噪声方程变成后量子密码地基
待复核Regev 的 LWE 论文提出了一个看起来像“小学方程组被人故意抹脏”的问题:给你很多条线性方程,每条答案都被加了一点随机误差,任务是找回隐藏的秘密向量。
日常类比:像听一群同学转述同一句话,每个人都记错一两个字。单看一句你不敢信,但如果这些“错得有规律的转述”足够多,你可能想把原话还原出来;LWE 问的就是:这件事到底有多难。
论文真正厉害的地方不是“造了一个难题”,而是证明:如果有人能高效解这类随机带错方程,那他也能解决最坏情况下的经典格问题。也就是说,随机题不好解,不只是因为研究者暂时没想到办法,而是背后连着一批被研究很久的硬问题。
这篇还给出一个公钥加密方案:公开钥匙是一堆带噪声方程,密文是把其中一些方程相加再塞进 0 或 1。安全性靠的是:外人分不清这些方程是真的“带同一个秘密的噪声方程”,还是完全随机的数表。
不理解 LWE,下面这些事都很难解释:
- 为什么 Kyber、Dilithium 这类后量子方案经常说自己“基于格问题”,但实现里看到的却是矩阵、向量和取模运算。
- 为什么密码学喜欢“最坏情况到平均情况归约”:攻击者遇到的是随机实例,证明却想借用最坏实例的硬度。
- 为什么一点点噪声可以保护秘密:没有噪声时高斯消元就能解,有噪声后同样的线性代数突然失效。
- 为什么 Regev 2005 是很多 FHE、签名、密钥交换方案的共同祖先:它把“学习问题”和“密码安全”接到了同一根地基上。
-
带噪声方程:普通线性方程像清晰收据,LWE 像收据金额被咖啡渍盖住几位。形式上给很多样本
(a, b),其中b ≈ <a, s> + e (mod q),秘密是s,噪声是e。 -
随机难题连到最坏格问题:平均情况像每天随机抽到的一道题,最坏情况像题库里最刁钻的一道题。Regev 证明,能解 LWE 的算法会带来解 GapSVP / SIVP 的量子算法,因此 LWE 获得了强硬度证据。
-
从学习问题到加密系统:公开很多带噪声样本就像公开一堆“略错账单”。合法接收者知道秘密
s,能把误差抵消到可读范围;攻击者看这些账单,应该像看随机噪声一样看不出明文。
案例 1:没有噪声时,秘密很容易被解出
Section titled “案例 1:没有噪声时,秘密很容易被解出”import numpy as np
A = np.array([[1, 2], [3, 1]]) % 7s = np.array([4, 5]) % 7b = (A @ s) % 7print(b) # [0, 3]逐部分解释:
A是公开矩阵,每一行是一条问题里的a。s是秘密向量,真实系统不会公开。b = A @ s没有噪声,所以只要方程足够多,就能用线性代数还原s。
案例 2:加一点噪声后,等号变成“差不多”
Section titled “案例 2:加一点噪声后,等号变成“差不多””q = 7A = np.array([[1, 2], [3, 1], [2, 4]]) % qs = np.array([4, 5]) % qe = np.array([0, 1, -1]) % qb = (A @ s + e) % qprint(list(zip(A.tolist(), b.tolist())))逐部分解释:
e是小噪声,合法系统会控制它别太大。- 攻击者看到的是
(A, b),不知道每行错了多少。 - 原本能直接消元的等式变成了近似等式,错误会在相加时累积。
案例 3:Regev 加密的直觉版本
Section titled “案例 3:Regev 加密的直觉版本”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消掉主项后只需判断更靠近哪边。
-
把 LWE 当成普通线性代数题:没有噪声才是线性方程组,加噪声后消元会把错误一起放大,所以难度来源不是矩阵乘法本身。
-
以为“量子归约”表示加密算法是量子的:Regev 的公钥加密和安全证明里的加密步骤都是经典的,量子只出现在最坏格问题到 LWE 的硬度归约里。
-
把搜索版和判定版混在一起:搜索版要找出秘密
s,判定版只问样本像 LWE 还是像随机;论文说明在合适参数下二者可互相转化。 -
忽略参数条件:噪声太小会泄露结构,噪声太大又会让合法解密失败,所以
q、维度、噪声宽度必须一起看。
适用 vs 不适用场景
Section titled “适用 vs 不适用场景”适用:
- 构造后量子公钥加密、密钥交换和签名方案的安全假设。
- 解释 Kyber / Dilithium / FHE 为什么能把安全性落到矩阵向量取模运算上。
- 学习 worst-case 到 average-case 归约:随机实例的硬度如何借最坏格问题背书。
- 需要把“随机线性码解码很难”与“格问题很难”放在同一张图里理解。
不适用:
- 直接替代 AES 这类高速对称加密;LWE 主要服务公钥密码与高级构造。
- 在不选参数的情况下直接上生产;安全强度、失败概率和性能都依赖具体参数。
- 证明所有格方案都安全;NTRU、SIS、Ring-LWE、Module-LWE 各有自己的结构和证明边界。
- 解释抗量子安全的全部来源;哈希签名、多变量、多方安全计算还有其他路线。
历史小故事(可跳过)
Section titled “历史小故事(可跳过)”- 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 / 签名方案沿着这条路继续工程化,最终进入后量子标准化视野。
- 噪声不是麻烦,是安全边界:LWE 用可控错误把“能解的线性方程”变成“外人难区分的随机样本”。
- 好密码假设要能落到平均实例:用户每天生成的是随机钥匙,不是手挑的最坏题;Regev 的贡献就是把两者连起来。
- 归约会留下边界:原论文的核心硬度归约是量子的,参数也有限制,所以读结论时要同时读假设。
- 简单接口背后可以有深数学:实现层面只是矩阵、向量、取模和采样,证明层面却需要格、离散高斯和傅里叶分析。
- 论文 PDF:Oded Regev — On Lattices, Learning with Errors, Random Linear Codes, and Cryptography
- 综述 PDF:Oded Regev — The Learning with Errors Problem
- 相关论文:Chris Peikert, “Public-Key Cryptosystems from the Worst-Case Shortest Vector Problem”, STOC 2009
- 相关论文:Vadim Lyubashevsky, Chris Peikert, Oded Regev, “On Ideal Lattices and Learning with Errors over Rings”, EUROCRYPT 2010 / JACM 2013
- gentry-fhe-2009 —— FHE 把 LWE 系列假设推向更复杂的同态计算场景。
- brakerski-bgv-2012 —— BGV 是后续格密码构造工程化的重要代表。
- 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 — 后量子时代的主力数字签名