cuando la gente dice que un archivo tiene un hash md5 comprobado, ¿qué significa eso exactamente?
Para que quede claro, el artículo de su enlace menciona firmas digitales y tiene una sección que muestra una figura con un valor MD5.
Las firmas digitales y los hashes MD5 son cosas diferentes.
MD5 es un algoritmo que genera un valor de hash criptográfico. MD5, al igual que otras funciones hash criptográficas, toma como entrada una secuencia de bits y produce una salida de tamaño fijo independientemente del tamaño de la entrada. La secuencia de bits puede ser un archivo. Para simplificar, de ahora en adelante solo usaré el archivo en lugar de la secuencia de bits.
Cuando desee verificar si tiene el mismo archivo que otra persona, puede generar un hash MD5 del archivo y comparar con un hash MD5 que ha creado la otra persona.
Advertencia : ¡El siguiente ejemplo es inseguro y es solo para ilustración!
Alicia le envía a Bob un archivo:
- Alice calcula un hash_alice hash MD5 para file_a
- Bob le pide a Alice que le envíe file_a
- Alice envía file_a a Bob
- Bob recibe file_a
- Bob calcula un hash_bob hash MD5 para file_a
Si hash_bob es el mismo que hash_alice, entonces el archivo que recibe Bob es el mismo que envió Alice. Bob ha revisado el hash MD5 para verificar que recibió el archivo correcto.
Ahora asumamos que Mallory es un atacante y quiere darle un virus a Bob. Ella tiene la capacidad de monitorear intercambios e interceptar archivos.
- Alice calcula un hash_alice hash MD5 para file_a
- Bob le pide a Alice que le envíe file_a
- Alice envía file_a a Bob
- Mallory incursiona en el archivo_a de Alice
- Mallory copia su archivo de virus file_v y le cambia el nombre a file_a
- Mallory envió su archivo de virus_a a Bob
- Bob recibe file_a
- Bob calcula un hash_bob hash MD5 para file_a
Ahora hash_bob no debería ser lo mismo que hash_alice, y Bob debería darse cuenta de que alguien ha enviado el archivo incorrecto.
Si el programa tiene varios archivos, ¿cómo hacemos para calcular el hash simple de md5 para ese programa?
Para cada archivo en el programa, usted calcula un valor de hash.
Si tengo: main.exe libabc.dll release.txt y iconabc.gif
Calculo hash_main.exe, hash_libabc.dll, hash_release.txt y hash_iconabc.gif
Cada valor de hash debe ser único.
Sección intermedia:
El problema con el primer ejemplo es que no muestra cómo Bob obtiene hash_alice para poder compararlo con hash_bob. Si hash_alice se envía de la misma manera que file_a, un atacante lo modificaría de forma similar a como lo hizo Mallory en el segundo ejemplo.
Hay dos soluciones básicas para el problema: use un canal seguro (o fuera de banda) para enviar el hash, o haga firmar un hash con un certificado de confianza (@nealmcb credit here). Fuera de banda significa usar un medio físico de transmisión diferente. Un ejemplo de fuera de banda sería imprimir el valor hash y enviarlo por correo postal. Canal seguro significa usar algo como una red privada virtual (VPN) o IPSec.
El problema con el hash firmado es que Bob necesita el certificado de Alice para verificar la firma. Si Alice le envía el certificado a Bob de la misma manera que envía el archivo, entonces el certificado podría ser interceptado al igual que el archivo (@nealmcb credit here).
Reflexiones sobre la transmisión:
Si piensa en las dos soluciones por un minuto, puede plantear una pregunta.
Si tengo un canal seguro para enviar el hash, ¿por qué no uso el mismo canal para enviar el archivo?
Las razones por las que usaría Internet normal para enviar el archivo y un canal seguro para enviar el hash:
- El canal seguro es muy lento (es decir, el acceso telefónico) y el hash es corto, por lo que se transfiere rápidamente, pero el archivo es grande y tomaría demasiado tiempo.
- El canal seguro es caro. O te cobran por el tiempo usado o por los bytes transferidos.
- El propietario del canal limita su uso del canal seguro a solo enviar o recibir hashes.