Cómo comprobar la integridad de nuestros archivos con el hash

Cómo comprobar la integridad de nuestros archivos con el hash

Lorena Fernández

¿Cómo es posible saber fácilmente si el archivo que estoy recibiendo es legítimo? ¿Es posible saber si se ha corrompido mientras lo descargaba de Internet? Sí, es posible mediante su hash. Funciona como un código de identificación del dato con el cual estamos trabajando. Si llega a alterarse un determinado dato de origen, este código alfanumérico de salida se altera por completo. A continuación, te mostramos todo lo que necesitas saber y qué herramientas recomendamos para generar hashes cuando lo necesites.

 

¿Qué es un hash y para qué sirve?

Un hash es una función criptográfica que funciona solamente en un solo sentido, es decir, es un algoritmo matemático que transforma cualquier bloque de entrada de datos en una nueva serie de caracteres de salida con una longitud fija o variable. Por lo tanto, una función hash es el resultado de una función que se encarga de convertir un valor en otro. Un detalle muy importante es que, generalmente los hash proporcionan una salida de longitud fija, sin embargo, hay algoritmos de hash que están específicamente diseñados para «proteger» las contraseñas, y en este caso la longitud de la salida es variable.

Uno de los propósitos principales de dicha función hash, es el poder comprobar si un archivo se ha modificado o no. La huella hash de cada archivo es única, el hash genera una especie de código que sirve como una identificación del dato en cuestión. Además, con el hash de un determinado archivo no se puede recuperar el archivo original, por este motivo, una buena práctica de seguridad es almacenar los hashes de las contraseñas en las bases de datos, para que nadie pueda obtener la información en texto plano. No obstante, para crackear este «hash» lo que se hace es probar miles de combinaciones y comparar si los hashes son iguales.

Los hashes se utilizan para muchos usos, como los siguientes:

  • Comprobar la integridad de un archivo: si hacemos la función hash de un archivo en cuestión y lo copiamos a otro ordenador o a cualquier otro sitio, si se vuelve a hacer la función hash de este archivo copiado, debe salir exactamente el mismo resultado que la función hash original. En cuanto en un archivo cambia un bit, la salida del hash que hayamos utilizado es completamente diferente. Por este motivo, es muy importante el hash en los protocolos seguros de cifrado, como el HTTPS o FTPES, donde se comprueba que efectivamente los datos no han sufrido ninguna variación en la comunicación. Los hash también son muy usados en el mundo forense informático, para realizar la cadena de custodia de un disco duro o una imagen de disco adecuadamente, y garantizar que no se ha modificado nada del contenido.
  • Guardar las contraseñas de forma segura: si hacemos la función hash de una contraseña, y almacenamos el resultado de esta función hash en una base de datos, un posible atacante si accede a esta base de datos no podrá recuperar la contraseña. Debemos recordar que las funciones hash solamente van en un sentido, no se puede «revertir» una función hash, por lo que si un ciberdelincuente quiere crackear la contraseña, tendrá que hacer un ataque de fuerza bruta y diccionario, comparando el hash de cada contraseña probada con la contraseña que ha conseguido en la filtración.

Tal y como podéis ver, las funciones hash son muy importantes en el mundo de la seguridad informática, y también de las redes, porque nos permite comprobar la integridad de los datos transmitidos, no solamente los almacenados en un disco duro o unidad SSD. A continuación, os vamos a enseñar cómo comprobar la integridad de un archivo utilizando diferentes algoritmos de hash.

Las siglas de SHA responden a Secure Hash Algorithm. Fue desarrollado por la NIST, que es la National Institute for Standards and Technology. Es uno de los algoritmos estandarizados más populares en la actualidad. Una de las ventajas es que ante el mínimo cambio en la integridad de los datos, el hash varía por completo. SHA2-256, por ejemplo, es un estándar que está siendo empleado a nivel nacional en los Estados Unidos, y actualmente se considera seguro. Éste se denomina tal cual ya que el hash que genera es de 256 bits de longitud.

