Catégories
Identité numérique

Iden­ti­fiant utili­sa­teur et message d’er­reur

L’uti­li­sa­teur ou le mot de passe four­nis est inva­lide

Oui mais euh… lequel ?

J’ai un compte sur plus d’une dizaine de services courants, peut être une ou plusieurs centaines si je compte les boutiques et forums en ligne sur lesquelles je vais peu.

Expé­rience utili­sa­teur à jeter

Malheu­reu­se­ment, comme tout le monde, je n’ai pas pu ou voulu avoir le même iden­ti­fiant utili­sa­teur partout. Parfois je me trompe, parfois je ne suis même pas capable de savoir lequel est le bon. Bien entendu j’ai aussi pas mal de mots de passe.

Pas de doute, ce message d’er­reur rend plus diffi­cile de rentrer sur le compte. En tout cas c’est vrai pour l’uti­li­sa­teur légi­time. Ce qui aurait pu lui permettre de s’iden­ti­fier en quelques minutes lui pren­dra un bon quart d’heure le temps de tester toute une combi­nai­son d’iden­ti­fiants utili­sa­teur et la croi­ser avec autant de mots de passe.

L’iden­ti­fiant utili­sa­teur n’est pas une sécu­rité

La raison d’être de ce message est souvent un déve­lop­peur qui a souhaité amélio­rer la sécu­rité. Le fonde­ment est logique, si l’iden­ti­fiant utili­sa­teur est une incon­nue, cela fait une entrée de plus à forcer ou devi­ner.

Mais en même temps, si en connais­sant l’iden­ti­fiant utili­sa­teur il est possible de forcer le compte rela­ti­ve­ment simple­ment, vous avez un vrai problème, et ce problème ne vient pas de l’iden­ti­fiant utili­sa­teur. Vous venez d’ajou­ter de cacher le cade­nas parce qu’il est trop simple à forcer quand on le trouve. Est-ce réel­le­ment la bonne approche ?

Trou­ver un iden­ti­fiant utili­sa­teur est simple

S’il s’agit de tester des iden­ti­fiants communs à l’aide d’un diction­naire et que nous parlons d’un service grand public, ne nous voilons par la face : Nous savons que « bob », « bob75 » et « great­bob » existent. Il n’est pas besoin de les tester. C’est même à cause de cette pré-exis­tence extrê­me­ment probable que vos utili­sa­teurs ont des iden­ti­fiants diffé­rents partout.

Si à l’in­verse vous visez un utili­sa­teur parti­cu­lier, si vrai­ment l’in­gé­nie­rie sociale n’est d’au­cune aide à l’at­taquant (ce qui serait éton­nant), il lui restera à tester quelques variantes les plus probables dans votre robot. Ce qui est extrê­me­ment pénible à faire pour un humain ne chan­gera pas l’ordre de gran­deur du problème pour le robot et ne rendra pas beau­coup plus ou beau­coup moins fiable votre système.

Pire, si vrai­ment il s’agit de décou­vrir l’exis­tence d’un iden­ti­fiant, et si vous tentiez une créa­tion de compte avec l’iden­ti­fiant en ques­tion ? On ne vous dit pas si l’iden­ti­fiant est dispo­nible à ce moment là ? Était-ce bien la peine de complexi­fier l’ex­pé­rience utili­sa­teur d’un côté si l’in­for­ma­tion est dispo­nible faci­le­ment ailleurs ?

Votre sécu­rité est ailleurs

Vous voulez augmen­ter la sécu­rité ? impo­sez un méca­nisme de double authen­ti­fi­ca­tion, un nombre d’es­sai maxi­mum, une tempo­ri­sa­tion d’une dizaine de secondes, des mots de passe forts, ou même deux carac­tères de plus dans votre mot de passe. Voilà, votre sécu­rité est aussi bien voire mieux assu­rée qu’en cher­chant à donner un message d’er­reur peu expli­cite à l’uti­li­sa­teur.

Si réel­le­ment l’iden­ti­fiant utili­sa­teur était un compo­sant de sécu­rité, autant le mettre en champ « mot de passe » au lieu d’avoir un champ texte en clair. Mieux, on impo­se­rait une longueur mini­male et on inter­di­rait les iden­ti­fiants courants. En allant au bout de la démarche on pour­rait même faire un seul champ « utili­sa­teur et mot de passe » puisque l’iden­ti­fiant utili­sa­teur ne sert pas à grand chose d’autre.

Je ne sais pas si vous avez vu mais on retombe sur nos pas : pour amélio­rer la sécu­rité, ajou­tez des carac­tères au mot de passe, ne prenez pas l’iden­ti­fiant utili­sa­teur pour un mot de passe.

L’iden­ti­fiant utili­sa­teur comme donnée de valeur

Vient un dernier problème qu’on m’a soumis : Parfois l’iden­ti­fiant utili­sa­teur peut lui même être une donnée de valeur.

Je trouve dans cette caté­go­rie des extra­net dont l’iden­ti­fiant utili­sa­teur est prédic­tible mais où l’ap­par­te­nance de l’uti­li­sa­teur au système donne une infor­ma­tion impor­tante. Ce peut par exemple être l’ex­tra­net d’un avocat pour savoir si une personne précise est cliente.

Ça ne concerne pas les services publics, ça ne concerne pas les services où les iden­ti­fiants sont non prédic­tibles, ça ne concerne par les récoltes anonymes (où on ne vise pas un utili­sa­teur précis) et ça ne concerne que les cas où l’iden­ti­fiant utili­sa­teur a une valeur en soi. C’est rare, plus proba­ble­ment la solu­tion serait de rendre l’iden­ti­fiant anonyme ou non prédic­tible, mais ce sont des cas légi­times.

Par contre, pour votre boutique en ligne, pour votre forum, non, il n’y a aucune raison de gêner l’uti­li­sa­teur à ce point, vrai­ment.

1 réponse sur « Iden­ti­fiant utili­sa­teur et message d’er­reur »

Historiquement, ca vient des systèmes d’exploitation ou services à distance ou il est impossible de vérifier l’existence de l’utilisateur dans la base (i.e., pas de page publique utilisateur par exemple). L’idée reste valable dans ce cas précis à mon avis, ca ajoute une vraie sécurité, l’attaquant qui brute-force n’a aucune chance de savoir si c’est effectivement le mot de passe qui foire, ca multiplie considérablement le nombre de tentatives qu’il doit faire. Et en tant qu’utilisateur, si il n’ya pas de page publique, je suis content que le service ne dévoile pas à n’importe qui que j’y suis inscrit, si par exemple j’ai un username assez peu commun.

Sinon, sur les services en ligne ou l’identifiant est l’adresse e-mail: en tant qu’utilisateur du service, je ne veux pas que quelqu’un puisse savoir que
1/ l’adresse qu’il a récupérée quelquepart est vraiment utilisée (pas seulement valide, ce qu’il peut tester en envoyant un mail)
2/ j’ai effectivement un compte avec cette adresse sur ce service

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *