Controlla HMAC dopo aver completato la decodifica o prima?

1

Ho scritto un software che codifica simmetricamente file di grandi dimensioni (multi-megabyte). Il testo normale è crittografato, dopo la crittografia l'HMAC viene calcolato e scritto nell'intestazione del file. Durante la crittografia, aggiorno HMAC continuamente, utilizzando come blocchi di dati crittografati (crittografia e MAC). Non ci sono checksum su ogni blocco, quindi l'unica possibilità di verificare se il file crittografato è stato compromesso è leggere l'intero file crittografato, calcolare l'HMAC dell'intero file e confrontarlo con il valore memorizzato nell'intestazione del file crittografato.

La mia domanda: sulla decrittografia, è meglio autenticare prima i dati crittografati e poi tentare di decrittografarli, o procedere con la decrittazione e alla fine confrontare HMAC dall'intestazione del file con l'HMAC effettivo della crittografia dati?

Ecco le mie considerazioni:

1. Il calcolo dell'HMAC prima del tentativo di decrittografia mi sembra, a prima vista, più "sicuro". D'altra parte, devo prima leggere l'intero file, calcolare e confrontare HMAC e quindi leggere l'intero file ANCORA UNA VOLTA - questa volta per decodificare il testo in chiaro. Questo diminuisce le prestazioni, specialmente se il file di input è grande, ma non memorizziamo testo cifrato decifrato su disco (o altrove), quindi se il testo in chiaro è compromesso, l'utente generale non può accedervi AT ALL.

2. L'altra opzione è decifrare il file immediatamente, scrivere l'output decrittografato su disco, dopo che l'intero file è stato elaborato calcola HMAC - se non è uguale al valore HMAC dall'intestazione del file, restituisci errore "file danneggiato" ed elimina l'output decrittografato dal disco (poiché lo consideriamo non valido). Questo meccanismo aumenta la velocità generale del processo di decrittografia, poiché il file di input viene letto una sola volta. D'altra parte, se il file di input è compromesso, non sono stati scritti i dati decrittografati su disco, poiché, dal momento che il confronto HMAC non è riuscito, dovrebbero essere (e saranno) cancellati dopo il controllo HMAC.

La scrittura di dati decifrati da file crittografati potenzialmente manomessi compromette la sicurezza? Come potrebbe aiutare un aggressore? Come supponiamo che l'hacker sappia tutto tranne la password, lui / lei sarebbe in grado di decifrare il file compromesso come descritto nell'opzione 2. Ma non sono in grado di dire se questo lo aiuterà in qualche modo.

Altrimenti, supponiamo che per la crittografia vengano utilizzate password lunghe e casuali, il cifrario utilizzato è anche sicuro, l'autenticazione della password avviene tramite KDF (PBKDF2, scrypt, qualunque cosa), quindi, come sopra descritto, il mio solo preoccupazione è come eseguire correttamente l'autenticazione.

EDIT: per favore, non rispondere NON come "devi prima crittografare, quindi HMAC". La domanda NON riguarda questo. Criptico sempre, quindi HMAC. La domanda è: dovrei HMAC, quindi decrypt o viceversa?

Grazie per l'attenzione.

    
posta Acetylator 24.06.2015 - 15:20
fonte

1 risposta

2

Disclaimer obbligatorio: Se possibile, non implementare la tua crittografia.

Verificare prima la validità del file decrittografato e poi decrittografarlo indipendentemente dal fatto che le corrispondenze MAC siano il modo più sicuro per farlo. Dopodiché, assicurati che, se si verifica un errore, viene sempre restituito lo stesso tipo di errore.

La divulgazione di qualsiasi informazione sul motivo di un errore è un serio rischio per la sicurezza. Ad esempio, se un MAC errato e un riempimento difettoso nel file decrittografato restituiscono messaggi di errore diversi, è possibile montare un padding oracle attack . Alcuni attacchi oracle di riempimento, come tredici fortunati , devono solo notare una differenza nel tempo per poter attaccare il tuo cripto . Questo è il motivo per cui è più sicuro decodificare sempre il file indipendentemente dalla mancata corrispondenza del MAC.

A seconda della primitiva crittografica e della modalità di funzionamento che stai utilizzando, è necessario prendere in considerazione attacchi diversi.

    
risposta data 24.06.2015 - 16:43
fonte

Leggi altre domande sui tag