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:
- 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?
- 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?