Español

Herramientas de desarrollo · Calculadora de hash SHA

Hash criptográfico frente a suma de comprobación: lo que CRC32 y xxHash no pueden prometer

· Antecedentes

sha-256 criptografía seguridad

Comparación de la velocidad de la suma de comprobación frente a la intensidad del hash criptográfico en un eje de riesgo
Ilustración de vector original de ToolAcre

CRC32, FNV y xxHash también son hashes, pero no hacen ninguna promesa contra un adversario. Esta publicación explica qué separa los hashes criptográficos de las sumas de verificación y cómo seleccionarlos por caso de uso.

¿Qué hash para qué trabajo? — la elección entre velocidad y seguridad adversaria

Las funciones hash se dividen en tres categorías: sumas de verificación para detectar errores accidentales, hashes no criptográficos para distribución y rendimiento, y hashes criptográficos para seguridad. Cada categoría tiene diferentes garantías y diferentes compensaciones en cuanto a velocidad y tamaño del resumen. Una suma de comprobación como CRC32 es rápida y corta (4 bytes, 8 caracteres hexadecimales) pero no ofrece protección contra modificaciones intencionales. Un hash no criptográfico como xxHash o MurmurHash también es rápido y útil para tablas hash y distribución de datos, pero no ofrece protección contra un adversario que quiera provocar una colisión. Un hash criptográfico como SHA-256 es más lento y produce un resumen más largo (32 bytes, 64 caracteres hexadecimales), pero ofrece resistencia a la preimagen y a la colisión, propiedades de seguridad que protegen contra un adversario.

Elegir la función hash incorrecta para su caso de uso es un error de seguridad común. Usar CRC32 para verificar descargas de archivos desde una fuente que no es de confianza no es efectivo; un atacante puede modificar fácilmente el archivo y volver a calcular el CRC32. Usar SHA-256 como función hash rápida en una tabla hash de alta frecuencia es un desperdicio; CRC32 o un hash rápido no criptográfico es suficiente y más económico.

Sumas de verificación para errores accidentales: diseño de CRC para detectar cambios de bits en la transmisión

Las sumas de verificación están diseñadas para la detección de errores durante la transmisión o el almacenamiento, donde se supone que los errores son aleatorios y accidentales. CRC (Cyclic Redundancy Check) se diseñó originalmente para detectar cambios de bits en la comunicación. Un CRC32 produce un resumen de 32 bits. Si una trama se corrompe por cambios aleatorios de bits durante la transmisión, es casi seguro que el CRC32 cambiará, alertando al receptor para que solicite la retransmisión. CRC puede detectar hasta una cierta cantidad de errores de bits según el polinomio; para los casos de uso más comunes, se detecta de manera confiable un cambio de un solo bit o una ráfaga de algunos cambios de bits.

CRC es determinista pero no criptográfico. Dado un archivo y su CRC32, un atacante puede modificar el archivo y volver a calcular el CRC32 para que coincida con el valor esperado. Para un adversario con conocimiento del polinomio CRC, fabricar una colisión es sencillo. La CRC nunca tuvo la intención de resistir la modificación intencional; es puramente para la detección de errores accidentales. Los sistemas históricos como archivos ZIP y archivos JPEG utilizan CRC para este propósito. Los protocolos modernos utilizan CRC para una rápida detección de errores dentro de canales cifrados o autenticados, no como una verificación de integridad independiente.

Hashes no criptográficos para distribución: FNV, MurmurHash y xxHash en tablas hash y particiones

Los hashes no criptográficos como FNV-1a, MurmurHash y xxHash están diseñados para brindar velocidad y uniformidad en tablas hash y partición de datos. Tienen una latencia muy baja y se utilizan en situaciones en las que es necesario particionar datos entre servidores o depósitos sin preocuparse por las propiedades de seguridad. Si está creando un caché y necesita asignar una clave a un número de depósito, un hash rápido es apropiado. MurmurHash fue diseñado explícitamente para el uso de tablas hash y es más rápido que SHA en la mayoría del hardware. xxHash es más nuevo y está optimizado para CPU modernas con grandes cachés y vectorización.

Estos hashes no son criptográficos porque no resisten ataques previos a la imagen (encontrar una entrada que produzca un resumen específico) o ataques de colisión (encontrar dos entradas diferentes que produzcan el mismo resumen). Un atacante puede calcular el algoritmo hash y encontrar entradas que colisionen o que produzcan una salida objetivo. Dentro de un entorno confiable (un clúster donde todos los nodos están bajo su control), eso es aceptable. Si un usuario que no es de confianza puede controlar la entrada, un hash no criptográfico es vulnerable a ataques de colisión que degradan el rendimiento (el peor caso de la tabla hash es la búsqueda lineal cuando todas las claves chocan) o producen otros efectos secundarios.

Qué añaden los hashes criptográficos: preimagen y resistencia a la colisión contra un atacante deliberado

Los hashes criptográficos como SHA-256, SHA-384 y SHA-512 proporcionan resistencia a la preimagen: dado un resumen, es computacionalmente inviable encontrar cualquier entrada que produzca ese resumen. También proporcionan resistencia a las colisiones: es computacionalmente inviable encontrar dos entradas diferentes que produzcan el mismo resumen. Estas propiedades protegen contra un adversario que quiera falsificar una descarga, crear un certificado falso o alterar un mensaje. El costo es la velocidad: SHA-256 es más lento que CRC32 y más lento que xxHash en la mayoría del hardware.

