Come e quando utilizzo HMAC?

123

Stavo leggendo HMAC su wikipedia ed ero confuso su alcuni punti.

  1. Dove utilizzo HMAC?
  2. Perché la parte chiave dell'hash?
  3. Anche se qualcuno ha utilizzato con successo un "attacco di estensione della lunghezza", come sarebbe utile per l'attaccante?
posta 13.09.2012 - 13:22
fonte

5 risposte

117

Un codice di autenticazione dei messaggi (MAC) viene prodotto da un messaggio e una chiave segreta da un algoritmo MAC. Una proprietà importante di un MAC è che è impossibile produrre il MAC di un messaggio e una chiave segreta senza conoscere la chiave segreta. Un MAC dello stesso messaggio prodotto da una chiave diversa sembra non correlato. Anche conoscere il MAC di altri messaggi non aiuta a calcolare il MAC di un nuovo messaggio.

Un HMAC è un MAC basato su hash function . L'idea di base è concatenare la chiave e il messaggio e unirli insieme. Poiché è impossibile, dato un hash crittografico, scoprire qual è l'hash di, conoscere l'hash (o anche una raccolta di tali hash) non rende possibile trovare la chiave. L'idea di base non si risolve, in parte a causa degli attacchi di estensione della lunghezza , quindi l'attuale struttura HMAC è un po ' più complicato. Per ulteriori informazioni, consulta il tag hmac su Cryptography Stack Exchange , in particolare Perché H (k || x) non è una costruzione MAC sicura? , È H (k || lunghezza || x) una costruzione MAC sicura? e Funzioni HMAC e MAC . Esistono altri modi per definire un MAC, ad esempio algoritmi MAC basati su cifrari a blocchi come CMAC .

Un MAC autentica un messaggio. Se Alice vede un messaggio e un MAC e conosce la chiave segreta associata, può verificare che il MAC sia stato prodotto da un principal che conosce la chiave eseguendo la computazione MAC stessa. Pertanto, se un messaggio viene fornito con un MAC corretto, significa che questo messaggio è stato visto da un detentore della chiave segreta a un certo punto. Un MAC è una firma basata su una chiave segreta, fornendo garanzie analoghe a uno schema di firma basato su crittografia a chiave pubblica come schemi basati su RSA in cui la firma deve essere stata prodotta da un principale in possesso di la chiave privata.

Ad esempio, supponiamo che Alice mantenga la sua chiave segreta e la utilizzi solo per calcolare i messaggi MAC dei messaggi memorizzati su un server cloud o su altri supporti di archiviazione non affidabili. Se in seguito legge un messaggio e vede un MAC corretto collegato, sa che questo è uno dei messaggi che ha memorizzato in passato.

Un HMAC di per sé non fornisce l'integrità del messaggio. Può essere uno dei componenti di un protocollo che fornisce integrità. Ad esempio, supponiamo che Alice memorizzi le versioni successive di più file su un supporto inaffidabile, insieme ai loro MAC. (Ancora una volta supponiamo che solo Alice conosca la chiave segreta.) Se legge un file con un MAC corretto, sa che quello che ha letto è una versione precedente di alcuni file memorizzati. Un utente malintenzionato in controllo del supporto di archiviazione potrebbe comunque restituire versioni precedenti del file o un file diverso. Un possibile modo per fornire l'integrità dello storage in questo scenario sarebbe includere il nome del file e un numero di versione come parte dei dati il cui MAC è calcolato; Alice avrebbe bisogno di ricordare l'ultimo numero di versione di ciascun file in modo da verificare che non le vengano dati dati non aggiornati. Un altro modo per garantire l'integrità sarebbe che Alice ricordasse il MAC di ciascun file (ma in questo particolare scenario l'hash farebbe altrettanto bene).

¹ "Impossibile" in quanto richiede una potenza di calcolo molto maggiore di quella realisticamente possibile.

    
risposta data 18.09.2012 - 03:01
fonte
45

HMAC è una "firma" calcolata spesso inviata insieme ad alcuni dati. L'HMAC viene utilizzato per verificare (autenticare) che i dati non siano stati alterati o sostituiti. Ecco una metafora:

Spedirai un pacco a Sarah che contiene una fotografia. Ti aspetti che lei apra il pacco e guardi la fotografia. Ad un certo punto nel prossimo futuro ti aspetti che ti rispedisca il pacco con quella fotografia. È vitale che riporti la stessa fotografia nella confezione. Devi essere assolutamente sicuro che non ti rimandi una fotografia modificata nemmeno un po ', o sostituirla con una diversa. Hai centinaia di questi pacchetti che escono ogni giorno con diverse foto; non ricorderesti mai la foto in modo così dettagliato da farti capire se ne ha modificato un pezzettino (come se si fosse tolta un po 'di zin dal viso).

