Verifying PGP Signatures: A Step-by-Step Guide

Guía técnica completa sobre cómo verificar firmas digitales PGP con GnuPG: fundamentos criptográficos, huellas digitales y análisis de resultados paso a pa

En esta página

En el ecosistema de la seguridad de la información y las comunicaciones confidenciales, garantizar la integridad y la autenticidad de un mensaje o archivo es tan crítico como salvaguardar su confidencialidad. Mientras que el cifrado impide que ojos no autorizados accedan al contenido, la firma digital mediante OpenPGP (implementado comúnmente a través de GnuPG o GPG) proporciona una garantía matemática irrefutable de dos propiedades esenciales: que el contenido no ha sido alterado desde su emisión (integridad) y que fue originado inequívocamente por el poseedor de la clave privada correspondiente (autenticidad). Para periodistas que reciben filtraciones, desarrolladores que distribuyen binarios y analistas de seguridad, el proceso de verificación de firmas PGP constituye la primera y más robusta línea de defensa frente a ataques de manipulación en tránsito y suplantación de identidad.

Fundamentos criptográficos de la firma digital PGP

El mecanismo subyacente a una firma PGP se basa en la criptografía asimétrica y las funciones hash criptográficas unidireccionales, estandarizadas bajo las especificaciones de OpenPGP (RFC 4880 y el reciente RFC 9580). El proceso no cifra el documento original en sí, sino una representación compacta de este calculada matemáticamente.

Cuando un emisor firma digitalmente un artefacto (ya sea un correo electrónico, un parche de código fuente o una imagen ISO), el software realiza las siguientes operaciones:

  1. Cálculo del resumen criptográfico (Hash digest): Se procesa el archivo fuente mediante una función hash resistente a colisiones, típicamente de la familia SHA-2 (como SHA-256 o SHA-512) o SHA-3. Este paso produce una cadena de longitud fija representativa del documento exacto.
  2. Cifrado del hash con la clave privada: El resumen criptográfico se cifra utilizando la clave privada del firmante (basada en algoritmos como RSA, o curvas elípticas como Ed25519/EdDSA). Este bloque cifrado resultante es, estrictamente hablando, la firma digital.
  3. Empaquetado de metadatos: La firma incluye metadatos adicionales, como la marca de tiempo de creación, el identificador de la clave utilizada y los algoritmos empleados.

Para verificar la firma, el receptor invierte el proceso de forma simétrica: calcula localmente el hash del archivo recibido utilizando el mismo algoritmo y, simultáneamente, descifra la firma digital utilizando la clave pública del emisor. Si el hash descifrado y el hash calculado de forma local coinciden bit a bit, la firma es matemáticamente válida.

Tipologías comunes de firmas PGP

Dependiendo del canal de distribución y el tipo de contenido, las firmas PGP se estructuran en diferentes formatos técnicos:

Firmas separadas (Detached Signatures)

Es el estándar predilecto para la distribución de software, kernels y documentos binarios pesados. La firma reside en un archivo completamente independiente del archivo original, comúnmente con las extensiones .sig (formato binario puro) o .asc (formato con blindaje ASCII o ASCII armored). Permite a los usuarios descargar y validar la integridad del binario sin obligar al emisor a modificar la estructura interna del paquete.

Firmas en texto claro (Clearsigned Documents)

Utilizadas extensamente en listas de correo de seguridad, advertencias de vulnerabilidades y manifiestos de texto plano. El mensaje original permanece legible para humanos sin necesidad de software PGP, delimitado por encabezados y pies estandarizados, mientras que la firma en formato ASCII se adjunta al final del bloque:

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

El servidor de producción será migrado el próximo viernes a las 02:00 UTC.
-----BEGIN PGP SIGNATURE-----

iQEzBAEBCAAdFiEE...
...
-----END PGP SIGNATURE-----

Preparación del entorno: Gestión e inspección de claves públicas

Antes de ejecutar cualquier comando de verificación, es imperativo obtener la clave pública del autor y, lo más importante, autenticar que dicha clave realmente pertenece a quien afirma ser.

Importación de la clave pública

Existen diversos métodos para incorporar la clave pública del remitente al depósito local (keyring) de GnuPG:

Desde un archivo local suministrado directamente por el emisor:

gpg --import clave_publica.asc

Desde un servidor de claves sincronizado (Keyserver) mediante el protocolo HKPS, o empleando Web Key Directory (WKD):

gpg --keyserver hkps://keyserver.ubuntu.com --recv-keys [FINGERPRINT]

La vulnerabilidad de los Key IDs y la necesidad del Fingerprint

Regla de seguridad crítica: Nunca confíe en identificadores de clave cortos (32 bits, ej. 0x12345678) ni largos (64 bits). Son vulnerables a ataques de colisión deliberados (demostrado en ataques como EVIL32), donde un adversario genera una clave espuria con el mismo identificador para suplantar una fuente legítima. Valide siempre la huella digital completa (Fingerprint) de 160 bits (v4) o 256 bits (v5).

Para inspeccionar la huella digital de la clave que acaba de importar, ejecute:

