Choose Your RSA - author: anaken21sec1 - crypto

from Crypto.Util.number import long_to_bytes from Crypto.Cipher import AES from Crypto.Util.Padding import unpad import gmpy2

1) paramètres récupérés du challenge

aes_hex = “682ea5c280898c60df57655309fc2221f9d2edd2bb3253c9387ce958d4518d12da0ba5415a439c738e192eb47a506c076a809351f5d908f6f4d2f2007a77e1bc” n0=14492614851693395581003552028685824887489091877629909291384165138933517085933797011760292213342677553780633008356406519102592579186576389437763355865474709512004059603596981545889483282430091419942140116358220861789708243706225507677940157063466622153139786114538976366542560474972221129183513817759604271379628874196767705910827928909090127127092569578338935081201717558963847261297723078698703297023677660383565353074591457350651831757363492801707386493986190192285849598675253649355216705710055168837081985745256393329777607976834846386099419204918035639887683063939934406520823787727485808116373892489839440422497 c0=1461792881577500861721300946277793652320852436241464787198462493212477909900697264465358819563659856055504299241730447460812647535345770403720919538937567801214174884826537053942165044673207725514113056039248660526778877870677554196115546486889274836909250261346402052764608778006922136534223810996957923457223696565319804057634367294203978458384829830712772070788516598618281277804252723398464460200852010392763779543524060790800925682935983651102553555526675307511491842885850339220714725347497902711675871837051120767520819073955489943002677903835217507496069092587564206338447098238106058803455821339390048120597 n1=2324679680827079631881632415779512022402192361287796886195630477538772614085274410672337638384275733016641860175770020058362196708257152207736077880599755457504191792118342749033909579353306930405581696433562741487319479147183780787293673694988292807064598162583839695304508919938567734634639747852211690398997233062118142763172172188288995701472995511079384473664070749184571424904065680511948958660391589785778203939899978536329283573477377036266491156137962367154857589447743786601590946034612549670487602415980782653336583793098769253277188462292797085086738613597184820563692307071667803541300181876082591581686656859784284550749282521875003150035380711351061400752076227930477313348993303946031077200194761460547856309462514903402487620405917168467972989055910642131518618318761317779805707767476065856019282215500835438012413447015707040820262273133453401815828731579501163117284709004648763240124088739843022223758503 c1=1938038099187113106577053369897629485360592777178553458659394969265631646521758573317733459362443127891005941729764044618016874904091132013442162515989622777213462129531891850815377394032736166184896915072468808754483998750731852698003379506420048196727741342734177690637827696548740866001765671660276159090417424521561818278612735807160258143508670670381136546447770397744725824030165046767562520510607767906301874174877394161219048467821375499451909475213809910713006129811483146031256203883437285830877252362939957290771715806878062639209449555956251210492658410904989095282175459043760779234908672971721784039899345872952130440236425508951154460669549325415483476040671613451380985115146972954342875407073364486477881209717866320620204964416761600883190803872435247793896271511497916155927203497010923271797895101300753716385288421764589957479379420338287410410566229438649307798902438263786718282004510286693828246465520 n2=578940772454204142447550740244173118485472052234245373245257419294447577312798875947840891331454449595347745273445363757501538780120301242967783130609317358302153718811040631505161187498225360639655093574170222538305678747960232311716244739359185452970393634304223845452971619366868933072076995466074314323250607260281266559341225167262942599287135250572517156602806208885281445137787189519859700813621068748460851504234317017219064573590175215528164047765314302417123617017346199141049101270871178886720585550510393688572888612062665612931639100267250600335785239421069585504976401096790507417230647574257433829017490203518318317613362454014541470508639825849741020054373227024772006178094633767169113531791653704711139040702017560873800477455159641649479782995907949757286497292515400895527666243506183386234133004376582444815043162923276108766947259161603112890989832462126596473307672082695137785187607618343981219287754940841673219415405116417061103724648483492283591893109575060298737597718134656515761140509332537911465355464724549097818015377337039693446900743397642335842140158529653429740110937683887406946003973980225124386152691204470443313316438669972186910189585491035575632415284161400180375653821167647150720636199247 c2=155642627429944466988904017902326019080815626659346173998993980033410155279280694407751852906914869048036327812250286555902247769957370379435235211821798186770377916448565723953420248162711839518862937639624012369988493077192509020136622217264323649880304022583382449908774316923460581546328953008215953728509768797833761321866194599195048425473032510756282182859117279639493084540626053785117590715676811582080968568900358963705022924745746113666899722884630048017205949502446010528179725391162390158074659560629405162849538704082809603849656836291362819886781167849324693667616739914898421554252044788020510546203732109668947821288335064433469002865508796976928809500090000478484773657601091296184353635740914316764602044337703939901119434134061584739617960091092872591754482898194841730929804344552112854157651311106034267675062241762398696532781320290120045148417470406701824875055807054805044911494423129803985967356710142812401681598158185144160850914110024096242640309840510250889537941562077980660029760524772266668751389007379542492057628124969926975320875594550713027051033784874712616291225073035434547489838078769736763169095037418114207445690476948857030487114565018943938107771151137268408582096939677368606831384267569

2) exposants choisis

e0, e1, e2 = 2, 3, 6 L = 6 # lcm(2,3,6)

3) calcul des c’_i

cp0 = pow(c0, L//e0, n0) cp1 = pow(c1, L//e1, n1) cp2 = pow(c2, L//e2, n2)

4) CRT pour reconstituer k^L

from math import prod def crt(residues, moduli): N = prod(moduli) X = 0 for r, n in zip(residues, moduli): m = N // n inv = pow(m, -1, n) X += r * m * inv return X % N, N

X, N = crt([cp0, cp1, cp2], [n0, n1, n2])

5) extraction de la L-ième racine

k, ok = gmpy2.iroot(X, L) assert ok

6) déchiffrement AES

key_bytes = long_to_bytes(int(k)) cipher = AES.new(key_bytes[:16], AES.MODE_ECB) flag = unpad(cipher.decrypt(bytes.fromhex(aes_hex)), AES.block_size) print(flag.decode())