Rc4 ExampleElements of Information Theory
Rc4 ExampleElements of Information Theory
Rc4 ExampleElements of Information Theory
CSS322
Introduction
Lets consider the stream cipher RC4, but instead of the full 256 bytes, we will use 8 3-bits. That is, the state vector S is 8 3-bits. We will operate on 3-bits of plaintext at a time since S can take the values 0 to 7, which can be represented as 3 bits.
Example 1
The rst step is to generate the stream. Initialise the state vector S and temporary vector T. S is initialised so the S[i] = i, and T is initialised so it is the key K (repeated as necessary).
S = [0 1 2 3 4 5 6 7] T = [1 2 3 6 1 2 3 6]
CSS322
For i = 3: j = 6; Swap(S[3],S[6]) S = [2 3 1 6 4 5 0 7]; For i = 4: j = 3 Swap(S[4],S[3]) S = [2 3 1 4 6 5 0 7]; For i = 5: j = 2 Swap(S[5],S[2]); S = [2 3 5 4 6 1 0 7]; For i = 6: j = 5; Swap(S[6],S[5]) S = [2 3 5 4 6 0 1 7]; For i = 7: j = 2; Swap(S[7],S[2]) S = [2 3 7 4 6 0 1 5];
Now we generate 3-bits at a time, k , that we XOR with each 3-bits of plaintext to produce the ciphertext. The 3-bits k is generated by:
i, j = 0; while (true) { i = (i + 1) mod 8; j = (j + S[i]) mod 8; Swap (S[i], S[j]); t = (S[i] + S[j]) mod 8; k = S[t]; }
CSS322
So to encrypt the plaintext stream P with key K with our simplied RC4 stream we get C:
P = [1 2 2 2] K = [1 2 3 6] C = [4 4 2 3]
Or in binary:
P = 001010010010 K = 001010011110 C = 100100010011