Domanda:
Come e quando utilizzo HMAC?
user5575
2012-09-13 16:22:23 UTC
view on stackexchange narkive permalink

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

  1. Dove posso utilizzare HMAC?
  2. Perché è la parte fondamentale dell'hash?
  3. Anche se qualcuno usasse con successo un "attacco di estensione della lunghezza", come sarebbe utile all'attaccante?
Se qualcuno è curioso, quello che volevo sapere era che hmac è un modo per firmare i dati utilizzando una chiave ** simmetrica **. "È più complesso quindi eseguire l'hashing del messaggio e della chiave insieme, il che non è sicuro" è un bonus.
Un mio amico gestisce uno dei più grandi scambi di "criptovaluta" al mondo. La sua API richiede la firma HMAC di tutte le chiamate API con la chiave API privata degli utenti (sarebbe il "segreto" a cui fai riferimento nella tua domanda), che include la chiave pubblica nell'hash. Questo è il caso d'uso di base, come ulteriore livello di sicurezza per le chiamate API. Nel mondo delle criptovalute, la sua è l'unica piattaforma ancora da hackerare, nonostante milioni di tentativi. HMAC è utile, assicurati solo di sapere come usarlo. pensavo di averlo fatto, ma non l'ho fatto e ho pagato il prezzo sotto forma di un devastante hack dell'API.
usa questo per eseguire il debug di https://8gwifi.org/hmacgen.jsp
Cinque risposte:
Gilles 'SO- stop being evil'
2012-09-18 06:01:50 UTC
view on stackexchange narkive permalink

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

Ad esempio, supponiamo che Alice tenga per sé la sua chiave segreta e la utilizzi solo per calcolare i MAC dei messaggi che memorizza su un server cloud o su altri supporti di memorizzazione inaffidabili. Se in seguito rilegge un messaggio e vede un MAC corretto allegato, sa che questo è uno dei messaggi che ha memorizzato 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 relativi MAC. (Di nuovo assumiamo che solo Alice conosca la chiave segreta.) Se rilegge un file con un MAC corretto, sa che ciò che ha letto è una versione precedente di un file che ha memorizzato. Un utente malintenzionato che controlla il supporto di memorizzazione potrebbe comunque restituire versioni precedenti del file o un file diverso. Un modo possibile per fornire l'integrità dell'archiviazione in questo scenario sarebbe includere il nome del file e un numero di versione come parte dei dati di cui viene calcolato il MAC; Alice dovrebbe ricordare l'ultimo numero di versione di ogni file in modo da verificare che non le siano stati forniti dati non aggiornati. Un altro modo per garantire l'integrità sarebbe che Alice ricordasse il MAC di ogni file (ma poi un hash andrebbe bene in questo particolare scenario).

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

Lo trovo un po 'poco chiaro e lungo, anche se ho sicuramente imparato un po'
Il codice "hmac" può essere condiviso?Mi sembra confuso: è un hash ma non può essere condiviso.
@R11G Non capisco la tua domanda.Tieni presente che "è un hash" non è un modo utile per capire HMAC.HMAC è un MAC.Il fatto che sia basato su un hash è un dettaglio di implementazione.Esistono altri algoritmi MAC che hanno le stesse proprietà di sicurezza ma non utilizzano un hash internamente, ad esempio CMAC.
@Gilles Siamo spiacenti.Volevo dire che se accedo a HMAC nei miei registri di servizio, è un potenziale difetto di sicurezza?
@R11G Dipende da cosa è l'HMAC e da quale garanzia di sicurezza stai mirando.Non puoi tornare dall'HMAC all'ingresso senza la chiave.Anche con la chiave, puoi tornare indietro solo indovinando l'input e controllandolo.Tuttavia, se vedi lo stesso HMAC due volte, sai che deve essere lo stesso input con la stessa chiave.
Perché "HMAC" non fornisce l'integrità del messaggio?Wikipedia e altre risposte dicono che fornisce l'integrità del messaggio e penso di sì."Può essere utilizzato per verificare simultaneamente sia l'integrità dei dati che l'autenticazione di un messaggio, come con qualsiasi MAC."--- da Wikipedia
@Rick È una sottigliezza che purtroppo spesso non viene detta.Supponi di ricevere un messaggio e un putativo HMAC di quel messaggio da una fonte non attendibile.Calcola l'HMAC del messaggio con la chiave applicabile e vedi che l'HMAC corretto è uguale all'HMAC putativo.Cosa prova questo?Dimostra che il messaggio è stato firmato da un'entità che conosce la chiave segreta, cioè dimostra l'autenticità del messaggio.Ma (a meno che non ci fosse un solo messaggio firmato con questa particolare chiave) non hai modo di sapere quale dei messaggi firmati hai.Quindi questo non prova l'integrità.[cont.]
@Rick Uno scenario diverso in cui l'HMAC dimostra l'integrità è se si riceve il valore HMAC da una fonte _trusted_ e il messaggio da una fonte non attendibile.In questo caso, ciò prova l'integrità del messaggio.Nota che in questo scenario, un hash avrebbe funzionato altrettanto bene.
Dave
2014-09-27 06:45:09 UTC
view on stackexchange narkive permalink

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:

Stai per spedire 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 dentro. È fondamentale che rimetta la stessa fotografia nel pacco. Devi essere assolutamente sicuro che non ti rimandi indietro una fotografia 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 ha cambiato un po 'di essa (come se avesse aerografato un piccolo brufolo dal viso).

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

