Verificar la integridad de archivos firmados mediante GPG

por | 12 marzo, 2016

gpg-firmas

Hace unos años, a la hora de instalar software fuera de los repositorios oficiales, las precauciones era bien sencillas: acudir a la fuente original y huir como de la peste de la mayoría de portales especializados en descargas.

Aunque tengo la sospecha de que la mayoría de usuarios no las utilizan, la comprobación de las sumas de verificación mediante MD5 o SHA-1 es una realidad desde hace muchos años, pero si algo aprendimos de los recientes ataques a Linux Mint y Transmissión (en su versión OS X), es que incluso eso puede no ser suficiente.

Nada impide a un atacante una vez infectados los archivos de descarga, manipular también las sumas de verificación para que coincidan.

Para evitar esto y proporcionar un grado de seguridad mayor, se inventaron las firmas GPG en la verificación de software, que nos permite comprobar que los archivos que estamos descargando son auténticos y han sido creados por el desarrollador de la aplicación.

Al asunto

Doy por supuesto que tenéis instalado GnuPG, y os suena algo lo del cifrado asimétrico con sus claves públicas y privadas, así que vamos a tomar como ejemplo la última versión de Arch Linux descargando una imagen ISO desde cualquiera de sus mirrors y también un archivo con extensión .sig que es su firma digital.

Una vez descargados, empezamos ejecutando el comando:

gpg --verify archlinux-2016.03.01-dual.iso.sig archlinux-2016.03.01-dual.iso

Que nos va a dar un resultado parecido a este:

gpg: enabled debug flags: memstat
gpg: Firmado el mar 01 mar 2016 16:52:58 CET usando clave RSA ID 9741E8AC
gpg: Imposible comprobar la firma: No public key
gpg: keydb: kid_not_found_cache: total: 1
gpg: random usage: poolsize=600 mixed=0 polls=0/0 added=0/0
              outmix=0 getlvl1=0/0 getlvl2=0/0
gpg: secmem usage: 0/32768 bytes in 0 blocks

Nos dice que no puede comprobar la firma porque no disponemos de la clave pública (clave RSA ID 9741E8AC), así que vamos a importarla desde un servidor de claves y así trabajo que nos ahorramos para próximas ocasiones.

gpg --keyserver pgpkeys.mit.edu --recv-key 9741E8AC

En la salida del comando nos muestra el dueño de la firma (un desarrollador de Arch llamado Schmitz):

gpg: enabled debug flags: memstat
gpg: clave 9741E8AC: clave pública "Pierre Schmitz <pierre@archlinux.de>" importada
gpg: marginals needed: 3 completes needed: 1 trust model: PGP
gpg: nivel: 0 validez: 3 firmada: 0 confianza: 0-, 0q, 0n, 0m, 0f, 3u
gpg: Cantidad total procesada: 1
gpg: importadas: 1
gpg: keydb: kid_not_found_cache: total: 388
gpg: random usage: poolsize=600 mixed=0 polls=0/0 added=0/0
outmix=0 getlvl1=0/0 getlvl2=0/0
gpg: secmem usage: 0/32768 bytes in 0 blocks

Repetimos el primer comando:

gpg --verify archlinux-2016.03.01-dual.iso.sig archlinux-2016.03.01-dual.iso

y ya vemos que cambia el resultado:

gpg: enabled debug flags: memstat
gpg: Firmado el mar 01 mar 2016 16:52:58 CET usando clave RSA ID 9741E8AC
gpg: Firma correcta de "Pierre Schmitz <pierre@archlinux.de>" [desconocido]
gpg: ATENCIÓN: ¡Esta clave no está certificada por una firma de confianza!
gpg:           No hay indicios de que la firma pertenezca al propietario.
Huellas dactilares de la clave primaria: 4AA4 767B BC9C 4B1D 18AE  28B7 7F2D 434B 9741 E8AC
gpg: random usage: poolsize=600 mixed=0 polls=0/0 added=0/0
              outmix=0 getlvl1=0/0 getlvl2=0/0
gpg: secmem usage: 0/32768 bytes in 0 blocks

Sin duda habéis reparado en esa palabra “ATENCIÓN” que esta gritando como una loca poníéndonos sobre aviso, respecto de la firma. Bueno, eso es algo normal dado que no conocemos al propietario, no la hemos marcado como de confianza ni nosotros ni lo que se denomina nuestro anillo o red de confianza, así que… diablos!, podría ser cualquiera.

En este punto podemos ir la web de Arch Linux y ver si esa clave pública está validada mediante la firma de las llamadas Master Keys (llaves maestras) del proyecto.

12 pensamientos en “Verificar la integridad de archivos firmados mediante GPG

  1. anjira95

    Hola desde un XP, aún :-), hice la prueba con youtube-dl.exe, tengo una duda, las claves siempre se solicitan al servidor pgpkeys.mit.edu … Si hay otros, no importa cual se use ¿? … Generalmente al software lo compruebo mediante su hash (md5, sha) … Y al software propietario con el antivirus de siempre, jejeje.

    Saludos.

    PD: Firefox se queja del sitio, al tratar de enviar el comentario.

    Responder
    1. victorhck

      Los servidores de claves se sincronizan entre ellos.
      No importa cual visites, o a cual subas tus calves, después de un tiempo se sincronizan, replicándose la información.
      Saludos.

      Responder
    2. tannhausser Autor

      La mayoría de los servidores de claves están conectados entre si, por lo que no debería haber problemas si utilizas otro cualquiera.

      Aunque no lo mencione en el post (siempre hay que reservar algo para los comentarios 😉 ), existe la opción de importar la clave utilizando el archivo gpg disponible en su web.

      gpg --import clave.gpg
      Responder
      1. anjira95

        Gracias por la respuesta (y a @Victor), un tema interesante y por lo que veo GPG va más alla … Estoy buscando un cliente para el e-mail, estoy interesado en «Claws Mail» o «Sylpheed», no confio en el viejo outlook express, jeje … Y leyendo sobre «HushMail» y «ProtonMail», pa jugar un rato.

        Saludos.

        Responder
    1. tannhausser Autor

      Gracias por compartir amigo y por arrebatarme la «pole» en la respuesta a @anjira 🙂

      Responder
  2. Ray

    He ingresado la línea ‘9741E8AC’ en la casilla de búsqueda de la página del MIT PGP Public Key Server y no obtuve resultados. ??

    Responder
      1. victorhck

        Si se revoca una clave, eso queda también reflejado.
        Anteponle un 0x a la clave 9741E8AC, es decir, busca por: 0x9741E8AC

        Saludos.

        Responder
  3. Bertholdo Suarez Perez

    Hola. ¿Cómo sería el procedimiento para archivos donde no ho disponen directamente un archivo .sig?
    Entiendo, otros también disponen ficheros .asc

    Se que también suele usarse el comando ejemplo: ‘gpg –fingerprint 0x8e94c9cd163e3fb0’

    También: ‘gpg –keyserver pool.sks-keyservers.net –recv-keys 0x4E2C6E8793298290’

    ¿Cómo sería el asunto con los datos dados por la web de GParted?: https://gparted.org/download.php

    Gracias.

    Tu artículo fue el primer hallazgo usando buscador startpage.com –> como verificar gpg archivo linux

    Responder
  4. fsr

    Demasiado engorroso como para que se use de forma masiva.
    Es bastante ridículo que después de varios pasos, todavía nos diga que «Esta clave no está certificada por una firma de confianza». Obviamente deberían incluirse firmas de confianza en el programa. Si es tan engorroso que casi nadie lo usa, es prácticamente inútil.

    Responder

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.