Una stringa crittografata AES CBC basata su password ha una maggiore sicurezza?

2

Per un'applicazione Java che ho scritto, prendo una password fornita da un utente e genera una chiave AES a 128 bit da essa utilizzando 100.000 iterazioni di PBKDF2-HMAC-SHA512 con un sale a 512 bit generato in modo casuale. Io uso questa chiave per crittografare un file usando la crittografia in modalità AES-CBC e poi faccio qualcosa con quei dati crittografati.

Ciò che mi infastidisce è che sembra che qualcuno possa solo generare password e quindi decifrare il primo paio di byte del testo cifrato e vedere se ne esce fuori spazio.

Sono paranoico o c'è un lavoro extra che può essere fatto?

Ad esempio, esiste una modalità di AES che impedisce la decrittografia parziale del testo cifrato? O qualcos'altro che rallenta il processo di testare molte chiavi?

    
posta Lezorte 18.07.2018 - 21:51
fonte

2 risposte

1

La capacità di decifrare una porzione del testo cifrato non è critica.

È prassi comune, ad esempio nei programmi di crittografia del disco, aggiungere una stringa fissa (nota) al testo cifrato e verificare quindi se la password non riesce. Indipendentemente dalla modalità in uso, questo non sarebbe il punto critico.

La modalità CBC ha solo una debolezza significativa: La modalità CBC non impedisce gli attacchi di manomissione, ovvero un utente malintenzionato che indovina una parte del testo cifrato è in grado di modificarlo in base ai propri scopi. Se disponibile, utilizza la modalità GCM, EAX, CCM o OCB.

    
risposta data 19.07.2018 - 08:56
fonte
-1

is there a mode of AES which prevents partial decryption of cipher-text

Dichiaro di non essere un esperto in crittografia, ma la mia comprensione del chain block cipher (CBC) è che presenta dei punti deboli principalmente causati dalla mancanza di autenticazione. Anche se, poiché il suo vettore di inizializzazione (IV) è un valore fisso ( IV predittività ), questo IV emette l'ultimo blocco del testo cifrato. È possibile visualizzare in che modo le diverse implementazioni AES nascondono i dati relativi a un'immagine " Testo parzialmente decodificato a prescindere da IV ".

"La decrittografia con IV errato causa la corruzione del primo blocco di testo in chiaro, ma i successivi blocchi di testo in chiaro saranno corretti, poiché ogni blocco è XORed con il testo cifrato del blocco precedente, non il testo in chiaro, quindi non è necessario per decodificare il blocco precedente prima di usarlo come IV per la decodifica di quello corrente. " - Modalità di crittografia a blocchi

Galois / Counter Mode (GCM) è spesso pensato come GCM = CTR + autenticazione. AES-GCM con una corretta implementazione IV è considerato più sicuro rispetto ad altre alternative AES. GCM è preferito perché è un algoritmo più veloce e, a differenza di CBC, GCM supporta l'autenticazione. Tuttavia, GCM "se riutilizzi un nonce. Un singolo nonce ripetuto consente ad un avversario di recuperare la sua sottochiave di autenticazione, oltre ad apprendere lo XOR dei due messaggi con lo stesso nonce." che ovviamente non è l'ideale. Inoltre, GCM utilizza IV a 96 bit, rendendo i tassi di collisione più elevati e il riutilizzo IV potenzialmente più frequente.

Questo thread Come scegliere una modalità di crittografia AES? dovrebbe essere d'aiuto in quanto evidenzia le diverse implementazioni AES, che dovrebbero consentire di scegliere quale sia appropriato per la tua infrastruttura.

Sebbene, nonostante tutto ciò, opterei per CBC per l'archiviazione locale. GCM ha percepito di più per le comunicazioni crittografate in rete (in tempo reale).

Or anything else that slows down the process of testing lots of keys

Presumibilmente con le chiavi si fa riferimento alle password. Dove vuoi passare le password attraverso una funzione di hashing unidirezionale con più iterazioni (cicli) per l'archiviazione da parte di qualcosa (database probabile).

L'hashing della password sembra più importante. Ho letto più dispute relative all'uso della famiglia SHA-2 per l'hashing delle password, la maggior parte delle critiche derivano da SHA-2 che non esegue più iterazioni, qualcosa che hai già fatto, ma questo non riguarda il tuo scenario direttamente come stai usando PBKDF2 con HMAC SHA512. Tuttavia, vorrei verificare quale tipo di sistema ha il tuo potenziale aggressore e implementare un moderno algoritmo di hashing per proteggerlo. Per esempio. usano CPU, GPU o ASIC per forzare il PBKDF2. Argon2 è noto per la sua buona resistenza contro la maggior parte dei tentativi di forzatura bruta. Confrontando i tre algoritmi Argon2:

  • Argon2d: migliore protezione contro la forza bruta GPU.
  • Argon2i: ottimizzato per resistere agli attacchi dei canali laterali. Accede all'array di memoria in un ordine indipendente dalla password.
  • Argon2id: un ibrido di Argon2d e Argon2i.

Tutte e tre le modalità consentono di specificare da tre parametri che controllano:

  • tempo di esecuzione
  • memoria richiesta
  • grado di parallelismo

Queste specifiche dovrebbero essere considerate per tutti gli algoritmi di hashing della password. PBKDF2 è una funzione di hashing nota e riconosciuta che è considerata sicura per l'hashing della password. Tuttavia, è riconosciuto debole rispetto a una forza bruta ASIC.

Vorrei scegliere tra Argon2id o PBKDF2 HMAC SHA512, e valutare a seconda del tipo di autore di attacchi con cui mi sto difendendo.

    
risposta data 18.07.2018 - 23:11
fonte

Leggi altre domande sui tag