Ci sono diversi algoritmi di hash mai usati insieme?

12

Mi chiedevo se diversi hash (ad es. md5 (sha1 ($ data)) ) siano mai stati usati insieme per la sicurezza dei dati e se ci fosse un motivo (risposta positiva o negativa).

    
posta Gurzo 16.11.2011 - 14:54
fonte

2 risposte

15

L'utilizzo di due funzioni di hash insieme, come ulteriore sicurezza contro la violazione di una delle funzioni, è delicato. Concatenazione (i dati sono sottoposti a hash con entrambe le funzioni hash, i risultati sono concatenati) producono una resistenza di collisione equivalente ad almeno quella della più strong delle due funzioni (e, sorprendentemente, non proprio migliore di quella) ; d'altra parte, la concatenazione non rende la resistenza all'immagine non migliore delle più deboli delle due funzioni. Composizione (i dati sono sottoposti a hashing con una funzione, e il risultato è sottoposto a hashing con l'altra funzione) offre il contrario: la resistenza di preimage è almeno pari alla più strong tra le due funzioni (soggetta a qualche definizione sottigliezze, a seconda se si desidera resistere contro il recupero dei dati che sono stati utilizzati, o semplicemente qualsiasi messaggio che produce lo stesso output), ma per le collisioni la funzione più debole definisce la resistenza complessiva.

Quindi combinare insieme due funzioni di hash è, nel migliore dei casi, una benedizione mista. SSL / TLS , fino a TLS 1.1, combina MD5 e SHA-1 nel suo "PRF" interno, che è particolarmente usato come funzione di derivazione della chiave (per estendere il segreto negoziato in chiavi per la crittografia simmetrica e il controllo di integrità); entrambe le funzioni sono utilizzate in HMAC e poi trasformate in PRNG personalizzato, e i due stream generati sono XORed insieme. L'intento era quello di avere una funzione di derivazione chiave che resista alle interruzioni crittoanalitiche di MD5 o SHA-1 (se questo funziona davvero non è stato formalmente provato, dipende realmente dalla natura della "rottura"). È interessante notare che TLS 1.2 ripristina l'utilizzo di una singola funzione di hash (configurabile). La combinazione di due funzioni hash significa che è necessario implementarle entrambe, il che è un problema per i sistemi embedded che spesso hanno forti vincoli sulla dimensione del codice.

Quindi il solito consiglio è: non farlo. È difficile farlo bene, e anche se non si introducono punti deboli, non è chiaro se si guadagna qualcosa in questo modo, per quanto riguarda la sicurezza. D'altra parte, ci sono chiari costi operativi. Sembra meglio usare una singola, migliore funzione di hash (che significa: ditch MD5 e SHA-1, basta usare SHA-256 invece), con agilità algoritmica (rendere la funzione hash configurabile, in modo da potrebbe cambiarlo in seguito).

    
risposta data 16.11.2011 - 15:49
fonte
5

Dai un'occhiata a questa domanda su Crypto.SE. Ci sono alcune sottigliezze con questo tipo di costruzione. Ad esempio, una collisione per sha1 (la funzione di hash più interna) nell'esempio produce immediatamente una collisione per l'intera cosa.

La concatenazione degli hash è, sorprendentemente, solo sicura come il più debole degli hash che usi quando si tratta di attacchi preimage (cioè, dato x = hash (m), trova m 'tale che hash (m') == x , dove m 'potrebbe essere uguale a m). Per le collisioni, tuttavia, è abbastanza strong.

Come nota a margine, MD5 e SHA1 sono deboli e non dovrebbero essere usati nei nuovi sistemi.

    
risposta data 16.11.2011 - 15:23
fonte

Leggi altre domande sui tag