« Bcrypt » : différence entre les versions

De Wiki du LAMA (UMR 5127)
Aller à la navigation Aller à la recherche
Ligne 32 : Ligne 32 :
Fonction BrutForce(dictionnaire : Liste de string, hache: string) : string
Fonction BrutForce(dictionnaire : Liste de string, hache: string) : string
Début
Début
var trouve = faux;
var i = 0;
var i = 0;
Tant que trouve = faux et que i < dictionnaire.taille
Tant que i < dictionnaire.taille
Faire
Faire
Si h(dictionnaire.get(i)) == hache
Si h(dictionnaire.get(i)) == hache

Version du 2 novembre 2018 à 23:04

Auteurs : Antoine Petetin et Florian Sebire

Introduction

Le nombre de pirates ne cesse d'augmenter ces dernières années, et les sites doivent renforcer leurs sécurités.

Quelques définitions

Fonction de hachage
Une fonction de hachage transforme une donnée en entrée de taille quelconque en une donnée de sortie de taille fixe. Une fonction de hachage cryptographique va permettre de lier un clair à son empreinte. Pour que cette fonction soit efficace, il ne faudrait pas (en théorie) pouvoir retrouver le clair à partir du haché. Pour cela, cette fonction doit être aussi injective que possible.
Empreinte
Une empreinte est le résultat d'une fonction de hachage sur un clair. Une empreinte est aussi appelée une hash value, un hash code, un digest ou encore un hash.

Processus d'authentification sur un site web

L'identification d'un utilisateur sur un site est assez classique. La plupart du temps, les mots de passe ne sont pas stockés en clair dans la base de donnée du site. On stocke le haché d'un mot de passe clair. Ainsi, un hacker qui arriverait à accéder à la base de données ne verrait que les empreintes du clair, et ne pourrait pas en déduire le clair à partir de ce dernier (si le cryptage respecte le secret parfait).

Le procédé est le suivant :

  1. L'utilisateur saisit son identifiant et son mot de passe (le clair).
  2. Ce mot de passe est envoyé au serveur qui va hacher le mot de passe grâce à une fonction de hachage.
  3. Le serveur va ensuite ensuite comparer le haché du mot de passe donné et le haché stocké dans la base de données du site.
  4. Si les 2 hachés correspondent alors, l’utilisateur est authentifié.

Attaques possibles

Il existe des attaques pour retrouver le mot de passe en clair à partir du haché. On utiliser le fait que la fonction de hachage soit injective.

L'attaque brute force

Il s'agit de l'attaque la plus simple, mais aussi la plus longue. On va essayer de trouver le bon haché en testant l'ensemble des clairs possibles pour un alphabet donné. Généralement, les hackers utilisent des fichiers textes appelés dictionnaire, qui contient cet ensemble.

Fonction BrutForce(dictionnaire : Liste de string, hache: string) : string
Début
    var i = 0;
    Tant que i < dictionnaire.taille
    Faire
        Si h(dictionnaire.get(i)) == hache
            Retourner dictionnaire.get(i);
    i = i + 1;
    Fin Tant que
Retourner "";
Fin

L'attaque avec une table arc-en-ciel

L'attaque par collisions

Bcrypt

Qu'est-ce que Bcrypt ?

Sources

https://en.wikipedia.org/wiki/Bcrypt

https://medium.com/@danboterhoven/why-you-should-use-bcrypt-to-hash-passwords-af330100b861

https://en.wikipedia.org/wiki/Hash_function