Algoritmos de cifrado y hash más seguros: guía completa

Última actualización: 11/11/2025
Autor: Isaac
  • Para integridad usa SHA-256, SHA-512 o SHA-3; evita MD5 y SHA-1.
  • Para cifrado: AES-256 en GCM/XTS; Serpent, Twofish y Camellia son alternativas sólidas.
  • Contraseñas: Argon2id (≥19 MiB, 2 iter.) o scrypt/bcrypt bien parametrizados.
  • 3DES, RIPEMD-160 y SHA-1 están deprecados: migra a AES y SHA-2/3.

Seguridad criptográfica: cifrado y hash

Cuando hablamos de proteger datos, no todo es lo mismo: cifrar y hacer hash son cosas distintas con objetivos diferentes. En esta guía te cuento, con rigor y sin rodeos, cuáles son los algoritmos de cifrado y de hash más seguros, cómo elegirlos según el caso de uso y qué opciones conviene evitar hoy en día.

Además de cubrir los clásicos como AES, SHA-2 y SHA-3, verás por qué MD5, SHA-1 o 3DES ya no son una buena idea, qué recomienda OWASP para guardar contraseñas y cómo comprobar la integridad de archivos correctamente. Y, ya que me lo habéis preguntado, también resolveré cuál usar «si la velocidad no es importante», incluyendo ciphers como Camellia, Twofish, Serpent o Kuznyechik, y hashes como SHA-256, SHA-512, Whirlpool o Streebog.

Qué es una función hash y qué la hace segura

Una función hash transforma una entrada de tamaño arbitrario en un resumen de longitud fija. Para uso criptográfico, un buen hash debe ser determinista, resistente a preimagen, a segunda preimagen y a colisiones, además de exhibir el famoso efecto avalancha: un cambio mínimo en la entrada produce un resultado completamente distinto.

En una función ideal, los resúmenes se distribuyen de forma uniforme e impredecible por todo el espacio de salida, de modo que dos entradas parecidas generen hashes sin relación aparente. Aunque el ideal no existe, con tamaños de salida como 256 bits el espacio posible es gigantesco, lo que hace que las colisiones aleatorias sean computacionalmente inviables en la práctica actual.

Importante: un hash es unidireccional. No se «descifra». La única forma teórica de recuperar la entrada es un ataque por fuerza bruta o por diccionario, y ahí entra en juego por qué las contraseñas deben tratarse con funciones específicas y parámetros que las hagan lentas de calcular para un atacante.

Funciones hash y cifrado comparados

Hash vs cifrado: no son lo mismo

El cifrado es bidireccional: convierte texto en claro en texto cifrado y, con la clave correcta, se revierte. El hash es irreversible y devuelve siempre una salida de longitud fija. El cifrado protege la confidencialidad; el hash aporta integridad y sirve como «huella» de datos.

Casos típicos: para transmitir datos sensibles se usa cifrado (por ejemplo, HTTPS); para verificar si un archivo se ha modificado, se usa un hash. Para almacenar contraseñas, no se cifra ni se usa SHA-256 a secas: se emplean KDFs de contraseñas como Argon2id, scrypt o bcrypt con parámetros de coste.

Estado de las funciones hash más comunes

  • MD5 genera 128 bits y quedó roto para fines criptográficos: existen colisiones prácticas. A día de hoy solo puede tener cabida en usos no críticos como detección de corrupción accidental, aunque conviene migrar a alternativas modernas porque su debilidad facilita ataques de colisión intencionada.
  • SHA-1 produce 160 bits y también está comprometido. Investigaciones redujeron el coste de una colisión a cerca de 263 operaciones, y en 2017 se demostró la colisión práctica SHAttered. Su utilización está desaconsejada en firmas, certificados y cualquier escenario de seguridad real.
  • SHA-2 es la familia recomendada por NIST para uso general: SHA-256, SHA-512, además de variantes truncadas como SHA-224, SHA-384, SHA-512/224 o SHA-512/256. Mantienen alta resistencia a colisiones y gozan de optimizaciones de hardware, aunque SHA-256 suele ser un 20–30% más lento que MD5 o SHA-1.
  • SHA-3 (antes Keccak) no es un «SHA-2 mejorado»; utiliza una construcción de esponja y es intrínsecamente resistente a ataques de extensión de longitud. Ofrece variantes SHA3-224/256/384/512 y extensiones de salida variable SHAKE128/256. Su adopción crece, si bien SHA-2 sigue siendo mayoritario por rendimiento y soporte.
  • Otros hashes: RIPEMD-160 proporciona menos seguridad frente a colisiones que SHA-2 moderno y se considera obsoleto para nuevos diseños; Whirlpool y Streebog (GOST R 34.11-2012) existen, pero fuera de entornos específicos su ecosistema y aceleraciones son limitados frente a SHA-2/3.
  Guía completa sobre la Directiva NIS2: todo lo que las empresas deben saber para cumplir la nueva normativa europea de ciberseguridad

Comprobar integridad de archivos (ejemplos prácticos)

