El hash SHA-1 que todos usaron y que ya no deberías usar
Vamos a desenterrar un clásico que aún aparece en muchos proyectos: SHA-1.
Puede que lo hayas visto en Git, APIs, tokens o viejas librerías, pero:
👉 ¿qué es realmente SHA-1?
👉 ¿sigue siendo seguro?
👉 y qué alternativas deberías usar hoy?
💡 ¿Qué es un hash?
Un hash es una función que toma cualquier dato (texto, archivo, contraseña) y lo transforma en una cadena corta de caracteres — siempre del mismo tamaño, sin importar el tamaño del dato original.
Un error muy común es pensar que un hash es reversible, como una contraseña cifrada.
El hash es un proceso unidireccional.
Una vez generado, no hay forma matemática de recuperar el mensaje original.
💡 ¿Qué es SHA-1?
SHA-1 es un algoritmo de hash criptográfico creado en los 90s. Su trabajo es transformar cualquier dato de entrada (texto, archivo, número) en un identificador fijo de 160 bits.
Ejemplo:
Entrada: "Hola mundo"
SHA-1: c083106c930790151165b95bd11860724e3836cb
Mismo dato siempre genera el mismo hash. Cambias una letra y obtienes un hash completamente diferente. Esto es muy útil para:
- Validar integridad de archivos.
- Firmar datos.
- Identificar versiones o cambios.
🗓️ Breve historia: cuándo nació y cuándo cayó
Evento | Año |
---|---|
SHA-1 es publicado por el NIST | 1995 |
SHA-2 (SHA-256, SHA-512, etc.) publicado | 2001 |
Primeras debilidades teóricas encontradas | 2005 |
Ataque real SHAttered (colisión demostrada) | 2017 |
Desde 2005 se sabía que SHA-1 era débil, y en 2017 Google demostró una colisión práctica (¡dos archivos PDF diferentes con el mismo hash!).
Desde entonces se considera obsoleto e inseguro para seguridad criptográfica.
⚠️ ¿Sigue usándose SHA-1 hoy?
Aunque su uso en seguridad está totalmente desaconsejado, todavía se encuentra en algunos casos:
Caso | ¿Por qué aún se usa? | Nota |
---|---|---|
Git (hash de commits) | Compatibilidad histórica. | Git soporta SHA-256 desde 2020. |
Checksums de archivos | Verificación de integridad básica. | Mejor usar SHA-256. |
Sistemas legacy / APIs viejas | Por no haberse actualizado. | Migrar lo antes posible. |
Firmas de software antiguo | Compatibilidad con dispositivos viejos. | Evitar siempre que sea posible. |
Ojo: Si ves SHA-1 en temas de contraseñas, firmas digitales o tokens: ¡cambia ya!
🔥 Alternativas modernas
Hoy tienes varias opciones seguras y bien soportadas:
Algoritmo | Longitud Hash | Seguridad | Soporte |
---|---|---|---|
SHA-256 | 256 bits | 🔥 Alta | Web Crypto API / Node.js |
SHA-512 | 512 bits | 🛡️ Muy Alta | Web Crypto API / Node.js |
BLAKE2 | Variable | ⚡ Ultra rápido y seguro | Librerías específicas |
SHA-3 | Variable | 🔬 Diseño moderno | Node.js / Librerías |
🧑💻 Ejemplo práctico en JavaScript
const encoder = new TextEncoder()
const data = encoder.encode('Hola mundo')
crypto.subtle.digest('SHA-256', data).then((buffer) => {
console.log(Buffer.from(buffer).toString('hex'))
})
🏆 ¿Qué deberías usar hoy?
Necesitas | Lo recomendado es |
---|---|
Validar archivos | SHA-256 o SHA-3 |
Tokens o firmas digitales | SHA-256 o SHA-512 |
Contraseñas | Bcrypt, Argon2, PBKDF2 |
Identificadores ligeros | nanoid o uuid |
🤔 ¿Y si quiero obtener el mensaje desde el hash?
¡No se puede!
El hash es como la huella digital de un texto, pero no guarda información del mensaje original.
A menos que alguien use:
-
Fuerza bruta (probar infinitos mensajes hasta dar con el hash),
-
Diccionarios o rainbow tables (tablas de hash precalculados para palabras comunes),
No es posible revertir un hash. Por eso se recomienda usar salt (agregar valores aleatorios al texto antes de hashearlo) cuando manejas datos sensibles, como contraseñas.
✅ Conclusión
-
SHA-1 fue importante, pero hoy es inseguro.
-
En sistemas nuevos o actualizaciones, siempre opta por SHA-256 o superiores.
-
En sistemas heredados (como Git), SHA-1 aún sobrevive, pero su uso seguro depende de factores adicionales.
Así que ya sabes: si tu código tiene SHA-1… ¡es momento de refactorizar! 💪
¡Gracias por leer!