Ecco cosa puoi fare: prima di spedirle il pacchetto, posiziona un'altra copia della fotografia all'interno di una piccola scatola chiusa a chiave. Tieni la chiave Metti la piccola scatola chiusa all'interno della confezione insieme alla fotografia originale che le stai spedendo. Supponiamo che lei sappia che non deve rimuovere la scatola chiusa dal pacchetto. Quando ricevi il pacco da lei, aprilo, posiziona la foto sul tavolo. Apri la scatola chiusa, rimuovi la copia, confronta i due. Se sono uguali, allora non ha alterato la fotografia (è "autentica"). Se la scatola bloccata non è nel pacco o la tua chiave non la aprirà, supponi che abbia fatto qualcosa di nefasto e getti l'intero pacco nella spazzatura. La bellezza qui è che non è necessario "ricordare" nulla di ciò che l'hai originariamente inviata; tutto ciò di cui hai bisogno per garantire la legittimità della foto ritorna all'interno del pacchetto.

Nell'esempio sopra, la piccola casella bloccata rappresenta un HMAC. La tua chiave è la chiave dell'HMAC. La fotografia è i dati a cui stai applicando l'HMAC.

Quanto sopra è una metafora di andata e ritorno in cui solo tu hai una chiave. In una situazione diversa, supponiamo che tu invii spesso pacchetti a Tommy. Sei preoccupato che i corrieri della posta potrebbero aprire i tuoi pacchi e sostituire le fotografie o cambiarle. Fai la stessa cosa con la scatola chiusa, tranne in questo caso, lascia che Tommy abbia una copia della chiave, in modo che quando riceve un pacco, possa aprire la scatola chiusa inclusa e confrontare lui stesso le foto. Se al ricevimento trova le foto diverse, la sua chiave non apre la scatola, o la scatola mancante, sa che c'è qualcosa di strano.

Le metafore sopra descritte descrivono il motivo per cui gli HMAC sono necessari ma non tanto il modo in cui funzionano. Cambiamo nuovamente la metafora per avvicinarci al loro funzionamento:

Conserviamo le immagini mentali del pacchetto con la fotografia: vuoi spedirla, quindi riceverla di nuovo come prima, assicurandoti che la foto non sia stata alterata o sostituita dal ricevitore o durante il viaggio di andata.

Prima di chiudere il pacco e spedirlo per posta, fai una copia della fotografia. Questa volta non c'è una scatola chiusa, ma spazzoli la copia con una miscela di sostanze chimiche liquide. Solo tu conosci la ricetta (chiave) per questa miscela, e ogni volta che ne passi una copia, usi le stesse pennellate. La mistura turbina e confonde la copia della fotografia in qualcosa che assomiglia all'arte moderna; chiamiamolo HMAC. Non sei esattamente sicuro di come apparirà dopo essersi asciugato, ma sai che se spazzoli due foto identiche con la stessa ricetta e le stesse pennellate, gli HMAC risultanti avranno lo stesso aspetto. Quindi metti l'HMAC essiccato nel pacchetto insieme alla fotografia originale e spediscilo a Sarah.

