Modo sicuro per abbreviare un hash

11

Se voglio salvare un hash di un certo numero di bit, ma il mio algoritmo di hash mi dà più bit di quanti ne ho bisogno, allora qual è il modo più sicuro per accorciarlo?

Dovrei:

  • rimuovi solo il primo o l'ultimo bit
  • XOR il primo o l'ultimo bit con la parte che sto mantenendo
  • Fai qualcos'altro

Importa in che modo lo sto accorciando o dipende dall'algoritmo di hash che sto usando? Questo riduce la sicurezza dell'hash (es .: è un hash a 128 bit tagliato a 64 bit peggio di un hash a 64 bit dello stesso algoritmo)?

    
posta Runemoro 20.08.2015 - 19:59
fonte

2 risposte

17

Il semplice troncamento di un hash è il modo comune e accettato per accorciarlo. Non devi fare niente di speciale.

Ci sono molte domande qui e su crypto.stackexchange sul fatto se fare questo riduce la forza dell'hash (vedi l'elenco di domande correlate in basso). La risposta è che No, troncare un hash non riduce la sua forza (a parte l'ovvio che più breve gli hash hanno più collisioni ).

Secondo la risposta di @ Reid in [2] e la risposta di @ ThomasPornin in [3], l'idea di troncare gli hash è completamente supportata dal NIST, infatti SHA-224 è solo SHA-256 troncato, SHA-384 è solo SHA -512 troncato, ecc.

DOMANDE CORRELATE

[1] hash troncato per l'autenticazione dei messaggi?

[2] sta troncando un hash SHA512 ai primi 160 bit sicuri quanto usando SHA1?

[3] Devo usare il primo o l'ultimo bit di un hash SHA-256?

    
risposta data 20.08.2015 - 21:47
fonte
0

Sì, abbreviare un hash riduce la sicurezza dell'hash. Una parte importante della sicurezza di un algoritmo di hashing è la resistenza di collisione degli algoritmi. Ciò significa che se ho hash ThingToHash1 il risultato (si spera) non corrisponderà all'hash per nessun altro input. Troncando l'hash, si aumenta la probabilità di una collisione perché solo un sottoinsieme degli output degli algoritmi hashing deve scontrarsi con l'output di un altro input. Tuttavia, se la collisione occasionale è accettabile e non dannosa per la sicurezza della tua applicazione va bene. Ad esempio, git accetta gli hash di commit troncati per identificare commit specifici.

    
risposta data 20.08.2015 - 20:25
fonte

Leggi altre domande sui tag