Documente Academic
Documente Profesional
Documente Cultură
=
+
=
k
i
i j j
M Y
ad"ugnd k litere succesive pentru a ob#ine litera criptat" Y
j.
Astfel se ob#ine
disiparea informa#iei statistice din mesajul original. Pe de alt" parte efectul de
confuzie caut" s" fac" ct mai complex" rela#ia dintre mesajul criptat !i cheia de
criptare, efect ob#inut prin algoritmi de substitu#ie complec!i.
3.3. Structura codului Feistel
Figura 3.$ ilustreaz" structura !i modul de func#ionare a codului Feistel.
Algoritmul are ca intrare un bloc de lungime 2w !i cheia K. Blocul de intrare este
divizat n dou" jum"t"#i L
0
!i R
0.
Cele dou" jum"t"#i trec prin n ture (runde) de
procesare !i apoi sunt combinate pentru a forma blocul de ie!ire criptat. Fiecare tur"
i are ca intrare L
i
!i R
i
derivate din tura anterioar", la fel ca !i subcheia K
i
derivat"
din cheia K. n general subcheile K
i
sunt diferite ntre ele !i diferite de cheia K.
Fiecare tur" are aceea!i structur". Se efectueaz" o substitu#ie pe jum"tatea
din stnga. Acest lucru este ob#inut prin aplicarea unei func#ii F p"r#ii din dreapta,
iar apoi se efectueaz" o opera#ie XOR (sau-exclusiv) pe bi#i ntre partea din stnga
!i rezultatul func#iei F. Func#ia F are aceea!i structur" pentru fiecare tur", dar are ca
parametru subcheia K
i
. Dup" efectuarea substitu#iei se execut" o permuta#ie
schimbnd cele dou" jum"t"#i ntre ele. Aceast" structur" este o form" particular" a
re#elei substitu#ie-permuta#ie (SPN Substitution-Permutation Network ) propus" de
Shannon.
Figura 3.#. Re#eaua clasic" Feistel
Realizarea exact" a re#elei Feistel depinde de alegerea urm"toarelor
caracteristici !i parametrii:
! Lungimea blocului: Un bloc de dimensiune mare nseamn" securitate mai
mare dar reduce viteza de criptare/decriptare. Un bloc de 64 sau $28 bi#i este
rezonabil !i este folosit aproape universal de algoritmii care folosesc coduri
bloc.
! Lungimea cheii: O cheie de lungime mare spore!te securitatea dar poate
reduce viteza de criptare/decriptare. Chei de 64 bi#i sau mai scurte sunt
Tehnici de securizare a datelor !i programelor curs 3 7 8 Tehnici de securizare a datelor !i programelor curs 3
considerate inadecvate n zilele noastre, cheile de $28 sau 256 bi#i devenind
uzuale.
! Num"rul de ture: Esen#a codului Feistel este c" o singur" tur" nu ofer" destul"
securitate, turele multiple sporind securitatea. Un num"r rezonabil de ture este
$6.
! Algoritmul de generare a subcheii: O complexitate mare a algoritmului
conduce la o dificultate mare la criptanaliz".
! Func!ia tur" (F): Se poate spune acela!i lucru ca !i despre algoritmul de
generare a subcheii: o complexitate mare a algoritmului conduce la o dificultate
mare la criptanaliz".
! Criptare/decriptare software rapid": n multe cazuri func#iile de criptare
sunt ncapsulate n aplica#ii sau utilitare care servesc ca introducere pentru
implementarea lor hardware. Astfel viteza execu#iei algoritmului devine de
mare interes.
! Analiz" u$oar": Acest fapt nu se refer" la o criptanaliz" u!oar" ci la
simplitatea analiz"rii modului de func#ionare a algoritmului. Un algoritm u!or
de analizat !i de explicat are un avantaj mare, deoarece astfel se pot observa !i
corecta mai u!or vulnerabilit"#ile acestuia, iar mbun"t"#irea ulterioar" este mai
u!oar".
3.3.1. Decriptarea algoritmului Feistel
Procesul de decriptare al algoritmului Feistel este n esen#" identic cu cel de
criptare. Se folose!te ca intrare mesajul criptat, dar subcheile K
i
se folosesc n
ordine invers". n prima tur" se va folosi subcheia K
n
, apoi K
n-$
!i a!a mai departe,
K
$
fiind folosit" n ultima tur". Acest lucru este foarte folositor deoarece nu este
nevoie de doi algoritmi separa#i, unul pentru criptare !i altul pentru decriptare.
Pentru a vedea dac" algoritmul executat cu cheile n ordine invers" produce
rezultatul corect consider"m figura 3.2 care prezint" procesul de criptare n partea
stng" !i algoritmul de decriptare n partea dreapt". Pentru o claritate mai mare s-a
folosit nota#ia LE !i RE pentru datele care trec prin algoritmul de criptare, !i LD !i
RD pentru datele care trec prin algoritmul de decriptare. Diagrama arat" c" la
fiecare tur" valorile intermediare ale procesului de decriptare sunt identice cu
valorile corespunz"toare procesului de criptare dar cu cele dou" jum"t"#i schimbate
ntre ele.
Faptul c" algoritmii de criptare !i decriptare sunt identici se datoreaz" !i
propriet"#ii operatorului XOR care sunt urm"toarele:
[ ] [ ] C B A C B A =
0 = D D
E E = 0
Figura 3.2. Criptarea !i decriptarea Feistel
Presupunnd c" vrem s" cript"m o secven#" P cu cheia K folosind acest
operator atunci criptarea va fi:
C K P =
Iar decriptarea va fi:
( ) P P K K P K K P K C = = = = 0 ) (
n concluzie putem folosi acela!i algoritm pentru criptare !i decriptare,
rezultatul ob#inut fiind corect.
2 Tehnici de securizare a datelor i programelor curs 4
CURS NR.4
3.4. DES (Data Encryption Standard)
Securitatea criptosistemelor iterate i proprietile funciilor hash au fost
principalele zone active ale cercetrilor criptologice din ultimii ani. Cel mai
cunoscut, datorit impactului asupra publicului larg, a fost criptosistemul DES, care
a rmas o lung perioad de timp imbatabil la toate atacurile aprute n literatura de
specialitate.
3.4.1. Metoda de criptare
DES-ul cuprinde dou tipuri de componente: algoritmul i cheia.
Algoritmul DES publicat conine un numr de transformri simple, care folosesc
tehnici de transpoziie i substituii alternative. Acest algoritm folosete o singur
cheie, datele fiind codificate i decodificate cu aceast cheie (trebuie s fie inut n
secret de organizaia care trimite i de organizaia care primete datele criptate).
Cheia DES cuprinde opt bytes (n total 8x8=64 bii), fiecare byte coninnd
7 bii din cheie i unul de paritate. n timpul codificrii, algoritmul DES mparte
mesajul n blocuri de 64 de bii. El lucreaz n acelai timp numai cu un singur
bloc, pe care l mparte n jumtate (n dou cuvinte cu 32 de bii L
i
i R
i
). Acestea
sunt amestecate de 16 ori, sub controlul cheii, rezultnd 64 de bii codificai.
Dup cum se poate observa din figura 3.3 algoritmul DES poate fi mprit
n trei componente:
a) Permutarea iniial;
b) Cele 16 runde de codificare propriu-zis (nucleul algoritmului);
c) Permutarea final (inversa permutrii iniiale).
a) Permutarea iniial se desfoar naintea primei runde DES i este descris n
tabelul urmtor:
58 50 42 34 26 18 10 2 60 52 44 36 28 20 12 4
62 54 46 38 30 22 14 6 64 56 48 40 32 24 16 8
57 49 41 33 25 17 9 1 59 51 43 35 27 19 11 3
61 53 45 37 29 21 13 5 63 55 47 39 31 23 15 7
Tabelul 3.3. Permutarea iniial
Figura 3.3. Codificarea DES
Tehnici de securizare a datelor i programelor curs 4 3 4 Tehnici de securizare a datelor i programelor curs 4
Astfel, cei 64 de bii ai mesajului iniial (notai prin numerele
corespunztoare poziiei lor n cadrul blocului) sunt rearanjai (primul este bitul 58,
al doilea bitul 50,, ultimul fiind bitul 7 din mesajul iniial).
b) Cele 16 runde de codificare propriu-zis (nucleul algoritmului)
O rund de codificare are la baz relaiile:
1
=
i i
R L
) , (
1 1 i i i i
K R f L R
=
i este prezentat n figura 3.4:
Figura 3.4. O singur rund din algoritmul DES
b1) Generarea subcheilor K
i
Din figur putem observa c funcia f depinde de subcheia K
i
, care este
generata de generatorul de subchei, prezentat n figura 3.5.
Figura 3.5. Generatorul de subchei
Generatorul de subchei produce 16 subchei a cte 48 de bii. Pentru a crea
aceste subchei trebuie s se parcurg urmtorii pai:
1. Formeaz cheia K de 56 bii din cheia principal de 64 bii selectnd
i permutnd cei 56 de bii (cei opt bii de paritate sunt neglijai).
2. mparte K n dou pri de 28 de bii (l
0
i r
0
).
3. Definete l
i
i r
i
(1 i 16) n urmtorul fel:
=
=
=
=
Z
1
Z
6
Mesaj criptat Y (64-biti)
W
11
W
12
W
13
W
14
Z
7
Z
12
Tura 2
Z
49
Z
52
Transformare finala
Z
43
Z
48
Tura 8
X
1
X
2
X
3
X
4
W
21
W
22
W
23
W
24
W
71
W
72
W
73
W
74
W
81
W
82
W
83
W
84
Y
1
Y
2
Y
3
Y
4
Cheia de criptare Z (128-biti)
Z
1
Z
52
Generator Subchei
16
Tura 1
Figura 3.10. Schema bloc a algoritmului IDEA
Tehnici de securizare a datelor !i programelor curs 6 5 6 Tehnici de securizare a datelor !i programelor curs 6
3.6.4. Detaliile unei singure ture (runde)
Algoritmul folosit pentru o singur$ tur$ este prezentat n figura 3.##, care
ilustreaz$ prima tur$, restul turelor fiind identice dar cu parametri diferi"i. Se poate
observa u!or c$ IDEA deriv$ din algoritmul clasic Feistel, tura ncepnd cu o
transformare care combin$ cele patru subblocuri de la intrare cu cele patru subchei,
folosind opera"ii de adunare !i nmul"ire. Cele patru blocuri de ie!ire ale acestei
transform$ri sunt combinate n dou$ blocuri de #6 bi"i folosind operatorul XOR,
care servesc ca intrare structurii MA. Aceasta are ca intrare pe lng$ cele dou$
blocuri !i dou$ subchei producnd la ie!ire dou$ blocuri de #6 bi"i. n final cele
patru blocuri ob"inute din prima transformare sunt combinate cu cele dou$ blocuri
de ie!ire ale structurii MA, folosind operatorul XOR pentru a produce cele patru
ie!iri. Trebuie notat c$ dou$ ie!iri generate par"ial din intr$rile X
2
!i X
3
sunt
interschimbate pentru a produce al doilea !i al treilea bloc de ie!ire (W
#2
!i W
#3
).
Acest lucru spore!te amestecul bi"ilor f$cnd algoritmul mai rezistent la
criptanaliz$ diferen"ial$.
X
1
X
2
X
3
X
4
Z
1
Z
2
Z
3
Z
4
Z
6
Z
5
W
11
W
12
W
13
W
14
MA
Figura 3.11. Detaliile unei singure ture (tura #)
Al nou$lea stagiu numit transformare final$ este identic cu transformarea
efectuat$ la nceputul fiec$rei ture, diferen"a fiind doar c$ blocul al doilea !i al
treilea de la intrare sunt interschimbate naintea aplic$rii operatorilor matematici.
Acest lucru are ca efect refacerea interschimb$rii de la sfr!itul ultimei ture.
Motivul pentru care a fost introdus$ aceast$ interschimbare suplimentar$ este
folosirea aceluia!i algoritm !i pentru decriptare. Acest ultim stagiu de transformare
necesit$ doar patru subchei, spre deosebire de restul stagiilor care necesit$ !ase
subchei ca intrare.
W
81
W
82
W
83
W
84
Z
49
Z
50
Z
51
Z
52
Y
1
Y
2
Y
3
Y
4
Figura 3.12. Transformarea final$
3.6.5. Generarea subcheilor
Toate subcheile sunt generate din cheia original$ de #28 bi"i. Primele opt
subchei, notate Z
#
,Z
2
,,Z
8
, sunt extrase direct din cheie ncepnd cu Z
#
de la bi"ii
cei mai semnificativi ai cheii. Z
2
corespunde urm$torilor #6 bi"i !i a!a mai departe.
Dup$ aceasta, cheii i se aplic$ o deplasare circular$ la stnga cu 25 de pozi"ii, dup$
care se extrag nc$ opt subchei. Procedura se repet$ pn$ la extragerea celor 52 de
subchei.
Aceast$ metod$ ofer$ o tehnic$ efectiv$ de a varia bi"ii subcheilor folosite
n cele opt ture. Este de notat faptul c$ prima subcheie folosit$ n fiecare tur$
folose!te un set diferit de bi"i din cheia original$. Dac$ se noteaz$ cheia ini"ial$ cu
Z[#..#28] atunci primele chei folosite n fiecare tur$ se vor nota astfel:
Z
1
= Z [1..16] Z
25
= Z[76..91]
Z
7
= Z [94..112] Z
31
= Z[44..59]
Z
13
= Z [90..105] Z
37
= Z[34..52]
Z
19
= Z [83..98] Z
43
= Z[30..52]
Tehnici de securizare a datelor !i programelor curs 6 7 8 Tehnici de securizare a datelor !i programelor curs 6
Cei 96 bi"i folosi"i pentru subchei ntr-o tur$ sunt, cu excep"ia primei linii a
ultimei ture, neal$tura"i. Motivul acestui fenomen este c$ doar !ase subchei sunt
folosite ntr-o tur$, fiind generate opt subchei la fiecare rota"ie a chei ini"iale.
Z
1
Z
2
Z
3
Z
4
Z
5
Z
6
Z
7
Z
8
Z (128 bits)
Z
16
Z
9
Z
10
Z
11
Z
12
Z
13
Z
14
Z
15
Z
15
Z
22
Z
23
Z
24
Z
17
Z
18
Z
19
Z
20
Z
21
Z
29
Z
30
Z
31
Z
32
Z
25
Z
26
Z
27
Z
28
Z
28
Z
35
Z
36
Z
37
Z
38
Z
39
Z
40
Z
33
Z
34
Z
42
Z
43
Z
44
Z
45
Z
46
Z
47
Z
48
Z
41
Z
49
Z
50
Z
51
Z
52
Figura 3.13. Generarea subcheilor n algoritmul IDEA
3.6.6. Decriptarea IDEA
Procesul de decriptare este n esen"$ identic cu procesul de criptare.
Decriptarea este ob"inut$ folosind mesajul criptat ca intrare a structurii de criptare,
dar folosind subcheile n ordine diferit$. Subcheile de decriptare U
#
, U
2
, , U
52
deriv$ din subcheile de criptare dup$ cum se prezint$ n tabelul 3.#5.
Criptare Decriptare
T
u
r
a
$irul subcheilor Mod de ob!inere a
"irului subcheilor
pentru criptare din
cheia Z
$irul subcheilor Mod de ob!inere a
"irului subcheilor
pentru decriptare din
subcheile Zi
# Z#Z2Z3Z4Z5Z6 Z[#..96] U#U2U3U4U5U6 Z49
-#
-Z50-Z5#Z52
-#
Z47Z48
2 Z7Z8Z9Z#0Z##Z#2 Z[97..#28;26..89] U7U8U9U#0U##U#2 Z43
-#
-Z45-Z44Z46
-#
Z4#Z42
3 Z#3Z#4Z#5Z#6Z#7Z#8 Z[90..#28;#..25;5#..82] U#3U#4U#5U#6U#7U#8 Z37
-#
-Z39-Z38Z40
-#
Z35Z36
4 Z#9Z20Z2#Z22Z23Z24 Z[83..#28;#..50] U#9U20U2#U22U23U24 Z3#
-#
-Z33-Z32Z34
-#
Z29Z30
5 Z25Z26Z27Z28Z29Z30 Z[76..#28;#..43] U25U26U27U28U29U30 Z25
-#
-Z27-Z26Z28
-#
Z23Z24
6 Z3#Z32Z33Z34Z35Z36 Z[44..75;#0#..#28;#..36] U3#U32U33U34U35U36 Z#9
-#
-Z2#-Z20Z22
-#
Z#7Z#8
7 Z37Z38Z39Z40Z4#Z42 Z[37..#00;#26..#28;#..29] U37U38U39U40U4#U42 Z#3
-#
-Z#5-Z#4Z#6
-#
Z##Z#2
8 Z43Z44Z45Z46Z47Z48 Z[30..#25] U43U44U45U46U47U48 Z7
-#
-Z9-Z8Z#0
-#
Z5Z6
9 Z49Z50Z5#Z52 Z[23..86] U49U50U5#U52 Z#
-#
-Z2-Z3Z4
-#
Tabelul 3.15.
Cu Z
j
-#
s-a notat inversul multiplicativ modulo (2
#6
+#), adic$:
iar cu Z
j
s-a notat inversul aditiv modulo (2
#6
), adic$:
Transformare
W
11
W
12
W
13
W
14
I
21
I
22
I
23
I
24
I
11
I
12
I
13
I
14
Sub-criptare
W
21
W
22
W
23
W
24
X
1
X
2
X
3
X
4
T
u
r
a
2
T
u
r
a
1
W
71
W
72
W
73
W
74
I
81
I
82
I
83
I
84
W
81
W
82
W
83
W
84
T
u
r
a
8
Y
1
Y
2
Y
3
Y
4
Transformare finala
J
81
J
82
J
83
J
84
V
71
V
72 V
73
V
74
X
1
X
2
X
3
X
4
V
81
V
82
V
83
V
84
T
u
r
a
8
V
11
V
12
V
13
V
14
J
11
J
12
J
13
J
14
J
21
J
22
J
23
J
24
Y
1
Y
2
Y
3
Y
4
V
21
V
22
V
23
V
24
T
u
r
a
2
T
u
r
a
1
Z
1
,..,Z
4
Z
5
,Z
6
Z
7
,..,Z
10
U
49
,..,U
52
Z
11
,Z
12
Z
43
,..,Z
46
Z
47
,Z
48
Z
49
,..,Z
52
U
47
,U
48
U
43
,..,U
46
U
11
,U
12
U
7
,..,U
10
U
5
,U
6
U
1
,..,U
4
Transformare
Sub-criptare
Sub-criptare
Transformare
Sub-criptare
Transformare
Transformare
Transformare
Sub-criptare Sub-criptare
Transformare finala
Figura 3.14. Procesul de criptare !i decriptare IDEA
3.6.7 Exemplu de criptare cu IDEA
Date ini"iale:
! mesajul original (un bloc de 64 bi"i) - 690f 5b0d 9a26 939b
Tehnici de securizare a datelor !i programelor curs 6 9 #0 Tehnici de securizare a datelor !i programelor curs 6
! cheia (#28 bi"i) - 7ca##045 4a#a 6e57 0#a# d6d0 3977 6742
Etapele cript$rii (cele 9 ture) sunt prezentate n cele ce urmeaz$ (vor fi
avute n aten"ie figurile 3.## !i 3.#2):
Tura 1:
Intrarea: 690f 5b0d 9a26 939b
!irul subcheilor: 7ca" "045 4a"a 6e57 0"a" d6d0
Rezultatele celor "4 opera#ii intermediare (vezi fig. 3.""):
234a 6b52 e440 840f c70a ef5d 3606 2563 03"" 39"7 205b e75" 5245 bd"8
Ie$irea: 205b e75" 5245 bd"8
Tura 2:
Intrarea: 205b e75" 5245 bd"8
!irul subcheilor: 3977 6742 8a94 34dc ae03 43ad
Rezultatele celor "4 opera#ii intermediare (vezi fig. 3.""):
460a 4e93 dcd9 3995 9ad3 7706 d"3d 4843 4b2d "c6a 0d27 97f4 52f9 25ff
Ie$irea: 0d27 97f4 52f9 25ff
Tura 3:
Intrarea: 0d27 97f4 52f9 25ff
!irul subcheilor: a072 eece 84f9 4220 b95c 0687
Rezultatele celor "4 opera#ii intermediare (vezi fig. 3.""):
3320 86c2 d7f2 74"0 e4d2 f2d2 57cb 4a9d 04e4 5caf 37c4 d3"6 da6d 28bf
Ie$irea: 37c4 d3"6 da6d 28bf
Tura 4:
Intrarea: 37c4 d3"6 da6d 28bf
!irul subcheilor: 5b40 e5dd 9d09 f284 4""5 2869
Rezultatele celor "4 opera#ii intermediare (vezi fig. 3.""):
8920 b8f3 7776 69e3 fe56 d""0 7266 4376 "0c0 8326 99e0 67b6 3bd5 eac5
Ie$irea: 99e0 67b6 3bd5 eac5
Tura 5:
Intrarea: 99e0 67b6 3bd5 eac5
!irul subcheilor: 0eb6 8"cb bb3a "3e5 0882 2a50
Rezultatele celor "4 opera#ii intermediare (vezi fig. 3.""):
9c69 e98" f70f 8efb 6b66 677a b63b "db5 f5a8 abe3 69c" 02a7 4262 25"8
Ie$irea: 69c" 02a7 4262 25"8
Tura 6:
Intrarea: 69c" 02a7 4262 25"8
!irul subcheilor: d372 b80d 9776 7427 ca"" 0454
Rezultatele celor "4 opera#ii intermediare (vezi fig. 3.""):
d39a bab4 d9d8 75d4 0a42 cf60 ba4a 89aa d"75 8bbf 02ef 08ad 3"0b fe6b
Ie$irea: 02ef 08ad 3"0b fe6b
Tura 7:
Intrarea: 02ef 08ad 3"0b fe6b
!irul subcheilor: a"a6 e570 "a"d 6d03 4f94 2208
Rezultatele celor "4 opera#ii intermediare (vezi fig. 3.""):
3420 ee"d 4b28 "deb 7f08 f3f6 c"24 b5"a 04bd c5e" 309d 4f95 2bfc d80a
Ie$irea: 309d 4f95 2bfc d80a
Tura 8:
Intrarea: 309d 4f95 2bfc d80a
!irul subcheilor: a943 4dca e034 3ada 072e ece8
Rezultatele celor "4 opera#ii intermediare (vezi fig. 3.""):
3df3 9d5f 0c30 0ada 3"c3 9785 44a5 dc2a 7253 b6f8 4fa0 7e63 2ba7 bc22
Ie$irea: 4fa0 2ba7 7e63 bc22
Tura 9 (vezi figura 3.12):
Intrarea: 4fa0 2ba7 7e63 bc22
!irul subcheilor: ""52 869b 95c0 6875
Ie$irea: "bdd b242 "423 7ec7
Deci mesajul criptat va fi: #bdd b242 #423 7ec7
2 Tehnici de securizare a datelor !i programelor curs 7
CURS NR.7
3.7. 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
pn" la 448 bi#i. Acest lucru permite o alegere ntre vitez" mare !i
securitate puternic".
Blowfish cripteaz" blocuri de 64 bi#i avnd ca ie!ire tot blocuri de 64 bi#i.
Acest algoritm este implementat ntr-o gam" larg" de aplica#ii fiind supus unei
examin"ri minu#ioase, dar securitatea sa a r"mas de neatins.
3.7.1.Generarea subcheilor !i a cutiilor S ( S-boxes)
Blowfish folose!te o cheie ntre 32 !i 448 bi#i, cheia fiind un multiplu de
32. Cheia este folosit" pentru a genera 18 subchei de 32 bi#i !i patru cutii S de
dimensiunea 8 x 32. Spa#iul total de memorie pentru a stoca cutiile S !i cele 18
subchei este de 4168 bytes.
Cheia este stocat" ntr-un !ir notat cu K, unde elementele K
i
sunt cuvinte de
32 bi#i:
K
1
, K
2
, , K
j
1!j!14, cu
32
cheii lungimea
j "
Subcheile sunt stocate n !irul P:
P
1
, P
2
, , P
18
De asemenea sunt patru cutii S cu 256 intr"ri de 32 bi#i:
S
1.0
, S
1.1
, , S
1.255
S
2.0
, S
2.1
, , S
2.255
S
3.0
, S
3.1
, , S
3.255
S
4.0
, S
4.1
, , S
4.255
Pa!ii folosi#i pentru generarea !irului P !i a cutiilor S sunt urm"torii:
1. Se ini#ializeaz" !irul P !i apoi cele patru cutii S folosind, n ordine, bi#ii din
partea frac#ionar" a constantei #. Bi#ii cei mai din stnga a p"r#ii frac#ionare a lui
# devin P
1
!i a!a mai departe. De exemplu, n hexazecimal avem:
P
1
=243F6A88
P
2
=85A308D3
S
4.254
=578FDFE3
S
4.255
=3AC372E6
2. Se execut" un sau-exclusiv pe bi#i ntre !irurile P !i K refolosind cuvinte din !irul
K dac" este nevoie, iar rezultatul este memorat n !irul P. De exemplu, pentru o
cheie de 32 bi#i (j=1), vom avea: P
1
=P
1
$K
1
, P
2
=P
2
$K
1
... P
18
=P
18
$K
1
, iar pentru
o cheie de lungime maxim" (j=14): P
1
=P
1
$K
1
, P
2
=P
2
$K
2
... P
14
=P
14
$K
14
,
P
15
=P
15
$K
1
, ... P
18
=P
18
$K
4.
3. Se cripteaz" un bloc de 64 bi#i care con#ine numai zerouri folosind valorile
curente ale !irului P !i a cutiilor S, nlocuind P
1
!i P
2
cu ie!irea rezultat".
4. Se cripteaz" ie!irea pasului 3 folosind valorile curente ale !irului P !i a cutiilor S,
nlocuind P
3
!i P
4
cu ie!irea rezultat".
5. Se continu" procesul folosind algoritmul Blowfish pn" sunt nlocuite toate
valorile !irului P ct !i cele din cutiile S.
Un total de 521 de execu#ii ale algoritmului sunt necesare pentru a ob#ine
valorile finale a !irului P !i a cutiilor S. Din acest motiv Blowfish nu este potrivit
pentru aplica#ii n care cheia se schimb" frecvent. Pentru o execu#ie mai rapid" este
de preferat stocarea !irului P !i a cutiilor S, dect regenerarea lor la fiecare execu#ie
a algoritmului. Stocarea datelor nu este potrivit" pentru aplica#ii care nu au
suficient" memorie cum ar fi Smart-cardurile, deoarece necesit" mai mult de 4K
memorie.
3.7.2. Criptarea !i decriptarea
Blowfish folose!te dou" opera#ii de baz":
! Adunarea: adunarea cuvintelor notat" cu + !i este efectuat" modulo 2
32
! Sau exclusiv pe bi#i: Acesta este notat XOR
Mesajul original este divizat n dou" jum"t"#i de 32 bi#i notate LE
0
!i RE
0
.
Se vor folosi variabilele LE
i
!i RE
i
pentru cele dou" jum"t"#i dup" ce tura i s-a
terminat. Algoritmul poate fi definit de urm"torul pseudocod:
For I=1 to 16 do
RE
I
= (LE
I-1
)XOR(P
I
)
LE
I
= (F[RE
I
])XOR(RE
I-1
)
Next
LE
17
= (RE
16
)XOR(P
18
)
RE
17
= (LE
16
)XOR(P
17
)
Tehnici de securizare a datelor !i programelor curs 7 3 4 Tehnici de securizare a datelor !i programelor curs 7
Figura 3.15. Criptarea !i decriptarea Blowfish
Figura 3.16. Detaliile unei singure ture a algoritmului Blowfish
Rezultatul este con#inutul variabilelor LE
17
!i RE
17
. Structura func#iei F este
prezentat" n figura 3.16. Intrarea de 32 bi#i n func#ia F este divizat" n 4 bytes.
Dac" not"m ace!ti bytes cu a,b,c,d atunci func#ia F se define!te n felul urm"tor:
F [a,b,c,d] = ((S
1.a
+ S
2.b
) XOR (S
3.c
)) + S
4.d
Decriptarea ilustrat" n figura 3.14b deriv" din algoritmul de criptare. n
acest caz mesajul criptat de 64 bi#i este mp"r#it n jum"t"#ile LD
0
!i RD
0
.
Decriptarea Blowfish folose!te subcheile n ordine invers", dar spre deosebire de
al#i algoritmi bloc, decriptarea se face n aceea!i direc#ie algoritmic" ca !i criptarea.
Folosind acelea!i nota#ii ca !i pentru criptare, decriptarea poate fi definit" prin
urm"torul pseudocod:
For I=1 to 16 do
RD
I
= (LD
I-1
)XOR(P
19-I
)
LD
I
= (F[RD
I
])XOR(RD
I-1
)
Next
LD
17
= (RD
16
)XOR(P
1
)
RD
17
= (LD
16
)XOR(P
2
)
3.7.3. Propriet"#i
n acest algoritm cutiile S sunt dependente de cheie. Al#i algoritmi, ca de
exemplu RC5, sunt implementa#i ca o func#ie dintr-o rund" s" fie dependent" de
date. n 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 att de grea.
Cea mai importanta caracteristic" a acestei metode este viteza de criptare.
n tabelul 3.16 sunt prezenta#i comparativ (n ciclii ma!ina), pe un calculator
Pentium, diferi#i algoritmi implementa#i n C, din care reiese rapiditatea metodei
Blowfish.
Algoritmul Ciclii ma!in"
pe o rund"
Num"rul rundelor Num"rul ciclurilor de
ma!in" pe un byte codificat
Blowfish 9 16 18
RC5 12 16 23
DES 18 16 45
IDEA 50 8 50
Tabelul 3.16. Compara#ii de vitez" pe un Pentium
Tehnici de securizare a datelor !i programelor curs 7 5 6 Tehnici de securizare a datelor !i programelor curs 7
Pentru a sublinia nc" o dat" puterea criptografic" a algoritmului Blowfish
se prezint" cteva motiva#ii referitoare la proiectarea algoritmului, date de autorul
s"u Bruce Schneier:
! Un atac cu for#" brut" (exhaustiv) este mult mai dificil dect
pare, 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 a 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".
Dup" cum s-a mai precizat anterior Blowfish este practic invulnerabil n
fa#a unui atac exhaustiv datorit" lungimii variabile a cheii care poate fi pn" la 448
bi#i.
3.8. Algoritmul RC2
RC2 este un algoritm simetric de codificare realizat de Ron Rivest, !i
publicat n 1997 (ulterior lui RC5 publicat n 1994). 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 nct s" fie u!or
implementat pe procesoare cu 64 de bi#i.
Metoda RC2 produce din cheia original" 128 de bytes (1 byte = 8 bi#i) de
subchei care sunt notate cu L[0], L[1], ..., L[127], sau dac" folosim notarea cu
cuvinte de 16 bi#i: K[0], K[1], ..., K[63].
3.8.1. Criptarea !i decriptarea
RC2 folose!te urm"toarele opera#ii primitive:
! Adunarea: Adunarea cuvintelor, notat" cu +, este n modulo 2
32
.
Opera#ia invers" la decodificare va fi notat" cu -, !i este n
modulo 2
32
.
! 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 cuvnt x la stnga 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 sfrsit, blocul codificat (de 64 de bi#i)
se realizeaz" prin din 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 +1;
R[3] = R[3] + K[j] + (R[2] & R[1]) + ((~R[2] & R[0]);
R[3] = R[3] <<< 5;
j = j +1;
unde, K[j] este primul cuvnt 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 foarte 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 cuvnt 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 n urm"torul fel:
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 de decodificare este realizat exact ca cel de codificare, numai c"
rularea algoritmului !i folosirea subcheilor se face n ordine invers".
2 Tehnici de securizare a datelor !i programelor curs 8
CURS NR.8
3.9. Algoritmul RC5
RC5 este un algoritm de criptare simetric dezvoltat de Ron Rivest ("994)
avnd urm#toarele caracteristici:
! Se poate implementa att hardware ct !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 cuvnt este un parametru pentru RC5.
! Num"rul de ture (runde) este variabil: Num#rul de ture este al doilea
parametru pentru RC5, utilizatorul avnd 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 restrns#.
! 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 cuvntului. RC5
cripteaz# blocuri de 2 cuvinte
"6, 32, 64
r Num#rul de ture (runde) 0, ", , 255
b Num#rul de octe$i din cheia secret# K 0, ", , 255
Tabelul 3.$7.
RC5 cripteaz# blocuri de 32, 64, "28 bi$i rezultnd 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/$2/$6 folose!te cuvinte de 32 bi$i (blocuri
de 64 bi$i), "2 ture !i o cheie de criptare de "6 octe$i ("28 bi$i). Rivest a propus ca
versiunea RC5-32/$2/$6 s# fie considerat# cea nominal#.
3.9.1. Extinderea cheii
RC5 execut# un set complex de opera$ii pentru a produce cele t subchei
avnd 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 cuvnt adic# w bi$i.
Figura 3.$7. Generarea cheii RC5
Figura 3."7 ilustreaz# tehnica folosit# pentru generarea subcheilor. Acestea
sunt stocate ntr-un !ir S de forma S[0], S["], , S[t-"]. Folosind ca parametrii r !i
w la intrare !irul este ini$ializat cu o secven$# pseudoaleatoare. Cheia K[0..b-"] este
convertit# ntr-un !ir de c cuvinte cu lungimea w, notat L[0..c-"]. Pentru acest lucru
se ini$ializeaz# elementele lui L cu zero dup# care bi$ii lui L sunt nlocui$i cu cei a
lui K ncepnd din partea stng# pn# acesta se umple. Dac# b nu este un multiplu a
lui w atunci bi$ii lui L r#ma!i n plus se las# pe zero. n final se trece la amestecarea
bi$ilor, aplicat# !irurilor L !i S, la sfr!it rezultnd valorile finale a lui S.
3.9.2. Criptarea RC5
RC5 folose!te trei opera$ii de baz# !i inversele lor:
! Adunarea: Adunarea notat# + !i inversa ei sc#derea ambele efectuate modulo
2
w
! Sau-exclusiv pe bi$i notat XOR.
! Deplasarea circular# la stnga: Deplasarea circular# la stnga a cuvntului x cu
y bi$i se noteaz# x<<<y; Inversa ei este deplasarea circular# la dreapta notat# x
>>> y.
Tehnici de securizare a datelor !i programelor curs 8 3 4 Tehnici de securizare a datelor !i programelor curs 8
Figura 3.$8. Criptarea cu algoritmul RC5
Figura 3."8 ilustreaz# procesul de criptare care nu este o structur# clasic#
Feistel. Mesajul original este stocat ini$ial n doi regi!tri de lungimea w nota$i A !i
B. Se vor folosi variabilele LE
i
!i RE
i
pentru datele rezultate dup# tura i. Algoritmul
poate fi definit de urm#torul pseudocod:
LE
0
=A +S[0];
RE
0
=B +S[1];
For i=1 to r do
Lei
i
=(((LE
i-1
)XOR(RE
i-1
)<<<RE
i-1
) +S[2i];
RE
i
=(((RE
i-1
)XOR(LE
i
)<<<LE
i
) +S[2i+1];
Next
Mesajul criptat este con$inut de variabilele LE
r
!i RE
r
. Fiecare din cele r
ture const# dintr-o substitu$ie !i o permuta$ie, ambele folosind cuvinte de date !i o
substitu$ie care depinde de cheie. Este de notat simplitatea excep$ional# a
algoritmului care poate fi definit n !ase rnduri de cod. De asemenea trebuie notat
c# cei doi regi!tri sunt reactualiza$i n fiecare tur#. Astfel o tur# a RC5 este
asem#n#toare cu dou# ture de DES.
3.9.3. Decriptarea RC5
Figura 3.$9. Decriptarea cu algoritmul RC5
Decriptarea folose!te acela!i algoritm ca !i criptarea. n acest caz mesajul
criptat de lungime 2w este atribuit celor dou# variabile LD
r
!i RD
r
. Se folosesc
Tehnici de securizare a datelor !i programelor curs 8 5 6 Tehnici de securizare a datelor !i programelor curs 8
variabilele LE
i
!i RE
i
pentru a nota datele ce intr# n tura i. Algoritmul de decriptare
poate fi descris n felul urm#tor:
For i=r down to 1 do
RD
i-1
=((RD
i
S[2i+1]>>>LD
I
)XOR(LD
i
));
LD
i-1
=((LD
i
S[2I]>>>RD
i-1
)XOR(RD
i-1
));
Next
B =RD
0
S[1];
A =LD
0
S[0];
Cele mai semnificative tr#s#turi ale algoritmului RC5 sunt simplitatea
algoritmului !i folosirea rota$iilor care depinde de valoarea datelor. Aceste rota$ii
sunt singura parte nelinear# a algoritmului. Rivest crede c# datorit# rota$iilor
variabile care depind de valoarea datelor procesate de algoritm, criptanaliza liniar#
!i cea diferen$ial# devin foarte dificile. Un num#r de studii au confirmat acest lucru.
3.10. Algoritmul RC6
RC6 a fost propus n anul "998 ca !i candidat pentru Advanced Encryption
Standard (AES) de c#tre un colectiv condus de Ronald L. Rivest. De!i nu a c!tigat
competi$ia pentru AES, acest algoritm criptografic poate fi considerat ca fiind unul
de referin$#. RC6 a fost dezvoltat avnd ca baz# de plecare RC5, c#ruia i s-au adus
modific#ri n scopul cre!terii gradului de securitate !i nu n ultimul rnd al
mbun#t#$irii performan$elor.
La momentul public#rii sale, RC5 s-a impus nu numai pentru simplitatea sa
ci !i pentru faptul c# permitea analiza am#nun$it# asupra sistemului de securitate
oferit de folosirea intensiv# a datelor dependente de rota$ii. De!i nici un atac practic
asupra lui RC5 nu a fost raportat, studii de specialitate furnizeaz# informa$ii despre
atacuri teoretice interesante bazate n general pe faptul c# mul$imea de rota$ii din
RC5 nu depinde de to$i bi$i mesajului. RC6 a fost proiectat s# resping# astfel de
atacuri, !i de bun# seam#, s# resping# toate atacurile cunoscute furniznd un
algoritm compact !i credibil.
Filozofia RC5 a fost aceea de a exploata opera$iile (de exemplu rota$iile)
eficient implementate pe procesoarele moderne. RC6 continu# aceast# tendin$# !i
profit# de faptul c# multiplicarea cu ntregi pe 32 sau 64 bi$i este acum
implementat# pe majoritatea procesoarelor. Acest lucru permite algoritmului RC6
s# ruleze n mai pu$ine runde, dar cu o securitate mult sporit#.
3.10.1. 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 cuvntului
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{"6,24,32}.
Pentru toate variantele RC6-w/r/b se opereaz# cu module de patru bi$i,
c#rora li se asociaz# urm#toarele !ase opera$ii de baz# (logaritmul n baza 2 a lui w
va fi notat cu lg w):
! a+b adunare de ntregi modulo 2
w
! a-b sc#dere de ntregi modulo 2
w
! a b sau exclusiv pentru cuvinte de w bi$i
! axb multiplicare modulo 2
w
! a<<<b rotirea la stnga a cuvntului a de w bi$i cu un num#r de bi$i egal cu
valoarea dat# de cei mai pu$in semnificativi lg w bi$i din b.
! a>>>b rotirea la dreapta a cuvntului a de w bi$i cu un num#r de bi$i egal cu
valoarea dat# de cei mai pu$in semnificativi lg w bi$i din b.
3.10.1.1 Extinderea cheii
Pentru a genera cele t=2r+4 subchei necesare cript#rii/decript#rii, RC6
execut# un set complex de opera$ii aplicate cheii originale. Fiecare subcheie este de
lungimea unui cuvnt de w bi$i. Acestea sunt stocate ntr-un !ir S de forma S[0],
S["], , S[2r+3]. Folosind ca parametrii r !i w la intrare, !irul este ini$ializat cu o
secven$# pseudoaleatoare bazat# pe constantele hexazecimale P
32
=B7E"5"63 !i
Q
32
=9E3779B9. Cheia K[0..b-"] este convertit# ntr-un !ir de c cuvinte cu lungimea
w, notat L[0], L["], ..., L[c-"]. Pentru acest lucru se ini$ializeaz# elementele lui L cu
zero dup# care bi$ii lui L sunt nlocui$i cu cei a lui K ncepnd din partea stng#
pn# acesta se umple. Dac# b nu este un multiplu a lui w atunci bi$ii lui L r#ma!i n
plus se las# pe zero. n final se trece la amestecarea bi$ilor, aplicat# !irurilor L !i S,
la sfr!it rezultnd valorile finale ale lui S.
n pseudocod, acest proces de extindere a cheii ar putea fi descris astfel:
S[ 0 ] =P
w
for i =1 to 2r +3 do
S [ i ] =S [ i 1 ] +Q
w
A =B =i =j =0
v =3 x max {c , 2r +4 }
for s =1 to v do
{
A =S [ i ] =( S [ i ] +A +B ) <<<3
B =L [ j ] =( L [ j ] +A +B ) <<<( A +B )
i =( i +1) mod ( 2r +4 )
j =( j +1 ) mod c
}
3.10.1.2.Criptarea !i decriptarea
n vederea cript#rii, RC6 utilizeaz# patru regi!trii de cte w bi$i A, B, C, D,
care con$in ini$ial mesajul original, iar n final vor con$ine mesajul criptat.
Tehnici de securizare a datelor !i programelor curs 8 7 8 Tehnici de securizare a datelor !i programelor curs 8
Figura 3.20. Criptarea RC6
Procedura de criptare este descris# prin urm#torul pseudocod:
B =B +S [ 0 ]
D =D +S [ 1 ]
for i =1 to r do
{
t =( B x ( 2B +1 ) ) <<<lg w
u =( D x ( 2D +1 ) ) <<<lg w
A =( ( A t ) <<<u ) +S [ 2i ]
C =( ( C u ) <<<t ) +S [ 2i +1 ]
( A , B , C , D ) =( B , C , D , A )
}
A =A +S [ 2r +2 ]
C =C +S [ 2r +3 ]
Decriptarea RC6 este similar#, pseudocodul fiind prezentat n cele ce
urmeaz#:
C =C - S [ 2r +3 ]
A =A - S [ 2r +2 ]
for i =r downto 1 do
{
( A , B , C , D ) =( D , A , B , C )
u =( D x ( 2D +1 ) ) <<<lg w
t = ( B x ( 2B +1 ) ) <<<lg w
C =( ( C - S [ 2i +1 ] ) >>>t ) u
A =( ( A S [ 2i ] ) >>>u ) t
}
D =D S [ 1 ]
B =B S [ 0 ]
3.10.1.3. Considera"ii de implementare. Flexibilitatea algoritmului
RC6.
A!a cum se poate observa din descrierea algoritmului RC6, acesta este
deosebit de compact. Se estimeaz# c# pentru un procesor Intel Pentium Pro, o
implementare rapid# n limbaj de asamblare a algoritmului RC6 ar necesita un cod
de sub 256 de bi$i pentru fiecare dintre sarcinile algoritmului !i anume generarea
cheii, criptarea !i decriptarea.
Spre deosebire de al$i algoritmi de criptare RC6 nu folose!te tabele de
c#utare n timpul codific#rii. Criptarea !i decriptarea n RC6 folosesc o combina$ie
de chei pe "76 de bi$i !i foarte putin# memorie adi$ional#; pentru a genera o
combina$ie de chei pe "76 de bi$i n RC6 este nevoie de ceva mai mult dect pentru
o matrice auxiliar# de aproximativ aceea!i m#rime ca !i cheia utilizatorului. n plus,
din moment ce combina$ia de chei este pe doar "76 de bi$i, este posibil#
preprocesarea !i memorarea acestor combina$ii pentru sute de chei. Deci trecerea de
la o cheie la alta necesit# doar schimbarea pointerului c#tre combina$ia necesar#,
crescnd astfel viteza.
Dup# cum s-a observat RC6 ofer# utilizatorului o mare flexibilitate n ceea
ce prive!te dimensiunea cheii de criptare, num#rul de ture !i cerin$ele pie$ei ar
putea ncuraja o extensie a RC6 la blocuri de alte dimensiuni. De o mare importan$#
ar putea fi dimensiunea de 256 de bi$i care ar avea avantajul unei dimensiuni a
cuvntului de 64 de bi$i !i performan$ele oferite de arhitectura sistemelor din noua
genera$ie.
De asemenea structura lui RC6 permite un anumit grad de paralelism ntre
rutinele de codificare !i decodificare. Cum procesoarele tind s# includ# un
paralelism intern ct mai mare, implementarea RC6 va cre!te progresiv.
RC6 este un algoritm bloc sigur, compact !i simplu. Ofer# performan$e
bune !i o flexibilitate considerabil#. Mai mult, simplitatea lui permite anali!tilor s#
cizeleze !i s# mbun#t#$easc# rapid estim#rile asupra securit#$ii sale.
2 Tehnici de securizare a datelor !i programelor curs 9
CURS NR.9
3.11. Algoritmul Serpent
Algoritmul Serpent, unul dintre candida"ii importan"i pentru Advanced
Encryption Standard (AES), a fost proiectat de c#tre Ross Anderson, Eli Biham !i
Lars Knudsen !i prezentat pentru prima dat# n 24 martie 2000. Ideea de baz# a fost
de a realiza un "algoritm de criptare pentru secolul 2$", adic# un algoritm care s# se
dovedeasc# folositor pentru foarte mult timp, oferind securitate !i fiabilitate.
Ini"ial s-a decis folosirea cutiilor S din algoritmul DES, care au fost studiate
mult timp !i ale c#ror propriet#"i erau cunoscute, ntr-o structur# optimizat# pentru
implementarea eficient# pe procesoare moderne, care s# permit# n acela!i timp
aplicarea analizei deja f#cute asupra algoritmului DES. Rezultatul proiect#rii a fost
un algoritm denumit Serpent_0 care era la fel de rapid ca DES !i mai sigur ca
Triple DES, !i care permitea folosirea unei chei pe $92 sau 256 de bi"i. Acest
proiect a fost prezentat la a 5-a conferin"# interna"ional# Fast Software Encryption
FSE-98 pentru a l#sa timp opiniei publice s#-!i spun# p#rerea. De atunci
performan"ele algoritmului au fost mbun#t#"ite, au fost selectate noi cutii S, mai
puternice, !i a fost u!or modificat modelul cheii de criptare. Noul proiect numit
Serpent rezist# tuturor tipurilor de atacuri cunoscute, inclusiv celor bazate pe
tehnici diferen"iale !i liniare.
Algoritmul de criptare Serpent a fost inspirat de ideile recente ale
implement#rii pe bit. Oricum, spre deosebire de implementarea pe bit a DES, care
cripteaz# n paralel 64 de blocuri diferite pentru a c!tiga vitez#, Serpent este
proiectat s# permit# criptarea eficient# pe bit a unui singur bloc. Aceasta permite
folosirea opera"iilor obi!nuite deci nu este nevoie de schimbarea mediului de lucru
pentru cre!terea vitezei.
nalta performan"# a algoritmului Serpent este determinat# de structura sa
care permite procesarea n paralel. Astfel se pot realiza, n acela!i timp, o
decodificare !i o criptare cu chei diferite, structura Serpent permi"nd ca acest lucru
s# se fac# foarte eficient pe un procesor cu unitate aritmetico-logic# pe 32 de bi"i
(cum ar fi cele din seria Intel MMX) !i aproape la fel de eficient pe un procesor pe
64 de bi"i (cum ar fi DEC Alpha).
3.11.1. Criptarea !i decriptarea
Serpent lucreaz# n 32 de ture folosind 4 cuvinte de 32 de bi"i (dimensiunea
blocului este de $28 de bi"i). Toate valorile folosite n algoritm sunt reprezentate ca
!iruri de bi"i. Indicii bi"ilor sunt numerota"i de la bitul 0 la 3$ ntr-un cuvnt de 32
de bi"i, de la bitul 0 la $27 ntr-un bloc de $28 de bi"i, de la 0 la 255 ntr-o cheie pe
256 de bi"i. Pentru procesarea intern# se consider# primul cuvnt ca fiind cel mai
pu"in semnificativ !i ultimul cuvnt ca fiind cel mai semnificativ, bitul 0 fiind cel
mai pu"in semnificativ bit al cuvntului 0. Extern, fiecare bloc este reprezentat ca
num#r hexazecimal pe $28 de bi"i.
Serpent cripteaz# un text simplu P pe $28 de bi"i ntr-un text cifrat C n 32
de ture sub controlul a 33 de subchei pe $28 de bi"i (K
0
,,K
32
). Lungimea cheii
utilizator este variabil# pe $28, $92 sau 256 bi"i; cheile scurte cu mai pu"in de 256
de bi"i sunt aduse la lungimea cheilor de 256 bi"i ad#ugnd un bit "$" n partea mai
semnificativ#, urmat de at"ia bi"i "0" c"i sunt necesari pentru a ajunge la 256.
Criptarea const# din urm#toarele etape:
! permutare ini"ial# IP;
! 32 de ture, fiecare constnd dintr-o opera"ie de amestecare a cheii, o
trecere prin cutiile S !i (n toate turele cu excep"ia ultimei) o
transformare liniar#. n ultima tur# transformarea liniar# este nlocuit#
printr-o opera"ie de amestecare adi"ional# a cheii;
! permutare final# FP.
Permut#rile ini"ial# !i final# nu au nici o nsemn#tate n criptare, fiind
folosite doar pentru a simplifica implementarea algoritmului !i pentru a mbun#t#"i
eficien"a prelucr#rii.
Permutarea ini"ial# IP este aplicat# unui text simplu P rezultnd B
0
care
este intrarea n prima tur#. Turele sunt notate de la 0 la 3$, prima fiind tura 0 !i
ultima 3$. Ie!irea primei ture (tura 0) este B
1
, ie!irea celei de-a doua ture (tura $)
este B
2
, ie!irea turei i este B
i+1
!i a!a mai departe pn# la ie!irea ultimei ture (n care
transformarea liniar# este nlocuit# de o amestecare adi"ional# a cheii) care va fi
B
32
. n acest moment este aplicat# permutarea final# FP !i rezult# textul cifrat C.
Fiecare tur# R
i
(i {0,,3$}) folose!te o singur# cutie S multiplicat#. De
exemplu R
0
folose!te S
0
, 32 de copii ale ei fiind aplicate n paralel. Deci prima
copie a lui S
0
ia bi"ii 0,$,2 !i 3 din B
0
K
0
ca intrare !i returneaz# la ie!ire primii
patru bi"i ai unui vector intermediar; urm#toarea copie a lui S
0
are ca intrare bi"ii 4-
7 din B
0
K
0
!i returneaz# urm#torii patru bi"i ai unui vector intermediar !i a!a mai
departe. Vectorul intermediar este apoi transformat folosind transformarea liniar#,
rezultnd B
1
. n acela!i mod, R
1
folose!te 32 de copii ale lui S
1
n paralel pe B
1
K
1
!i prelucreaz# ie!irea folosind transformarea liniar#, rezultnd B
2
. n ultima tur#
aceast# transformare liniar# este nlocuit# de o combinare adi"ional# a cheii:
B
32
:= S
7
(B
3$
K
3$
) K
32
.
Motivul principal pentru alegerea transform#rii liniare este de a minimiza
efectul de avalan!#. Cutiile S au proprietatea c# un singur bit de intrare determin#
schimbarea a doi bi"i la ie!ire. nseamn# c# modificarea unui singur bit la intrare va
provoca un num#r maxim de schimb#ri ale bi"ilor dup# 2 sau mai multe ture. Deci
fiecare bit al textului simplu influen"eaz# to"i bi"ii de date dup# trei ture. Chiar dac#
cineva ar alege cteva subchei !i ar lucra n sens invers, totu!i este garantat c#
fiecare bit al cheii influen"eaz# fiecare bit de date peste !ase ture.
Tehnici de securizare a datelor !i programelor curs 9 3 4 Tehnici de securizare a datelor !i programelor curs 9
Setul de opt cutii S este folosit de patru ori. Dup# folosirea lui S
7
n tura 7,
se folose!te din nou S
0
n tura 8, apoi S
1
n tura 9 !i a!a mai departe. Ultima tur# R
31
este pu"in diferit# de celelalte: se aplic# S
7
pe B
31
K
31
!i se face un SAU
EXCLUSIV cu K
32
. Rezultatul B
32
este apoi permutat cu FP ob"inndu-se textul
cifrat.
Deci cele 32 de ture folosesc 8 cutii S diferite, fiecare transformnd 4 bi"i
de intrare n 4 bi"i la ie!ire. Fiecare cutie S este folosit# n exact 4 ture !i n fiecare
din acestea de 32 de ori n paralel.
Ca !i n algoritmul DES, permutarea final# este inversul permut#rii ini"iale.
Algoritmul poate fi descris formal de urm#toarele rela"ii:
! B
0
:=IP(P) // intrarea n prima tur# este rezultatul permut#rii ini"iale
aplicate asupra textului original
! B
i+1
:=R
i
(B
i
) // intrare n tura i+$= ie!irea turei i
! C:=FP(B
32
) // textul codificat este rezultatul permut#rii finale aplicate
ie!irii din ultima tur#
unde: R
i
(X)=L(!
i
(XK
i
)) i=0,,30
R
i
(X)=!
i
(XK
i
)K
32
i=31
!
i
fiind S
i mod 8
aplicat de 32 de ori n paralel !i L fiind transformarea liniar#.
Cu toate c# fiecare tur# a acestui algoritm ar putea p#rea mai slab# dect o
tur# a DES, nu este cazul. De exemplu, probabilitatea g#sirii celei mai bune func"ii
liniare ntre 6 ture n cazul algoritmului DES este de 2
-20
n timp ce la Serpent este
mai pu"in de 2
-58
.
Deci Serpent este un algoritm aproximativ la fel de rapid ca DES dar mult
mai sigur dect Triple DES.
n cazul decript#rii algoritmul este acela!i n esen"#, doar c# vor fi utilizate
cutiile S inverse, inversa transform#rii liniare, precum !i subcheile n ordine
invers#.
3.11.1.1 Permutarea in"ial#
Permutarea ini"ial# (PI) are la baz# tabelul 3.$8:
0 32 64 96 $ 33 65 97 2 34 66 98 3 35 67 99
4 36 68 $00 5 37 69 $0$ 6 38 70 $02 7 39 7$ $03
8 40 72 $04 9 4$ 73 $05 $0 42 74 $06 $$ 43 75 $07
$2 44 76 $08 $3 45 77 $09 $4 46 78 $$0 $5 47 79 $$$
$6 48 80 $$2 $7 49 8$ $$3 $8 50 82 $$4 $9 5$ 83 $$5
20 52 84 $$6 2$ 53 85 $$7 22 54 86 $$8 23 55 87 $$9
24 56 88 $20 25 57 89 $2$ 26 58 90 $22 27 59 9$ $23
28 60 92 $24 29 6$ 93 $25 30 62 94 $26 3$ 63 95 $27
Tabelul 3.18. Permutarea ini"ial#
Tabelul prezentat indic# pozi"ia urm#toare (cea rezultat# n urma aplic#rii
permut#rii ini"iale) a bitului de ie!ire. Pozi"ia se num#r# de la stnga la dreapta !i de
sus n jos.
3.11.1.2 Structura unei ture
Structura unei ture este urm#toarea:
B
i+$
:=R
i
(B
i
) unde R
i
(X)=L(%
i
(XK
i
)) cu i=0,,30
Se aplic# subcheia asupra textului, dup# care se face o trecere prin cutiile S
!i o transformare liniar#. Acest lucru se ntmpl# n toate turele cu excep"ia ultimei.
n ultima tur# transformarea liniar# este nlocuit# de o combinare adi"ional#
a cheii, astfel:
B
32
:= S
7
(B
3$
K
3$
) K
32
.
3.11.1.2.1 Cutiile S
Cutiile S ale algoritmului Serpent sunt permut#ri pe 4 bi"i, generarea lor
fiind realizat# n urm#toarea manier#: se folose!te o matrice cu 32 de module
fiecare cu cte $6 intr#ri. Matricea este ini"ializat# cu cele 32 de linii ale cutiilor S
din algoritmul DES !i transformat# schimbnd intr#rile din modulul r dependent de
intr#rile modulului (r+1) !i de un !ir ini"ial reprezentnd o cheie. Dac# matricea
rezultat# are propriet#"ile dorite (diferen"iale !i liniare) se salveaz# matricea ca !i
cutie S Serpent. Se repet# procedura pn# cnd au fost generate toate cele 8 cutii S.
S# spunem c# serpent[.] este o matrice con"innd cei mai pu"in
semnificativi 4 bi"i ai !irului de $6 caractere ASCII "sboxesforserpent". Fie
sbox[.][.] o matrice de dimensiune (32x$6) con"innd cele 32 linii ale celor 8 cutii
S, unde sbox[r][.] nseamn# linia r. Urm#torul pseudocod genereaz# cutiile S
Serpent:
index:=0
repeat
currentsbox:=index modulo 32;
for i:=0 to 15 do
j:=sbox[(currentsbox+1) modulo 32][serpent[i]];
swapentries(sbox[currentsbox][i], sbox[currentsbox][j]);
if sbox[currentsbox][.] are propriet!"ile dorite, se salveaz!;
index:=index+1;
pn! cnd s-au generat 8 cutii S;
Un exemplu clasic de cutii S este prezentat n tabelul 3.$9, cutiile S inverse
fiind prezentate n tabelul 3.20.
Tehnici de securizare a datelor !i programelor curs 9 5 6 Tehnici de securizare a datelor !i programelor curs 9
S0 3 8 $5 $ $0 6 5 $$ $4 $3 4 2 7 0 9 $2
S1 $5 $2 2 7 9 0 5 $0 $ $$ $4 8 6 $3 3 4
S2 8 6 7 9 3 $2 $0 $5 $3 $ $4 4 0 $$ 5 2
S3 0 $5 $$ 8 $2 9 6 3 $3 $ 2 4 $0 7 5 $4
S4 $ $5 8 3 $2 0 $$ 6 2 5 4 $0 9 $4 7 $3
S5 $5 5 2 $$ 4 $0 9 $2 0 3 $4 8 $3 6 7 $
S6 7 2 $2 5 8 4 6 $$ $4 9 $ $5 $3 3 $0 0
S7 $ $3 $5 0 $4 8 2 $$ 7 4 $2 $0 9 3 5 6
Tabelul 3.19. Cutiile S (de la S
0
la S
7
)
InvS0 $3 3 $$ 0 $0 6 5 $2 $ $4 4 7 $5 9 8 2
InvS1 5 8 2 $4 $5 6 $2 3 $$ 4 7 9 $ $3 $0 0
InvS2 $2 9 $5 4 $$ $4 $ 2 0 3 6 $3 5 8 $0 7
InvS3 0 9 $0 7 $$ $4 6 $3 3 5 $2 2 4 8 $5 $
InvS4 5 0 8 3 $0 9 7 $4 2 $2 $$ 6 4 $5 $3 $
InvS5 8 $5 2 9 4 $ $3 $4 $$ 6 5 3 7 $2 $0 0
InvS6 $5 $0 $ $3 5 3 6 0 4 9 $4 7 2 $2 8 $$
InvS7 3 0 6 $3 9 $4 $5 8 5 $2 $$ 7 $0 $ 4 2
Tabelul 3.20. Cutiile S inverse folosite pentru decodificare (de la InvS0 la InvS7)
3.11.1.2.2 Generarea cheii
Generarea cheii se poate face n mod standard sau pe bit. n cele ce
urmeaz# se descrie al doilea mod.
Acest algoritm necesit# $32 de cuvinte pe 32 bi"i pentru construirea cheii.
Ini"ial cheile scurte cu mai pu"in de 256 bi"i sunt aduse la lungimea cheilor de 256
bi"i ad#ugnd un bit "$" n partea mai semnificativ#, urmat de at"ia bi"i "0" c"i
sunt necesari pentru a ajunge la 256. Apoi se extinde aceast# cheie la 33 de subchei
pe $28 de bi"i K
0
,,K
32
, n modul urm#tor:
Scriem cheia K ca 8 cuvinte pe 32 de bi"i w
-8
,,w
-1
!i le extindem ntr-o
cheie intermediar# w
0
,,w
31
dup# urm#toarea rela"ie recurent#:
w
i
:= (w
i-8
w
i-5
w
i-3
w
i-1
" i)<<<11
unde " este partea frac"ionar# a raportului ( ) 2 / $ 5 + . Subcheile turelor sunt acum
calculate din cheia intermediar# folosind cutiile S n modul bit cu bit. Folosim
cutiile S pentru a transforma cheia intermediar# w
i
n cuvinte k
i
ale cheii turei astfel:
{k
0
, k
1
, k
2
, k
3
}:= S
3
(w
0
, w
1
, w
2
, w
3
)
{k
4
, k
5
, k
6
, k
7
}:= S
2
(w
4
, w
5
, w
6
, w
7
)
{k
8
, k
9
, k
10
, k
11
}:= S
1
(w
8
, w
9
, w
10
, w
11
)
{k
12
, k
13
, k
14
, k
15
}:= S
0
(w
12
, w
13
, w
14
, w
15
)
{k
16
, k
17
, k
18
, k
19
}:= S
7
(w
16
, w
17
, w
18
, w
19
)
{k
124
, k
125
, k
126
, k
127
}:= S
4
(w
124
, w
125
, w
126
, w
127
)
{k
128
, k
129
, k
130
, k
131
}:= S
3
(w
128
, w
129
, w
130
, w
131
)
Apoi reordon#m valorile pe 32 de bi"i k
j
ca subchei provizorii pe $28 de bi"i
K
i
(cu i{0,r}) dup# cum urmeaz#:
K
i
:= {k
4i
, k
4i+1
, k
4i+2
, k
4i+3
}
Dac# se implementeaz# algoritmul n forma ini"ial#, atunci n acest
moment, pentru a ob"ine subcheile K
i
din cele provizorii K
i
trebuie aplicat#
permutarea ini"ial# IP cheii turei pentru a plasa bi"ii cheii n coloana corect#:
K
i
=IP(K
i
)
3.11.1.2.3 Transformarea liniar#
Cei 32 de bi"i din fiecare cuvnt de ie!ire al cutiilor S sunt combina"i liniar:
X
0
, X
$
, X
2
, X
3
:= S
i
(B
i
K
i
)
X
0
:= X
0
<<<$3
X
2
:= X
2
<<<3
X
$
:= X
$
X
0
X
2
X
3
:= X
3
X
2
(X
0
<<3)
X
$
:= X
$
<<<$
X
3
:= X
3
<<<7
X
0
:= X
0
X
$
X
3
X
2
:= X
2
X
3
(X
$
<<7)
X
0
:= X
0
<<<5
X
2
:= X
2
<<<22
B
i+1
:=X
0
, X
$
, X
2
, X
3
unde <<< nseamn# rotire la stnga (de ex. <<< 3 = rotire la stnga cu 3 pozi"ii) !i
<< deplasare la stnga (de ex. << 3= deplasare la stnga cu 3 pozi"ii).
3.11.1.3 Permutarea final#
Permutarea final# (FP) este inversa permut#rii ini"iale, n tabelul urm#tor fiind date
pozi"iile finale ale bi"ilor procesa"i:
0 4 8 $2 $6 20 24 28 32 36 40 44 48 52 56 60
64 68 72 76 80 84 88 92 96 $00 $04 $08 $$2 $$6 $20 $24
$ 5 9 $3 $7 2$ 25 29 33 37 4$ 45 49 53 57 6$
65 69 73 77 8$ 85 89 93 97 $0$ $05 $09 $$3 $$7 $2$ $25
2 6 $0 $4 $8 22 26 30 34 38 42 46 50 54 58 62
66 70 74 78 82 86 90 94 98 $02 $06 $$0 $$4 $$8 $22 $26
3 7 $$ $5 $9 23 27 3$ 35 39 43 47 5$ 55 59 63
67 7$ 75 79 83 87 9$ 95 99 $03 $07 $$$ $$5 $$9 $23 $27
Tabelul 3.21. Permutarea final#
Tehnici de securizare a datelor !i programelor curs 9 7 8 Tehnici de securizare a datelor !i programelor curs 9
3.11.2. Considera"ii de implementare
Implementarea se face pe bit. Ideea de baz# este c# a!a cum se poate folosi
un procesor pe un bit pentru a implementa un algoritm ca DES f#cnd o descriere
hardware a sa !i folosind o serie de instruc"iuni logice pentru a genera fiecare
poart#, la fel se poate folosi un procesor pe 32 de bi"i pentru a prelucra 32 de
blocuri DES diferite n paralel. Aceast# implementare este mult mai eficient# dect
cea conven"ional#, n care un procesor pe 32 bi"i era mai mult blocat executnd
opera"ii pe 6, 4 sau chiar pe un bit.
n continuare se prezint# o descriere a algoritmului Serpent pentru
implementarea pe bit. Algoritmul de codificare const# din 32 de ture, textul simplu
devenind prima dat# text intermediar B
0
=P dup# ce au fost aplicate cele 32 de ture,
fiecare tur# i{0,,31} costnd din trei opera"ii:
$. Mixarea cheii: n fiecare tur#, o subcheie pe $28 de bi"i este aplicat# datei
intermediare curente B
i
2. Cutiile S: Combina"ia pe $28 de bi"i a intr#rii !i cheii este considerat# ca patru
cuvinte pe 32 de bi"i. Cutia S, care este implementat# ca o secven"# de opera"ii
logice (a!a cum trebuie s# fie n hardware), este aplicat# acestor patru cuvinte
ob"inndu-se ca rezultat o ie!ire de patru cuvinte. Unitatea centrala de
prelucrare trebuie deci s# prelucreze cele 32 de copii ale cutiei S simultan,
rezultnd S
i
(B
i
K
i
).
3. Transformarea liniar#.
3.11.3. Securitatea
A!a cum s-a men"ionat versiunea ini"ial# a Serpent folosea cutiile S din
algoritmul DES. Estim#rile au indicat c# num#rul de texte simple (combina"ii de
litere) necesare pentru orice tip de atac ar fi mult peste 2
$00
. Studiind felul n care
aceste cutii S lucreaz# n structura Serpent s-a ajuns la concluzia c# erau u!or de
g#sit cutii S care s# mbun#t#"easc# estimarea la 2
256
!i dorin"a de a oferi cel mai
bun algoritm a dus la modificarea acestor cutii S n cele prezentate anterior. Un alt
motiv pentru acest# schimbare a fost faptul c# folosind 8 cutii S n loc de 32 se
reduce num#rul por"ilor logice ceea ce conteaz# pentru o implementare hardware
performant# !i reduce semnificativ dimensiunea codului pentru implementarea
compact# folosit# la smart card-urile cu cost redus.
Printr-o estimare de 2
256
se n"elege c# un atac diferen"ial sau liniar
mpotriva oric#rei chei ar cere acest num#r de texte, presupunnd c# ele ar fi
disponibile. Aceast# concluzie se trage din procesarea probabilit#"ilor relevante
asupra tuturor cheilor. Exist# desigur diferen"e de probabilitate mai mari pentru
cheile fixe, n aceste cazuri pot apare diferen"e de 2
-$20
!i acestea ar putea fi teoretic
g#site prin c#utare exhaustiv#. Asemenea diferen"e se pot g#si !i la al"i algoritmi,
din moment ce numai blocul de $28 de bi"i necesar influen"eaz# probabilitatea lor.
n plus, dac# este selectat# o cheie pe $28 sau $92 de bi"i atunci costurile teoretice
ale c#ut#rii cheii ar fi reduse.
Concluzia analizei este c# nu exist# nici o indica"ie a vreunui tip de atac
rapid posibil !i se crede c# un astfel de atac ar necesita o nou# baz# teoretic#.
2 Tehnici de securizare a datelor !i programelor curs "0
CURS NR.10
3.12. AES (Advanced Encryption Standard)
n data de 2 ianuarie "997, Institutul Na#ional pentru Standarde !i
Tehnologii (NIST) al SUA a anun#at ini#ierea procesului de dezvoltare a unui nou
standard criptografic (AES Advanced Encryption Standard) care s$ nlocuiasc$
clasicul DES. Acest nou algoritm trebuia s$ fie disponibil tuturor doritorilor !i s$
cripteze blocuri de date de minimum "28 bi#i, iar cheia de criptare s$ poat$ avea
dimensiuni de "28, "92 !i 256 bi#i.
n august "998, NIST anun#$ c$ un grup de "5 algoritmi au r$mas n
competi#ie, num$rul lor fiind mai apoi diminuat la 5 (MARS, RC6, Rijndael,
Serpent !i Twofish) n aprilie "999.
n cele din urm$ (2 octombrie 2000) a fost selectat drept c!tig$tor
algoritmul Rijndael propus de c$tre Joan Daemen !i Vincent Rijmen (Belgia).
Acest algoritm devine astfel noul standard AES.
AES se remarc$ prin simplitate !i prin performan#e criptografice ridicate,
fiind u!or de implementat att software ct !i hardware.
3.12.1. Prezentarea algoritmului AES
3.12.1.1. Nota!ii
Algoritmul AES codific$ blocuri de date de "28 bi#i. Not$m num$rul de
cuvinte pe 32 bi#i ale blocului de date Nb=4;
Lungimea cheii K poate fi de "28, "92 sau 256 bi#i, aceast$ lungime fiind
exprimat$ prin Nk= 4, 6 sau 8, adic$ num$rul de cuvinte de 32 bi#i ai cheii.
Tabelul 3.22 prezint$ variantele posibile de implementare ale AES,
mpreun$ cu num$rul de runde efectuat n procesul de criptare.
Variant$ AES Nk Nb num$r de runde
AES-"28 4 4 "0
AES-"92 6 4 "2
AES-256 8 4 "4
Tabelul 3.22. Variante de implementare AES
Att blocul de date de intrare (in) ct !i cel de ie!ire (out), ambele pe "28
bi#i sunt reprezentate ca tablouri n care octe#ii sunt completa#i pe coloan$ (figura
3.2"). Analog este format !i un tablou de calcul numit tablou de stare.
octe!ii intr"rii octe!ii st"rii octe!ii ie#irii
in
0
in
4
in
8
in
"2
s
0,0
s
0,"
s
0,2
s
0,3
out
0
out
4
out
8
out
"2
in
"
in
5
in
9
in
"3
s
",0
s
","
s
",2
s
",3
out
"
out
5
out
9
out
"3
in
2
in
6
in
"0
in
"4
s
2,0
s
2,"
s
2,2
s
2,3
out
2
out
6
out
"0
out
"4
in
3
in
7
in
""
in
"5
!
s
3,0
s
3,"
s
3,2
s
3,3
!
out
3
out
7
out
""
out
"5
Figura 3.21. Tablourile intr$rii, st$rii !i ie!irii
Att pentru criptare ct si pentru decriptare, algoritmul AES utilizeaz$ un
num$r precizat de runde ce con#in 4 tipuri de transform$ri realizate pe octet:
" substitu#ie, utiliznd cutii S;
" rota#ia aplicat$ asupra liniilor tabloului de stare;
" combinarea datelor din fiecare coloan$ a st$rii;
" adunarea unei subchei dependente de rund$.
3.12.1.2. Criptarea AES
Criptarea se desf$!oar$ conform pseudocodului prezentat n figura 3.22.
Cipher (byte in[4*Nb], byte out[4*Nb], word w[Nb*(Nr+1)])
begin
byte state[4,Nb]
state =in
AddRoundKey(state,w) // vezi 3.12.1.2.4
for round =1 step 1 to Nr-1
SubBytes(state) // vezi 3.12.1.2.1
ShiftRows(state) // vezi 3.12.1.2.2
MixColumns(state) // vezi 3.12.1.2.3
AddRoundKey(state,w+round*Nb)
end for
SubBytes(state)
ShiftRows(state)
AddRoundKey(state,w+Nr*Nb)
out =state
end
Figura 3.22. Pseudocodul cript$rii AES
Algoritmul demareaz$ prin copierea intr$rii (in) n tabloul st$rii (state).
Dup$ o prim$ adunare a subcheii, urmeaz$ transform$rile caracteristice rundelor cu
specificarea c$ ultima rund$ (cea situat$ imediat dup$ ncheierea buclei for) este
diferit$ prin faptul c$ nu include transformarea MixColumns( ). n final, tabloul
st$rii (state) este copiat n cel al ie!irii (out). Transform$rile ce intervin
(SubBytes(), ShiftRows( ), MixColumns( ) !i AddRoundKey( )) !i care ac#ioneaz$
asupra tabloului de stare (state) sunt descrise n paragrafele urm$toare.
Tehnici de securizare a datelor !i programelor curs "0 3 4 Tehnici de securizare a datelor !i programelor curs "0
Mai trebuie men#ionat faptul c$ !irul w[ ] (vezi figura 3.22), con#ine
subcheile generate de c$tre generatorul de subchei prezentat n paragraful 3."2.".3.
3.12.1.2.1. Transformarea SubBytes( )
Aceast$ transformare realizeaz$ o mapare a tabloului de stare actual n cel
de stare viitor (figura 3.23) utiliznd o cutie S specific$ (figura 3.24).
Figura 3.23. Maparea realizat$ de SubBytes( )
Figura 3.24. Descrierea substitu#iei octetului xy (in hexazecimal) utiliznd
cutia S
Pentru a ar$ta modul n care se desf$!oar$ aceast$ transformare neliniar$,
s$ consider$m spre exemplificare c$ s
","
={5e}. Atunci x=5 !i y=e, iar rezultatul
ob#inut va fi s
","
={58}.
3.12.1.2.2. Transformarea ShiftRows( )
n aceast$ transformare, octe#ii din liniile tabloului de stare sunt roti#i spre
stnga astfel: cu 0 octe#i pentru linia ", cu " octet pentru linia 2, cu 2 octe#i pentru
linia 3 !i respectiv cu 3 octe#i pentru linia 4, dup$ cum se observ$ n figura 3.25.
Figura 3.25. Transformarea ShiftRows( )
3.12.1.2.3. Transformarea MixColumns( )
Aceast$ transformare opereaz$ asupra tabloului de stare n modul coloan$-
cu-coloan$ (figura 3.26) !i poate fi descris$ printr-o scriere matricial$ astfel:
c
c
c
c
c
c
c
c
s
s
s
s
s
s
s
s
, 3
, 2
, "
, 0
, 3
, 2
, "
, 0
02 0" 0" 03
03 02 0" 0"
0" 03 02 0"
0" 0" 03 02
'
'
'
'
pentru 0 c < Nb,
sau, pe componente, astfel:
c c c c c
s s s s s
, 3 , 2 , " , 0 , 0
) } 03 ({ ) } 02 ({ ' =
c c c c c
s s s s s
, 3 , 2 , " , 0 , "
) } 03 ({ ) } 02 ({ ' =
) } 03 ({ ) } 02 ({ '
, 3 , 2 , " , 0 , 2 c c c c c
s s s s s =
) } 02 ({ ) } 03 ({ '
, 3 , 2 , " , 0 , 3 c c c c c
s s s s s =
Figura 3.26. MixColumns( ) opereaz$ pe coloane
Tehnici de securizare a datelor !i programelor curs "0 5 6 Tehnici de securizare a datelor !i programelor curs "0
3.12.1.2.4. Transformarea AddRoundKey( )
Prin aceast$ transformare, coloanelor tabloului de stare actual li se aplic$ o
opera#ie sau-exclusiv cu o subcheie dependent$ de rund$ (figura 3.27), rezultnd
tabloul de stare viitor:
] [ ] , , , [ ] ' , ' , ' , ' [
* , 3 , 2 , " , 0 , 3 , 2 , " , 0 c Nb round c c c c c c c c
w s s s s s s s s
+
= pentru 0 c < Nb,
unde [w
i
] reprezint$ o subcheie din !irul w[ ] al subcheilor, iar round este num$rul
rundei actuale, cu 0 round < Nr.
Figura 3.27. Transformarea AddRoundKey( )
3.12.1.3. Generarea subcheilor
Algoritmul AES utilizeaz$ cheia K pentru a genera subcheile printr-o
procedur$ specific$ (figura 3.28), care genereaz$ un total de Nb(Nr+") cuvinte pe
32 bi#i. Rezultatul acestei proceduri este un !ir de cuvinte [w
i
] pe 32 bi#i, cu 0 i <
Nb(Nr+").
KeyExpansion(byte key[4 * Nk], word w[Nb * (Nr +1)], Nk)
begin
i=0
while (i <Nk)
w[i] =word[key[4*i],key[4*i+1],key[4*i+2],key[4*i+3]]
i =i +1
end while
i =Nk
while (i <Nb * (Nr +1))
word temp =w[i - 1]
if (i mod Nk =0)
temp =SubWord(RotWord(temp)) xor Rcon[i / Nk]
else if (Nk =8 and i mod Nk =4)
temp =SubWord(temp)
end if
w[i] =w[i - Nk] xor temp
i =i +1
end while
end
Figura 3.28. Pseudocodul pentru generarea subcheilor
SubWord( ) este o func#ie care mapeaz$ un cuvnt de 32 bi#i (4 octe#i) ntr-
un cuvnt de aceia!i lungime prin aplicarea cutiei S (figura 3.24) exact ca n cazul
func#iei SubBytes( ).
RotWord( ) este o func#ie care realizeaz$ o permutare ciclic$ asupra unui
cuvnt de intrare [a
0
,a
"
,a
2
,a
3
], rezultnd un cuvnt [a
"
,a
2
,a
3
,a
0
].
Rcon[i] este un vector de forma [{02}
i-"
,{00},{00},{00}] cu i lund valori
ncepnd cu " !i nu cu 0.
Examinnd figura 3.28, se observ$ c$ primele Nk cuvinte ale cheii extinse
sunt practic identice cu cheia original$ K. Toate cuvintele urm$toare w[i] sunt
ob#inute prin aplicarea unei opera#ii sau-exclusiv ntre precedentul cuvnt w[i-"] !i
cuvntul w[i-Nk]. Pentru cuvinte aflate n pozi#ii multiplu de Nk, nainte de
aplicarea opera#iei sau-exclusiv asupra w[i-"] se aplic$ o transformare suplimentar$
de tipul: SubWord(RotWord( ) ) XOR Rcon[i].
3.12.1.4. Decriptarea AES
Decriptarea se desf$!oar$ conform pseudocodului prezentat n figura 3.29.
InvCipher(byte in[4 * Nb], byte out[4 * Nb], word w[Nb * (Nr +1)])
begin
byte state[4,Nb]
state =in
AddRoundKey(state, w +Nr * Nb) // vezi 3.12.1.2.4
for round =Nr - 1 step -1 to 1
InvShiftRows(state) // vezi 3.12.1.4.1
InvSubBytes(state) // vezi 3.12.1.4.2
AddRoundKey(state, w +round * Nb)
InvMixColumns(state) // vezi 3.12.1.4.3
end for
InvShiftRows(state)
InvSubBytes(state)
AddRoundKey(state, w)
out =state
end
Figura 3.29. Pseudocodul decript$rii AES
Algoritmul este foarte asem$n$tor cu cel de criptare (figura 3.22), cu
particularitatea c$ func#iile SubBytes( ), ShiftRows( ), MixColumns( ) sunt
nlocuite cu func#iile InvSubBytes( ), InvShiftRows( ), InvMixColumns( ). Aceste
noi func#ii sunt prezentate n paragrafele urm$toare.
Tehnici de securizare a datelor !i programelor curs "0 7 8 Tehnici de securizare a datelor !i programelor curs "0
3.12.1.4.1. Transformarea InvShiftRows( )
Figura 3.30. Transformarea InvShiftRows( )
n aceast$ transformare (inversa transform$rii ShiftRows( )), octe#ii din
liniile tabloului de stare sunt roti#i spre dreapta astfel: cu 0 octe#i pentru linia ", cu "
octet pentru linia 2, cu 2 octe#i pentru linia 3 !i respectiv cu 3 octe#i pentru linia 4,
dup$ cum se observ$ n figura 3.30.
3.12.1.4.2. Transformarea InvSubBytes( )
Aceast$ transformare (inversa transform$rii SubBytes( )) realizeaz$ o
mapare a tabloului de stare actual n cel de stare viitor (figura 3.3") utiliznd o cutie
S specific$ (figura 3.32).
Figura 3.31. Maparea realizat$ de InvSubBytes( )
Figura 3.32. Descrierea substitu#iei octetului xy (in hexazecimal) utiliznd cutia
invers$ S
Pentru a ar$ta modul n care se desf$!oar$ aceast$ transformare neliniar$,
s$ consider$m spre exemplificare c$ s
","
={5e}. Atunci x=5 !i y=e, iar rezultatul
ob#inut va fi s
","
={9d}.
3.12.1.4.3. Transformarea InvMixColumns( )
Aceast$ transformare (inversa transform$rii MixColumns( )) opereaz$
asupra tabloului de stare n modul coloan$-cu-coloan$ (analog cu figura 3.26) !i
poate fi descris$ printr-o scriere matricial$ astfel:
c
c
c
c
c
c
c
c
s
s
s
s
e d b
b e d
d b e
d b e
s
s
s
s
, 3
, 2
, "
, 0
, 3
, 2
, "
, 0
0 09 0 0
0 0 09 0
0 0 0 09
09 0 0 0
'
'
'
'
pentru 0 c < Nb,
sau, pe componente, astfel:
) } 09 ({ ) } 0 ({ ) } 0 ({ ) } 0 ({ '
, 3 , 2 , " , 0 , 0 c c c c c
s s d s b s e s =
) } 0 ({ ) } 0 ({ ) } 0 ({ ) } 09 ({ '
, 3 , 2 , " , 0 , " c c c c c
s d s b s e s s =
) } 0 ({ ) } 0 ({ ) } 09 ({ ) } 0 ({ '
, 3 , 2 , " , 0 , 2 c c c c c
s b s e s s d s =
) } 0 ({ ) } 09 ({ ) } 0 ({ ) } 0 ({ '
, 3 , 2 , " , 0 , 3 c c c c c
s e s s d s b s =
2 Tehnici de securizare a datelor !i programelor curs ""
CURS NR.11
4. Algoritmi de criptare cu chei publice
Dezvoltarea metodelor de criptare cu chei publice este cea mai mare !i
poate singura revolu#ie adev$rat$ din istoria criptografiei. De la nceputurile sale !i
pn$ nu demult, criptografia se baza pe opera#ii elementare de substitu#ie !i
permuta#ie. Dup$ folosirea acestor algoritmi mai mult de un mileniu, s-au inventat
ma!inile rotative, care au fost un pas important n istoria criptografiei. Odat$ cu
apari#ia calculatoarelor s-au dezvoltat algoritmi mult mai complec!i, cel mai
proeminent fiind DES, culminnd cu algoritmul AES. Cu toate c$ ma!inile rotative
!i DES au fost un progres imens n istoria criptografiei, ele folosesc doar opera#ii
simple de substitu#ie !i permutare.
Criptografia cu chei publice se ndep$rteaz$ radical de tot ceea ce a fost
nainte. Algoritmii cu chei publice sunt baza#i pe func#ii matematice, spre deosebire
de cei conven#ionali care sunt baza#i pe substitu#ie !i permuta#ie. Un alt aspect
important al cript$rii cu chei publice este criptarea asimetric$, care implic$
folosirea a dou$ chei separate pentru criptare !i decriptare, n contrast cu criptarea
conven#ional$ care folose!te aceea!i cheie att pentru criptare ct !i pentru
decriptare. Folosirea a dou$ chei are repercusiuni majore n mai multe domenii cum
ar fi: confiden#ialitatea, distribu#ia cheilor, autentificare.
4.1. Principiile cript!rii cu chei publice
Conceptul cript$rii cu chei publice a evoluat din ncercarea rezolv$rii a
dou$ din cele mai semnificative probleme asociate cu criptografia conven#ional$.
Prima dintre acestea este distribu#ia cheilor, adic$ sursa mesajului trebuie s$
transmit$ cheia destinatarului, lucru ce ridic$ mari probleme deoarece aceasta nu
poate fi criptat$ !i poate fi interceptat$ de oponent. Cheia se mai poate distribui
printr-un centru de distribu#ie a cheilor de criptare (KDC - Key Distribution
Center), dar nici acesta nu rezolv$ total problema. Whitfield Diffie !i Martin
Hellman au afirmat c$ folosirea centrelor de distribu#ie a cheilor suprim$ dreptul la
confiden#ialitate al utilizatorilor, ace!tia fiind nevoi#i s$ transmit$ cheile de criptare
centrului de distribu#ie, care poate fi compromis printr-un atac, cheile de criptare
intrnd astfel n posesia atacatorului.
A doua problem$ care !i-a pus-o W. Diffie este aceea a semn$turilor
digitale. Odat$ cu r$spndirea pe scar$ larg$ a criptografiei, a ap$rut nevoia
semn$rii documentelor electronice, semn$turi care trebuie s$ fie echivalente cu cele
de pe un document de hrtie. Acest lucru nseamn$ c$ destinatarul mesajului poate
determina dac$ acesta este trimis de persoana care se pretinde a fi. Totu!i
semn$turile digitale nu se rezum$ doar la att, avnd o r$spndire larg$ n comer#ul
electronic.
4.1.1. Sistemele criptografice cu chei publice
Figura 4.1. Modelul simplificat al criptarii cu chei publice
Algoritmii cu chei publice folosesc o cheie pentru criptare !i o alt$ cheie
pentru decriptare. Ace!ti algoritmi au urm$toarea caracteristic$ major$:
! Imposibilitatea de a determina cheia de decriptare numai pe baza
algoritmului !i a cheii de criptare.
n plus unii algoritmi, cum ar fi RSA, au !i urm$toarea caracteristic$:
! Se pot folosi ambele chei pentru criptare, dar numai una pentru
decriptare.
Tehnici de securizare a datelor !i programelor curs "" 3 4 Tehnici de securizare a datelor !i programelor curs ""
Figura 4." ilustreaz$ procesul de criptare cu chei publice. Pa!ii esen#iali
sunt urm$torii:
". Cele dou$ p$r#i care doresc s$ comunice trebuie s$ genereze cte o
pereche de chei, pentru a fi folosite la criptarea !i decriptarea
mesajelor.
2. Fiecare parte public$ cheia de criptare ntr-o list$ public$ (aflat$ la
dispozi#ia ter#ilor) sau ntr-un fi!ier. Aceasta este cheia public$.
Perechea ei se p$streaz$ secret$.
3. Dac$ A dore!te s$-i transmit$ un mesaj lui B, el cripteaz$ mesajul
folosind cheia public$ a lui B.
4. Cnd B recep#ioneaz$ mesajul, acesta l decripteaz$ folosind cheia sa
privat$. Nici un alt utilizator nu poate decripta mesajul, deoarece doar
B cunoa!te cheia privat$.
Cu aceast$ abordare to#i participan#ii au acces la cheile publice, iar cheile
private se genereaz$ local de fiecare sistem, f$r$ nevoia de a fi distribuite. Att timp
ct un sistem !i controleaz$ cheia privat$ mesajele trimise c$tre acest sistem sunt n
siguran#$. Un sistem !i poate schimba oricnd cheia privat$, dup$ care trebuie s$
publice cheia public$ asociat$ acesteia, pentru a o schimba pe cea veche.
mesajului
Sursa
Criptanalist
perechii de
Sursa
Destinatie
X X
^
Y
KRb
KUb
de criptare
Algoritm
de decriptare
Algorithm
KRb
^
X
Sursa A Destinatia B
chei
Figura 4.2. Criptosistem cu chei publice: confiden#ialitate
n continuare se vor descrie mai am$nun#it elementele cript$rii cu chei
publice, care sunt prezentate n figura 4.2. O surs$ A dore!te s$ transmit$ un mesaj
X=[X
"
,X
2
,,X
M
] c$tre destina#ia B. Cele M elemente ale lui X sunt litere dintr-un
alfabet finit. n acest caz B genereaz$ perechea de chei, una public$ KU
b
!i una
privat$ KR
b
, care este cunoscut$ numai de c$tre B. Dup$ generarea cheilor, cheia
public$ se transmite pentru a fi accesibil$ lui A.
Mesajul X !i cheia de criptare KU
b
procesate de algoritm formeaz$ mesajul
criptat Y = [Y
"
, Y
2
, , Y
N
].
Y = E
KUb
(X)
Destinatarul, aflat n posesia cheii private poate inversa transformarea:
X = D
KRb
(Y)
Un oponent care intercepteaz$ Y !i are acces la cheia KU
b
, dar nu are acces
la KR
b
, poate ncerca s$ refac$ X !i/sau KR
b
. Se presupune c$ oponentul cunoa!te
algoritmul de criptare E !i cel de decriptare D. Dac$ oponentul este interesat numai
de un singur mesaj, atunci el !i va concentra eforturile pentru a descoperi X, dar n
general oponentul este interesat nu numai de con#inutul mesajului, ci !i de
posibilitatea decript$rii mesajelor pe viitor. n acest ultim caz el va dori s$
descopere cheia privat$ de decriptare KR
b.
Dac$ schema din figura 4.2 relev$ confiden#ialitatea, figura 4."b !i 4.3
ilustreaz$ cum se poate folosi criptarea cu chei publice pentru autentificare:
X X
^
Y
KRa
KRa
KUa
mesajului
Sursa
chei
Criptanalist
perechii de
Sursa
Destinatie
de criptare
Algoritm
de decriptare
Algorithm
Sursa A Destinatia B
Figura 4.3. Criptosistem cu chei publice: autentificare
Y = E
KRa
(X)
X = D
KUa
(Y)
n acest caz A preg$te!te un mesaj pentru a fi transmis lui B !i l cripteaz$
folosind cheia sa privat$ (K
Ra
). B poate decripta mesajul folosind cheia public$ a lui
A (K
Ua
). Deoarece mesajul a fost criptat folosind cheia privat$ a lui A, numai acesta
putea scrie mesajul. Astfel ntregul mesaj criptat serve!te ca o semn$tur$ digital$.
n plus este imposibil$ modificarea mesajului f$r$ a avea acces la cheia privat$ a lui
A. n concluzie mesajul este autentificat att din punctul de vedere al sursei ct !i
din punct de vedere a integrit$#ii acestuia.
n schema precedent$ ntregul mesaj era criptat, dar documentul trebuie
stocat n form$ necriptat$ pentru a putea fi folosit practic. Se poate p$stra o copie
Tehnici de securizare a datelor !i programelor curs "" 5 6 Tehnici de securizare a datelor !i programelor curs ""
criptat$, pentru ca sursa !i con#inutul mesajului s$ poat$ fi verificate n cazul unei
dispute.
O cale mult mai eficient$ pentru a ob#ine acela!i rezultat este criptarea doar
a unui bloc scurt de bi#i care este ata!at documentului. Un astfel de bloc se nume!te
autentificator !i are proprietatea c$ nu permite schimbarea con#inutului
documentului f$r$ ca autentificatorul s$ fie schimbat. Dac$ autentificatorul este
criptat cu cheia privat$ a sursei, atunci acesta serve!te ca semn$tur$ verificnd
originea !i con#inutul mesajului. Este de notat c$ metoda descris$ mai sus nu
furnizeaz$ confiden#ialiate mesajului. Astfel mesajul transmis nu poate fi modificat
dar poate fi citit de oricine. Pentru a rezolva aceast$ problem$ se poate folosi o
criptare dubl$: Z = E
KUb
[E
KRa
(X)]
X = D
KUa
[D
KRb
(Z)]
X
KUb KRb
KRa KUa
Y Z Y X
mesajului
Sursa
chei
perechii de
Sursa
Destinatie
de criptare
Algoritm
de decriptare
Algorithm
Sursa A
de criptare
Algoritm
de decriptare
Algorithm
chei
perechii de
Sursa
Destinatia B
Figura 4.4. Criptosistem cu chei publice: confiden#ialitate !i autentificare
Se ncepe prin criptarea mesajului cu cheia privat$ a sursei. Astfel este
furnizat$ semn$tura digital$. Apoi se cripteaz$ din nou mesajul rezultat cu cheia
public$ a destinatarului. Mesajul criptat final nu poate fi decriptat dect de
destinatarul dorit, care este singura persoan$ aflat$ n posesia cheii private necesare.
Deci, confiden#ialitatea este asigurat$. Aceast$ metod$ are dezavantajul c$
algoritmul (care este foarte complex) trebuie folosit de patru ori, m$rind timpul de
procesare a informa#iei. Figura 4.4 prezint$ acest sistem cu criptare dubl$.
4.1.2. Aplica"ii ale sistemelor cu chei publice
Sistemele criptografice cu chei publice sunt caracterizate prin utilizarea
unui algoritm care folose!te dou$ chei: una public$ !i una privat$. n func#ie de
aplica#ie, sursa folose!te fie cheia sa privat$ fie cheia public$ a destinatarului, sau
ambele. Sistemele cu chei publice pot fi ncadrate n trei categorii principale:
! Criptare/Decriptare: Sursa cripteaz$ mesajul cu cheia public$ a
destinatarului.
! Semn!turi digitale: Sursa semneaz$ (cripteaz$) mesajul cu cheia sa
privat$. Semnarea este realizat$ prin criptarea total$ sau par#ial$ a mesajului.
! Distribu"ia de chei: Dou$ p$r#i coopereaz$ pentru a schimba o cheie de
sesiune. Exist$ diferite abord$ri posibile, implicnd cheia privat$ a unuia sau a
ambilor participan#i.
Unii algoritmi sunt potrivi#i pentru toate cele trei aplica#ii. n schimb al#i
algoritmi sunt potrivi#i doar pentru una sau dou$ aplica#ii de acest gen. Tabelul
urm$tor arat$ aplica#iile suportate de algoritmii descri!i n aceast$ lucrare:
Algoritmul Criptare/Decriptare Semn!turi digitale Distribu"ia cheilor
RSA Da Da Da
Diffie-Hellman Nu Nu Da
DSS Nu Da Nu
4.1.3. Criptoanaliza sistemelor cu chei publice
Ca !i criptarea conven#ional$, sistemele cu chei publice sunt vulnerabile n
fa#a unui atac exhaustiv. Contram$sura este aceea!i: folosirea unor chei de
dimensiune mare. Totu!i trebuie avut n vedere c$ aceste sisteme cu chei publice
depind de folosirea unor func#ii matematice inversabile, a c$ror complexitate cre!te
exponen#ial cu num$rul de bi#i ai cheii. Astfel cheia trebuie s$ fie destul de lung$
pentru a mpiedica un atac cu for#$ brut$ (exhaustiv), dar destul de mic$ pentru o
criptare !i decriptare practic$. n practic$ dimensiunea cheii care a fost propus$
pentru a rezista unui atac cu for#$ brut$ este prea mare !i face procesul de
criptare/decriptare prea lent. Acesta este motivul pentru care criptarea cu chei
publice este folosit$ cu prec$dere n distribuirea cheilor !i a semn$turilor digitale.
Un alt tip de atac este acela de a g$si o cale de a deduce cheia privat$
numai pe baza algoritmului !i a cheii publice. Nu a fost dovedit pn$ acum c$ un
astfel de atac este imposibil din punct de vedere matematic pentru un anumit
algoritm care folose!te chei publice. n acest caz orice algoritm, incluznd
popularul RSA, este suspect. Istoria criptanalizei arat$ c$ o problem$ care pare
imposibil de solu#ionat dintr-o anumit$ perspectiv$, poate avea o solu#ie dac$
problema este privit$ dintr-un unghi total diferit.
n final mai exist$ o form$ de atac care este particular sistemelor cu chei
publice. Acesta este n esen#$ un atac bazat pe mesaje probabile. S$ presupunem c$
mesajul criptat con#ine o cheie DES pe 56 bi#i. Oponentul poate cripta toate cheile
DES posibile folosind cheia public$ a sursei !i compar$ rezultatul cu mesajul pe
care dore!te s$-l decripteze. n acest caz nu conteaz$ dimensiunea cheii din sistemul
cu chei publice, atacul reducndu-se la un atac cu for#$ brut$ pe 56 bi#i. Un astfel de
atac poate fi comb$tut prin ad$ugarea unor secven#e aleatoare mesajului original.
2 Tehnici de securizare a datelor !i programelor curs "2
CURS NR.12
4.2. Algoritmul RSA
Conceptul de criptografie cu chei publice publicat de Diffie !i Hellman, a
provocat speciali!tii n domeniu pentru dezvoltarea unui algoritm care satisface
cerin#ele unui sistem criptografic cu chei publice. Unul dintre primii algoritmi
dezvolta#i n acest scop a fost cel dezvoltat de Ron Rivest, Adi Shamir !i Len
Adleman to#i de la MIT (Massachussets Institute of Technology) !i a fost publicat
n "978. De la bun nceput RSA (a!a a fost numit dup$ numele autorilor) !i-a
c!tigat suprema#ia, fiind singurul algoritm care folose!te chei publice, r$spndit pe
scar$ larg$.
Algoritmul RSA este un cod bloc, n care mesajul original !i cel criptat sunt
ntregi ntre 0 !i n-" pentru un n dat. n continuare se va prezenta func#ionarea RSA
ncepnd cu descrierea sa, dup$ care se vor prezenta aspectele computa#ionale !i
cele criptografice pe care le implic$ acest algoritm.
4.2.1. Descrierea algoritmului
Metoda dezvoltat$ de Rivest, Shamir !i Adleman folose!te expresii
exponen#iale, astfel nct mesajul original este criptat n blocuri care au o valoare
binar$ ce trebuie s$ fie mai mic$ dect un n dat. n acest caz dimensiunea blocului
poate fi cel mult log
2
(n), n practic$ dimensiunea blocului fiind de 2
k
bi#i,
unde 2
k
<n2
k+"
. Criptarea !i decriptarea au urm$toarea form$ pentru un bloc de
intrare M !i un bloc de ie!ire C:
C = M
e
mod n
M = C
d
mod n = (M
e
)
d
mod n = M
ed
mod n
Sursa !i destina#ia trebuie s$ cunoasc$ valoarea lui n. Sursa cunoa!te
valoarea lui e !i numai destina#ia cunoa!te valoarea lui d. Deci, acest sistem este un
criptosistem cu chei publice unde cheia public$ este KU = {e,n} !i cheia privat$
este KR={d,n}. Pentru ca acest algoritm s$ satisfac$ cerin#ele sistemelor cu chei
publice, el trebuie s$ ndeplineasc$ urm$toarele condi#ii:
". Exist$ valori ale lui e, d, n astfel nct M
ed
mod n=M, pentru toate
valorile a lui M < n.
2. M
e
!i C
d
se pot calcula u!or pentru toate valorile lui M < n.
3. Este nefezabil$ determinarea lui d pe baza lui e !i n.
Pentru nceput ne vom focaliza aten#ia asupra primei condi#ii. n primul
rnd trebuie s$ g$sim o rela#ie de forma:
M
ed
mod n = M
Un corolar al teoremei lui Euler furnizeaz$ r$spunsul: fiind date dou$
numere prime p, q !i doi ntregi n, m astfel nct n=pq !i 0<m<n !i un ntreg
oarecare k, exist$ urm$toarea rela#ie:
m
k(n) + "
mod n = m
k(p-")(q-") +"
mod n = m mod n
unde (n) este func#ia Euler, care reprezint$ num$rul de ntregi pozitivi mai mici
dect n !i relativ primi cu acesta. Se poate scrie c$ (pq) = (p-")(q-"). Astfel
putem ob#ine rela#ia dorit$, dac$
ed=k (n) + "
Aceasta este echivalent cu a spune c$:
ed mod (n) "
Aceasta nseamn$ c$ e !i d sunt inver!ii multiplicativi modulo (n), acest
lucru fiind adev$rat doar dac$ d !i prin urmare !i e sunt relativ prime fa#$ de (n).
Echivalent, cmmdc ((n),d)=".
Componentele algoritmului RSA sunt urm$toarele:
p,q dou! numere prime privat, alese
n=pq public, calculat
e, cu cmmdc( (n),e )="; "<e< (n)
public, ales
d, calculat a. d e mod (n) "
privat, calculat
Cheia privat$ const$ din {d,n} !i cheia public$ const$ din {e,n}. S$
presupunem c$ un utilizator A !i-a publicat cheia public$ !i c$ un utilizator B
dore!te s$ transmit$ mesajul M lui A. Atunci B calculeaz$ C=M
e
mod n !i transmite
C. La recep#ionarea mesajului criptat utilizatorul A reface transformarea calculnd
M=C
d
mod n.
Figura 4.5 prezint$ pe scurt algoritmul RSA, iar figura 4.6 prezint$
procesul de criptare !i decriptare folosind acest algoritm pentru un exemplu
concret. Se execut$ urm$torii pa!i:
! Se selecteaz$ dou$ numere prime, p=7 !i q="7.
! Se calculeaz$ n=pq=7"7 = ""9.
! Se calculeaz$ (n)=(p-")(q-")=96.
! Se selecteaz$ e astfel nct e s$ fie relativ prim fa#$ de %(n)=96 !i mai
mic dect (n); n acest caz e=5.
! Se determin$ d astfel nct de mod 96=" !i d<96. Valoarea corect$ a
lui d este d=77, deoarece 77 x 5 = 385 = 496 +".
Tehnici de securizare a datelor !i programelor curs "2 3 4 Tehnici de securizare a datelor !i programelor curs "2
Cheile rezultate sunt cheia public$ KU={5,""9} !i cheia privat$
KR={77,""9}. Exemplul din figura 4.6 arat$ folosirea cheilor pentru un mesaj de
intrare M="9. Pentru criptare, "9 este ridicat la puterea a cincea rezultatul fiind
2477099, care se mparte la ""9, mesajul criptat fiind 66 (restul mp$r#irii). La
decriptare se ob#ine mesajul ini#ial ("9): 66
77
mod ""9 = "9.
Generarea cheilor
Alege p, q (p !i q sunt numere prime)
Calculeaz$ n = p q
Calculeaz$ (n)=(p-")(q-")
Alege ntregul e astfel nct cmmdc((n),e)="; "<e<(n)
Calculeaz$ d astfel nct de mod (n)="
Cheia public$ KU={e,n}
Cheia privat$ KR={d,n}
Criptare
Mesaj necriptat: M<n
Mesaj criptat: C=M
e
mod n
Decriptare
Mesaj criptat: C
Mesaj necriptat: M=C
d
mod n
Figura 4.5. Algoritmul RSA prezentare pe scurt
Figura 4.6. Exemplu de criptare !i decriptare cu algoritmul RSA
4.2.2. Aspecte computa!ionale
n continuare se vor descrie elementele necesare implement$rii
algoritmului RSA. De fapt sunt dou$ aspecte care trebuie studiate: generarea
cheilor !i procesul de criptare/decriptare.
4.2.2.1. Criptarea "i decriptarea
Att criptarea ct !i decriptarea n RSA implic$ ridicarea la putere a unui
ntreg modulo n. Folosind proprietatea aritmeticii modulo putem reduce num$rul de
astfel de opera#ii, calculul devenind mai simplu:
[(a mod n) x (b mod n) ] mod n = (a x b) mod n
O alt$ problem$ este eficien#a calculului exponen#ial deoarece RSA
lucreaz$ cu exponen#i mari. Pentru a vedea cum poate fi mbun$t$#it calculul s$
consider$m c$ se dore!te ridicarea lui x la puterea "6. O abordare direct$ necesit$
"5 nmul#iri:
X
"6
=X X X X X X X X X X X X X X X X
Putem ob#ine acela!i rezultat doar cu patru nmul#iri dac$ ridic$m la p$trat
fiecare rezultat par#ial ( X
2
, X
4
, X
8
, X
"6
).
Mai general, s$ presupunem c$ dorim s$ determin$m valoarea lui a
m
, a !i m
fiind ntregi pozitivi. Dac$ exprim$m pe m ca un num$r binar b
k
b
k-"
b
0
, atunci
avem:
0
2
i
b
i
m
!i atunci:
( )
,
_
0
2
2
0
i
i
i
b
i
b
m
a a a
( ) ( )
[ ]
1
]
1
0
2
0
2
mod mod mod
i
i
i
i
b b
m
n a n a n a
Acum, se poate scrie algoritmul pentru calculul lui a
m
mod n ilustrat n
figura 4.7.
c=0;d=1;
for i=k downto 0
do c=2c;
d=(dd) mod n;
if b
i
=1
then c=c+1;
d=(da) mod n;
return d;
Figura 4.7. Algoritmul pentru calcularea a
b
mod n
4.2.2.2. Generarea cheilor
naintea folosirii sistemului cu chei publice fiecare participant trebuie s$
genereze o pereche de chei. Acest lucru implic$ urm$toarele opera#ii:
! Determinarea celor dou$ numere prime p,q;
Tehnici de securizare a datelor !i programelor curs "2 5 6 Tehnici de securizare a datelor !i programelor curs "2
! Alegerea lui e sau d !i calcularea celuilalt.
n primul rnd s$ consider$m alegerea lui p !i q. Deoarece valoarea lui
n=pq va fi cunoscut$ oric$rui poten#ial oponent, trebuie prevenit$ descoperirea lui p
!i q, prin metode exhaustive, numerele prime fiind alese dintr-un set suficient de
mare. Pe de alt$ parte metoda folosit$ pentru g$sirea acestor numere trebuie s$ fie
destul de eficient$. n prezent nu exist$ tehnici pentru a produce numere prime
aleatoare destul de mari. Procedura folosit$ n general este alegerea unui num$r
impar aleator de ordinul de m$rime dorit, care se testeaz$ dac$ este num$r prim.
Dac$ nu este atunci procedura se repet$ pn$ se g$se!te un num$r prim. O varietate
mare de teste au fost dezvoltate pentru a preciza dac$ un num$r este prim,
majoritatea fiind probabilistice. Aceste teste vor determina probabilitatea ca un
num$r s$ fie prim. Unul dintre cei mai populari algoritmi folosi#i este algoritmul
Miller-Rabin. Testarea unui ntreg n se face prin efectuarea unor calcule care
implic$ n !i un ntreg a care este ales aleator. Dac$ n nu trece testul atunci el nu este
prim. Dac$ n trece testul atunci el poate fi prim sau neprim. n continuare se mai
efectueaz$ nc$ o serie de teste pentru diferite valori ale lui a. Dac$ n trece toate
testele atunci se poate afirma c$ n este prim. Pe scurt, procedura alegerii num$rului
prim se poate descrie n patru pa!i dup$ cum urmeaz$:
". Se alege un num$r aleator n impar.
2. Se alege un ntreg aleator a < n.
3. Se efectueaz$ testul probabilistic pentru a determina dac$ n este prim
folosind un algoritm cum ar fi algoritmul Miller-Rabin.
4. Dac$ n a trecut un num$r suficient de teste atunci se accept$ n, dac$ nu
se revine la pasul 2.
Dup$ alegerea numerelor prime p !i q procesul de generare a cheii se
termin$ prin alegerea lui e n func#ie de care se calculeaz$ d, sau invers (se alege d
!i se calculeaz$ e). Considernd prima posibilitate num$rul e trebuie ales astfel
nct cmmdc ((n), e) = ", dup$ care se calculeaz$ d, astfel nct de mod (n) = ".
Pentru determinarea celui mai mare divizor comun se poate folosi algoritmul lui
Euclid.
4.2.3. Securitatea algoritmului RSA
Exist$ trei forme de atac asupra algoritmului RSA:
". For#$ brut$: implic$ ncercarea tuturor cheilor posibile.
2. Atacuri matematice: Exist$ multe abord$ri, dar toate se reduc la
descompunerea unui produs n factori primi.
3. Atacuri temporizate: Aceste atacuri depind de timpul necesar
decript$rii unui mesaj criptat.
Aceste forme de atac vor fi dezb$tute pe rnd, n cele ce urmeaz$:
". Atacurile prin for#$ brut$ (exhaustive) se combat exact n acela!i fel ca !i pentru
orice alt sistem criptografic, prin folosirea unei chei suficient de mari. Avnd n
vedere complexitatea opera#iilor folosite pentru criptare !i decriptare, cheia trebuie
s$ fie de o dimensiune rezonabil$ pentru a nu ncetini prea mult procesul de
criptare-decriptare.
2. n cazul algoritmului RSA s-a depus un efort semnificativ pentru a rezolva
problema factorilor primi, aceasta fiind echivalent$ cu descompunerea lui n n doi
factori primi. Determinarea lui (n) reprezint$ exact acela!i lucru. Pentru un n
mare problema este destul de grea, dar nu pe ct pare. n "977 cei trei inventatori a
lui RSA au publicat ntr-o revist$ !tiin#ific$ american$ un mesaj criptat, oferind
"00$ celui care reu!e!te s$ decripteze mesajul. Cei trei au prezis c$ mesajul nu va fi
decriptat cel pu#in pentru 40 de cvadrilioane de ani. ns$ n aprilie "994, un grup de
pe Internet a reu!it s$ decripteze mesajul dup$ doar opt luni de lucru, mesajul fiind
criptat cu o cheie de "29 cifre zecimale. ntre timp RSA Laboratories a lansat
provoc$ri pentru decriptarea unor mesaje ce foloseau chei de diferite dimensiuni.
Ultima provocare este RSA-"30, care folose!te o cheie de "30 cifre zecimale.
Tabelul urm$tor prezint$ rezultatele ob#inute. Nivelul efortului depus este m$surat
n MIPS-years (adic$ pentru un procesor de un milion de instruc#iuni pe secund$
care ruleaz$ timp de un an, adic$ aproximativ 3 x "0
"3
instruc#iuni executate).
Nr. de cifre
zecimale
Nr. aproximativ
de bi#i
Data
decript!rii
MIPS-years
"00 332 Aprilie "99" 7
""0 365 Aprilie "992 75
"20 398 Iunie "993 830
"29 428 Aprilie "994 5000
"30 43" Aprilie "996 500
Pentru a mpiedica n viitor atacurile de acest gen s-a convenit folosirea
unei chei de 2048 bi#i pentru algoritmul RSA.
3. Un ultim tip de atac folosit pentru RSA este atacul temporizat. Paul Kocher a
demonstrat n "996 c$ se poate determina cheia privat$ m$surnd timpul necesar
pentru decriptarea mesajelor. Aceste atacuri nu sunt aplicabile doar algoritmului
RSA ci tuturor sistemelor cu chei publice. Acest tip de atac este alarmant din dou$
motive: abordeaz$ problema dintr-un punct de vedere total diferit !i este bazat doar
pe mesajul criptat. Un astfel de atac este similar cu ghicirea cifrului unui seif,
observnd ct timp necesit$ introducerea acestuia. Pentru a combate acest tip de
atac se pot lua urm$toarele contram$suri:
! Timpul necesar ridic$rii la putere constant. Asigurarea unui timp
constant pentru fiecare opera#ie de ridicare la putere. Acest lucru
reduce din performan#a algoritmului.
! ntrziere aleatoare: se poate ob#ine o performan#$ mai bun$ prin
ad$ugarea unor ntrzieri aleatoare fiec$rei opera#ii.
! Dezorientarea: multiplicarea mesajului criptat cu un num$r aleator
naintea ridic$rii la putere. RSA Data Security implementeaz$ aceast$
tr$s$tur$ n multe din produsele sale.
2 Tehnici de securizare a datelor !i programelor curs "3
CURS NR.13
4.3. Administrarea cheilor
Exist# dou# aspecte distincte legate de distribu$ia cheilor n sistemele
criptografice cu chei publice:
! Distribu$ia cheilor publice.
! Folosirea cript#rii cu chei publice pentru a distribui chei secrete.
4.3.1. Distribu!ia cheilor publice
n literatura de specialitate se prezint# o serie de propuneri pentru
distribuirea cheilor publice. Aceste propuneri se pot grupa n felul urm#tor:
! Anun$ public.
! List# disponibil# publicului.
! Autoritate pentru distribu$ia cheilor publice.
! Certificate pentru chei publice.
4.3.1.1. Anun!ul public al cheilor
Esen$a cript#rii cu chei publice este c# una dintre cele dou# chei de criptare
nu este secret# (este public#). Astfel, dac# exist# un algoritm acceptat pe scar# larg#
folosit de foarte mul$i utilizatori, cum ar fi RSA, orice participant poate trimite
propria cheie public# unui alt participant sau poate trimite cheia unei comunit#$i
mai mari. De exemplu utilizatorii PGP (Pretty Good Privacy) care folosesc RSA
pot ad#uga cheia lor public# fiec#rui mesaj trimis n forumuri publice, cum ar fi
grupurile de discu$ii de pe USENET sau ata!at fiec#rui e-mail.
Cu toate c# aceast# metod# convine multor utilizatori fiind foarte practic#,
ea are un dezavantaj mare. Oricine poate falsifica un anun$ public. Un utilizator
care pretinde c# este utilizatorul A poate trimite cheia public# unui participant sau
poate transmite mesajul unei comunit#$i mult mai mari. Pn# realul utilizator A
descoper# falsul !i anun$# restul participan$ilor, falsificatorul poate decripta toate
mesajele adresate lui A !i poate folosi cheia fals# pentru autentificare.
KUa
KUa
KUa
KUa
KUb
KUb
KUb
KUb
A B
Figura 4.8. Distribu$ia direct#, necontrolat# a cheilor publice
4.3.1.2. List" disponibil" publicului
Un grad mai nalt de securitate poate fi ob$inut prin men$inerea unei liste
dinamice a cheilor, disponibil# publicului. Men$inerea !i distribuirea cheilor publice
este responsabilitatea unei p#r$i de ncredere sau a unei organiza$ii. O astfel de
schem# include urm#toarele elemente:
". Autoritatea men$ine lista cu structura [nume, cheie public#] pentru
fiecare participant.
2. Fiecare participant se nregistreaz# n list# prin intermediul autorit#$ii.
nregistrarea se face personal sau printr-o form# de comunicare sigur#
!i autentificat#.
3. Un participant !i poate schimba cheia oricnd, fie c# acest lucru se
dore!te datorit# folosirii anterioare a cheii pentru un volum prea mare
de date, fie din cauza divulg#rii ntr-un fel sau altul a cheii private
aferente.
4. Periodic, autoritatea distribuie ntreaga list# sau actualiz#ri ale acesteia.
De exemplu se poate tip#ri ntreaga list#, ea fiind asem#n#toare unei
c#r$i de telefon.
5. Participan$ii pot de asemenea s# acceseze lista pe cale electronic#.
Pentru acest lucru, o form# de comunicare sigur# !i autentificat# este
obligatorie ntre autoritate !i participan$i.
Aceast# schem# ofer# siguran$# mai mare dect anun$ul public al cheilor,
dar totu!i are vulnerabilit#$i. Dac# oponentul ob$ine cheia privat# a autorit#$ii, el
poate contraface cheile publice sau poate decripta mesajele trimise oric#rui
participant.
Tehnici de securizare a datelor !i programelor curs "3 3 4 Tehnici de securizare a datelor !i programelor curs "3
Index pt.
chei publice
KUa KUb
A B
Figura 4.9. Distribuirea cheilor printr-o list# accesibil# publicului
4.3.1.3. Autoritate pentru distribu!ia cheilor publice
(1) Request || Time
1
(2) E
KRauth
[ KUb || Request || Time
1
]
(3) E
KUb
[ID
A
|| N
1
]
(7) E
KUb
[ N
2
]
(6) E
KUa
[N
1
|| N
2
]
(4) Request || Time
2
(5) E
KRauth
[ KUa || Request || Time
2
]
A
Chei publice
Autoritate
B
Figura 4.10 . Distribu$ia cheilor folosind o autoritate pentru chei publice
Se poate ob$ine o securitate mai puternic# pentru distribu$ia cheilor publice
printr-un control mai restrns al distribu$iei acestora. Un scenariu tipic este ilustrat
n figura 4."0. Ca !i nainte o autoritate central# men$ine dinamic cheile tuturor
participan$ilor. n plus fiecare participant cunoa!te cheia public# a autorit#$ii, care
va fi folosit# pentru autentificarea p#r$ilor participante. Pentru a primi o cheie se
urmeaz# pa!ii descri!i n continuare:
". A trimite un mesaj datat autorit#$ii con$innd o cerere pentru cheia
public# curent# a lui B.
2. Autoritatea r#spunde cu un mesaj criptat cu cheia sa privat#, mesaj pe
care A l poate decripta fiind n posesia cheii publice a autorit#$ii.
Astfel A poate fi sigur c# mesajul primit este autentic, mesajul fiind
criptat cu cheia privat# a autorit#$ii KR
auth
. Mesajul include
urm#toarele:
! Cheia public# a lui B, KU
b.
! Cererea original# pentru ca A s# determine dac# aceasta nu a
fost modificat#.
! Datarea mesajului, astfel A poate determina dac# mesajul
primit nu este un mesaj vechi de la autoritate, con$innd o
cheie diferit# de cheia curent# a lui B.
3. A salveaz# cheia public# a lui B !i i transmite acestuia un mesaj care
con$ine un identificator !i un anun$, care este folosit pentru
identificarea tranzac$iei.
4. B recep$ioneaz# cheia public# a lui A de la autoritate n aceea!i
manier# cum A a recep$ionat cheia lui B.
Aceast# metod# de distribuire a cheilor nu este adecvat# dac# cheile se
schimb# frecvent, deoarece folose!te un num#r mare de pa!i.
4.3.1.4. Certificate pentru chei publice
O alternativ# pentru distribu$ia cheilor este folosirea unor certificate
folosite de participan$i pentru distribu$ia cheilor f#r# a contacta autoritatea care
distribuie cheile publice. Fiecare certificat con$ine o cheie public#, precum !i alte
informa$ii necesare pentru autentificarea lui. Participan$ii schimb# cheile prin
transmiterea certificatelor, fiecare participant avnd posibilitatea de a verifica
autenticitatea certificatului prin intermediul autorit#$ii de distribuire a cheilor. Acest
model de distribuire a cheilor trebuie s# corespund# urm#toarelor cerin$e:
". Orice participant poate citi certificatul pentru a determina numele !i
cheia public# a proprietarului.
2. Orice participant poate verifica dac# certificatul este original, fiind
eliberat de autoritatea pentru chei publice.
3. Numai autoritatea pentru chei publice poate elibera sau actualiza
certificatele.
4. Orice participant poate verifica dac# certificatul este actual.
Figura 4."" ilustreaz# procesul de distribu$ie a cheilor prin certificate.
Participan$ii contacteaz# autoritatea pentru chei publice cernd eliberarea unui
Tehnici de securizare a datelor !i programelor curs "3 5 6 Tehnici de securizare a datelor !i programelor curs "3
certificat prin transmiterea cheii publice. Pentru un participant A autoritatea
elibereaz# certificatul sub forma:
C
A
= E
KRauth
[T, ID
A
, KU
a
]
unde KR
auth
este cheia privat# a autorit#$ii. n continuare A poate transmite
certificatul altor participan$i, care citesc !i verific# certificatul dup# cum urmeaz#:
D
KUauth
[C
A
] = D
KUauth
[E
KRauth
[T, ID
A
, KU
a
]] = (T, ID
A
, KU
a
)
unde ID
A
este numele participantului !i T este data la care a fost eliberat
certificatul.
Destinatarul decripteaz# mesajul cu cheia public# a autorit#$ii, totodat#
fiind verificat# !i autenticitatea certificatului.
CA = E
KRauth
[ Time
1
, ID
A
, KUa ]
(1) CA
(2) CB
CB = E
KRauth
[ Time
2
, ID
B
, KUb ]
KUa
KUb
A B
Certificate
Autoritate
pentru
Figura 4.11 . Distribuirea cheilor folosind certificate
4.3.2. Distribu!ia cheilor secrete cu ajutorul cheilor publice
Odat# ce cheile publice au fost distribuite, se poate comunica n siguran$#.
Totu!i mul$i utilizatori nu vor dori s# foloseasc# exclusiv criptarea cu chei publice
datorit# vitezei reduse la criptare/decriptare. Astfel criptarea cu chei publice este
v#zut# mai mult ca un vehicul pentru distribu$ia cheilor secrete folosite n criptarea
conven$ional#.
Aceast# metod# este ilustrat# n figura de mai jos fiind necesari urm#torii
pa!i:
". A genereaz# o pereche de chei [KU
a
, KR
a
] !i transmite un mesaj lui B
constnd din cheia public# KU
a
!i un identificator ID
A.
2. B genereaz# o cheie secret# K
S
!i o transmite lui A criptat# cu cheia
public# a lui A.
3. A decripteaz# mesajul D
KRa
[E
KUa
[K
S
]] pentru a ob$ine cheia secret#
K
S
. Deoarece numai A poate decripta mesajul, A !i B vor fi singurii
cunosc#tori a cheii secrete K
S.
Dup# ce cheia K
S
a fost livrat# n siguran$# A !i B pot comunica folosind
criptarea conven$ional#. Aceast# metod# de distribuire a cheii secrete folosit# n
criptarea conven$ional# este foarte atractiv# deoarece riscul compromiterii cheii
este minim.
Totu!i !i aceast# metod# este vulnerabil# prin atacuri active. Dac# un
oponent E are control asupra canalului de comunica$ie, atunci el poate compromite
transmisia ntre A !i B n urm#torul mod:
". A genereaz# o pereche de chei [KU
a
, KR
a
] !i transmite un mesaj lui B
constnd din cheia public# KU
a
!i identificatorul ID
A.
2. E intercepteaz# mesajul, creeaz# propria pereche de chei [KU
e
, KR
e
] !i
transmite un mesaj lui B ce const# din KU
e
!i ID
A
.
3. B genereaz# cheia secret# K
S
!i transmite E
KUe
[K
S
].
4. E intercepteaz# mesajul !i afl# cheia secret# K
S
prin decriptarea
mesajului D
KRe
[E
KUe
[K
S
]].
5. E transmite E
KUa
[K
S
] lui A.
Rezultatul este c# ambii participan$i A !i B au intrat n posesia cheii
secrete, ne!tiind c# E cunoa!te !i el cheia. Astfel E poate decripta toate mesajele
criptate cu acea cheie secret#.
(1) KU
a
|| ID
A
(2) E
KUa
[K
s
]
A B
Figura 4.12. Distribuirea cheilor secrete cu ajutorul cheilor publice
4.4. Algoritmul Diffie-Hellman
Primul algoritm publicat care folosea chei publice a fost acela dezvoltat de
W. Diffie !i M.Hellman definind astfel criptografia cu chei publice. Algoritmul este
numit Diffie-Hellman key exchange ("976) !i este folosit n numeroase produse
comerciale.
Scopul algoritmului este ca doi utilizatori s# poat# schimba o cheie secret#
n siguran$#, algoritmul fiind limitat la schimbul cheilor secrete.
Tehnici de securizare a datelor !i programelor curs "3 7 8 Tehnici de securizare a datelor !i programelor curs "3
Acest algoritm se bazeaz# pe dificultatea calcul#rii logaritmilor discre$i,
ace!tia fiind defini$i n urm#torul fel. n primul rnd de define!te a - r#d#cina
primitiv# a unui num#r prim p, ca fiind un num#r a c#rui puteri genereaz# to$i
ntregii de la " la p-" prin aplicarea operatiei (mod p). Adic# dac# a este r#d#cina
primitiv# a unui num#r p atunci numerele:
a mod p, a
2
mod p, , a
p-"
mod p
sunt distincte !i constau din ntregii de la " la p-" ntr-o anumit# permutare.
Pentru un ntreg b !i o r#d#cin# primitiv# a a unui num#r p se poate g#si un
unic exponent astfel nct:
b = a
i
mod p , unde 0i (p-")
Exponentul i se calculeaz# prin logaritm discret (prezentat n literatura de
specialitate ca fiind deosebit de dificil de determinat) !i este notat ind
a,p
(b).
Elemente Publice Globale
q numar prim
< q si radacina primitiva lui q
Generarea cheii utilizatorului A
Alege X
A
X
A
< q
Calculeaza Y
A
Y
A
=
X
A
mod q
Generarea cheii utilizatorului B
Alege X
B
X
B
< q
Calculeaza Y
B
Y
B
=
X
B
mod q
Generarea cheii secrete de utilizatorul A
K = (Y
B
)
X
A
mod q
Generarea cheii secrete de utilizatorul B
K = (Y
A
)
X
B
mod q
Figura 4.13. Algoritmul Diffie-Hellman
Schimbul de chei tip Diffie-Hellman este rezumat n figura 4."3. Aceast#
schem# necesit# dou# numere publice, un num#r prim q !i un ntreg care este
r#d#cina primitiv# a lui q. S# presupunem c# utilizatorul A dore!te s# transmit# o
cheie secret# utilizatorului B. Utilizatorul A alege un ntreg aleator X
A
< q !i
calculeaz# Y
A
=
XA
mod q . Similar utilizatorul B alege un ntreg aleator X
B
< q !i
calculeaz# Y
B
=
XB
mod q. Fiecare parte p#streaz# secret# valoarea lui X !i face
public# valoarea lui Y. Utilizatorul A calculeaz# cheia K = (Y
B
)
XA
mod q, iar
utilizatorul B calculeaz# K = (Y
A
)
XB
mod q. Aceste dou# calcule produc rezultate
identice.
K = (Y
B
)
XA
mod q
= (
XB
mod q)
XA
mod q
= (
XB
)
XA
mod q
=
XBXA
mod q
= (
XA
)
XB
mod q
= (
XA
mod q)
XB
mod q
= (Y
A
)
XB
mod q
Astfel cele dou# p#r$i au schimbat cheia secret#. Deoarece X
A
!i X
B
sunt
private, un oponent are la dispozi$ie doar elementele q, a, Y
A
!i Y
B
, oponentul fiind
for$at s# calculeze logaritmul discret pentru a afla cheia. De exemplu atacnd cheia
secret# a lui B, oponentul trebuie s# calculeze urm#toarea expresie:
X
B
= ind
a,q
(Y
B
)
Securitatea algoritmului Diffie-Hellman const# n dificultatea calcul#rii
logaritmilor discre$i. Calculul acestor logaritmi pentru numere prime mari este
considerat imposibil.