#### CSCI 7000 - Cryptanalysis - Spring 2005

### Problem Set #2

#### Due: Feb 22nd, 2005 at 11am

**Remember, your homework MUST be submitted in LaTeX!**
For this problem, I have implemented DES for you.
Use it if you please.

Do not hand in homework electronically; print it out and bring it to class.

**Problem 1. (Difficulty: 3) **
Change DES to WDES as described in class. This entails taking the DES
code above and setting rounds to 16, leaving off the IP and IPI and
FINAL_REVERSE switches, and modifying the S-boxes to be linear in the
way we described. Then find the key that maps
plaintext (9237bca1, f62011da) to ciphertext (a35498dc, 1b44aaa9).
Turn in your code as usual along with an execution.

** Problem 2. (Difficulty: 3) **
The DES code above is ready to go for 3-round differential attacks.
We will use the differential given in class (Fig 3.10 of Stinson).
In particular, use the following pairs (by adding this code to hwdes.c):

int pairs[][2][2][2] = {
{
{ {0x748502cd, 0x38451097}, {0x03c70306, 0xd8a09f10} },
{ {0x38747564, 0x38451097}, {0x78560a09, 0x60e6d4cb} }
},
{
{ {0x48691102, 0x6acdff31}, {0x45fa285b, 0xe5adc730} },
{ {0x375bd31f, 0x6acdff31}, {0x134f7915, 0xac253457} }
},
{
{ {0x357418da, 0x013fec86}, {0xd8a31b2f, 0x28bbc5cf} },
{ {0x12549847, 0x013fec86}, {0x0f317ac2, 0xb23cb944} }
}
};

Now mount a differential attack using these three pairs to completely
recover the key. Note that you will have to do an exhaustive key search
after the initial differential attack is done.
Turn in your code as usual along with an execution.

** Problem 3. (Difficulty: 3) **
We now lauch a differential attack against 6-round DES, using the
3-round differential given in class (Fig 3.12 of Stinson). Set
the number of rounds to 6, and fix the key (yes, you heard me, pick
a key and fix it in your program). Because we will need about 120
input pairs, I'm going to let you generate them yourself rather than
give them to you as I did in problem 2.

Now, generate the pairs with the given differential, filter out the
wrong pairs, and tabulate counters for the key candidates. Recover
the key for 6-round DES (no cheating even though the key is in your
program to begin with!).

Turn in your code as usual along with an execution.