hashing español cryptographic check language-agnostic hash computer-science checksum

language-agnostic - español - seed hash



Código Hash y suma de comprobación: ¿cuál es la diferencia? (10)

Según tengo entendido, un código hash y una suma de comprobación son cosas similares: un valor numérico, calculado para un bloque de datos, que es relativamente único.

es decir, la probabilidad de que dos bloques de datos proporcionen el mismo valor de suma de comprobación / suma de comprobación numérica es lo suficientemente baja como para poder ignorarla a los fines de la aplicación.

Entonces, ¿tenemos dos palabras para la misma cosa, o hay diferencias importantes entre los códigos hash y las sumas de comprobación?


Aunque los algoritmos hash y checksum son similares en cuanto a que ambos crean un valor basado en el contenido de un archivo, el hash no es lo mismo que crear una suma de comprobación. Una suma de comprobación tiene la intención de verificar (verificar) la integridad de los datos e identificar los errores de transmisión de datos, mientras que un hash está diseñado para crear una huella digital única de los datos.

Fuente: CompTIA ® Security + Guía de conceptos básicos de seguridad de red - Quinta edición - Mark Ciampa -Página 191


De hecho, hay algunas diferencias:

  • Los checksums solo tienen que ser diferentes cuando la entrada es diferente (tan a menudo como sea posible), pero es casi tan importante que sean rápidos de calcular.
  • Los códigos hash (para usar en hashtables) tienen los mismos requisitos y, además, deben estar distribuidos uniformemente en el espacio del código, especialmente para las entradas que son similares.
  • Los hashes criptográficos tienen el requisito mucho más estricto de que, dado un hash, no se puede construir una entrada que produzca este hash. Los tiempos de cálculo son los segundos, y dependiendo de la aplicación, incluso puede ser conveniente que el hash sea muy lento de computar (para combatir ataques de fuerza bruta).

Diría que una checksum es necesariamente un hashcode . Sin embargo, no todos los códigos hash son buenas sumas de comprobación.

Una suma de verificación tiene un propósito especial: verifica o verifica la integridad de los datos (algunos pueden ir más allá al permitir error-correction ). Las sumas de comprobación "buenas" son fáciles de calcular y pueden detectar muchos tipos de daños en los datos (por ejemplo, uno, dos, tres bits erróneos).

Un hashcode simplemente describe una función matemática que asigna datos a algún valor. Cuando se utiliza como un medio de indexación en las estructuras de datos (por ejemplo, una tabla hash), es deseable una baja probabilidad de colisión.


Hay un propósito diferente detrás de cada uno de ellos:

  • Código hash - diseñado para ser aleatorio en su dominio (para minimizar las colisiones en tablas hash y tal). Los códigos hash criptográficos también están diseñados para ser inviables computacionalmente para revertir.
  • Check sum: diseñado para detectar los errores más comunes en los datos y, a menudo, es más rápido de computar (para la suma de comprobación efectiva de flujos rápidos de datos).

En la práctica, las mismas funciones a menudo son buenas para ambos propósitos. En particular, un código hash criptográficamente fuerte es una buena suma de comprobación (es casi imposible que un error aleatorio rompa una función hash fuerte), si puede pagar el costo computacional.


Hoy en día son intercambiables, pero en los días de antaño una suma de comprobación era una técnica muy sencilla en la que se agregaban todos los datos (generalmente en bytes) y se marcaba un byte al final con ese valor en ... entonces ojalá saber si alguno de los datos originales había sido dañado. Similar a un bit de verificación, pero con bytes.


La diferencia entre el código hash y las funciones de suma de comprobación es que están diseñadas para diferentes propósitos.

  • Se usa una suma de comprobación para averiguar si algo en la entrada ha cambiado.

  • Un código hash se usa para averiguar si algo en la entrada ha cambiado y para tener tanta "distancia" entre los valores de código hash individuales como sea posible.

    Además, puede haber requisitos adicionales para una función hash, en oposición a esta regla, como la capacidad de formar árboles / clústeres / cubos de valores de código hash con anticipación.

    Y si agrega alguna aleatorización inicial compartida, obtendrá el concepto de cifrado / intercambio de claves moderno.

