Salage (cryptographie)

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher
Page d'aide sur l'homonymie Pour les articles homonymes, voir Salage.

Le salage, est une méthode permettant de renforcer la sécurité des informations chiffrées en y ajoutant une donnée supplémentaire afin d'empêcher que deux informations identiques conduisent aux mêmes données chiffrées. Le but du salage est de lutter contre une attaque par analyse fréquentielle.

Rappels sur la problématique de la gestion des mots de passe[modifier | modifier le code]

Recommandations pour la protection des mots de passe[modifier | modifier le code]

Les attaques par force brute en ligne représentent une menace modérée : les systèmes en lignes sont en général conçus pour bloquer les attaques les plus grossières et les temps de latence liés à la connexion distante rendent la durée des tentatives prohibitive.

Le principal risque concerne le cas de figure où un attaquant arrive à pirater le système d'authentification et à en extraire la table des mots de passe des utilisateurs. Ce type d'incident intervient malheureusement assez régulièrement[1],[2]. Les systèmes de gestion de mots de passe sont conçus de manière à limiter les conséquences de tels incidents.

Les normes de sécurité informatiques actuelles considèrent que seul l'utilisateur doit connaître son mot de passe exact : mot de passe "texte brut" ou "plain text". Ce choix a plusieurs raisons :

  • d'une part elle peut servir d'authentification ultime de l'utilisateur (les fonctions de hachage cryptographique étant en général choisies pour être difficilement inversables)
  • d'autre part les études montrent qu'il est courant que les utilisateurs choisissent le même mot de passe pour plusieurs services[3]. En ne connaissant pas le mot de passe complet, le gestionnaire d'authentification diminue sa responsabilité dans le cas où sa base de mots de passe serait compromise.

Pour atteindre cet objectif le gestionnaire de mots de passe ne manipule que des empreintes du mot de passe c'est-à-dire le résultat du traitement du mot de passe "texte brut" par des fonctions de hachage cryptographiques.

Lorsque l'utilisateur définit son mot de passe en entrant celui-ci sous forme "texte brut", celui-ci est traité par la fonction de hachage, le couple "identifiant d'utilisateur (login)"-"empreinte du mot de passe brut" est stocké dans la table des mots de passe du système d'authentification, le mot de passe brut n'est pas mémorisé.

Lorsque ultérieurement l'utilisateur souhaite s'authentifier il entre son identifiant et son mot de passe, le mot de passe est traité par la fonction de hachage, le couple identifiant-mot de passe haché est comparé à la table de mots de passe du système.

Principe de l'attaque[modifier | modifier le code]

Comme indiqué plus haut, le risque principal est celui lié aux attaques hors-ligne. La compromission de table de mots de passe permet à l'attaquant de tromper l'ensemble du système d'authentification compromis, il va cependant tenter d'augmenter son gain en déduisant des versions hachées les mots de passe bruts, sous l'hypothèse que les utilisateurs ont employé les mêmes mots de passe pour d'autres authentifications.

De manière générale les fonctions de hachages cryptographiques sont conçues pour être mathématiquement très difficiles ou impossibles à inverser "directement". L'attaquant tentera donc en général des attaques de confirmation par force brute : pour chaque mot de passe de son dictionnaire d'attaque, il calcule le hachage puis cherche à trouver une correspondance dans les hachages existant dans la base. S'il la trouve il a réussi à trouver un mot de passe ou a minima une collision avec celui-ci.

Principe du salage[modifier | modifier le code]

Initialisation[modifier | modifier le code]

Le salage consiste à concaténer le mot de passe avec une chaîne de caractère quelconque, le plus souvent aléatoire. Le salage peut être statique, chaque mot de passe est salé avec la même chaine de caractère -mais ce type de salage est considéré comme dépassé- ou dynamique : pour chaque nouveau mot de passe est généré un salage aléatoire.

Dans le cas où le salage est dynamique, chaque enregistrement de la table de mots de passe du système d'authentification contient les informations suivantes :

#| identifiant | hachage(mot de passe+salage)| salage |

Emploi[modifier | modifier le code]

L'utilisateur entre son identifiant et son mot de passe brut. A partir de l'identifiant le système d'authentification retrouve le salage associé, il concatène salage et mot de passe brut, traite la chaîne de caractère obtenue par la fonction de hachage cryptographique puis compare le résultat avec le mot de passe haché enregistré dans la table des mots de passe.

Gains apportés / failles compensées[modifier | modifier le code]

Pour rappel, nous faisons l'hypothèse raisonnable qu'un attaquant qui a pu extraire la table des mots de passe d'un système d'authentification a pu également facilement prendre connaissance des salages employés, statiques ou dynamiques.

Attaques pré-calculées[modifier | modifier le code]

Afin d'augmenter les temps de cassage, les fonctions de hachage cryptographiques sont en général conçues pour présenter une charge de calcul suffisamment faible pour ne pas être gênante en usage normal mais suffisamment importante pour être handicapante pour une attaque par force brute.

L'attaquant va chercher à contourner ce problème en utilisant des dictionnaires d'attaque pré-calculés plus ou moins sophistiqués (comme par exemple les tables arc-en-ciel).

Le fait de devoir ajouter un salage aléatoire aux mots de passe du dictionnaire d'attaque oblige l'attaquant à recalculer celui-ci, annulant cet avantage.

Cassage d'une table de mots de passe[modifier | modifier le code]

Hors du cas évoqué précédemment le salage n'apporte qu'un gain limité pour la protection d'un mot de passe d'utilisateur précis (il suffit à l'attaquant de concaténer le salage à chaque mot de son dictionnaire d'attaque avant de tester celui-ci).

Le salage améliore par contre la sécurité quand l'attaquant dispose d'un table de mot de passe de grande taille (comme c'est généralement le cas quand un système d'authentification est compromis).

Supposons une table de mots de passe sans salage ou avec un salage statique, pour chaque tentative l'attaquant va générer un mot de passe, effectuer son hachage puis le comparer avec l'ensemble des hachages présents dans la table. Ainsi en un seul parcours de son dictionnaire il peut attaquer l'ensemble des mots de passe contenus dans la base.

Si au contraire chaque mot de passe est haché avec un salage aléatoire différent, l'attaquant devra reparcourir l'ensemble de son dictionnaire pour chaque mot de passe (et re-réaliser les calculs afférents).

Remarques[modifier | modifier le code]

La complexité de calcul ainsi induite demeure par essence relative, étant donné la nature intrinsèquement discrète des calculs et la dimension fondamentalement finie des données traitées avec un ordinateur ou un système informatique. Elle se mesure essentiellement en temps utile à consacrer au calcul et en espace de données candidates à parcourir de manière raisonnable pour le recouvrement de la donnée de départ.

Le salage est le plus souvent utilisé dans un contexte de sécurité de donnée (intégrité, contrôle d'accès, chiffrement). Dans d'autres cas d'utilisation de fonctions de hachage, aucun salage n'est appliqué, l'intérêt étant au contraire la catégorisation efficace des données de départ et la mise en correspondance rapide entre un condensé donné et la donnée de départ.

Références[modifier | modifier le code]

  1. Guillaume Champeau, OVH victime d'un piratage massif de ses données clients Numérama.com, 22 Juillet 2013, page consultée le 4 octobre 2013
  2. Emilien Ercolani, Ubisoft piraté : la base de données compromise, linformaticien.com, 3 juillet 2013, page consultée le 4 octobre 2013
  3. John Fontana, Password's rotten core not complexity but reuse, Zdnet.com, 22 mars 2013, consulté le 24 octobre 2013