Español

Herramientas de desarrollo · Calculadora de hash SHA

Por qué no debe almacenar contraseñas como hash simples SHA-256

· Por qué es importante

contraseñas seguridad criptografía

Un cronómetro que muestra adivinanzas instantáneas versus una función hash de contraseña que agrega retrasos intencionales
Ilustración de vector original de ToolAcre

SHA-256 está diseñado para ser rápido, que es exactamente lo que no desea para las contraseñas. Esta publicación explica por qué la velocidad es el problema y qué funciones de hash de contraseñas funcionan de manera diferente.

SHA-256 no es almacenamiento de contraseñas; es un hashing rápido. El SHA-256 simple brinda a los atacantes la misma velocidad para adivinar, lo que lo hace inadecuado a pesar de ser un algoritmo criptográficamente fuerte.

Un desarrollador implementa un sistema de inicio de sesión y almacena contraseñas como hashes SHA-256. El algoritmo es criptográficamente sólido y la aplicación no aplica sal, lo que mantiene el código simple. Cuando un usuario inicia sesión, la aplicación codifica el envío y lo compara con el valor almacenado. Este diseño es elegante en su simplicidad y es completamente inadecuado para el almacenamiento de contraseñas. Esta no es una preocupación teórica; es el error grave más común en los sistemas de autenticación. El diseño parece defendible hasta que se considera lo que puede hacer un atacante con datos robados.

El defecto no es que SHA-256 sea débil. SHA-256 es un algoritmo criptográfico robusto, en el que confía la comunidad de seguridad y se utiliza en toda la industria para comprobaciones de integridad y direccionamiento de contenido. El defecto es que SHA-256 es rápido, y rápido es precisamente lo contrario de lo que necesitan las contraseñas. Un hash de contraseña no es una primitiva criptográfica cualquiera; es un tipo específico de herramienta diseñada para un problema específico: la defensa contra las conjeturas. La velocidad es una característica de las sumas de verificación; En contraseñas, es una catástrofe.

Rápido es el objetivo de SHA-256: las comprobaciones de integridad necesitan velocidad y un atacante obtiene la misma velocidad para adivinar.

Cuando una base de datos de SHA-256 hashes de contraseña se ve comprometida, un atacante no necesita revertir los hashes. El atacante crea un diccionario: contraseñas comunes como "contraseña", "123456", "hola" y millones más. A cada candidato se le aplica un hash con SHA-256 (una operación computacionalmente trivial) y se compara con la base de datos robada. Un atacante puede calcular valores candidatos SHA-256 con la misma primitiva rápida utilizada por el servicio de inicio de sesión y luego comparar cada resultado fuera de línea sin límites de velocidad. La velocidad exacta depende del hardware y la implementación, por lo que este artículo deliberadamente no hace conjeturas por segundo ni afirmaciones de tiempo de infracción.

La velocidad es todo el problema. SHA-256 está destinado a ser rápido. Esa es su intención de diseño. Le permite verificar sumas de verificación de descarga, calcular direcciones de contenido y crear árboles Merkle sin esperar. En esas aplicaciones, la velocidad es una característica. Para las contraseñas, la velocidad es una catástrofe. Cuando se roba una base de datos de contraseñas y se aplica hash con SHA-256, el atacante tiene la misma velocidad para adivinar que el servidor legítimo para verificar. Esa simetría es lo que rompe la seguridad de las contraseñas. Tanto el servidor legítimo como el atacante reciben el beneficio de un resumen rápido de propósito general; sólo el atacante puede repetirlo sin conexión y sin los controles de inicio de sesión de la aplicación.

Diccionarios y tablas arcoíris: cálculo previo contra hashes sin sal y qué cambios de sal

Aquí es donde resulta práctico un diccionario precalculado. Un atacante puede dedicar un día a calcular SHA-256 hashes para las mil contraseñas más comunes, para patrones comunes como Name1990 o para diccionarios completos en varios idiomas. La tabla resultante se llama tabla arcoíris. Buscar un hash SHA-256 robado en una tabla precalculada es instantáneo. Incluso sin una tabla precalculada, calcular mil millones de conjeturas es trivial con el hash acelerado por GPU. El coste computacional para el atacante es tan bajo que incluso las contraseñas débiles desaparecen en minutos.

La calculadora de hash ToolAcre SHA demuestra esta velocidad directamente. Pegue un texto breve, haga clic en el botón SHA-256 y el resultado será instantáneo. Ese resultado instantáneo (la propiedad que admiras en una calculadora hash) es la propiedad exacta que hace que SHA-256 sea indefendible para las contraseñas. Un atacante obtiene el mismo resultado instantáneo en cada suposición. Para sumas de verificación y controles de integridad, esa velocidad es perfecta. Para las contraseñas, es fatal para la seguridad.

Qué agregan las funciones de hash de contraseñas: factores de trabajo, dureza de la memoria y sales por usuario en bcrypt, scrypt, Argon2 y PBKDF2

