Nota: Esta publicación ha sido reeditada a partir de nuestro artículo original publicado el 30 de Julio del 2013.
Sé que muchos usuarios podrían ya conocer de qué se tratan todos estos términos y de las grandes ventajas que resulta el usarlos; otros sin embargo, posiblemente sólo leyeron brevemente por algún sitio o alguien se los comentó rápidamente pero no tienen una noción sólida de lo útil que son estos conceptos. Por ello, en esta ocasión vamos a dar un repaso a lo que significa CheckSum, Hash, MD5, SHA-1, CRC-32, y su utilidad en algo que hacemos a diario: Descargar archivos, de manera que tengamos un punto más a favor de nuestra seguridad al comprobar la integridad de nuestras descargas.
Mi punto en este artículo para Conocimiento Adictivo no es mostrar el algoritmo usado o cómo generar la función hash porque de eso ya hay mucha información, lo único que deseo mostrar es cómo darle uso a esta herramienta en una de las actividades propias del más común de los usuarios: el descargar archivos. En otras palabras, deseo mostrarles cómo usar la herramienta, no cómo construirla. Aclarado esto, veamos algunos conceptos usuales.
El CheckSum
Cuando hablamos de CheckSum o Suma de Verificación nos estamos refiriendo a una función hash computable mediante un algoritmo cuyo propósito principal es detectar cambios en una secuencia de datos (archivos) para proteger la integridad de estos, comprobando así que no haya diferencias entre los valores obtenidos al hacer una comprobación inicial y otra final luego de haber compartido dichos datos; es decir, es usado para verificar que un archivo compartido a un usuario es idéntico bit a bit al publicado en su fuente original.
Imagina que queremos almacenar o compartir información con alguien, pero a la vez queremos protegernos frente a errores inesperados en el almacenamiento o transmisión de esta información, en aquellas situaciones resulta útil acompañar a los datos de sus respectivos valores hash obtenidos a partir de ellos aplicando funciones hash con ciertas propiedades de forma que puedan ser usados para verificar (hasta cierto punto) el propio dato compartido. Precisamente al valor hash se le llama Suma de verificación o CheckSum.
El CheckSum es muy usado por empresas desarrolladoras de software ya que permite comprobar la integridad de los contenidos que ofrecen. Por ejemplo, cuando se distribuye un contenido por la red (una imagen ISO, IMG, un archivo RAR, un ejecutable EXE, etc), y se quiere estar seguro de que lo que le llega al usuario/cliente es lo que se está emitiendo, se proporciona un valor hash del contenido de forma que ese valor tiene que obtenerse al aplicar la función hash sobre el contenido distribuido asegurando así la integridad. En este caso el CheckSum recibe el nombre de CheckSum Criptográfico debido a que es un checksum que requiere el uso de funciones hash criptográficas para que sea difícil generar otros ficheros falsos que tengan el mismo valor hash.
Otro ejemplo de uso de estos conceptos para verificar la integridad es calcular y guardar el valor hash de archivos para poder verificar posteriormente que nadie los ha modificado, y cuando hablamos de haberlo modificado me refiero a insertar código malicioso como malware, adware, troyanos o virus. Esto último es lo nos puede resultar más interesante ya que está involucrado directamente con lo que deseamos evitar, y es que nadie quiere descargar un fichero o archivo y que al final resulte no ser el archivo prometido sino un tipo de amenaza a nuestros equipos.
El Message-Digest Algorithm 5 o MD5
Message-Digest 5 (MD5) es un algoritmo criptográfico de 128 bits ampliamente difundido, el cual puede ser usado, entre otras cosas, para realizar la comprobación de la integridad de archivos como son binarios EXE, imágenes ISO o cualquier otro tipo de fichero descargados desde alguna fuente de Internet de manera que nos proporcione la seguridad de que el archivo descargado no se ha alterado o modificado por terceros.
Comparando una Suma MD5 publicada con la Suma de Comprobación del archivo descargado, un usuario puede tener la confianza suficiente de que el archivo es igual al publicado por los desarrolladores. Esto protege al usuario contra malware y virus en general ya que algún otro usuario malicioso podría incluir ese tipo de software modificando el archivo original.
Otro de los puntos importantes es que la comprobación de un archivo descargado contra su suma MD5 no detecta solamente los archivos alterados de una manera maliciosa, sino que también reconoce una descarga corrupta o incompleta como la descarga de una imagen ISO de un sistema operativo, así podremos comprobar que no tengan errores entre sus archivos antes de grabarlos a un DVD o pasarlas a un USB.
Un ejemplo de cómo luciría la suma MD5 de un fichero sería:
Muchos desarrolladores de distribuciones linux comparten sus imágenes ISO de instalación acompañado de su respectivo MD5 para que el usuario sea capaz de comprobar la integridad del archivo.
Message-Digest 5 (MD5) es un algoritmo criptográfico de 128 bits ampliamente difundido, el cual puede ser usado, entre otras cosas, para realizar la comprobación de la integridad de archivos como son binarios EXE, imágenes ISO o cualquier otro tipo de fichero descargados desde alguna fuente de Internet de manera que nos proporcione la seguridad de que el archivo descargado no se ha alterado o modificado por terceros.
Comparando una Suma MD5 publicada con la Suma de Comprobación del archivo descargado, un usuario puede tener la confianza suficiente de que el archivo es igual al publicado por los desarrolladores. Esto protege al usuario contra malware y virus en general ya que algún otro usuario malicioso podría incluir ese tipo de software modificando el archivo original.
Otro de los puntos importantes es que la comprobación de un archivo descargado contra su suma MD5 no detecta solamente los archivos alterados de una manera maliciosa, sino que también reconoce una descarga corrupta o incompleta como la descarga de una imagen ISO de un sistema operativo, así podremos comprobar que no tengan errores entre sus archivos antes de grabarlos a un DVD o pasarlas a un USB.
Un ejemplo de cómo luciría la suma MD5 de un fichero sería:
Nombre: test.png
MD5: 319b37dc17aa6e512c489883611f723d
MD5: 319b37dc17aa6e512c489883611f723d
Muchos desarrolladores de distribuciones linux comparten sus imágenes ISO de instalación acompañado de su respectivo MD5 para que el usuario sea capaz de comprobar la integridad del archivo.
El Secure Hash Algorithm o SHA
El SHA o Secure Hash Algorithm es un sistema de funciones hash criptográficas que producen una salida resumen de 160 bits y que es ampliamente usado como medida de seguridad, pues al igual que el MD5, nos permite comprobar la originalidad e integridad de los archivos descargados. Pero además es uno de los algoritmos más usados para guardar de manera encriptada datos muy sensibles como contraseñas, así como en el proceso de firmar digitalmente diferentes documentos (mayor información).
Como dato histórico, el primer miembro de la familia fue oficialmente llamado SHA, publicado en 1993. Sin embargo, hoy en día no oficialmente se le llama SHA-0 para evitar confusiones con sus sucesores. Dos años más tarde el primer sucesor del SHA fue publicado con el nombre de SHA-1, que actualmente es uno de los más usados al distribuir software. También existen cuatro variantes más que se han publicado desde entonces con algunas otras diferencias: SHA-224, SHA-256, SHA-384, y SHA-512 (llamándose SHA-2 a todos ellos).
Un ejemplo de cómo luciría el hash SHA-1 de un fichero sería:
Microsoft es una de las empresas que más usan el hash SHA-1 para facilitar que los usuarios puedan comprobar la originalidad e integridad de sus productos distribuidos en imágenes ISO o ejecutables EXE. Por ejemplo la siguiente imagen que corresponde al reciente Windows 10 Build 1511:
Otro ejemplo es The Fedora Project, desarrolladores de una distribución linux del mismo nombre, quienes a su vez usan el hash SHA-256 para realizar las comprobaciones de sus imágenes ISO. En nuestro ejemplo se muestra el SHA-256 de la versión 19 de Fedora de 64bit:
El SHA o Secure Hash Algorithm es un sistema de funciones hash criptográficas que producen una salida resumen de 160 bits y que es ampliamente usado como medida de seguridad, pues al igual que el MD5, nos permite comprobar la originalidad e integridad de los archivos descargados. Pero además es uno de los algoritmos más usados para guardar de manera encriptada datos muy sensibles como contraseñas, así como en el proceso de firmar digitalmente diferentes documentos (mayor información).
Como dato histórico, el primer miembro de la familia fue oficialmente llamado SHA, publicado en 1993. Sin embargo, hoy en día no oficialmente se le llama SHA-0 para evitar confusiones con sus sucesores. Dos años más tarde el primer sucesor del SHA fue publicado con el nombre de SHA-1, que actualmente es uno de los más usados al distribuir software. También existen cuatro variantes más que se han publicado desde entonces con algunas otras diferencias: SHA-224, SHA-256, SHA-384, y SHA-512 (llamándose SHA-2 a todos ellos).
Un ejemplo de cómo luciría el hash SHA-1 de un fichero sería:
Nombre: test.png
SHA-1: 7586131f354ad0e18938657b033c6d52ebb148eb
SHA-1: 7586131f354ad0e18938657b033c6d52ebb148eb
Microsoft es una de las empresas que más usan el hash SHA-1 para facilitar que los usuarios puedan comprobar la originalidad e integridad de sus productos distribuidos en imágenes ISO o ejecutables EXE. Por ejemplo la siguiente imagen que corresponde al reciente Windows 10 Build 1511:
Otro ejemplo es The Fedora Project, desarrolladores de una distribución linux del mismo nombre, quienes a su vez usan el hash SHA-256 para realizar las comprobaciones de sus imágenes ISO. En nuestro ejemplo se muestra el SHA-256 de la versión 19 de Fedora de 64bit:
-----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
Hash: SHA256
# The image checksum(s) are generated with sha256sum.
6e7e263e607cfcadc90ea2ef5668aa3945d9eca596485a7a1f8a9f2478cc7084 *Fedora-19-x86_64-DVD.iso
ef9eb28b6343e57de292f2b2147b8e74a2a04050655e0dc959febd69b0d5d030 *Fedora-19-x86_64-netinst.iso
El Cyclic Redundancy Check 32 o CRC32
Se trata de un código de detección de errores usado frecuentemente en redes digitales y en dispositivos de almacenamiento cuyo propósito principal es comprobar o detectar cambios accidentales en los datos o alteración de los mismos.
Como se ha mencionado, es útil para detección de errores, pero en condiciones de seguridad no podemos confiar en que el CRC puede verificar plenamente que los datos son los correctos en caso de que se hayan producido cambios deliberados y no aleatorios.
A menudo se piensa que si cuando llega un mensaje, éste y su CRC coinciden, quiere decir que el mensaje no ha podido ser alterado durante su transmisión. Esta suposición es falsa porque CRC es un mal método de cifrado de datos. De hecho, el CRC no se trata realmente de un método de cifrado, lo que realmente hace es utilizarse para el control de integridad de datos, pero en algunos casos se supone que se utilizarán para el cifrado.
Notemos que el CRC es un valor numérico que se calcula usando los datos originales de forma que este valor está fuertemente ligado precisamente a estos datos, por tanto si los datos cambian entonces el valor del CRC también cambia.
Un ejemplo de cómo luciría el CRC32 de un fichero sería:
WinRAR, el popular programa compresor y descompresor de datos, usa el CRC32 para comprobar archivos. Cuando WinRAR descomprime un fichero vuelve a calcular su CRC y lo compara con el CRC de los datos originales almacenado en el archivo RAR. Si los valores calculados son diferentes entonces los datos también son diferentes y el fichero extraído no es idéntico al fichero original obteniéndose en esos casos un mensaje común como "Error de CRC" que significa que el archivo está dañado, o, si está protegido con contraseña, que la contraseña usada es incorrecta.
Se trata de un código de detección de errores usado frecuentemente en redes digitales y en dispositivos de almacenamiento cuyo propósito principal es comprobar o detectar cambios accidentales en los datos o alteración de los mismos.
Como se ha mencionado, es útil para detección de errores, pero en condiciones de seguridad no podemos confiar en que el CRC puede verificar plenamente que los datos son los correctos en caso de que se hayan producido cambios deliberados y no aleatorios.
A menudo se piensa que si cuando llega un mensaje, éste y su CRC coinciden, quiere decir que el mensaje no ha podido ser alterado durante su transmisión. Esta suposición es falsa porque CRC es un mal método de cifrado de datos. De hecho, el CRC no se trata realmente de un método de cifrado, lo que realmente hace es utilizarse para el control de integridad de datos, pero en algunos casos se supone que se utilizarán para el cifrado.
Notemos que el CRC es un valor numérico que se calcula usando los datos originales de forma que este valor está fuertemente ligado precisamente a estos datos, por tanto si los datos cambian entonces el valor del CRC también cambia.
Un ejemplo de cómo luciría el CRC32 de un fichero sería:
Nombre: test.png
CRC-32: 560013d4
CRC-32: 560013d4
WinRAR, el popular programa compresor y descompresor de datos, usa el CRC32 para comprobar archivos. Cuando WinRAR descomprime un fichero vuelve a calcular su CRC y lo compara con el CRC de los datos originales almacenado en el archivo RAR. Si los valores calculados son diferentes entonces los datos también son diferentes y el fichero extraído no es idéntico al fichero original obteniéndose en esos casos un mensaje común como "Error de CRC" que significa que el archivo está dañado, o, si está protegido con contraseña, que la contraseña usada es incorrecta.
¿Por qué sería necesario calcular el MD5, SHA-1, y CRC32?
Les daré un ejemplo en concreto. En el chat del blog muchas personas nos vienen preguntando luego de descargar la ISO de Windows 7, Windows 8, o Windows 10, comentándonos que por algún motivo no pudieron realizar la instalación del sistema debido a algún "error" inesperado. Es allí cuando les decimos de primera "¿Verificaste el hash justo después de descargar? ¿Cierto?", y la respuesta común que conseguimos es "No, ¿Qué es eso?"
Es aquí donde viene la importancia de este post, pues considero absolutamente necesario que usted verifique la autenticidad de los archivos que ha descargado, sobre todo si son imágenes ISO de sistemas operativos que acaba de descargar. Si lo hace, confirmará que NO ha sido modificado por terceras personas, que está limpio de spyware y virus, y que está libre de corrupción o de cualquier error de transferencia (incompleto por errores en la descarga).
La comprobación del hash es el único medio seguro por el cual puedes comprobar que tu descarga es exactamente igual (bit a bit) al archivo proporcionado por su fuente original, pues el método de que "si el peso es el mismo, entonces es correcto" no es siempre suficiente.
¿Y que pasaría si al intentar comprobar el hash no coincide?
Hay dos posibilidades: (1) El archivo que has descargado funcionará pero no como debería (esto dependerá de qué tan importante es aquella parte corrupta) o (2) El archivo simplemente no abrirá, no se ejecutará, o no se podrá grabar; es decir, es inservible.
En ambos casos la sugerencia general es volver a conseguir el archivo de su fuente original, es decir, volver a descargarlo.
¿Cómo se relacionan estos conceptos con nuestro blog?
Nuestro blog ya lleva años usando la comprobación de ficheros por su suma MD5 en los posts de descargas, esto con el único fin de que nuestros visitantes puedan verificar la originalidad e integridad de los archivos que compartimos así como verificar su descarga completa.
Noten además que para facilitarles aún más la tarea de comprobación hemos implementado que el nombre de los archivos correspondan a su MD5 para que tengan de esta forma a mano siempre el valor MD5 de los archivos que son descargados desde nuestro blog.
Por ejemplo, veamos el caso del aporte de descarga "foobar2000 v1.3.9". Si se dirigen al post de este artículo, verán la siguiente información en la sección "Enlaces de Descarga":
PROGRAMA foobar2000 v1.3.9
EXE | 3.71 MB
MD5 Checksum: a3be55019d6e501588491c25006d99d0
MD5 Checksum: a3be55019d6e501588491c25006d99d0
Como pueden notar nosotros ya venimos proporcionándoles el MD5 Checksum, el mismo que será el propio nombre de descarga del archivo que podrá ser visualizado al momento de descargar los archivos RAR, y no sólo eso, sino que ese MD5 Checksum será su ID único con el cual podrán verificar la originalidad de nuestros archivos así como su integridad luego de la descarga.
Esta implementación es con la finalidad de brindarles un mejor soporte y por su propia seguridad. No es una obligación pero sí muy recomendable.
Herramienta para calcular el hash SHA-1, MD5 y CRC32 de los archivos descargados
Para obtener este tipo de datos existen muchas aplicaciones; sin embargo, la que veremos en esta ocasión es Hashcheck, una pequeñísima aplicación que cumple muy bien su objetivo a la hora de conocer estos datos para cualquier tipo de archivos.
HashCheck Shell Extension hace que sea fácil y rápido para cualquiera el poder calcular y verificar sumas de comprobación (CheckSums) y hashes desde el propio Explorador de Windows, para ello integra la funcionalidad de la suma de comprobación de archivos en la opción de Propiedades de cualquier archivo. Además HashCheck es capaz de crear y verificar archivos SFV y otros tipos de archivos de control como los archivos .Md5
Descarga:
Instrucciones de uso de HashCheck:
Un video de uso es más fácil de entender así que dejo uno:
Bueno, esta es toda la información que pongo a su disposición por el momento esperando que les sea de utilidad. Nos vemos en una próxima entrada.
0 comentarios