Dessine-moi un mot de passe
ou le hachage cryptographique pour les nuls
Fonction de hachage ???
Fonction de hachage ???
Déterministe : le même input donne toujours le même output
Concrètement ça donne quoi ?
Exemples (MD5)
"Bedrock"
→
3836cb55cf42c53ba498574eec35623c
→
3229f96e5769da329fd0aa662844d777
→
e829cb1f9911c3f763d0c86e3fabc207
Exemples (MD5)
"Bedrock"
→
3836cb55cf42c53ba498574eec35623c
"Bedrack"
→
acc536f0f7278b11f4dd33460337ded7
Pourquoi hacher ?
Pourquoi hacher ?
- Stockage en clair : dangereux 👀
- Chiffrement : repousse le problème 🙈
- Hachage : permet de vérifier une donnée sans la connaître → aucun secret ! 🤷
- Pas de secrets → pas de problèmes ! 🥳
Reconnaître sans connaître
Reconnaître sans connaître
- Création du compte : le mot de passe en clair est haché puis effacé 🗑
- Identification: le mot de passe en clair est haché et comparé au condensé stocké. 🔍
Le jeu de la vie
Le jeu de la vie
- Un jeu à 0 joueurs
- Une grille en 2D
- Des cases à l'état binaire
- Une génération = un état de la grille
- Chaque cellule dépend des 8 voisines
Les 4 règles du jeu de la vie
Les 4 règles du jeu de la vie
- Une cellule vivante qui a moins de deux voisins meurt
- Une cellule vivante avec deux ou trois voisins survit
- Une cellule vivante avec plus de trois voisins meurt
- Une cellule morte avec exactement trois voisins devient vivante
Une fonction de hachage ?
→
Avertissement
L'expérience que vous allez voir a été réalisée par un professionnel entraîné
Ne la reproduisez pas chez vous
Ne stockez jamais de vraies données d'utilisateurs avec un algorithme maison
Recette pour faire une fonction de hachage
Recette pour faire une fonction de hachage
- Décoder le mot de passe en binaire
- Utiliser les bits pour initialiser un jeu de la vie
- Laisser le jeu de la vie s'exécuter
- Récupérer les bits de l'état final
- Encoder les bits en base64
👨🎨 Demo time ! 🎨
La fonction idéale
La fonction idéale
L'oracle aléatoire
- Une fonction qui associe à chaque entrée possible une sortie unique et complètement aléatoire
- Unique : une fonction déterministe
- Aléatoire : aucun rapport entre l'entrée et la sortie
Mesurer l'aléatoire: le biais
Mesurer l'aléatoire: le biais
Le condensé d'un oracle aléatoire est... aléatoire !
Autrement dit, chaque caractère possible du condensé est statistiquement aussi fréquent
Autrement dit, chaque bit a 50% de chance
d'être 1 ou 0
La diffusion
La diffusion
Objectif : aucune corrélation apparente entre le texte en clair et le condensé
Autrement dit, deux entrées très proches doivent donner deux condensés totalement différents
Autrement dit, si je change un bit de l'entrée, tous les bits de la sortie doivent avoir une chance sur deux de changer
Les natures mortes
Les natures mortes
- Des motifs stables
- Une fois atteints, s'ils ne sont pas perturbés, ils ne bougent plus jamais
- Motifs qui ont une structure, donc prévisibles
Le compromis biais-diffusion
Le compromis biais-diffusion
Un paramètre sur lequel on peut jouer: le nombre de générations
Plus le nombre de générations augmente, plus les changements se diffusent
... mais plus le biais augmente !
Exemple
→
Vulnérabilités
Vulnérabilités
- Collisions 💥
- Attaques de préimage 🖼️
- Inversion du hash ↩️
Les collisions
Les attaques de préimage
Les attaques de préimage
Type particulier de collision
Trouver une collision particulière à partir d'un condensé donné
Autrement dit : trouver un autre mot de passe qui fonctionne
Le défaut du jeu de la vie
Le défaut du jeu de la vie
L'oracle aléatoire peut produire tous les condensés imaginables, mais pas le jeu de la vie
Sortie en 256 bits = 2 ^ 256 condensés possibles théoriquement mais en pratique beaucoup moins
Certains condensés ne seront jamais produits car certaines configurations de la grille sont inatteignables
Les jardins d'Eden
Les jardins d'Eden
- Une configuration qui n'a pas d'ancêtres
- Aucun état ne peut le produire
- Série de bits impossible à retrouver comme sortie de la fonction
Le paradoxe du jeu de la vie
Le paradoxe du jeu de la vie
Grand nombre d'ancêtres pour chaque état
→Les collisions sont omniprésentes
Attaques de préimage très faciles
Beaucoup de mots de passe pour le même condensé
→Il est très difficile de trouver le vrai !
Avertissement
L'expérience que vous venez de voir a été réalisée par un professionnel entraîné
Ne la reproduisez pas chez vous
Ne stockez jamais de vraies données d'utilisateurs avec un algorithme maison