$$\begin{cases}b_1 = a_{11}x_1+a_{12}x_2+...+a_{1n}x_n+e_1 \\\\ b_2 = a_{21}x_1+a_{22}x_2+...+a_{2n}x_n+e_2 \\\\ b_n = a_{n1}x_1+a_{n2}x_2+...+a_{nn}x_n+e_n\end{cases}$$
其中,上面的error $e$都是较小的数
# Learning with Errors
我们现在对LWE进行分析:
- LWE写成矩阵的形式为$\vec{b} = \vec{x} * A + \vec{e}$
- 变形一下
$$
(\vec{x}, -1) \cdot \begin{bmatrix} A & O \\\\ \vec{b} & 1 \end{bmatrix} = (\vec{e}, 1)
$$
- 令格基为
$$
L = \begin{bmatrix}A & O \\\\ \vec{b}&1\end{bmatrix}
$$
- 可知点$(\vec{e},1)$在格中,并且由于$e$很小,其大概率就是格中的最短向量
- 因此对格$L$使用LLL算法就可以得到$\vec{e}$了,然后消除噪声$e$的影响就可以恢复$\vec{x}$了
# Knapsack Problem
- 算法中的背包问题是一个非常经典的动态规划问题
- 密码学中的背包问题曾用于构造加密算法,但后面被抛弃
- 密码学中的背包问题形如:
- 给定$a_1,a_2,...,a_n$,从中随意选取一些值并求和得到$S$,试求哪些值被选取了?
- 公式化描述为已知$\sum_{i=1}^n a_i * s_i = S$,其中$a_i$均已知且$s_i$为0或1,求所有的$s_i$
$$
L = \begin{bmatrix}1 & 0 & ... & 0 & a_1 \\\\ 0 & 1 & ... & 0 & a_2 \\\\ ... & ... & ... & ... & ... \\\\ 0 & 0 & ... & 1 & a_n \\\\ 0 & 0 & ... & 0 & S\end{bmatrix}
$$
# Knapsack Problem
我们现在对背包问题进行分析:
- 背包问题写成矩阵形式为$(s_1, s_2, ..., s_n, -1) \cdot L = (s_1, s_2, ..., s_n, 0)$
- 即$(s_1, s_2,..., s_n, 0)$在格$L$上,并且该向量很短,因此大概率是格中的最短向量,因此对格$L$使用LLL算法即可求出$s$
$$
L = \begin{bmatrix}1 & 0 & ... & 0 & a_1 \\\\ 0 & 1 & ... & 0 & a_2 \\\\ ... & ... & ... & ... & ... \\\\ 0 & 0 & ... & 1 & a_n \\\\ 0 & 0 & ... & 0 & S\end{bmatrix}
$$
# Hidden Number Problem
隐藏数问题(Hidden Number Problem)也叫HNP问题
假设有一些等式:
$$
\begin{cases}k_1 \equiv a_1 + x \cdot b_1 \bmod p \\\\ k_2 \equiv a_2 + x \cdot b_2 \bmod p \\\\ ... \\\\ k_t \equiv a_t + x \cdot b_t \bmod p \end{cases}
$$
其中$a_i,b_i,p$已知,$k_i$的位数略小于$p$,那么在有足够多方程的条件下,我们可以将$x$恢复
# Hidden Number Problem
将上面的式子写成整数的形式:
$$
\begin{cases}k_1 - l_1 \cdot p = a_1 \cdot x + b_1 \\\\ k_2 - l_2 \cdot p = a_2 \cdot x + b_2 \\\\ ... \\\\ k_t - l_t \cdot p = a_t \cdot x + b_t \end{cases} \ \
L = \begin{bmatrix}p & 0 & ... & 0 & 0 \\\\ 0 & p & ... & 0 & 0 \\\\ ... & ... & ... & ... & ... \\\\ a_1 & a_2 & ... & C_1 & 0 \\\\ b_1 & b_2 & ... & 0 & C_2\end{bmatrix}
$$
有
$$
(l_1,l_2,...,l_t,x,1) \cdot L = (k_1,k_2,...,k_t,C_1 \cdot x, C_2)
$$
# Hidden Number Problem
- 在上面的式子中$C_1,C_2$是可调节的参数,可知$(k_1,k_2,...,k_t,C_1 \cdot x, C_2)$在格$L$中,并且如果它足够短,可通过对格$L$使用LLL算法求出
- $C_1,C_2$如何调整?
- 常数的调整是格归约中常用的技巧,很多时候使用LLL算法约不出来的原因不是格造的不对,而是常数的设置不对,我们通常称之为平衡系数
- 一般而言,平衡系数需要使目标向量落在Hermite定理的上界之内,并且最好使得目标向量的每一项长度都差不多,这样更有利于寻找到目标向量,在上面表示$C_1 \cdot x$和$C_2$须保持和$k_i$的大小相近
- LLL规约出来的结果可能是目标向量的取负,这时只需再取负一次即可
# Summary
我们现在对格攻击进行总结:
- 由于格攻击都是使用LLL算法尝试求最短向量(或近似最短向量),因此需要关注一些小量并围绕小量构造方程
- 在推导出一些已知式子后,我们需要把小量放在等式的右边,把已知量放在格中用于LLL规约,同时调节平衡系数使得能够规约出来
- LLL算法的规约能力比较有限,通常如果约出来的结果不够小的话,我们会采用BKZ算法进行格基规约,这是一种能够将格基约的更小的算法,但代价是运行时间更长
# Part.4 Coppersmith Method
# Coppersmith Method
在公钥密码学中,我们提到Coppersmith方法可以用来求多项式的小值根:
- Coppersmith引理:
- 对于模$N$下度数为$d$的首一多项式$f$,若$n$是$N$的因子且满足$n \geq N^{\beta}, 0 < \beta \leq 1$,则可以在多项式时间内求出模$n$意义下满足$|x_0| < N^{\frac{\beta^2}{d}}$的根
- 对于$n=N$的情况,可求出模$N$下满足$|x_0| < N^{\frac{1}{d}}$的根
- 在RSA中,$p \approx N^{\frac{1}{2}}$,可求出模$p$下满足$|x_0| < N^{\frac{1}{4d}}$的根
# Coppersmith Method
实际上,Coppersmith方法正是格归约的应用,它能求多项式的小值根正对应着格基规约中求小量的特性
由于篇幅问题,这里我们只介绍单变元的Coppersmith方法(单变元Coppersmith在sagemath中已经集成实现),多变元的Coppersmith方法类似,大家可以自行了解(sagemath中无实现,但现在也不需要手搓,Github最近有一个开源实现[cuso](https://github.com/keeganryan/cuso))
- Coppersmith方法
- 假设我们有定义在模$M$下的度数为$d$的整系数首一多项式$F(x)=x^d+a_{d-1}x^{d-1}+...+a_1x+a_0$(如果不是首一多项式可通过乘最高次项系数模$M$的逆变为首一多项式)
- 假设我们知道$x_0$是$F(x)$的根,即满足$F(x_0) \equiv 0 \bmod M$并且$|x_0|
# Howgrave-Graham Lemma
定义$X$为$|x_0|$取值的上界,将$F(x)$表示为一个行向量$b_F = (a_0,a_1X,...,a_dX^d)$
- Howgrave-Graham Lemma
- 假设$F(x_0) \equiv 0 \bmod M$,那么当$||b_F||<\frac{M}{\sqrt{d+1}}$时,有$F(x_0) = 0$
- 证明:$|F(x_0)| = |\sum_{i=0}^d a_ix_0^i| \leq \sum_{i=0}^d |a_i||x_0|^i \leq \sum_{i=0}^d |a_i|X^i$
- 根据柯西不等式有$\sum_{i=1}^nx_i \leq \sqrt{n\sum_{i=1}^nx_i^2} = \sqrt{n}||(x_1,x_2,...,x_n)||$,在这里即$\sum_{i=0}^d |a_i|X^i \leq \sqrt{d+1}||b_F|| \leq \frac{\sqrt{d+1}M}{d+1} = M$
- 因此$-M < F(x_0) < M$,而$F(x_0) \equiv 0 \bmod M$,所以$F(x_0) = 0$
# Coppersmith Attack
- Coppersmith方法的本质就是通过格基规约找到一个小系数多项式使其满足Howgrave-Graham引理,然后就可以直接在整数下进行求根了
- 然而一般的多项式是不具备这个性质的,那么我们该如何找到满足Howgrave-Graham引理的多项式呢?
- 我们考虑如下$d-1$个多项式:$G_i(x)=Mx^i,0 \leq i < d$,这些多项式都满足$G_i(x_0) \equiv 0 \bmod M$,而$F(x)$也满足$F(x_0) \equiv 0 \bmod M$,因此这些多项式的任意线性组合都满足这个性质
- 我们需要在这些多项式的线性组合里面找到满足Howgrave-Graham引理的多项式,即找到$F'$满足$b_{F'} \leq \frac{M}{\sqrt{d+1}}$
# Coppersmith Attack
- 因此我们构造格:
$$
L = \begin{bmatrix}M & 0 & ... & 0 & 0 \\\\ 0 & MX & ... & 0 & 0 \\\\ ...& ... & ... & ... & ... \\\\ 0 & 0 & ... & MX^{d-1} & 0 \\\\ a_0 & a_1X & ... & a_{d-1}X^{d-1} & a_dX^d\end{bmatrix}
$$
对其使用LLL算法后得到的结果$F'$满足$F'(x_0) \equiv 0 \bmod M$且$b_{F'}$较小
# Coppersmith Attack
- 上面构造的格的行列式为$det(L)=M^X^{d(d+1)/2}$
- 根据LLL算法的性质,对$L$使用LLL算法后,得到的第一个行向量$b_0$满足$||b_0|| \leq 2^{\frac{n-1}{4}det(L)^{1/n}}$,因此$||b_0|| \leq 2^{\frac{d}{4}}M^{\frac{d}{d+1}}X^{\frac{d}{2}}$
- 为了满足Howgrave-Graham引理,要求$2^{\frac{d}{4}}M^{\frac{d}{d+1}}X^{\frac{d}{2}} < \frac{M}{\sqrt{d+1}}$,整理可得$2^{\frac{d}{4}}\sqrt{d+1}X^{\frac{d}{2}} < M^{\frac{1}{d+1}}$
- 若$d=2,X \approx M^{1/3}$,若$d=3, X \approx M^{1/6}$
- 这是个初步的范围,与Coppersmith定理的$X
# Coppersmith Attack
上面推导的界离真正的Coppersmith定理还差了一段距离
为了增大$X$的界,有两种方法可以使用
- 1.扩大格的维度$n$
- 2.增大模数$M$
对于第一种方案,我们可以添加"**x-shift**"多项式,即在格中插入$xF(x),x^2F(x),...,x^kF(x)$,显然这些多项式在模$M$下也有根$x_0$
对于第二种方案,我们可以使用$M$的幂来增大模数,如$F(x)^k \equiv 0 \bmod M^k$自然也是成立的
将上述两种策略根据参数进行调整使用后,就得到了单变元Coppersmith方法
谢谢大家~ 辛苦啦!
Questions?
肖盼 @DengFeng / 等风
Hack For Fun!
QQ: 1440416491