Posso determinare il codice utilizzato per crittografare un file con OpenSSL?

4

Ho due file che sono stati crittografati usando OpenSSL. So che il primo è stato crittografato utilizzando bf-cbc e conosco anche la password per decrittografarlo. È probabile che il secondo file utilizzi la stessa password, ma quando provo a decodificarlo viene visualizzato il seguente messaggio di errore:

bad decrypt
29034:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:330:

Se provo a decodificarlo utilizzando un codice diverso (ad esempio aes-128-cbc poiché è il primo della lista) ottengo lo stesso identico messaggio di errore.

Quindi l'errore che sto ottenendo a causa di una password errata o di una cifra errata? È effettivamente possibile dire? Immagino di poter provare ogni cifra nella mia versione OpenSSL e vedere se qualcuno di loro funziona. C'è una scorciatoia per provare questo?.

    
posta Rowan Parker 16.04.2012 - 08:23
fonte

2 risposte

4

Se il tuo cifrario sta usando padding (cioè non è in una modalità di streaming come CFB, OFB, CTR o CTS), allora potrebbe essere in grado di dirlo semplicemente osservando la dimensione dei dati crittografati. Ad esempio se è 24 byte (192 bit), quindi potrebbe essere Blowfish (perché ha una dimensione di blocco di 64 bit e 192 è divisibile per 64) e non può essere AES perché 192 non può essere diviso per 128 (AES misura del blocco). Ma dato che la maggior parte delle dimensioni dei blocchi sono multipli l'una dell'altra, questo probabilmente non sarà molto utile, ma può essere usato per restringere la scelta a volte.

Se il metodo di cui sopra non è riuscito, è computazionalmente impossibile distinguere i dati decrittografati con la chiave errata con il codice corretto ei dati decrittografati con la chiave corretta con il cifrario sbagliato. Entrambi producono dati casuali. (questo può essere formalizzato assumendo che il codice sia una permutazione casuale). Questo a meno che il cifrario non abbia grandi punti deboli, ovviamente, che probabilmente non è il caso se è incluso in OpenSSL (eccetto quelli vecchi sicuri per l'esportazione come 40-bit rc4).

Quindi l'unico modo è provare tutti i possibili cifrari con i quali i dati potrebbero essere stati crittografati (esiste un numero infinito di potenziali cifrari, ma solo pochi sono effettivamente utilizzati nel mondo). Puoi sempre creare uno script per automatizzarlo.

Ovviamente, è possibile memorizzare il codice utilizzato per crittografare il file accanto ad esso (o al suo interno), come un byte che assume un valore diverso per ogni cifra. Se la chiave viene tenuta segreta, questo non presenta alcun rischio per la sicurezza (i codici moderni sono progettati per fare affidamento completamente sulla chiave - vedi Principio di Kerckhoffs).

    
risposta data 21.04.2012 - 16:09
fonte
2

So is the error I'm getting due to a bad password or the wrong cipher?

Forse uno o entrambi. Ritengo che la funzione EVP_DecryptFinal_ex () verifichi che il valore e la dimensione del padding dopo la decrittografia siano coerenti con le dimensioni del blocco utilizzate dal processo di crittografia e le dimensioni del messaggio di input se si utilizza il padding (il valore predefinito). L'errore restituito sembra indicare che il controllo non è riuscito e che la scelta di algo e / o chiave è errata.

Is it actually possible to tell?

Io non la penso così Gli esperti potrebbero voler pesare qui.

    
risposta data 18.04.2012 - 13:55
fonte

Leggi altre domande sui tag