Rating:

# Farm - cryptoCTF 2021

- Category: Crypto

- Points: 41

- Solves: 149

- Solved by: drw0if

## Description

Explore the Farm very carefully!

## Solution

In this challenge we were given two text files:

- farm.py: a sagemath script that generates a key and encrypts the flag

- enc.txt: the encrypted flag yelds by the previous script

First thing first: we are dealing with `Galois finite field` since the scripts creates this global object:

```python

F = list(GF(64))

```

Let's see the key generation:

```python

def keygen(l):

key = [F[randint(1, 63)] for _ in range(l)]

key = math.prod(key) # Optimization the key length :D

return key

```

At the end of the function we are given a single value in `GF(64)` but this field has only 64 values so we can brute-force the key.

We have to inverse the encryption function and we can go:

```python

for c in enc:

x = ALPHABET.index(c) # c = ALHPABET[x]

y = F[x] # x = F.index(y)

z = farmtomap(y/pkey) # y = pkey * maptofarm(z)

m += z

```

At the end the flag was:

```

CCTF{EnCrYp7I0n_4nD_5u8STitUtIn9_iN_Fi3Ld!}

```

Original writeup (https://github.com/r00tstici/writeups/tree/master/cryptoCTF_2021/farm).