write-ups

ARKANYOTA Write-Ups's

View on GitHub

Dessine-moi une courbe elliptique

Description

Dessine-moi une courbe elliptique

825

Au cours d'une de vos explorations dans le café, vous surprenez la conversation suivante :
Oh ! Ce jour, je m'en souviens parfaitement, comme si c'était hier. À cette époque, je passais mes journées à mon bureau chez moi, avec comme seule occupation de dessiner les illustrations qui m'étaient commandées par les journaux du coin. Je ne m'en rendais pas compte à ce moment, mais cela faisait bien 6 ans que je vivais cette vie monacale sans réelle interaction humaine. Le temps passe vite quand on n'a rien à faire de ses journées. Mais ce jour-là, c'était différent. Je m'apprêtais à commencer ma journée de travail, un peu stressé parce que j'avais des illustrations que je devais absolument finir aujourd'hui. Alors que je venais de m'installer devant ma planche à dessin, quelle ne fut pas ma surprise d'entendre une voix venir de derrière-moi : 
« S'il-te plaît, dessine moi une courbe elliptique. » 
Je me suis retourné immédiatement. Un petit bonhomme se tenait derrière moi, dans mon appartement, habillé de façon tout à fait incongrue. Il portait une sorte de tenue de mousquetaire céleste ? Même aujourd'hui je ne sais toujours pas comment la décrire.
« Quoi ?
— S'il-te plaît, dessine moi une courbe elliptique. »
Devant cette situation ubuesque, mon cerveau a lâché, a abandonné. Je ne cherchais plus à comprendre et je me contentais de répondre:
« Je ne sais pas ce que c'est.
— Ce n'est pas grave, je suis sûr que tu pourras en dessiner une belle! Répondit l'enfant en rigolant. »
Machinalement, je pris mon crayon, et je dessinai à main levée une courbe, sans réfléchir. Après quelques instants, je me suis retourné, et j'ai montré le résultat à l'enfant, qui secoua immédiatement la tête.
« Non, regarde: cette courbe à un déterminant nul, je ne veux pas d'une courbe malade ! »
À ce moment, je ne cherchais plus à comprendre ce qu'il se passait. J'ai donc fait la seule chose que je pouvais faire, j'en ai redessiné une. Cette fois, l'enfant était très heureux.
« Elle est magnifique ! Je suis sûr qu'elle sera très heureuse toute seule. »
Et là, sous mes yeux ébahis, la courbe pris vie depuis mon dessin, et s'envola dans la pièce. Elle se mit à tourner partout, avant de disparaître. J'étais bouche bée, enfin encore plus qu'avant.
« Ah, elle avait envie de bouger visiblement !
— Où est-elle partie ?
— Je ne sais pas. Mais c'est toi qui l'a dessinée ! Tu ne devrais pas avoir de mal à la retrouver. En plus je crois qu'elle t'a laissé un petit souvenir, dit-il en pointant le sol, où une série de chiffres étaient effectivement dessinés sur le parquet.
— Merci encore ! Sur ce, je dois partir. Au revoir ! »
Avant que je puisse ouvrir la bouche, il disparût.
Je ne sais toujours pas ce qu'il s'est passé ce jour-là, mais je retrouverais cette courbe un jour !
 
 
Peut-être pourriez-vous l'aider ?
Alternatif#7526

On sait que l’equation de la courbe elyptique $y^2 = x^3 + ax + b$

On a comme valeur connue: G_x = 93808707311515764328749048019429156823177018815962831703088729905542530725 G_y = 144188081159786866301184058966215079553216226588404139826447829786378964579 H_x = 139273587750511132949199077353388298279458715287916158719683257616077625421 H_y = 30737261732951428402751520492138972590770609126561688808936331585804316784 p = 231933770389389338159753408142515592951889415487365399671635245679612352781

On resoult l’equation: avec sympy

from sympy import symbols, Eq, solve

a, b = symbols('a b')
equation_1 = Eq(G_y**2, G_x**3 + a*G_x + b)
equation_2 = Eq(H_y**2, H_x**3 + a*H_x + b)
solutions = solve((equation_1, equation_2), (a, b))

print(solutions)

on a un unique couple: on le met dans sagemath

sage: a,b = -2084427415787573107307163445898635120031985043395279235018345820115926972549642455543309578884716641729449
....: 41708080271071369533168969487407690706382667101401618264550643942845259100061159336900412215419453352907290409467
....: 769/5051653382110596513383336592662126828475744052439258557399391967837232744,15383485425814774245193475118141355
....: 54822438053171392168273790509092982610499564334760114202774343883388903461800919224470765131276722775896112268346
....: 91805612610594224739841999363721868981291387816780346969646360084869117665652362958084089382174429739238254333456
....: 03225420982709209943966469500036829/5051653382110596513383336592662126828475744052439258557399391967837232744

# On verifie que ca soit la bonne courbe

sage: E = EllipticCurve(GF(p), [a,b])
sage:     G = E(G_x, G_y)
....:     H = E(H_x, H_y)
sage: if G in E and H in E:
....:     print("ok")
....: 
ok
sage: 4 * a**3 + 27 * b**2
# On a un truc non nul pour le determinant

# On affiche E:
sage: E
Elliptic Curve defined by y^2 = x^3 + 14902775479549176103916693271068277706052934716440896707334978512750519253*x + 220048944991955967308525489300590382240260882141745561912602020777012600739 over Finite Field of size 231933770389389338159753408142515592951889415487365399671635245679612352781

# On identifie le bon a et b

sage: a = 14902775479549176103916693271068277706052934716440896707334978512750519253
sage: b = 220048944991955967308525489300590382240260882141745561912602020777012600739
sage: E = EllipticCurve(GF(p), [a,b])
sage:     G = E(G_x, G_y)
....:     H = E(H_x, H_y)
# C'est toujours la bonne courbe

# On affiche stra+strb
sage: str(a)+str(b)
'14902775479549176103916693271068277706052934716440896707334978512750519253220048944991955967308525489300590382240260882141745561912602020777012600739'

Dans python maintenant:

>>> key = "14902775479549176103916693271068277706052934716440896707334978512750519253220048944991955967308525489300590382240260882141745561912602020777012600739"
>>> (hashlib.sha1(key.encode()).digest()[:16]).hex()                                                                   '2a21e2e5284d67652d0dc838c30daed9'

On va sur cyberchef: https://gchq.github.io/CyberChef/#recipe=AES_Decrypt(%7B'option':'Hex','string':'2a21e2e5284d67652d0dc838c30daed9'%7D,%7B'option':'Hex','string':'00b7822a196b00795078b69fcd91280d'%7D,'CBC/NoPadding','Hex','Raw',%7B'option':'Hex','string':''%7D,%7B'option':'Hex','string':''%7D)&input=ODIzM2QwNGEyOWJlZmQyZWZiOTMyYjRkYmFjOGQ0MTg2OWUxM2VjYmE3ZTVmMTNkNDgxMjhkZGQ3NGVhMGM3MDg1YjRmZjQwMjMyNjg3MDMxM2UyZjFkZmJjOWRlM2Y5NjIyNWZmYmU1OGE4N2U2ODc2NjViN2Q0NWE0MWFjMjI

On trouve: 404CTF{70u735_l35_gr4nd35_p3r50nn3s_0nt_d_@b0rd_373_d35_3nf4n7s}