Seguridad

Cómo Funciona el Hashing de Contraseñas (Bcrypt, Argon2, Salting)

Aprende los conceptos criptográficos detrás del almacenamiento seguro de credenciales, diferencias entre hashing y cifrado, y algoritmos de estiramiento de clave.

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:

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)**:

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:

  1. Bcrypt: Basado en Blowfish, incluye un "factor de trabajo" para incrementar exponencialmente el tiempo de cómputo en la CPU.
  2. 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.
  3. 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).