Perché le chiavi master PGP hanno una sola sottochiave e associano la certificazione alla firma per impostazione predefinita?

32

Dopo aver appreso di più sulle sottochiavi PGP e su come suddividere i ruoli di (S) igning, (E) ncryption, (A) uthentication e (C) ertification, ho scoperto che nella maggior parte dei casi (?) una chiave master predefinita ha una sottochiave per separare il lavoro di crittografia:

pub  2048R/AAAAAAAA  usage: SC
sub  2048R/BBBBBBBB  usage: E

Qui, AAAAAAAA è la chiave principale. S consente di firmare il contenuto, C consente di creare nuove sottochiavi. (Un vantaggio di questo è che puoi dare a AAAAAAAA un tempo di scadenza più lungo di BBBBBBBB e quindi creare una nuova chiave di crittografia con AAAAAAAA perché ha il permesso di utilizzo C .)

Tuttavia, mi sembra che quanto segue non sarebbe meno sicuro per gli utenti che lavorano su una singola macchina, ma offre maggiore sicurezza per gli utenti che desiderano ricevere posta crittografata, ad esempio, lavoro e casa:

pub  2048R/AAAAAAAA  usage: C
sub  2048R/BBBBBBBB  usage: E
sub  2048R/CCCCCCCC  usage: S

Con questa configurazione, la chiave principale AAAAAAAA non può firmare / verificare o crittografare / decrittografare, ma può raccogliere fiducia. Pertanto, puoi dare al master AAAAAAAA key un tempo di scadenza più lungo e usarlo per aggiungere nuove sottochiavi. Esportando quindi BBBBBBBB e CCCCCCCC , ad esempio, in un computer di lavoro separato che viene spostato molto di più ed è meno sicuro, senza la chiave principale, se il computer di lavoro è compromesso, le sottochiavi può essere revocato e nuove chiavi aggiunte, senza perdere alcuna reputazione.

(Puoi anche arrivare fino alla parte segreta della chiave di certificazione principale in un Bunker Segreto Super Sicuro, naturalmente.)

So che impostarlo sembrava impossibile attraverso una GUI (non sembrano acuti nelle sottochiavi, né la visualizzazione o la modifica, né tanto meno il controllo di ciò che la chiave master può e non può fare), ma la mia domanda è :

Esiste un motivo specifico per cui questo non viene fatto con le implementazioni PGP esistenti? L'esportazione di chiavi segrete su altre macchine senza i privilegi di certificazione sembra una grande vittoria per la sicurezza. (Se solo le GUI rendessero tutto più semplice.) Il mio unico pensiero possibile è che l'importazione di sottochiavi segrete con una chiave segreta disabilitata non sia ampiamente supportata, dato che --export-secret-subkeys (nella pagina man di gpg(1) ) suggerisce:

--export-secret-keys

--export-secret-subkeys
       Same  as --export, but exports the secret keys instead.  This is
       normally not very useful and a security risk.  The  second  form
       of  the  command  has  the special property to render the secret
       part of the primary key useless; this  is  a  GNU  extension  to
       OpenPGP  and  other  implementations can not be expected to suc‐
       cessfully import such a key.  See the option  --simple-sk-check‐
       sum  if  you  want  to import such an exported key with an older
       OpenPGP implementation.

Modifica : sembra che Debian segua questa stessa pratica? link

    
posta Adam Prescott 10.03.2013 - 21:38
fonte

3 risposte

25

