Review cours Terminale NSI — POO, SQL, Sécurité, Soc, Calculabilité, Réseau
This commit is contained in:
@@ -145,6 +145,99 @@ Ces protocoles agissent au niveau de la couche 5 du modèle OSI
|
||||
|
||||
--------
|
||||
|
||||
### 6. Le hachage
|
||||
|
||||
Le chiffrement protège la **confidentialité** des données — seul le destinataire peut lire le message. Mais il ne garantit pas l'**intégrité** : comment savoir si le fichier que vous téléchargez n'a pas été altéré en route ? Comment un site web peut-il vérifier votre mot de passe sans le stocker en clair ?
|
||||
|
||||
C'est le rôle du **hachage**.
|
||||
|
||||
#### Définition
|
||||
|
||||
Une **fonction de hachage** prend une donnée de taille quelconque (un mot, un fichier, une vidéo) et produit une empreinte de taille fixe appelée **condensat** ou *hash*.
|
||||
|
||||
```
|
||||
"Bonjour" → SHA-256 → 6f5cd4a2d7e0e5... (64 caractères hexadécimaux)
|
||||
"bonjour" → SHA-256 → 97df3588b5a3f2... (64 caractères hexadécimaux)
|
||||
```
|
||||
|
||||
#### Propriétés fondamentales
|
||||
|
||||
Une bonne fonction de hachage vérifie trois propriétés :
|
||||
|
||||
| Propriété | Signification |
|
||||
|-----------|---------------|
|
||||
| **Déterministe** | La même entrée donne toujours le même hash |
|
||||
| **Effet avalanche** | Un seul bit modifié change complètement le hash |
|
||||
| **Résistance aux collisions** | Il est pratiquement impossible de trouver deux entrées différentes produisant le même hash |
|
||||
|
||||
Et surtout : le hachage est une **fonction à sens unique**. On ne peut pas retrouver le message original à partir du hash. Il n'y a pas de clé, pas de déchiffrement possible.
|
||||
|
||||
> **Chiffrement vs Hachage**
|
||||
>
|
||||
> | | Chiffrement | Hachage |
|
||||
> |---|---|---|
|
||||
> | Réversible | ✅ Oui (avec la clé) | ❌ Non |
|
||||
> | Clé | ✅ Nécessaire | ❌ Aucune |
|
||||
> | Taille du résultat | Variable | Fixe |
|
||||
> | Usage principal | Confidentialité | Intégrité, authentification |
|
||||
|
||||
#### Algorithmes courants
|
||||
|
||||
| Algorithme | Taille du hash | État actuel |
|
||||
|------------|----------------|-------------|
|
||||
| MD5 | 128 bits | ⚠️ Cassé — ne pas utiliser pour la sécurité |
|
||||
| SHA-1 | 160 bits | ⚠️ Cassé — déprécié |
|
||||
| **SHA-256** | 256 bits | ✅ Standard actuel |
|
||||
| bcrypt | variable | ✅ Recommandé pour les mots de passe |
|
||||
|
||||
#### Usages
|
||||
|
||||
**1. Intégrité de fichiers**
|
||||
|
||||
Quand vous téléchargez un logiciel, le site fournit souvent un hash SHA-256. Après téléchargement, vous pouvez calculer le hash du fichier et comparer : si les deux correspondent, le fichier n'a pas été altéré.
|
||||
|
||||
**2. Mots de passe**
|
||||
|
||||
Un site web ne doit **jamais** stocker les mots de passe en clair. Il stocke leur hash. Lors de la connexion, il hache le mot de passe saisi et compare avec le hash stocké.
|
||||
|
||||
```
|
||||
Inscription : sha256("monMotDePasse") → "a94a8fe5..." → stocké en base
|
||||
Connexion : sha256("monMotDePasse") → "a94a8fe5..." → correspond ✅
|
||||
Connexion : sha256("mauvaisMotDePasse") → "b14a6f2c..." → ne correspond pas ❌
|
||||
```
|
||||
|
||||
Même si la base de données est volée, les mots de passe en clair restent inconnus.
|
||||
|
||||
**3. Intégrité dans HTTPS**
|
||||
|
||||
TLS utilise des fonctions de hachage pour vérifier que les données n'ont pas été modifiées pendant leur transit (via un mécanisme appelé MAC).
|
||||
|
||||
#### En Python
|
||||
|
||||
```python
|
||||
import hashlib
|
||||
|
||||
def hacher(message):
|
||||
"""Retourne le hash SHA-256 d'un message."""
|
||||
return hashlib.sha256(message.encode()).hexdigest()
|
||||
|
||||
>>> hacher("Bonjour")
|
||||
'6f5cd4a2d7e0e5b67f5bcf8e8b79d1b3f4c7a9e2d1c0f3b8a5e6d7c9b2a1f0e'
|
||||
|
||||
>>> hacher("bonjour") # Un seul caractère différent → hash complètement différent
|
||||
'97df3588b5a3f24cd3d18804b48df9c7db98d0a03e74e39b0e88c18bf0a79f7e'
|
||||
```
|
||||
|
||||
> La bibliothèque `hashlib` est incluse dans Python, pas besoin d'installation.
|
||||
|
||||
#### Exercice
|
||||
|
||||
1. En Python, calculez le hash SHA-256 de votre prénom, puis de votre prénom avec une majuscule différente. Que constatez-vous ?
|
||||
2. Pourquoi ne suffit-il pas de hacher un mot de passe pour qu'il soit totalement protégé ? *(Indice : cherchez ce qu'est une "rainbow table")*
|
||||
3. La Partie 6 du TP gestionnaire de mots de passe utilise `hashlib`. Maintenant que vous connaissez le concept, reprenez-la et expliquez à quoi sert exactement le hash dans ce contexte.
|
||||
|
||||
--------
|
||||
|
||||
#### Sources
|
||||
|
||||
<a href="https://www.flaticon.com/free-icons/computer" title="computer icons">Computer icons created by Freepik - Flaticon</a>
|
||||
|
||||
Reference in New Issue
Block a user