Sé que utilizamos funciones hash para verificar la integridad de los archivos, etc. ... pero mi pregunta es ¿cómo podemos verificar la integridad de los archivos que se descargan desde algún servidor?
Integridad se define solo en relación con una fuente autorizada que indica cuál es la secuencia "correcta" de bytes. Las funciones de hash no crean integridad, lo transportan . Básicamente, si tienes:
luego puedes volver a calcular la función de hash sobre el archivo y ver si obtienes el mismo valor de hash.
Todavía tienes que empezar en alguna parte. Algunos distribuidores de software proporcionan, junto con el software, un archivo de "suma de comprobación" (o "md5sum" o "sha1sum"), que contiene los valores hash. Suponiendo que tiene el archivo de suma de comprobación correcto , esto le permite verificar si descargó el archivo correcto, hasta el último bit; y esto funciona independientemente de cómo haya descargado el archivo posiblemente grande (incluso si se trata de alguna red sombreada de igual a igual o lo que sea; no puede hacer trampa con las funciones hash).
Ahora esto no resuelve el problema de integridad; simplemente lo reduce al problema de asegurarse de que tiene el valor hash correcto. Los valores de hash son pequeños (32 bytes para SHA-256), por lo que esto abre muchas posibilidades. En el contexto de la descarga de archivos de sistemas P2P, puede obtener el valor hash de un sitio web HTTPS (HTTPS usa SSL que garantiza la autenticación del servidor; tiene la garantía de que habla con el servidor que desea, y la integridad del transporte). Lo que recibes se garantiza que sea lo que el servidor envió). En el contexto del intercambio de claves públicas PGP con personas, los valores de hash (a menudo denominados "huellas digitales" o "huellas digitales") son lo suficientemente cortos como para ser transferidos manualmente (impresos en una tarjeta de visita, escritos en el teléfono ...).
firmas digitales amplían el concepto, pero también comienzan con funciones hash. Todos los algoritmos de firma digital no firman el mensaje en sí, sino el hash del mensaje (que es igual de bueno siempre que la función de hash sea segura, es decir, resistente a colisiones y preimágenes).
Para muchas piezas de software, los proveedores de los archivos también proporcionan el hash del archivo que le permite verificar su integridad.
Por ejemplo, aquí hay un ejemplo de las sumas de verificación del Proyecto Fedora proporciona para el Fedora 19 x86_64 ISO.
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
# The image checksum(s) are generated with sha256sum.
6e7e263e607cfcadc90ea2ef5668aa3945d9eca596485a7a1f8a9f2478cc7084 *Fedora-19-x86_64-DVD.iso
ef9eb28b6343e57de292f2b2147b8e74a2a04050655e0dc959febd69b0d5d030 *Fedora-19-x86_64-netinst.iso
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
iQIcBAEBCAAGBQJRzjLNAAoJEAdHfmX7SxjmzQEP/jzXXe4rxRzA9NLrgWtRUp1b
nK+gpMgGXC5+zSWnKTQBUWMx0rx7uys/UQH934hz1rdMOqLkCe1XlVWp+0ya55nC
13OhOeeJhbdECzFvcSAkDh9Aj2Z9AnDeHbDvJXpEjvGiSLLsYWsjifIkMYDoNTRV
QlLWwOTlCCUZtEGEI1x0TWYlr0HUtkL5QAzQ4CSO7xGYE6YH/xwHje/8n7B25NHU
r2sSdlz3KORQyStqYK78cWlR70PT+3o00SO7ReHNVIZwCL8PjsOEm41Q4tjw3BF7
KLp+fcQTOgzLRY1VVk0n0POeJHbVB2TULjIW4F/vCiA3N6Uq595ebNxgSOBg8tRs
t7fkbktVB6+WeBCcGvJI7MWzYq0ukwRBAH+ZBLhpnEIsHOoFF6LRoiE0UncdhGb+
OmZqn8wZKzMf401E/vj7dEy+X3lAST+5mBm0EJQaFz2cbQCzuxfhnSc27w9Zq3ii
3Tgo1ubInXD/fu1WFH/Tu2aOmbNQwDr4YQDYOeuzokA3d/2bETIhEmYxmfGptfMw
fGG/u4QQMdXyPPKvdIkOTAp5d0tWnTucpkbHs1goygsCMz6XWvIZJt4bAbSRwXoa
qYXh8IpJAM0CrU0353RMDCNpDlpSXGeEy5riaFpFCe7SKZBzp2dJ1LsMJl1NJXxn
QavVCbllLFFjaTuYKrDZ
=oBpz
-----END PGP SIGNATURE-----
Las instrucciones también se proporcionan si no se sabe cómo utilizar las sumas de comprobación proporcionadas.
En general, si los archivos se proporcionan a través del mismo medio que las sumas de comprobación, hay un beneficio real muy pequeño, ya que un atacante que se comprometa con la descarga también tendrá la capacidad de reemplazar la suma de comprobación proporcionada. Sin embargo, esto es muy útil en el caso de que los archivos se descarguen a través de una conexión insegura como torrents o un CDN. En tal situación, el proveedor de software puede proporcionar la pequeña suma de comprobación en su servidor mientras sirve los archivos a través de un medio de mayor ancho de banda, como torrents o CDN.