¿Por qué es una buena práctica comparar las sumas de verificación al descargar un archivo?

16

Los sitios web que suministran archivos ISO para descargar a menudo dan las sumas de verificación md5 de esos archivos, que podemos usar para confirmar que el archivo se descargó correctamente y no se ha dañado.

¿Por qué es esto necesario? Seguramente las propiedades de corrección de errores de TCP son suficientes. Si un paquete no se recibe correctamente, se retransmitirá. ¿La naturaleza misma de una conexión TCP / IP no garantiza la integridad de los datos?

Aditya K
fuente
10
Tampoco se olvide de posibles errores en el software y el hardware que realizan la transferencia de datos, tanto en los puntos finales como en el medio.
sebix
La descarga puede haber finalizado unos pocos bytes antes. No lo notará necesariamente por el tamaño del archivo a menos que esté prestando atención, y la corrección de errores de TCP solo habría verificado la parte de los datos que realmente llegaron.
Kevin Keane
Las sumas de verificación pueden ser útiles, pero, en 20 años trabajando con computadoras, no recuerdo haberlo usado una vez.
Pedro Lobito
2
MD5 son hashes, no sumas de comprobación. Se utiliza una suma de verificación para verificar errores, específicamente errores de bit durante la transmisión. Un hash criptográfico está destinado a garantizar que los datos sean exactamente los mismos. En ese sentido, un hash sería un superconjunto de suma de comprobación, pero no son lo mismo. Aparte de eso, MD5 ha estado roto durante 10 años (ver artículo de Wikipedia, sección Seguridad ).
0xC0000022L

Respuestas:

20

Como han señalado otros, hay muchas posibilidades de corrupción de datos donde cualquier suma de verificación en la capa de transporte no puede ayudar, como la corrupción que ya ocurre antes de que la suma de verificación se calcule en el lado emisor, un MITM que intercepta y modifica la secuencia (datos también como sumas de verificación), corrupción que ocurre después de validar la suma de verificación en el extremo receptor, etc.

Si ignoramos todas estas otras posibilidades y nos centramos en los detalles de la suma de verificación TCP en sí y lo que realmente hace en términos de validación de la integridad de los datos, resulta que las propiedades de esta suma de verificación no son del todo completas en términos de detección de errores. La forma en que se eligió este algoritmo de suma de verificación refleja más bien el requisito de velocidad en combinación con el período de tiempo (finales de los 70).

Así es como se calcula la suma de verificación TCP :

Suma de comprobación: 16 bits

El campo de suma de verificación es el complemento de 16 bits de la suma de complemento de todas las palabras de 16 bits en el encabezado y el texto. Si un segmento contiene un número impar de octetos de encabezado y texto para sumar, el último octeto se rellena a la derecha con ceros para formar una palabra de 16 bits para propósitos de suma de verificación. El pad no se transmite como parte del segmento. Mientras se calcula la suma de verificación, el campo de suma de verificación se reemplaza por ceros.

Esto significa que cualquier corrupción que se equilibre al sumar los datos de esta manera no se detectará. Hay una serie de categorías de corrupción en los datos que esto permitirá, pero solo como un ejemplo trivial: cambiar el orden de las palabras de 16 bits siempre pasará desapercibido.


En la práctica, detecta muchos errores típicos pero no garantiza en absoluto la integridad. También ayuda la forma en que la capa L2 también realiza comprobaciones de integridad (por ejemplo, CRC32 de tramas Ethernet), aunque solo para la transmisión en el enlace local, y muchos casos de datos corruptos ni siquiera pasan a la pila TCP.

Validar los datos utilizando un hash fuerte, o preferiblemente una firma criptográfica, se encuentra en un nivel completamente diferente en términos de garantizar la integridad de los datos. Los dos apenas se pueden comparar.

Håkan Lindqvist
fuente
¡La mejor respuesta! Odio cómo las otras respuestas mezclan los conceptos de hashes criptográficos y sumas de verificación.
0xC0000022L
20

