Un valore hash crittografato deve essere maggiore della password da cui è stato generato?

4

Stavo leggendo un libro intitolato Introduzione alla teoria e alla pratica della sicurezza della rete, e ho trovato il seguente paragrafo:

Rainbow Tables

A rainbow table is a table of two columns constructed as follows: let be a function that maps an encrypted hash of a password to a string in the domain of possible passwords. This function is referred to as a reduction function, for the length of a password is typically shorter than the length of its encrypted hash value.

Ho notato la parola in genere, ma mi stavo chiedendo:

encrypted_hash < password significa che sarà più facile trovare un modo per decrittografare l'hash?

Perché è così? Perché no?

    
posta Dex 05.11.2015 - 12:26
fonte

4 risposte

8

Per prima cosa: questa NON è crittografia. Questo è hashing. Se il tuo libro parla di "hash crittografato", quel libro è confuso e quindi confuso. In particolare, le password hash non vengono mai "decodificate", poiché non vengono crittografate in primo luogo.

Una funzione di hash crittografica offre una dimensione di output fissa. Nel caso di password , è necessario fare qualcosa di specifico chiamato "password-hashing", che ha una sua teoria (vedi questa risposta per i dettagli). Tuttavia, il principio principale è ancora lì: quando si verifica una password in arrivo, la password viene ridotta in un valore x e tale x viene confrontata con il valore memorizzato. Se la password è quella giusta, si ottiene lo stesso x . Tuttavia, se è stata immessa una password errata, viene ottenuto un altro valore x ', che è distinto da x con alta probabilità .

Questo è il punto importante qui: un utente malintenzionato potrebbe ancora ottenere (molto) fortuna e invece di inviare la password corretta, potrebbe teoricamente inciampare in un'altra password distinta che, per puro caso, darebbe lo stesso valore hash.

Naturalmente, non vogliamo che succeda una cosa del genere, e il modo migliore per rendere quell'evento assolutamente improbabile è quello di rendere questi valori x (cioè l'output della funzione di hash) abbastanza grande per sfortuna che non si verificherà nella pratica. Le funzioni di hash esistenti hanno una dimensione di output che è tipicamente di 16 byte (128 bit) o più. Questo vale anche per le funzioni di hashing della password; per esempio. bcrypt emette 192 byte.

(Ad aggancio dell'effetto è che gli output hash sono binari, ma spesso codificati in Base64 prima della memorizzazione nel database, il che aumenta le dimensioni, inoltre le funzioni di hashing della password richiedono alcuni parametri aggiuntivi, ad esempio un salt , che, in alcune funzioni, sono anche codificati nell'output, espandendo ulteriormente l'output.)

Le password scelte dall'utente raramente superano una dozzina di caratteri di lunghezza, quindi, in generale, l'output dell'hash sarà più grande. Tuttavia, le funzioni di hash possono utilizzare input di grandi dimensioni, quindi non esiste alcun motivo intrinseco perché le uscite hash debbano sempre essere più grandi delle password. Succede semplicemente che è necessario, per contrastare il "fortunato aggressore" descritto sopra, una dimensione di output che è "abbastanza grande" e che "abbastanza grande" è più grande della dimensione media delle password scelte dagli utenti umani.

    
risposta data 05.11.2015 - 15:09
fonte
3

Le tabelle Rainbow sono un elemento di TMTO (Time-Memory-Trade-Off) con cui gli hash delle password sono precalcolati, ma non memorizzati come l'hash stesso. Per memorizzare una password in tale forma, è necessario un punto di partenza T0. Su T si applica la funzione di hash della password e si ottiene H. Ora viene applicata la funzione di riduzione per ottenere un nuovo T1. Questa procedura viene ripetuta per un tempo definito e solo T0 e Tn (l'ultimo nodo) sono memorizzati nella tabella. In un attacco, si ottiene l'hash della password dal DB della password, si applica la funzione di riduzione e si verifica se è uguale a un Tn noto. In tal caso, si avvia quella riga e si calcola l'hash della password di T0. Dopo ogni hash si controlla se il risultato è uguale all'hash che si desidera sapere dal database. In caso contrario, si applica la funzione di riduzione e si continua a calcolare come nella generazione iniziale.

Perché la lunghezza di una password è in genere inferiore alla lunghezza di un hash? Beh, questo è dovuto al fatto che gli umani sono davvero cattivi nella memorizzazione delle password. Anche quando si lascia che scelgano una password senza complessità, molti scelgono "benvenuto" o "password" che sono 49, rispettivamente lunghi 56 bit. Ma anche con MD5 l'hash della password sarebbe 128 bit e con SHA2 molto probabilmente 256 o anche 512 bit. Quindi è sicuro dire che una password è in genere più lunga di un hash della password.

    
risposta data 05.11.2015 - 12:52
fonte
1

Questo ha più a che fare con la natura degli umani, che spesso scelgono password brevi che possono essere ricordate. Viene fatto un grande sforzo per memorizzare password brevi (deboli) in modo sicuro, il key-stretching è una delle misure per gestire le password brevi, non sarebbe necessario per password lunghe e potenti.

L'output di un hash deve consentire combinazioni sufficienti, quindi un utente malintenzionato non può costruire una tabella di ricerca con tutti i possibili risultati, e per evitare molte collisioni, richiede una lunghezza minima. Quindi la lunghezza della password è in genere inferiore alla lunghezza del suo hash.

    
risposta data 05.11.2015 - 12:51
fonte
1

Quando una password ha un'entropia più alta dell'hash, allora diventa più debole tagliandola. Il motivo è che quando viene eseguito un attacco di forza bruta, diventa più probabile trovare una collisione casuale rispetto a trovare la password originale, e una collisione casuale sarebbe accettata proprio come farebbe la password.

Tuttavia, la maggior parte delle funzioni di hash comunemente usate per le password di hashing hanno un'entropia che è di molti ordini di grandezza superiore a qualsiasi password che un normale essere umano possa ricordare ( tranne alcune persone straordinarie ).

    
risposta data 05.11.2015 - 17:33
fonte

Leggi altre domande sui tag