RLWE(Ring Learning With Errors,环上带错误学习)

7 阅读9分钟

RLWE(Ring Learning With Errors,环上带错误学习) 可以理解为标准 LWE 的 “性能压缩包”“进化版”

如果说 LWE 是现代格密码的基石,那么 RLWE 就是让格密码真正能够走进千家万户、在手机和电脑上流畅运行的最大功臣。


一、 为什么需要 RLWE?(标准 LWE 的致命痛点)

在前文介绍的 LWE 中,核心公式是 b=As+eb = A \cdot s + e。为了保证抗量子计算机的绝对安全,矩阵 AA 必须非常大。比如在实际应用中,矩阵 AA 可能是 1024×10241024 \times 1024 的规模。

这带来了两个致命问题:

  1. 密钥太大了(存储痛点):一个公钥 (A,b)(A, b) 可能需要占用好几 MB 的空间。当你打开一个网页进行 HTTPS 握手时,如果要传输几 MB 的密钥,网络延迟会让人崩溃。
  2. 计算太慢了(性能痛点):巨大的矩阵相乘需要海量的计算(复杂度是 O(n2)O(n^2)),低功耗设备(如智能卡、物联网设备)根本吃不消。

密码学家的解决方案:引入“多项式环(Polynomial Ring)”。把庞大且毫无规律的矩阵 AA,替换成具有代数结构的多项式。这就是 Ring-LWE (RLWE)

通过这种替换:

  • 空间压缩:密钥大小从几 MB 骤降到了几 KB。
  • 速度狂飙:利用快速傅里叶变换(NTT技术),多项式乘法的速度极快(复杂度降为 O(nlogn)O(n \log n))。

二、 RLWE 的数学设定:什么是“多项式环”?

在 RLWE 中,我们不再使用普通的数字矩阵,而是使用多项式(就是中学学的 f(x)=3x2+2x+1f(x) = 3x^2 + 2x + 1 这种)。

为了不让多项式相乘后长度无限变长(比如 x2×x2=x4x^2 \times x^2 = x^4),我们设定了一个**“紧箍咒”(模多项式)**,通常是 xn+1x^n + 1

这也叫**“环的折叠规则”**。

规则很简单:当多项式的最高次幂达到 nn 时,就把它变成 1-1 假设设定 n=4n = 4,那么规则就是 x4=1x^4 = -1。如果出现 x5x^5,它就等于 x4x=1x=xx^4 \cdot x = -1 \cdot x = -x。如果出现 x6x^6,它就等于 x4x2=1x2=x2x^4 \cdot x^2 = -1 \cdot x^2 = -x^2

通过这个规则,无论你怎么乘,多项式的最高次幂永远不会超过 x3x^3,长度永远固定!

另外,多项式前面的系数同样对一个素数 qq 取模。


三、 RLWE 的核心公式

与 LWE 高度对称,只是全变成了多项式(用 a(x)a(x) 表示):

b(x)=a(x)s(x)+e(x)(modq,xn+1)b(x) = a(x) \cdot s(x) + e(x) \pmod{q, x^n+1}

  • a(x)a(x):公开的、随机生成的多项式。
  • s(x)s(x):秘密多项式(私钥),系数非常小(比如只有 0, 1, -1)。
  • e(x)e(x):误差多项式(噪音),系数也非常小。
  • b(x)b(x):计算出来的结果多项式。公钥就是 (a(x),b(x))(a(x), b(x))

RLWE 问题就是:给你公开的 a(x)a(x) 和带噪音的结果 b(x)b(x),你求不出原始的秘密 s(x)s(x)


四、 详细计算举例(玩具级 RLWE 实例)

4.1 公私钥生成过程

为了让你看懂多项式是如何计算并隐藏秘密的,我们来做一个手工演算。

1. 设定公开参数

  • n=4n = 4:多项式最高到 x3x^3。折叠规则是 x4=1x^4 = -1
  • q=13q = 13:所有系数对 13 取模(逢 13 归零,比如 14114 \equiv 1112-1 \equiv 12)。

