ZEROSECONDE.COM: Sur la chaîne de confiance (par Martin Lessard)

ZEROSECONDE.COM

Impacts du numérique sur la communication, notre société, nos vies.

Sur la chaîne de confiance


Des personnes soucieuses de protéger leur mot de passe m'ont signalé qu'il ne faut jamais donner son mot de passe sur un site inconnu. (Voir mon billet d'hier). Ils ont raison sur le fond, et je ne l'aurai pas fait à moins d'avoir trois bonnes raisons.

Pourquoi j'ai confiance à Leakedin

1) Ce site n'a pas été construit tout à fait par des inconnus, mais par Chris Shiflett (Twitter) , Sean Coates et l'équipe de FictiveKin dont vous avez la liste complète de l'équipe sur la page d'accueil, photo et compte Twitter inclus.

Mais cette raison n'est pas la raison principale qui justifie pourquoi je fais confiance au site.

2) La page web n'envoie jamais votre mot de passe, mais bien une fonction de hachage (hash en anglais). Une fonction de hachage est un algorithme qui transforme une série de caractères (votre mot de passe en l'occurrence) en une suite alphanumérique d'une longueur fixe (dans ce cas-ci 40 caractères)
Le hash de "password" est
5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8

Le hash de "Martin Lessard" est
318fa200d58682b403febaeff3be2bccd08df681

Le hash du premier paragraphe au complet de mon billet est
6a386e8d1569994a966b4141d9336374421702b7
Un hash de longueur toujours égale (qu'importe le nombre de caractère de départ) donne une "empreinte". Un hachage sert à identifier rapidement l'empreinte des données. Cette page gère les hashes et non des données elle-même.

Mais ce n'est pas la raison principale qui justifie pourquoi je fais confiance au site

3) La fonction de hachage se fait à même la page, dans ce qui est appelé le code JavaScript (JS). Le code JS est accessible par tous en accédant au code source de la page

Le champ dans lequel on entre le mot de passe a été nommé "check", la fonction JS qui récupère le contenu du champ est

function hashIt() {

   var el = document.getElementById('check');

   if (el.value.match(/^[a-f0-9]{40}$/)) return;

   el.value = Sha1.hash(el.value);

 }

En clair:

  •  La valeur du champ (votre mot de passe) est mise dans la variable "el" (première ligne)
  • Puis on vérifie que ce soient bien des caractères valides qui sont dans la variable "el" (deuxième ligne, après le "if")
  • Et on performe une fonction de hachache sur la variable avec "Sha1.hash(el.value)" (fin de la troisième ligne)
  • Pour aussitôt réassigner le résultat du hachage dans la variable avec"el.value" (début de la troisième ligne)

Quand on écrit en JS : "el.value =", la valeur qui se trouve à droite du égale est attribué à la variable. Dans ce cas-ci le hash de votre mot de passe.

"el" étant le contenu du champ (première ligne) alors celui-ci est aussitôt remplacé dans le champ par le hash (troisième ligne).

C'est cette valeur qui est envoyée au serveur par le bouton "submit"

C'est la raison principale pourquoi je fais confiance au site: votre mot de passe ne quitte jamais votre ordinateur, seulement sa fonction de hachage.

La chaîne de confiance

Il est évident que si vous arrivez sur mon billet en provenance d'un tweet, la chaîne de confiance est plutôt ténue.

Vous devez croire un twitteur, qui a peut-être fait confiance à un autre twitteur, qui me fait confiance  et moi je fais confiance à mes sources qui eux font confiance au site.

Si la chaîne de confiance est trop longue, fiez-vous à votre instinct.

Pour ceux qui connaissent le JS, vous pouvez court-circuiter la chaîne et vérifier par vous-même (comme l'invite Leakedin sur son accueil).

4 commentaires:

vendredi, juin 08, 2012 3:01:00 PM Gate a dit...

Basé sur ce texte, linkedin ne devrait-elle pas 1. aviser tout ces usagers? 2. interdire ces mots de passe dans le futur.

J'ai fait des tests sur leakedin avec des combinaisons "faciles" (pas mes mots de passe), et plusieurs combinaisons sont déjà hackées.

D'autres sites par exemple, Facebook, Twitter, Google, Hotmail, etc. pourraient-ils aussi bloquer ces mots de passe?

vendredi, juin 08, 2012 3:39:00 PM Stéphane Denis a dit...

Le hachage simple est loin d'être une forme d'encryption. C'est une fonction mathématique qui est réversible et dont les entrées possibles sont nombreuses pour une même valeur de sortie.

Si on renverse cette fonction on a une infinité de résultats possible pour un code de hachage donné. Ça adonne que pour un code de hachage qui représente un texte court les possibilitées sont multiples mais limités. On peux donc par force brute générer l'ensemble des codes de hachages qui correspondent aux milliards de possibilités de textes court et stocker les codes de hachages.

Le cout du stockage étant ce qu'il est, il existe de nombreux sites web (comme http://www.sha1-lookup.com) qui donne accès à ce lexique inversé et permettent de décoder le mot de passe.

Ce n'est pas en transmettant à travers une équation complexe qu'on gagne en confidentialité. Il n'y a pas de communication confidentielle informatique sans clé secrète. Il n'y a pas de partage de clé secrète sans relation de confiance.

samedi, juin 09, 2012 6:55:00 AM Martin Lessard a dit...

Stéphane Denis, « Il n'y a pas de communication confidentielle informatique sans clé secrète. Il n'y a pas de partage de clé secrète sans relation de confiance». Bien difficile d'être contre. Et on pourrait même rajouter que le partage doit se faire sans possibilité qu'il y ait une interception par un tiers.

Dans le cas de Leakedin, bien loin de l'idéal cryptographique que vous venez de décrire, il faut l'admettre, on n'a tout de même pas besoin de prendre autant de précaution: sans le nom du compte, le mot de passe n'a pas de valeur. Et même en renversant le hash, je vois mal qqun allez tenter par la force brut bombarder un site web pour trouver une combinaison (je reste sur l'impression qu'il vaut mieux pour un hacker d'entrer dans le système et d,aller voler les tables de passwords que de forcer un login)

samedi, juin 09, 2012 7:03:00 AM Martin Lessard a dit...

Gate, l'idée n'est pas bête, mais à ce compte, la plupart des mots de passe du commun des mortels serait refusé :-) Ça me semblerait impraticable.

La protection que ces plateformes apportent se trouve au niveau du login: ils ne laissent pas qqun tenter toutes les combinaisons possibles de mots de passe, le système les bloque après X tentatives. Ce n'est pas à l'épreuve de tout, cryptologiquement parlant, mais au niveau probabilistique c'est probablement suffisant.

Publier un commentaire

Les commentaires sont fermés.