Utilizzo HMAC corretto

3

Ho appena letto questo articolo , che è un top 10 elenco di errori crittografici dello sviluppatore. Nel numero 7, afferma che "HMAC non dovrebbe essere applicato al testo in chiaro ma al testo cifrato combinato con il IV". Ho sempre pensato che l'HMAC fosse calcolato dal testo in chiaro. Dopo aver eseguito alcuni ulteriori letture , mi sono reso conto che i miei pensieri iniziali erano errati. Tuttavia, non riesco ancora a capire perché l'IV debba essere concatenato al testo cifrato prima di applicare l'HMAC. Perché è così?

    
posta Enigmatic Cipher 30.04.2017 - 18:34
fonte

2 risposte

2

La modifica dell'IV comporterà una manomissione prevedibile nel primo blocco decrittografato. P' = P xor IV xor TamperIV .

Dato che stai provando a provare il recupero dei dati originali devi includere il IV.

E devi applicare l'HMAC al ciphertext + IV invece del testo in chiaro per due motivi:

  1. Gli stessi dati con la stessa chiave HMAC lo stesso, che può rivelare dati (sconfiggendo l'IV casuale in modalità CBC)
  2. Se qualcuno sta manomettendo i dati crittografati, potrebbe tentare di farti rivelare dati sul canale laterale, o magari farlo cadere. Dimostrando che il testo cifrato (e IV) è inalterato si dice che è sicuro decodificare.
risposta data 30.04.2017 - 20:08
fonte
2

Questa frase si applica in particolare quando HMAC viene utilizzato in combinazione con la crittografia. HMAC può essere usato da solo se ti interessa solo il messaggio autenticità : garantisce chi ha prodotto il messaggio, ma non nasconde il contenuto del messaggio. Questa frase non si applica in questo caso. Quando HMAC viene utilizzato solo per l'autenticità, l'HMAC viene calcolato sul testo in chiaro e questo è quanto.

Quando vuoi avere sia la segretezza che l'autenticità, cioè quando vuoi nascondere il contenuto del messaggio e garantirne l'origine, allora hai bisogno di crittografia autenticata . Esistono modalità operative che forniscono la crittografia autenticata; GCM, che è menzionato nell'articolo, è una scelta popolare e una buona scelta.

È anche possibile cobble un meccanismo di crittografia autenticato combinando un meccanismo di crittografia (come un codice di blocco in modalità CTR o CBC) con un meccanismo di autenticazione (come HMAC). Tuttavia, farlo correttamente è sottile. Ci sono due modi principali per farlo: encrypt-then-MAC o MAC-then-encrypt. La frase che citi dice che dovresti fare encrypt-then-MAC, cioè criptare prima il messaggio e quindi autenticare il risultato finale (che è il testo cifrato incluso IV). Questa è una buona raccomandazione di principio , ma non è facile da implementare correttamente.

La raccomandazione contro GCM è negativa. Sì, fallisce se il IV viene riutilizzato. Tuttavia una libreria crittografica decente chiamerà l'RNG da solo per generare un IV, eliminando il rischio di riutilizzo IV (a meno che il sistema RNG non sia rotto, nel qual caso anche la generazione della chiave è interrotta). (Esistono cattive librerie crittografiche che richiedono al chiamante di eseguire tutti gli impianti idraulici, evitarli.) È molto più semplice utilizzare una libreria GCM correttamente che assemblare correttamente HMAC e crittografia. La raccomandazione poco chiara di fare encrypt-then-HMAC contraddice la raccomandazione n. 1 dell'articolo contro la "zuppa cripto".

A meno che tu non abbia una buona ragione per farlo, e tu capisci perfettamente cosa stai facendo, usa sempre le librerie crittografiche di livello più alto che fanno ciò di cui hai bisogno . Utilizzare un livello di protocollo che si basa su TLS ed eseguire la verifica del certificato, se possibile, utilizzare il meccanismo di crittografia del disco o del disco del sistema operativo e della password invece di eseguire il rollover, utilizzare librerie crittografiche che eseguono internamente tutte le chiamate RNG e la generazione IV e aggiungerle devi scendere al livello crittografico, ecc.

    
risposta data 01.05.2017 - 01:19
fonte

Leggi altre domande sui tag