L'AES dovrebbe sempre dare lo stesso risultato?

19

Ho difficoltà a comprendere AES e vorrei sapere se la crittografia dello stesso testo con la stessa chiave due volte di seguito dovrebbe fornire lo stesso risultato.

C'è qualche sale o qualcosa che cambierebbe l'uscita?

Se non fornisce la stessa cosa, come si può decifrare il messaggio (con la chiave) se il sale è casuale e non lo sa?

Se dà la stessa cosa, potrebbero essere utilizzate le tabelle arcobaleno per recuperare il messaggio?

    
posta user31008 19.09.2013 - 09:01
fonte

2 risposte

24

Un blockcipher come AES è una permutazione con chiave. Nel caso di AES prende una chiave e quindi trasforma un blocco da 16 byte in un altro blocco da 16 byte in modo deterministico.

Per crittografare qualcosa con una cifratura a blocchi è necessario utilizzare una modalità di funzionamento . In genere queste modalità richiedono una IV (simile a una salina) che dovrebbe essere diversa per ogni messaggio crittografato. Questa differenza nell'IV porta a un messaggio crittografato completamente diverso. La crittografia dello stesso messaggio con lo stesso IV e la chiave restituisce sempre lo stesso testo cifrato. La crittografia di più messaggi con lo stesso IV e la chiave indebolisce la sicurezza, ma dipende dalla modalità.

Le proprietà richieste per un IV dipendono dalla modalità scelta, a volte deve essere univoca (ad esempio per la modalità CTR), a volte deve essere casuale in modo imprevedibile (ad esempio per la modalità CBC). Ma generalmente non deve essere segreto, quindi lo si invia al destinatario accanto al testo cifrato, tipicamente come prefisso.

Esistono alcune modalità progettate per la crittografia deterministica. Usando queste modalità perdi ancora se due messaggi sono uguali, ma niente di più. Dovresti usare queste modalità solo quando hai bisogno di determinismo.

    
risposta data 19.09.2013 - 10:49
fonte
12

AES è una cifra di blocco : prende come input un blocco (16 byte, nel caso di AES) e un tasto (16, 24 o 32 byte, per AES) e emette un altro blocco (di nuovo 16 byte). È un algoritmo completamente deterministico, completamente specificato, e tutti nel mondo dovrebbero ottenere lo stesso blocco di output per lo stesso blocco e chiave di input.

Tuttavia, non si cripta un blocco, si cripta un messaggio . Il codice a blocchi è solo un elemento di costruzione; la crittografia effettiva utilizza una modalità di funzionamento che richiama ripetutamente il codice di blocco. Ci sono buone modalità e ci sono cattive modalità; l'obiettivo è quello di ottenere la riservatezza del messaggio nel suo complesso e di non perdere informazioni parziali, ad esempio se due parti del messaggio sono uguali tra loro. In particolare, se vogliamo crittografare due messaggi con la stessa chiave, di solito non vogliamo rivelare se i due messaggi erano identici o meno, quindi qualcosa deve cambiare, da qualche parte, tra le due crittografie .

La maggior parte delle modalità operative utilizza un vettore di inizializzazione che è il punto in cui viene iniettato il non-determinismo. Alcune modalità (ad es. GCM o EAX ) richiede solo un IV non ripetuto; un contatore può andare bene per loro e può essere implicito in qualche contesto (ad esempio quando ci sono messaggi successivi su un determinato flusso di comunicazione, il numero del messaggio può servire come IV). Alcune altre modalità, in particolare CBC, sono sicure in tutta la generalità solo se l'IV viene scelto in modo casuale, uniforme, con un strong PRNG e il prossimo IV da usare non è già noto quando vengono scelti i dati in testo normale. l'incapacità di soddisfare tutti questi requisiti è stata la fonte di molti problemi, ad es. l'attacco BEAST su SSL .

Quindi si potrebbe dire che la crittografia simmetrica sicura richiede almeno memoria (ad esempio, per ricordare un valore del contatore) o casualità . La "memoria" può essere un contatore comune in tutto il mondo (ad esempio l'ora corrente, ma fai attenzione alle regolazioni dell'orologio!).

Se sei pronto a tollerare la piccola perdita sul fatto che due determinati messaggi di input siano identici o meno, allora è possibile avere un parametro completamente deterministico, senza memoria sistema di crittografia, ma non sarà compatibile con la crittografia in streaming (è necessario mantenere l'intero messaggio in memoria durante il processo). Fondamentalmente si calcola un algoritmo MAC deterministico sul messaggio (come HMAC ) e si utilizza l'output come IV. Questo è un algoritmo a due passaggi, ed è piuttosto inevitabile. Se due messaggi di origine sono identici, restituiranno lo stesso messaggio crittografato, ma se differiscono da qualche parte (anche sul loro ultimo bit), quindi, con alta probabilità, i messaggi crittografati saranno completamente diversi.

Sfortunatamente, le piattaforme per le quali la memoria e / o la casualità sono requisiti difficili (ad esempio, le smart card) sono anche piattaforme in cui la RAM è un vantaggio e un sistema a due passaggi può essere eccessivamente costoso.

    
risposta data 19.09.2013 - 13:27
fonte

Leggi altre domande sui tag