Encontré los términos suma de verificación, MD5, SHA, etc. ¿Qué son la suma de verificación, MD5, SHA y la firma de código? ¿Cómo están relacionados y cómo funcionan?

Las funciones de hash (como MD5 o SHA) son ejemplos de compresión con pérdida: toman algo de longitud arbitraria y forman una cadena de longitud fija. Además, (¡puede!) Tienen el requisito de que pequeños cambios en la entrada causen grandes cambios en la salida; por ejemplo, en el caso ideal, voltear un bit en la entrada voltea la mitad de los bits en la salida (efecto Avalanche). Esto significa que es poco probable que los hashes de entradas similares colisionen (una colisión es cuando diferentes entradas se combinan con la misma salida, lo que, por supuesto, es inevitable, ya que está asignando una gran cantidad de valores a una cantidad menor de valores – Pigeonhole principio).

Entonces, ¿cómo se relaciona esto con la firma de código? La idea es que el autor del programa codifique el ejecutable y luego firme criptográficamente el hash, lo que significa que usa su clave privada para cifrar el hash, por lo que puede intentar descifrarlo con su clave pública (si funciona, prueba que quien lo haya dado) usted posee la clave privada correspondiente). Si alguien cambia el ejecutable ahora, aunque sea un poco, el hash cambiará, y dado que no posee la clave privada del autor original, no puede crear una nueva firma para el nuevo hash. Y si su sistema operativo ve una diferencia entre el hash calculado y el mencionado en la firma, no ejecuta el código (por supuesto, también habrá una falta de coincidencia si la cosa está firmada con la clave privada incorrecta, es decir, no el que pertenece a la clave pública del autor que espera).

Por lo tanto, la única esperanza de un atacante es encontrar una colisión: hacer un segundo cambio con el único propósito de hacer que la función hash genere el mismo valor hash que originalmente estaba allí (y firmado). Esto es intencionalmente muy intensivo en recursos para buenas funciones hash, y no se puede hacer “al revés”, es decir, a partir de una salida y derivando qué entrada debe dar para eso; solo debes probar y probar y probar hasta que tengas suerte en la salida correcta (por cierto, así es como funciona la minería de Bitcoin).

PD: Por supuesto, esa no es su “única esperanza”. Podrían tratar de obtener acceso a la clave privada del autor del software, ya sea electrónicamente o mediante una intrusión física / violencia; xkcd 538 todavía se aplica.

PPS Técnicamente, también podría garantizar la integridad del ejecutable encriptando todo el ejecutable , sin necesidad de hashes, pero esto requiere mucho más recursos; La criptografía de clave pública es muy pesada en la CPU. Además, con una buena función hash, la opción anterior es casi igual de segura.

La suma de verificación es un recuento del número de bits en una unidad de transmisión que se incluye con la unidad para que el receptor pueda verificar si llegó el mismo número de bits.
Digamos que envía “1010101010” pero el receptor recibió “10”, ¿cómo sabe que recibió algo incorrecto? Es por eso que necesitas suma de verificación.
Antes de comprender MD5 y SHA, lea a continuación:
¿Qué es el hash?
hash es la transformación de algo en otra cosa. ¡Bueno! digamos que tengo una cadena "abcd" Quiero generar un hash para ella. Así que necesito una función hash, es decir, la función que convertirá “abcd” en otra cosa.
Considera que mi función es:
desplazar cada personaje a la derecha por 1.
Entonces mi nueva cadena es “dabc”. Eso es todo.
Apliqué una función hash a mi entrada y generé una salida. Eso es hashing. (la utilidad de mi función hash es otra pregunta)
¿Qué es la colisión?
Si dos entradas generan la misma salida, es colisión.

Ahora volvamos a su pregunta original:
MD5 y SHA1 / 2 son ambas funciones hash criptográficas. El propósito de ellos es generar un número constante de bits a partir de la entrada de longitud variable.

Para la salida MD5, la longitud de bits es: 128 (colisión encontrada, muy mala)
Para la longitud de bits de salida SHA1 es: 160
Para la longitud de bits de salida SHA2 es: 224, 256, 384 o 512 (dependiendo de la variante específica que elija)

¿Por qué los necesitas?

  1. Digamos que enviaste algo por internet. El receptor necesita saber que recibió lo correcto o no. Entonces, envía el mensaje y el hash (resumen) correspondiente para que el receptor pueda verificarlo (recuerde que un buen hash no debe tener colisión)
  2. Almacenamiento de la contraseña en la base de datos: cuando alguien ingresó una contraseña correspondiente a un nombre de usuario, usted cambia la contraseña y comprueba la contraseña que almacenó cuando el usuario se registró. Si el hash coincide, el inicio de sesión se realizó correctamente. Lo necesita porque incluso si alguien roba su base de datos (tabla de contraseñas) no tendrá la contraseña de sus usuarios. Debido a que no puede regenerar el valor de entrada del valor hash (nuevamente solo si utilizó un buen algoritmo hash)