Publicar y verificar un hash permite detectar alteraciones o corrupción en la descarga, y al crear un enlace de descarga directa conviene publicar también el valor SHA-256 oficial. Aunque verás ejemplos con MD5, lo recomendable hoy es SHA-256 o superior. En sistemas tipo Unix puedes hacer algo así: sha256sum archivo.iso y comparar con el valor oficial.

Si necesitas automatizar un proceso, puedes encadenar comandos. Por ejemplo, generar un paquete y su hash en una línea: tar cf - carpeta | tee paquete.tar | sha256sum -. El receptor verificaría con sha256sum -c usando el valor publicado.

En Windows, PowerShell facilita el cálculo con: Get-FileHash .\fichero.zip -Algorithm SHA256. Además existen comandos para inspeccionar atributos y cifrado de archivos en Windows. Evita usar MD5 o SHA-1 como «sello de integridad» en contextos de seguridad, porque un atacante podría forzar colisiones y engañar el proceso.

Cuándo usar hash y cuándo cifrar

Usa hash cuando busques integridad, deduplicación o índices rápidos: verificación de ficheros, firmas digitales (el hash del mensaje es lo que se firma), tablas hash en estructuras de datos o generación de identificadores únicos. También se emplean en listas negras y firmas de malware.

Usa cifrado para confidencialidad: datos en tránsito (HTTPS, VPN), datos en reposo (discos, bases de datos), copias de seguridad y dispositivos móviles. El cifrado impide que terceros lean el contenido sin la clave de descifrado.

Almacenamiento de contraseñas: KDFs y recomendaciones OWASP

Para contraseñas, jamás uses hashes rápidos de propósito general (MD5, SHA-1, SHA-256 «a pelo»). Recurre a KDFs de contraseñas con coste configurable y sal aleatoria: Argon2id, scrypt o bcrypt. Su objetivo es encarecer ataques de fuerza bruta y de GPU/ASIC.

OWASP prioriza Argon2id con, como mínimos, 19 MiB de memoria, 2 iteraciones y paralelismo 1. Si no está disponible, sugiere scrypt con N = 217, r = 8 y p = 1. Como tercera opción, bcrypt con un factor de coste en torno a 10–12 (o el que te dé ~0,5 s en tu hardware).

PBKDF2 queda para requisitos de cumplimiento: es válido si ajustas iteraciones suficientemente altas (millones), pero frente a GPU/ASIC modernos se defiende peor que scrypt o Argon2id por su bajo coste de memoria.

  Cómo eliminar la flecha de acceso directo en los iconos de Windows

Rendimiento de los algoritmos hash

Los hashes de propósito general se diseñan para ser rápidos y eficientes, algo idóneo para protocolos y verificaciones, pero justo lo contrario de lo que buscamos para contraseñas. La velocidad real depende de la entrada, el algoritmo, las instrucciones del procesador y el paralelismo.

En escenarios con grandes volúmenes o en tiempo real, un hash demasiado lento puede convertirse en cuello de botella. Por eso distinguimos entre funciones rápidas (SHA-256/512) y KDFs lentas (Argon2id, scrypt, bcrypt) que introducen coste de CPU y memoria adrede.

Propiedades imprescindibles de un buen hash

Además de determinismo y efecto avalancha, el hash debe ser resistente a preimagen, a segunda preimagen y a colisiones. Y conviene un tamaño mínimo de 256 bits para aguantar fuerza bruta actual y márgenes futuros.

Aunque a veces se simplifica diciendo que «dos entradas distintas no pueden tener el mismo hash», la realidad es que con salidas finitas las colisiones existen; lo importante es que sean impracticables de encontrar. Por eso MD5 y SHA-1 se consideran rotos y SHA-2/3 siguen siendo la apuesta segura.

Cifrado simétrico y modos: qué usar hoy

En cifrado simétrico la referencia es AES con claves de 128/192/256 bits. Lo crítico no es solo el algoritmo, sino el modo de operación: evita ECB, usa modos autenticados como GCM o, en almacenamiento, XTS (por ejemplo, para discos). Si trabajas en entornos Windows, revisa además el soporte de hardware y el seguridad del cifrado BitLocker.

Otros ciphers: Camellia (estándar ISO, buen perfil), Twofish y Serpent (finalistas de AES, aún robustos), ChaCha20-Poly1305 (rapidísimo en software y muy seguro). 3DES y DES han quedado atrás: 3DES además es limitado y desaconsejado por múltiples normas.

Cifrado asimétrico, firmas y tamaños de clave

Para establecer claves y firmar se utilizan RSA y ECC. Con RSA, usa OAEP para cifrado y PSS para firma; jamás RSA «de libro». Tamaños: al menos RSA 3072 bits o ECC 256 bits para un nivel de seguridad aproximado a 128 bits simétricos.

También verás Diffie–Hellman (incluida su variante de curva elíptica) para intercambio de claves y DSA/ECDSA para firmas. En protocolos modernos, la combinación TLS usa intercambio asimétrico y cifrado simétrico autenticado para equilibrar seguridad y rendimiento.

