Browse Source

fin de journée

Béranger 2 years ago
parent
commit
c40cdb5441

BIN
Crypto/Images/TLS13.png View File


BIN
Crypto/Images/encrypt_mac.png View File


BIN
Crypto/Images/hash.png View File


BIN
Crypto/Images/password.png View File


BIN
Crypto/Images/prefix_secret.png View File


BIN
Crypto/Images/rainbow_table.png View File


+ 181
- 1
Crypto/cours.md View File

@@ -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.

+ 2
- 0
SecuEntreprise/cours.md View File

@@ -0,0 +1,2 @@
1
+# Cours Sécurité en entreprise
2
+

Loading…
Cancel
Save