Sto indebolendo la crittografia simmetrica OpenPGP implementando una pre-derivazione personalizzata?

6

Uso spesso GnuPG per crittografare i file con una passphrase. Sono molto paranoico e temo che la derivazione della chiave usata da GnuPG non sia abbastanza lenta.

Per questo motivo, ho deciso di eseguire la derivazione della mia chiave prima di inserire la passphrase in GnuPG.

Ho uno script Python che esegue 10 milioni di round di PBKDF2-SHA512 con un salt statico e restituisce il risultato codificato in hex. Io chiamo questo 'pre derivation'.

Per prima cosa eseguo questo nella passphrase e trasmetto il suo output a GnuPG come passphrase intermedio.

Sono sulla buona strada, o sto sprecando il mio tempo facendo questo, o anche peggio, indebolendo la sicurezza della crittografia?

    
posta Paranoid GPG 13.03.2016 - 22:49
fonte

2 risposte

11

A parte il fatto che faresti meglio a non distribuire codice crittografico personalizzato , stai reinventando la ruota . La funzionalità string-to-key di OpenPGP è configurabile e può essere adattata alle tue esigenze, senza perdere la compatibilità. Non sto discutendo le tue scelte nel numero di cicli qui, anche se sembrano un po 'aspri. Ti consiglio di leggere A che punto l'aggiunta di ulteriori iterazioni a PBKDF2 non fornisce ulteriore sicurezza? su questo argomento.

Da man gpg :

--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.

--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.

Per concludere, le seguenti opzioni avranno lo stesso effetto:

gpg --s2k-mode 3 --s2k-digest-algo SHA512 --s2k-count 10000000 --symmetric

--s2k-mode 3 è l'impostazione predefinita di GnuPG (e solo l'impostazione ragionevole per questa opzione); Non ho incluso --s2k-cipher-algo poiché questo non è rilevante per la derivazione della chiave (e non gestito dalla "pre-derivazione" che hai descritto, comunque). In alternativa, puoi impostarlo come predefinito in gpg.conf :

s2k-mode 3
s2k-digest-algo SHA512
s2k-count 10000000

Queste opzioni possono essere utilizzate non solo per la crittografia simmetrica di messaggi / file, ma anche per la protezione passphrase delle chiavi private.

    
risposta data 13.03.2016 - 23:19
fonte
2

Pur proteggendo la passphrase è la parte più critica per la sicurezza di GPG, le probabilità sono che si indebolisca la sicurezza esistente anziché rafforzarla.

È fondamentale provare a ridurre al minimo il tempo in cui la passphrase si trova nella memoria del computer. Sono certo che GPG azzeri in modo appropriato la memoria per minimizzare l'esposizione. Ma i linguaggi di gestione della memoria come Python non facilitano realmente la manipolazione protetta delle stringhe. Ciò significa che la passphrase iniziale, così come quella passata a GPG, sarà probabilmente lasciata nella memoria virtuale del tuo computer (leggi come su disco). Quanto è probabile che ciò sia estratto è di discussione, ma è certamente molto più grande del tempo in cui GPG lascerà la tua chiave in giro.

Inoltre non menzioni il modo in cui inserisci l'hash SHA512 in GPG. Se lo stai stampando e magari copiandolo e incollandolo in GPG, sarebbe terribile. (I buffer di copia non dovrebbero mai essere usati per dati segreti.)

Quindi ti consiglio di utilizzare le opzioni GPG esistenti (consulta la risposta di @JenErat per un'eccellente panoramica) e prova per ricordare che non devi stampare la tua crittografia .

    
risposta data 13.03.2016 - 23:27
fonte

Leggi altre domande sui tag