LLLは与えられた格子の基底から,その格子の中で大きさが小さい格子点を求める.

Cake CTF 2022 rock door

https://qiita.com/kusano_k/items/97684e8324a973f95116#rock-door-lunatic-crypto

kが求まるとxを求めることができる.

mod qが1024bitなのに対して,kが256bit程度.

1列目はk * 2**256

2列目はz + xr

3列目が0になるベクトルが解の候補

2**2048とかはうまいこと調整する.


M = [
  [2**256, 0, s*2**2048],
  [0,      1, 1*2**2048],
  [0,      0, q*2**2048],
]

M = Matrix(M).LLL()