Acerca de Probabilidad:

Por ejemplo, supongamos que los datos de entrada cambian siempre (el 100% del tiempo). Y supongamos que tiene una función de suma de comprobación / suma de comprobación "perfecta", que genera un valor de suma de comprobación / suma de comprobación de 1 bit. Por lo tanto, obtendrá diferentes valores de hash / checksum, 50% del tiempo, para datos de entrada aleatorios.

  • Si ha cambiado exactamente 1 bit en sus datos de entrada aleatoria, podrá detectarlo el 100% del tiempo, sin importar qué tan grande sea la información de entrada.

  • Si han cambiado 2 bits en sus datos de entrada aleatoria, su probabilidad de detectar "un cambio" se divide por 2, porque ambos podrían neutralizarse mutuamente, y ninguna función de suma / suma de comprobación detectaría que 2 bits son realmente diferentes en los datos de entrada .

    ...

Esto significa que si el número de bits en sus datos de entrada es múltiplo veces mayor que el número de bits en su valor de suma / suma de comprobación, su probabilidad de obtener diferentes valores de suma de comprobación / suma de comprobación, para valores de entrada diferentes, se reduce y no es constante .


Los códigos Hash y las sumas de comprobación se usan para crear un valor numérico corto a partir de un elemento de datos. La diferencia es que un valor de suma de comprobación debe cambiar, incluso si se realiza una pequeña modificación en el elemento de datos. Para un valor hash, el requisito es simplemente que los elementos de datos del mundo real deben tener distintos valores hash.

Un claro ejemplo son las cadenas. Una suma de comprobación para una cadena debe incluir todos y cada uno de los bits, y el orden es importante. Por otro lado, un código hash a menudo se puede implementar como una suma de comprobación de un prefijo de longitud limitada. Eso significaría que "aaaaaaaaaaba" sería lo mismo que "aaaaaaaaaaab", pero los algoritmos de hash pueden lidiar con tales colisiones.


Tiendo a usar la palabra suma de comprobación cuando me refiero al código (numérico u otro) creado para un archivo o pieza de datos que puede usarse para verificar que el archivo o los datos no se hayan corrompido. El uso más común que encuentro es verificar que los archivos enviados a través de la red no hayan sido alterados (deliberadamente o de otra forma).


Una suma de comprobación protege contra cambios accidentales.

Un hash criptográfico protege contra un atacante muy motivado.

Cuando envía bits en el cable, accidentalmente puede suceder que algunos bits se vuelquen, se eliminen o se inserten. Para permitir que el receptor detecte (o a veces corrija) accidentes como este, el emisor usa una suma de comprobación.

Pero si supone que alguien está modificando de forma activa e inteligente el mensaje en el cable y desea protegerse contra este tipo de atacante, utilice un hash criptográfico (estoy ignorando la firma criptográfica del hash, o usando un canal secundario o similar, ya que la pregunta no parece eludir esto).


checksum dice bien:

Las funciones de suma de comprobación están relacionadas con las funciones hash, huellas dactilares, funciones de asignación al azar y funciones hash criptográficas. Sin embargo, cada uno de esos conceptos tiene diferentes aplicaciones y, por lo tanto, diferentes objetivos de diseño. Los dígitos de verificación y los bits de paridad son casos especiales de suma de comprobación, apropiados para pequeños bloques de datos (como números de seguridad social, números de cuenta bancaria, palabras de computadora, bytes individuales, etc.). Algunos códigos de corrección de errores se basan en sumas de comprobación especiales que no solo detectan errores comunes sino que también permiten recuperar los datos originales en ciertos casos.