it-swarm.dev

Come e quando utilizzo HMAC?

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

  1. Dove posso usare HMAC?
  2. Perché la parte chiave dell'hash?
  3. Anche se qualcuno avesse usato con successo un "attacco di estensione della lunghezza", come sarebbe utile per l'attaccante?
145
user5575

Un codice di autenticazione del messaggio (MAC) è 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 che si basa su un funzione hash . L'idea di base è quella di concatenare la chiave e il messaggio e metterli insieme. Dato che è impossibile, dato un hash crittografico, scoprire di cosa si tratta, sapere che l'hash (o anche una raccolta di tali hash) non consente di trovare la chiave. L'idea di base non funziona del tutto, in parte a causa di attacchi di estensione della lunghezza , quindi l'attuale costruzione HMAC è un po 'più complicata. Per ulteriori informazioni, sfogliare tag hmac su Exchange Stack di crittografia , in particolare Perché H (k || x) non è una costruzione MAC sicura? , È H (k || lunghezza || x) una costruzione MAC sicura? e funzioni HMAC vs MAC . Esistono altri modi per definire un MAC, ad esempio algoritmi MAC basati su cifrature 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 principale che conosce la chiave eseguendo il calcolo MAC stesso. Pertanto, se un messaggio viene fornito con un MAC corretto allegato, significa che questo messaggio è stato visualizzato da un detentore della chiave segreta ad un certo punto. Un MAC è una firma basata su una chiave segreta, che fornisce assicurazioni simili a uno schema di firma basato sulla crittografia a chiave pubblica come schemi basati su RSA in cui il la firma deve essere stata prodotta da un principale in possesso della chiave privata.

Ad esempio, supponiamo che Alice mantenga la sua chiave segreta per sé e la usi sempre e solo per calcolare i MAC dei messaggi che memorizza su un server cloud o altri supporti di archiviazione non affidabili. Se in seguito rilegge un messaggio e vede allegato un MAC corretto, sa che questo è uno dei messaggi che ha archiviato in passato.

Un HMAC da solo non fornisce l'integrità del messaggio. Può essere uno dei componenti di un protocollo che fornisce integrità. Ad esempio, supponiamo che Alice memorizzi 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 rilegge un file con un MAC corretto, sa che ciò che legge è una versione precedente di alcuni file memorizzati. Un utente malintenzionato che controlla il supporto di archiviazione potrebbe comunque restituire versioni precedenti del file o un file diverso. Un possibile modo per fornire integrità di archiviazione in questo scenario sarebbe quello di includere il nome del file e un numero di versione come parte dei dati il ​​cui MAC è calcolato; Alice dovrebbe ricordare l'ultimo numero di versione di ciascun file per verificare che non le vengano dati dati non aggiornati. Un altro modo per garantire l'integrità sarebbe che Alice ricordi il MAC di ciascun file (ma un hash farebbe altrettanto bene in questo particolare scenario).

¹ "Impossibile" come nel richiedere molta più potenza di calcolo di quanto realisticamente possibile.

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 apra il pacco e guardi la fotografia. Ad un certo punto nel prossimo futuro ti aspetti che ti rispedisca il pacco con quella fotografia. È di vitale importanza che abbia rimesso la stessa fotografia nella confezione. Devi essere assolutamente sicuro che non ti rispedisca una foto alterata nemmeno un po ', o sostituirla con una diversa. Hai centinaia di questi pacchetti che escono ogni giorno con foto diverse; non ricorderesti mai la foto in modo così dettagliato che potresti dire se ne ha cambiato un po '(come se si fosse tolta una piccola zecca dal viso).

Ecco cosa puoi fare: prima di inviarle il pacco, metti un'altra copia della fotografia in una piccola scatola chiusa a chiave. Conserva la chiave. Metti la piccola scatola chiusa nel pacco insieme alla fotografia originale che le stai spedendo. Supponiamo che sappia che non deve rimuovere la scatola chiusa dal pacco. Quando ricevi il pacco da lei, aprilo, posiziona la foto sul tavolo. Apri la casella bloccata, rimuovi la copia, confronta i due. Se sono uguali, allora non ha modificato la fotografia (è "autentica"). Se la scatola bloccata non è nel pacchetto o la tua chiave non la aprirà, supponi che abbia fatto qualcosa di malvagio e getta l'intero pacchetto nel cestino. Il bello qui è che non è necessario "ricordare" nulla di ciò che le hai originariamente inviato; tutto il necessario 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 sono 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 invii spesso pacchetti a Tommy. Sei preoccupato che i portatori di posta ficcanaso stiano aprendo i tuoi pacchi e sostituendo le fotografie o cambiandole. Fai la stessa cosa con la scatola bloccata, tranne che in questo caso, lasci che Tommy abbia una copia della chiave, in modo che quando riceve un pacco possa aprire la scatola chiusa e confrontare le foto da solo. Se al ricevimento trova le foto diverse, la sua chiave non apre la scatola o manca la scatola, sa che qualcosa è sospetto.

