lab.m8d.io
Panel/Desarrollo/Generador Hash

Generador Hash

MD5, SHA-1, SHA-256, SHA-512

Desarrollo

Texto de entrada

0 caracteres0 bytes (UTF-8)

Escribe texto para generar hashes en tiempo real

MD5 · SHA-1 · SHA-256 · SHA-384 · SHA-512

Acerca de esta herramienta

El Generador de Hashes de lab.m8d.io calcula hashes MD5, SHA-1, SHA-256, SHA-384 y SHA-512 de cualquier texto directamente en el navegador usando la Web Crypto API. El hashing se ejecuta en tiempo real conforme escribes, mostrando todos los algoritmos simultáneamente para comparación inmediata. Ningún dato se envía a servidores externos: todo el procesamiento criptográfico ocurre localmente en el cliente.

Propiedades de las funciones hash criptográficas

Una función hash criptográfica transforma una entrada de tamaño arbitrario en una salida de tamaño fijo (digest o hash) con propiedades matemáticas específicas: • Determinismo — La misma entrada siempre produce el mismo hash. Esto permite verificar integridad: si el hash calculado coincide con el hash esperado, los datos no han sido alterados. • Resistencia a preimagen (one-way) — Dado un hash H, es computacionalmente inviable encontrar una entrada M tal que hash(M) = H. No se puede "revertir" un hash para obtener el dato original. Esto distingue el hashing del cifrado: el cifrado es reversible con la clave correcta, el hashing no es reversible. • Resistencia a segunda preimagen — Dada una entrada M1, es inviable encontrar una entrada diferente M2 tal que hash(M1) = hash(M2). Esto protege contra la sustitución de un documento por otro que produzca el mismo hash. • Resistencia a colisiones — Es inviable encontrar cualquier par de entradas distintas M1 y M2 tal que hash(M1) = hash(M2). La resistencia a colisiones es más fuerte que la resistencia a segunda preimagen. La paradoja del cumpleaños reduce la complejidad de encontrar colisiones a 2^(n/2) para un hash de n bits, por lo que SHA-256 (256 bits) tiene una resistencia a colisiones de 2^128 operaciones. • Efecto avalancha — Un cambio mínimo en la entrada (un solo bit) produce un hash completamente diferente, sin relación aparente con el hash original. Esto impide deducir la similitud entre dos entradas comparando sus hashes. • Velocidad vs seguridad — Las funciones hash criptográficas están diseñadas para ser rápidas en el cálculo directo, lo cual es deseable para verificación de integridad pero peligroso para almacenamiento de contraseñas (permite ataques de fuerza bruta masiva con GPUs). Para contraseñas, se usan funciones de hashing lento específicas (bcrypt, scrypt, Argon2).

Algoritmos disponibles: estado actual y recomendaciones

Cada algoritmo hash tiene un nivel de seguridad y un conjunto de casos de uso apropiados: • MD5 (128 bits, RFC 1321) — Diseñado por Ronald Rivest en 1991. Colisiones demostradas en 2004 por Wang et al., y colisiones prácticas generables en segundos con hardware moderno. El ataque de prefijo elegido (chosen-prefix collision) permitió crear certificados X.509 fraudulentos en 2008. MD5 no debe usarse para ningún propósito de seguridad. Su único uso aceptable es como checksum rápido no criptográfico para detección de corrupción accidental de datos, y para compatibilidad con sistemas legacy. • SHA-1 (160 bits, RFC 3174) — Publicado por NIST en 1995. Google y CWI Amsterdam demostraron la primera colisión práctica en 2017 (proyecto SHAttered), con un costo estimado de $110,000 USD en cómputo GPU. En 2020, un ataque de prefijo elegido redujo el costo a ~$45,000. Los navegadores dejaron de confiar en certificados TLS firmados con SHA-1 desde 2017. Git usa SHA-1 para identificar commits pero esta migrando a SHA-256. SHA-1 esta oficialmente deprecado por NIST para aplicaciones de seguridad. • SHA-256 (256 bits) — Miembro de la familia SHA-2 (FIPS 180-4), es el estándar actual para la mayoría de aplicaciones: verificación de integridad de archivos, firmas digitales, blockchain (Bitcoin usa doble SHA-256), certificados TLS, y Subresource Integrity (SRI) en navegadores. No se conocen vulnerabilidades prácticas. Resistencia a colisiones de 2^128 operaciones. • SHA-384 (384 bits) — Variante truncada de SHA-512 con un valor de inicialización diferente. Ofrece mayor margen de seguridad (resistencia a colisiones de 2^192) y puede ser más rápido que SHA-256 en arquitecturas de 64 bits porque SHA-512 (y SHA-384) operan con palabras de 64 bits nativamente. Usado en suites TLS como TLS_AES_256_GCM_SHA384. • SHA-512 (512 bits) — El mayor digest de la familia SHA-2. Resistencia a colisiones de 2^256. Más rápido que SHA-256 en procesadores de 64 bits. Usado cuando se requiere el máximo margen de seguridad o cuando el tamaño del hash no es una restricción.

Hashing correcto de contraseñas y HMAC

