Quanto è difficile modificare il testo cifrato AES in modo significativo

1

Dire che ho il testo user:123 crittografato con AES/ECB/PKCS5Padding , risultante nel testo cifrato vnjlWxfkYuTK3juNY38NKQ== . Quanto è difficile modificare il testo cifrato per ottenere un altro valore numerico a 3 cifre significativo? È simile in difficoltà alla forzatura bruta della chiave di crittografia?

Se modifico solo un byte del testo cifrato, ottengo dati confusi nell'intero blocco, quindi ho bisogno di una modifica piuttosto elaborata al testo cifrato al fine di influenzare solo la parte del valore in modo significativo. Quanto elaborato sarebbe questo cambiamento?

Sfondo: Vengo abbastanza spesso in tutti i casi in cui la crittografia viene utilizzata come mezzo per trasmettere "segretamente" i dati tra le applicazioni, il più delle volte utilizzando una modalità di crittografia AES. Nella maggior parte di questi casi è tuttavia più importante che i dati non vengano modificati durante il trasporto o dall'utente, anziché essere leggibili.

Esempio : l'utente X viene registrato nell'applicazione A e passa tramite un collegamento, con parametri contenenti l'identità dell'utente, all'applicazione B. I parametri del collegamento sono crittografati AES / ECB, utilizzando una chiave che è noto ad entrambe le applicazioni. HTTPS viene utilizzato da entrambe le applicazioni, quindi viene trattata la minaccia dei parametri letti da una terza parte. Ancora più importante è che l'utente non può modificare la propria identità e impersonare un altro utente.

Vorrei sottolineare questo malinteso comune agli sviluppatori e agli architetti delle applicazioni A e B, che la crittografia significa che i dati non possono essere modificati, mostrando uno scenario di attacco in cui il testo cifrato viene modificato, in modo che, al momento della decodifica, i dati validi sono ricevuti In questo modo possono capire meglio che in questi casi è necessario un algoritmo di crittografia autenticato.

    
posta Andrei Socaciu 15.01.2018 - 09:56
fonte

2 risposte

3

Se il testo in chiaro inserito si inserisce in un singolo blocco, modificarlo in modo significativo senza conoscere la chiave dovrebbe essere davvero dannatamente impossibile, nel senso tecnico di poterlo fare (anche solo una parte del tempo) conta come un'interruzione su larga scala di AES.

In altre parole, la crittografia single-block AES è auto-autenticante nel grado esatto in cui lo spazio di valori inattivi è piccolo rispetto nello spazio di tutti i possibili blocchi (supponendo che il destinatario verifichi effettivamente che il blocco decifrato sia valido). Non importa se i testi in chiaro validi sono per lo più simili o sembrano molto diversi; tutto ciò che conta è solo il numero di quelli che ci sono. Questo perché AES, come ogni altro buon codice a blocchi, dovrebbe comportarsi come una permutazione pseudo-casuale dello spazio di tutti i possibili blocchi.

Questo ovviamente ignora la possibilità di attacchi al protocollo di livello superiore, come ad esempio l'ingannare il destinatario ad accettare un blocco che era già crittografato separatamente (per esempio, per una diversa esecuzione del protocollo).

Una volta che il testo in chiaro è più lungo di un blocco, l'uso di ECB rende banalmente facile combinare elementi di messaggi codificati separatamente ai limiti dei blocchi. Ma questa è una proprietà della BCE, non di AES in particolare. Nessuna applicazione a metà strada dovrebbe utilizzare la BCE per i dati che non sono noti sempre per adattarsi a un singolo blocco.

Nel tuo esempio sembra che sarebbe molto più rilevante attaccare l'applicazione A direttamente che attaccare la comunicazione tra A e B. Ad esempio, se l'applicazione A viene eseguita su un dispositivo o account che l'utente controlla, l'utente potrebbe probabilmente modificare i dati prima che l'applicazione A li possa anche crittografare e / o ispezionare l'applicazione (in esecuzione?) per estrarre la chiave.

In alternativa, sembra che il protocollo che stai schizzando sia probabilmente vulnerabile agli attacchi di riproduzione, senza preoccuparsi di modificare tutti i messaggi. Ciò significa che un attacco al trasporto TLS (come ingannare il client nel trust di una CA radice che controlli) potrebbe essere trasformato in un attacco alla parte di autenticazione - ad esempio la crittografia aggiuntiva delle credenziali potrebbe dare molto meno sicurezza che i progettisti intendono.

    
risposta data 15.01.2018 - 11:42
fonte
0

La modifica dei dati crittografati è talvolta possibile tramite un attacco bitflip . Questo è più un attacco della modalità di operazione a blocchi di crittografia e non proprio all'algoritmo di crittografia. In alcune modalità operative (ma non in ECB) il testo cifrato è XORed con testo in chiaro dal blocco successivo o precedente. Ciò significa che girare un po 'altera un intero blocco e capovolge un bit in un altro blocco.

Per un esempio pratico, considera che viene offerto un cookie crittografato che contiene quanto segue:

{"user": "johndoe", "nick": "john", "admin": 0}

Quando viene crittografato utilizzando la modalità CBC, viene suddiviso in blocchi di 16 byte. Ogni blocco è XORed con il blocco precedente (o il vettore di inizializzazione) e crittografato. Il messaggio è composto dai seguenti blocchi:

  • {"user": "johndo
  • e", "nick": "joh
  • n", "admin": 0}

Nelnostroattaccodibitflip,giriamounpo'iltestocifratodelblocco2.Ciòfaràsìcheilblocco2neltestoinchiarodecrittografatodiventiinutile,macapovolgeràancheunbitnelblocco3.CiòaccadeperchéilrisultatodelladecrittografiaèXORedconiltestocifratodelbloccoprecedente,cheèsottoilnostrocontrollo:

IlrisultatoèuncookiecontenenteJSONvalido,conilflagadminimpostatosu1:

{"user": "johndoaRbUTPasBIrmAnO5n", "admin": 1}
    
risposta data 15.01.2018 - 13:37
fonte

Leggi altre domande sui tag