Vulnerabilidades SHA1

4

Actualmente nos estamos integrando con un componente de terceros en nuestra aplicación web. Parte de esta integración requiere el envío de datos a través de http. Esto se hace a través de los parámetros POST. Se incluye un parámetro adicional en la solicitud, que es un hash SHA1 de los otros parámetros, más una clave secreta, combinada de la siguiente manera:

param1.param2.param3.param4.param5.param6.secretkey

Un usuario malicioso o un hombre en el ataque central tiene acceso a los parámetros y al hash de salida, pero no a la clave secreta que no se envía a través de http. He estado leyendo que SHA1 se considera débil y, con suficientes recursos, está roto. Me gustaría entender más acerca de la robustez de esta configuración y de cómo SHA1 es débil.

Mis preguntas son las siguientes:

  1. Un atacante podría recorrer todas las combinaciones posibles de clave secreta, creando un nuevo hash hasta que se encuentre un hash que coincida. Una vez que se encuentra la clave secreta, modificar los datos (y luego generar un nuevo hash) enviado entre nosotros sería trivial y, de manera crucial, indetectable. ¿Hay otras formas (aparte del forzoso brutal) de descubrir la clave secreta? El uso de fuerza bruta se puede usar contra cualquier algoritmo, lo que me lleva a creer que existe una forma mejor / más rápida / más barata de hacerlo. En otras palabras, ¿cómo explotan los atacantes las debilidades de SHA1?
  2. Si no podemos lograr que aumenten la seguridad de su mensaje utilizando SHA2 o SHA3, ¿una clave secreta adecuada con SHA1 nos protegerá contra cualquier ataque?
pregunta Chris Knight 04.11.2016 - 09:01
fuente

5 respuestas

5

Debería leer el este artículo . HMAC es la opción preferida en cualquier caso. La forma en que utiliza el hash con clave lo expone a todas las debilidades del algoritmo de hash. Sin embargo, HMAC sigue siendo seguro porque su seguridad se basa en suposiciones menos sólidas sobre el algoritmo hash.

Tenga en cuenta que la forma opuesta de calcular el hash HASH (KEY || MESSAGE) (a diferencia de HASH (MESSAGE || KEY) como lo pretende hacer) se considera completamente insegura, ya que puede leer here y aquí .

    
respondido por el kaidentity 04.11.2016 - 09:32
fuente
1

SHA-1 no se rompe generalmente para cada tipo de caso de uso. Pero, se considera que proporciona una protección insuficiente contra los ataques de colisión, lo que lo hace inadecuado como algoritmo de firma, por ejemplo, en los certificados. Todavía es lo suficientemente seguro para usar en HMAC aunque es similar (pero no igual) a su caso de uso.

Por lo tanto, creo que SHA-1 en su enfoque actualmente solo puede romperse con fuerza bruta. Ya que SHA-1 es un hash diseñado para ser rápido, podría endurecer su parámetro adicional usando un secreto más largo o usando un algoritmo diseñado para ser más lento. Ambos enfoques hacen que la fuerza bruta sea más difícil ya que el atacante necesita más tiempo para probar todos los secretos posibles.

Además, debe usar un HMAC real como kaidentity señala en su respuesta porque es mejor use algo probado para inventar el suyo propio, especialmente si se trata de criptografía.

    
respondido por el Steffen Ullrich 04.11.2016 - 09:26
fuente
1

Conocer los parámetros y no conocer la clave frente a saber ninguno de los dos no hace mucha diferencia en el caso de las claves grandes, ya que cualquier bit adicional en la clave generará un SHA completamente diferente. Una pequeña ventaja puede ser para el atacante si supiera la longitud de su clave adicional secreta, pero si esa clave es lo suficientemente grande, no tendrá ningún problema. Si la clave es lo suficientemente grande, la fuerza bruta sería un intento inútil.

    
respondido por el Overmind 04.11.2016 - 13:26
fuente
1

Los investigadores ahora tienen ejecutó con éxito un ataque de colisión contra SHA1 , que es como murió MD5

  

Los criptógrafos se refieren al ataque revelado el jueves como una colisión con "prefijo idéntico", lo que significa que le permite al atacante crear dos mensajes distintos que tienen el mismo valor hash. Esta variedad es menos poderosa que la colisión MD5 de "prefijo elegido" llevada a cabo por Flame. En este último caso, los atacantes pueden apuntar a uno o más archivos existentes, como el certificado digital que utiliza una empresa para autenticar su mecanismo de actualización. A pesar de que la colisión contra SHA1 es menos poderosa, los expertos en criptografía dijeron que cualquier ataque con un prefijo idéntico en el mundo real representaba un evento de finalización de juego para una función de hashing.

Hay un sitio web dedicado al ataque

  

Ahora es prácticamente posible crear dos archivos PDF en conflicto y obtener una firma digital SHA-1 en el primer archivo PDF, que también puede ser objeto de abuso como una firma válida en el segundo archivo PDF.

En otras palabras, deja de usar SHA1

    
respondido por el Machavity 23.02.2017 - 16:12
fuente
1

Dependiendo de la implementación, una cosa que viene a la mente es que podría ser vulnerable a un ataque de extensión de longitud donde El atacante 'comienza' desde tu hash. No estoy seguro de que esto se aplique a usted, pero:

  1. Sus parámetros son foo=1&bar=2
  2. Se envían como foo=1&bar=2&sha(foo, bar, SECRET)
  3. Un atacante que quiera inyectar o reemplazar un parámetro podría inicializar su hash SHA desde foo=1&bar=2&sha(foo, bar, SECRET) y agregar su parámetro

No entré en detalles técnicos porque no estoy seguro de que se aplique a usted; También hay algunos requisitos (en su mayoría, sabiendo la duración de la solicitud original) pero creo que están satisfechos con lo que entiendo de su descripción.

Además, su esquema es vulnerable a los ataques de repetición: ¿qué sucede si un atacante intercepta la transacción y la repite una y otra vez? Ya que es sobre HTTP eso sería trivial.

    
respondido por el lorenzog 23.02.2017 - 16:39
fuente

Lea otras preguntas en las etiquetas