Come posso mitigare gli attacchi di testo in chiaro scelti per AES BCE?

3

Sto sviluppando su una piattaforma in cui la mia unica opzione di crittografia utilizza AES ECB. La crittografia viene utilizzata per proteggere i parametri che l'utente può impostare e quindi è suscettibile a un attacco di testo in chiaro scelto. Non è un cookie, ma simile; l'utente inserisce le credenziali, che con altri dati vengono inviate al server per l'autenticazione e l'autorizzazione.

Quali passi posso fare per rendere impraticabile l'attacco in chiaro scelto?

In particolare, la mia attuale proposta di mitigazione è quella di aggiungere "riempimenti" casuali prima e dopo il mio contenuto significativo. Il blob crittografato avrà approssimativamente la stessa lunghezza, ma il posto in cui appare il testo cifrato dal testo in chiaro scelto sarà diverso per ogni chiamata. A questo punto le comunicazioni sono a basso volume, quindi sono meno preoccupato per l'efficienza, le dimensioni o il tempo di elaborazione dei dati. Si tratta di una mitigazione efficace?

In alternativa, potrei considerare di randomizzare l'ordine dei campi (il testo in chiaro è JSON). È un po 'più difficile da implementare. Questo renderebbe l'attacco impraticabile?

Ho letto e penso di capire questa grande domanda e risposta .

    
posta Tony 18.01.2016 - 00:43
fonte

1 risposta

2

Il modo più semplice di affrontare ciò che posso pensare è quello di implementare più o meno la modalità CBC te stesso. Tutto ciò che serve è che tu sia sicuro della dimensione del blocco utilizzata:

  • Costruisci un IV casuale (e unico) della stessa dimensione di Dimensione del blocco AES (128 bit) .
  • Criptare quel blocco e memorizzare il risultato (chiamiamolo A)
  • Costruisci una catena di blocchi a 128 bit contenente il tuo messaggio effettivo (aggiungi padding se necessario).
  • Per ogni blocco di quella catena, XOR con il contenuto del buffer A e crittografarlo individualmente. Salva il risultato nel buffer di output e sostituisci anche il contenuto del buffer A.

Per decifrare i dati, decrittografare il primo blocco a 128 bit e memorizzare il risultato in un buffer a 128 bit. Poi prendi ogni blocco da 128 bit, decrittalo, XOR il risultato con il contenuto del buffer A, memorizza il risultato sia nel buffer di output che in A e passa al blocco successivo.

Quindi rimuovi il pad e il gioco è fatto.

Modifica: Un avvertimento:

Il modo migliore sarebbe utilizzare una libreria standard invece di giocare con codice come questo.

Facendo ciò che ho suggerito, stai correndo un rischio piuttosto grave di aggiungere qualche vulnerabilità alla tua implementazione: anche se comprendo pienamente la tua necessità di lavorare con limitazioni specifiche, devi essere consapevole del fatto che sei abbastanza probabile finire con codice vulnerabile a qualche tipo di attacco (anche se potrebbe essere più resiliente dell'implementazione iniziale).

Inoltre, se ti affidi al codice che usa la modalità ECB, significa che l'autore di quel codice non ha capito la crittografia moderna e quindi probabilmente contiene altri errori di base.

    
risposta data 18.01.2016 - 08:34
fonte

Leggi altre domande sui tag