Verificar que una clave fue firmada por otra clave

3

Comencé a usar GPG4Win / Kleopatra, la implementación de GNU Privacy Guard para Windows. Más recientemente, quise verificar una descarga de Qubes OS, para la cual se ofrece una guía aquí . Describen una clave pública maestra (RSA 4096-bit) utilizada para firmar claves menores, como las que firman versiones particulares del sistema operativo Qubes. Pude verificar mi descarga usando su hash de firma separada firmado por la clave menor correcta. ¿Cómo verifico que la clave menor esté firmada por la clave maestra (dado que no se ofrece ninguna firma para ella)?

Esta pregunta motiva a otra: ¿Cómo acompañan el contenido las firmas "generalmente"? ¿PGP, TLS, etc. simplemente concatenan la firma con el texto cifrado o la imagen previa rellenada, o es necesario que haya dos archivos / paquetes separados? Muchas gracias de antemano.

    
pregunta Polite Master 19.04.2016 - 01:36
fuente

2 respuestas

4

La comprobación de una clave está firmada

La respuesta corta es que utiliza el comando gpg --list-sig <key id> .

Por ejemplo, fui al sitio que mencionaste anteriormente y descargué la clave de firma de qubes release 2. Luego importé esa clave en mi llavero local de gpg:

$ gpg --import qubes-release-2-signing-key.asc

que da como resultado lo siguiente

pub   rsa4096/0A40E458 2012-11-15 [SC]
uid   [ unknown] Qubes OS Release 2 Signing Key

Para verificar si la clave ha sido firmada, puedes usar el comando gpg --list-sig <key id> .

En este caso, podemos ver que la ID de clave es 0A40E458 de la salida anterior:

$ gpg --list-sig 0A40E458
pub   rsa4096/0A40E458 2012-11-15 [SC]
uid         [ unknown] Qubes OS Release 2 Signing Key
sig 3        0A40E458 2012-11-15  Qubes OS Release 2 Signing Key
sig          36879494 2012-11-15  [User ID not found]

La última entrada es la clave maestra de Qubes, pero se desconoce porque no la tengo en mi llavero. Si luego descargo la clave maestra y la agrego al conjunto de claves:

$ gpg2 --import ./qubes-master-signing-key.asc 
gpg: key 36879494: public key "Qubes Master Signing Key" imported
gpg: Total number processed: 1
gpg:               imported: 1

Puedo verificar de nuevo y ver que la clave de liberación está firmada correctamente:

$ gpg2 --list-sig 0A40E458
pub   rsa4096/0A40E458 2012-11-15 [SC]
uid         [ unknown] Qubes OS Release 2 Signing Key
sig 3        0A40E458 2012-11-15  Qubes OS Release 2 Signing Key
sig          36879494 2012-11-15  Qubes Master Signing Key

Verificación de firmas

Cuando un archivo se firma con una clave gpg, se crea un archivo de firma separado. Con el ejemplo de qubes, lanzan un archivo .DIGESTS . Consulte el encabezado "Verificación de compendios" en el enlace que proporcionó para obtener más detalles sobre cómo verificar dicho compendio.

Básicamente, lo que han hecho es tomar el archivo que se supone que proviene de ellos y ejecutar una variedad de algoritmos hash en su contra. Una función hash tomará un archivo o mensaje de entrada, y generará una cadena hash bastante corta única. Esto se crea criptográficamente de manera que hace que sea muy difícil o casi imposible encontrar cualquier otro archivo que produzca la misma salida.

Luego, firman esta cadena de hash con su clave GPG. Tanto el hash como la firma de ese texto hash se colocan dentro del archivo .DIGESTS.

Lo importante a tener en cuenta con este proceso es que cualquier cambio en el archivo original que se está verificando producirá una cadena de hash completamente diferente. Por lo tanto, cuando ejecuta el comando de verificación, lo que está sucediendo en su máquina local es que su sistema está creando su propio hash del archivo dado y comprobando que coincida con el hash dentro del texto firmado. Si ambos coinciden, y se verifica que la firma proviene de la clave en la que ya ha decidido confiar, entonces sabe que el propietario de la clave ha "firmado" la versión del archivo que ha descargado.

    
respondido por el Dave Satchell 19.04.2016 - 10:37
fuente
1

La verificación correcta de las firmas clave se realiza con --check-signatures así:

$ gpg --check-signatures
pub   rsa4096 2017-03-06 [SC]
      5817A43B283DE5A9181A522E1848792F9E2795E9
uid           [ unknown] Qubes OS Release 4 Signing Key
sig!3        1848792F9E2795E9 2017-03-06  Qubes OS Release 4 Signing Key
sig!         DDFA1A3E36879494 2017-03-08  Qubes Master Signing Key

Al final se mostrará un resumen de la cantidad de firmas buenas / malas ...

gpg: 2 good signatures

Parece un pequeño detalle, pero la forma en que gpg transmite información importante acerca de las claves es desafortunadamente críptica. La firma de la clave no se informa como buena / correcta a menos que el designador sig sea seguido inmediatamente por un signo de exclamación ! . Una mala firma se muestra como un signo menos. El uso de los comandos de "lista" no realiza esta verificación (observe los símbolos que faltan cuando se usa --list-sig ), que es de lo que trata la pregunta.

    
respondido por el tasket 02.01.2018 - 08:56
fuente

Lea otras preguntas en las etiquetas