🧂

Salt (criptografía)

En criptografía, un salt es un string aleatorio único que se concatena a una contraseña antes de aplicar una función hash. Su propósito: garantizar que dos usuarios con la misma contraseña generen hashes diferentes, haciendo inútiles los ataques de rainbow table.

Ejemplos

  • bcrypt hash con salt embebido: $2b$12$K1eZ.../9yDXm...
  • PBKDF2 con salt: pbkdf2_sha256$260000$saltbase64$hashbase64
  • Argon2 con salt: $argon2id$v=19$m=65536,t=3,p=4$salt$hash
  • Generación Node.js: crypto.randomBytes(32).toString('hex')
  • DB storage: user_id | password_hash | salt_used

Preguntas frecuentes

¿Puedo usar el mismo salt para todos mis usuarios?

No. Eso se llama 'pepper' (pimienta) y sirve para otro propósito. El salt DEBE ser único por usuario, sino un atacante puede precalcular rainbow tables para tu salt compartido.

¿Dónde guardo el salt de forma segura?

En la misma columna que el hash. Herramientas como bcrypt lo incrustan automáticamente. Si usás PBKDF2 manual, podés almacenarlo en una columna separada en texto plano. No necesita encriptarse.

¿El salt protege contra ataques de fuerza bruta?

Indirectamente. El salt previene ataques paralelos masivos con tablas precalculadas, obligando al atacante a crackear cada hash individualmente. Pero necesitás bcrypt/Argon2 (lentos) para que cada intento tarde suficiente.