LWE(Learning With Errors,带错误学习)

8 阅读5分钟

LWE(Learning With Errors,带错误学习) 由密码学家 Oded Regev 在 2005 年提出,以下将从生活中的直觉出发,一步步深入到它的数学定义,最后看看它如何在密码学中发挥作用


第一步:直觉理解——“被噪音污染的方程组”

要理解 LWE,我们先回到初中数学——求解多元一次方程组

假设我心里藏着一个秘密数字组合,比如 s=(2,3)s = (2, 3)。 为了让你猜出 ss,我给你提供几个等式(所有的运算都在对某一个数取模的环境下,比如模 17,即逢 17 归零):

  • 4×s1+5×s2=23(mod17)64 \times s_1 + 5 \times s_2 = 23 \pmod{17} \rightarrow 6
  • 2×s1+1×s2=7(mod17)72 \times s_1 + 1 \times s_2 = 7 \pmod{17} \rightarrow 7

如果你学过线性代数或高斯消元法,你知道只要方程数量足够,求解 s1s_1s2s_2 简直易如反掌(计算复杂度是多项式级别的)。

但是,LWE 给这个简单的游戏加了一个“致命”的规则:引入微小的“噪音(Error)”。

现在,我在告诉你结果之前,偷偷在每个结果上加上或减去一个很小的随机数(比如 +1, -1 或 0):

  • 4×s1+5×s2+(噪音 e1)=74 \times s_1 + 5 \times s_2 + (\text{噪音 } e_1) = 7 (原本是6,我加了1)
  • 2×s1+1×s2+(噪音 e2)=62 \times s_1 + 1 \times s_2 + (\text{噪音 } e_2) = 6 (原本是7,我减了1)
  • ...我再给你成百上千个这样“带有微小错误”的方程...

神奇的事情发生了: 一旦加上了这些未知的、随机的微小噪音,传统的“高斯消元法”就彻底失效了。因为在消元的过程中,你需要将方程相乘相减,这会导致原本只有 ±1\pm 1噪音发生级数级爆炸,最终彻底淹没掉正确答案。

在不知道噪音是什么的情况下,给你再多的方程,你也很难反推出我的秘密 ss这个“求解带噪音的线性方程组”的问题,就是 LWE 问题。


第二步:LWE 的严谨数学定义

在密码学中,我们通常用矩阵和向量来描述 LWE。

设定以下参数:

  • qq:一个素数(所有的加法乘法都是 modq\bmod q)。
  • ss:一个长度为 nn秘密向量(Secret vector),这就是我们的私钥。
  • AA:一个 m×nm \times n 的完全随机的矩阵(公开的)。
  • ee:一个长度为 mm误差向量/噪音向量(Error vector)。ee 中的数字是从一个特定的概率分布(通常是离散高斯分布,大部分数字集中在 0 附近,值非常小)中随机抽取的。

计算结果向量:b=As+e(modq)b = A \cdot s + e \pmod q

LWE 问题分为两种形式,在数学上都被证明是极度困难的:

  1. 搜索型 LWE (Search LWE):把公开矩阵 AA 和带噪音的结果 bb 给你,请你求出秘密 ss
  2. 判定型 LWE (Decision LWE):我给你两组数据,一组是真实的 (A,b)(A, b),另一组是完全随机生成的无意义数据 (A,r)(A, r)。请你分辨出哪一组是真实算出来的 LWE 数据。

第三步:为什么 LWE 问题如此困难?(底层逻辑)

你可能会问:不就是加了一点噪音吗?用超级计算机暴力破解不行吗?

不行。LWE 的困难度是由深厚的**格理论(Lattice Theory)**作为背书的。

1. 几何上的等价性(寻找空间中最近的点)

如果没有误差 ee,计算 AsA \cdot s 就相当于在多维空间中,用 AA 的列向量拼出一个整齐的“网格(Lattice)”,AsA \cdot s 正好落在这个网格的交叉点上。但因为加上了误差 eeb=As+eb = A \cdot s + e 意味着结果 bb 偏离了网格点,落在了虚空中的某个位置。求解 LWE,在几何上等价于:“在这个多维空间里,给你一个不在网格上的点 bb,请你找出离它最近的那个网格点 AsA \cdot s。” 这被称为格密码学中的 BDD 问题(有界距离解码问题),已被证明在最坏情况下是极其困难的(NP-hard 级别的难题,连量子计算机目前都束手无策)。

2. Oded Regev 的神级证明

Regev 证明了一个让密码学界疯狂的定理:最坏情况到平均情况的归约(Worst-case to Average-case Reduction)。意思是:只要“格”上那些几百年都没人能解开的终极数学难题(最坏情况)是无解的,那么我们随便随机生成的一个 LWE 方程组(平均情况),就是无解的。这保证了用 LWE 构造的密码系统,不需要精挑细选特定的参数,随便生成一把钥匙,就拥有顶级安全性。


第四步:如何用 LWE 来加密?(一个玩具级的例子)

明白了原理,我们来看看密码学家是怎么用它来做公钥加密的(类似 RSA,但抗量子)。

1. 生成公私钥对 (KeyGen)

  • 我随机挑选秘密向量 ss 作为我的私钥
  • 我随机生成矩阵 AA 和误差 ee,计算 b=As+eb = A \cdot s + e
  • 我把 (A,b)(A, b) 作为我的公钥发布出去。

2. 加密信息 (Encrypt) 假设你要发送给我一个比特的信息 mm 是 0 或 1)。

  • 你拿到我的公钥 (A,b)(A, b)
  • 你从 AA 中随机挑几行加起来得到 uu,把 bb 中对应的行加起来得到 vv
  • 如果你想发送 0,你什么都不做。
  • 如果你想发送 1,你在 vv 上加上一个很大的数字(通常是 q/2q/2,相当于把信号放在噪音之上)。
  • 你把密文 (u,v)(u, v) 发给我。

3. 解密信息 (Decrypt)

  • 我收到 (u,v)(u, v),因为我手里有私钥 ss,我计算 vusv - u \cdot s
  • 因为数学上的抵消作用,这个结果会等于:累加的噪音 + (你加上的 q/2q/2 信号)
  • 我知道噪音 ee 是很小的。所以:
    • 如果最终结果接近 0,说明你没有加 q/2q/2,我判定你发送的是 0
    • 如果最终结果接近 q/2q/2,我判定你发送的是 1

精妙之处就在于:不知道私钥 ss 的黑客,看着密文 (u,v)(u, v),由于噪音的存在,他看到的就是一堆毫无规律的乱码。而拥有 ss 的人,就能把原始的矩阵抵消掉,在噪音中“听”出那个响亮的信号(q/2q/2)。

总结

LWE 是一种“利用微小噪音来掩盖线性方程组解”的数学困难问题。它易于计算(只包含矩阵相乘和加法),但极难逆向破解(抗量子计算机)。它就像水泥一样,彻底塑造了后量子密码学和全同态加密的现代大厦。