ヒント
ヒント 1見る
署名は4つあり、nonce を再利用しているのは2つだけです。r が同じ2つの署名を探します(k が同じなら r = (g^k mod p) mod q も同じです)。計算はすべて mod q です
ヒント 2見る
同じ r の2つの署名 (h1, s1) と (h2, s2) について、s = k⁻¹(h + x·r) の式の差から k = (h1 - h2)·inverse(s1 - s2, q) mod q が求まります。逆元は pow(値, -1, q) です
ヒント 3見る
x = (s1·k - h1)·inverse(r, q) mod q。pow(g, x, p) == y で確かめます。SHA256(str(x)) の32バイトを暗号文の長さまで繰り返して encrypted_flag_hex と XOR し、UTF-8 でデコードします