LWE问题是求解带噪声的线性方程组问题. LWE问题的困难性基于的复杂性假设非常弱, 但是功能却异常强大, 由于LWE问题尚无有效的量子求解算法, 因此基于LWE假设的加密方案被认为是抗量子的.
终于到了介绍LWE的时间. LWE几乎是每个当代密码学学者\学生必须要有所了解的工具, 基于LWE, 我们能够构造一大批功能强大且安全的加密方案, 如选择密钥攻击安全的公钥加密方案(IND-CCA2 PKE), 有损加密方案(Lossy PKE), 基于属性加密(ABE), 全同态加密(FHE), 密钥交换(Key Exchange), 非交互零知识证明(NIZK), 程序混淆(Obfuscation)….
本文中, 我们将介绍LWE相关知识, 包括Basic Idea, 两种基本问题和他们之间的规约, 变体问题及其困难性规约, LWE算法的复杂性结论.
没有什么可以说的呀, 求兼容的线性方程组的特解或者通解都是 P \mathbf P P问题. 我们说的方程之间不兼容, 实际上是就是以下一种情况:
但是产生这种情况的情形, 可能是多种的:
不过, 大体上对于一个随机的 m m m元 n n n个方程组成的模 q q q方程组, 只要参数得当(比如不要作死选 m < n m
为了保持LWE问题研究的传统, 我们用 s \mathbf s s来表示方程的解, 并称其为秘密向量. 这个问题是这样的, 首先, 挑战者(challenger)会均匀随机地选择一个 n n n维的 s \mathbf s s作为解. 我们作为攻击者(adversary)可以不断地向挑战者索要方程地组中的一个方程. 实际上, 此时挑战者在先前并没有准备方程, 此时挑战者会均匀随机的选择行向量 a i \mathbf a_i ai作为方程的系数, 然后计算 b i = a i ⋅ s b_i=\mathbf a_i\cdot \mathbf s bi=ai⋅s, 并将 ( a i , b i ) (\mathbf a_i,b_i) (ai,bi)返回给攻击者. 攻击者在拿到一定数量( m m m个)的方程后可以构建方程组 A s = b \mathbf A\mathbf s=\mathbf b As=b, 可以很有把握地输出方程地解 x \mathbf x x. 这里的 A \mathbf A A就是方程的系数矩阵即 A \mathbf A A的每一行就是由 a 1 , ⋯ , a m \mathbf a_1,\cdots, \mathbf a_m a1,⋯,am构成. 实际上, 我们知道我们只要拿到 n n n个线性无关 a i \mathbf a_i ai构成的方程就可以成功解出 x \mathbf x x.
如果我们将问题变得复杂一些呢? 此时攻击者不会直接给我们 ( a i , b i = a i ⋅ s ) (\mathbf a_i,b_i=\mathbf a_i\cdot \mathbf s) (ai,bi=ai⋅s), 而是会在此基础上加一些料, 给 b i b_i bi一些扰动 ( a i , b i = a i ⋅ s + e i ) (\mathbf a_i,b_i=\mathbf a_i\cdot \mathbf s+e_i) (ai,bi=ai⋅s+ei), 其中 e i e_i ei服从一个均值为0, 方程较小的错误分布. 此时求解问题变成了求解这样的方程的解 x \mathbf x x.
有两种极端的情况, 这两种情况是神仙也不能处理的:
对于第一种情况, 我们如果按照线性方程组进行求解, 最好的情况也就是求出 A s = e + b \mathbf A\mathbf s=\mathbf e+\mathbf b As=e+b唯一的特解, 由于我们不知道除了 e \mathbf e e的分布外有关它的任何信息, 根据这个信息来猜 x \mathbf x x, 结果不会太好. 例如, 如果 e \mathbf e e的每一行都是离散高斯分布, 且取到 0 0 0的概率是 C C C, 由于 e i e_i ei取 0 0 0的概率最大, 因此我们最佳的策略就是猜所有的 e i = 0 e_i=0 ei=0, 在这样最优的策略下, 我们正确解出 x \mathbf x x的概率是 C n C^n Cn, 这是一个 n e g l ( n ) \mathsf{negl}(n) negl(n)的概率.
对于第二种情况, 另一种情况, 我们相当于拿到的 ( a i , b i ) (\mathbf a_i,b_i) (ai,bi)中的 b i b_i bi永远是均匀的, 与 s \mathbf s s一点关系都没有, 又由于 a i \mathbf a_i ai也是挑战者均匀选取的, 因此攻击者拿到的永远是均匀随机的 ( a i , b i ) (\mathbf a_i,b_i) (ai,bi), 也就与 x \mathbf x x无关的信息, 也就不可能能够求解出 s \mathbf s s.
我在这里是不太想要讲解如何来解决这个问题的, 因为这里直接解释这个问题的Naive解法没有任何意义, 它需要用到BitDecomp的原理将方程 a i ⋅ s + e i = b i \mathbf{a}_i\cdot \mathbf s+e_i=b_i ai⋅s+ei=bi转化为 P o w e r o f 2 ( a i ) ⋅ B i t D e c o m p ( s ) + e i = b i \mathsf{Powerof2}(\mathbf a_i)\cdot \mathsf{BitDecomp}(\mathbf s)+e_i=b_i Powerof2(ai)⋅BitDecomp(s)+ei=bi后再做处理. 在学习完同态加密中BV11b方案后, 希望读者可以自行构造出naive的解法. 因此, 我将上述问题的naive算法作为了习题放在了介绍BV11b方案的文章中.
有了上述基础, 现在我们可以介绍LWE问题. 最基本的LWE问题有着两个版本, 这两个版本分别对应计算复杂性中两类最基本的问题, 且两个问题之间存在多项式时间的归约. 我们将分别介绍两个版本的LWE问题, 再介绍它们之间的归约方法.
在介绍两类问题之前, 我们首先介绍一些基础知识. 首先是LWE分布.
LWE分布
给定某个 s ∈ Z q n \bf s\in \mathbb Z_q^n s∈Zqn和错误分布 χ \chi χ, 定义LWE分布 A s , χ A_{\mathbf s,\chi} As,χ为: 均匀选择 a ← Z q n \mathbf a\leftarrow \mathbb Z_q^n a←Zqn并采样 e ← χ e\leftarrow \chi e←χ ,计算 b = a ⋅ s + e b=\mathbf a\cdot \mathbf s+e b=a⋅s+e并输出 ( a , b ) (\mathbf a,b) (a,b).
这里 s \mathbf s s也就是秘密向量, 称 χ \chi χ为噪声(或错误)分布, 称 e e e为噪声(或错误). 我们可以理解为, 每次从LWE分布 A s , χ A_{\mathbf s,\chi} As,χ中采样, 都可以得到一个近似解为 s \mathbf s s的线性方程. 如果有一个专门提供这样的分布的Oracle, 那么我们就可以多次来调用该Oracle已积攒足够数量的方程来求解该问题. 应该注意到, A s , χ A_{\mathbf s,\chi} As,χ中我们省略了参数 n n n, 这是一种常用的写法, 因为这里的 n n n可以根据上下文推出. 我们牺牲部分符号上的严谨性来与大多数论文统一符号, 来帮助读者快速熟悉这些记号.
搜索LWE问题(search LWE problem, SLWE)就是我们前边提到的解近似线性方程组的问题, 即
搜索LWE问题
SLWE n , q , χ , m _{n,q,\chi,m} n,q,χ,m问题定义为: 给出 A s , χ A_{\mathbf s,\chi} As,χ的Oracle,
在最多进行 m m m次Oracle访问的情况下求 s \mathbf s s.
该问题的表述可以是多种多样的, 有的表述中, 直接将 m m m个Oracle的结果一并给出, 即均匀选择 A ∈ Z q m × n \mathbf A\in\Z_q^{m\times n} A∈Zqm×n和采样 e ← χ m \mathbf e\leftarrow\chi^m e←χm, 计算 b = A s + e \mathbf b=\mathbf {As}+\mathbf e b=As+e, 根据 ( A , b ) (\mathbf A,\mathbf b) (A,b)求 s \mathbf s s.
一般来说, 我们会要求 m m m是一个有关于 n n n的多项式, 即 m = m ( n ) m=m(n) m=m(n)是一个多项式函数. 毕竟, 对于一个只能在概率多项式时间内运行的攻击者是无法有充足的时间访问超多项式次Oracle的.
判定LWE问题同其他判定一样, 要求输出的是YES/NO(或1/0).
判定LWE问题
DLWE n , q , χ , m _{n,q,\chi,m} n,q,χ,m问题定义为: 给出 m m m个来自一下两个分布中的任何一个的采样结果:
A s , χ A_{\mathbf s,\chi} As,χ分布 Z q n × Z q \mathbb Z_q^n\times \mathbb Z_q Zqn×Zq上的均匀分布
求采样结果所服从的分布.
下文中, 我们统一输出结果的方式: 如果拿到的是 A s , χ A_{\mathbf s,\chi} As,χ分布, 输出 1 1 1为正确答案.
如果两个版本的LWE问题要求 m m m均为多项式, 这个问题似乎这个问题看起来更加简单一些? 但是接下来我们将会发现, 这两个问题相互之间是可以概率多项式规约的, 即一台概率图灵机, 如果有求解两个问题中任何一个的Oracle的访问权限, 就可以在多项式时间内以压倒性概率求解另一个问题.
我们用 O D \mathcal O_D OD来表示与上下文相关的DLWE问题的求解器, 用 O S \mathcal O_S OS来表示与上下文相关的SLWE的求解器. 这里参数 m = m ( n ) m=m(n) m=m(n)是有个有关 n n n的多项式函数.
我们非形式化地分析一下这个归约, 形式化的证明请读者自行完成. 假设我们拿到确实是LWE随机分布的随机变量, 这一随机变量交给SLWE的Oracle后我们的确能以非可忽略小的概率拿到 s \mathbf s s, 重复多次后我们输出 1 1 1的概率也就是压倒性[1]的. 此处忽略了一些细节, 例如假设检验也有可能出错, 但是这些都是在我们能够处理的范围内.
现在假设我们拿到的是非LWE分布的随机变量 ( A , b ) (\mathbf A,\mathbf b) (A,b), 该随机变量只有可忽略小的概率是可以表示成LWE分布, 因此 s = O S ( A , b ) \mathbf s= \mathcal O_S(\mathbf A,\mathbf b) s=OS(A,b)能够使得 e = A s − b \mathbf e=\mathbf {As}-\mathbf b e=As−b通过假设检验的概率是可忽略小的, 因此我们重复多项式次后也只能以可忽略小的概率输出 1 1 1.
首先, 均匀选择 r n ← Z q \mathbf r^n\leftarrow\mathbb Z_q rn←Zq, 再将 A \mathbf A A的第一列加上 r \mathbf r r得 A ’ \mathbf A’ A’, 并调用Oracle得到 d = O D ( A ’ , b + k ⋅ r ) d=\mathcal O_D(\mathbf A’,\mathbf b+k\cdot \mathbf r) d=OD(A’,b+k⋅r). 显然, 如果 s 1 = k s_1=k s1=k, 那么 d = O D ( A ’ , b + k ⋅ r ) d=\mathcal O_D(\mathbf A’,\mathbf b+k\cdot \mathbf r) d=OD(A’,b+k⋅r)就仍然是一个LWE的实例, 因为 A ’ s = A s + s 1 ⋅ r = b + k ⋅ r \mathbf A’\mathbf s=\mathbf A\mathbf s+s_1\cdot \mathbf r=\mathbf b+k\cdot\mathbf r A’s=As+s1⋅r=b+k⋅r, 其中 r \mathbf r r为每个元素均为 r r r的列向量. 如果 s 1 = s_1= s1=的话, 那么 A ’ s + e = A s + e = b \mathbf A’\mathbf s+\mathbf e=\mathbf A\mathbf s+\mathbf e=\mathbf b A’s+e=As+e=b. 如果 s 1 ≠ k s_1\neq k s1=k, 则将会是均匀分布. 显然如果 O D \mathcal O_D OD是一个靠谱的Oracle (即具有多项式分之一的区分优势), 那么我们重复以上过程多次, 将会以压倒性的概率正确判定 s 1 s_1 s1是否为 0 0 0.
如果 q = poly ( n ) q=\text{poly}(n) q=poly(n), 那么经过多项式次上述测试, 就可以压倒性的概率求出 s 1 s_1 s1的值, 类似的可以依次求出 s \mathbf s s的其他分量.
最坏情况下的复杂性结论
首先介绍在[Reg05]中最经典的结论.
定理[Reg05]
对于任意 m = poly ( n ) m=\text{poly}(n) m=poly(n), 任意 q ≤ 2 poly ( n ) q\leq 2^{\text{poly}(n)} q≤2poly(n)和任意的高斯分布 χ \chi χ满足 α q ≥ 2 n \alpha q\geq 2\sqrt n αq≥2n,
其中 0 < α < 1 0<\alpha<1 0<α<1, 如果存在一个高效求解DLWE n , q , χ , m _{n,q,\chi,m} n,q,χ,m的算法,
则存在一个高效求解 n n n维格上满足参数 γ = O ~ ( n / α ) \gamma=\tilde O(n/\alpha) γ=O~(n/α)的GapSVP γ _\gamma γ和SIVP γ _\gamma γ的量子算法.
这里的 α q \alpha q αq就是高斯分布的标准差. 该结论也就是所, 如果有高效算法能够解决满足以上参数的DLWE问题, 也就存在一个量子算法能够解决相应的参数的GapSVP问题和SIVP问题. 这里的高效算法指的是 B Q P \mathbf{BQP} BQP算法. 能够归约到的GapSVP问题和SIVP问题的复杂度与参数 α q \alpha q αq的选择有关, 如果选择 α q = 2 n \alpha q=2\sqrt n αq=2n, 那么得能够归约上的GapSVP问题将会是 N P ∩ c o N P \mathbf{NP}\cap \mathbf {coNP} NP∩coNP的, 不太可能是一个 N P \mathbf{NP} NP完备问题.
以上结论有用吗? 在GapSVP和SIVP有关的量子计算下的复杂性结论得出之前, 上述结论不能直接告诉我们什么. Chris Peikert与2009年在[Per09]中将上述结论经典化, 但参数会差一些:
定理[Pei09]
对于任意 m = poly ( n ) m=\text{poly}(n) m=poly(n), 任意 q ≥ 2 n / 2 q\geq 2^{n/2} q≥2n/2和任意的高斯分布 χ \chi χ满足 α q ≥ 2 n \alpha q\geq 2\sqrt n αq≥2n, 其中 0 < α < 1 0<\alpha<1 0<α<1, 如果存在一个高效求解DLWE n , q , χ , m _{n,q,\chi,m} n,q,χ,m的算法,
则存在一个高效求解 n n n维格上满足参数 γ = O ~ ( n / α ) \gamma=\tilde O(n/\alpha) γ=O~(n/α)的GapSVP γ _\gamma γ的算法.
由于整个归约是纯经典的, 因此如果求解DLWE的高效算法是经典的, 那么得到的结论中, 高效求解GapSVP算法也就是经典的.
#错误分布与噪声分布相同
在BGV12同态加密方案中, 我们为了使得密钥 s \mathbf s s的 ℓ 1 \ell_1 ℓ1较小哦啊, 而选择从噪声分布中选取 s \mathbf s s. 这里的安全性是有理论依据的. 在[ACPS09]中, 我们有如下结论:
定理[ACPS09]
有关Worst-case Hardness与Average-case Hardness的概念及讨论, 可以参考文章Levin’s Theorem, 当这篇文章写成后, 地址将被更新到这里.
[ACPS09] B. Applebaum, D. Cash, C. Peikert, and A. Sahai. Fast cryptographic primitives and circular-secure encryption based on hard learning problems. In CRYPTO, pages 595-618. 2009.
[Pei09]
[Reg05] On Lattices, Learning with Errors, Random Linear Codes, and Cryptography. J. ACM, 56(6):1-40, 2009. Preliminary version in STOC 2005.