Quale hash-length è più sicuro?

21

Se un algoritmo hash ha un'opzione per selezionare l'output-hash-length (ad esempio, 128 vs 512 bit) e tutti gli altri aspetti della funzione hash sono gli stessi, il che hash-length è probabilmente più sicuro / utile e perché?

    
posta rpach17 17.04.2017 - 19:08
fonte

4 risposte

44

Funzionamento degli hash

Il concetto dietro gli hash è molto semplice: prendi un messaggio di dimensioni arbitrarie e produci in modo deterministico un output dall'aspetto casuale di una determinata dimensione. Per una funzione hash crittografica ben costruita, l'unico modo per romperlo è provare input casuali fino a ottenere il valore hash desiderato (collisione o pre-immagine, ecc.).

Quale è più sicuro?

A parità di altre condizioni (vale a dire è lo stesso algoritmo, solo con una dimensione di output diversa, es .: SHA2-224 vs SHA2-512), quindi più grande è l'output dell'hash, più è sicuro. Motivo: se hai un hash a 224 bit, allora ti aspetti che un utente malintenzionato debba fare in modo che 2 223 supponga (in media) di romperlo, mentre un 512-bit richiede che l'attaccante faccia 2 511 indovina (in media).

Quale è più utile?

Questo non posso rispondere per te, dipende da molti fattori sull'applicazione che lo sta usando. Ad esempio, se hai limiti di larghezza di banda, di memoria o di elaborazione, se sei in grado di aggiornare facilmente l'infrastruttura se l'hash a 128 bit viene deprecato o se la soluzione che stai configurando deve essere a prova di futuro per 10 anni, ecc. Con solo le informazioni che hai fornito, non posso rispondere a questo per te.

    
risposta data 17.04.2017 - 19:16
fonte
5

L'hash più lungo è il più sicuro poiché la probabilità di trovare casualmente una collisione è più bassa. Ma un hash più lungo richiede anche più tempo per il calcolo, per controllare, soprattutto se un essere umano deve controllarlo, quindi potrebbe non valere la pena avere un hash più lungo per il piccolo miglioramento della sicurezza.

    
risposta data 17.04.2017 - 19:17
fonte
2

La prima risposta ovvia è, naturalmente, "L'hash a 512 bit è migliore" .

Una risposta più premurosa aggiungerebbe: "... se l'input è abbastanza lungo" . La ragione è che mentre desideriamo che il mondo e gli hash all'interno di quel mondo siano perfetti, è generalmente più difficile generare una distribuzione quasi perfetta, dall'aspetto casuale, in un output più grande dato un piccolo input. Pertanto, un hash più lungo potrebbe avere proprietà indesiderate rispetto a un più breve se fornito un input troppo breve.

Una risposta più pratica potrebbe chiedere: sei legato al compleanno? In caso contrario, dimentica il problema e utilizza l'hash a 128 bit, che è più veloce e utilizza meno spazio di archiviazione.

Se un attacco di compleanno potrebbe essere un problema per te (firme?) non vorrai assolutamente usare un hash 128bit (o più piccolo) perché 2 64 è un numero che è abbastanza fattibile come un attacco.

Oltre a questo, a meno che alcune delle informazioni coinvolte siano così immensamente preziose che una o più delle più grandi nazioni del mondo dedicheranno la maggior parte delle loro risorse e dei loro presunti computer quantici per molti anni alla forza bruta un singolo uno dei tuoi hash (quanto sei importante !?), qualsiasi hash non spezzato è - in pratica - buono come qualsiasi altro per quanto riguarda la lunghezza.

Non fa differenza se un attaccante deve eseguire 2 passaggi 127 o 2 511 o 2 10000000 .

2 127 è assolutamente impraticabile e inaccessibile (per ogni scenario realistico), se possibile.

    
risposta data 18.04.2017 - 16:38
fonte
0

Un utilizzo degli hash è la firma dei dati o il checksum.

Supponiamo che fornisca un file da scaricare per te e, una volta scaricato il file, potrebbe essere necessario assicurarsi che non venga toccato (da man-in-middle, rete cattiva, ecc.), quindi ecco che arriva la soluzione.

Fornisco il checksum / hash del file per te (diciamo in SHA-512), ora controlli il checksum / hash del file scaricato e entrambi i file hash devono essere lo stesso ora (ma se si assumono i dati hash fornito non viene toccato troppo.

Potresti essere sorpreso che MD5 ora sia un algoritmo hash deprecato. Visto che le leggende sulla sicurezza potrebbero modificarlo in un modo fantastico, potresti avere due dati completamente diversi con esattamente la stessa dimensione e lo stesso identico valore di hash md5.

Quindi ora non ho paura che forse l'anno prossimo, 10 o 100 l'anno prossimo un'altra leggenda potrebbe fare la stessa cosa con la famiglia SHAs.

HMAC s è il modo sicuro per gli hash. Poiché è necessario aggiungere altri dati segreti per creare l'hash. Tornando all'esempio di download del file di cui sopra, ora è necessario creare un HMAC-SHA-512 per verificare l'integrità dei dati con qualche valore segreto che solo tu e io conosciamo (il val segreto conosciuto anche come salt).

Più sicurezza? non puoi fidarti di nessuno al mondo? HMAC non funziona
Quindi l'ultimo approccio è il tuo algoritmo di hash personalizzato. Sì, fallo da solo. Ma ovviamente devi farlo molto bene.

    
risposta data 20.04.2017 - 23:42
fonte

Leggi altre domande sui tag