Probablemente haya un montón de razones por las que uno debería verificar el md5sum, pero algunas me vienen a la mente:

  • Actividad maliciosa: su ISO podría haber sido alterado en el camino desde el servidor
  • La página en sí está falsificada (es mejor tener los md5sums firmados también :))
  • Descarga rota (a pesar de la corrección de errores de TCP) (mira esto )
  • ISO quemado incorrectamente

Y solo toma unos segundos de todos modos.

Konrad Gajewski
fuente
21
También significa que es razonablemente seguro descargar un ISO de un sitio espejo aleatorio, siempre que obtenga las sumas de verificación de algún lugar confiable; por ejemplo, una publicación firmada por PGP en la lista de correo foo -nounce.
richardb
2
En realidad no tiene nada que ver con la protección contra actividades maliciosas. Si el ISO podría haber sido reemplazado por uno malicioso, también podría ser el valor de suma de comprobación MD5. Tenerlos firmados es un asunto diferente, pero no es por lo que pregunta el OP. Entonces, en lugar de que la "actividad maliciosa" sea la primera en su lista (seguro que suena bien), en realidad ni siquiera debería estar en su lista. Le estás dando a la gente una falsa sensación de seguridad, lo cual es peligroso. superuser.com/questions/849845/…
Austin "Peligro" Powers
1
@ Austin''Danger''Powers Umm, no, Konrad tiene razón. Por un lado, el espejo de descarga generalmente es diferente del sitio que muestra la suma de verificación, y segundo, hay muchos ISP en el mundo que manipulan el tráfico: las sumas de verificación de TCP estarán bien, pero está descargando un archivo diferente. Y, por supuesto, también está perdiendo otro punto: el archivo podría haberse dañado en el servidor, después de que se creó la suma de comprobación. Ocurre todo el tiempo, especialmente para los servidores más "aficionados" (sin configuraciones RAID adecuadas, etc.).
Luaan
2
Una respuesta a partir de 2015 debe aconsejar contra el hash MD5 . Ese algoritmo se ha roto durante los últimos diez años (¡sin exageración!). Además, está mezclando suma de comprobación y hash. Son dos cosas diferentes con diferentes intenciones detrás de ellos.
0xC0000022L
1
Es mejor evitar agregar para agregar al comentario de @ 0xC0000022L SHA1 si la seguridad ya es una preocupación importante, aunque tanto ella como MD5 son perfectamente adecuadas para defenderse contra la corrupción accidental.
David Spillett
6

TCP / IP garantiza la integridad de los datos *. Pero no garantiza que se haya descargado el 100% de un archivo. Puede haber muchas razones por las cuales esto podría suceder. Por ejemplo: es posible que pueda montar un ISO que pierde uno o dos bytes en algún lugar en el medio. No tendrá ningún problema hasta que necesite uno o dos archivos particulares que estén corruptos. La comparación de sumas de verificación garantiza que realmente descargó todo el archivo.

* Ver comentario

Daniel
fuente
8
Creo que "garantiza la integridad de los datos" realmente está vendiendo demasiado lo que realmente hace. Intenta verificar la integridad de los datos con un enfoque muy ágil, que no es particularmente sólido.
Håkan Lindqvist
6

La suma de comprobación TCP es de solo 16 bits. Esto significa que, en ausencia de otras sumas de verificación, uno de cada 65536 paquetes dañados se aceptará como no dañado. Si, por ejemplo, estuviera descargando una imagen de DVD de 8GB a través de un enlace ruidoso con una tasa de corrupción del 1%, esperaría 81 paquetes corruptos indetectable.

MD5 es una suma de verificación mucho más grande, de 128 bits. Las probabilidades de que esos 81 paquetes produzcan algo con la misma suma de verificación que el original son aproximadamente 1 en 1,000,000,000,000,000,000,000,000,000,000,000.

marca
fuente
6

