-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathcrypta_attacks.theory.txt
218 lines (206 loc) · 11.6 KB
/
crypta_attacks.theory.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
┏━━━━━━━━━━━━━━━━━━━━┓
┃ CRYPTA_ATTACKS ┃
┗━━━━━━━━━━━━━━━━━━━━┛
Attaques crypto autres (seulement sur certains algos de chiffrement) :
- man-in-the-middle (MitM) / impersonation / Janus attack :
- Attaque d'un Mallory modifiant message entre Alice et Bob
- contre-mesure :
- checker intégrité et message authentication
- analyse de la latence entre messages
- le ciphertext substitué ne doit pas être suspect
- doit attaquer la mutual authentication
- space-time tradeoff attack : cf plus bas
- PRNG attack (random number generator) : sur algo utilisant un PRNG, que l'on compromet en :
- contrôlant output du RNG (via trojan, etc.)
- contre-mesure :
- ne pas pouvoir être contrôlé
- prédisant la seed. Si entropie faible (par exemple démarrage), encore plus facile.
- contre-mesure :
- ne pas permettre de connaître les bits qui suivent
- ne pas permettre de connaître ceux qui précèdent
- replay attack :
- sniffer ciphertext, pour le réutiliser plus tard
- ex :
- sniffer digest de password, pour l'envoyer plus tard au serveur
- (hors crypto) sniffer IP pour faire de l'IP spoofing
- sous-types :
- pass-the-hash attack : contre password LM (Windows NT) ou NTLM (Windows XP)
- contre-mesure :
- faire en sorte que ciphertext soit valide qu'une seule fois (One-time password, OTP)
- ex :
- à chaque message, Bob envoie à Alice un IV
- Alice utilise l'IV pour chiffrer son plaintext
- si chiffrement est un hash, IV peut être utilisé comme une clef de MAC ou salt de hash
- autre ex : OTP via hash chain
- known-key attack :
- devine nouvelles clefs grâce à connaissance d'anciennes clefs
- contre-mesure : clef aléatoire
Brute-force attack / exhaustive key search :
- essai de toutes les permutations possibles de la clé.
- doit déterminer si plaintext est plausible à chaque essai. Donc contre-mesure :
- difficilité de déterminer plausibilité du plaintext, via obfuscation ou homonymies
- algo avec ambiguité maximale
- réussit toujours si pas ambiguité du ciphertext
- dépend de la longueur de la clef (et des valeurs possibles, par exemple tout octet, ou seulement [:alpha:])
- comme capacité de calcul est multiplié par x tous les ans, si n années sont requises aujourd'hui, il faudra en fait n.log(x) années.
- forward search :
- brute-force sur ciphertext chiffré avec clef privée, en comparant chiffrement avec clef publique + tout message probable
avec ciphertext
- contre-mesure :
- key length
- key stretching
- limiter nombre d'essais possibles (si pas contrôle du decryption oracle)
Space-time/time-memory tradeoff attack :
- deux types :
- ou précalculé :
- construire une database de tous les c possibles pour tout m de M et tout e de K
- but : pouvoir ensuite cracker instantanément tout chiffrement avec M et K
- revient à précalculer un bruteforce
- ou adaptive :
- conserver résultats intermédiaire d'un bruteforce pour attaque adaptive
- pour un c donné, et non pour tout c
- conditions :
- M et K doivent avoir une taille donnée.
- ex : stream ciphers, ne peut marcher que sur une taille maximale choisie
- précalculer ensemble des permutations possibles de M + K doit être feasible
- donc souvent plus sur les algos où :
- pas de K -> les non-keyed hash functions
- M a une taille maximale -> par ex., password Windows
- contre-mesure : salts
- ex :
- precomputed lookup table :
- contre les hash functions, precomputed
- pour un M donné et une fonction hash H donnée, précalcule l'ensemble des hashs H(m)
- utilise ensuite la lookup table pour trouver plaintext de tout hash
- M peut être ensemble des M possibles, ou seulement probable (comme dictionary attack, mais precomputed)
- precomputed hash chains :
- différent des "hash chains"
- comme precomputed lookup table, sauf que :
- on utilise une seconde fonction R, la reduction fonction
- une chaîne : on part d'un m₁, calcule m₂ == R(H(m₁)), ... mₙ == R(H(mⁿ⁻¹)), et ne stocke que m₁ et mₙ
- on stocke l'ensemble des chaînes couvrant P
- pour trouver le plaintext m d'un digest d :
- identifier les chaines se terminant par R(d)
- calculer l'ensemble de la chaîne jusqu'à tomber sur d, auquel cas le m précédent est le plaintext
- but : besoin de n/2 moins de mémoire que precomputed lookup table, au prix d'un léger temps de crackage plus long,
ainsi que quelques problèmes, ne réduisant pas capacité de l'attaque, mais son besoin en calcul et espace :
- false alarm : si collision entre deux R(d) au même endroit, les chaînes se termineront par le même mⁿ. Par
conséquent, la chaîne se terminera peut être par un mⁿ probable pour un digest donné, mais ne contiendra pas ce
digest : elle devra donc être ignorée (false positive)
- collisions : collision entre deux H(m) :
- au même index : possible de détecter car même mⁿ final et essayer d'optimiser
- à index différent : impossible de détecter
- rainbow table :
- comme precomputed hash chains, sauf que :
- utilise non une seule R, mais une suite de R₁,...,Rₙ
- ainsi réduit incidences des collisions à index différents
- implique également que pour retrouver le plaintext m, il faut essayer chaînes avec indexs différents : se terminant par Rₙ(m), puis Rₙ(H(Rⁿ⁻¹(m))), etc.
- implique un nouveau type de false alarms : lorsque essai pour un Rₙ donné devine mal le bon index à choisir
- réduction fonction :
- peut simplement réutiliser le digest (pas de transformation)
- si P réduit aux passwords probables, comme dictionary attacks, alors challenges pour couvrir entiereté de P,
- birthday attack :
- contre les hash functions, adaptive
- pour trouver une collision : sauvegarder collision précédentes
- meet-in-the-middle attack, adaptive :
- contre chiffrement utilisant deux fois même algo, mais avec clef différente : Eₑ₂(Eₑ₁(m)) <- c
- plutôt que de doubler les bits of security (2ⁿ->2²ⁿ), cela ne rajoute qu'un bit of security (2ⁿ->2^(n+1), soit deux
fois plus long)
- principe :
- pour un c donné, construire une table associative de tous les m pour Dᵈ₂(c)
- faire même chose pour tous les c pour Eₑ₁(m), mais ne conserver que si présent dans première table associative
- la deuxième table associative a alors les candidats possibles
- utilisé notamment contre double DES (bits of security == simple DES) et triple DES (bits of security == deux fois DES
et non trois)
Differential cryptanalysis/attack :
- CPA (mais des extensions KPA et CTO sont possibles)
- demande de nombreux plaintexts (souvent impossible real-life)
- analyse statistique entre changement d'input et implication dans changement de l'output (teste diffusion du cipher)
- cible surtout les block ciphers (ceux d'aujourd'hui résistent à ces attaques)
- variantes :
- impossibile differential attack
- variante : miss-in-the-middle attack
- boomerang/rectangle attack
Integral/square attack :
- proche mais différent de differential attack
Partitioning attack :
- CPA (mais des extensions KPA et CTO sont possibles)
- demande de nombreux plaintexts (souvent impossible real-life)
- cible surtout les block ciphers (ceux d'aujourd'hui résistent à ces attaques)
- variantes :
- linear attack
- mod n attack
Slide attack :
- CPA sur product cipher, attaquant le key schedule
- il s'agit de réduire le product cipher à une fonction F résumant un ou deux rounds, et de trouver m₂ et c₂, tel que
F(m₂) = c₂, F(m₁) = c₁, F(m₁) = m₂ et F(c₁) = c₂
- marche sur les product ciphers avec des key schedule simplistes, par exemple réutilisant les mêmes round keys
Related-key attacks :
- attaque sur product cipher, attaquant le key schedule
- utilise relation entre les subkeys (dont identité)
- contre-mesure : diffusion entre master key et subkeys entre elles
XSL attack (eXtended Sparse Linearization attack) :
- attaque sur block cipher, notamment AES
- réduit algo à un système d'équation quadratiques simultanément, puis résout ces équations à l'aide d'un ou deux plaintexts
- contrairement à linear ou differential cryptanalysis, demande peu de plaintexts
- réduit bits of security d'AES, mais a un trop fort work factor
Side-channel attack:
- get information about key of plaintext from the side effects produced by an algorithm
- due to algorithm's implementation, not design
- attacker must:
- be physically close to machine for physical side effect
- have access to algorithm as a black box for software side effect
- types:
- cold boot attack:
- memory dump after a shutdown
- timing attack:
- guessing input from duration spent on an algorithm
- contermeasures:
- "constant-time":
- make duration of algorithm same with any input
- including fixed sleeps for specific inputs that are faster
- random sleeps
- lower time resolution
- power monitoring attack:
- also called "power analysis"
- similar to timing attack but using power consumption
- electromagnetic attack:
- also called "emission security" (EMSEC)
- similar to timing attack but using electromagnetic waves
- US certification of countermeasures: TEMPEST
- acoustic cryptanalysis:
- similar to timing attack but using sounds of components or keyboard (each key having its own sound)
- countermeasures: adding noise
- differential fault
- also called "fault-based analysis"
- introducing faults:
- temperature increase
- overclocking
- voltage increase
- magnetic fields
Attaques non cryptanalystiques :
- social engineering :
- manipuler individus en abusant de sa confiance pour qu'il divulgue une info confidentielle
- types :
- pretexting :
- utiliser fausse situation pour extraire des infos à victime
- peut ensuite utiliser ces infos pour nouveau prétexte
- souvent par téléphone ou électronique
- sous-type :
- quid pro quo : appeler plusieurs entreprises au hasard en prétendant être assistance informatique par téléphone,
jusqu'à tomber sur un en attendant une, et demander à victime d'entrer commandes
- phishing
- sous-type : vishing (phone phishing)
- baiting :
- laisser une clef USB, etc. à un endroit pour que victime soit tentée d'insérer sur son PC
- tailgating :
- suivre une personne légitime pour accéder à zone restricted (personne légitime tenant par exemple la porte)
- black-bag cryptanalysis :
- cambriolage
- lire clef privée en installant keylogger/trojan
- keylogger via analyse des ondes electro-magnétiques à moins de 20 mètres
- regarder par-dessus l'épaule (shoulder surfing)
- rubber-hose cryptanalysis :
- torture
- pression
- password biométrique rend encore plus sanglant rubber-hose crypta