Valore chiave e sicurezza HMAC

3

Che effetto ci sarebbe se avessi usato lo stesso valore che stavi tagliando come chiave in un HMAC?

Ad esempio, dato il seguente esempio:

message: "my secret message" 
nonce: "0BHKK9IFbdF85KrzMFNpauyxWsM="

Se ho combinato il messaggio e il nonce (messaggio + nonce) e usato quella combinazione per la chiave HMAC e quella combinazione è anche ciò che viene sottoposto all'hash che influenza avrà in termini di sicurezza dell'HMAC?

Sembrerebbe in superficie che questo risolva il problema di dover mantenere una chiave di secratura costante, perché la chiave stessa, il messaggio, è conosciuta solo dalla persona che ha scritto il messaggio in primo luogo e il nonce semplicemente essere aggiunto durante la verifica.

Pensieri?

    
posta TugboatCaptain 20.01.2012 - 18:15
fonte

2 risposte

4

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".

    
risposta data 20.01.2012 - 18:52
fonte
2

Un MAC è un codice di autenticazione . Un MAC corretto dice "Io, il portachiavi, ho visto questo messaggio esatto". L'intero punto di utilizzo di un MAC è quello di mettere il possessore della chiave segreta nel ciclo. Se la chiave è dedotta dal messaggio, l'unica cosa che il valore ti dice è che conosci il messaggio. Un semplice riassunto lo fa già.

L'aggiunta di un sale è ortogonale; puoi farlo con un digest o con un MAC.

Ok, ora leggi la risposta di Tom (che in qualche modo nasconde la risposta in un saggio interessante).

    
risposta data 20.01.2012 - 19:58
fonte

Leggi altre domande sui tag