Le metafore sopra descritte descrivono perché gli HMAC sono necessari ma non tanto come funzionano. Cambiamo di nuovo la metafora per avvicinarci a come funzionano:

Manteniamo le immagini mentali del pacchetto con la fotografia: vuoi inviarlo per posta, quindi riceverlo di nuovo come prima, assicurandoti che la foto non sia stata alterata o sostituita dal destinatario o durante il viaggio di andata e ritorno.

Prima di chiudere il pacco e spedirlo per posta, fai una copia della fotografia. Questa volta nessuna scatola chiusa a chiave, invece spazzoli la copia con una miscela di prodotti chimici liquidi. Solo tu conosci la ricetta (chiave) per questa miscela e ogni volta che passi il pennello su una copia, usi esattamente le stesse pennellate. La miscela turbinerà e sfocerà la copia della fotografia in qualcosa che ricorda l'arte moderna; chiamiamolo un HMAC. Non sei esattamente sicuro di come apparirà dopo che si asciuga, ma sai che se spazzoli due foto identiche con la stessa ricetta e le stesse pennellate, gli HMAC risultanti saranno uguali. Quindi metti l'HMAC essiccato nella confezione insieme alla fotografia originale e lo spedisci a Sarah.

Quando ricevi il pacchetto da Sarah, contiene ciò che speri sia la fotografia originale non alterata insieme a quello che ti aspetti sia l'HMAC che hai creato e incluso con esso. Estrai la fotografia dalla confezione, copiala 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, allora puoi essere sicuro che Sarah e i corrieri non abbiano modificato la fotografia.

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

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

59
Dave

La risposta breve è "HMAC fornisce firme digitali utilizzando tasti simmetrici invece di PKI". In sostanza, se non si desidera gestire complessità di chiavi pubbliche/private, radice della fiducia e catene di certificati, è ancora possibile avere una firma digitale affidabile con HMAC. HMAC si basa sulla crittografia chiave simmetrica e sui segreti pre-condivisi anziché sulle coppie private/pubbliche. L'aspetto negativo è lo stesso della crittografia a chiave simmetrica in generale: ora devi preoccuparti della distribuzione e della protezione delle tue chiavi segrete.

37
dtoubelis

1 Si utilizza HMAC ogni volta che si desidera integrità dei dati mantenuti (e autenticità)

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

3 Gli attacchi con estensione di lunghezza sono non possibile su HMAC. I MAC d'altra parte aggiungono semplicemente la chiave al messaggio, che è suscettibile ad esso. HMAC è stato introdotto per superare questo attacco ai MAC.

14
sudhacker
  • Gli HMACS vengono utilizzati quando è necessario verificare due "integrità" e "autenticità". Ad esempio: considera uno scenario in cui ti viene inviato un dato insieme al suo hash: puoi verificare l'integrità del messaggio ricalcolando l'hash del messaggio e confrontandolo con l'hash che hai ricevuto. Tuttavia, non sai con certezza se il messaggio e l'hash sono stati inviati da qualcuno che conosci/di cui ti fidi. Se avessi fatto ricorso all'utilizzo di HMACS, potresti ricalcolare l'HMAC utilizzando una chiave segreta che solo tu e una parte di fiducia conoscete e confrontarla con l'HMAC che avete appena ricevuto - in effetti, allo scopo di "autenticità".

  • Come ho accennato in precedenza, la segretezza della chiave garantisce che l'HMAC sia stato calcolato da una parte fidata.

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

[MODIFICARE]

Risposta modificata per rispondere al commento di seguito: - "Non riesco ancora a capire perché la chiave sia nel messaggio? Non conosco la chiave pubblica della parte? Se conosco la chiave pubblica, allora perché la chiave nel messaggio è piuttosto me utilizzando la chiave già nota? Se non conosco la chiave, perché dovrei fidarmi di quella parte? "

  • La chiave non è "nel" messaggio. La chiave è utilizzata nella generazione dell'HMAC da un messaggio. La chiave utilizzata per generare HMACS non è la "chiave pubblica" di nessuno. È più come un segreto condiviso tra due parti. È possibile controllare il REST metodo di autenticazione API per roba AWS per comprendere meglio come vengono utilizzati gli HMACS per la firma URL.
5
user1187