Un hash salato può essere un MAC efficace?

3

Un HMAC è fondamentalmente un "hash con chiave". Solo il messaggio corretto e la chiave corretta produrrà un particolare hash digest in modo efficiente.

Concettualmente, lo stesso si può dire per un hash salato; solo il messaggio corretto e lo stesso valore di sale produrrà un particolare valore di hash in modo efficiente. In effetti, l'algoritmo HMAC è poco più di un hash annidato e salato, in cui i sali anteposti al messaggio per ciascuno dei due hash annidati si basano su una semplice derivazione della chiave.

Se un vero sale, quindi, veniva tenuto segreto come chiave (o in modo equivalente, se una chiave simmetrica segreta condivisa veniva usata come sale), è ovvio che qualsiasi primitiva hash crittografica diventasse un MAC efficace.

Quindi, suppongo che due domande seguano naturalmente. Primo, questa supposizione è corretta? In secondo luogo, in tal caso, che cosa fa l'algoritmo HMAC a superare la primitiva hash incorporata, oltre a ridurre la velocità di calcolo della metà e aggiungere un ordine di grandezza alla complessità della forza bruta di trovare un messaggio di preimage usando una chiave costante (o vice- versa)?

    
posta KeithS 22.01.2013 - 21:03
fonte

1 risposta

7

Se la funzione di hash è un Random Oracle poi hashing la concatenazione della chiave (il tuo" secret salt ") e il messaggio è davvero un MAC perfetto (dico" chiave "perché se sale è un dato segreto che corrisponde alla definizione di una chiave, utilizziamo il nome corretto)

Sfortunatamente, gli oracoli casuali non esistono realmente ... invece, siamo bloccati con funzioni di hash che sappiamo non sono oracoli casuali, e dobbiamo andare d'accordo con i loro capricci. In particolare, la funzione di hash dalla Merkle-Damgård persuasione (che include MD5 , SHA-1, SHA-256 e SHA-512) soffrono dell ' attacco di estensione della lunghezza , che non contraddice la base proprietà che sono attese da una funzione di hash sicura (resistenza a preimmagini, seconde pre-immagini e collisioni), ma significa che le semplici costruzioni MAC tendono a fallire in modo orribile.

... Che è esattamente il motivo per cui è stato inventato HMAC : con la sua invocazione hash a doppio nidificato, fa fronte oracolarità non casuale delle funzioni di hash MD. Non facciamo le due invocazioni di hash per il gusto di farlo, ma perché sono necessarie per raggiungere una sicurezza adeguata. Vorrei sottolineare il punto importante: progettare un algoritmo MAC non è così facile come potrebbe sembrare; non puoi schiaffeggiare una funzione hash e una chiave e sperare per il meglio. I dettagli, come al solito, contano.

Se hai bisogno di prestazioni con una grande "P" , il tipo che non sarebbe soddisfatto da HMAC, quindi:

  1. Hai reti molto veloci, o CPU molto lente.
  2. Ci sono costruzioni MAC più veloci che non sono basate sulla funzione di hash esistente.
  3. Ti verrà meglio servito con una modalità di crittografia autenticata , assumendo che tu decida anche di crittografare i dati che sono MACed (questo è lo scenario più comune).
risposta data 22.01.2013 - 21:29
fonte

Leggi altre domande sui tag