domanda su hashing un file crittografato con aes

4

Sto memorizzando più dati sensibili su un server che non possiedo. I dati sono crittografati usando aes-256 usando la modalità cbc. Le chiavi sono solo con me e sono conservate in modo sicuro. Sono preoccupato per il danneggiamento dei dati sul server tramite il trasferimento (che risolvo eseguendo un hash MD5 dopo aver eseguito il trasferimento ssh). L'altra cosa che mi preoccupa è che un attaccante sul server altera volutamente i dati, così che l'hash md5 è lo stesso.

Decifrare un file alterato con via aes causerebbe semplicemente il danneggiamento dei dati decrittografati? e infine md5 è debole per questo scenario, è necessario hmac?

    
posta marcwho 29.08.2013 - 15:00
fonte

2 risposte

3

Se si prende un file crittografato con CBC e si altera un bit (cioè si cambia un bit zero in uno, o viceversa), quindi, dopo la decrittazione, questo sarà:

  1. mescolare più o meno a caso il blocco corrispondente nei dati di testo in chiaro;
  2. capta esattamente un bit nel blocco successivo (ovvero 128 bit più avanti);
  3. cambia nient'altro di tutti . In particolare, la decrittografia non "fallirà".

Vedi lo schema sulla pagina Wikipedia per CBC per capire perché questo funziona modo.

Quello che stai vedendo è che quando usi la crittografia (per riservatezza), di solito vuoi anche avere l'integrità controllata, con un MAC algoritmo come HMAC. Accade quindi che combinando correttamente la crittografia e un MAC sia difficile . La soluzione migliore sarebbe utilizzare un formato di crittografia che funzioni già correttamente. Se è necessario, per qualche motivo, eseguire la propria crittografia, quindi provare a utilizzare una modalità di crittografia che include intrinsecamente un MAC, ad es. GCM o EAX . Se per ragioni tecniche (ad esempio, mancanza di implementazione disponibile) devi comunque utilizzare CBC, quindi aggiungere un HMAC con le seguenti regole:

  • Hash la tua chiave principale K (quella che "memorizzi in modo sicuro") con SHA-256. Suddividi il risultato a 256 bit in due metà a 128 bit, K 1 e K 2 .
  • Utilizza AES-128 in modalità CBC, con K 1 come chiave, per crittografare i dati. Assicurati di utilizzare un IV casuale, generato di nuovo per ogni file, con un PRNG crittograficamente sicuro.
  • Calcola HMAC / SHA-256, con K 2 come chiave, sopra la concatenazione di IV e il file crittografato .
  • Archivia il file in un formato che includerà l'IV, l'output HMAC e il risultato della crittografia. La semplice concatenazione funzionerebbe, dal momento che l'output IV e HMAC hanno note lunghezze fisse (16 byte per IV, 32 byte per HMAC / SHA-256).
  • Quando decifri, verifica il valore HMAC prima e procedi con la decrittografia dei dati solo se il valore HMAC sembra essere corretto.

Potresti notare che sostengo AES-128, non AES-256. Questo perché una chiave di crittografia a 256 bit è inutile overkill e incorre in una penalità di velocità del 40%. Se desideri ancora una chiave di crittografia a 256 bit, ad es. perché devi corteggiare un gestore senza clu con quanto è grande la tua chiave, quindi usa SHA-512 per eseguire l'hash della tua chiave principale K in un'uscita a 512 bit, che può essere divisa in due metà a 256 bit .

Raccomando anche HMAC / SHA-256, che dovrebbe essere "abbastanza veloce". Un PC di base può utilizzare AES-128 e HMAC / SHA-256 combinati a più di 60 megabyte al secondo. Se hai bisogno di più velocità e hai una piattaforma a 64 bit, allora HMAC / SHA-512 può darti un vantaggio, ma a spese di renderlo più difficile per i sistemi a 32 bit. In ogni caso, la rete da 100 Mbit / s raggiungerà circa 11 megabyte al secondo, quindi la velocità di crittografia probabilmente non sarà comunque un problema.

    
risposta data 29.08.2013 - 16:07
fonte
1

Hash, quindi cripta se sei preoccupato per i dati che vengono modificati sul server. Dal momento che un utente malintenzionato non ha una chiave, non sarebbe in grado di memorizzare correttamente un nuovo hash. Questo è lo stesso principio della firma di un file, anche se lo si fa con la crittografia simmetrica (che verifica solo che qualcuno con la chiave abbia autenticato il file).

    
risposta data 29.08.2013 - 15:47
fonte

Leggi altre domande sui tag