Asemoon - CryptoCTF - writeup
In this challenge, we are given a file called asemoon.sage. It starts by generating some parameters:
def gen_CP(nbit): R.<x> = PolynomialRing(GF(2)) while True: c = ''.join([hex(randint(0, 15))[2:] for _ in range(nbit >> 2)]) G = R(Integer(int(c, 16)).bits()[::-1]) + x ^ nbit if G.is_irreducible(): return int(c, 16) nbit = 64 skey = getRandomNBitInteger(nbit) CP, CT = gen_CP(nbit), [] for _ in range(256): cb = _ for _ in range(8): if cb & 1: cb = (cb >> 1) ^^ CP else: cb >>= 1 CT.append(cb & 0xFFFFFFFFFFFFFFFF) For now, it is enough to know that CP is a random integer of less than 64 bits and CT is generated from CP deterministically. Then, we have the main loop of the challenge: