Qual è la differenza tra i due algoritmi?
Una differenza che io conosco è che il MAC è codificato e l'hash non lo è.
Per semplificare: di solito un MAC è un valore di hash crittografato con una chiave segreta. Ad esempio, gli attaccanti possono falsificare messaggi e calcolare un nuovo hash, ma non possono farlo se il sistema richiede che l'hash sia crittografato con una chiave segreta.
Una funzione di hash crittografica è una funzione di hash deterministica completamente pubblica che tutti possono calcolare su input arbitrari. Prende come input una sequenza di bit (qualsiasi sequenza di bit, alcune funzioni di hash sono formalmente limitate a input di, diciamo, meno 2 64 bit, ovvero "2 milioni di terabyte") e valori di output in uno spazio piuttosto piccolo, in genere una sequenza di bit con una dimensione fissa (ad esempio sempre 160 bit con la funzione di hash standard SHA-1 ). Le buone funzioni di hash crittografiche rispettano alcune condizioni che si riducono, informalmente, al fatto che mescolano i dati di input in modo così approfondito da non poter essere individuati in seguito.
Un codice di autenticazione dei messaggi è un algoritmo che accetta come input un messaggio e una chiave segreta e produce un output di dimensioni fisse che può essere successivamente verificato per corrispondere al messaggio; la verifica richiede anche la stessa chiave segreta. Contrariamente alle funzioni di hash in cui tutto è noto e gli aggressori stanno combattendo contro la matematica, il MAC ha senso nei modelli in cui esistono entità con conoscenza di un segreto. Quello che ci aspettiamo da un buon MAC è l'imperdonabilità: dovrebbe essere impossibile calcolare un messaggio di coppia + valore MAC che verifichi con successo con un determinato tasto K senza conoscere K esattamente e in per intero.
Le funzioni hash e MAC sono quindi tipi distinti di algoritmi con proprietà distinte e utilizzati in situazioni davvero distinte.
Alcuni algoritmi MAC (ma certamente non tutti) possono essere pensati come "funzioni hash con una chiave", ma questa è una visione restrittiva. HMAC è una struttura MAC ben conosciuta, che a sua volta si basa su una funzione di hash sottostante in modo intelligente. Infatti, le proprietà e i modelli di sicurezza per le funzioni hash e MAC sono sufficientemente distanti l'una dall'altra che schiaffare una funzione hash e una chiave insieme non necessariamente producono un MAC sicuro, anche se la funzione hash è sicura (vedere l' attacco di estensione della lunghezza che illustra quel punto).
In una certa misura, possiamo affermare che un algoritmo MAC che può operare in sicurezza senza un IV deve mostrare alcune proprietà di tipo hash (questo è il motivo per cui mi piace HMAC: senza un IV, è molto più difficile sbagliarlo quando lo si implementa). Tuttavia, il Diavolo è nei dettagli.
Sono due primitivi totalmente diversi. Un MAC viene utilizzato per l'autenticazione dei messaggi ed è una primitiva simmetrica. Una funzione di hash può essere utilizzata per molti scopi e non ha alcun input speciale. MAC è un acronimo di "message authentication code".
Non essere confuso dal fatto che alcuni algoritmi MAC (ad es. SHA1-HMAC) funzionano usando una funzione di hash come subroutine. Sono animali molto diversi.
Trovato questo alla risposta punto da un altro forum.
Questi tipi di primitive crittografiche possono essere distinti dagli obiettivi di sicurezza che soddisfano (nel semplice protocollo di "accodamento a un messaggio"):
Integrità: il destinatario può essere certo che il messaggio non sia stato modificato per errore?
Autenticazione: il destinatario può essere sicuro che il messaggio proviene dal mittente?
Non ripudio: se il destinatario trasmette il messaggio e la prova a una terza parte, può la terza parte essere sicura che il messaggio sia originato dal mittente? (Si noti che sto parlando di non ripudio nel senso crittografico, non nel senso legale). Altrettanto importante è questa domanda:
Chiavi: la primitiva richiede una chiave segreta condivisa o keypairs pubblico-privato? Penso che la risposta breve sia meglio spiegata con una tabella:
Cryptographic primitive | Hash | MAC | Digital
Security Goal | | | signature
------------------------+------+-----------+-------------
Integrity | Yes | Yes | Yes
Authentication | No | Yes | Yes
Non-repudiation | No | No | Yes
------------------------+------+-----------+-------------
Kind of keys | none | symmetric | asymmetric
| | keys | keys
Ricorda che l'autenticazione senza fiducia nelle chiavi utilizzate è inutile. Per le firme digitali, un destinatario deve essere sicuro che la chiave di verifica appartiene effettivamente al mittente. Per i MAC, un destinatario deve essere sicuro che la chiave simmetrica condivisa sia stata condivisa solo con il mittente.
Leggi altre domande sui tag cryptography hash