La diferencia entre las funciones de código hash y suma de comprobación es que están diseñadas para diferentes propósitos.
Se usa una suma de verificación para averiguar si algo en la entrada ha cambiado.
Se usa un código hash para averiguar si algo en la entrada ha cambiado y para tener la mayor "distancia" posible entre los valores del código hash individuales.
Además, podría haber más requisitos 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 antes.
Y si agrega algo de aleatorización inicial compartida, llega al concepto de cifrado / intercambio de claves moderno.
Acerca de la probabilidad:
Por ejemplo, supongamos que los datos de entrada en realidad siempre cambian (el 100% del tiempo). Y supongamos que tiene una función de suma de comprobación / hash "perfecta", que genera un valor de suma de comprobación / hash de 1 bit. Por lo tanto, obtendrá diferentes valores de suma de comprobación / hash, el 50% del tiempo, para datos de entrada aleatorios.
Si exactamente 1 bit en sus datos de entrada aleatorios ha cambiado, podrá detectarlo el 100% del tiempo, sin importar cuán grandes sean los datos de entrada.
Si 2 bits en sus datos de entrada aleatorios han cambiado, su probabilidad de detectar "un cambio" se divide por 2, porque ambos cambios podrían neutralizarse entre sí, y ninguna función hash / suma de verificació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 varias veces mayor que el número de bits en su valor hash / suma de verificación, su probabilidad de obtener diferentes valores hash / suma de verificación, para diferentes valores de entrada, se reduce y no es una constante .