Dos aplicaciones críticas del hashing requieren consideraciones especiales: • Almacenamiento de contraseñas — NUNCA se debe almacenar una contraseña como hash plano (SHA-256(password)), ni siquiera con salt. Las funciones hash genericas como SHA-256 están diseñadas para ser rápidas: una GPU moderna calcula miles de millones de SHA-256 por segundo, lo que permite ataques de fuerza bruta y diccionario masivos. Las funciones correctas para contraseñas son: - bcrypt (1999): basada en Blowfish, incluye salt de 128 bits y factor de costo ajustable. Limita la entrada a 72 bytes. Estándar probado y ampliamente disponible. - scrypt (2009): añade resistencia a ataques con hardware especializado (ASICs) al requerir grandes cantidades de memoria. Parámetros: N (costo CPU/memoria), r (tamaño de bloque), p (paralelismo). - Argon2 (2015): ganador del Password Hashing Competition. Variantes: Argon2id (recomendada, híbrida), Argon2i (resistente a side-channel), Argon2d (máxima resistencia a GPU). Parámetros configurables de memoria, iteraciones y paralelismo. Es la recomendación actual de OWASP. • HMAC (Hash-based Message Authentication Code, RFC 2104) — Combina una función hash con una clave secreta para producir un código de autenticación: HMAC(K, M) = H((K' xor opad) || H((K' xor ipad) || M)). A diferencia de un hash simple, HMAC garantiza tanto integridad como autenticación: solo quien posee la clave puede generar un HMAC válido. Usos principales: verificación de webhooks (Stripe, GitHub envían un header X-Hub-Signature-256 con HMAC-SHA256 del payload), firma de JWT con HS256, autenticación de APIs (AWS Signature V4 usa HMAC-SHA256 en cadena), y verificación de integridad de mensajes en protocolos de red. • Web Crypto API — Esta herramienta usa la API criptográfica nativa del navegador (window.crypto.subtle) para calcular los hashes. SubtleCrypto.digest() soporta SHA-1, SHA-256, SHA-384 y SHA-512 de forma nativa con implementación en C++ del navegador. MD5 no está incluido en Web Crypto API (por ser inseguro) y se implementa con una biblioteca JavaScript pura. La ventaja de Web Crypto es que el procesamiento puede ejecutarse fuera del hilo principal (en algunos navegadores), evitando bloquear la UI con entradas grandes.

Preguntas frecuentes

¿Puedo revertir un hash para obtener el texto original?
No. Las funciones hash criptográficas son unidireccionales por diseño: no existe un algoritmo para calcular la entrada a partir del hash. Sin embargo, para entradas cortas o comunes (contraseñas débiles, palabras de diccionario), existen tablas precalculadas (rainbow tables) y bases de datos de hashes conocidos que permiten buscar coincidencias. Por eso las contraseñas no deben almacenarse como hash simple: se usan funciones de hashing lento (bcrypt, Argon2) con salt único por usuario para hacer inviables estos ataques.
¿Por qué MD5 y SHA-1 se consideran inseguros?
Ambos tienen colisiones demostradas: es posible crear dos entradas distintas que producen el mismo hash. Para MD5, generar una colisión toma fracciones de segundo en hardware moderno. Para SHA-1, el proyecto SHAttered de Google/CWI demostro la primera colisión práctica en 2017. Esto significa que un atacante puede sustituir un archivo por otro malicioso con el mismo hash, invalidando cualquier verificación de integridad. MD5 no debe usarse para ningún propósito de seguridad. SHA-1 esta oficialmente deprecado por NIST.
¿Cuál es el algoritmo recomendado para verificar integridad de archivos?
SHA-256 es el estándar actual para verificación de integridad de archivos. Es el algoritmo usado por la mayoría de distribuciones Linux para verificar paquetes (APT, DNF), por Docker para digests de imagenes, por npm para verificar paquetes (campo integrity en package-lock.json con SRI), y por herramientas como sha256sum. SHA-512 ofrece mayor margen de seguridad y puede ser más rápido en procesadores de 64 bits, pero SHA-256 es suficiente para cualquier caso de uso actual.
¿Por qué no debería usar SHA-256 directamente para almacenar contraseñas?
SHA-256 está diseñado para ser rápido: una GPU moderna (como una RTX 4090) puede calcular más de 20 mil millones de hashes SHA-256 por segundo. Un atacante con acceso a la base de datos puede probar diccionarios completos y combinaciones de fuerza bruta en tiempo viable. Incluso con salt, SHA-256 sigue siendo demasiado rápido. Las funciones correctas para contraseñas (bcrypt, scrypt, Argon2id) están diseñadas para ser deliberadamente lentas y consumir memoria, limitando la tasa de intentos a miles o cientos por segundo, haciendo inviable la fuerza bruta.
¿Qué es el efecto avalancha y por que importa?
El efecto avalancha significa que un cambio de un solo bit en la entrada produce un hash completamente diferente, con aproximadamente el 50% de los bits del output cambiados. Esto es fundamental porque impide deducir similitud entre entradas comparando hashes, y asegura que no se pueda predecir como cambiara el hash al modificar la entrada. Si una función hash no tuviera efecto avalancha, un atacante podría aproximar la entrada correcta iterativamente, debilitando la resistencia a preimagen.
¿Es seguro calcular hashes en el navegador?
Sí. Esta herramienta utiliza la Web Crypto API (SubtleCrypto.digest()) para SHA-1, SHA-256, SHA-384 y SHA-512, que es la implementación criptográfica nativa del navegador, escrita en C++ y auditada como parte del motor del navegador. Los datos nunca salen de tu máquina. Para entradas muy grandes, el cálculo puede tardar un momento pero no bloquea la interfaz. Es equivalente en seguridad y corrección a usar openssl dgst o sha256sum en la terminal.