Sunteți pe pagina 1din 29

Algoritmi moderni de criptare(2)

Algoritmul Blowfish
Blowfish este un cod bloc simetric dezvoltat de Bruce
Schneier. Algoritmul a fost proiectat (1993) să satisfacă
următoarele proprietăţi:
• Rapid: Blowfish criptează date pe microprocesoare de
32 biţi la o viteză de 18 cicluri de ceas pe byte.
• Compact: Blowfish poate rula în mai puţin de 5K
memorie.
• Simplu: Blowfish are o structură simplu de implementat
şi uşor de analizat
• Securitate variabilă: Lungimea cheii este variabilă şi
poate ajunge până la 448 biţi. Acest lucru permite o
alegere între viteză mare şi securitate puternică.

Blowfish criptează blocuri de 64 biţi având ca ieşire tot


blocuri de 64 biţi.
Criptarea şi decriptarea
Blowfish foloseşte două operaţii de bază:
• Adunarea: adunarea cuvintelor notată cu +
şi este efectuată modulo 232
• Sau exclusiv pe biţi: notat XOR

Mesajul original este divizat în două jumătăţi


de 32 biţi notate LE0 şi RE0 . Se vor folosi
variabilele LEi şi REi pentru cele două
jumătăţi după ce tura i s-a terminat.
Algoritmul de criptare: Algoritmul de decriptare:

For I=1 to 16 do For I=1 to 16 do


REi = (LEi -1)XOR(Pi) RDi = (LDi -1)XOR(P19-i)
LEi=(F[REi])XOR(REi-1) LDi=(F[RDi])XOR(RDi-1)
EndFor EndFor
LE17 = (RE16 )XOR(P18) LD17 = (RD16 )XOR(P1)
RE17 = (LE17 )XOR(P17) RD17 = (LD16 )XOR(P2)
• Structura funcţiei F: intrarea
de 32 biţi în funcţia F este
divizată în 4 bytes. (a,b,c,d).

• Funcţia F se defineşte:
F [a, b,c,d] =
((S1.a + S2.b) XOR (S3.c)) + S4.d
caracteristici
• algoritmul Blowfish, toate cutiile S şi subcheile sunt produse ale
unor procese de aplicare repetată a însuşi algoritmului Blowfish.
Aceasta modifică foarte mult biţii şi de aceea criptanaliza lui este
grea.
• Cea mai importanta caracteristică a acestei metode este viteza de
criptare
• Un atac cu forţă brută (exhaustiv) este foarte dificil, deoarece
procesul de generare a subcheilor ia foarte mult timp. Un total de
522 execuţii a algoritmului de criptare sunt necesare pentru a
testa o singură cheie.
• Funcţia F dă algoritmului Blowfish cel mai bun efect de avalanşă
pentru o reţea Feistel.
• Fiecare bit de intrare al funcţiei F este folosit ca intrare pentru o
singură cutie S, în contrast cu DES unde mai mulţi biţi sunt folosiţi
ca intrare în două cutii S, ceea ce defavorizează DES în cazul
unui atac criptanalitic diferenţial.
• Spre deosebire de alţi algoritmi funcţia F din Blowfish nu este
dependentă de tură.
• Blowfish este practic invulnerabil în faţa unui atac exhaustiv
datorită lungimii variabile a cheii care poate fi până la 448 biţi.
Algoritmul Twofish
• Algoritmul Twofish, dezvoltat de Bruce Schneier,
John Kelsey, Doug Whiting, David Wagner,
Chris Hall şi Niels Ferguson, a fost publicat în
iunie 1998.
• Structura algoritmului Twofish este foarte
asemănătoare cu cea a algoritmului DES,
folosind 16 ture din reţeaua Feistel. Singurele
excepţii faţă de reţeaua clasică Feistel sunt cele
două deplasări circulare cu un bit efectuate,
împreună cu operaţiile XOR, la ieşirea funcţiei F.
Algoritmul utilizează chei cu o lungime maximă
de 256 biţi şi codifică blocuri de date de 128 biţi.
Etapele de implementare ale acestui
algoritm sunt:

• conversia “little endian” iniţială;