Hay varias razones para verificar la suma de verificación de un archivo descargado a través de HTTP:

  • Asegurarse de que recibió el archivo completo
    • Algunos clientes, como Firefox , pueden tratar una conexión interrumpida como una descarga exitosa, dejándolo con un archivo truncado pero alegando que se descargó OK
  • Asegurarse de que recibió el archivo correcto
    • Por ejemplo, un servidor defectuoso, comprometido o malintencionado podría enviarle algo más
    • alguien podría alterar la transferencia (ataque de hombre en el medio), incluso HTTPS no está a salvo de esto si su sistema se ve comprometido, por ejemplo, por Superfish, o si el método de cifrado que se utiliza es débil
    • Es posible que también le presenten una página de descarga falsa, por lo que ni siquiera está conectado al servidor real (pero en este caso, las sumas de verificación no ayudarán mucho si las obtiene del mismo servidor falso)
    • Varios ISP han sido atrapados inyectando Javascript en páginas en transmisión por varias razones 1 ; dependiendo de qué tan bien se implemente esto, también podría alterar algunas descargas de archivos
    • Un espejo podría estar alojando una versión desactualizada del archivo, o el administrador podría haber subido el archivo incorrecto
  • Asegurarse de que el archivo no esté dañado por algo que TCP no puede detectar
    • por ejemplo, el archivo podría estar dañado en el servidor, por lo que TCP solo se asegurará de que el archivo ya dañado no se estropeó aún más en la transmisión
    • o podría corromperse después de llegar a su lado, por memoria / disco defectuoso, controlador de sistema de archivos defectuoso, etc.
    • Las sumas de verificación TCP son solo de 16 bits, por lo que las posibilidades no son astronómicas (1 en 65536) de que no se detecte un paquete dañado
  • Con un ISO, asegurando que el disco se grabe correctamente

1 fuentes en comentario porque lol rep

Rena
fuente
2
Fuentes: * security.stackexchange.com/questions/70970/… * adblockplus.org/forum/viewtopic.php?t=8156 "ISP agresivo inyectado / scripts incrustados / anuncios bloqueables" * iamsrijit.wordpress.com/2012/09/ 14 /… * se puede encontrar más fácilmente en Google, pero aquí no se trata realmente del tema
Rena
2

Daniel, Dependiendo de la herramienta que esté utilizando para la descarga ISO por decir. Si es Say Firefox .. Puede mostrar la descarga del archivo. Sin embargo, es posible que no tenga el ISO completo intacto. Si lo quema, intente usarlo, puede faltar información. Esto sucede de vez en cuando en diferentes servidores web que alojan archivos.

Es una buena práctica comparar al menos el tamaño del archivo (bytes o bits totales) para asegurarse de que coincidan. Windows mostrará el conteo de bytes de archivo diferente y luego dirá Linux. La verificación de suma MD5 mostrará los mismos valores sin importar qué sistema operativo se utilice. Espero que esto ayude un poco. Salud...

David Thomson
fuente
2
¿Windows muestra el recuento de bytes de forma diferente a como lo muestra Linux? De Verdad? Pensé que la abdominación salió con el sistema de archivos de tamaño de archivo como conteo de bloques de CP / M. (Ahora, si está buscando algo diferente al recuento de bytes , por ejemplo, la visualización del tamaño del archivo en el Explorador, puede ser muy diferente. Pero ningún administrador del sistema debe verificar la integridad del archivo descargado de esa manera, por lo que no problema.) Los bytes son bytes. Sin embargo, mirarlo en términos de bits no tiene sentido; ¿Cuándo fue la última vez que descargó y almacenó medio byte?
un CVn
2

Noto muchas respuestas interesantes, pero hay una última cosa a considerar: el problema de dos generales

El problema de los dos generales y el problema de los generales bizantinos consideran específicamente las implicaciones de transferir información de manera confiable a través de canales poco confiables.

Las sumas de verificación son solo otra capa de "mayor confiabilidad", y una con muy pocas posibilidades de falla. Esta es la razón por la que es tan popular.

Fernando Cordeiro
fuente