fin de journée

這個提交存在於:
Béranger 2021-10-06 15:45:39 +02:00
父節點 e10897a646
當前提交 c40cdb5441
共有 8 個檔案被更改,包括 183 行新增1 行删除

二進制
Crypto/Images/TLS13.png 一般檔案

未顯示二進位檔案。

之後

寬度:  |  高度:  |  大小: 142 KiB

二進制
Crypto/Images/encrypt_mac.png 一般檔案

未顯示二進位檔案。

之後

寬度:  |  高度:  |  大小: 41 KiB

二進制
Crypto/Images/hash.png 一般檔案

未顯示二進位檔案。

之後

寬度:  |  高度:  |  大小: 26 KiB

二進制
Crypto/Images/password.png 一般檔案

未顯示二進位檔案。

之後

寬度:  |  高度:  |  大小: 103 KiB

二進制
Crypto/Images/prefix_secret.png 一般檔案

未顯示二進位檔案。

之後

寬度:  |  高度:  |  大小: 42 KiB

二進制
Crypto/Images/rainbow_table.png 一般檔案

未顯示二進位檔案。

之後

寬度:  |  高度:  |  大小: 228 KiB

查看文件

@ -308,4 +308,184 @@ Soit $\mathbb{Z}_M -> \mathbb{Z}_H$ une fonction de Hash avec H sorties possible
- $(n! \simeq \sqrt{2\pi n}(\frac{n}{e})^n)$
+ application of taylor expansion at order 2).
Estimation of n(p; H)
- $n(p; H) = \sqrt{2H\ln\frac{1}{1p}} $
- $n(p; H) = \sqrt{2H\ln\frac{1}{1p}} $
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}$
# Construction d'une fonction de Hash - Merkle-Dagmard (MD5, SHA-1, SHA-2...)
<p align="center">
<img src="./Images/hash.png">
</p>
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.
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$
## Configuration
Le message est splité en blocs de 64 octets. F produits 128 bits IV.
## Limites
En attaque anniversaire, $2^{64} < 2^{80}$, ce n'est donc pas considéré comme sécurisé en cryptographie.
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
MD5(m1||s1) = MD5(m2||s2). Has been successfully used to forge a
fake server certificate from legal authority.
Other limitation
- MD5 computation is fast: A GPU can compute about 150 million hashes per second
(Yanjun et al., 2014).
- Chosen Prefix Attack: $150 millions \simeq 2^{27} =⇒ 2{39}/2^{27} = 2^{12} sec = 1h 8m
## Secure Hash Algorithm (SHA) familly
- SHA-1: Collision in 260 calls (slightly better than MD5), but not secure from modern cryptography point of view. (160 bit output)
- SHA-2: Different output sizes (SHA-224, SHA-256, SHA-384, SHA-512,...). No known vulnerability, just avoid implementations with 31/64 rounds.
- SHA-3: Alternative to SHA-2 (not a replacement). More flexibility (can be used
to cover several cryptographic algorithms).
# Sécurité des fonctions de Hash seules
## Intégrité avec authentification - AEAD - Authenticated Encryption with Associated Data
### Limite des fonctions de Hash en pratique
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.
## Préfixe secret
### Definition
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.
<p align="center">
<img src="./Images/prefix_secret.png">
</p>
**Principe**
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.
## Suffixe secret
### Définition
Pour un message m et un secret s, MAC = H(m||s).
### Quelques faiblesses architecturelles demeurent...
- **Vulnérabilité hors ligne d'une attaque par seconde-preimage**:
(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.
- **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.
## Une construction robuste : HMAC
$ HMAC(S_k,m) = H((S_k)\oplus opad) || H((S_k\oplus ipad)||m)) $
Propriétés:
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
Faiblesse en cas de serveur malicieux - cas de MD5
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$ ?
HMAC(Sk , m1) = MD5((Sk ⊕ opad)||MD5(p||m1)) = MD5((Sk ⊕ opad)||h0)
HMAC(Sk , m2) = MD5((Sk ⊕ opad)||MD5(p||m2)) = MD5((Sk ⊕ opad)||h0)
Donc HMAC(Sk , m1) = HMAC(Sk , m2)
# Famille des Algorithmes MAC
## Aglo MAC basé sur un chiffrement par blocs - CMAC
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.
## Algo MAC basé sur un HASH - HMAC
HMAC est aussi appelée Keyed-Hash message authentification code est construit à partir d'un e fonction de hash.
## Intégrité, Authentification, et Confidentialité
GMC et GMAC sont des modes d'opérations de chiffrement par bloc qui intègrent directement ces principes.
## Exemple de MACs implémentés en OpenSSL
CMAC, GMAC, HMAC, KMAC, SiphHASH, Poly1305 (Bernstein, selectionné par google pour remplacer RC4 dans TLS/SSL).
# MAC + Encryption : How to ?
<p align="center">
<img src="./Images/encrypt_mac.png">
</p>
Le process le plus rapide pour chiffrer et certifier est Encrypt and Mac puisqu'on parallélise les process Encrypt et Mac.
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.
Le plus vulnérable au chosen plain-text attack, est la construction Encrypt and MAC puisque le Hash est directement correlé au plain-text.
Les sécurité de ces trois construction ont été étudiées, le plus complet est le process ENCRYPT-THEN-MAC.
# Constructions Hybrides
## AES-GCM
<p align="center">
<img src="./Images/TLS13.png">
</p>
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.
Ce process peut être parallélisé, mis en pipeline et supporte des messages de tailles variables.
GCM utilise donc le parallélisme encrypt then MAC, LA STAR.
# Autre utilisation des fonctions de Hash, PasswordChecking
<p align="center">
<img src="./Images/password.png">
</p>
## Use-Case : SHA-1
No storage
- Number of combinations is $36^8 = 2^{40} $⇒ brute force requires 240 calls to SHA-1 before expecting finding a password.
- Modern 4GHz CPU: 3.5 MHash/sec = $2^{21}$ Hash/sec
=⇒ 2
19s = 40 days.
Full storage
Dictionnary of all possible hashes possible:
- Number of combinations: 368 = 2^{40}
- Time complexity: 240 dictionnary entry checking in the worst case, for 4 GHz processor = $2^{32} op/sec. ⇒ 2^{8} sec = 4 min$.
- Space complexity: 243 bytes of storage (without password storage) ⇒ 8 Terabytes of data
## Table Arc-en-ciel
<p align="center">
<img src="./Images/rainbow_table.png">
</p>
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.
**Attack**
We note h the hashes obtained by attacker after a successfull attack.
- step 1: Check if h is in database. If it is, take the corresponding password p and compute R2(H(R1(H(p)))) ⇒ done.
- 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.
- step 3: Check if H(R1(H(R2(h)))) is in database. If it is, take the corresponding password p ⇒ done.
- step 4: Fail
## Renforcement des PasswordChecking
- Strenghtening using random salt
- Before storing hashed password p, generate a large random number r and store H(r||p) and r.
- Rainbow tables are penalized since they are construct with usual characters. Moreover, even if attack succeeds, attack still needs to remove salt.
- Strenghtening using slow hash functions
- Since attacker must execute hash function many times and legitimate server only one, slowing hash function drastically penalize attacker.
## Autre construction des PasswordCheck
### Preuve de travail | Proof of work
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.
### Dérivation de clé
Des que les fonctions de hash ont des sorties uniformes, ont peut également les utiliser pour créer des secrets uniformes.

2
SecuEntreprise/cours.md 一般檔案
查看文件

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