2. 生成密钥 (Key Generation) 假设我是接收方,我要生成我的公私钥。

  • 选择随机多项式 a(x)a(x)(公开): a(x)=4x3+x2+11x+3a(x) = 4x^3 + x^2 + 11x + 3
  • 选择秘密多项式 s(x)s(x)(私钥,系数必须很小): s(x)=x3x2+1s(x) = x^3 - x^2 + 1
  • 选择误差多项式 e(x)e(x)(噪音,系数必须很小): e(x)=x2+x1e(x) = -x^2 + x - 1

现在开始计算 b(x)=a(x)s(x)+e(x)b(x) = a(x) \cdot s(x) + e(x)

第一步:先算乘法 a(x)s(x)a(x) \cdot s(x) (4x3+x2+11x+3)×(x3x2+1)(4x^3 + x^2 + 11x + 3) \times (x^3 - x^2 + 1) 通过正常的初中多项式展开,合并同类项后得到: =4x63x5+10x44x32x2+11x+3= 4x^6 - 3x^5 + 10x^4 - 4x^3 - 2x^2 + 11x + 3

第二步:施加“紧箍咒”(模 x4+1x^4+1 把里面超过次幂的项替换掉(记住 x4=1x^4 = -1, x5=xx^5 = -x, x6=x2x^6 = -x^2): =4(x2)3(x)+10(1)4x32x2+11x+3= 4(-x^2) - 3(-x) + 10(-1) - 4x^3 - 2x^2 + 11x + 3 =4x2+3x104x32x2+11x+3= -4x^2 + 3x - 10 - 4x^3 - 2x^2 + 11x + 3 合并整理: =4x36x2+14x7= -4x^3 - 6x^2 + 14x - 7

第三步:系数对 q=13q=13 取模

  • 49(mod13)-4 \equiv 9 \pmod{13}
  • 67(mod13)-6 \equiv 7 \pmod{13}
  • 141(mod13)14 \equiv 1 \pmod{13}
  • 76(mod13)-7 \equiv 6 \pmod{13} 所以,a(x)s(x)9x3+7x2+x+6a(x) \cdot s(x) \equiv \mathbf{9x^3 + 7x^2 + x + 6}

第四步:加上噪音 e(x)e(x) b(x)=(9x3+7x2+x+6)+(x2+x1)b(x) = (9x^3 + 7x^2 + x + 6) + (-x^2 + x - 1) 合并后: b(x)=9x3+6x2+2x+5b(x) = \mathbf{9x^3 + 6x^2 + 2x + 5}

最终结果:

  • 我的公钥是a(x)=4x3+x2+11x+3a(x) = 4x^3 + x^2 + 11x + 3b(x)=9x3+6x2+2x+5b(x) = 9x^3 + 6x^2 + 2x + 5
  • 我的私钥是s(x)=x3x2+1s(x) = x^3 - x^2 + 1

你可以看到,黑客拿到的公钥 b(x)b(x) 中的系数 (9,6,2,5)(9, 6, 2, 5) 看起来毫无规律。由于中间经历了多项式乘法展开、折叠相加、对 13 取模,最后还加上了未知的噪音,黑客从 b(x)b(x)a(x)a(x) 根本无法倒推出 s(x)s(x)

4.2 加密解密过程

基于发送方(Alice)和接收方(Bob),完整地走一遍**“加密真实数据”“解密还原数据”**的过程。

  • 规则限制n=4n = 4(最高到 x3x^3x4=1x^4 = -1),q=13q = 13(所有系数对 13 取模)。
  • Bob 的公钥(公开)a(x)=4x3+x2+11x+3a(x) = 4x^3 + x^2 + 11x + 3 , b(x)=9x3+6x2+2x+5b(x) = 9x^3 + 6x^2 + 2x + 5
  • Bob 的私钥(保密)s(x)=x3x2+1s(x) = x^3 - x^2 + 1

第一步:准备待加密的数据(编码)

假设 Alice 想给 Bob 发送一段 4 比特的二进制密码:1011

在 RLWE 中,数据不能直接发,必须先编码成多项式。 Alice 把 1011 的每一位作为多项式的系数(从高次到低次):

  • 原始信息:M(x)=1x3+0x2+1x+1=x3+x+1M(x) = 1 \cdot x^3 + 0 \cdot x^2 + 1 \cdot x + 1 = \mathbf{x^3 + x + 1}

【核心操作:信号放大】 如果在 M(x)M(x) 上直接加噪音,0 和 1 会被噪音干扰导致分不清。所以 Alice 需要把 0 和 1 拉开差距。 方法是乘以 q/2\lfloor q/2 \rfloor(向下取整)。这里 q=13q=1313÷2=6.513 \div 2 = 6.5,取 6。 Alice 把信息放大 6 倍:

  • 放大后的信息Mscale(x)=6M(x)=6x3+0x2+6x+6M_{scale}(x) = 6 \cdot M(x) = \mathbf{6x^3 + 0x^2 + 6x + 6}

(记住这个目标多项式,Bob 最后解密出来的结果应该非常接近它!)


第二步:Alice 进行加密 (Encryption)

为了加密,Alice 不能直接把信息加上去,她需要自己生成几个临时的“小噪音”,用来把信息彻底打乱。 假设 Alice 随机生成了以下三个系数极小(只有 0, 1, -1)的多项式:

  • 临时密钥:r(x)=x21r(x) = x^2 - 1
  • 噪音 1:e1(x)=xe_1(x) = x
  • 噪音 2:e2(x)=1e_2(x) = -1

Alice 需要计算两个密文多项式:u(x)u(x)v(x)v(x)

计算密文 1:u(x)=a(x)r(x)+e1(x)(mod13)u(x) = a(x) \cdot r(x) + e_1(x) \pmod{13}

  1. 算乘法并代入 x4=1x^4=-1a(x)r(x)=(4x3+x2+11x+3)(x21)=7x3+2x215x4a(x) \cdot r(x) = (4x^3 + x^2 + 11x + 3)(x^2 - 1) = 7x^3 + 2x^2 - 15x - 4
  2. 加上 e1(x)e_1(x) (即 xx):=7x3+2x214x4= 7x^3 + 2x^2 - 14x - 4
  3. 对 13 取模(1412-14 \equiv 1249-4 \equiv 9): u(x)=7x3+2x2+12x+9u(x) = 7x^3 + 2x^2 + 12x + 9

计算密文 2:v(x)=b(x)r(x)+e2(x)+Mscale(x)(mod13)v(x) = b(x) \cdot r(x) + e_2(x) + M_{scale}(x) \pmod{13} (把放大的信息混入第二个多项式中)

  1. 算乘法并代入 x4=1x^4=-1b(x)r(x)=(9x3+6x2+2x+5)(x21)=7x3x211x116x3+12x2+2x+2b(x) \cdot r(x) = (9x^3 + 6x^2 + 2x + 5)(x^2 - 1) = -7x^3 - x^2 - 11x - 11 \equiv 6x^3 + 12x^2 + 2x + 2
  2. 加上噪音 e2(x)e_2(x) (即 1-1):=6x3+12x2+2x+1= 6x^3 + 12x^2 + 2x + 1
  3. 加上放大的信息 6x3+6x+66x^3 + 6x + 6=(6+6)x3+12x2+(2+6)x+(1+6)= (6+6)x^3 + 12x^2 + (2+6)x + (1+6) =12x3+12x2+8x+7= 12x^3 + 12x^2 + 8x + 7 v(x)=12x3+12x2+8x+7v(x) = 12x^3 + 12x^2 + 8x + 7

发送密文:Alice 把 (u(x),v(x))(u(x), v(x)) 通过互联网发送给 Bob。黑客在路上截获了这个,由于没有任何规律,黑客完全看不懂。


第三步:Bob 进行解密 (Decryption)

Bob 收到了 (u(x),v(x))(u(x), v(x))。此时只有 Bob 手里有私钥 s(x)=x3x2+1s(x) = x^3 - x^2 + 1

Bob 使用著名的解密公式(类似抵消魔法): 解密结果 = v(x)u(x)s(x)(mod13)v(x) - u(x) \cdot s(x) \pmod{13}

  1. Bob 先算 u(x)s(x)u(x) \cdot s(x)(7x3+2x2+12x+9)(x3x2+1)(7x^3 + 2x^2 + 12x + 9)(x^3 - x^2 + 1) 经过多项式展开并施加 x4=1x^4=-1 的“紧箍咒”后,得到: =4x314x2+17x14x3+12x2+4x+12(mod13)= 4x^3 - 14x^2 + 17x - 1 \equiv \mathbf{4x^3 + 12x^2 + 4x + 12 \pmod{13}}

  2. Bob 用 v(x)v(x) 减去上面的结果: v(x)u(x)s(x)v(x) - u(x)s(x) =(12x3+12x2+8x+7)(4x3+12x2+4x+12)= (12x^3 + 12x^2 + 8x + 7) - (4x^3 + 12x^2 + 4x + 12) =(124)x3+(1212)x2+(84)x+(712)= (12-4)x^3 + (12-12)x^2 + (8-4)x + (7-12) =8x3+0x2+4x5= \mathbf{8x^3 + 0x^2 + 4x - 5}

  3. 对 13 取模(58-5 \equiv 8): 解密出来的多项式 = 8x3+0x2+4x+88x^3 + 0x^2 + 4x + 8


第四步:Bob 提取最终数据(见证奇迹的时刻)

Bob 看着解密出来的多项式 8x3+0x2+4x+88x^3 + 0x^2 + 4x + 8。 由于密码学中充满了不可控的微小噪音,这个结果并不是 Alice 当初构造的完美的 6x3+0x2+6x+66x^3 + 0x^2 + 6x + 6

但这完全不影响!Bob 只需要用**“四舍五入”**的逻辑来判断: 因为密码对 13 取模,一半是 6.5。

  • 如果系数接近 0(比如 0, 1, 2 或者 11, 12),那它原本代表的就是 比特 0
  • 如果系数接近 6(比如 4, 5, 6, 7, 8),那它原本代表的就是 比特 1

Bob 开始逐个检查解密结果的系数 (8,0,4,8)(8, 0, 4, 8)

  • x3x^3 的系数是 8:距离 6 比较近(误差是 2),所以第一位是 1
  • x2x^2 的系数是 0:就是 0,所以第二位是 0
  • x1x^1 的系数是 4:距离 6 比较近(误差是 2),所以第三位是 1
  • 常数项的系数是 8:距离 6 比较近(误差是 2),所以第四位是 1

Bob 把它们拼起来,成功得到了:1011。 与 Alice 发送的信息完全一致


五、为什么可行

5.1 核心逻辑:为什么公开矩阵 a(x)a(x) 会消失?

让我们把黑客视角和 Bob(接收方)视角拉平,看看所有的参数是怎么生成的:

  1. Bob 的公钥构成b=as+eb = a \cdot s + e (这里面藏着私钥 ss 和原始噪音 ee
  2. Alice 发送的密文 1u=ar+e1u = a \cdot r + e_1 (用来锁定临时密钥 rr
  3. Alice 发送的密文 2v=br+e2+Mscalev = b \cdot r + e_2 + M_{scale} (把真实数据混入其中)

黑客的困境:黑客拿到了 uuvv,但他不知道 ss。对他来说,aa 是随机的,bb 看似随机,uuvv 也全是被打乱的随机多项式。

Bob 的魔法:Bob 拿到了 uuvv,但他手里有私钥 ss。 Bob 执行的解密公式是:vusv - u \cdot s

见证奇迹的代数推导(请跟着一步步看): 我们把 vvuu 的本来面目代入到 Bob 的公式中: 解密结果 =(br+e2+Mscale)(ar+e1)s= (b \cdot r + e_2 + M_{scale}) - (a \cdot r + e_1) \cdot s

接下来,我们把公钥 bb 的本来面目(b=as+eb = a \cdot s + e)也代入进去: =((as+e)r+e2+Mscale)(ar+e1)s= ( (a \cdot s + e) \cdot r + e_2 + M_{scale} ) - (a \cdot r + e_1) \cdot s

展开括号(利用初中的乘法分配律): =asr+er+e2+Mscalearse1s= a \cdot s \cdot r + e \cdot r + e_2 + M_{scale} - a \cdot r \cdot s - e_1 \cdot s

【高能预警:抵消发生了!】 仔细看上面的式子,里面有一个 asra \cdot s \cdot r,后面还有一个 ars- a \cdot r \cdot s。 在多项式乘法中,顺序互换结果不变(sr=rss \cdot r = r \cdot s)。 所以:巨大的、用来掩护的随机多项式 asra \cdot s \cdot r 被完美抵消成了 0!

把抵消后的式子重新整理,解密结果就变成了: 解密结果 = Mscale+(er+e2e1s)M_{scale} + (e \cdot r + e_2 - e_1 \cdot s)

你看懂了吗?那个极其复杂的 a(x)a(x)b(x)b(x) 彻底消失了! 剩下的只有两部分:

  1. MscaleM_{scale}:Alice 想要发送的被放大的真实数据(信号)。
  2. (er+e2e1s)(e \cdot r + e_2 - e_1 \cdot s):一堆小噪音的组合(总噪音)。

5.2 结合我们的例子,算算“总噪音”到底有多大

刚才我们说,解密结果 = 真实信号 + 总噪音。 在刚才的例子中,Bob 算出的解密结果是:8x3+0x2+4x+88x^3 + 0x^2 + 4x + 8 而 Alice 放大的真实信号是:6x3+0x2+6x+66x^3 + 0x^2 + 6x + 6

两者的差值,也就是实际产生的总噪音,等于: (86)x3+(00)x2+(46)x+(86)(8-6)x^3 + (0-0)x^2 + (4-6)x + (8-6) =2x3+0x22x+2= \mathbf{2x^3 + 0x^2 - 2x + 2}

这个总噪音大吗?非常小!系数只有 2、0、-2、2。

为什么它这么小?我们回到总噪音的公式:Etotal=er+e2e1sE_{total} = e \cdot r + e_2 - e_1 \cdot s 在密码学设定中,我们强制要求所有的噪音和私钥(e,r,e2,e1,se, r, e_2, e_1, s)都必须是非常小的数字(比如例子里的 1, 0, -1)。

几个极小的数字互相相乘、相加:

  • ×\times 小 = 还是小
  • 小 + 小 = 稍微变大一点点,但依然很小。

密码学家在设计参数时(比如设定 q=13q=13,限制 n=4n=4),会用严密的概率论证明:无论怎么组合,这个总噪音 EtotalE_{total} 的系数绝对值,极大概率不会超过 q/4q / 4(在我们这里也就是绝对不会超过 3.25)。


5.3 为什么噪音无法破坏数据?(信号与噪音的物理抗衡)

现在我们明白了,Bob 拿到的最终多项式,每一项的系数其实都是: Bob看到的系数 = 原始信号 (0 或 6) + 噪音 (±2\pm 2 左右)

这就是我们整个系统切实可行的最后一道保障——四舍五入(阈值判定)

  1. 如果 Alice 原本发送的是 0: 信号是 0。Bob 看到的系数 = 0±0 \pm 小噪音。 在我们的例子中,第二项噪音是 0,所以 Bob 看到的是 0。它离 0 最近,Bob 判定为 0
  2. 如果 Alice 原本发送的是 1: 信号被放大了,变成了 6(也就是 q/2q/2)。Bob 看到的系数 = 6±6 \pm 小噪音。 在我们的例子中:
    • 第一项:6+2=86 + 2 = 8
    • 第三项:62=46 - 2 = 4
    • 第四项:6+2=86 + 2 = 8 虽然 8 和 4 都不是 6,但它们在对 13 取模的“圆环”上,都死死地聚拢在 6 的周围,远离 0。Bob 只需要问自己一句:“8 是离 6 近,还是离 0 近?”答案显而易见是 6。所以 Bob 判定为 1

六、 总结与现状

  1. 本质:RLWE 就是把 LWE 中的矩阵替换成了多项式。
  2. 优点:大幅减小了密钥尺寸(体积变小),大大提升了运算速度(可以使用 FFT/NTT 加速多项式乘法)。
  3. 安全性牺牲了吗? 密码学家证明了,虽然多项式引入了代数结构,但破解 RLWE 的难度依然等价于求解理想格(Ideal Lattice)上的最坏情况困难问题,目前没有发现有效的量子攻击算法。