¿Por qué GPG puede firmar mensajes pero no claves?

1

Estoy tratando de agregar firmas locales a algunas de las claves públicas que tengo en mi anillo de claves, pero el uso de gpg --lsign-key falla con el mensaje "sin clave secreta" a pesar de que gpg --sign funciona. Estoy usando un Yubikey como tarjeta inteligente.

GPG muestra que la clave secreta no está disponible, pero hay una clave de firma en la tarjeta inteligente adjunta:

$ gpg --list-secret-keys
sec#  rsa4096/0xDEADBEEFDEADBEEF 2000-01-01 [SC]
      Key fingerprint = DEAD BEEF DEAD BEEF DEAD  BEEF DEAD BEEF DEAD BEEF
uid                   [ultimate] My Name <[email protected]>
ssb>  rsa4096/0x8BADF00D8BADF00D 2000-01-01 [E] [expires: 2020-12-31]
ssb>  rsa4096/0xBADDCAFEBADDCAFE 2000-01-01 [S] [expires: 2020-12-31]
ssb>  rsa4096/0xFACEFEEDFACEFEED 2000-01-01 [A] [expires: 2020-12-31]

Puedo firmar un mensaje:

$ echo "test" | gpg --sign --armor
gpg: using "DEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBEEF" as default secret key for signing
-----BEGIN PGP MESSAGE-----

[snipped signature]
-----END PGP MESSAGE-----

Pero no puedo --lsign-key :

$ gpg --lsign-key [email protected]

pub  rsa4096/0x782F6D86DED32B71
     created: 2018-08-20  expires: 2019-08-20  usage: SC
     trust: marginal      validity: unknown
sub  rsa4096/0x1C3F44E9CB9F9E3A
     created: 2018-08-20  expires: 2019-08-20  usage: E
[ unknown] (1). Apple Product Security <[email protected]>
[ unknown] (2)  Apple Product Security Notifications <[email protected]>

Really sign all user IDs? (y/N) y
gpg: using "DEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBEEF" as default secret key for signing

pub  rsa4096/0x782F6D86DED32B71
     created: 2018-08-20  expires: 2019-08-20  usage: SC
     trust: marginal      validity: unknown
 Primary key fingerprint: 0CD5 C954 D089 2440 1598  9759 782F 6D86 DED3 2B71

     Apple Product Security <[email protected]>
     Apple Product Security Notifications <[email protected]>

This key is due to expire on 2019-08-20.
Are you sure that you want to sign this key with your
key "My Name <[email protected]>" (0xDEADBEEFDEADBEEF)

The signature will be marked as non-exportable.

Really sign? (y/N) y
gpg: signing failed: No secret key
gpg: signing failed: No secret key

Key not changed so no update needed.

¿Cómo puedo agregar una firma a esta clave para validarla?

    
pregunta Ben 06.12.2018 - 15:38
fuente

1 respuesta

2

La firma y la firma de claves se realiza mediante diferentes subclaves. Tienes:

$ gpg --list-secret-keys
sec#  rsa4096/0xDEADBEEFDEADBEEF 2000-01-01 [SC]
      Key fingerprint = DEAD BEEF DEAD BEEF DEAD  BEEF DEAD BEEF DEAD BEEF
uid                   [ultimate] My Name <[email protected]>
ssb>  rsa4096/0x8BADF00D8BADF00D 2000-01-01 [E] [expires: 2020-12-31]
ssb>  rsa4096/0xBADDCAFEBADDCAFE 2000-01-01 [S] [expires: 2020-12-31]
ssb>  rsa4096/0xFACEFEEDFACEFEED 2000-01-01 [A] [expires: 2020-12-31]

Aquí, DEADBEEF es la clave de toda la clave PGP, válida para S y C ertifying.

Luego tienes tres subclaves (ssb = Secret SuBkeys), válidas para el cifrado E , S y la autenticación A respectivamente (podrías por ejemplo, tenga una única subclave válida tanto para la firma como para la autenticación, pero estas se encuentran en claves diferentes para usted).

Cuando gpg --sign , estás usando BADDCAFE , mientras que para gpg --lsign-key necesitarías DEADBEEF . Es por eso que uno funciona mientras que el otro no.

Ahora, no estoy seguro de por qué está fallando, puede ser que DEADBEEF no esté en absoluto (¿tiene una copia de seguridad sin conexión de la clave completa?), o tal vez es un error al interactuar con la tarjeta inteligente, y es "no encontrarlo", aunque realmente está almacenado allí. Una cosa fácil de revisar sería la cantidad de ranuras que admite su tarjeta inteligente, ya que en algunas de ellas ni siquiera tendría suficientes ranuras para esas cuatro teclas.

    
respondido por el Ángel 06.12.2018 - 20:16
fuente

Lea otras preguntas en las etiquetas