Ir al contenido


Foto

La seguridad en algoritmos hash


  • Por favor identifícate para responder
11 respuestas en este tema

#1 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 22 junio 2012 - 01:26

Hace pocos días conversamos sobre como generar números de serie usando hash:

http://www.delphiacc...nerar-seriales/
http://www.delphiacc...gos-aleatorios/

Para los que se pregunta como es de un seguro un sistema como este, les traigo un pequeño ejemplo, que demuestra que si alguien averigua el código fuente averiguar la contraseña (código, semilla, o como lo quieran llamar) es mas fácil de lo que parece. Sobre todo si se utilizan algoritmos tan sencillos como el que muestro yo en mi respuesta, o completamente obsoletos como el md5.

Pero vamos al tema, en esta pagina de seguridad:
http://www.sensepost.../blog/7103.html

publicaron un reto que consistía en darnos el código fuente de un programa, y un ejemplo del código que generaba. Al final todo se reduce a resolver el problema código=md5(salt+clave), donde código y salt son conocidos y queremos averiguar la clave. La única solución es por "fuerza bruta",  yo mismo dedique 20 minutos en hacer un programa para resolver el problema, pero solamente me permitía procesar 5000 contraseñas por segundos, demasiado lento así que lo deje por imposible.

Pero entonces llegaron los hackers de verdad y sacaron sus herramientas optimizadas para aprovechar el procesador al máximo, incluso las GPUs de las tarjetas gráficas, y el problema que mi programa tardaría meses o años en resolver, los suyos lo resuelven en cuestión de horas.

Aquí la historia completa:
http://www.elladodel...-cripto-de.html

Saludos

PD: Sera mejor que guardes el código fuente bajo llave eduarcol  :D

  • 0

#2 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 22 junio 2012 - 02:37

Cómo te gusta el lado oscuro de la fuerza!!! :D

  • 0

#3 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 22 junio 2012 - 02:44

Cómo te gusta el lado oscuro de la fuerza!!! :D


Pues si  :D  :D :D
  • 0

#4 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.092 mensajes
  • LocationMurcia, España

Escrito 22 junio 2012 - 03:34

De algoritmos hash me toco leerme casi todo, resumí todo lo que encontré en este artículo http://www.hcsoft.ne...adigital#tecni2 en "aspectos técnicos...", con muchos links interesantes, uno habla exactamente del ataque al MD5 pero es bastante árido, así que os lo resumo:

Cualquier seguridad que se base en MD4 o SHA se abre con los ojos cerrados, si es MD5 con un ojo cerrado y el otro abierto, si es SHA-1 ya cuesta más, pero se podría si tienes pasta para alquilar CPUs en amazon, y con SHA256 o superior, actualmente se puede dormir tranquilo.

Acabo de borrar un buen tocho de texto que había escrito, no tienen mucha moya los detalles y ya lo escribi en el artículo de arriba, así que borrado queda!  :(
  • 0

#5 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 22 junio 2012 - 03:59

Dándole vueltas a este asunto escribí esto en mi web:

http://delphi.jmrds.com/?q=node/80

Donde describo un método sencillo para ponérselo mas difícil a los malos  :)

Saludos
  • 0

#6 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.092 mensajes
  • LocationMurcia, España

Escrito 22 junio 2012 - 05:58

Repetir un hash "sano" (sin vulnerabilidades conocidas) N veces no te aumenta la seguridad realmente, al final, tu nuevo hash tiene 256 bits como el SHA256 "simple" y como no hay mejor manera de atacar al SHA256 "simple" que la fuerza bruta, pues estas en las mismas.

Solo tiene 3 ventajas "marginlaes":

-Te proteges (y muy poco) contra la posibilidad de que en un futuro encuentren una debilidad del SHA256 "simple" y la apliquen como en el ejemplo de MD5.

-Consigues lo que se llama "seguridad por ofuscación", ya que es dificil -pero para nada imposible- adivinar que has usado el algoritmo N veces y por tanto un ataque por fuerza bruta necesita de tu app. para generar esos hash.