Un salt es un valor aleatorio agregado a la contraseña antes del hash, por lo que el salt de cada usuario es diferente. Incluso si dos usuarios tienen la misma contraseña, utilizan valores diferentes. Esto rompe las tablas de arcoíris precalculadas; un atacante debe calcular la tabla de forma independiente para cada sal. Con sales por usuario generadas de forma independiente, una tabla precalculada ya no se aplica sin cambios a todas las cuentas. Sin embargo, una sal sólo empuja al atacante a calcular la tabla durante el ataque en lugar de hacerlo antes. Si el hash sigue siendo rápido, el atacante simplemente calcula más tablas en paralelo y continúa adivinando cada cuenta con una primitiva rápida. La sal es necesaria pero no suficiente. Impide la reutilización del diccionario entre las víctimas, pero no ralentiza la operación principal del atacante: adivinar. La velocidad del hash sigue siendo la velocidad de la adivinación.

Ejemplo resuelto: qué tan rápido se reconoce el SHA-256 de una contraseña común versus un hash de contraseña ajustado, descrito cualitativamente

Una función de hash de contraseña adopta un enfoque diferente. Bcrypt, scrypt, Argon2id y PBKDF2 están diseñados específicamente para la verificación de contraseñas. Todos incluyen un factor de trabajo: un parámetro que hace que el hashing sea deliberadamente costoso. Argon2 es el más moderno; ajusta tanto el tiempo de CPU como el consumo de memoria. Bcrypt utiliza un factor de costo ajustable que duplica el trabajo con cada incremento. Todos ellos incluyen generación de sal incorporada. Estas herramientas están diseñadas teniendo en cuenta el modelo de atacante. El factor trabajo es crucial.

Una función de hash de contraseña hace que el costo configurado forme parte de cada verificación. Un atacante que quiera probar candidatos también debe pagar ese costo por cada suposición. Los tiempos concretos no se pueden copiar de forma segura entre implementaciones, por lo que la sección sobre parámetros requiere una evaluación comparativa de la clase de hardware de producción real. Esa asimetría es lo que hace que el hash de contraseñas funcione. El factor trabajo pasa de la "ventaja del atacante" a la "ventaja del defensor".

Migración de una tabla SHA-256 heredada: empaquetar los hashes existentes y repetirlos en el siguiente inicio de sesión

La comparación realizada sigue siendo cualitativa porque este repositorio no contiene ningún punto de referencia para una función de contraseña o un atacante en particular. Una contraseña común produce el mismo SHA-256 inmediatamente cada vez, por lo que una entrada de diccionario existente puede identificarla por igualdad. Un registro de contraseña ajustado incluye sus propios parámetros de costo y sal y requiere trabajo configurado para cada candidato.

Ese contraste establece el error de diseño sin prometer conjeturas por segundo. El hardware, la implementación y los parámetros seleccionados determinan el tiempo. La conclusión defendible es invariante: un resumen de propósito general no tiene un factor de trabajo ajustable ni un costo de memoria, mientras que una función de hash de contraseña se elige específicamente para imponer esos costos.

Lo que esto no cubre: elegir parámetros para un hash de contraseña específico, que depende de su hardware y modelo de amenaza.

La selección de parámetros está deliberadamente fuera de esta calculadora y de este artículo. La configuración correcta depende de los presupuestos de latencia del servidor, la memoria disponible, la concurrencia y el modelo de amenaza actual, por lo que copiar un valor fijo de una implementación no relacionada convertiría un control de seguridad en folklore. Compare la función de contraseña seleccionada en hardware de producción y vuelva a visitarla a medida que cambie la capacidad.

ToolAcre no puede realizar ese ejercicio: su panel acepta texto y un identificador SHA, luego devuelve un resumen simple. No expone ningún campo salt, configuración de memoria, control de iteración o formato de registro de contraseña. Esa ausencia es una señal de límite útil, no una característica faltante que se pueda solucionar al introducir repetidamente una contraseña en el cuadro de texto.

Conclusión: el resultado instantáneo es la advertencia: la calculadora de hash SHA de ToolAcre muestra qué tan rápido es SHA-256, razón por la cual no debe contener las contraseñas de sus usuarios

Un sistema heredado que ha estado almacenando contraseñas como SHA-256 simple se puede migrar hacia adelante sin requerir que todos los usuarios se restablezcan inmediatamente. La técnica consiste en "envolver" el hash antiguo: tome el valor SHA-256 y vuelva a aplicar el hash con Argon2. En el siguiente inicio de sesión del usuario, el sistema verifica si el antiguo SHA-256 coincide; si es así, calcula Argon2 sobre ese resultado y almacena la versión empaquetada. La próxima vez que el usuario inicie sesión, el sistema verifica directamente con Argon2. La migración se produce de forma transparente durante el flujo de inicio de sesión normal.

Este enfoque integrado garantiza que las contraseñas más antiguas que han sido comprometidas ahora estén protegidas por el factor de trabajo. Un atacante con la antigua base de datos de SHA-256 hashes ya no puede simplemente descifrarlos; deben atacar la versión empaquetada, que incluye el costo de Argon2. La migración se realiza de forma transparente para los usuarios durante su flujo de inicio de sesión normal. Cada inicio de sesión crea una oportunidad para fortalecer el hash sin interrumpir la experiencia del usuario. La elección del factor de trabajo correcto depende de su hardware y su modelo de amenaza. Los valores predeterminados de Argon2 son sensatos: 19 iteraciones, 512 MB memoria y 1 paralelismo para servicios web.