Solución a otro reto de criptografía de la plataforma picoCTF 2018.
En esta ocasión la solución al octavo de ellos, que, en mi opinión, presenta un nivel de dificultad fácil (★★☆☆☆).
Con este desafío se da inicio a los retos de criptografía moderna y, en concreto, a aquellos en los que se ve involucrado el criptosistema de clave pública (criptografía asimétrica) más utilizado actualmente, RSA.
Este reto es casi idéntico al que puse en este post.
- Safe RSA - Points: 250:
Su enunciado dice lo siguiente: 'Now that you know about RSA can you help us decrypt this ciphertext? We don't have the decryption key but something about those values looks funky'.
Solución: por las pistas que se dan en la pestaña 'Hints': 'Hmmm that e value looks kinda small right?' y 'These are some really big numbers.. Make sure you're using functions that don't lose any precision!', parece claro que el ataque a emplear es el basado en un exponente público bajo ('low public exponent attack').
En un archivo (ciphertext) se proporicionan: el módulo (n), el exponente de la clave pública (e), que como se ve más adelante es 3, y un criptograma (c).
Para resolverlo utilizo el pequeño script en python que utilicé en el post al que he hecho referencia:
#!/usr/bin/env python
#
# Ataque exponente publico bajo
#
import gmpy2
import binascii
n = 374159235470172130988938196520880526947952521620932362050308663243595788308583992120881359365258949723819911758198013202644666489247987314025169670926273213367237020188587742716017314320191350666762541039238241984934473188656610615918474673963331992408750047451253205158436452814354564283003696666945950908549197175404580533132142111356931324330631843602412540295482841975783884766801266552337129105407869020730226041538750535628619717708838029286366761470986056335230171148734027536820544543251801093230809186222940806718221638845816521738601843083746103374974120575519418797642878012234163709518203946599836959811
e = 3
c = 2205316413931134031046440767620541984801091216351222789180593875373829950860542792110364325728088504479780803714561464250589795961097670884274813261496112882580892020487261058118157619586156815531561455215290361274334977137261636930849125
print ''
print 'Modulo (n) ....................', n
print ''
print 'exponente clave publica (e) ...', e
print ''
print 'Criptograma (c) ...............', c
m,exacta = gmpy2.iroot(c,e)
if exacta:
print ''
print 'Texto en claro (m) ............', binascii.unhexlify(gmpy2.digits(m,16))
Lo ejecuto y obtengo lo siguiente:
Con lo que la solución a este reto es: picoCTF{e_w4y_t00_sm411_9f5d2464}.
En esta ocasión la solución al octavo de ellos, que, en mi opinión, presenta un nivel de dificultad fácil (★★☆☆☆).
Con este desafío se da inicio a los retos de criptografía moderna y, en concreto, a aquellos en los que se ve involucrado el criptosistema de clave pública (criptografía asimétrica) más utilizado actualmente, RSA.
Este reto es casi idéntico al que puse en este post.
- Safe RSA - Points: 250:
Su enunciado dice lo siguiente: 'Now that you know about RSA can you help us decrypt this ciphertext? We don't have the decryption key but something about those values looks funky'.
Solución: por las pistas que se dan en la pestaña 'Hints': 'Hmmm that e value looks kinda small right?' y 'These are some really big numbers.. Make sure you're using functions that don't lose any precision!', parece claro que el ataque a emplear es el basado en un exponente público bajo ('low public exponent attack').
En un archivo (ciphertext) se proporicionan: el módulo (n), el exponente de la clave pública (e), que como se ve más adelante es 3, y un criptograma (c).
Para resolverlo utilizo el pequeño script en python que utilicé en el post al que he hecho referencia:
#!/usr/bin/env python
#
# Ataque exponente publico bajo
#
import gmpy2
import binascii
n = 374159235470172130988938196520880526947952521620932362050308663243595788308583992120881359365258949723819911758198013202644666489247987314025169670926273213367237020188587742716017314320191350666762541039238241984934473188656610615918474673963331992408750047451253205158436452814354564283003696666945950908549197175404580533132142111356931324330631843602412540295482841975783884766801266552337129105407869020730226041538750535628619717708838029286366761470986056335230171148734027536820544543251801093230809186222940806718221638845816521738601843083746103374974120575519418797642878012234163709518203946599836959811
e = 3
c = 2205316413931134031046440767620541984801091216351222789180593875373829950860542792110364325728088504479780803714561464250589795961097670884274813261496112882580892020487261058118157619586156815531561455215290361274334977137261636930849125
print ''
print 'Modulo (n) ....................', n
print ''
print 'exponente clave publica (e) ...', e
print ''
print 'Criptograma (c) ...............', c
m,exacta = gmpy2.iroot(c,e)
if exacta:
print ''
print 'Texto en claro (m) ............', binascii.unhexlify(gmpy2.digits(m,16))
Lo ejecuto y obtengo lo siguiente:
Comentarios
Publicar un comentario