Nell'esempio sopra, la piccola scatola chiusa a chiave rappresenta un HMAC. La tua chiave è la chiave dell'HMAC. La fotografia è il dato 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, diciamo che invii spesso pacchi a Tommy. Sei preoccupato che i corrieri ficcanaso possano aprire i tuoi pacchi e sostituire le fotografie o cambiarle. Fai la stessa cosa con la scatola chiusa, tranne che in questo caso lasci una copia della chiave a Tommy, in modo che quando riceve un pacco, può aprire la scatola chiusa inclusa e confrontare le foto lui stesso. Se al ricevimento scopre che le foto sono diverse, la sua chiave non apre la scatola o la scatola manca, sa che c'è qualcosa di strano.

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

Manteniamo l'immagine mentale del pacco con la fotografia: vuoi spedirla, quindi riceverla di nuovo come prima, assicurandoti che la foto fosse non alterato o sostituito dal destinatario, o durante il viaggio di andata e ritorno.

Prima di chiudere il pacco e spedirlo, fai una copia della fotografia. Questa volta nessuna scatola chiusa a chiave, invece spennellate la copia con una miscela di sostanze chimiche liquide. Solo tu conosci la ricetta (chiave) per questa miscela e ogni volta che spennelli una copia, usi esattamente le stesse pennellate. La miscela turbinerà e sfocerà la copia della fotografia in qualcosa di simile all'arte moderna; chiamiamolo HMAC. Non sei esattamente sicuro di come sarà dopo che si asciuga, 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 pacco insieme alla fotografia originale e lo spedisci a Sarah.

Quando ricevi il pacco da Sarah, contiene quella che speri sia la fotografia originale non alterata insieme a quello che ti aspetti sia l'HMAC che hai creato e incluso con essa. Prendi la fotografia dalla confezione, copiala e crea un altro HMAC con quella copia (applica la tua miscela / pennellate). Confronta l'HMAC che hai appena creato con l'HMAC che è tornato nel pacchetto. Se sono identici, puoi essere certo che Sarah e i corrieri non hanno alterato la fotografia.

Se Sarah aveva modificato la foto, gli HMAC non sarebbero stati identici.Se Sarah aveva modificato l'HMAC, gli HMAC non saranno identici.Se Sarah aveva alterato la foto e ha provato a crearne una nuova HMAC, quindi gli HMAC non saranno identici (lei non conosce la tua ricetta).

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

Grazie.Ho trovato la tua spiegazione sulla "pittura roteata" davvero utile.
(Sì, lo so che sono in ritardo di 5 anni.) Il problema si presenta quando Sarah ha più foto di te.Potrebbe rimandarti indietro quella sbagliata, e poiché la "chiave" è comune, l'accetteresti abbastanza felicemente.Potrebbero essere necessari ulteriori controlli o accettare questo rischio.Gilles sopra descrive questo problema.
dtoubelis
2015-04-08 21:06:15 UTC
view on stackexchange narkive permalink

La risposta breve è "HMAC fornisce firme digitali utilizzando chiavi simmetriche invece di PKI". In sostanza, se non vuoi affrontare le complessità di chiavi pubbliche / private, radice di fiducia e catene di certificati, puoi comunque avere una firma digitale affidabile con HMAC. HMAC si basa sulla crittografia a chiave simmetrica e sui segreti pre-condivisi invece che sulle coppie privato / pubblico. Lo svantaggio è lo stesso della crittografia a chiave simmetrica in generale: ora devi preoccuparti della distribuzione e della protezione delle tue chiavi segrete.

Grazie, stavo cercando di capire quali scenari useresti un HMAC piuttosto che uno schema di firma digitale a chiave pubblica, questo sembra essere un ottimo esempio del perché: non hai bisogno di un PKI
Importante differenziazione tra chiavi simmetriche e asimmetriche
Vuoi dire che HMAC non ha bisogno di una PKI?
@PRVS Sì, è esattamente vero, HMAC non richiede PKI.
sudhacker
2012-09-13 18:37:34 UTC
view on stackexchange narkive permalink

1. Utilizzi HMAC ogni volta che desideri mantenere (e autenticare) l ' integrità dei dati

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

3. Gli attacchi di estensione della lunghezza non sono possibili 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.

+1 perché ero confuso perché basta concatenare il messaggio e la chiave e che differenza ha una chiave rispetto al solo concatenarlo. Anche se sono ancora confuso.
user1187
2012-09-13 16:50:44 UTC
view on stackexchange narkive permalink
  • Gli HMACS vengono utilizzati quando è necessario controllare 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 conoscevi / di cui ti fidi. Se avessi fatto ricorso a HMACS, potresti ricalcolare l'HMAC utilizzando una chiave segreta che solo tu e una parte fidata conoscete e confrontarla con l'HMAC appena ricevuto, in effetti, allo scopo di "autenticità".

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

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

[MODIFICA]

Risposta modificata per rispondere al commento di seguito: - "Continuo a non capire perché la chiave è nel messaggio? Non conosco la chiave pubblica del party? Se conosco la chiave pubblica allora perché la chiave nel messaggio è piuttosto io che uso la chiave già nota? Se Non conosco la chiave, allora perché dovrei fidarmi di quella parte? "

  • La chiave non è" nel "messaggio. La chiave è utilizzata per generare l'HMAC da un messaggio. La chiave utilizzata per generare HMACS non è la "chiave pubblica" di nessuno. È più come un segreto condiviso tra due parti. Puoi controllare il metodo di autenticazione dell'API REST per le cose AWS per capire meglio come vengono utilizzati gli HMACS per la firma degli URL.


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...