Quando si riprende il pacchetto da Sarah, contiene ciò che si spera sia la fotografia originale non alterata insieme a ciò che si aspetta sia l'HMAC che hai creato e incluso con esso. Prendi la fotografia dal pacchetto, copialo e crea un altro HMAC con quella copia (applica la tua miscela / pennellate). Confronta l'HMAC appena creato con l'HMAC che è tornato nel pacchetto. Se sono identici, puoi star certo che Sarah e i corrieri postali non hanno modificato la fotografia.

Se Sarah avesse modificato la foto, gli HMAC non saranno identici. Se Sarah avesse modificato l'HMAC, allora gli HMAC non sarebbero identici. Se Sarah avesse modificato la foto e provato a creare un nuovo HMAC, gli HMAC non saranno identici (non conosce la tua ricetta).

Quindi sai se la foto (dati) è autentica o meno, che è esattamente ciò per cui sono usati gli HMAC.

    
risposta data 27.09.2014 - 03:45
fonte
24

La risposta breve è "HMAC fornisce firme digitali usando chiavi simmetriche invece di PKI". In sostanza, se non si desidera gestire le complessità delle chiavi pubbliche / private, la radice della fiducia e le catene di certificati, è comunque possibile avere una firma digitale affidabile con HMAC. HMAC si basa sulla crittografia a chiave simmetrica con segreti pre-condivisi anziché su coppie private / pubbliche. Lo svantaggio è lo stesso della crittografia a chiave simmetrica in generale: ora devi preoccuparti della distribuzione e della protezione delle tue chiavi segrete.

    
risposta data 08.04.2015 - 18:06
fonte
11

1. Usi HMAC ogni volta che vuoi integrità dei dati mantenuti (e autenticità)

2. La chiave è parte dell'HMAC, poiché è un segreto condiviso noto solo tra 2 parti e solo loro possono creare l'HMAC e nessun altro. (Garantisce autenticità )

3. Gli attacchi di estensione di lunghezza sono non possibile su HMAC. D'altra parte, i MAC aggiungono semplicemente la chiave al messaggio, che è suscettibile di esserlo. HMAC è stato introdotto per superare questo attacco sui MAC.

    
risposta data 13.09.2012 - 15:37
fonte
4
  • Gli HMACS vengono utilizzati quando è necessario verificare due "integrità" e "autenticità". Ad esempio: considera uno scenario in cui ti viene inviata una porzione di dati insieme al suo hash: puoi verificare l'integrità del messaggio ricalcando l'hash del messaggio e confrontandolo con l'hash che hai ricevuto. Tuttavia, non sai per certo se il messaggio e l'hash sono stati inviati da qualcuno che conoscevi / di cui ti fidi. Se tu fossi ricorso all'utilizzo di HMACS, potresti ricalcolare l'HMAC usando una chiave segreta che solo tu e una parte fidata conoscono e confrontala con l'HMAC appena ricevuto - in effetti, che serve allo scopo di "autenticità".

  • Come ho detto prima, la segretezza della chiave assicura che l'HMAC sia stato calcolato da una parte fidata.

  • HMACS non sono hash con chiave. Gli attacchi di estensione di lunghezza sono possibili quando si utilizzano hash con chiave, non HMACS. Per ulteriori letture potresti voler controllare questo .

[EDIT]

Risposta modificata per rispondere al commento qui sotto: - "Ancora non capisco perché la chiave è nel messaggio? Non conosco la chiave pubblica della festa? Se conosco la chiave pubblica, perché è la chiave nella messaggio piuttosto io usando la chiave già conosciuta? Se non conosco la chiave, allora perché mi fiderò di quella parte? "

  • La chiave non è "dentro" il messaggio. La chiave è usata nel generare l'HMAC da un messaggio. La chiave utilizzata per generare HMACS non è la "chiave pubblica" di nessuno. È più simile a un segreto condiviso tra due parti. Puoi verificare il metodo di autenticazione dell'API REST per roba AWS per capire meglio come vengono utilizzati HMACS per la firma di URL.
risposta data 13.09.2012 - 13:50
fonte

Leggi altre domande sui tag