HMAC non è un meccanismo di crittografia. Funziona così: puoi calcolare l'output HMAC su un dato messaggio e un altro dato chiamato il tasto . Il calcolo è deterministico, quindi per lo stesso messaggio e chiave si ottiene sempre lo stesso risultato. Tuttavia, senza conoscere la chiave, non è fattibile calcolare l'output HMAC su un dato messaggio, anche dato un sacco di altre uscite HMAC calcolate con la stessa chiave su altri messaggi (quindi, in particolare, non si può recuperare la chiave da un HMAC output, anche conoscendo il messaggio).
HMAC funge quindi da integrità con chiave: memorizzi l'output HMAC con alcuni dati, in modo che tu possa ricalcolare l'HMAC in un secondo momento e vedere se corrisponde ancora a ciò che è memorizzato. In caso di mancata corrispondenza, sai che i dati, o l'output HMAC memorizzato, o entrambi, sono stati modificati.
Comunque lo metti, HMAC usa una chiave che è segreta. Se non esiste una chiave di per sé, non è più il MAC , è solo un hashing complicato dal punto di vista creativo.
I capisco la tua domanda come implicitamente: hai un sistema di crittografia , che, per un dato messaggio, usa una chiave segreta K e un per-messaggio Vettore di inizializzazione (che puoi chiamare "nonce" se lo desideri). L'IV è adiacente (come testo chiaro) al messaggio crittografato. Si desidera aggiungere un controllo di integrità, in modo che sia possibile rilevare in modo affidabile l'alterazione dannosa. Quindi la tua idea è di calcolare qualcosa con funzioni hash, oltre la concatenazione del messaggio in chiaro e IV, e memorizzare l'output hash come un MAC (trasformando l'hash in "HMAC con gli stessi dati di input chiave e principale" non fondamentalmente cambia le cose qui).
Fondamentalmente, questo tipo di schema è debole. L'hacker conosce l'IV (poiché la conoscenza dell'IV è necessaria per decodificare, non può essere crittografata). Se l'attaccante "indovina" il messaggio, allora può ricalcolare l'hash. Se può apportare alcune modifiche mirate al messaggio (che è particolarmente facile se la crittografia è simile a XOR, come un codice di flusso o un codice a blocchi in modalità CTR), allora può semplicemente ricalcolare il valore di hash e memorizzarlo lì. Anche se si cripta l'output dell'hash con il messaggio stesso, l'autore dell'attacco può comunque modificare il messaggio e l'hash in modo corrispondente se la crittografia è simile a XOR.
Inoltre, quell'hash (o output sort-of-HMAC) può essere usato come test per indovinare il messaggio: l'hacker può hash vari messaggi combinati con l'IV, fino a quando viene trovata una corrispondenza.
Se si desidera eseguire la crittografia con una chiave e aver verificato l'integrità, si è caldamente invitati a farlo con una modalità di crittografia che è stata progettata per tale scopo, ad es. EAX . Se non è presente alcuna crittografia nel sistema e si desidera comunque verificare l'integrità, sarà necessario memorizzare una chiave segreta per tale operazione, comunque la si prende e non ha senso utilizzare HMAC come previsto, ad es. chiave come "chiave".