In che modo GnuPG crittografa le chiavi segrete?

5

Quando si crea una chiave segreta con GnuPG, viene richiesta una password per proteggerla. Quale algoritmo di crittografia viene utilizzato per raggiungere questo obiettivo? Il manuale dice solo che viene utilizzato un algoritmo di crittografia simmetrico.

    
posta moe1 01.04.2016 - 21:46
fonte

3 risposte

7

GnuPG 2.x ha un gpg-agent separato che è il custode delle chiavi segrete e che non offre alcun controllo sui parametri di crittografia delle chiavi segrete all'interno.

Inoltre, --s2k è accettato ma ignorato quando si imposta una passphrase o si esporta una chiave segreta.

C'è un numero sul bug tracker su questo e, quando viene seguito su mailing list , la risposta è stata

No, that is not possible. Right now the agent always uses AES and S2K paremeters which require on the running machine about 100ms for decryption.

Quindi credo che la situazione attuale sia che le chiavi sono detenute dall'agente in quanto l'agente decide che è meglio raggiungere il suo obiettivo di velocità sulla macchina in esecuzione e non c'è modo di controllarlo o esportarlo in modo diverso. Tutte le esportazioni che ho provato hanno come risultato attributi chiave che puoi vedere in questo modo:

$ gpg --export-secret-key DEADBEEF | gpg --list-packets
iter+salt S2K, algo: 7, SHA1 protection, hash: 2, salt: ...

Questo rivela la chiave simmetrica ( algo ) e hashing (hash ) algoritmi in uso, come definito in RFC4880 . Quanto sopra mostra che algo: 7 è AES con chiave a 128 bit e hash: 2 è SHA-1 .

Il tag iter+salt è la modalità stringa-a-chiave che GnuPG usa per convertire il passphrase (stringa) in una chiave. Il valore predefinito iter+salt significa che un salino viene aggiunto alla passphrase e quella stringa viene hash più volte (una tecnica chiamata allungamento della chiave che mira ad aumentare la difficoltà delle passphrase forzanti brute).

In questo modo viene illustrato come GnuPG crittografa le chiavi segrete e sottolinea il fatto che non si ha alcun controllo su di esso se si utilizza la versione 2.x a causa del suo utilizzo di gpg-agent .

    
risposta data 25.01.2017 - 10:47
fonte
5

Fase 1: derivazione chiave simmetrica

Innanzitutto, la passphrase viene utilizzata per derivare una chiave per la crittografia simmetrica utilizzando una funzione da stringa a chiave . In GnuPG si possono regolare diverse impostazioni, come l'algoritmo di hashing e il numero di ripetizioni. Dal manuale di GnuPG :

--s2k-digest-algo name

Use name as the digest algorithm used to mangle the passphrases for symmetric encryption. The default is SHA-1.

--s2k-mode n

Selects how passphrases for symmetric encryption are mangled. If n is 0 a plain passphrase (which is in general not recommended) will be used, a 1 adds a salt (which should not be used) to the passphrase and a 3 (the default) iterates the whole process a number of times (see --s2k-count).

--s2k-count n

Specify how many times the passphrases mangling for symmetric encryption is repeated. This value may range between 1024 and 65011712 inclusive. The default is inquired from gpg-agent. Note that not all values in the 1024-65011712 range are legal and if an illegal value is selected, GnuPG will round up to the nearest legal value. This option is only meaningful if --s2k-mode is set to the default of 3.

Fase 2: crittografia simmetrica

Usando questa chiave simmetrica, la chiave privata viene crittografata simmetricamente. Anche l'algoritmo di crittografia può essere scelto, mentre AES-128 è l'impostazione predefinita in GnuPG.

--s2k-cipher-algo name

Use name as the cipher algorithm for symmetric encryption with a passphrase if --personal-cipher-preferences and --cipher-algo are not given. The default is AES-128.

Le cifre supportate possono essere visualizzate eseguendo gpg --version , ad esempio:

$ gpg --version
[...]
Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
        CAMELLIA128, CAMELLIA192, CAMELLIA256

A differenza degli algoritmi a chiave pubblica-privata (dove GnuPG 2.1 ha aggiunto le curve ellittiche), gli algoritmi simmetrici supportati sono gli stessi tra tutte le versioni in qualche modo attuali di GnuPG.

Tutte queste opzioni possono anche essere impostate in ~/.gnupg/gpg.conf , dove vengono annotate senza il prefisso -- .

    
risposta data 01.04.2016 - 22:08
fonte
0

Secondo questo articolo , puoi scegliere quale crittografia da utilizzare per la crittografia dei dati (che presumo include la crittografia delle chiavi, dal momento che è solo un file, giusto?) dal seguente elenco:

Cypher: 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH, CAMELLIA128, CAMELLIA192, CAMELLIA256

EDIT:

Dopo aver scavato un po 'nelle pagine man e su google, puoi modificare l'impostazione predefinita tramite una serie di impostazioni (vedi questa domanda per i dettagli: Come cambiare la cifratura predefinita in GnuPG su Linux e Windows? )

Non riesco a trovare nulla che menzioni in modo specifico la crittografia delle chiavi private, quindi suppongo che utilizzi solo ciò che è impostato come cifrario simmetrico predefinito.

    
risposta data 01.04.2016 - 21:51
fonte

Leggi altre domande sui tag