No solamente puedes contar con los hashes de SHA2-256 y otros estándares para comprobar la integridad de los archivos. El que mencionamos, también tiene aplicación en protocolos populares de autenticación y encriptación: SSL, TLS, IPSec, SSH y PGP. En Linux y otros sistemas operativos, así como en aplicaciones que almacenan contraseñas en una base de datos, este algoritmo se utiliza para hashear las contraseñas, y almacenar dicho hash y no la contraseña en texto claro. La popular criptomoneda Bitcoin se vale de este algoritmo para verificar cada una de las transacciones que se da en su red.

 

Herramientas para generar hashes online

Ahora que ya tenemos un panorama más claro acerca de lo que es un hash y para qué sirve, ahora puedes probar alguna de las herramientas que generan hashes. Esto es lo primordial para revisar la integridad de los datos que deseas. Así, podrás comprobar con facilidad la integridad de los datos con los cuales estás trabajando.

  • File Checksum: Es una sencilla herramienta web que permite la generación de hashes. Tan solo es necesario arrastrar el archivo desde la ubicación en donde está, hasta el sitio web. O bien, puedes hacer clic en el cuadro donde dice «Drop File Here» y subes el archivo. No solamente puedes generar hashes en SHA2-256 sino también con otras funciones hash que existen. Específicamente, 29 algoritmos de hash tanto para Hashes de Archivos como de texto plano. Una ventaja importante es que no necesitas realizar registro previo, sólo accede a la web y ya podrás utilizarlo.
  • HTML5 File Hash Online Calculator: Es otro sitio web que no necesita de registro previo para generar hashes de archivos. Los algoritmos que soporta son MD5, SHA-1, SHA-256, SHA-384 y SHA-512. También cuenta con un algoritmo que se describe como la implementación más rápida de los algoritmos SHA (WebCryptoAPI), el cual se aplica para archivos de menos de 512 GB de peso.
  • Defuse Online Text & File Checksum Calculator: Otra herramienta más que puedes encontrar en Internet para generar hashes. Es compatible con texto tipo ASCII o UNICODE y en cuanto a archivos, no tiene limitaciones en cuanto a formato, pero sí de tamaño (5 MB). Una de sus ventajas es que ni los datos ni los hashes que se generan son almacenados en el servidor del sitio.

 

Programas para generar hashes (gratis)

No solamente existen soluciones web para este propósito, si no también programas ejecutables que acostumbran a ser muy sencillos de usar. Además del hecho de que la descarga e instalación no tiene coste alguno.

 

QuickHash

QuickHash se trata de una una herramienta de hashes de datos de código abierto para los sistemas operativos Linux, Windows y Apple Mac OS, cuenta con una interfaz gráfica de usuario muy amigable y fácil de utilizar. Esta herramienta actualmente soporta los siguientes algoritmos hash: MD5, SHA1, SHA-3 (256 bits), SHA2-256, SHA2-512, xxHash, Blake2B (256 bits) y Blake3, por tanto, es una herramienta realmente completa. Por si todo esto fuera poco, debemos indicar que es totalmente gratuita, y su desarrollo se sostiene gracias a las donaciones de las personas que la usan.

Para descargar la herramienta QuickHash tenemos que pulsar sobre el siguiente enlace para descargar gratis QuickHash. Como ya comentamos anteriormente, podremos utilizar la versión para Windows, Linux y MacOS. En mi caso voy a utilizar la última versión disponible para Windows, la versión en concreto es la 3.2.0. Una vez descargado nos encontraremos un fichero en formato ZIP, el cual procederemos a descomprimir en una carpeta.

Un aspecto muy positivo que tiene esta herramienta, es que no requiere de instalación, por lo tanto, en esa carpeta que acabamos de descomprimir lo único que tenemos que hacer es doble clic sobre el archivo Quickhash-GUI, en el explorador de archivos veréis como tipo aplicación. También tenemos una guía de usuario de la propia herramienta.

La primera vez que lo iniciéis aparecerá una pantalla como esta:

