Priorità della selezione della sottochiave di GnuPG durante la crittografia

4

Ho il seguente set di 6 sottochiavi

$ gpg -K
...
ssb>  rsa2048 2017-10-04 [E] [expires: 2027-10-02]
ssb>  rsa2048 2017-10-04 [S] [expires: 2027-10-02]
ssb>  rsa2048 2017-10-04 [A] [expires: 2027-10-02]
ssb>  rsa2048 2015-02-12 [E] [expires: 2025-01-05]
ssb>  rsa2048 2016-01-05 [A] [expires: 2026-01-02]
ssb>  rsa2048 2016-08-20 [S] [expires: 2026-08-18]

Il contesto è che ho comprato una nuova smart card (Yubikey) e generato nuove sottochiavi per questo. Volevo tenere traccia delle vecchie sottochiavi nel mio pubkey in modo che ad es. Github continua a visualizzare i miei vecchi commit firmati con le vecchie sottochiavi come "verificate".

Tuttavia mi piacerebbe assicurarmi che d'ora in poi solo le nuove sottochiavi siano primariamente usate. per esempio. Se qualcuno mi invia un messaggio crittografato, voglio che utilizzino la nuova sottochiave.

Ho notato che gpg -e utilizza la mia nuova sottochiave di crittografia per impostazione predefinita, quindi funziona come previsto, ma la mia domanda è perché ?

In altre parole in che modo gpg determina quale chiave utilizzare durante la crittografia ? Si basa sull'ordine in cui le sottochiavi vengono salvate nel file (come sopra) o nella data di creazione / scadenza (il più recente ha la priorità)?

    
posta Radek Simko 04.10.2017 - 22:51
fonte

1 risposta

2

GnuPG seleziona sempre il più nuovo (sotto) tasto valido per la rispettiva operazione (di solito, la più recente chiave non revocata con un algoritmo supportato). Anche se si seleziona una sottochiave specifica, GnuPG prima risolve la chiave primaria associata e quindi avvia questo processo di selezione. Per sovrascrivere ciò, postfix ! su una determinata chiave. Questo è qualcosa che potresti fare, ad esempio, nella tua configurazione git, se necessario.

Tuttavia non sono a conoscenza di alcun riferimento normativo ( a parte il codice GnuPG ): né RFC 4880 (OpenPGP) né la pagina man o il manuale di GnuPG sembrano definire il comportamento. Le relative righe di codice dalla funzione di confronto dei tasti:

if (old->validity == new->validity && uid_is_ok (&new->key, uid)
    && old->creation_time < new->creation_time)
  return -1;      /* Both keys are of the same validity, but the
                     NEW key is newer.  */
    
risposta data 05.10.2017 - 10:33
fonte

Leggi altre domande sui tag