|
@@ -308,4 +308,184 @@ Soit $\mathbb{Z}_M -> \mathbb{Z}_H$ une fonction de Hash avec H sorties possible
|
308
|
308
|
- $(n! \simeq \sqrt{2\pi n}(\frac{n}{e})^n)$
|
309
|
309
|
+ application of taylor expansion at order 2).
|
310
|
310
|
Estimation of n(p; H)
|
311
|
|
-- $n(p; H) = \sqrt{2H\ln\frac{1}{1−p}} $
|
|
311
|
+- $n(p; H) = \sqrt{2H\ln\frac{1}{1−p}} $
|
|
312
|
+
|
|
313
|
+
|
|
314
|
+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}$
|
|
315
|
+# Construction d'une fonction de Hash - Merkle-Dagmard (MD5, SHA-1, SHA-2...)
|
|
316
|
+
|
|
317
|
+<p align="center">
|
|
318
|
+ <img src="./Images/hash.png">
|
|
319
|
+</p>
|
|
320
|
+
|
|
321
|
+Ici, f est une fonction de compression, elle produit une sortie strictement plus petite que l'entrée. Le message d'entrée est masqué ce qui rend la longueur des messages masqués comme un multiple de l'entrée de f.
|
|
322
|
+
|
|
323
|
+Merkle-Damgard ˚ strenghtening: Size of message is appended at the end of padded message. It makes collision security of hash function only relying on collision security of $f$
|
|
324
|
+
|
|
325
|
+## Configuration
|
|
326
|
+
|
|
327
|
+Le message est splité en blocs de 64 octets. F produits 128 bits IV.
|
|
328
|
+
|
|
329
|
+## Limites
|
|
330
|
+
|
|
331
|
+En attaque anniversaire, $2^{64} < 2^{80}$, ce n'est donc pas considéré comme sécurisé en cryptographie.
|
|
332
|
+
|
|
333
|
+On a également une vulnérabilité au attaques par collision à préfixes choisis : ∀(m1, m2), at most 239 calls are required to find (s1, s2) such as
|
|
334
|
+MD5(m1||s1) = MD5(m2||s2). Has been successfully used to forge a
|
|
335
|
+fake server certificate from legal authority.
|
|
336
|
+
|
|
337
|
+Other limitation
|
|
338
|
+- MD5 computation is fast: A GPU can compute about 150 million hashes per second
|
|
339
|
+(Yanjun et al., 2014).
|
|
340
|
+- Chosen Prefix Attack: $150 millions \simeq 2^{27} =⇒ 2{39}/2^{27} = 2^{12} sec = 1h 8m
|
|
341
|
+
|
|
342
|
+## Secure Hash Algorithm (SHA) familly
|
|
343
|
+
|
|
344
|
+- SHA-1: Collision in 260 calls (slightly better than MD5), but not secure from modern cryptography point of view. (160 bit output)
|
|
345
|
+- SHA-2: Different output sizes (SHA-224, SHA-256, SHA-384, SHA-512,...). No known vulnerability, just avoid implementations with 31/64 rounds.
|
|
346
|
+- SHA-3: Alternative to SHA-2 (not a replacement). More flexibility (can be used
|
|
347
|
+to cover several cryptographic algorithms).
|
|
348
|
+
|
|
349
|
+# Sécurité des fonctions de Hash seules
|
|
350
|
+
|
|
351
|
+## Intégrité avec authentification - AEAD - Authenticated Encryption with Associated Data
|
|
352
|
+
|
|
353
|
+### Limite des fonctions de Hash en pratique
|
|
354
|
+
|
|
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.
|
|
356
|
+
|
|
357
|
+## Préfixe secret
|
|
358
|
+
|
|
359
|
+### Definition
|
|
360
|
+
|
|
361
|
+Pour un message m et un secret s, MAC=H(s||m). Ce n'est pas une bonne solution puisque Merkle-Damgard est basée sur des fonctions qui sont vulnérables aux attaques par extension.
|
|
362
|
+
|
|
363
|
+<p align="center">
|
|
364
|
+ <img src="./Images/prefix_secret.png">
|
|
365
|
+</p>
|
|
366
|
+
|
|
367
|
+**Principe**
|
|
368
|
+On note p le block de padding d'un message s||m. Avec une paie (m,MAC=H(s||m)), un attaquant peut forger une paire (m',h') ou m'=M||p||K et h' obtenu en hashant K avec IV=h.
|
|
369
|
+
|
|
370
|
+## Suffixe secret
|
|
371
|
+
|
|
372
|
+### Définition
|
|
373
|
+
|
|
374
|
+Pour un message m et un secret s, MAC = H(m||s).
|
|
375
|
+
|
|
376
|
+### Quelques faiblesses architecturelles demeurent...
|
|
377
|
+- **Vulnérabilité hors ligne d'une attaque par seconde-preimage**:
|
|
378
|
+(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
|
+
|
|
380
|
+- **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.
|
|
381
|
+
|
|
382
|
+## Une construction robuste : HMAC
|
|
383
|
+
|
|
384
|
+$ HMAC(S_k,m) = H((S_k)\oplus opad) || H((S_k\oplus ipad)||m)) $
|
|
385
|
+
|
|
386
|
+Propriétés:
|
|
387
|
+
|
|
388
|
+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
|
+
|
|
390
|
+Faiblesse en cas de serveur malicieux - cas de MD5
|
|
391
|
+
|
|
392
|
+Un serveur a computé un prefix p tel que p||m2 entre en collision. (i.e. MD5(p||m1)=MD5(p||m2)). Que se passe-t-il si $S_k = p\oplus ipad$ ?
|
|
393
|
+
|
|
394
|
+HMAC(Sk , m1) = MD5((Sk ⊕ opad)||MD5(p||m1)) = MD5((Sk ⊕ opad)||h0)
|
|
395
|
+HMAC(Sk , m2) = MD5((Sk ⊕ opad)||MD5(p||m2)) = MD5((Sk ⊕ opad)||h0)
|
|
396
|
+
|
|
397
|
+Donc HMAC(Sk , m1) = HMAC(Sk , m2)
|
|
398
|
+
|
|
399
|
+# Famille des Algorithmes MAC
|
|
400
|
+
|
|
401
|
+## Aglo MAC basé sur un chiffrement par blocs - CMAC
|
|
402
|
+
|
|
403
|
+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.
|
|
404
|
+## Algo MAC basé sur un HASH - HMAC
|
|
405
|
+
|
|
406
|
+HMAC est aussi appelée Keyed-Hash message authentification code est construit à partir d'un e fonction de hash.
|
|
407
|
+
|
|
408
|
+## Intégrité, Authentification, et Confidentialité
|
|
409
|
+
|
|
410
|
+GMC et GMAC sont des modes d'opérations de chiffrement par bloc qui intègrent directement ces principes.
|
|
411
|
+
|
|
412
|
+## Exemple de MACs implémentés en OpenSSL
|
|
413
|
+CMAC, GMAC, HMAC, KMAC, SiphHASH, Poly1305 (Bernstein, selectionné par google pour remplacer RC4 dans TLS/SSL).
|
|
414
|
+
|
|
415
|
+# MAC + Encryption : How to ?
|
|
416
|
+
|
|
417
|
+<p align="center">
|
|
418
|
+ <img src="./Images/encrypt_mac.png">
|
|
419
|
+</p>
|
|
420
|
+
|
|
421
|
+Le process le plus rapide pour chiffrer et certifier est Encrypt and Mac puisqu'on parallélise les process Encrypt et Mac.
|
|
422
|
+
|
|
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.
|
|
424
|
+
|
|
425
|
+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
|
+
|
|
427
|
+Les sécurité de ces trois construction ont été étudiées, le plus complet est le process ENCRYPT-THEN-MAC.
|
|
428
|
+
|
|
429
|
+# Constructions Hybrides
|
|
430
|
+
|
|
431
|
+## AES-GCM
|
|
432
|
+
|
|
433
|
+<p align="center">
|
|
434
|
+ <img src="./Images/TLS13.png">
|
|
435
|
+</p>
|
|
436
|
+
|
|
437
|
+Ici, le chiffrement est implémenté avec AES en mode compteur pour générer un flux de clés XOR du message clair. On reprend ainsi le principe du OneTimePad. Le MAC généré est basé sur un Hashage universel, utilisant un hash polynomial dans un champ Galois.
|
|
438
|
+
|
|
439
|
+Ce process peut être parallélisé, mis en pipeline et supporte des messages de tailles variables.
|
|
440
|
+
|
|
441
|
+GCM utilise donc le parallélisme encrypt then MAC, LA STAR.
|
|
442
|
+
|
|
443
|
+# Autre utilisation des fonctions de Hash, PasswordChecking
|
|
444
|
+
|
|
445
|
+<p align="center">
|
|
446
|
+ <img src="./Images/password.png">
|
|
447
|
+</p>
|
|
448
|
+
|
|
449
|
+## Use-Case : SHA-1
|
|
450
|
+No storage
|
|
451
|
+- Number of combinations is $36^8 = 2^{40} $⇒ brute force requires 240 calls to SHA-1 before expecting finding a password.
|
|
452
|
+- Modern 4GHz CPU: 3.5 MHash/sec = $2^{21}$ Hash/sec
|
|
453
|
+=⇒ 2
|
|
454
|
+19s = 40 days.
|
|
455
|
+Full storage
|
|
456
|
+Dictionnary of all possible hashes possible:
|
|
457
|
+- Number of combinations: 368 = 2^{40}
|
|
458
|
+- Time complexity: 240 dictionnary entry checking in the worst case, for 4 GHz processor = $2^{32} op/sec. ⇒ 2^{8} sec = 4 min$.
|
|
459
|
+- Space complexity: 243 bytes of storage (without password storage) ⇒ 8 Terabytes of data
|
|
460
|
+
|
|
461
|
+## Table Arc-en-ciel
|
|
462
|
+
|
|
463
|
+<p align="center">
|
|
464
|
+ <img src="./Images/rainbow_table.png">
|
|
465
|
+</p>
|
|
466
|
+
|
|
467
|
+Ici, H est une fonction de Hash, R, une fonction de réduction qui transforme les hash en valeur alphanumérique. On stocke uniquement les left_most et right-most strings.
|
|
468
|
+
|
|
469
|
+**Attack**
|
|
470
|
+We note h the hashes obtained by attacker after a successfull attack.
|
|
471
|
+- 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
|
+- 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
|
+- step 3: Check if H(R1(H(R2(h)))) is in database. If it is, take the corresponding password p ⇒ done.
|
|
474
|
+- step 4: Fail
|
|
475
|
+
|
|
476
|
+## Renforcement des PasswordChecking
|
|
477
|
+
|
|
478
|
+- Strenghtening using random salt
|
|
479
|
+ - Before storing hashed password p, generate a large random number r and store H(r||p) and r.
|
|
480
|
+ - Rainbow tables are penalized since they are construct with usual characters. Moreover, even if attack succeeds, attack still needs to remove salt.
|
|
481
|
+- Strenghtening using slow hash functions
|
|
482
|
+ - Since attacker must execute hash function many times and legitimate server only one, slowing hash function drastically penalize attacker.
|
|
483
|
+
|
|
484
|
+## Autre construction des PasswordCheck
|
|
485
|
+### Preuve de travail | Proof of work
|
|
486
|
+
|
|
487
|
+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
|
+
|
|
489
|
+### Dérivation de clé
|
|
490
|
+
|
|
491
|
+Des que les fonctions de hash ont des sorties uniformes, ont peut également les utiliser pour créer des secrets uniformes.
|