gpg --fingerprint [email protected]

El resultado mostrará un bloque hexadecimal dividido en grupos. Debe contrastar esta huella mediante un canal alternativo y seguro fuera de banda (out-of-band): por ejemplo, una llamada de voz verificada, la tarjeta de presentación física del contacto, o un registro DNS seguro vía HTTPS y DNSSEC.

Procedimiento paso a paso para verificar una firma

Caso 1: Verificación de un archivo con firma separada (Detached)

Supongamos que ha descargado un archivo de distribución de software denominado herramienta-defensiva.tar.gz y su respectiva firma herramienta-defensiva.tar.gz.asc.

Para comprobar la firma, sitúe ambos archivos en el mismo directorio y ejecute:

gpg --verify herramienta-defensiva.tar.gz.asc herramienta-defensiva.tar.gz

Nota: Si el archivo de firma conserva exactamente el mismo nombre base que el archivo de datos (añadiendo únicamente la extensión .sig o .asc), GnuPG puede inferir el archivo de datos automáticamente invocando solo la firma:

gpg --verify herramienta-defensiva.tar.gz.asc

Caso 2: Verificación de un archivo con firma en texto claro (Clearsigned)

Si dispone de una declaración o comunicado en un archivo llamado comunicado.txt.asc, ejecute:

gpg --verify comunicado.txt.asc

Si además desea extraer el contenido de texto limpio eliminando las cabeceras y bloques criptográficos de OpenPGP tras confirmar su validez:

gpg --decrypt comunicado.txt.asc > comunicado_limpio.txt

Interpretación técnica de los resultados de GnuPG

Comprender con precisión la salida generada por gpg --verify es vital para no asumir conclusiones de seguridad falsas. Analicemos los dos componentes de una respuesta estándar.

La confirmación de validez matemática

Si el archivo no ha sido manipulado y la firma fue creada con la clave correspondiente, observará:

gpg: Signature made Wed 14 May 2025 10:15:32 AM UTC
gpg:                using RSA key 4A8B9C0D1E2F3A4B...
gpg: Good signature from "Alice Smith <[email protected]>" [unknown]

La presencia inequívoca de Good signature confirma el éxito criptográfico: los datos están intactos y coinciden con la clave indicada.

La advertencia de confianza (Trust Warning)

Inmediatamente después de una firma correcta, es sumamente habitual ver el siguiente bloque de advertencia:

gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 1234 ABCD 5678 EF01 2345  6789 ABCD EF01 2345 6789

Esta advertencia no significa que la firma haya fallado. Refleja la diferencia técnica entre validez criptográfica y confianza en la identidad:

  • Validez criptográfica: El mensaje fue firmado por la clave privada asociada a la clave pública en su posesión.
  • Confianza (Web of Trust): Su software local no tiene forma de saber si la persona que generó esa clave es realmente "Alice Smith" o un atacante que subió una clave con ese nombre al servidor público.

Para eliminar esta advertencia, debe firmar localmente la clave del remitente tras corroborar su huella digital mediante un canal seguro fuera de banda:

gpg --sign-key 1234ABCD5678EF0123456789ABCDEF0123456789

El escenario de fallo: Firma corrupta o ataque MitM

Si los datos fueron alterados aunque sea en un solo bit (o si el archivo de firma fue manipulado deliberadamente), GnuPG arrojará una alerta explícita de error:

gpg: BAD signature from "Alice Smith <[email protected]>" [unknown]

En este escenario, el archivo debe ser descartado inmediatamente; no debe ejecutarse, extraerse ni considerarse genuino bajo ninguna circunstancia.

Buenas prácticas de seguridad operacional (OpSec)

Integrar la verificación PGP en los flujos de trabajo defensivos exige ciertas precauciones metodológicas:

  • Aislamiento de tareas de alto riesgo: Al verificar software de fuentes sensibles o de procedencia dudosa, procese las operaciones criptográficas en entornos efímeros o máquinas virtuales aisladas para mitigar posibles exploits dirigidos a parsers de descompresión o al propio software GPG.
  • Prevención de ataques de reemplazo: Asegúrese de que el canal de descarga de la firma y del archivo esté protegido mediante TLS riguroso, y corrobore simultáneamente los hashes SHA-256 publicados por el autor en diferentes repositorios o servicios descentralizados.
  • Mantenimiento del llavero: Actualice periódicamente sus claves públicas locales mediante gpg --refresh-keys para recibir certificados de revocación en caso de que alguna de las claves de sus contactos se haya visto comprometida.

Conclusión

La verificación de firmas PGP no es un formalismo burocrático, sino una herramienta matemática determinista contra el software troyanizado, las filtraciones falsificadas y los ataques de intermediario. Dominar el uso de gpg --verify, desconfiar sistemáticamente de los identificadores cortos y exigir la validación estricta de las huellas digitales completas son competencias no negociables para la preservación de la integridad técnica en cualquier entorno donde la seguridad de la información sea prioritaria.

Palabras clave
verificar firma PGPGnuPG verifyOpenPGPhuella digital GPGcriptografía asimétricaseguridad de softwareweb of trust