Ho due punti di vista su questo tema: uno è basato su fatti storici (ed è un po 'tecnico), mentre l'altro è puramente il mio, parere originale.

In ogni caso, sembra davvero più sicuro, o almeno conveniente , per usare una chiave separata per le firme; in questo modo, si utilizza solo la chiave master per le certificazioni (e può essere memorizzata) e non è necessario ripetere tutto il processo di certificazione (riunioni IRL) se la chiave è compromessa.

Dati storici

Dopo aver esaminato attentamente il codice sorgente C delle versioni GnuPG stabili (1.4 e 2.0), ho trovato la funzione responsabile per l'impostazione delle funzionalità predefinite delle chiavi pubbliche; il codice (nel file g10/misc.c ) ha il seguente aspetto:

476 int
477 openpgp_pk_algo_usage ( int algo )
478 {
479     int use = 0;
480
481     /* They are hardwired in gpg 1.0. */
482     switch ( algo ) {
483       case PUBKEY_ALGO_RSA:
484           use = (PUBKEY_USAGE_CERT | PUBKEY_USAGE_SIG
485                  | PUBKEY_USAGE_ENC | PUBKEY_USAGE_AUTH);
486           break;
487       case PUBKEY_ALGO_RSA_E:
488           use = PUBKEY_USAGE_ENC;
489           break;
490       case PUBKEY_ALGO_RSA_S:
491           use = PUBKEY_USAGE_CERT | PUBKEY_USAGE_SIG;
492           break;
...
509       default:
510           break;
511     }
512     return use;
513 }

Ho trovato questa funzione perché prima ho visto come è stata generata la generazione della chiave ( g10/keygen.c ); è infatti durante la generazione della (sotto) chiave che GnuPG può dare i "ruoli" per le chiavi. Una volta creata una chiave master, non puoi cambiarne le capacità.

Il codice sorgente non ha rivelato molto (tranne che una chiave RSA per signing viene fornita anche con la possibilità di certificare ), ma è in esecuzione una ricerca sul Web per il commento (riga 481 sopra) mi ha portato a un messaggio pubblicato il 2005-08-03 nella mailing-list gnupg-users , dicendo :

GnuPG does not yet distinguish between C and S. So it does not make much sense to have a way of selecting this.

Quindi, sembra che quelle impostazioni predefinite esistano solo perché GnuPG non faceva alcuna distinzione tra le chiavi di firma e le chiavi di certificazione.

Inoltre, queste impostazioni predefinite potrebbero essere presenti a causa di DSA , come Simon Richter ha indicato :

For quite some time, gpg used DSA keys by default, which can only be used for signing, and then had to attach an elGamal subkey (which can be used for encryption only) to get a fully functional key.

For RSA, that isn't necessary, but it was kept for some reason.

The "sign only" or "encrypt only" RSA subtypes are not technical limitations on the algorithm.

Fatti originali

Al giorno d'oggi, credo che l'unica ragione per cui (le funzionalità della chiave primaria predefinita impostate su SC e non C solo) sia per aiutare utenti regolari con le firme di verifica .

Supponiamo che tu abbia queste due chiavi nel tuo mazzo di chiavi:

pub  4096R/00000001  1970-01-01       usage: C
uid                  Alice Owl
sub  4096R/AE687A0C  1970-01-01       usage: S
sub  4096R/F77A9AF1  1970-01-01       usage: E

pub  4096R/FFFFFFFE  1970-01-01       usage: CS
uid                  Bob Penguin
sub  4096R/00FF42CD  1970-01-01       usage: E
  • Alice Owl è un normale utente di GnuPG, è fiduciosa con OpenPGP e genera una coppia di chiavi con il flag --expert di GnuPG, quindi può impostare le proprie abilità chiave. La chiave primaria ha il C flag ovviamente , ma < strong> firma i documenti con una sottochiave.
  • Bob Penguin conosce a malapena qualsiasi cosa sulla crittografia. L'unica cosa che vuole è un po 'di privacy / intimità. Ha generato la sua chiave come qualsiasi utente normale (senza toccare alcuna impostazione che non capisce).

Ora, fingiamo che anche tu, il lettore, sia un principiante. Riceverai documenti firmati sia da Alice che da Bob. Conosci le basi di gnupg , in particolare:

  • Gli utenti sono identificati con le loro chiavi primarie:
    • Quindi so che Alice è 00000001 e so anche che Bob è FFFFFFFE .
  • Puoi verificare i messaggi con le opzioni --verify o --verify-files di GnuPG.

Ora, controlliamo i documenti che ti hanno inviato.

$ gpg --verify from-bob.txt.asc
gpg: Signature made <date> using RSA key ID FFFFFFFE
gpg: Good signature from "Bob Penguin"

$ gpg --verify from-alice.txt.asc
gpg: Signature made <date> using RSA key ID AE687A0C
gpg: Good signature from "Alice Owl"

Wait, what? I thought Alice's key was 00000001?

In effetti, le firme sui documenti sono not necessariamente fatte con la chiave master; sono fatti con la chiave che ha la capacità di firma ( S ). È improbabile che un principiante lo sappia.

Forse la spiegazione effettiva ha nulla da fare con questa assunzione ("più i principianti usano SC chiavi, meglio è per gli altri principianti"), ma questa è l'unica spiegazione che posso venire con senza dare fastidio ai contributori di GnuPG.

    
risposta data 08.05.2014 - 18:16
fonte
8

Diti ha quasi ragione sul contesto storico, ma la vera ragione storica è nella parte che lui / lei ha omesso.

Per un po 'di tempo, gpg utilizzava le chiavi DSA per impostazione predefinita, che possono essere utilizzate solo per la firma e quindi dovevano allegare una sottochiave elGamal (che può essere utilizzata solo per la crittografia) per ottenere una chiave completamente funzionale.

Per RSA, non è necessario, ma è stato mantenuto per qualche motivo.

I sottotipi RSA "solo segno" o "encrypt only" non sono limitazioni tecniche nell'algoritmo.

    
risposta data 24.04.2015 - 11:10
fonte
6

Quando si creano chiavi diverse per la firma dei dati e per la firma dei certificati, le persone che "firmano la chiave" devono effettivamente firmare la propria chiave certificazione , non la chiave di firma dei dati; altrimenti, il Web of Trust non riporterà la tua chiave oltre la tua chiave. Tuttavia, quando si firma un'e-mail, lo si fa con la chiave di firma dei dati, non con la chiave di certificazione, e questa è la chiave pubblica di firma dei dati che viene copiata nell'e-mail.

Quindi separare le chiavi di firma e certificazione è fattibile, ma richiede che le persone coinvolte e / o le implementazioni software siano più attente a ciò che firmano e distribuiscono. Posso immaginare che potresti incontrare problemi di usabilità.

    
risposta data 10.03.2013 - 21:51
fonte