Perché GPG può firmare i messaggi ma non le chiavi?

1

Sto cercando di aggiungere le firme locali ad alcune delle chiavi pubbliche che ho nel mio mazzo di chiavi, ma l'utilizzo di gpg --lsign-key fallisce con il messaggio "nessuna chiave segreta" nonostante il fatto che gpg --sign funzioni. Sto usando un Yubikey come smart card.

GPG mostra che la chiave segreta non è disponibile, ma c'è una chiave di firma sulla smart card allegata:

$ 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]

Posso firmare un messaggio:

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

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

Ma non posso --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.

Come posso aggiungere una firma a questo tasto per convalidarlo?

    
posta Ben 06.12.2018 - 15:38
fonte

1 risposta

2

La firma e la firma delle chiavi sono fatte da diverse sottochiavi. Hai:

$ 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]

Qui DEADBEEF è la chiave dell'intera chiave PGP, valida per l'attivazione di S e C .

Quindi hai tre sottochiavi (ssb = SuBkeys segrete), valide per l'autenticazione E , S e A rispettivamente (potresti per esempio avere una singola sottochiave valida sia per la firma che per l'autenticazione, ma queste sono tutte su chiavi diverse per te).

Quando gpg --sign , stai utilizzando BADDCAFE , mentre per gpg --lsign-key avresti bisogno di DEADBEEF . Ecco perché si lavora mentre l'altro no.

Ora, non sono sicuro del motivo per cui sta fallendo, potrebbe essere che DEADBEEF non sia affatto lì (hai un backup offline della chiave completa?), o forse è un bug quando si interagisce con il smartcard, ed è "non trovandolo", anche se è davvero memorizzato lì. Una cosa facile da recensire sarebbe il numero di slot supportati dalla tua smartcard, poiché su alcuni di essi non avresti nemmeno abbastanza slot per queste quattro chiavi.

    
risposta data 06.12.2018 - 20:16
fonte

Leggi altre domande sui tag