E 'possibile rilevare la lunghezza della password dall'hash? Il raddoppiamento della password aumenta la sicurezza?

4

Supponendo che un servizio non memorizzi una password in testo semplice, ho ragione nel dire che la risposta a questa domanda dipende dal servizio? In caso di servizio scadente, la lunghezza dell'hash è correlata alla lunghezza della password. Con un buon servizio, non sono correlati. Questa è la mia ipotesi.

Inoltre, in che misura raddoppiare una password aumenta la sicurezza? Quindi, invece di usare password , che ne dici di usare passwordpassword ?

Tieni presente che non sono un esperto, quindi una spiegazione user-friendly sarebbe gradita.

    
posta superuser 15.01.2013 - 21:55
fonte

7 risposte

18

Se la lunghezza dell'hash varia a seconda dell'input, non è un hash. Una funzione di hash crittografica , per definizione, offre un output a dimensione fissa, indipendentemente dall'input. Ad esempio, SHA-256 offre un output a 256 bit, sempre; mai più e mai meno.

L'hashing della password è un'attività specifica che viene spesso discussa in questo sito. La risposta breve è: usa bcrypt . Gestisce correttamente i dettagli precisi e ce ne sono molti.

Per quanto riguarda il "raddoppio" della password, aggiunge sicurezza solo nella misura in cui puoi decidere se farlo o meno, raddoppiando così la dimensione dello spazio delle possibili password. Se lo fai sistematicamente, allora no, non aumenta la sicurezza. Inoltre, la lunghezza della password può perdere (quando si digita una password, i colleghi dell'ufficio potrebbero facilmente sentire il numero di sequenze di tasti, ad esempio).

La forza delle password non deriva da caratteri speciali o lunghe o da altre regole tradizionali; una password è esattamente strong come avrebbe potuto essere diversa . Il numero di valori possibili per una password (dato il tuo metodo per generare la password) è il parametro chiave. Qualunque cosa "spiritosa" qui è una cattiva idea: ricorda che dobbiamo assumere che l'aggressore sia sempre intelligente come te. Quindi non provare a creare password con l'idea di "l'attaccante non penserà mai a quello !": L'attaccante ci ha già pensato, prima di te.

Una buona password viene generata in modo casuale, con dadi, monete che lanciano, il tuo gatto che insegue un mouse giocattolo su una tavola che è stata divisa in aree numerate, o anche, se si arriva a questo, con un computer che esegue un generatore di numeri casuali .

    
risposta data 15.01.2013 - 22:08
fonte
8

In un mondo perfetto, Thomas Pornin è completamente corretto. La lunghezza di output fissa dovrebbe offuscare completamente il contenuto, per includere la lunghezza di quel contenuto.

Esistono, tuttavia, esempi di utilità di hashing che si espongono a diversi tipi di crittanalisi che possono rivelare informazioni come la lunghezza del contenuto. L'esempio più notevole di questo è, naturalmente, l'hash NTLMv1. A causa di una spaccatura nel vortice temporale della matematica, l'hash NT LanMan v1 riempirà un valore più breve di 8 caratteri che riempirà il resto del flusso di input e quindi produrrà un valore di output consistente del secondo blocco dell'hash . Letteralmente, se hai password con meno di 8 caratteri, otterrai un secondo blocco coerente di "0xAAD3B435B51404EE". Se sei interessato a un buon vecchio "face palm" leggendo solo la ricerca web sulla sicurezza LANMAN. Bei tempi.

Quindi il take away qui dovrebbe essere: sì, i sistemi di hashing dovrebbero fornire sempre un output unico per input diversi, e non dovrebbe mai fornire any informazioni sui contenuti utilizzati per generare quell'hash. Come sviluppatore o ricercatore di sicurezza, tuttavia, hai anche la responsabilità di ricercare tutti i tuoi sistemi / algoritmi di crittografia / hashing per assicurarti che siano conformi ai tuoi obiettivi di sicurezza.

    
risposta data 22.01.2013 - 19:56
fonte
4

Le funzioni hash crittografiche offrono un output a lunghezza fissa e non "correlano" con l'input (non lo fai ottenere un "close output" per un "close input", se solo un bit differisce nell'input, quindi l'output sarà tutto criptato).

Quindi, l'unico modo per l'autore dell'attacco di ottenere la lunghezza della password dall'hash è quello di ottenere la password vera e propria, esatta fino all'ultimo bit.

Se la tua password ha abbastanza entropia (cioè è stata scelta a caso da un insieme abbastanza ampio di possibili valori di password) e la funzione di hash è adeguato , quindi questo richiederà troppo sforzo perché l'attaccante abbia successo con una probabilità non trascurabile.

(Naturalmente, i tuoi colleghi di lavoro o compagni di stanza possono semplicemente prestare attenzione quando digiti la tua password: non è così difficile contare le sequenze di tasti del suono che fanno ...)

    
risposta data 22.01.2013 - 19:40
fonte
3

Con qualsiasi schema di hash serio, la dimensione dell'hash sarà costante e più in generale il valore dell'hash non dipende dalla password in alcun modo rilevabile. Se la dimensione dell'hash dipende dalla password, allora lo schema di hashing è completamente infranto - probabilmente non è un hash, bensì una crittografia (cioè qualcosa di reversibile).

Se il raddoppiamento della password aumenta la sicurezza dipende dall'attaccante. Mi aspetto che tu stia pensando all'attentatore che cerca di trovare la password dall'hash (se l'attaccante prende la tua password da un keylogger, ovviamente non fa differenza). Se l'utente malintenzionato tenta le password in ordine crescente di lunghezza, raddoppiare la password lo rende molto più resistente, ma pochi attaccanti sono così stupidi. Se l'utente malintenzionato utilizza una distribuzione generica ragionevole di password quando tenta di annullare l'hash, raddoppiare la password non aggiunge molto. Se l'attaccante ti sta bersagliando e sa che hai raddoppiato la password, allora il raddoppio è stato inutile.