• albirea (whitening) intrării;
• cele 16 runde de tip Feistel;
• albirea ieşirii;
• conversia “little endian” finală.
Analiza algoritmului Twofish
• Criptarea şi decriptarea sunt independente de lungimea
cheii. (cheia de lungime maximă 256 biţi )
• Algoritmul a fost conceput pentru implementare
hardware şi suportă generarea “on-the-fly” a subcheilor
(cheile sunt calculate în timpul criptării sau decriptării),
cu calculul subcheilor în orice ordine. Cutiile-S
dependente de chei complică analiza.
• Algoritmul Twofish este un cod bloc simetric cu o
complexitate ridicată (este destul de dificil de analizat)
care suportă chei de lungime 128 biţi, 192 biţi şi 256 biţi.
• La proiectarea algoritmului Twofish s-a avut în vedere ca
structura lui să nu conţină operaţii sau elemente care
să-l facă ineficient în hardware pe microprocesoare pe
64 biţi, 32 biţi, 16 sau 8 biţi.
Algoritmul RC2
• RC2 este un algoritm simetric de codificare
realizat de Ron Rivest, şi publicat în 1997.
• Această metodă foloseşte blocuri cu 64 de biţi
din textul original şi din textul codificat, lungimea
cheii variază între 8 şi 1024 biţi. Algoritmul a fost
realizat astfel încât să fie uşor implementat pe
procesoare cu 64 de biţi.
• Metoda RC2 produce din cheia originală 128 de
bytes de subchei care sunt notate cu L[0], L[1],
..., L[127], sau dacă folosim notaţia cu cuvinte
de 16 biţi: K[0], K[1], ..., K[63].
Criptarea
RC2 foloseşte următoarele operaţii primitive:
• Adunarea: Adunarea cuvintelor, notată cu ‘+’,
este în modulo 232. Operaţia inversă la
decodificare va fi notată cu ‘-’, şi este în modulo
232.
• Sau-exclusiv pe biţi: Această operaţie este
notată cu ⊕.
• Complement: Operaţie notată cu ~.
• Şi: Operaţie notată cu &.
• Rotaţia circulară: Rotaţia circulară a unui
cuvânt x la stânga cu y biţi este notată cu
x<<<y. Rotaţia la dreapta este notată cu x>>>y.
• Algoritmul de codificare începe cu
împărţirea intrării de 64 de biţi în patru
blocuri de 16 biţi: R[0], R[1], R[2], R[3]. La
sfârsit, blocul codificat (de 64 de biţi) se
realizează prin lipirea valorilor finale ale
acestor patru blocuri R[0], R[1], R[2], R[3].
Algoritmul are în total 18 runde de două
tipuri:
a) Prima este de forma:
R[0] = R[0] + K[j] + (R[3] & R[2]) + ((~R[3] & R[1]);
R[0] = R[0] <<< 1;
j = j +1;
R[1] = R[1] + K[j] + (R[0] & R[3]) + ((~R[0] & R[2]);
R[1] = R[1] <<< 2;
j = j +1;
R[2] = R[2] + K[j] + (R[1] & R[0]) + ((~R[1] & R[3]);
R[2] = R[2] <<< 3;
j = j +2;
R[3] = R[3] + K[j] + (R[2] & R[1]) + ((~R[2] & R[0]);
R[3] = R[3] <<< 5;
j = j +3;

unde, K[j] este primul cuvânt subcheie care încă nu a fost folosit.
Această amestecare poate fi descrisă în cuvinte în următorul fel:
următoarea subcheie K[j] este adunată cu R[i]. După aceasta R[i-1]
(indexul este calculat în modulo 3), ~R[i-1], R[i-2], R[i-3] sunt folosite
pentru a crea două cuvinte ‘mixte’ care vor fi adunate cu R[i].
b) Acest tip de amestecare este simplu:

R[0] = R[0] + K[R[3] & 63];


R[1] = R[1] + K[R[0] & 63];
R[2] = R[2] + K[R[1] & 63];
R[3] = R[3] + K[R[2] & 63];
• Deci, la fiecare R[i] este adunat un cuvânt
subcheie. Numărul cuvintelor de subcheie
este 64 şi de aceea se iau în considerare
numai 6 biţi din R[i-1].
Algoritmul RC2 este definit astfel:
1. Se iniţializează j = 0.
2. Se execută 5 runde de tip a (j = 20).
3. Se execută o rundă de tip b.
4. Se execută 6 runde de tip a (j = 44).
5. Se execută o rundă de tip b.
6. Se execută 5 runde de tip a (j = 64).
• Fiecare rundă de tip a foloseşte patru subchei.
În total sunt 16 runde de tip a, deci toate
subcheile sunt folosite o singură dată. În
rundele de tip b sunt folosite subchei
dependente de valoarea datelor.
Algoritmul RC5
• RC5 este un algoritm de criptare simetric dezvoltat de Ron Rivest (1994)
având următoarele caracteristici:
• Se poate implementa atât hardware cât şi software: RC5 foloseşte doar
instrucţiuni de bază implementate în majoritatea microprocesoarelor.
• Rapid: Pentru a obţine acest lucru RC5 este un algoritm simplu orientat pe
cuvinte. Operaţiile de bază se fac la un moment dat cu cuvinte întregi de
date.
• Adaptabil la procesoare care folosesc cuvinte de lungime diferită:
Numărul de biţi dintr-un cuvânt este un parametru pentru RC5.
• Numărul de ture (runde) este variabil: Numărul de ture este al doilea
parametru pentru RC5, utilizatorul având posibilitatea de a alege fie o viteză
de criptare mare, fie o securitate mai ridicată.
• Cheie de lungime variabilă: Lungimea cheii este al treilea parametru
pentru RC5.
• Simplitate: RC5 are o structură simplă, uşor de implementat.
• Necesită o cantitate redusă de memorie: Acest lucru face ca algoritmul
RC5 să fie adecvat pentru Smart-carduri şi alte dispozitive cu memorie
restrânsă.
• Securitate înaltă: RC5 este destinat să asigure o înaltă securitate
criptografică cu parametrii variabili.
• RC5 este de fapt o familie de algoritmi de
criptare determinaţi de următorii parametrii:

Parametru Definiţie Valori admise


w Dimensiunea cuvântului. RC5 16, 32, 64
criptează blocuri de 2 cuvinte
r Numărul de ture (runde) 0, 1, …, 255
b Numărul de octeţi din cheia secretă K 0, 1, …, 255
• RC5 criptează blocuri de 32, 64, 128 biţi
rezultând blocuri de aceeaşi lungime. Lungimea
cheii este între 0 şi 2040 biţi.
• O versiune specifică de RC5 este notată RC5-
w/r/b. De exemplu RC5-32/12/16 foloseşte
cuvinte de 32 biţi (blocuri de 64 biţi), 12 ture şi o
cheie de criptare de 16 octeţi (128 biţi).
Extinderea cheii

• RC5 execută un set complex de operaţii


pentru a produce cele t subchei având la
bază cheia originală. Două subchei sunt
folosite în fiecare tură la care se mai
adaugă încă două care sunt folosite pentru
o operaţie care nu face parte din ture. În
acest caz numărul necesar de subchei
este de t = 2r +2, unde r este numărul de
ture. Fiecare subcheie este de lungimea
unui cuvânt adică w biţi.
Criptarea RC5
• RC5 foloseşte trei operaţii de bază şi
inversele lor:
• Adunarea: Adunarea notată + şi inversa ei
scăderea – ambele efectuate modulo 2w
• Sau-exclusiv pe biţi notat XOR.
• Deplasarea circulară la stânga:
Deplasarea circulară la stânga a
cuvântului x cu y biţi se notează x<<<y;
Inversa ei este deplasarea circulară la
dreapta notată x >>> y.
Algoritmul poate fi definit de următorul pseudocod:
LE0 = A + S[0];
RE0 = B + S[1];
For i=1 to r do
LEi =(((LEi-1)XOR(REi-1)<<<REi-1) + S[2i];
REi =(((REi-1)XOR(LEi)<<<LEi) + S[2i+1];
EndFor
Decriptarea RC5
• Algoritmul de decriptare poate fi descris în
felul următor:
For i=r down to 1 do
RDi-1 =((RDi – S[2i+1]>>>LDi )XOR(LDi));
LDi-1 =((LDi – S[2i]>>>RDi-1)XOR(RDi-1));
EndFor
B = RD0 – S[1];
A = LD0 – S[0];
Algoritmul RC6
• RC6 a fost propus în anul 1998
• RC6 a fost dezvoltat având ca bază de
plecare RC5, căruia i s-au adus modificări
în scopul creşterii gradului de securitate şi
nu în ultimul rând al îmbunătăţirii
performanţelor.
Descrierea algoritmului
• Ca şi RC5, RC6 este o familie în întregime
parametrizată de algoritmi de criptare. O
versiune a lui RC6 este notată RC6-w/r/b, unde
dimensiunea cuvântului este de w biţi, criptarea
constă într-un număr de runde r, iar b denotă
lungimea cheii de criptare în biţi. Valorile tipice
ale parametrilor sunt: w=32, r=20 şi
b∈{16,24,32}.
• Pentru toate variantele RC6-w/r/b se operează
cu module de patru biţi, cărora li se asociază
şase operaţii de bază
operaţii de bază

1. a+b adunare de întregi modulo 2w


2. a-b scădere de întregi modulo 2w
3. a ⊕ b sau exclusiv pentru cuvinte de w biţi
4. axb multiplicare modulo 2w
5. a<<<b rotirea la stânga a cuvântului a de w biţi
cu un număr de biţi egal cu valoarea dată de
cei mai puţin semnificativi lg2w biţi din b.
6. a>>>b rotirea la dreapta a cuvântului a de w
biţi cu un număr de biţi egal cu valoarea dată
de cei mai puţin semnificativi lg2w biţi din b.
Caracteristicile algoritmilor simetrici
Algoritm Lungime Nr. Operaţii matematice
cheie runde
DES 56 biți 16 XOR
Triple DES 112 sau 168 biți 48 XOR
IDEA 128 biți 8 XOR, adunare, multiplicare
Blowfish Variabilă până la 16 XOR, adunare
448 biți
Twofish Variabilă până la 16 XOR, rotația
256 biți
RC5 Variabilă până la Variabil Adunare, XOR, rotația
2048 biți până la 255
RC2 Variabilă între 8 18 Adunare, XOR, complement,
și 1024 biți &, rotația
RC6 Variabilă 16, 24, 20 Adunare mod 2, scădere
32 biți mod 2, rotația stânga/
dreapta, multiplicare mod 2w

S-ar putea să vă placă și