Ottenere corrispondenze di chiavi multiple su coppie di testo in chiaro / cifrato in doppio DES

1

Sto provando a implementare un attacco Meet-in-the-Middle e, solo per testarlo, ho apportato alcune codifiche di valori, che è semplicemente questo blocco di codice semplice:

byte[] key1 = new byte[] { 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
byte[] key2 = new byte[] { 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };

string p1 = "Hello Dear World";
string p2 = "Hello Evil World";

//SimpleDES is just a C# implementation of DES that I've wrapped in its own class
SimpleDES des1 = new SimpleDES(key1);
SimpleDES des2 = new SimpleDES(key2);

byte[] toEncrypt1 = Encoding.ASCII.GetBytes(p1);           
c1 = Convert.ToBase64String(des2.Encrypt(des1.Encrypt(toEncrypt1)));

byte[] toEncrypt2 = Encoding.ASCII.GetBytes(p2);
c2 = Convert.ToBase64String(des2.Encrypt(des1.Encrypt(toEncrypt2)));

Lascerò altro codice, a meno che non sia richiesto da nessuno di voi.

Il problema è che date le semplici chiavi di test sopra e test di testo in chiaro, sto ottenendo diverse coppie di chiavi che quando vengono crittografate con key1 e quindi key2 restituisce lo stesso testo cifrato.

C'è qualcosa di ovvio, da quello che ho dichiarato finora, che lo spiega, o ho bisogno di guardare più da vicino il mio codice di forza bruta.

È causato dalla chiave breve che sto usando?

    
posta DSF 23.06.2015 - 22:23
fonte

1 risposta

2

Per un cifrario ogni chiave definisce una permutazione diversa, ma ciò non significa che non possano esserci relazioni 1: 1 identiche. Prendi AES-256, che mappa i valori 2 ^ 128 in altri valori 2 ^ 128 usando una chiave a 256 bit e cripti un testo in chiaro a 16 byte, diciamo tutti gli zero. L'output avrà anche 2 ^ 128 valori. Quindi ci devono essere chiavi che mappino lo stesso testo in chiaro allo stesso testo cifrato.

Probabilmente non è quello che ti sta mordendo. I tasti DES hanno bit di parità, che è il bit più basso in ogni byte. Questo bit si assicura che il numero di bit nel byte sia sempre dispari. Un'implementazione può scegliere di ignorare il bit di parità. Se si dispone di una chiave che differisce solo per quanto riguarda la parità, il valore chiave utilizzato per derivare i sottochiavi è identico. Pertanto, contano solo i 7 bit più in alto di ogni byte, dando a DES una dimensione di bit effettiva di 64 - 8 = 56 bit.

    
risposta data 23.06.2015 - 23:53
fonte

Leggi altre domande sui tag