Esiste un modo per quantificare la quantità di lavoro che uno schema di selezione delle password causa per un utente malintenzionato: contare quante password sono possibili, senza che l'aggressore possa sapere quale è stato scelto. Questa è chiamata entropia della password. Se lanci una moneta per decidere se raddoppiare o meno la tua password, allora l'attaccante non ha modo di sapere se lo hai raddoppiato, quindi ha il doppio del lavoro (un bit in più di entropia).

Dovendo digitare, in media, la metà (il 50% delle probabilità di dover digitare il doppio) non è un buon investimento per raddoppiare semplicemente il lavoro dell'aggressore. Se invece aggiungi un'altra lettera a caso alla fine della tua password, moltiplichi il lavoro del pirata informatico di 26, che è circa 4,7 bit di entropia. Se devi semplicemente lanciare una moneta per decidere se aggiungere a o b alla fine della tua password, questo aggiunge un bit di entropia e solo un carattere extra da digitare.

Inoltre, se l'utente malintenzionato ha informazioni parziali sulla tua password (ad esempio dall'osservazione o dall'ascolto digitato), è probabile che la lunghezza sia parte di tale informazione. Quindi il raddoppio non porta sicurezza in questo scenario; uno schema di selezione della password a lunghezza fissa è più robusto.

    
risposta data 15.01.2013 - 22:18
fonte
2

