HackDef 2017 Quals Round - Crypt 300

By Diebartdie Team 


El reto consiste en un ataque a RSA llamado Wiener's attack:

https://en.wikipedia.org/wiki/Wiener%27s_attack

RSA es vulnerable cuando se usa una llave privada pequeña (variable "d"). Veamos como funciona el ataque:

  1.  Se procede a calcular la llave privada "d", gracias a la biblioteca para python3 "owiener" disponible en:
https://github.com/orisano/owiener

 Para ello se instala: python3 -m pip install owiener
  1.  Se abre un intérprete de python3 y se escriben las siguientes lineas: 

import owiener; 

import binascii; 

e= 387825392787200906676631198961098070912332865442137539919413714790310139653713077586557654409565459752133439009280843965856789151962860193830258244424149230046832475959852771134503754778007132465468717789936602755336332984790622132641288576440161244396963980583318569320681953570111708877198371377792396775817; 
n= 609983533322177402468580314139090006939877955334245068261469677806169434040069069770928535701086364941983428090933795745853896746458472620457491993499511798536747668197186857850887990812746855062415626715645223089415186093589721763366994454776521466115355580659841153428179997121984448771910872629371808169183;

c= 485157539635149150477587041963675983373565103783986122373916449341788352816712807223333753361863751538867357439345666958739670139765250962780786312866207478836239088057133600920406907106602761663989082459786675009427593980335821211797864157081898268708473412392817988433236240268627504608328648604817617355001; 

 

  1.  Se calcula la llave privada "d" con el método que provee la biblioteca: 
d = owiener.attack(e, n);  

  1.  Una vez obtenida la llave privada "d", se descifra el mensaje "c":

message = pow(c, d, n);

decrypt = str(format(message, 'x'));

print(binascii.unhexlify(decrypt));


b'flag{Wiener_Attack_R0cks_kids!}'

Comments