Arriba en el recuadro rojo tenemos las opciones principales del programa que son:

  • Text: para hacer hash con fragmentos de texto, como, por ejemplo, párrafos de un archivo.
  • File: para seleccionar y luego aplicar hash a un archivo individual.
  • FileS: para hacer hash de varios archivos que se encuentren en un directorio.
  • Copy: sirve para copiar y pegar, pero con la integridad de datos agregada de hash. Está diseñado para permitir que un usuario copie archivos de un lugar a otro, pero tenga el proceso de copiado verificado y respaldado por valores hash.
  • Compare Two Files: compara los hashes de dos archivos diferentes que se encuentran en dos localizaciones diferentes.
  • Compare Two Folders: sirve para comparar el contenido del archivo de una carpeta con otra para ver si todos los archivos dentro coinciden según el hash (los nombres de archivo no se comparan).
  • Disk: para comprobar el hash de discos físicos y volúmenes lógicos.
  • Base64Data: permite al usuario aplicar un hash a un archivo Base64 codificado y generar un hash de su contraparte decodificada, sin que el usuario tenga que crear la versión decodificada. Además, admite la decodificación de datos codificados en Base64, únicamente por conveniencia.

En morado están los algoritmos que podemos utilizar para obtener nuestros hashes, a destacar los algoritmos de SHA2-512, SHA-3 y también BLAKE3.

Vamos a empezar con el apartado Text. Por ejemplo, imaginad que necesitamos el hash del texto RedesZone con el algoritmo SHA-1. Esto se haría así, empezando por seleccionar el algoritmo SHA-1, luego escribimos el texto y abajo finalmente obtendríamos el hash.

Al principio del tutorial hablábamos del archivo de un router que queríamos comprobar si estaba en buen estado tras su descarga, y si no se había corrompido. El fabricante daba la posibilidad de verificar que ese archivo estaba bien utilizando el algoritmo SHA-1. Así ofrecía el siguiente valor para la verificación: 88F69E6FBC7C52B3DA9DEC8EB718CFF06232C409.

Para comprobarlo, nos dirigimos al aparatado File. En Select File seleccionamos el archivo del firmware, ponemos el algoritmo SHA-1 y entonces podemos comprobar que el hash es idéntico. Eso significa que el archivo está bien, y podemos flashear el firmware con total tranquilidad.

Ahora vamos a comparar dos archivos utilizando el algoritmo SHA2-512. Para ello, nos dirigimos a Compare Two Files. Primero vamos a poner un ejemplo con dos archivos distintos. Empezamos seleccionando el algoritmo y luego los dos archivos. El primer archivo lo pondríamos en Select File A y el segundo archivo para realizar la comparación en Select File B. A continuación, damos a Compare Now y en rojo saldrá MIS-MATCH indicando que son diferentes.

Por el contrario, si cogemos dos archivos iguales y repetimos el proceso siguiendo los mismos pasos y dando a Compare Now obtenemos este resultado:

Aquí pone escrito en negro MATCH!, que quiere decir que coinciden.

El siguiente apartado que va a utilizar es FileS, que se utiliza para ver el hash de los archivos que hay en un directorio. En Select Folder seleccionamos la carpeta. Como podéis apreciar, detecta los archivos que se encuentran en los subdirectorios. También tiene la opción de buscar directorios ocultos con la opción Hidden folders too? Además, tenéis una barra estilo reproductor multimedia para ir moviéndonos entre los archivos.

Ahora llega el turno del apartado Copy, que sirve para copiar archivos y que verifique que lo ha hecho de forma correcta comprobando su hash. Empezaremos como siempre, eligiendo un algoritmo. Luego, en el lado de la izquierda, elegimos la carpeta de origen que queremos copiar. En la derecha elegimos la de destino, en este caso creé una carpeta vacía llamada Prueba. Una vez hecho pulsamos en Go! para que inicie el proceso.

