LLL 算法在密码分析中的应用
文章目录
Applications of LLL to cryptanalysis
这一节对应教材的 6.13.
LLL 算法在密码分析中有许多应用,从针对背包公钥密码系统的攻击到最近的对格密码系统(如Ajtai-Dwork、GGH和NTRU)的分析。在某些情况下,也存在针对 RSA 的格约化攻击。最后,我们要强调的是,除了在密码学中的应用外,LLL及其推广在纯数学和应用数学中也有广泛的应用。
本节我们将举例说明 LLL 在本章前面描述的四种密码系统(同余、背包、GGH、NTRU)的密码分析中的应用。我们注意到,LLL 在破解本节中的示例时没有遇到任何困难,这是因为我们使用的维度非常小。在实践中,这些密码系统的安全实例需要 500 到 1000 维的格。除了 NTRU,其它的密码系统如此选择会导致不实用的密钥长度。
Congruential cryptosystems
在专栏的第一篇文章中我们已经介绍过同余加密系统了。Alice 选择一个模数
q
q
q 和两个小的秘密整数
f
,
g
f,g
f,g,她的公钥是整数
h
≡
f
−
1
g
(
m
o
d
q
)
h\equiv f^{-1}g \pmod{q}
h≡f−1g(modq)。Eve 知道公开参数
q
q
q 和
h
h
h,她的目的是恢复出私钥
f
f
f。一种得到私钥的方式是寻找由下面向量生成的格
L
L
L 中的短向量:
v
1
=
(
1
,
h
)
and
v
2
=
(
0
,
q
)
,
v_1=(1,h)\quad\text{and}\quad v_2=(0,q),
v1=(1,h)andv2=(0,q),
我们之前说过,向量 ( f , g ) (f,g) (f,g) 在 L L L 中,且给定 f f f 和 g g g 的大小限制,很有可能这个向量就是 L L L 中的最短非零向量。
我们来破解Congruential cryptosystems中介绍的例子,其中:
q
=
122430513841
and
h
=
39245579300.
q=122430513841\quad\text{and}\quad h=39245579300.
q=122430513841andh=39245579300.
我们对生成格
L
L
L 的向量应用 Gauss 格约化算法:
(
1
,
39245579300
)
and
(
0
,
122430513841
)
.
(1,39245579300)\quad\text{and}\quad (0,122430513841).
(1,39245579300)and(0,122430513841).
算法执行 11 轮找到短的基底(第一个向量就是最短向量):
(
−
231231
,
−
195698
)
and
(
−
368222
,
217835
)
.
(−231231,−195698)\quad\text{and}\quad (−368222,217835).
(−231231,−195698)and(−368222,217835).
忽略符号的变化,这给出了 Alice 的私钥
f
=
231231
f=231231
f=231231 和
g
=
195698
g=195698
g=195698。
Applying LLL to knapsacks
在专栏的第一篇文章中我们描述了如何将由 M = ( m 1 , … , m n ) M=(m_1,\dots,m_n) M=(m1,…,mn) 和 S S S 描述的背包(子集和)问题重新表述为一个格问题,使用 ( ∗ ) (*) (∗) 矩阵(见专栏第一篇文章)的行给出的基来构建格 L M , S L_{M,S} LM,S。我们在格中最短向量一文的 Gauss 启发式方法一节的最后一个例子中,进一步解释了为什么目标向量 t ∈ L M , S t\in L_{M,S} t∈LM,S,长度为 t = n t=\sqrt{n} t=n,可能大约是 L M , S L_{M,S} LM,S 中所有其他非零向量大小的一半。
我们将演示如何使用 LLL 算法来解决背包问题。考虑:
M
=
(
89
,
243
,
212
,
150
,
245
)
and
S
=
546
M=(89,243,212,150,245)\quad\text{and}\quad S=546
M=(89,243,212,150,245)andS=546
我们将 LLL 算法应用于由下面矩阵的行生成的格:
A
M
,
S
=
(
2
0
0
0
0
89
0
2
0
0
0
243
0
0
2
0
0
212
0
0
0
2
0
150
0
0
0
0
2
245
1
1
1
1
1
546
)
A_{M,S}= \begin{pmatrix} 2&0&0&0&0&89\\ 0&2&0&0&0&243\\ 0&0&2&0&0&212\\ 0&0&0&2&0&150\\ 0&0&0&0&2&245\\ 1&1&1&1&1&546\\ \end{pmatrix}
AM,S=
20000102000100200100020100002189243212150245546
LLL 执行 21 次交换并返回约化基:
(
−
1
1
−
1
1
−
1
0
1
−
1
−
1
1
−
1
−
1
−
1
−
1
−
1
1
1
2
1
−
1
−
1
−
1
−
1
2
−
2
−
2
4
0
−
2
0
−
6
−
4
−
6
−
6
0
−
3
)
.
\begin{pmatrix} −1& 1&−1& 1&−1& 0\\ 1& −1& −1& 1&−1&−1\\ −1& −1& −1& 1& 1& 2\\ 1& −1& −1& −1& −1& 2\\ −2& −2& 4& 0&−2& 0\\ −6& −4 &−6 &−6& 0&−3 \end{pmatrix}.
−11−11−2−61−1−1−1−2−4−1−1−1−14−6111−10−6−1−11−1−200−1220−3
.
我们将第一行的短向量
(
−
1
,
1
,
−
1
,
1
,
−
1
,
0
)
(−1,1,−1,1,−1,0)
(−1,1,−1,1,−1,0) 写成由矩阵
A
M
,
S
A_{M,S}
AM,S 给出的原始基底的线性组合的形式:
(
−
1
,
1
,
−
1
,
1
,
−
1
,
0
)
=
(
−
1
,
0
,
−
1
,
0
,
−
1
,
1
)
A
M
,
S
.
(−1,1,−1,1,−1,0) = (−1,0,−1,0,−1,1)A_{M,S}.
(−1,1,−1,1,−1,0)=(−1,0,−1,0,−1,1)AM,S.
即求解向量 ( − 1 , 0 , − 1 , 0 , − 1 , 1 ) (−1,0,−1,0,−1,1) (−1,0,−1,0,−1,1) 就是求解上面的非齐次线性方程组。利用线性代数的知识可以解决。
向量
(
−
1
,
0
,
−
1
,
0
,
−
1
,
1
)
(−1,0,−1,0,−1,1)
(−1,0,−1,0,−1,1) 就给出了背包问题的解:
−
89
−
212
−
245
+
546
=
0.
−89−212−245+546 = 0.
−89−212−245+546=0.
Remark. 在使用 LLL 解决子集和问题时,通常将
m
1
,
…
,
m
n
,
S
m_1,\dots,m_n,S
m1,…,mn,S 乘以一个大常数
C
C
C 会有所帮助。这样做的效果是将
(
∗
)
(*)
(∗) 矩阵的最后一列乘以
C
C
C,因此行列式被乘以
C
C
C,Gauss 期望的最短向量被乘以
C
1
/
(
n
+
1
)
C^{1/(n+1)}
C1/(n+1)。目标向量
t
t
t 的长度仍然为
n
\sqrt{n}
n,所以如果
C
C
C 很大,目标向量就会比可能的次短向量小得多。这往往使 LLL 更容易找到
t
t
t。
Applying LLL to GGH
我们将 LLL 应用到 GGH 节(专栏第4篇文章)中最后一个例子,Alice 的公开格
L
L
L 是由矩阵的行向量
w
1
,
w
2
,
w
3
w_1,w_2,w_3
w1,w2,w3 生成的:
(
−
4179163
−
1882253
583183
−
3184353
−
1434201
444361
−
5277320
−
2376852
736426
)
\begin{pmatrix} −4179163& −1882253 &583183\\ −3184353& −1434201 &444361\\ −5277320 &−2376852& 736426\\ \end{pmatrix}
−4179163−3184353−5277320−1882253−1434201−2376852583183444361736426
Bob 被加密后的信息为:
e
=
(
−
79081427
,
−
35617462
,
11035473
)
.
e =(−79081427,−35617462,11035473).
e=(−79081427,−35617462,11035473).
Eve 想要找到格
L
L
L 中最接近
e
e
e 的一个向量。她首先对
L
L
L 运用 LLL 算法并找到准正交(quasi-orthogonal)的一个基:
(
36
−
30
−
86
61
11
67
−
10
102
−
40
)
\begin{pmatrix} 36& −30& −86\\ 61& 11& 67\\ −10& 102& −40\\ \end{pmatrix}
3661−10−3011102−8667−40
这组基的 Hadamard 比率为
H
=
0.956083
\mathcal{H}=0.956083
H=0.956083,甚至比 Alice 自己的好基还要好。Eve 接下来应用 Babai 算法来找到一个格向量:
v
=
(
79081423
,
35617459
,
−
11035471
)
v=(79081423,35617459,−11035471)
v=(79081423,35617459,−11035471)
这非常接近于
e
e
e。最后,她用原始格向量来表示
v
v
v,
v
=
−
86
w
1
+
35
w
2
+
32
w
3
,
v=−86w_1+35w_2+32w_3,
v=−86w1+35w2+32w3,
便得到了 Bob 的明文
m
=
(
−
86
,
35
,
32
)
m=(−86,35,32)
m=(−86,35,32)。
Applying LLL to NTRU
我们将 LLL 应用到 NTRU 公钥密码系统一节中的最后一个例子(专栏第5篇文章)。因此
N
=
7
,
q
=
41
N=7,q=41
N=7,q=41,且公钥是多项式:
h
(
x
)
=
30
+
26
x
+
8
x
2
+
38
x
3
+
2
x
4
+
40
x
5
+
20
x
6
.
h(x)=30+26x+8x^2+38x^3+2x^4+40x^5+20x^6.
h(x)=30+26x+8x2+38x3+2x4+40x5+20x6.
与之相关联的 NTRU 格是由矩阵的行向量组成的:
M
h
NTRU
=
(
1
0
0
0
0
0
0
30
26
8
38
2
40
20
0
1
0
0
0
0
0
20
30
26
8
38
2
40
0
0
1
0
0
0
0
40
20
30
26
8
38
2
0
0
0
1
0
0
0
2
40
20
30
26
8
38
0
0
0
0
1
0
0
38
2
40
20
30
26
8
0
0
0
0
0
1
0
8
38
2
40
20
30
26
0
0
0
0
0
0
1
26
8
38
2
40
20
30
0
0
0
0
0
0
0
41
0
0
0
0
0
0
0
0
0
0
0
0
0
0
41
0
0
0
0
0
0
0
0
0
0
0
0
0
0
41
0
0
0
0
0
0
0
0
0
0
0
0
0
0
41
0
0
0
0
0
0
0
0
0
0
0
0
0
0
41
0
0
0
0
0
0
0
0
0
0
0
0
0
0
41
0
0
0
0
0
0
0
0
0
0
0
0
0
0
41
)
.
M_h^{\text{NTRU}}= \begin{pmatrix} 1&0&0&0&0&0&0&30&26& 8& 38& 2 &40&20\\ 0&1&0&0&0&0&0&20&30&26& 8& 38& 2& 40\\ 0&0&1&0&0&0&0&40&20&30&26& 8& 38& 2\\ 0&0&0&1&0&0&0& 2& 40&20&30&26& 8& 38\\ 0&0&0&0&1&0&0&38& 2& 40&20&30&26& 8\\ 0&0&0&0&0&1&0& 8& 38& 2& 40&20&30&26\\ 0&0&0&0&0&0&1&26& 8& 38& 2& 40&20&30\\ 0&0&0&0&0&0&0&41& 0& 0& 0 &0 &0 &0\\ 0&0&0&0&0&0&0& 0& 41& 0& 0& 0& 0& 0\\ 0&0&0&0&0&0&0& 0& 0 &41& 0& 0& 0& 0\\ 0&0&0&0&0&0&0& 0& 0& 0& 41& 0& 0& 0\\ 0&0&0&0&0&0&0& 0& 0 &0 &0 &41& 0& 0\\ 0&0&0&0&0&0&0& 0& 0& 0& 0& 0& 41& 0\\ 0&0&0&0&0&0&0& 0& 0& 0& 0& 0& 0& 41\\ \end{pmatrix}.
MhNTRU=
1000000000000001000000000000001000000000000001000000000000001000000000000001000000000000001000000030204023882641000000263020402388041000008263020402380041000038826302040200041000238826302040000041004023882630200000041020402388263000000041
.
Eve 对
M
h
NTRU
M_h^{\text{NTRU}}
MhNTRU 运用 LLL 算法。算法执行 96 步交换操作后返回 LLL 约化后的矩阵:
M
h
NTRU
=
(
1
0
−
1
1
0
−
1
−
1
−
1
0
−
1
0
1
1
0
0
1
1
−
1
0
1
−
1
−
1
−
1
0
1
0
1
0
−
1
1
0
−
1
−
1
1
0
−
1
0
1
1
0
−
1
0
−
1
−
1
1
0
−
1
1
0
1
0
−
1
0
−
1
0
1
−
1
1
0
−
1
1
0
−
1
0
−
1
0
−
1
0
1
1
−
1
−
1
−
1
−
1
−
1
−
1
−
1
0
0
0
0
0
0
0
0
1
0
1
0
−
1
1
−
1
−
1
0
0
2
0
0
−
8
−
1
0
9
0
−
1
0
−
4
2
6
0
−
4
7
−
7
8
1
0
0
−
8
−
1
2
0
−
5
8
−
7
−
3
1
6
0
−
9
−
2
1
9
−
1
0
−
6
−
3
2
5
0
−
5
7
0
8
0
−
9
−
1
−
8
8
2
7
−
11
3
−
5
2
2
1
0
0
9
2
−
1
−
9
5
−
7
6
3
−
2
−
5
0
−
2
1
9
−
1
0
0
−
9
2
5
0
−
5
7
−
6
−
3
3
2
3
3
−
6
2
−
6
11
6
8
09
5
2
)
.
M_h^{\text{NTRU}}= \begin{pmatrix} 1 &0 &−1& 1& 0& −1&−1&−1& 0& −1& 0& 1& 1 &0\\ 0& 1& 1& −1& 0& 1& −1&−1&−1 &0 &1 &0& 1& 0\\ −1& 1& 0 &−1&−1&1 &0& −1& 0& 1& 1& 0 &−1& 0\\ −1&−1& 1& 0& −1& 1 &0& 1& 0& −1& 0& −1 &0& 1\\ −1& 1& 0& −1& 1 &0 &−1& 0& −1& 0& −1& 0& 1& 1\\ −1&−1&−1&−1&−1&−1&−1& 0& 0 &0& 0& 0& 0& 0\\ 0& 1& 0& 1& 0& −1& 1 &−1&−1& 0& 0 &2& 0& 0\\ −8&−1& 0& 9& 0& −1& 0 &−4& 2& 6& 0 &−4& 7 &−7\\ 8& 1& 0 &0 &−8&−1& 2& 0& −5& 8& −7&−3& 1 &6\\ 0& −9&−2& 1& 9& −1& 0& −6&−3& 2& 5& 0& −5& 7\\ 0& 8& 0& −9&−1&−8& 8& 2 &7 &−11& 3& −5& 2& 2\\ 1& 0& 0& 9& 2& −1&−9 &5 −7& 6& 3& −2&−5& 0\\ −2& 1& 9& −1& 0& 0& −9 &2& 5 &0& −5& 7& −6&−3\\ 3& 2& 3& 3& −6& 2 &−6 &11& 6& 8 &0 9& 5& 2\\ \end{pmatrix}.
MhNTRU=
10−1−1−1−10−88001−23011−11−11−11−98012−11010−1000−200931−1−10−1−11901−99−1300−1−11−100−89−120−6−11110−1−1−1−1−1−8−102−1−100−1−110208−9−9−6−1−1−1100−1−40−625−72110−100−10−12−5−37656−101−1000682−113080110−1000−753−2−509100−1002−4−30−5−57511−1010071−520−620001100−7672−3
.
我们可以通过计算 Hadamard 比率来比较原始基和约化基的相对准正交性。
H
(
M
h
NTRU
)
=
0.1184
and
H
(
M
h
NTRU
)
=
0.8574.
\mathcal{H}(M_h^{\text{NTRU}})=0.1184\quad\text{and}\quad\mathcal{H}(M_h^{\text{NTRU}})=0.8574.
H(MhNTRU)=0.1184andH(MhNTRU)=0.8574.
约化基的最短向量是约化后矩阵的第一个行向量:
(
1
,
0
,
−
1
,
1
,
0
,
−
1
,
−
1
,
−
1
,
0
,
−
1
,
0
,
1
,
1
,
0
)
.
(1, 0,−1,1,0,−1,−1,−1,0,−1,0,1,1,0).
(1,0,−1,1,0,−1,−1,−1,0,−1,0,1,1,0).
将向量分割成两部分得到行列式:
f
′
(
x
)
=
1
−
x
2
+
x
3
−
x
5
−
x
6
and
g
′
(
x
)
=
−
1
−
x
2
+
x
4
+
x
5
.
f^{'} (x)=1−x^2 +x^3−x^5−x^6\quad\text{and}\quad g^{'}(x)=−1−x^2+x^4+x^5.
f′(x)=1−x2+x3−x5−x6andg′(x)=−1−x2+x4+x5.
注意
f
′
(
x
)
f^{'}(x)
f′(x) 和
g
′
(
x
)
g^{'}(x)
g′(x) 虽然与 Alice 的私钥多项式
f
(
x
)
,
g
(
x
)
f(x),g(x)
f(x),g(x) 不同,但是,它们只是 Alice 密钥的简单旋转,
f
′
(
x
)
=
−
x
3
⋆
f
(
x
)
and
g
′
(
x
)
=
−
x
3
⋆
g
(
x
)
,
f^{'}(x)=-x^3 \star f(x)\quad\text{and}\quad g^{'}(x)=-x^3\star g(x),
f′(x)=−x3⋆f(x)andg′(x)=−x3⋆g(x),
所以 Eve 能够用
f
′
(
x
)
f^{'}(x)
f′(x) 和
g
′
(
x
)
g^{'}(x)
g′(x) 解密消息。