You are on page 1of 12

RC4

Criptosisteme simetrice fluide: RC4

n=3
23 =8 – flux de biţi
Formăm vectorul S: 01234567
Alegem cheia: 17, K – vectorul cheii
Codul ASCII al cheii este: 1 → 49; 7 → 55;
Vectorul cheii este:
49 55 49 55 49 55 49 55
Depunem valorile codului ASCII al cheii:

S 0 1 2 3 4 5 6 7

K 49 55 49 55 49 55 49 55
Efectuăm permutări asupra biţilor vectorului S: 
Iniţial i=0, j=0.
j=(j+K[i]+S[j]) mod 8

1) i=0, j=(0+K[0]+S[0]) mod 8 = (0+49+0) mod 8 = 49 mod 8 = 1;


SWAP(S[i],S[j])=SWAP(S[0],S[1])=10234567=55 49 49 55 49 55 49 55
S 1 0 2 3 4 5 6 7
K 55 49 49 55 49 55 49 55
2) i=1, j=(1+K[1]+S[1]) mod 8 = (1+49+0) mod 8 = 50 mod 8 = 2;
SWAP(S[i],S[j])=SWAP(S[1],S[2])=12034567=55 49 49 55 49 55 49 55
S 1 2 0 3 4 5 6 7
K 55 49 49 55 49 55 49 55
3) i=2, j=(2+K[2]+S[2]) mod 8 = (2+49+0) mod 8 = 51 mod 8 = 3;
SWAP(S[i],S[j])=SWAP(S[2],S[3])=12304567=55 49 55 49 49 55 49 55

S 1 2 3 0 4 5 6 7
K 55 49 55 49 49 55 49 55
4) i=3, j=(3+K[3]+S[3]) mod 8 = (3+49+0) mod 8 = 52 mod 8 = 4;
SWAP(S[i],S[j])=SWAP(S[3],S[4])=12340567=55 49 55 49 49 55 49 55
S 1 2 3 4 0 5 6 7

K 55 49 55 49 49 55 49 55

5) i=4, j=(4+K[4]+S[4]) mod 8 = (4+49+0) mod 8 = 53 mod 8 = 5;


SWAP(S[i],S[j])=SWAP(S[4],S[5])=12345067=55 49 55 49 55 49 49 55
S 1 2 3 4 5 0 6 7
K 55 49 55 49 55 49 49 55

6) i=5, j=(5+K[5]+S[5]) mod 8 = (5+49+0) mod 8 = 54 mod 8 = 6;


SWAP(S[i],S[j])=SWAP(S[5],S[6])=12345607=55 49 55 49 55 49 49 55
S 1 2 3 4 5 6 0 7
K 55 49 55 49 55 49 49 55
7) i=6, j=(6+K[6]+S[6]) mod 8 = (6+49+0) mod 8 = 55 mod 8 = 7;
SWAP(S[i],S[j])=SWAP(S[6],S[7])=12345670=55 49 55 49 55 49 55 49
S 1 2 3 4 5 6 7 0

K 55 49 55 49 55 49 55 49

8) i=7, j=(7+K[7]+S[7]) mod 8 = (7+49+0) mod 8 = 56 mod 8 = 0;


SWAP(S[i],S[j])=SWAP(S[7],S[0])= 02345671= 49 49 55 49 55 49 55 55
S 0 2 3 4 5 6 7 1

K 49 49 55 49 55 49 55 55
CRIPTARE

 
Alegem un mesaj pentru criptare m = Procesor.
Iniţial i=0, j=0.
i=(i+1) mod 8 = 1 mod 8 = 1.
j=(j+S[i]) mod 8 = (j+S[1]) mod 8 = (0+2) mod 8 = 2
 
Calculam t:
t=(S[i]+S[j]) mod 8 = (S[1]+S[2]) mod 8 = (2+3) mod 8 = 5
r = chr(ord(m)) XOR S[t]
Cheile de criptare
S[t] = S[5] = 6, K[5] = (49)10 = (00110001)2
m[0] = P → (80)10 = (01010000)2
m[1] = r → (114)10 = (01110010)2
m[2] = o → (111)10 = (01101111)2
m[3] = c → (99)10 = (01100011)2
m[4] = e → (101)10 = (01100101)2
m[5] = s → (115)10 = (01110011)2
m[6] = o → (111)10 = (01101111)2
m[7] = r → (114)10 = (01110010)2
r[0] = 01010000 XOR 110001 = (1100001)2 = (97)10 → a
r[1] = 01110010 XOR 110001 = (1000011)2 = (67)10 → C
r[2] = 01101111XOR 110001 = (1011110)2 = (94)10 → ^
r[3] = 01100011 XOR 110001 = (1010010)2 = (82)10 → R
r[4] = 01100101 XOR 110001 = (1010100)2 = (84)10 → T
r[5] = 01110011 XOR 110001 = (1000010)2 = (66)10 → B
r[6] = 01101111 XOR 110001 = (1011110)2 = (94)10 → ^
r[7] = 01110010 XOR 110001 = (1000011)2 = (67)10 → C
Decriptare
Cript r =aC^RTB^C;
K=17;
S=S 02345671
0 2 3 4 5 6 7 1
K 49 49 55 49 55 49 55 55

Iniţial i=0, j=0.


i = (i+1) mod 8 = 1 mod 8 = 1.
j = (j+S[i]) mod 8 = (j+S[1]) mod 8 = (0+2) mod 8 = 2
SWAP(S[i],S[j]) mod 8 = (3+2) mod 8 = 5
 
i = chr(ord(r)) XOR S[t]
r[0] = a → (97)10 = (1100001)2
r[1] = C → (67)10 = (11000011)2
r[2] = ^ → (94)10 = (1011110)2
r[3] = R → (82)10 = (1010010)2
r[4] = T → (84)10 = (1010100)2
r[5] = B→ (66)10 = (1000010)2
r[6] = ^ → (94)10 = (1011110)2
r[7] = C → (67)10 = (1000011)2
Decriptare
m[0] = 1100001 XOR 110001 = (1010000)2 = (80)10 → P
m[1] = 11000011 XOR 110001 = (01110010)2 = (114)10 → r
m[2] = 1011110 XOR 110001 = (01101111)2 = (111)10 → o
m[3] = 1010010 XOR 110001 = (01100011)2 = (99)10 → c
m[4] = 1010100 XOR 110001 = (01100101)2 = (101)10 → e
m[5] = 1000010XOR 110001 = (01110011)2 = (115)10 → s
m[6] = 1011110 XOR 110001 = (01101111)2 = (111)10 → o
m[7] = 1000011XOR 110001 = (01110010)2 = (114)10 → r

Mesajul criptat r = „aC^RTB^C” decriptat va fi: „Procesor”.

You might also like