Entonces nos sale una pantalla como esta. Aquí vemos la ruta de ambas, tanto de origen y de destino con sus correspondientes hashes. En este caso se aprecia que coinciden y que se han copiado 5 archivos.

Si salimos de aquí, vemos cómo indica un resumen del trabajo realizado y que el proceso de copiado ha finalizado.

El siguiente apartado que vamos a ver es Compare Two Folders que sirve para comparar los hashes de los archivos de dos directorios. Para ello, seleccionamos el algoritmo, en Select Folder A ponemos una carpeta y en Select Folder B la otra. A continuación, pulsamos en Compare Now.

Aquí vemos las rutas de ambas con sus correspondientes hash y se aprecia que coinciden.

Si volvemos a la pantalla donde comenzamos abajo en el recuadro rojo nos pone en inglés que los dos directorios coinciden.

Por último, como podéis ver, Quickhash se convierte en una útil herramienta con la que podremos trabajar con los hashes de muchas maneras.

 

Otros programas

  • HashMyFiles: Es un programa portable que permite la generación de hashes en forma masiva. Es decir, puedes seleccionar más de un archivo a la vez para que pueda generar los hashes para cada uno. Soporta los algoritmos SHA (todas sus variantes) y CRC32. Es posible crear un acceso a HashMyFiles en el menú contextual para que cada vez que selecciones archivos o incluso carpetas, puedas contar con este programa para poder importarlos a este y crear los hashes. Es compatible con Windows a partir de la versión 2000.
  • MultiHasher: Consiste en otra herramienta super compacta y sencilla de usar. Se especializa en generar hashes masivamente, por carpetas y subcarpetas e incluso, indicando la ruta de lo que queremos generar. Soporta todos los algoritmos conocidos.
  • MD5 & SHA Checksum Utility: Es un software gratuito que genera tipos de hash SHA-512, SHA-1, MD5, SHA-256 a partir de un archivo determinado. También verifica la integridad del archivo. Para la verificación del hash, o para generar un hash, debe seleccionar el archivo deseado, luego seleccionar uno de estos dos hashes SHA-1 o MD5. Después de eso, debe hacer clic en verificar o copiar para verificar la integridad del archivo o generar el hash.

Software gratuito que genera tipos de hash

  • ashCalc: También gratuito y sirve para calcular valores hash, sumas de comprobación y hmac para cadenas hexadecimales, archivos y texto. Admite muchos algoritmos de suma de comprobación: CRC32, TIGER, PANAMA, RIPEMD 160, MD2, MD4, MD5, SHA1, SHA2, SHA256, SHA384, SHA512. Admite una variedad de formatos de datos: cadena de texto, archivo y cadena hexadecimal. Admite archivos de gran tamaño. Te permite verificar muchos tipos de archivos: video, imagen, compresión, sonido, audio, música, icono y texto.

Programa gratuito para calcular valores hash

  • MD5 Hash Check: Práctico programa, también gratuito, para generar y verificar valores hash de archivos MD5, Whirlpool, CRC16, Panama, Tiger, RIPEMD320, RIPEMD 256, RIPEMD160, SHA512, SHA384, SHA256, SHA224, SHA1, CRC32. Con la ayuda de este software, puede verificar fácilmente la integridad de dos archivos. Se puede agregar fácilmente al menú contextual y, además, compara fácilmente los valores hash de dos archivos proporcionados.
  • Hash Generator: Genera rápidamente hashes de la familia MD5, MD2, MD4, CRC32, ADLER32, WHIRLPOOL, RIPEMD 160, HAVAL256-4 y SHA. Este software ayuda a verificar la integridad del archivo. El principal inconveniente de este programa es que no se pueden comparar hashes con él. También está disponible en una versión portable.
 

Realizar comprobación de integridad en Windows

En muchas ocasiones solemos recomendar utilizar un software especializado para realizar este tipo de comprobaciones porque por lo general suelen darnos información detallada y precisa sobre lo que estamos haciendo, pero en realidad, existe un método para realizar verificaciones de integridad de archivos de una forma simple utilizando el símbolo de sistema de Windows o PowerShell.