SHA-1 está criptográficamente roto (las colisiones son prácticas) y no debe usarse para nuevos propósitos de seguridad, pero aún se calcula para compatibilidad heredada. SHA-256, SHA-384 y SHA-512 siguen siendo fuertes y son las opciones estándar para el hash criptográfico. "2" en SHA-2 indica la segunda familia de algoritmos SHA (el primero es el SHA-1 original; SHA-3 es una familia más nueva, pero rara vez se utiliza para este propósito).

Los hashes criptográficos añaden propiedades adversas; este artículo evita afirmaciones de velocidad relativa no fundamentadas

Relacionar cinco escenarios con la familia de hash correcta: Primero, tramas de red transmitidas a través de un canal confiable cifrado con AES: CRC32 es apropiado. El cifrado protege contra modificaciones y el CRC detecta daños accidentales. En segundo lugar, tablas hash o hash consistente para equilibrar la carga: un hash no criptográfico como xxHash es apropiado. La velocidad importa y se confía en el medio ambiente. En tercer lugar, se requiere verificar la integridad de la descarga desde una fuente que no sea de confianza: SHA-256. Un atacante podría modificar el archivo y la suma de comprobación, pero no el hash criptográfico sin romper SHA-256.

Cuarto, firmas y certificados digitales: SHA-256 es obligatorio y se combina con un algoritmo asimétrico como RSA o ECDSA. La firma demuestra que el hash no fue modificado después de la firma. Quinto, deduplicar archivos cargados por usuarios: SHA-256 es necesario porque los usuarios podrían cargar deliberadamente archivos diseñados para colisionar con archivos existentes en un hash no criptográfico. Si la deduplicación se basa en xxHash, un atacante puede cargar un archivo con el mismo hash que otro archivo pero con contenido diferente, lo que hace que el sistema descarte la carga incorrectamente.

Ejemplo resuelto: combinar cinco escenarios (marcos de red, mapas hash, verificación de descargas, firmas, deduplicación de cargas de usuarios) con la familia correcta

El costo de elegir un hash criptográfico para cada caso de uso es una sobrecarga de rendimiento. SHA-256 es más lento que CRC y más lento que xxHash. En un bucle activo (un fragmento de código que se ejecuta millones de veces por segundo) esa sobrecarga es notable. En una fase de preparación o en una operación por lotes, es insignificante. El marco de decisión es: ¿tiene un adversario un incentivo para provocar una colisión? En caso afirmativo, utilice SHA-256. En caso negativo, y si la velocidad es importante, utilice un hash más rápido. Si la seguridad es más importante que la velocidad, utilice SHA-256 independientemente.

Un error común es usar MD5, un hash criptográfico antiguo que ahora no funciona. MD5 se diseñó en 1992 y las colisiones se demostraron en 2004. Usar MD5 para cualquier propósito de seguridad no es seguro. A veces se ve en sistemas heredados y en situaciones donde se prioriza la velocidad, pero no existe ningún escenario en el que MD5 sea la opción correcta hoy en día: si necesita velocidad, use xxHash; si necesita seguridad, utilice SHA-256. Nunca utilice MD5.

El mapeo de escenarios sigue siendo cualitativo porque el rendimiento y el comportamiento de colisión necesitan evidencia específica de la implementación

El hash de contraseñas es una cuarta categoría, distinta de las sumas de verificación y los hashes criptográficos de uso general. No utilice SHA-256 para codificar contraseñas. En su lugar, utilice una función de hash de contraseña como bcrypt, scrypt o Argon2, que son deliberadamente lentas e incluyen sal. Un hash criptográfico rápido como SHA-256 hace que adivinar contraseñas sea barato: un atacante puede intentar millones de adivinanzas por segundo. Una función de hash de contraseña está diseñada para hacer que cada intento sea costoso en CPU y memoria, por lo que adivinar una contraseña segura todavía lleva más tiempo del que cualquier atacante puede esperar. El hash de contraseñas es un caso de uso especializado con sus propios requisitos.

La calculadora de hash SHA de ToolAcre no admite el hash de contraseñas y deliberadamente no ofrece MD5, ni parámetros personalizados ni hashes rápidos. Es una herramienta para calcular resúmenes SHA estándar para verificación y verificación de integridad, no para autenticación o almacenamiento de contraseñas.

Conclusión: adversario o no adversario: utilice la calculadora de hash SHA ToolAcre cuando alguien pueda alterar los datos

La elección del algoritmo hash es una decisión fundamental que afecta tanto al rendimiento como a la seguridad en todo un sistema. Un resumen es tan confiable como el algoritmo que lo produjo. Si elige CRC32 para la verificación de archivos, el resumen no proporciona protección contra modificaciones intencionales. Si elige SHA-256 para una tabla hash, está desperdiciando recursos. Conocer las propiedades y ventajas y desventajas de cada categoría le permitirá elegir correctamente.

La calculadora de hash SHA de ToolAcre proporciona SHA-1 a SHA-512, cubriendo los hashes criptográficos que son importantes para la mayoría de los casos de uso. No ofrece CRC32, xxHash o MD5 porque cada uno de ellos es la opción correcta en contextos específicos (CRC para detección de errores en un canal confiable, xxHash para rendimiento en un entorno controlado, nada para MD5), y ofrecerlos sin enfatizar cuándo usar cada uno fomentaría errores. La calculadora sirve para calcular resúmenes criptográficos estándar. Utilice la línea de comando con `crc32`, `xxh64` o herramientas equivalentes si necesita esos hashes. Para verificación de descargas, huellas digitales de certificados, confirmaciones de git y casos de uso similares en los que un adversario podría alterar los datos, busque SHA-256 a través de la calculadora de hash ToolAcre SHA.