Converti SHA-256 in SHA-1 e MD5 - Aumenta lunghezza / entropia del bit? [duplicare]

4

So che questa è una domanda stupida e di sicuro sto parlando di spazzatura completa, ma lasciami spiegare:

  1. Abbiamo un hash SHA-256 lungo, ad esempio 474bfe428885057c38088d585c5b019c74cfce74bbacd94a7b4ffbd96ace0675 (256 bit)
  2. Ora usiamo l'hash lungo per creare un hash SHA-1 e un MD5 e combinarli. Ad esempio: c49e2143913627ea178e66571189628a41526bf3 (SHA-1; 160 bit ) + 6bb225025371aaa811748da8e011773d (MD5; 128bit )

Quindi ora abbiamo questo: c49e2143913627ea178e66571189628a41526bf36bb225025371aaa811748da8e011773d
(SHA-1 + MD5; 160bit + 128 bit = 288 bit)

Ed è più lungo della stringa di input, con 288 bit invece di 256 bit . Così abbiamo effettivamente aumentato l'entropia?

In breve questo è questo:

hash = sha256(input) # 256bit
result = sha1(hash) + md5(hash) # 288bit

(Questo dovrebbe essere uno pseudo-codice, non so se è valido attraverso.)

Qual è l'errore nel ragionamento qui? Sono sicuro che non puoi aumentare entropia / lunghezza delle stringhe in questo modo ...

Modifica: Importante: forse ho anche diminuito l'entropia o l'ho mantenuta uguale?

    
posta rugk 21.07.2016 - 12:46
fonte

4 risposte

23

And it is longer than the input string, with 288bit instead of 256bit. So did we actually increased the entropy?

No, non hai aumentato l'entropia.

In questo contesto, "entropia" si riferisce fondamentalmente alla probabilità di una particolare ipotesi sul contenuto o sul valore corretto.

Se ti dico che ho hash una singola rappresentazione ASCII di una lettera maiuscola inglese usando SHA256, e che l'hash è esadecimale ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb, allora l'entropia di quel valore non è 256 bit, ma piuttosto più vicina a cinque bit (log2 (26) ~ 4.7) perché devi solo fare al massimo 26 tentativi per arrivare alla conclusione che la lettera che ho cancellato era a . (Per completezza, quello che ho fatto veramente era printf 'a' | sha256sum -b su un sistema nativo UTF-8.)

L'entropia, quindi, non può mai essere maggiore di quella dell'input. E l'input è, nel migliore dei casi, l'hash iniziale, che ha 256 bit di entropia. (Potrebbe avere meno, se la stringa che hai hash ha meno di 256 bit di entropia e l'attaccante può indovinare quello e il suo valore in qualche modo.) Ogni calcolo di hash può essere assunto come O (1) quando la dimensione di input è fissa.

Quindi concatenando gli hash SHA-1 e MD5 di una stringa che è un hash SHA-256, è possibile mai ottenere più entropia di 256 bit. Tutto quello che stai facendo è renderlo più lungo e forse oscurarne l'origine.

Ora, in alcune situazioni, l'utilizzo di più hash ha effettivamente senso. Ad esempio, molti gestori di pacchetti Linux utilizzano e convalidano più hash diversi per lo stesso file. Questo non è fatto per aumentare l'entropia del valore hash, ; è fatto per rendere più difficile trovare una collisione valida, perché in tale situazione l'attacco di preimage o di collisione deve funzionare allo stesso modo di tutti gli hash utilizzati. Un simile attacco contro un moderno hash crittografico è già abbastanza difficile per la maggior parte degli scopi; montare un attacco simile contro diversi hash simultaneamente sarebbe più difficile per gli ordini di grandezza.

    
risposta data 21.07.2016 - 13:50
fonte
3

Non stai certamente aggiungendo entropia. Avrai ancora al massimo 256 bit di entrate possibili in entropia di questo schema, non importa quante volte e come ripeti questo. Nota che avrai al massimo entropia a 256 bit, perché non ci hai detto di quanto entropia è nel tuo input. SHa256 non ti darà nemmeno entropia a 256 bit se hai meno di quello nel tuo input. Hash nevers aumenta l'entropia.

Ma considerando i valori possibili di sha256, in realtà si perderebbe entropia a causa di collisioni. Alcuni dei valori a 256 bit avranno collisioni, cioè per l'input a 256 bit a sha1 e md5 ci saranno x1 e x2 che sha1 (sha256 (x1)) == sha1 (sha256 (x2)) e md5 (sha256 (y1) ) == md5 (sha256 (y2)). Hai perso l'entropia a causa di ciò se ora hai effettivamente meno uscite.

    
risposta data 21.07.2016 - 13:35
fonte
3

Come altri hanno spiegato, "bit di entropia" si riferisce alla capacità di indovinare la password originale o altro testo che è stato utilizzato per la prima volta per creare l'hash SHA-256. Nel tuo esempio l'entropia è invariata.

Quello che hai fatto qui è fornire una versione SHA-1 e una versione MD5 di SHA-256. Ciò rende SHA-256 più probabile di altre soluzioni che potresti usare.

Se stai cercando di rendere più difficile l'indovinare l'input originale, dovresti semplicemente ripetere la funzione SHA-256. Infatti, ripetere SHA-256 molte migliaia di volte renderà molto più difficile forzare l'input originale, senza alcun impatto notevole sul carico del server o sull'esperienza dell'utente finale.

Tuttavia, per la memorizzazione delle password, la cosa migliore è usare una funzione Password Hash corretta, che è stata progettata per essere una Slow Hash con Salt. Ciò consente di regolare il numero di cicli (il fattore di lavoro) per adattarsi al tempo di elaborazione desiderato sull'hardware di produzione. BCrypt è generalmente raccomandato. PBKDF2 o il nuovo SCrypt sono entrambe buone scelte.

    
risposta data 21.07.2016 - 14:33
fonte
1

hai aumentato l'entropia ... molto probabilmente no.

Tutto ciò che hai fatto è usare 2 vecchie funzioni di hashing per ottenere un nuovo hash. poiché questo non ha nuovi dati, l'entropia non è influenzata.

La quantità di bit qui non fa alcuna differenza (dal momento che è semplicemente "un altro modo di scrivere" l'hash originale.)

Entropia (in crittografia) ha a che fare con la quantità di incertezza che un bit specifico è '0' o '1'. Per aumentare questo è necessario disporre di dati "nuovi", non semplicemente rimodellamento delle cose (in misura minore). È possibile mantenere il livello di entropia di smae la maggior parte del tempo quando si rihash utilizzando la funzione di hashing originale. da allora non perdi bit.

    
risposta data 21.07.2016 - 12:51
fonte

Leggi altre domande sui tag