-Como tu algoritmo es mas "pesado" que el simple SHA256, ejecutarlo 1 millón de veces es tambien más pesado y cuesta más dinero alquilar CPU para atacarte... pero es un incremento lineal, no es exponencial ni polinómoco ni nada, vamos, que pagando N veces más obtienes lo mismo por fuerza bruta.

De todas formas, si intercalas en esa serie de hash otros algoritmos (digamos: SHA256 -> SHA1 -> MD5) y repites esta serie varias veces,  la seguridad aumenta un poc más, ya que para poder atacarte, tiene que caer a la vez los tres algoritmos MD5, SHA1, SHA256 y la técnica para atacar sería más compleja que usando SHA256 varias veces: ofuscas mucho más.

Es mucho mas efectivo usar un SHA-512 "simple" que este sistema de encadenar algoritmos, por ejemplo.
  • 0

#7 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 22 junio 2012 - 06:40

-Como tu algoritmo es mas "pesado" que el simple SHA256, ejecutarlo 1 millón de veces es tambien más pesado y cuesta más dinero alquilar CPU para atacarte... pero es un incremento lineal, no es exponencial ni polinómoco ni nada, vamos, que pagando N veces más obtienes lo mismo por fuerza bruta.

Hombre, yo no lo veo tan despreciable el incremento. Con, por ejemplo, 100000 repeticiones, necesitaras 100000 veces mas CPU o 100000 veces más tiempo. Podemos pasar de 1 hora a 10 años, o de 100 Euros de alquiler a 10.000.000 de Euros, creo que la diferencia es bastante notable.

La fuerza bruta se pude aplicar a cualquier algoritmo. Por ejemplo para una contraseña de  6 bytes hay que probar 256^6 contraseñas, da igual el algoritmo. El tiempo máximo que se tarda en encontrar la clave solo depende del tiempo que se tarda en calcular el hash multiplicado por el numero de posibles contraseñas. Y yo me pregunto que necesita mas tiempo ¿calcular una vez el sha512 o en calcular 100000 veces el sha256? ... yo creo que se tarda mas en calcular lo segundo.

El SHA512 es mas robusto que el SHA256, eso no lo niego, solo digo que en este caso en concreto, para contraseñas de menos de 8 bytes no hay mucha diferencia. Ante un ataque por fuerza bruta caerían los dos, por eso se utilizan algoritmos como bcrypt que son mas "pesados" de calcular, precisamente por el numero de repeticiones que hace internamente.

Saludos
  • 0

#8 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 22 junio 2012 - 06:58

Hola gracias por la advertencia, si mal no recuerdo anteriormente me comentastes o lei un comentario que no era muy seguro, por lo tanto obligue que el sistema guarde el serial generado y compare si el impreso existe entre la lista de los generados de esa forma me evito seriales "falsificados" :D

Gracias
  • 0

#9 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.301 mensajes
  • LocationArgentina

Escrito 22 junio 2012 - 08:38

Hola a todos,
Al final no importa si tenemos SHA1000... con las computadoras cuánticas (que según algunos no hace falta mucho para que estén a la vuelta de la esquina) se va a ir todo a la mococha  :D

¿Quieren un sistema invulnerable, imposible de hackear, o de atacar? Pues conviértanlo en un terminal bobo: no lo enchufes a la red de redes, enciérralo a 1km bajo tierra y que esté instalado únicamente en esa máquina, no lo distribuyas y listo. ¿Problem?

Jajaja... me salió al estilo cuanto cabrón  :D

Saludos,
  • 0

#10 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.301 mensajes
  • LocationArgentina

Escrito 22 junio 2012 - 09:38

Por cierto, ¿Que es Bcrypt? Es la primera vez que escucho de él y ha decir verdad no me entero bien lo que leo en wikipedia.

La verdad es que no hay seguridad 100%. Por ejemplo se decía que AES es inviolable aunque se ha detectado que tiene un defecto matemático que, afortunadamente, aún no se le ha encontrado modo alguno de explotarlo.
La única forma de tener seguridad es directamente no contar nada a nadie.