El hecho de que podamos utilizar un comando que se encuentra integrado en una aplicación que ya trae nuestro sistema operativo nos ofrece muchas ventajas, pero la principal cuando nos referimos a seguridad, es que no tenemos la necesidad de instalar software de terceros, y, además, nos permite agregarla con relativa facilidad a los scripts de PowerShell para realizar procesos automáticos.

El comando se llama certutil, y es bastante sencillo de utilizar una vez que lo entendemos, básicamente lo que debemos hacer es ejecutar bien sea nuestro símbolo de sistema o nuestro PowerShell, escribimos el comando certutil –hasfile [nombre_de_archivo] [algoritmo-hash], reemplazando lógicamente nombre del archivo con el que deseamos comprobar y el hash que queramos utilizar.

Aquí podemos ofreceros un ejemplo, es una página de descarga que nos está enumerando un valor de suma de verificación. Lo primero que tuvimos que hacer fue pinchar en un enlace para ver la suma de verificación que es bastante común en las páginas de descargas. En este caso, el valor de la suma de la comprobación realizada es SHA256.

Ejemplo 1

El hecho de ejecutar el comando certutil con sha256 al final de la cadena como algoritmo hash lo que hace es ejecutar la utilidad con el mismo algoritmo hash que la suma de la comprobación que fue proporcionada por el sitio web que hemos utilizado en este ejemplo. Luego, lo único que debemos hacer es comprobar que los valores de la suma de verificación son iguales y de ser así habremos comprobado la integridad de este archivo.

Ejemplo

 

Comparando hashes

En verdad, la tarea de comparar los hashes acostumbra a dejarse en manos del usuario. Gracias a estas herramientas citadas, podemos generar rápidamente los hashes y compararlos con los que nos han facilitado. Ahora bien, existen algunas soluciones que permiten realizar las comparaciones algo más fácilmente para evitar realizar esa revisión «a ojo». La mayoría de algoritmos de hashes permiten que, ante la mínima alteración del dato, el hash cambie por completo. Esto significa que se podría percibir la diferencia entre un código y otro sin realizar demasiadas revisiones.

Más abajo, vemos una captura de la página web oficial de Kali Linux. Si nos fijamos en el apartado de descargas, todas las versiones que tiene disponibles para descargar cuentan con un hash SHA2-256. Entonces, una vez que hayamos descargado Kali (o el archivo que ya tenga un hash previamente generado), podemos acceder a una de las herramientas que hemos recomendado y volver a generar el hash. Debería ser el mismo, si es que no hubo alteraciones en el archivo.

Un punto importante a considerar es que, una vez generado un hash, éste no puede ser revertido. Esto es así porque dos mensajes (siempre en el contexto de datos) podrían tener el mismo valor de hash (colisión). Sin embargo, con los algoritmos disponibles hoy en día, las posibilidades de que eso ocurra son cada vez más remotas, y si ocurre, ese algoritmo como MD5 o SHA-1 ya dejan de ser seguros porque se han encontrado colisiones.

Otro punto más es que las funciones hash como SHA2-256 no son las mejores para usarlas para almacenar las contraseñas en una base de datos, esto es debido a que se pueden generar con rapidez, y por tanto, en poco tiempo podrían «crackear» dicha clave. Sin embargo, existen algoritmos hash específicamente diseñados para almacenar las contraseñas, como bcrypt o Argon2 entre otras.

Por último, aunque algoritmos de hash como MD5 o SHA-1 no son seguros porque se han encontrado colisiones, es muy habitual su utilización conjunta. Cuando necesitamos realizar la función hash de MD5 y SHA-1 a un conjunto de datos de varios cientos de GB, el tiempo empleado en hacer estas dos funciones hash es inferior a hacer una función SHA-256. Esto es vital para las Fuerzas y Cuerpos de Seguridad del Estado, ya que tienen un tiempo limitado para recoger todas las pruebas y realizar la cadena de custodia de forma correcta.

¡Sé el primero en comentar!