discrete log

プログラム task.py と、その出力 output.txt が与えられた。

task.py は、以下の処理をするものだった。

  1. 素数 p および2~p の乱数 g, r を生成する。
  2. pg を出力する。
  3. flag.txt 中の各バイト m について、gr*m 乗して p で割った値を出力する。

flag.txt の内容が CakeCTF{ で始まっていると仮定すると、以下のことがわかる。

これに基づき、以下のプログラムでflagが得られた。

A program task.py and its output output.txt were given.

What task.py does was:

  1. Generate a prime number p and random values g, r in the range from 2 to p.
  2. Output p and g.
  3. For each bytes m in flag.txt, output g to the r*m-th power modulo p.

Assuming that the contents of flag.txt begins with CakeCTF{, we can say following things:

I obtained the flag via following program based on this.

solve.py

CakeCTF{4h4_p14in73x7_5p4c3_i5_7000000_5m411}

CakeCTF 2021