Con openssl des3, quali sono i parametri passphrase?

3

Sto utilizzando OpenSSL 's des3 strumento per crittografare un file, ad es.

openssl des3 -salt -k SUPER_SECURE_PASSPHRASE < inputFile > outputFile

Funziona tutto, ma ora devo scegliere una passphrase di crittografia definitiva e fissa. Non ha bisogno di essere memorizzato, quindi ovviamente sceglierei una sorta di personaggi generati casualmente. Tuttavia, quanto è utile il random e quanto è utile? Sono preoccupato del fatto che inconsapevolmente sto buttando via entropia utile.

Ad esempio, AZQBB sarebbe una passphrase scadente, probabilmente sia a causa della lunghezza che del set di caratteri limitato. Ma, kecqnutaspyyhgheikfzuwkjaoitqooasujjfhhsiiwqoekihaeyhflpijfmnhssdyyy sarebbe povero a causa del suo set di caratteri limitato? Oppure, dU# i?|m:v sarebbe povero a causa della sua lunghezza? È importante sapere come openssl utilizza la passphrase per generare i bit delle chiavi di crittografia e non l'ho trovato documentato da nessuna parte.

Come altro esempio, se openssl ottiene solo i suoi 156 bit dalla rappresentazione ASCII a 8 bit dei primi 21 caratteri della mia passphrase, quindi se mi limito a caratteri non a basso controllo ASCII basso mi butterò via circa 30 bit di entropia.

Quindi, per una passphrase altamente sicura, le mie domande sono:

  • Quanto è lunga la passphrase?
  • Quanto è diverso un set di caratteri di cui ho bisogno?
posta Daniel Griscom 14.01.2016 - 16:41
fonte

2 risposte

4

"openssl des3" è in realtà "openssl enc -des3". La derivazione della chiave basata su password è uno schema personalizzato non documentato che, per quanto riguarda gli schemi di derivazione delle chiavi basati su password, è piuttosto debole; vedi questa risposta (specialmente alla fine) per alcuni dettagli. Fondamentalmente, questo è equivalente all'hashing della password con un paio di invocazioni MD5.

Ciò che conta per le password è entropy , cioè non la lunghezza della password o il tipo di caratteri utilizzati; entropia è una misura di quale potrebbe essere la password . Vedi questa risposta per dettagli su come calcolare l'entropia. Ricorda che l'entropia non è calcolata sulla password stessa, ma analizzando il processo che ha generato la password.

Poiché lo schema di derivazione delle chiavi utilizzato da OpenSSL è piuttosto scadente, è necessaria molta entropia della password per ottenere una sicurezza decente. Come regola generale, il limite del potere computazionale degli attaccanti seri è 2 invocazioni 80 di un primitivo crittografico come MD5 (gli attaccanti ricchi come la NSA avrebbero molti problemi a raggiungere tali livelli computazionali, anche molto organizzazioni ricche come Google o Apple lo troverebbero piuttosto impegnativo e non sarebbero in grado di farlo in modo discreto). In questo caso, dal momento che provare una password significa calcolare approssimativamente due MD5, questo significa che l'entropia della password deve superare 2 79 - cioè "79 bit" perché l'entropia (in crittografia) è normalmente espressa in bit ( che è una scala logaritmica).

SE generi la passphrase come una sequenza di caratteri casuali in un dato alfabeto, con ciascun carattere selezionato in modo casuale, uniforme e (in modo cruciale) indipendentemente dagli altri caratteri della passphrase, THEN l'entropia può essere facilmente calcolata: se usi le lettere minuscole n (26 scelte per ogni carattere), allora entropia è 26 n . Con n = 17 (17 lettere minuscole casuali), quindi entropia è vicino a 2 80 , cioè 80 bit, che, come spiegato sopra, dovrebbe essere sufficiente. Anche un piccolo set di caratteri può essere compensato usando una passphrase abbastanza lunga, perché ciò che conta davvero è l'entropia, non la lunghezza o il tipo di carattere.

Se provi a generare passphrase che "hanno senso" in qualche modo per un essere umano, allora l'entropia è molto più difficile da calcolare, perché la psicologia umana è molto cattiva alla casualità. Di nuovo, vedi la risposta sul calcolo dell'entropia.

    
risposta data 14.01.2016 - 17:35
fonte
0

DES3 utilizza una dimensione massima della chiave di 168 bit, quindi se si deve usare DES3, allora andare per la dimensione massima della chiave. Poiché non stai memorizzando la chiave da solo, dovresti generare la chiave da un CPRNG. Se hai l'opzione dovresti considerare AES che può avere dimensioni maggiori della chiave.

    
risposta data 14.01.2016 - 17:21
fonte

Leggi altre domande sui tag