Cryptographic Vulnerability: Weak Hashing Algorithm
Vulnerabilidad Criptográfica: Algoritmo de Hashing Débil
Descripción
Una función hash es una función que se usa para codificar datos y devolver un valor hash de tamaño fijo con el propósito de minimizar la posibilidad de colisión (las posibilidades de que dos entradas diferentes tengan exactamente el mismo valor hash son increíblemente pequeñas), estas funciones podrían ser usadas para verificar la integridad de un mensaje o archivos, identificar un archivo o datos o verificar un secreto o contraseña.
Algoritmos de hashing comunes:
MD5: El Algoritmo de Resumen de Mensaje (MD5) fue diseñado en 1991 como un reemplazo de MD4. En marzo de 2005, se presentaron dos archivos diferentes con el mismo hash MD5. Y un año más tarde se publicó un algoritmo que puede encontrar colisiones dentro de un minuto. Cuando se trata de algoritmos de hashing, encontrar dos entradas distintas con el mismo hash debería ser computacionalmente inviable, MD5 falla este requerimiento catastróficamente, en 2008 el instituto de ingeniería de software concluyó que MD5 está "criptográficamente roto y es inadecuado para su uso futuro".SHA1: El Algoritmo de Hash Seguro 1 (SHA1) fue diseñado por la NSA. Al igual que MD5, SHA1 es vulnerable a ataques de colisión. En 2005 SHA1 era considerado inseguro, en 2011 el Instituto Nacional de Normas y Tecnología (NIST) formalmente lo desaprobó.SHA2: es un conjunto de algoritmos de hashing que también fue diseñado por la NSA, SHA-2 es significativamente diferente de SHA1 y se considera altamente seguro.SHA-256: es un miembro del conjunto SHA-2. el sufijo 256 representa los 256 bits, lo cual es la longitud del valor hash producido. SHA-256 es un estándar de la industria seguro y confiable con una posibilidad casi imposible de colisiones (2^256).SHA3: SHA3 es el último miembro de la familia de estándares del Algoritmo de Hash Seguro, publicado por NIST en 2015. Aunque parte de la misma serie de estándares, SHA3 es internamente diferente a la estructura de SHA1 y SHA2, que es como MD5, y también se considera altamente seguro.Argon2: es el ganador de la Competencia de Hashing de Contraseñas del 2015. Y ahora se considera uno de los algoritmos de hashing de contraseñas más seguros disponibles. Ha sido adoptado por varios estándares de seguridad y criptografía, incluyendo el Grupo de Trabajo de Ingeniería de Internet (IETF), la Competencia de Hashing de Contraseñas (PHC) y El Proyecto Abierto de Seguridad de Aplicaciones Web a Nivel Mundial (OWASP).Bcrypt: Introducido en 1999, Bcrypt es un algoritmo adaptativo lento diseñado para ser altamente resistente a la fuerza bruta. Su adaptabilidad es que le da control al usuario sobre el costo computacional, lo cual significa que se puede ajustar a medida que el hardware evoluciona con el tiempo. Bcrypt también es adoptado por muchos estándares de seguridad, incluyendo el Proyecto Abierto de Seguridad de Aplicaciones Web (OWASP) y el Estándar de Seguridad de Datos de la Industria de Tarjetas de Pago (PCI DSS).HMAC: El código de autenticación de mensajes basado en hash no es un algoritmo de hashing sino una técnica de autenticación criptográfica que utiliza un algoritmo de hashing acoplado a una clave secreta, la fuerza de HMAC depende del algoritmo hash subyacente, y por lo tanto no se debe usar con algoritmos hash obsoletos y débiles.
MD5 y SHA-1 son inseguros y no deben usarse, incluso con HMAC.
Recomendación
Para mitigar los riesgos de usar algoritmos de hashing débiles, considere lo siguiente:
-
Evite MD5 y SHA-1 ya que estos algoritmos son inseguros y propensos a colisiones. No deben usarse para ningún propósito, incluyendo HMAC.
-
Para hashing y verificación de firma, opte por SHA-256 o SHA-3. Ofrecen alta seguridad y son estándares de la industria ampliamente aceptados.
-
Para el hashing de datos sensibles (PII, PHI...), considere Argon2 o Bcrypt. Están diseñados para resistir ataques de fuerza bruta y son recomendados por estándares de seguridad.
-
Al usar HMAC para la autenticación de mensajes, asegúrese de que esté acoplado con algoritmos hash seguros como SHA-256 o SHA-3 para mantener una seguridad sólida.
Enlaces
Estándares
- OWASP_MASVS_L1:
- MSTG_CRYPTO_2
- MSTG_CRYPTO_3
- MSTG_CRYPTO_4
- OWASP_MASVS_L2:
- MSTG_CRYPTO_2
- MSTG_CRYPTO_3
- MSTG_CRYPTO_4
- PCI_STANDARDS:
- REQ_2_2
- REQ_3_6
- REQ_3_7
- REQ_6_2
- OWASP_MASVS_v2_1:
- MASVS_CRYPTO_1
- MASVS_CRYPTO_2
- SOC2_CONTROLS:
- CC_2_1
- CC_4_1
- CC_6_7
- CC_7_1
- CC_7_2
- CC_7_4
- CC_7_5
- CNIL_FOR_DEVELOPERS:
- DEVELOPERS_4_1_4