ヒント
ヒント 1見る
差 t_k = x_{k+1} − x_k を取るとcが消え、t_{k+1} ≡ a×t_k (mod m) になります
ヒント 2見る
u_k = t_{k+2}×t_k − t_{k+1}² はmの倍数です。いくつかの u_k の最大公約数を取るとmが求まります
ヒント 3見る
a = (x_3 − x_2)×(x_2 − x_1)⁻¹ mod m、c = x_2 − a×x_1 mod m です。x_10の次から出力を計算し、8バイトのビッグエンディアンで並べます
Cryptanalysis - Recovering an LCG's Hidden Parameters
あるサービスは、セッショントークンも暗号化の鍵ストリームも、パラメーターa, c, mが秘密の線形合同法 x_{k+1} = (a×x_k + c) mod m から作っていました。tokens.txtの連続した10個の出力からa, c, mを復元し、続きの出力を8バイトずつ並べた鍵ストリームで暗号化された secret.enc.hex を復号して、フラグを取り出してください。
差 t_k = x_{k+1} − x_k を取るとcが消え、t_{k+1} ≡ a×t_k (mod m) になります
u_k = t_{k+2}×t_k − t_{k+1}² はmの倍数です。いくつかの u_k の最大公約数を取るとmが求まります
a = (x_3 − x_2)×(x_2 − x_1)⁻¹ mod m、c = x_2 − a×x_1 mod m です。x_10の次から出力を計算し、8バイトのビッグエンディアンで並べます