# The Data Encryption Standard (of 1977)

CS 463 Lecture, Dr. Lawlor

DES is an old cipher from the 1970's, but it's got the same basic structure as modern more secure ciphers.
• DES encryption starts with a block of 64 bits of plaintext.
• A series of 16 rounds mix the plaintext bits with each other and the key, using a combination of bit shifting, XOR, and several very small (6 bit input, 4 bit output) S-boxes.
Here's the source code, this version from PolarSSL/library/des.c:

/*
* DES-ECB block encryption/decryption
*/
int des_crypt_ecb( des_context *ctx,
const unsigned char input[8],  // data size: 64 bits
unsigned char output[8] )
{
int i;
uint32_t X, Y, T, *SK;

SK = ctx->sk;

GET_UINT32_BE( X, input, 0 );  // this implementation converts to int (from big-endian)
GET_UINT32_BE( Y, input, 4 );

DES_IP( X, Y ); // "initial permutation"

for( i = 0; i < 8; i++ ) // 8 forward-reverse rounds (16 rounds total)
{
DES_ROUND( Y, X ); // xor's Y based on table[X]
DES_ROUND( X, Y ); // xor's X based on table[Y]
}

DES_FP( Y, X ); // "final permutation"

PUT_UINT32_BE( Y, output, 0 );
PUT_UINT32_BE( X, output, 4 );

return( 0 );
}

The biggest limitation of DES is the very short key--64 bits, but 8 of those are just used for parity checking.  A 56-bit key space is within the realm of brute force: FPGA implementations today can check hundreds of billions of keys per second, so crack DES in about a day.  ASIC implementations are even faster.