Modo semplice:
Scrivi uno script che tenta la decrittografia con openssl
utilizzando tutte le modalità di cifratura a blocchi. Vorrei prendere in considerazione l'uso di openssl
in uno script BASH o importare pyOpenSSL
(o subprocess
) e usare try / except blocks in python (o l'equivalente in qualunque lingua tu sia più comodo) per ottenere rapidamente la giusta modalità.
Modo accademico:
Scrivi un oracle di rilevamento .
Se non hai ancora letto le sfide Matasano Crypto , ti consiglio di iniziare da Imposta 1 e leggi sull'implementazione e il rilevamento di BCE. Set 2 implementa / rileva CBC e crea anche un oracolo di rilevamento CBC / ECB. Una volta compreso come funzionano le modalità di cifrario a blocchi, diventa più facile capire come distinguerle l'una dall'altra.
Sfortunatamente è qui che la mia conoscenza al momento diventa confusa sull'argomento, quindi se un oracolo di rilevamento ECB / CBC non identifica il testo cifrato, ti suggerisco di dare un'occhiata a questa buona risposta a un simile domanda . L'utente spiega cosa è necessario cercare per identificare OFC / CTR ed EAX / GCM, che è possibile utilizzare per creare un oracolo di rilevamento più completo.
Aggiornamento 9-mar-2016
Ho cercato di affrontare il problema dell'identificazione delle modalità di cifratura a blocchi, in base al solo testo cifrato, nell'ultima settimana. Il problema con la risposta a cui ho fatto riferimento (in relazione a questo obiettivo) è che presuppone la conoscenza della chiave / IV per essere in grado di analizzare la propagazione dell'errore. Ho letto tutti i libri di crittografia che possiedo, ho cercato l'interwebs e ho posto una domanda specifica su crypto.SE .
Da questa ricerca fino ad ora, sono giunto alla conclusione che:
- La BCE può essere identificata facilmente e coerentemente, dato un testo cifrato di dimensioni sufficientemente grandi.
- I cifrari di flusso (CFB, OFB, CTR) possono essere facilmente identificati se il testo cifrato non è una lunghezza di blocco appropriata, tuttavia non ho ancora trovato un modo per differenziare i cipri di flusso l'uno dall'altro in base al solo testo cifrato.
Con questa informazione, un testo cifrato di lunghezza del blocco (AES = 128) può essere assunto con una certezza del ~ 99,22% (1/128 possibilità che il testo cifrato dello stream sia multiplo di blocklen = ~ 0,78 possibilità) di essere un codice a blocchi. Da qui, il suddetto oracolo di rilevamento sarà in grado di rilevare la BCE se viene utilizzato. Se non viene rilevato ECB, si rimane con CBC e PCBC come le due principali possibilità. Questa è la migliore analisi di rilevamento che ho trovato finora.