Saludos,
  • 0

#11 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 23 junio 2012 - 02:30

Por cierto, ¿Que es Bcrypt? Es la primera vez que escucho de él y ha decir verdad no me entero bien lo que leo en wikipedia.


Pues básicamente es un hash pensado precisamente para guardar contraseñas. Utiliza parte del algoritmo de Blowfish, para generar un hash y no un cifrado simétrico como hace Blowfish. Su fortaleza reside en que es muy "pesado" de calcular por lo que es mas resistente a los ataques por "fuerza bruta", y el numero de "vueltas" se puede aumentar tanto como se quiera por lo que para obtener mayor nivel de seguridad solo hay que aumentar el numero de vueltas haciendo que sea cada vez mas pesado de calcular.

La verdad es que no hay seguridad 100%. Por ejemplo se decía que AES es inviolable aunque se ha detectado que tiene un defecto matemático que, afortunadamente, aún no se le ha encontrado modo alguno de explotarlo.

Esos "fallos" se aplican a variantes del algoritmo como muchos menos iteraciones o "vueltas" que el estándar, y por ahora no dejan de ser una curiosidad matemática. No dudo que terminaran rompiendo, es solo cuestión de tiempo, pero por ahora estamos a salvo.

La única forma de tener seguridad es directamente no contar nada a nadie.

En criptografia no se busca cifrar algo para volverlo indescifrable, porque saben que es solo cuestion de tiempo descifralo, lo que se busca es mantener el mensaje cifrado un tiempo razonable, lo suficiente para que a un atacante ya no le resulte útil la información que contenía.

Saludos
  • 0

#12 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.301 mensajes
  • LocationArgentina

Escrito 23 junio 2012 - 11:20

Pues básicamente es un hash pensado precisamente para guardar contraseñas. Utiliza parte del algoritmo de Blowfish, para generar un hash y no un cifrado simétrico como hace Blowfish. Su fortaleza reside en que es muy "pesado" de calcular por lo que es mas resistente a los ataques por "fuerza bruta", y el numero de "vueltas" se puede aumentar tanto como se quiera por lo que para obtener mayor nivel de seguridad solo hay que aumentar el numero de vueltas haciendo que sea cada vez mas pesado de calcular.

Ok, voy entendiendo... el quid de la cuestión es que no entiendo demasiado a Blowfish  :D

Esos "fallos" se aplican a variantes del algoritmo como muchos menos iteraciones o "vueltas" que el estándar, y por ahora no dejan de ser una curiosidad matemática. No dudo que terminaran rompiendo, es solo cuestión de tiempo, pero por ahora estamos a salvo.

Asi es, en algún momento se romperá. Por ahora AES sigue siendo una buena opción para el cifrado. He leído hace un tiempo, no recuerdo bien (creo que en Kriptopolis) que existe la posibilidad de que a pesar de haberle encontrado algunos defectos y que hay una parte de los criptólogos que advierten y tienen sus dudas, éstos no puedan ser explotados en algunas de las variantes e implementaciones; aunque eso me ha dejado un sabor demasiado optimista por parte del (los) autor(es).
Muy posiblemente en algún momento se encuentre el modo de realizar ese tal ataque hipotético que lo destrozaría.

En criptografia no se busca cifrar algo para volverlo indescifrable, porque saben que es solo cuestion de tiempo descifralo, lo que se busca es mantener el mensaje cifrado un tiempo razonable, lo suficiente para que a un atacante ya no le resulte útil la información que contenía.

Lo se amigo, esperaba que se entendiera lo ilógico e impráctico que sería cifrar algo para nunca más volverlo a recuperar.
A lo que apuntaba es que si la idea es que nadie se entere, pues guárdatelo y no lo comentes... que muera contigo y no dejes pistas.
A la larga, es muy probable que aparezca alguien con el conocimiento y los recursos necesarios para dar vuelta a cualquier cifrado.

Saludos,
  • 0




IP.Board spam blocked by CleanTalk.