Il test per la modalità ECB / CBC / OFB / CTR è abbastanza semplice. È anche semplice vedere se la modalità ha crittografia autenticata come EAX / GCM (anche se non è semplice vedere quale modalità di AE).
- ECB: ha un file con molti blocchi simili nel testo in chiaro. Vedete blocchi identici nel testo cifrato? (Sì, questo è simile alla risposta di Dan, l'ultima parte della risposta di Adnan, ma inclusa per completezza).
- CBC: crittografa un file e quindi capovolgi un bit nell'IV (tipicamente nel primo blocco del testo cifrato); dì che hai capovolto il quinto bit del primo blocco. Vedete un identico bit capovolto nel primo blocco del testo in chiaro dopo la decifratura? Allo stesso modo, capovolgere un bit casuale più avanti nel file dice l'ottavo bit nel decimo blocco del testo cifrato. Quando decifri, vedi il 10 ° blocco senza senso, e poi l'ottavo bit dell'11 ° blocco viene capovolto? Di nuovo, consulta il diagramma modalità di funzionamento per la decrittografia CBC e il motivo dovrebbe essere chiaro.
- OFB / CTR: verifica se hai un codice di streaming. Senza toccare IV / Random Nonce (tipicamente il primo blocco), se si modifica un po 'più avanti nel testo cifrato, si vede lo stesso bit capovolto nel testo in chiaro decrittografato? Se è così, hai un codice stream; una differenza importante da CBC è che in questo caso non c'è un blocco senza senso. Sono d'accordo con il commento di CodesInChaos che c'è poca differenza di sicurezza tra OFB / CTR. Se hai la chiave di crittografia 1 chiamala K, puoi differenziare OFB / CTR. Ad esempio, lasciare
c[1]
, c[2]
essere il primo e il secondo blocco di testo cifrato e p[1]
, p[2]
essere il primo blocco di testo in chiaro. Calcola D(K, c[1] XOR p[1])
e D(K, c[2] XOR p[2])
, dove D(K, c)
è la decrittografia del blocco c
con la chiave K
. Se sono numeri consecutivi, hai la modalità CTR. Se D(K, c[2] XOR p[2]) = c[1] XOR p[1]
allora hai la modalità OFB.
- EAX / GCM - Entrambe sono crittografate autenticate - contengono un codice di autenticazione dei messaggi (MAC) e il file non decodificherà (nemmeno in caratteri privi di senso) se il file è alterato in quanto il MAC non sarà valido con probabilità schiacciante.
Certo, molti di questi presuppongono cose come la dimensione del blocco, ma dovrebbe essere facile da capire. Ad esempio, crittografare un messaggio molto piccolo (1 byte). Quindi, supponendo che non sia coinvolto MAC, probabilmente creerai un messaggio a due blocchi (IV + un blocco di testo cifrato riempito, anche se CTR / OFB potrebbe non funzionare); quindi crittografare un messaggio più lungo. Da prove ed errori, dovresti essere in grado di scoprire la dimensione del blocco e la dimensione IV.
EDIT: Sono assolutamente d'accordo con l'eccellente punto sollevato da Thomas Pornin. Questo tipo di reverse engineering potrebbe aiutare a scoprire il codice a blocchi, ma in realtà non verifica la sicurezza. Ci sono molte backdoor che potrebbero essere state nascoste in modo che non si possa rilevare senza rovinare l'ingegneria inversa, passando attraverso l'assemblea. Ad esempio, potresti credere di disporre di un codice a blocchi di crittografia autenticato che può essere decodificato solo con la chiave segreta costruita sulla passphrase. Ma in realtà il file è crittografato con una chiave casuale, che è a sua volta crittografata all'inizio del file utilizzando sia la passphrase, e poi una volta con la loro chiave backdoor. Quindi, sarebbero in grado di decifrare qualsiasi file che si usa. O forse lo schema fa questo stesso schema, ad es. All'inizio del file store la chiave per-file da decifrare usando la tua chiave segreta, ma ci sono solo circa un miliardo di chiavi (che le conoscono tutte). O forse è crittografato solo con la tua chiave, ma la funzione di derivazione della chiave utilizza solo i primi ~ 30 bit dell'hash della tua passphrase come chiave. Quindi, potrebbe essere molto rapidamente forzato con un miliardo di tentativi. Allo stesso modo, non deve essere una backdoor deliberata; potrebbe essere solo un'imperfezione impercettibile dell'implementazione, consentendo di eseguire gli ataack del canale laterale.
1 Questo non è stato presupposto per le altre parti - ci sono molti modi in cui si può sapere di inserire una passphrase nel sistema di decrittografia, ma non si conosce la funzione di derivazione della chiave (o funzione di crittografia) utilizzato internamente per generare la chiave.