Les protocoles d'identification
Besoins d'identification
Dans de nombreux cas, on a besoin de s'identifier, c'est-à-dire de prouver qui l'on est. C'est le cas par exemple :
- lorsqu'on souhaite accéder à son compte sur un ordinateur partagé entre plusieurs ordinateurs, ou à un réseau;
- lors du paiement par carte bancaire; le code secret permet de vérifier que la personne qui présente la carte bancaire est bien le propriétaire de cette carte bancaire;
- si l'on souhaite consulter à distance ses comptes bancaires;
- lorsque deux objets électroniques distants (ordinateur et imprimante, téléphone et oreillette,…) souhaitent établir un dialogue sans fil distant;
- si on veut prouver son identité à l'entrée dans un pays étranger. Les autorités souhaitent en particulier s'assurer que le passeport présenté n'a pas été falsifié.
L'identification par mot de passe
L'identification par mot de passe est sans doute la plus simple à mettre en oeuvre. On rentre
sur l'ordinateur son nom d'utilisateur et son mot de passe $m$. L'ordinateur compare alors ce mot de passe
à la valeur stockée dans sa base de données d'utilisateurs.
En réalité, les choses sont un peu plus compliquées. La plupart du temps, l'ordinateur utilise une fonction $f$
à sens unique. Ceci signifie que s'il est facile de calculer $f(m)$, il est en revanche très difficile (dans l'idéal, impossible)
de retrouver $m$ connaissant $f(m)$. Ce qui est stocké dans le fichier des utilisateurs n'est pas directement le mot de passe m,
mais son image $f(m)$. Et lorsque l'utilisateur rentre son mot de passe $m$, l'ordinateur calcule $f(m)$ et le compare
à la valeur qu'il a stockée dans sa base de données. Le principal avantage de procéder ainsi est que cela n'oblige pas
à sécuriser la base de données puisqu'un attaquant, même s'il a accès à $f(m)$, ne pourra reconstituer $m$.
Cela dit, même avec cette précaution, ce type d'identification par mot de passe simple n'offre pas une grande sécurité.
Le premier problème vient de l'utilisateur lui-même. Souvent, les mots de passe utilisés sont des mots faciles à retenir.
Un attaquant peut procéder à une attaque par dictionnaire, en essayant tous les mots de passe possibles dans un dictionnaire
contenant par exemple les noms communs, les prénoms, des noms de ville,….
Un autre problème est celui de la sécurité du canal de communication par lequel transite le mot de passe entre l'émetteur
et le contrôleur. C'est ainsi par exemple qu'Ali Baba put ouvrir la caverne des 40 voleurs, simplement
en écoutant leur mot de passe. Lorsqu'on s'identifie à distance, sur internet par exemple, il est tout à fait possible
que quelqu'un intercepte toutes les communications entre l'émetteur et le récepteur.
Une façon de remédier à ce problème est de faire en sorte que le mot de passe ne circule pas en clair sur le réseau.
On fait alors appel aux protocoles de la cryptographie à clé publique, comme le protocole SSL par exemple.
L'identification par mot de passe peut aussi se faire de façon physique, à l'aide d'une carte à puce ou par des empreintes digitales. On fait alors reposer la sécurité non pas sur ce qu'une personne sait,
mais sur ce qu'une personne possède (carte à puce) ou sur ce qu'une personne est (empreintes digitales). Les attaques peuvent
alors se faire directement sur l'intégrité de la personne, comme en lui coupant le doigt pour obtenir l'empreinte digitale!
L'identification par mot de passe à usage unique
Pour éviter les problèmes d'interception du mot de passe, on peut faire en sorte que le mot de passe soit à usage unique :
à chaque tentative d'identification, l'utilisateur doit fournir un mot de passe différent. Cela peut être mis en place à l'aide de plusieurs
procédés :
- une liste de mots de passe communiquée au préalable, et que l'on raye au fur et à mesure. Ceci ne permet qu'un nombre fini d'identifications, et il faut prendre garde de toujours être bien synchronisé. Et comme il est impossible de retenir un grand nombre de mots de passe, il faut en garder une trace écrite…qui pourrait bien être découverte!
- un boitier qui délivre des mots de passe changeant par exemple toutes les minutes, et qui est synchronisé avec un dispositif semblable chez le récepteur. Bien sûr, le boitier peut-être confisqué et le coût est souvent prohibitif!
- la fabriquation d'une succession de mots de passes à partir d'un mot de passe original. Pour cela, l'utilisateur se voit communiquer un mot de passe $w$ et une fonction $f$. Lors de la $n$-ième identification, il envoie comme mot de passe $f^n(w)$. Le récepteur calcule lui aussi $f^n(w)$ et compare les deux valeurs. Ceci a deux défauts : la synchronisation, et le fait que le mot de passe initial $w$ doit être conservé en clair par l'ordinateur sur lequel on essaie de s'identifier. Il faut donc veiller à sécuriser ce fichier de mots de passe.
Les protocoles défis/réponses
Les protocoles défis/réponse sont aussi une réponse à l'écoute des canaux de communication des mots de passe. Ils fonctionnent
généralement sur le principe suivant : le serveur choisit un défi (on dit aussi un challenge)
auquel l'utilisateur ne peut répondre qu'en connaissant une information que lui seul (et le serveur) connait.
Il donne sa réponse au serveur qui ainsi peut s'assurer de l'identité de l'utilisateur.
Si les défis changent à chaque tentative d'identification, un attaquant ne pourra jamais deviner la réponse
à fournir s'il essaie d'usurper l'identité d'un utilisateur.
De façon concrète, les protocoles défis/réponses sont souvent implémentés de la façon suivante.
On délivre à l'utilisateur un mot de passe $w$. A chaque tentative d'identification, le serveur lui envoie un
nombre aléatoire $C$. L'utilisateur calcule alors une certaine fonction $E(w,C)$ et envoie cette réponse au serveur.
Le serveur fait lui-même le calcul de $E(w,C)$. Si les réponses sont identiques, il s'est assuré de l'identité de l'utilisateur.
Et comme $C$ est tiré au hasard, il y a extrêmement peu de chances que le même défi soit reposé plus tard.
Bien sûr, dans la plupart des cas, ceci est complètement transparent pour l'utilisateur.
Par exemple, lors d'une identification à distance sur internet, il rentre simplement son mot de passe.
C'est le navigateur qui a reçu le nombre aléatoire $C$ et qui calcule $E(w,C).
Le choix de la fonction $E$ est très important. Il faut que cette fonction
soit à sens unique, ou au moins qu'il soit très difficile de calculer $w$ connaissant $C$ et $E(w,C)$. On
choisit souvent pour $E$ ou bien un algorithme de chiffrement symétrique dans lequel le mot de passe
$w$ joue le rôle de clé et $C$ le rôle de texte clair, ou une fonction de hachage. Une des faiblesses de ces procédés
est qu'ils obligent à garder les mots de passe en clair sur le serveur. A nouveau, l'accès à ce fichier doit être sécurisé.
Ces protocoles de défis/réponses sont mis en oeuvre par certaines banques pour sécuriser les transactions sur internet de leurs clients.
Une sorte de calculette est envoyée à ce client et lors d'un paiement, la banque demande à ce que l'utilisateur lui envoie une information
(souvent un nombre à huit chiffres) qu'il obtient en insérant sa carte dans la calculette, en entrant son code secret, puis le "défi" (souvent un nombre
lui-même) proposé par la banque. Ils apparaissent aussi dans le protocole DDA utilisé lors des paiements par carte bancaire dans un terminal de paiement.
La preuve sans divulgation
Les procédés de preuve sans divulgation sont une variante des protocoles défis/réponses.
L'idée est toujours de prouver que l'on connait un secret, mais sans le divulguer, et surtout sans que
le serveur ne possède lui-même ce secret. Ces protocoles sont ici
plutôt fondés sur la cryptographie à clé publique. Voici un exemple simple. La maison de
Nérosson et Yoshi est constituée d'une entrée et de deux pièces A et B. Ces deux pièces communiquent
par une porte ne s'ouvrant qu'à l'aide d'une clé.
- l'utilisateur choisit au hasard un nombre entier $r\in\{1,\dots,n-1\}$. Il calcule $x=r^2\ (\mod n)$ et il envoie $x$ au serveur.
- le serveur choisit un bit $e\in\{0,1\}$ au hasard lui aussi et l'envoie à l'utilisateur;
- l'utilisateur renvoie $y=rs^e\ (\mod n)$ au serveur.
- le serveur vérifie que $y^2=xv^e\ (\mod n)$.
- s'il parie que le serveur envoie $0$, il envoie effectivement $x=r^2$, puis ensuite $y=r$.
- s'il parie que le serveur envoie $1$, il envoie alors $x=r^2v^{-1}\ (\mod n)$, puis ensuite $y=r$ qui vérifie bien $y^2=xv^e\ (\mod n)$.
Consulter aussi