O AsisCTF é um grande CTF internacional que acontece todo ano, atualmente todos podem participar tanto do qualifier quanto da final. É considerado um CTF difícil e um dos mais famosos de acordo com a comunidade.
Esse desafio foi resolvido por 30 times de 357 no total. Eu considero ele de nível médio.
O desafio (arquivo chall.sage) dá pra gente 3 pontos (P, Q e R) numa curva elíptica e um valor enc que é um a mensagem multiplicada ao ponto P da curva. A função monadd
representa a adição de dois pontos na curva, a função monprod
multiplica um valor escalar a um ponto, a função encrypt
faz a multiplicação da mensagem a um ponto e a função monon
verifica se o ponto ta na curva.
A primeira coisa que devemos notar é que enc
também é um ponto da curva, logo temos 4 pontos. A segunda coisa que devemos perceber é a equação da curva, na função monon
de acordo com essa parte do código (a*x**2 + y**2 - d*x**2*y**2) % p == 1
a função da curva é: