AES-ECB ha scelto l'attacco in chiaro con un lungo segreto

6

Ho qualche problema a capire la metodologia per un esercizio criptato che sto facendo. L'obiettivo dell'esercizio è recuperare una stringa segreta crittografata tramite un attacco chiave scelto su AES in modalità ECB.

Ho una funzione oracle che accetta una stringa come input, aggiunge la stringa segreta ad essa e restituisce la stringa crittografata AES-ECB-128, usando una chiave statica generata a caso.

oracle("text goes here!!") -> AES.encrypt("text goes here!!somesecretsomesecret", "staticrandomkey!")

Capisco come ottenere il testo in chiaro per la frase segreta usando il metodo descritto qui , e ho avuto successo nel recupero Stringhe segrete a 16 byte.

Quello che non capisco è, in che modo questo metodo può essere applicato a stringhe segrete più lunghe di 16 byte? A meno che non manchi qualcosa di ovvio, funziona solo per recuperare il primo blocco di un segreto aggiunto.

    
posta Mego 07.10.2015 - 14:51
fonte

1 risposta

6

Penso che tu abbia già detto la soluzione nel tuo post, ma diciamocelo.

  1. AES funziona con blocchi di 16 byte (128 bit)
  2. Il segreto viene aggiunto a un testo che hai scelto.
  3. ???
  4. Scopri i caratteri della stringa segreta uno per uno

Se non fosse un esercizio, darei maggiori dettagli ...

Modifica

Una volta trovati i primi 16 byte, tutto ciò che devi fare è:

Esattamente la stessa cosa, ma guarda il secondo blocco!

La soluzione ...

  1. Ottieni il primo blocco segreto

Immettere 15 caratteri e recuperare i primi 16 byte codificati Quindi immettere 16 caratteri cambiando l'ultimo fino a ottenere lo stesso risultato di 15 caratteri per i primi 16 byte codificati. Quel sedicesimo personaggio è il primo personaggio del tuo segreto. È quindi possibile ripetere il processo inserendo 14 caratteri e quindi trovare i secondi caratteri segreti con la stessa tecnica.

  1. Ottieni il secondo blocco segreto

Hai già trovato i primi 16 byte segreti. Ora inserisci 15 caratteri e trova il risultato per il secondo blocco di byte codificati; byte da 17 a 32. Quindi inserire 32 caratteri, cambiando solo l'ultimo fino a trovare i 17 caratteri segreti nella stringa segreta. Quindi ripetere per trovare il 18 e così via byte.

    
risposta data 07.10.2015 - 15:14
fonte

Leggi altre domande sui tag