Qué, para qué, cómo: las sumas de control

Finalmente (he postergado la escritura de este artículo tantas veces que llegué a creer que ya lo había escrito…) presento hoy una entrada referida a una herramienta sumamente interesante: los algoritmos de suma de control, para qué sirven y cómo se usan en Linux.

No vamos a entrar en el problema de que el nombre «suma de control» no es del todo apropiado ya que deberíamos hablar de «algoritmo de reducción criptográfica», o de que el nombre más usado en inglés (hash function) vendría a traducirse como «función picadillo», cosa que no suena del todo bien… y es que el tema de los nombres, especialmente cuando un experto en informática y su particular humor geek está de por medio, es para volverse loco XD

El problema

Supongamos que queremos descargar un archivo desde un servidor remoto. Por ejemplo, queremos descargar la versión live de openSUSE 13.2 KDE y por algún motivo no nos va utilizar torrents sino descarga directa. ¿Cómo hacemos para asegurarnos de que la descarga fue correcta? En un caso general podríamos incluso estar preocupados por haber descargado el archivo correcto y no uno modificado por alguien más.

Podríamos pensar ingenuamente que es suficiente controlar el nombre del archivo y su tamaño. Siguiendo con nuestro ejemplo, si descargamos un archivo llamado openSUSE-13.2-KDE-Live-x86_64.iso y que tiene exactamente 952926208 bytes, ¿qué podría salir mal?

Pues muchas cosas. Para empezar, es muy sencillo crear un archivo de texto normal con Kate, llenarlo de 952926208 ceros y ponerle como nombre openSUSE-13.2-KDE-Live-x86_64.iso…

Y es aquí donde hacen su entrada las funciones picadillo, digo, las hash functions: una función que dada una entrada (un archivo, un texto) me da una salida tal que pequeños cambios en la entrada den grandes cambios en la salida, haciendo prácticamente imposible que un archivo modificado, ya sea en forma casual o premeditada, me de la misma salida del archivo original.

Ciertamente la única forma de dar suficiente información sobre un archivo para saber sin sombra de duda si su copia es idéntica al original es comparar directamente la copia con el original… lo cual, claramente, no tiene mucho sentido. Es por esto que la idea de estas funciones es construir una salida que si bien está «limitada por diseño» sea tan compleja que resulte prácticamente imposible construir un archivo B arbitrario que me de la misma suma de control de un archivo original A. Es decir, la idea de estos algoritmos no es crear una relación uno a uno entre archivo y «suma de control» sino tratar de evitar las colisiones hash todo lo posible.

Lo cual no siempre se puede: en 2004 se descubrió que uno de los algoritmos hash más usados, el MD5, no era completamente seguro.

El uso

La idea es que quien distribuye los archivos que queremos descargar ponga a disposición de los usuarios la salida de estos algoritmos para que luego nosotros comparemos esa salida «oficial» con el valor que esos algoritmos dan sobre el archivo que tenemos: si coincide, todo bien, si no, ¡a descargar de nuevo!

Los algoritmos más utilizados son el MD5, el SHA1 y el SHA256, pero hay muchos otros. La forma de controlar esto es siempre la misma, por lo que concentrémonos en una de ellas, por ejemplo la SHA1.

NOTA (2022): el algoritmo SHA1 también ha resultado vulnerable, por lo que se recomienda usar SHA256 o similar. En los comandos que siguen solo hay que reemplazar la instrucción correspondiente.

Cuando descargamos una imagen de openSUSE u otras distros, en la misma página tenemos a disposición archivos de texto plano con las sumas de control. Por ejemplo, para la versión KDE Live de openSUSE 13.2 tenemos a disposición los archivos

openSUSE-13.2-KDE-Live-x86_64.iso.md5

openSUSE-13.2-KDE-Live-x86_64.iso.sha1

Si abrimos el segundo, nos encontraremos con el siguiente contenido:

8a795d0a03161839831b7eca66fedd215a861451 openSUSE-13.2-KDE-Live-x86_64.iso

Es decir, un código que es la salida del algoritmo SHA1 y el nombre del archivo de interés. Ahora nos toca comprobar que lo que hemos descargado está bien.

Usando la consola, 1

Abriendo un terminal en la carpeta donde se encuentra el archivo que hemos descargado (en dolphin, simplemente presionamos F4), hacemos

sha1sum openSUSE-13.2-KDE-Live-x86_64.iso

(para utilizar la suma MD5, simplemente se reemplaza «sha1sum» por «md5sum» en la instrucción anterior). Luego de unos segundos, obtendremos una salida parecida al contenido del archivo .sha1 que comentamos más arriba: si los códigos coinciden, todo bien.

Usando la consola, 2

Si descargamos el archivo .sha1 en la misma carpeta del archivo .iso, simplemente hacemos

sha1sum -c openSUSE-13.2-KDE-Live-x86_64.iso.sha1

donde el «-c» significa «comparar». Nótese que ahora estamos corriendo la instrucción no sobre el archivo que queremos comparar sino sobre aquel donde se encuentra el código que utilizaremos para la comparación. Si todo está bien, tendremos como salida

openSUSE-13.2-KDE-Live-x86_64.iso: La suma coincide

si todo falla, pues dirá que NO coincide…

Usando un menú para KDE

NOTA (2022): el complemento comentado aquí no se sigue desarrollando. En versiones recientes de Dolphin, el administrador de archivos del proyecto KDE, en el menú contextual sobre un archivo → propiedades se tiene una pestaña para calcular las sumas de control.

Se puede calcular la suma con el botón correspondiente o pegar el valor de referencia para dejar al sistema hacer la comprobación en forma automática.

Instalando en nuestro sistema el complemento KCheckHash (para openSUSE el paquete se llama dolphin-plugin-checksum y se encuentra en el repositorio KDE-Extra: al instalarse arrastrará un par de dependencias) y luego de haber reiniciado dolphin, nos encontraremos con lo siguiente al hacer clic derecho sobre un archivo cualquiera → Acciones → Show Hash:

hash

Bajo el menú «settings» podemos elegir cuáles algoritmos son utilizados sobre el archivo seleccionado:

hash1

Como pueden ver, las posibilidades son muchas

Volviendo a la ventana principal del programa, podemos o bien comparar los resultados que nos da o pegar en la línea «Hash sum comparison» el código del archivo .sha1: el programa reconocerá por sí solo qué tipo de código es y si todo está bien mostrará una marca verde:

hash2

Usando K3B

K3B es la herramienta de quemado de discos de KDE. Cuando abrimos desde él una imagen el programa calcula automáticamente la suma MD5. Haciendo clic derecho sobre el valor dado por el programa, podemos elegir entre copiar la suma al portapapeles o compararla con el valor «real».

hash3

Si todo está bien, luego de hacer clic en Aceptar nos dirá «la suma MD5 de <archivo> es igual a la especificada».

Otras opciones

Hace mucho que no utilizo la extensión para firefox DownThemAll!, pero creo recordar que ofrecía la opción de utilizar las sumas de control.

Seguramente hay más opciones, pero creo que con estas ya estamos más que completos 😉

Anuncio publicitario