Come ha detto Thomas, una vera e propria funzione di hash crittografica non dovrebbe contenere nessuna informazione sulla password. Questo è dovuto a poche cose:

  • Uscita a lunghezza fissa: l'output dell'hash avrà sempre una certa lunghezza (varia in base all'algoritmo), indipendentemente dalla lunghezza o meno della password.
  • Output unici e dissimili: qualsiasi modifica della password dovrebbe comportare una modifica così significativa dell'output, che due password molto simili (ad esempio: "password1" e "password2") non sono simili dopo l'hashing.
  • Unico, per utente sale: un elemento aggiunto viene utilizzato nella funzione di hashing che è univoca per ciascun utente, in modo che due utenti che scelgono la stessa password non abbiano lo stesso hash della password.

Come è stato menzionato nei miei commenti, e incluso nella risposta di Grawulf, ci sono stati storicamente esempi di funzioni di hashing che violano questi principi. Forse l'esempio più noto di questo è LANMAN (a.k.a .: hash LM o hash di LAN Manager). Questa funzione di hashing è stata utilizzata nelle versioni di Windows precedenti a NT ed è ancora inclusa (sebbene disabilitata per impostazione predefinita) per la compatibilità con le versioni precedenti nelle versioni moderne.

I problemi con LANMAN sono molti, ma molti di essi sono radicati nel suo uso di DES - in particolare la parte che consente di indovinare la lunghezza della password di un utente. DES è limitato a una lunghezza della chiave a 56 bit, che si traduce in 7 byte o caratteri ASCII. Ovviamente questo doveva essere noto, anche nei giorni precedenti al NT, essere troppo piccolo per una password abbastanza strong.

Quindi, il lavoro di Microsoft consisteva nel dividere a metà la password dell'utente, l'hash ogni metà separatamente, quindi attaccare le stringhe di hash per formare l'hash LM finale. Ciò consentirebbe agli utenti di creare password lunghe fino a 14 caratteri. Per le password più brevi di 14 caratteri, alla fine verrà aggiunto un riempimento di caratteri null (prima della divisione della password) per compilare il resto delle chiavi DES. Ovviamente, questo significa che tutte le password più brevi di 7 caratteri finirebbero con la seconda metà del loro hash (avendo iniziato come tutti i caratteri null e hash senza sale) essendo identiche a tutte le altre password più brevi di 7 caratteri.

Se Microsoft avesse usato una soluzione per utente, avrebbe almeno impedito di indovinare facilmente la lunghezza della password di un utente dall'output dell'hash. Avrebbe anche reso gli attacchi con i dizionari molto più difficili. Tuttavia, ci sono altre debolezze intrinseche (oltre lo scopo di questa domanda) nella funzione che ancora la rendono del tutto inadatta per l'uso nel mondo di oggi.

Le moderne funzioni di crittografia sono molto più potenti e intelligenti di questo, e quindi molto meno probabilità di perdite di dati particolari sulla lunghezza della tua password. Tuttavia, è bene tenere a mente questo dettaglio storico come un esempio di come non alle password hash. (Naturalmente, non è mai una buona idea girare la tua crittografia in ogni caso.)

SUGGERIMENTO: mentre le password di hashing con LANMAN sono state disabilitate per impostazione predefinita da Vista, è ancora una funzionalità disponibile per la retrocompatibilità. Se vuoi assicurarti che le tue password di Windows non possano e quindi non siano elaborate come LM hash su qualsiasi sistema Windows, nonostante come l'amministratore di sistema possa configurarlo, assicurati le tue password hanno una lunghezza minima di 15 caratteri.

    
risposta data 22.01.2013 - 20:52
fonte
0

Un concetto chiamato entropia (o casualità) è la chiave. Un attacco di forza bruta deve semplicemente soddisfare il livello più basso di entropia coinvolta. In generale, una password ben hash avrà una lunghezza tale da avere un'entropia superiore rispetto a una password media. È possibile cercare le collisioni contro gli hash, ma se la password che usi ha meno entropia rispetto all'hash stesso, allora è più semplice provare a indovinare la password.

Ad esempio, se la mia password 123 è sottoposta a hash su a3afj93a93ufa9f9uafnmac, per l'hash occorrerebbero molte meno ipotesi di quante se la mia password avesse un'entropia o una casualità simile o maggiore. Un attacco chiamato tabella arcobaleno può essere utilizzato contro un numero elevato di hash nello stesso momento se non sono adeguatamente protetti calcolando gli hash per le password a bassa entropia e cercando le corrispondenze. Il concetto di sale aumenta l'entropia della password prima dell'hashing aggiungendo un valore casuale all'inizio della password. Questo fa in modo che ogni password debba essere attaccata individualmente anche se l'attaccante ha accesso alle tabelle hash.

    
risposta data 15.01.2013 - 22:41
fonte
0

Un semplice esempio. Il mio algoritmo di hashing funziona come segue. Dato un numero N, l'hash di quel numero è definito come

HASH(N)=N%100.

Se ho dato 123 come hash di input sarà 23 che è 123% 100. Se ho dato 2365736 come hash di input sarà 36. Se l'input è 123867823 l'hash sarà 23. Ora la domanda per voi. Se viene dato 23 come valore di hash puoi dire il suo valore di input? non puoi dire un valore perfetto.

La funzione di hash non è esattamente simile a questa, perché genererà valori duplicati 23 come hash per 123 e 175623. In questo modo una funzione di hash non è reversibile.

    
risposta data 23.01.2013 - 06:56
fonte

Leggi altre domande sui tag