Come utilizzare una chiave diversa e IV per crittografare un file con AES in C ++?

1

So come funziona la crittografia AES e diverse modalità (ad esempio EAX, CBC, CCM, ...) e anche i metodi CipherBlock e StreamTransformationFilter e la loro implementazione in C ++.

Sto usando il toolkit Crypto ++. Voglio utilizzare la modalità EAX per crittografare un file e utilizzare il metodo AuthenticatedEncryptionFilter per la crittografia come StreamTransformation . Ora, cosa succede se si utilizza una singola chiave e IV per crittografare ogni file? È sicuro usare la stessa chiave e IV? In caso contrario, come faccio a utilizzare chiavi diverse e IV per crittografare un file e dove archiviare le chiavi e gli IV?

    
posta Mohammadreza Panahi 18.06.2016 - 12:26
fonte

1 risposta

1

L'uso della stessa chiave e IV coppia per la crittografia di più file è molto pericoloso perché la crittografia dei due file con lo stesso contenuto risulterà lo stesso testo cifrato per qualsiasi crittografia in modalità blocco. Ecco alcuni post correlati su questo argomento:

Perché le coppie di chiavi IV / non devono essere riutilizzate in modalità CTR?

Pericoli dell'utilizzo della modalità CTR per la crittografia

AES-CBC e IV - Crittografia di più blocchi di un file con lo stesso IV?

It is insecure to reuse the IV with AES-CBC. At the very least, if the files have a common prefix, this will be revealed as a common prefix of the ciphertexts. For AES-CBC, the only way to ensure confidentiality is to use random IVs.

Quali sono i vincoli per un IV che utilizza AES in modalità CBC?

The IV for a block cipher in CBC mode must not only be "uniquely used for each message encrypted with the same key". It is usually assumed to be indistinguishable from random by an adversary.

Tieni presente che l'utilizzo di la stessa chiave e iv pair per la modalità GCM comporterebbe conseguenze disastrose in ogni caso. Puoi verificare la seguente domanda (in realtà, nella maggior parte delle domande relative alla modalità GCM, vedresti persone che menzionano questo caso di utilizzo errato).

Quanto male sta usando la stessa IV due volte con AES / GCM?

Il mio consiglio è di usare chiave simmetrica casuale e IV casuale per ogni crittografia di file e memorizzarli nel file crittografato usando Cryptographic Message Syntax (CMS) , puoi usare EnvelopedData tipo di contenuto in cui memorizzi il contenuto cifrato. In questo caso, la chiave di crittografia del contenuto ( CEK ) ( chiave simmetrica casuale ) viene crittografata utilizzando la chiave pubblica dell'utente (che può essere raggiunta dal certificato dell'utente) e archiviata come crittografata con il contenuto crittografato. Per quanto riguarda random IV , è archiviato come open perché non ha bisogno di essere privato, ma deve solo essere imprevedibile. Quando un utente ha bisogno di decrittografare un file, decodifica basicamente CEK usando la chiave privata che ha. Da lì, usando CEK e IV puoi decodificare il contenuto crittografato.

Se non puoi o non vuoi utilizzare CMS, puoi utilizzare la stessa chiave con diversi IV per la crittografia di più file. Non conosco alcuna debolezza per questo uso. È necessario memorizzare la chiave come crittografata, ma è possibile memorizzare gli IV come non crittografati. Nota, potresti volerli archiviare come firmati per vedere se sono cambiati o meno senza preavviso.

    
risposta data 18.06.2016 - 14:03
fonte

Leggi altre domande sui tag