La Necesidad Crítica del Hashing
Guardar contraseñas en texto plano es una de las mayores fallas de seguridad posibles. Si la base de datos se filtra, todas las cuentas quedan expuestas. Las funciones criptográficas de hashing transforman la contraseña en una cadena de longitud fija de forma irreversible.
Hashing vs. Cifrado (Encryption)
Aunque a menudo se confunden, son conceptualmente opuestos:
- Cifrado (Criptografía de doble vía): Transforma el texto plano en cifrado mediante una clave y permite descifrarlo para recuperar los datos originales usando la clave correspondiente.
- Hashing (Criptografía de una vía): Es irreversible por diseño. No existe clave ni método matemático para volver al texto original. La verificación se realiza aplicando la misma función a la contraseña introducida y comparando el hash resultante.
Salting (Salado) y Peppering (Pimentado)
Los algoritmos rápidos como MD5 o SHA256 no son seguros para almacenar contraseñas debido a las **Tablas Arcoíris (Rainbow Tables)**, que son bases de datos precalculadas con millones de contraseñas comunes y sus hashes correspondientes.
Para mitigar esto, se utiliza la **Sal (Salt)**:
- Un valor aleatorio único que se añade a la contraseña de cada usuario antes de realizar el hash.
- Si dos usuarios tienen la misma contraseña, sus hashes resultarán completamente diferentes porque sus sales son únicas.
- La sal se guarda en texto plano junto al hash en la base de datos.
El **Pimiento (Pepper)** es similar a la sal, pero se almacena de forma segura en la configuración del servidor, fuera de la base de datos.
Algoritmos Modernos de Estiramiento de Clave
Las tarjetas gráficas (GPUs) modernas pueden calcular miles de millones de hashes simples por segundo. Para combatir esto se diseñaron algoritmos lentos y costosos en recursos:
- Bcrypt: Basado en Blowfish, incluye un "factor de trabajo" para incrementar exponencialmente el tiempo de cómputo en la CPU.
- Scrypt: Diseñado para consumir cantidades específicas de memoria RAM, haciendo que sea extremadamente difícil e ineficiente de crackear usando hardware especializado como tarjetas gráficas (GPUs) o ASICs.
- Argon2: Ganador de la Password Hashing Competition en 2015 y estándar actual. Permite configurar de forma independiente el tiempo de cómputo, el uso de memoria RAM y el número de hilos de procesamiento (paralelismo).