|
@@ -152,18 +152,19 @@ Pour optimiser le chiffrement on souhaiterait
|
152
|
152
|
<img src="./Images/bloccipher.png">
|
153
|
153
|
</p>
|
154
|
154
|
|
155
|
|
-On considère un chiffrement à bloc réussi si
|
|
155
|
+On considère un chiffrement à bloc réussi si
|
156
|
156
|
|
157
|
157
|
- Les blocs sont assimilables à des permutations
|
158
|
158
|
- Un n-bit block chiffré est indistinguable d'un random n-bit block
|
159
|
159
|
|
160
|
|
-En pratique, pour valider ce type de chiffrement, on se base sur les propriétés de Shannon :
|
|
160
|
+En pratique, pour valider ce type de chiffrement, on se base sur les propriétés de Shannon :
|
|
161
|
+
|
161
|
162
|
- **Diffusion** : Si 1 bit change dans le bloc d'origine, il faut que statistiquement, plus de la moitié du bloc chiffré soit impactée
|
162
|
163
|
- **Confusion** : 1 bit du bloc chiffré doit être lié à plusieurs bits de la clé
|
163
|
164
|
|
164
|
165
|
## Réseau de Substitutions/Permutations
|
165
|
166
|
|
166
|
|
-Une autre techinque de chiffrement consiste à faier passer le message dans une chaine de bloc de substitutions permutations :
|
|
167
|
+Une autre techinque de chiffrement consiste à faier passer le message dans une chaine de bloc de substitutions permutations :
|
167
|
168
|
|
168
|
169
|
<p align="center">
|
169
|
170
|
<img src="./Images/spnet.png">
|
|
@@ -184,13 +185,13 @@ on a donc ici $nb_{itération de recherches} = 2^{security level} = 2^{taille de
|
184
|
185
|
|
185
|
186
|
On parle de S-Box pour les substitions et P-Box ou D-Box pour Permutation ( Ou diffusion).
|
186
|
187
|
|
187
|
|
-## S-Box
|
|
188
|
+## S-Box
|
188
|
189
|
|
189
|
|
-Substitue un symbole pour un autre. Cela contribue à la confusion puisque ça rend la sortie inintelligible. D'une pière deux coups, cela accentue également la non linéarité de la sortie.
|
|
190
|
+Substitue un symbole pour un autre. Cela contribue à la confusion puisque ça rend la sortie inintelligible. D'une pière deux coups, cela accentue également la non linéarité de la sortie.
|
190
|
191
|
|
191
|
|
-## P-Box ou D-Box
|
|
192
|
+## P-Box ou D-Box
|
192
|
193
|
|
193
|
|
-Echange deux symboles les uns par rapport aux autres. Cela contribue à la diffusion puisque cela déplace les symboles d'un endroit à l'autre. Par contre cela n'a aucun effet sur la linéarité de la sortie.
|
|
194
|
+Echange deux symboles les uns par rapport aux autres. Cela contribue à la diffusion puisque cela déplace les symboles d'un endroit à l'autre. Par contre cela n'a aucun effet sur la linéarité de la sortie.
|
194
|
195
|
|
195
|
196
|
# AES
|
196
|
197
|
|
|
@@ -202,21 +203,24 @@ Nous sommes ici avec un chiffrement symétrique.
|
202
|
203
|
<img src="./Images/AES_round1.png">
|
203
|
204
|
</p>
|
204
|
205
|
|
205
|
|
-On est sur des blocs de 128 bits en général.
|
|
206
|
+On est sur des blocs de 128 bits en général.
|
206
|
207
|
|
207
|
208
|
L'état interne est composé d'une matrice d'octets de 4x4. 4 operations sont exécutées sur l'état interne à chacun des rounds.
|
208
|
209
|
|
209
|
210
|
1 - AddRoundKey
|
|
211
|
+
|
210
|
212
|
- xor between state and round-key.
|
211
|
213
|
- if message independant from key, and key uniform, then the new state
|
212
|
214
|
- looks uniform.
|
213
|
215
|
|
214
|
216
|
2 - SubBytes
|
|
217
|
+
|
215
|
218
|
- Non-linearity: Minimization of input-output correlation.
|
216
|
219
|
- Complexity: Complex expression in GF(28).
|
217
|
220
|
- Simple implementation: Look-up table (and must be since litteral expression complex).
|
218
|
221
|
|
219
|
222
|
3 - ShiftRows
|
|
223
|
+
|
220
|
224
|
- Variable byte rotation of each line depending on line index.
|
221
|
225
|
- First line: no rotation.
|
222
|
226
|
- Second row: 1 byte rotation.
|
|
@@ -224,6 +228,7 @@ L'état interne est composé d'une matrice d'octets de 4x4. 4 operations sont ex
|
224
|
228
|
- Fourth row: 3 bytes rotation.
|
225
|
229
|
|
226
|
230
|
4 - MixColumns
|
|
231
|
+
|
227
|
232
|
- Column per column scrambling of coefficients. Equivalent to multiplying each column by following matrix:
|
228
|
233
|
|
229
|
234
|
$\begin{pmatrix}
|
|
@@ -244,17 +249,19 @@ $\begin{pmatrix}
|
244
|
249
|
The message is split into blocks matching the size of Block-Cipher’s block
|
245
|
250
|
length. Each block is encrypted with the same key.
|
246
|
251
|
Pros:
|
|
252
|
+
|
247
|
253
|
- Simplest construction.
|
248
|
254
|
- Destination can decrypt a specific block without extra computations.
|
249
|
255
|
- Vulnerabilities?
|
250
|
256
|
|
251
|
257
|
# Comment évaluer la sécurité ?
|
252
|
258
|
|
253
|
|
-Propriétés de Sécurité :
|
|
259
|
+Propriétés de Sécurité :
|
254
|
260
|
|
255
|
261
|
Sans information sur la clé, aucune info du chiffré n'informe d'aucune info du clair. : Sécurité Sémantique
|
256
|
262
|
|
257
|
263
|
Adversary capabilities are defined as indistinguishability games:
|
|
264
|
+
|
258
|
265
|
- IND-KPA (known plaintext-attack): adversary sees pairs $(m_i
|
259
|
266
|
, Enc(m_i))$.
|
260
|
267
|
- IND-CPA (chosen plaintext-attack): adversary SELECTS messages mi
|
|
@@ -262,12 +269,14 @@ and ASKS an entity to encrypt $m_i$
|
262
|
269
|
|
263
|
270
|
- IND-CCA: More information during asymmetric encryption lesson.
|
264
|
271
|
|
265
|
|
-## IND-CPA
|
|
272
|
+## IND-CPA
|
|
273
|
+
|
266
|
274
|
<p align="center">
|
267
|
275
|
<img src="./Images/IND-CPA.png">
|
268
|
276
|
</p>
|
269
|
277
|
|
270
|
278
|
Win condition
|
|
279
|
+
|
271
|
280
|
- L'adversaire gagne si : $Pr[b = b'] > 1/2$.
|
272
|
281
|
- Si Pr[b = b'] = 1/2, alors l'adversaire peut seulement deviner au hasard quel message a été chiffré.
|
273
|
282
|
- Advantage: $ACPA = |Pr[b = b'] − 1/2| = \in$
|
|
@@ -280,38 +289,42 @@ Win condition
|
280
|
289
|
|
281
|
290
|
- On souhaiterait une robustesse intrinseque aux bitflips.
|
282
|
291
|
|
283
|
|
-- On voudrait qu'il soit impossible de trouver un antécédant du code chiffré à partir de ce petit bout code.
|
|
292
|
+- On voudrait qu'il soit impossible de trouver un antécédant du code chiffré à partir de ce petit bout code.
|
284
|
293
|
|
285
|
|
-On parle ici de **codes de contrôles d'intégrité**, ou **fonction de Hash**.
|
|
294
|
+On parle ici de **codes de contrôles d'intégrité**, ou **fonction de Hash**.
|
286
|
295
|
|
287
|
|
-Propriétés usuelles :
|
|
296
|
+Propriétés usuelles :
|
288
|
297
|
|
289
|
298
|
- En connaissant $h_{m_1} = H(m_1)$, trouver $m_2$ est difficile tel que $H(m_2)=h_{m1}$
|
290
|
299
|
- Pour un message $m_1$, trouver $m_2$ tel que $H(m_1) = H(m_2)$ est difficile
|
291
|
300
|
- Trouver $m_1$ et $m_2$ tel que $H(m_1)=H(m_2)$ est difficile.
|
292
|
301
|
|
293
|
302
|
# Etude de la sécurité des fonctions de hashage
|
294
|
|
-## Est ce que la pire des attaques concernant les fonctions de hashage est la recherche exhausitve
|
295
|
303
|
|
|
304
|
+## Est ce que la pire des attaques concernant les fonctions de hashage est la recherche exhausitve
|
296
|
305
|
|
297
|
306
|
On parle d'attaque annivesaire en lien avec le paradoxe de l'anniversaire.
|
298
|
307
|
|
299
|
|
-## Notation
|
|
308
|
+## Notation
|
|
309
|
+
|
|
310
|
+Soit $\mathbb{Z}_M -> \mathbb{Z}_H$ une fonction de Hash avec H sorties possibles. On note
|
300
|
311
|
|
301
|
|
-Soit $\mathbb{Z}_M -> \mathbb{Z}_H$ une fonction de Hash avec H sorties possibles. On note
|
302
|
312
|
- p(n;H) la probabilité de trouver au moins une collision après n essais
|
303
|
313
|
- n(p,H) le nombre d'essais avant de trouver une collision avec une probabilité p.
|
304
|
314
|
|
305
|
315
|
## Estimation of p(n; H)
|
|
316
|
+
|
306
|
317
|
- $p(n; H) = \frac{365!}{(365−n)!365^n} \simeq 1 −e^{−n2 /(2H)}$.
|
307
|
318
|
- (Birthday attack exact formula + application of stirling formula
|
308
|
319
|
- $(n! \simeq \sqrt{2\pi n}(\frac{n}{e})^n)$
|
|
320
|
+
|
309
|
321
|
+ application of taylor expansion at order 2).
|
310
|
322
|
Estimation of n(p; H)
|
311
|
|
-- $n(p; H) = \sqrt{2H\ln\frac{1}{1−p}} $
|
312
|
323
|
|
|
324
|
+- $n(p; H) = \sqrt{2H\ln\frac{1}{1−p}} $
|
313
|
325
|
|
314
|
326
|
Au vu des chiffres induits par ces valeurs, on estime qu'un mécanisme sécurisé l'est à partir de 80 bits de niveau de sécurité, soit $2^{80}$
|
|
327
|
+
|
315
|
328
|
# Construction d'une fonction de Hash - Merkle-Dagmard (MD5, SHA-1, SHA-2...)
|
316
|
329
|
|
317
|
330
|
<p align="center">
|
|
@@ -335,6 +348,7 @@ MD5(m1||s1) = MD5(m2||s2). Has been successfully used to forge a
|
335
|
348
|
fake server certificate from legal authority.
|
336
|
349
|
|
337
|
350
|
Other limitation
|
|
351
|
+
|
338
|
352
|
- MD5 computation is fast: A GPU can compute about 150 million hashes per second
|
339
|
353
|
(Yanjun et al., 2014).
|
340
|
354
|
- Chosen Prefix Attack: $150 millions \simeq 2^{27} =⇒ 2{39}/2^{27} = 2^{12} sec = 1h 8m
|
|
@@ -352,7 +366,7 @@ to cover several cryptographic algorithms).
|
352
|
366
|
|
353
|
367
|
### Limite des fonctions de Hash en pratique
|
354
|
368
|
|
355
|
|
-Si on considère qu'un utilisateur télécharge un programme depuis un serveur officiel, un attaquant pourrait intercepter la communication et remplacer le programme par un malveillant. En contre-mesure on pourrait imaginer que le serveur et l'utilisateur partagent un secret, inconnu par l'attaquant, et ils peuvent utiliser une construction appelée MACs, similaire aux fonctions de hash pour authentifier le message reçu.
|
|
369
|
+Si on considère qu'un utilisateur télécharge un programme depuis un serveur officiel, un attaquant pourrait intercepter la communication et remplacer le programme par un malveillant. En contre-mesure on pourrait imaginer que le serveur et l'utilisateur partagent un secret, inconnu par l'attaquant, et ils peuvent utiliser une construction appelée MACs, similaire aux fonctions de hash pour authentifier le message reçu.
|
356
|
370
|
|
357
|
371
|
## Préfixe secret
|
358
|
372
|
|
|
@@ -373,8 +387,9 @@ On note p le block de padding d'un message s||m. Avec une paie (m,MAC=H(s||m)),
|
373
|
387
|
|
374
|
388
|
Pour un message m et un secret s, MAC = H(m||s).
|
375
|
389
|
|
376
|
|
-### Quelques faiblesses architecturelles demeurent...
|
377
|
|
-- **Vulnérabilité hors ligne d'une attaque par seconde-preimage**:
|
|
390
|
+### Quelques faiblesses architecturelles demeurent
|
|
391
|
+
|
|
392
|
+- **Vulnérabilité hors ligne d'une attaque par seconde-preimage**:
|
378
|
393
|
(i.e. For given m1, finding m2 such as H(m1) = H(m2)). An attacker can search second pre-image offline (i.e. without information on the secret s) and find m2. Then, attacker can substitute m1 by m2.
|
379
|
394
|
|
380
|
395
|
- **Vulnerability on offline collision attack (weak collision)**: (i.e. Find m1 and m2 such as H(m1) = H(m2)). If an attacker can ask an authority to compute a MAC, then he asks a MAC for m1 and an substitute this for m2.
|
|
@@ -383,7 +398,7 @@ Pour un message m et un secret s, MAC = H(m||s).
|
383
|
398
|
|
384
|
399
|
$ HMAC(S_k,m) = H((S_k)\oplus opad) || H((S_k\oplus ipad)||m)) $
|
385
|
400
|
|
386
|
|
-Propriétés:
|
|
401
|
+Propriétés:
|
387
|
402
|
|
388
|
403
|
Une propriété de HMAC est que la fonction de compression n'est pas résistante aux collisions. (seulement PRF est requis) si elle est utilisée intentionnellement => MD5 et SHA-1 peuvent êtrer utilisée pour HMACs
|
389
|
404
|
|
|
@@ -401,18 +416,20 @@ Donc HMAC(Sk , m1) = HMAC(Sk , m2)
|
401
|
416
|
## Aglo MAC basé sur un chiffrement par blocs - CMAC
|
402
|
417
|
|
403
|
418
|
CMAC est construit à partir d'un chiffrement par bloc qui opère en mode CBC. _NIST SP800-38B_. C'est une amélioration de CBC-MAC qui avait des vulnérabilités lorsque les messages avaient des longueurs variables. La variante XCBC-MAC a été proposée en 2003.
|
|
419
|
+
|
404
|
420
|
## Algo MAC basé sur un HASH - HMAC
|
405
|
421
|
|
406
|
|
-HMAC est aussi appelée Keyed-Hash message authentification code est construit à partir d'un e fonction de hash.
|
|
422
|
+HMAC est aussi appelée Keyed-Hash message authentification code est construit à partir d'un e fonction de hash.
|
407
|
423
|
|
408
|
424
|
## Intégrité, Authentification, et Confidentialité
|
409
|
425
|
|
410
|
426
|
GMC et GMAC sont des modes d'opérations de chiffrement par bloc qui intègrent directement ces principes.
|
411
|
427
|
|
412
|
428
|
## Exemple de MACs implémentés en OpenSSL
|
|
429
|
+
|
413
|
430
|
CMAC, GMAC, HMAC, KMAC, SiphHASH, Poly1305 (Bernstein, selectionné par google pour remplacer RC4 dans TLS/SSL).
|
414
|
431
|
|
415
|
|
-# MAC + Encryption : How to ?
|
|
432
|
+# MAC + Encryption : How to ?
|
416
|
433
|
|
417
|
434
|
<p align="center">
|
418
|
435
|
<img src="./Images/encrypt_mac.png">
|
|
@@ -420,7 +437,7 @@ CMAC, GMAC, HMAC, KMAC, SiphHASH, Poly1305 (Bernstein, selectionné par google p
|
420
|
437
|
|
421
|
438
|
Le process le plus rapide pour chiffrer et certifier est Encrypt and Mac puisqu'on parallélise les process Encrypt et Mac.
|
422
|
439
|
|
423
|
|
-Le process qui mène à la vérification la plus rapide est Encrypt then Mac, ou on peut vérifier le MAC sans avoir à déchiffrer le plain.
|
|
440
|
+Le process qui mène à la vérification la plus rapide est Encrypt then Mac, ou on peut vérifier le MAC sans avoir à déchiffrer le plain.
|
424
|
441
|
|
425
|
442
|
Le plus vulnérable au chosen plain-text attack, est la construction Encrypt and MAC puisque le Hash est directement correlé au plain-text.
|
426
|
443
|
|
|
@@ -447,7 +464,9 @@ GCM utilise donc le parallélisme encrypt then MAC, LA STAR.
|
447
|
464
|
</p>
|
448
|
465
|
|
449
|
466
|
## Use-Case : SHA-1
|
|
467
|
+
|
450
|
468
|
No storage
|
|
469
|
+
|
451
|
470
|
- Number of combinations is $36^8 = 2^{40} $⇒ brute force requires 240 calls to SHA-1 before expecting finding a password.
|
452
|
471
|
- Modern 4GHz CPU: 3.5 MHash/sec = $2^{21}$ Hash/sec
|
453
|
472
|
=⇒ 2
|
|
@@ -468,6 +487,7 @@ Ici, H est une fonction de Hash, R, une fonction de réduction qui transforme le
|
468
|
487
|
|
469
|
488
|
**Attack**
|
470
|
489
|
We note h the hashes obtained by attacker after a successfull attack.
|
|
490
|
+
|
471
|
491
|
- step 1: Check if h is in database. If it is, take the corresponding password p and compute R2(H(R1(H(p)))) ⇒ done.
|
472
|
492
|
- step 2: Check if H(R2(h)) is in database. If it is, take the corresponding password p and computes H(R1(H(p))) ⇒ done.
|
473
|
493
|
- step 3: Check if H(R1(H(R2(h)))) is in database. If it is, take the corresponding password p ⇒ done.
|
|
@@ -482,10 +502,38 @@ We note h the hashes obtained by attacker after a successfull attack.
|
482
|
502
|
- Since attacker must execute hash function many times and legitimate server only one, slowing hash function drastically penalize attacker.
|
483
|
503
|
|
484
|
504
|
## Autre construction des PasswordCheck
|
|
505
|
+
|
485
|
506
|
### Preuve de travail | Proof of work
|
486
|
507
|
|
487
|
508
|
Pour éviter le spam ou le déni de service, oh force les hashes des émetteuurs de message à avoir 20 bits de poids forts à zéro, en utilisant un custom header. C'est également utilisé pour le bitcoin.
|
488
|
509
|
|
489
|
510
|
### Dérivation de clé
|
490
|
511
|
|
491
|
|
-Des que les fonctions de hash ont des sorties uniformes, ont peut également les utiliser pour créer des secrets uniformes.
|
|
512
|
+Des que les fonctions de hash ont des sorties uniformes, ont peut également les utiliser pour créer des secrets uniformes.
|
|
513
|
+
|
|
514
|
+# Definitions of Random Number Generators
|
|
515
|
+
|
|
516
|
+## True Random Number Generator (TRNG)
|
|
517
|
+
|
|
518
|
+- Généralement créé par hardware, avec une forte entroie puisqu'on n'a aucun moyen de remonter à la source.
|
|
519
|
+- Peut être biaisée par la loi utilisée (i.e. si ce n'est ni gaussien ni uniforme), mais chacun des biais peut être contré par des algorithmes que l'on appelle des extracteurs
|
|
520
|
+
|
|
521
|
+## Pseudo Random Number Generator
|
|
522
|
+
|
|
523
|
+- Entropie Finie, au bout d'un moment on peut prédire les sorties
|
|
524
|
+
|
|
525
|
+Exemple de générateurs d'aléas purs :
|
|
526
|
+
|
|
527
|
+- Bruit thermique autour d'une résistance
|
|
528
|
+- Décomposition atomique
|
|
529
|
+
|
|
530
|
+# Partage de clés dans un monde symétrique
|
|
531
|
+
|
|
532
|
+**Cas de deux utilisateurs**, si le secret est déjà partagé ok, sinon, il yè a échange de clé sur un canal sûr, ou trouver un moyen de le partager astucieusement.
|
|
533
|
+
|
|
534
|
+**Cas d'un groupe d'utilisateurs** : Partager un secret peut être dangereux puisqu'il peut y avoir des usurpation d'identité, de l'interception de messages... On peut aussi envisager d'avoir un secret par paire d'uitlisateurs, mais cela nécessiterait énromément de clés.
|
|
535
|
+
|
|
536
|
+En pratique on adopte un modèle serveur client avec une clé par client.
|
|
537
|
+
|
|
538
|
+## Comment échange-t-on le secret
|
|
539
|
+cf . slides
|