Verificar la integridad de archivos firmados mediante GPG

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.

7 thoughts on “Verificar la integridad de archivos firmados mediante GPG”

  1. anjira95 says:

    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.

    1. victorhck says:

      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.

    2. tannhausser says:

      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
      1. anjira95 says:

        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.

  2. victorhck says:

    Plas,plas,plas…
    Aplaudo con las orejas este artículo!! 🙂
    Compartiendo…

    1. tannhausser says:

      Gracias por compartir amigo y por arrebatarme la “pole” en la respuesta a @anjira 🙂

  3. mantisfistjabn says:

    Esto toma importancia, sobre todo después de lo que pasó con Mint.

Deja un comentario