格密码7:LLL算法在密码分析中的应用

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} hf1g(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} tLM,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}. 111126111124111146111106111120012203 .
我们将第一行的短向量 ( − 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. 89212245+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} 417916331843535277320188225314342012376852583183444361736426
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} 3661103011102866740
这组基的 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= 101111088001230111111119801211010100020093111011190199130011110089120611110111118102110011102089961111001406257211010010125376561011000682113080110100075325091001002430557511101007152062000110076723 .
我们可以通过计算 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)=1x2+x3x5x6andg(x)=1x2+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)=x3f(x)andg(x)=x3g(x),
所以 Eve 能够用 f ′ ( x ) f^{'}(x) f(x) g ′ ( x ) g^{'}(x) g(x) 解密消息。

  • 21
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值