¿Qué elegir si la velocidad no es importante?

Si priorizas seguridad/robustez sobre velocidad, la elección sensata es ir a por algoritmos consolidados y bien auditados, evitando «cócteles» innecesarios. En cifrado simétrico, opta por AES-256 con GCM (tráfico) o XTS (disco). Camellia-256, Serpent y Twofish son alternativas sólidas.

Las cascadas (AES-Twofish, Serpent-Twofish-AES, etc.) rara vez añaden valor real y complican auditoría y compatibilidad. Si tu modelo de amenaza lo exige, mejor refuerza claves, gestión de IVs, rotación y autenticación de datos que encadenar ciphers por capricho.

Sobre Kuznyechik (GOST): técnicamente sólido, pero con menor escrutinio internacional. Úsalo por compliance si lo piden normativas rusas; si no, stick con AES/Camellia/Serpent. En flujos sin AES-NI, ChaCha20-Poly1305 es magnífico, aunque aquí la velocidad no sea tu prioridad.

Para hash general (no contraseñas): prefiere SHA-512/256 o SHA-256 por ecosistema y soporte; SHA3-256 es excelente si quieres inmunidad a extensión de longitud por diseño. Whirlpool y Streebog son válidos, pero con menos adopción y aceleración.

  Mail.ru | Qué, Cómo Llegó a mi PC y Cómo Eliminarlo

Para contraseñas: Argon2id con memoria amplia (≥ 19 MiB), 2+ iteraciones y paralelismo ajustado. Si no puedes, scrypt bien parametrizado o bcrypt con coste alto. Esto es mucho más efectivo que «subir bits» a un SHA genérico.

Regla CA5350 (.NET): evita algoritmos inseguros

El análisis de código de .NET advierte (CA5350) si detecta 3DES, SHA-1 o RIPEMD-160, porque ofrecen garantías inferiores a opciones modernas. Sustituciones rápidas: TripleDES → AES; SHA-1/RIPEMD-160 → SHA-256/384/512.

Ejemplos canónicos de corrección: de var h = SHA1.Create(); a var h = SHA256.Create();; de RIPEMD160Managed.Create() a SHA256.Create(); y de TripleDES.Create() a new AesManaged(). Ajusta además tamaños de clave y modos seguros (GCM/XTS) según el caso.

Comparativa rápida: cifrado vs hashing

Aspecto Cifrado Hash
Direccionalidad Bidireccional (reversible con clave) Unidireccional (irreversible)
Objetivo Confidencialidad Integridad/Identificación
Salida Longitud variable Longitud fija
Ejemplos AES, ChaCha20, RSA, ECC SHA-256, SHA-512, SHA-3

Ataques y buenas prácticas a tener en cuenta

Incluso con algoritmos robustos, las implementaciones importan. Evita ECB, valida rellenos correctamente (CBC es sensible a oráculos de padding), usa AEAD (GCM/ChaCha20-Poly1305), genera IVs/nonce impredecibles y diferentes por mensaje, y verifica siempre la autenticidad antes de descifrar.

Para firmas digitales, no firmes el mensaje completo; firma el hash. Con RSA, usa OAEP para cifrado y PSS para firmar; con ECDSA, cuida con mimo la aleatoriedad de los nonces. Y mantén bibliotecas y configuraciones al día frente a nuevas vulnerabilidades.

SHA-2 y SHA-3 con algo más de detalle

SHA-256 opera con palabras de 32 bits, 64 rondas y bloque de 512 bits; SHA-512 con palabras de 64 bits, 80 rondas y bloque de 1024 bits, de ahí sus variantes truncadas como SHA-512/256 que brindan mejor resistencia a extensión de longitud cuando se reduce la salida.

SHA-3 usa un estado interno de 1600 bits y 24 rondas de permutación; absorbe datos con XOR y expulsa tantas salidas como necesites (SHAKE). Es muy flexible y, aunque en software genérico puede ser más lento que SHA-2, su diseño distinto aporta diversidad criptográfica.

Notas sobre generación de aleatoriedad

Para criptografía, usa fuentes de aleatoriedad segura del sistema (por ejemplo, /dev/urandom, CSPRNG del lenguaje). Evita generadores como rand() o MT19937 para claves, IVs o salts: no son resistentes a predicción y pueden comprometer todo tu esquema.

Para cerrar el círculo, conviene quedarnos con una idea práctica: elige estándares auditados (AES-GCM/XTS, SHA-2/3), evita algoritmos con historial de colisiones o claves cortas (MD5, SHA-1, DES/3DES), y para contraseñas aplica KDFs modernas como Argon2id o scrypt con parámetros bien calibrados; si no te corre prisa la velocidad, sube el coste y la memoria sin miedo, porque ahí está tu mejor escudo frente a ataques offline.

cipher.exe
Artículo relacionado:
Cipher.exe en Windows: uso real, cifrado y borrado seguro de archivos al detalle