VALIDATION DE LA FORCE D'UN MOT DE PASSE

Signaler
Messages postés
38
Date d'inscription
vendredi 3 janvier 2003
Statut
Membre
Dernière intervention
27 novembre 2008
-
verdy_p
Messages postés
203
Date d'inscription
vendredi 27 janvier 2006
Statut
Membre
Dernière intervention
29 janvier 2019
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/51011-validation-de-la-force-d-un-mot-de-passe

verdy_p
Messages postés
203
Date d'inscription
vendredi 27 janvier 2006
Statut
Membre
Dernière intervention
29 janvier 2019

Si le site accepte autre chose que les caractères ASCII, et accepte l'Unicode, pensez par exemple à charger dans la barre de langues un clavier non latin (si possible non alphabétique et non basé sur une translitération du latin: arabe, hébreu, hindi), et tapez votre mot de passe en changeant temporairement la disposition du clavier, pour que cela génère des séquences illisibles qui ne sont pas de simples translitérations: testez la frappe de votre phrase dans le bloc-notes, assurez-vous que ce ne soit pas non plus une véritable gymnastique sinon le risque d'erreur sera important et vous aurez toujours à reconsulter vos notes secrètes, ou bien on pourra lire ce que vous frappez.

Autre idée: vous pouvez aussi utiliser MSKLC pour modifier votre clavier standard afin d'y ajouter un ou deux "jolis" caractères symboliques (Wingdings, signes typographiques rares), sans avoir à basculer de langue temporairement avec la barre de langue (des signes que vous pourrez alors inclure dans vos mots de passe Unicode). Recherchez ces caractères avec Charmap et une police "riche" (comme 'Segoe UI', ou Arial Unicode si vous avez Office). Testez ces caractères d'abord en essayant de vous les envoyez par email via un compte webmail (par exemple Gmail), afin de vous assurer que votre clavier fonctionne de façon correcte avec des sites connus et raisonnablement fiables, mais aussi avec les réglages de votre/vois navigateurs (y compris sur votre smartphone si vous voulez recevoir les mots de passe par SMS en cas d'oubli).

N'hésitez pas non plus sur un nouveau site à tester les possibilités de mots de passe autorisés et fonctions de renvoi de mots de passe oublié avant d'y confier vos données sensibles : passez un peu de temps dans vos préférences en ligne, et vérifiez plusieurs fois vos options de confidentialité (notamment sur FaceBook, qui veut tout partager avec un nombre d'amis et d'amis d'amis beaucoup trop important ; Facebook est le PIRE de tous les sites que j'ai jamais vu pour la confidentialité : une horreur à paramétrer, ses options de partage par défaut sont très mauvaises, les options de visibilité par "seulement moi-même" sont accessibles et disponibles uniquement en mode avancé dans un sous-dialogue, à rechercher pour chacune de ses nombreuses fonctions, et il faut constamment retourner dans les préférences pour voir si de nouveaux partages d'infos ont été activés sans que vous en ayez conscience, d'autant plus qu'il veut absolument que vous soyez y identifié avec votre nom réel, et toutes sortes d'indices sur vous que tout le monde n'a pas à connaitre !).
verdy_p
Messages postés
203
Date d'inscription
vendredi 27 janvier 2006
Statut
Membre
Dernière intervention
29 janvier 2019

Les bons mots de passe, assez longs mais encore mnémotechniques sont en général définis comme des "pass phrases", c'est-à-dire composés de phrases ayant un sens pour l'utilisateur et pouvant éventuellement fournir la question à une réponse donnée, ou bien étant une réponse figurée/imagée à une question posée (mais où la réponse est connue de l'utilisateur, et imagée selon une analogie, une maxime, un élément culturel, que comprend l'utilisateur et qui est alors associée intimement aux mots. Ce peut être par exemple la réponse en trois mots qui n'ont rien à voir entre eux, à trois questions posées comme des définitions de mot croisés, ces questions étant un peu habilement posées comme si c'était une phrase un peu étrange mais signifiante pour l'utilisateur (de sorte que les autres ne verront pas l'image et chercheront une réponse littérale).

À cela, l'utilisateur peut aussi ajouter quelques caractères ou conventions ne figurant pas dans la question posée, mais définie habituellement dans ses mots de passe. La langue (ou l'orthographe) utilisée peut aussi aider: penser à inclure un mot dans un style Leets, ou SMS (pas forcément dans tous les mots de la réponse), et à créer un moyen permettant de varier les mots de passe en fonction du site demandeur (ne pas mettre son mot de passe personnel identique entre tous les sites, notamment les sites hautement ciblés par les attaques comme Gmail, Yahoo, Facebook, MSN/Live.

Pour vos comptes bancaires en ligne, utilisez les mots de passe recommandés par votre banque, et gardez-les en lieu sûr en supprimant le document à l'entête de la banque et en le notant ailleurs dans un agenda de l'année passée, au milieu de notes, sous une forme déguisée dans des pages déjà bien remplies (si le mot de passe est numérique, par exemple piochez un nom au hasard dans l'annuaire, d'une personne que vous ne connaissez pas et saurez reconnaitre facilement parmi les autres nombreux noms, et notez la comme si c'était certains chiffres d'un numéro de téléphone mobile, d'un code de porte d'entrée, une date ou heure de rendez-vous, un prix réaliste pour un produit courant du marché qui ne vous intéresse habituellement pas...

Ne planquez pas trop ce calepin, mettez le plutôt parmi vos "paperasses" d'usage courant ou restant à classer, et pas dans un endroit saugrenu (dans le frigo par exemple) où il risquerait en plus d'être détruit pas accident. Pour les étudiants, pensez à vos notes de cours de l'an passé vous aurez bien un cahier bien rempli avec des tas de gribouillis, et notes persos, ou autres exercices, mais pas trop encombrant pour que vous puissiez le garder en relativement bon état, rappelez-vous juste du sujet du cours, trouvez un gribouillis sur une page que vous aimez bien... Petit à petit vous retiendrez une bonne méthode pour retrouver plus facilement le mot de passe par un raisonnement cohérent, en vous passant même de ces notes, que vous pourrez sécuriser davantage, tout en augmentant raisonnablement la complexité de vos mots de passe.

Ne vous précipitez pas tout de suite vers un mot de passe compliqué que vous ne retiendrez pas. Augmentez en la complexité après avoir bien mémorisé celui de base. Vous pouvez aussi utiliser un mot de passe connu par coeur complété d'un mot de passe spécifique pour le site que vous noterez (ne noter que cette seconde partie). Mais ne réutilisez jamais vos mots de passe très sensibles (et d'usage plus rare et strictement personnel) avec ceux de sites sociaux en ligne (notamment les forums). Si un nouveau site vous propose la connexion avec OpenID, utilisez la: ça évite de fournir un mot de passe connu directement à ce site dont vous ne connaissez pas encore le niveau de confiance, mais n'utilisez pas non plus le mot de passe de votre compte email principal (celui que vous utilisez pour vos communications les plus privées avec des sites importants).
verdy_p
Messages postés
203
Date d'inscription
vendredi 27 janvier 2006
Statut
Membre
Dernière intervention
29 janvier 2019

Bogue dans la fonction:

Function IllegalChar(avar) As String
'**********************************************************************************************************************
'Fonction IllegalChar
'Vérifie s'il y a des caractères hors normes (33 à 126) dans la cellule sélectionnée.
'**********************************************************************************************************************
For N = 1 To Len(avar)
If Asc(Mid(avar, N, 1)) >= 33 And Asc(Mid(avar, N, 1)) <= 126 Then IllegalChar = "Caractères légaux" Else IllegalChar = "Caractères illégaux"
Next
End Function

En effet, elle retourne dans IllegalChar uniquement le statut du DERNIER caractère dans le paramètre, et ne positionne pas la variable si le mot de passe est vide...

La fonction devrait être :

Function IllegalChar(avar) As String
'**********************************************************************************************************************
'Fonction IllegalChar
'Vérifie s'il y a des caractères hors normes (33 à 126) dans la cellule sélectionnée.
'**********************************************************************************************************************
IllegalChar = "Caractères légaux"
For N = 1 To Len(avar)
If Asc(Mid(avar, N, 1)) < 33 Or Asc(Mid(avar, N, 1)) > 126 Then IllegalChar = "Caractères illégaux"
Next
End Function

Et d'une façon générale, il y a trop de variables globales dans tout ce programme, les variables locales (de contrôle de boucles par exemple) devraient être toutes locales dans les fonctions.

Trop de fonctions également, qui parcourent cent fois la chaine, et emploient Mid() avec trop de répétition pour scanner la chaine et allouer et copier des nouvelles sous-chaines de 1 caractère pour finalement utiliser Asc() encore pour en extraire le code. Toutes ces boucles qui parcourent la chaine du début à la fin devraient être factorisées dans la même boucle "For N = 1 To Len(avar) ... Next", alors qu'il suffirait de déclarer un seul objet contenant les différents compteurs d'évaluation en tant que membre, avec une fonction contructeur prenant le mot de passe et effectuant l'analyse une fois avec une méthode statique publique référençant l'instance d'objet en paramètre qui sera mise à jour, puis consultée avec des méthodes d'instance publiques retournant la valeur du type d'évaluation demandée: même écrit comme ça, le code serait beaucoup moins long, et plus propre à réutiliser.
D'autres évaluations manquent, comme une fonction vérifiant certaines valeurs connues de mots de passe par défaut, depuis une ébauche de dictionnaire (par exemple "admin", "root", "pass", "password", "0000", "1234" sont détectés comme faibles, mais il y en a plein d'autres à considérer, en ignorant aussi les différences de casse et d'accents avec une collation de niveau 1 pour les mots courants de cette langue pour cette recherche), en ajoutant aussi ceux qui sont fonction de la locale courante de l'utilisateur (sa langue, et l'anglais souvent en fallback) ou celle du projet su site, de son nom ou pseudonyme sur le projet, et du nom du projet ou site pour lequel un mot de passe est demandé.
Il n'est pas inutile de consulter les codes sources de certains Password-crackers pour savoir comment ils peuvent trouver un mot de passe en quelques millisecondes. A mon avis, l'évaluation devrait consister plutôt à utiliser un de ces password-crackers connus (dont les sources sont largement disponibles sur Linux/Unix et Windows), en analysant le nombre de combinaisons (ou le temps) qu'ils ont essayé avant de trouver le mot de passe.
C'est ce que Google a fait sur son site pour renseigner les utilisateurs sur la sécurité relative du mot de passe de leur compte personnel pour Gmail, iGoogle, Google Docs, Google Groups, Google Gears, au moment où ils définissent leur mot de passe sur ce compte; cette évaluation devrait aussi être réeffectuée avec le temps et si le site stockant les mots de passe change de politique et décide de renforcer les seuils ou doit palier à des attaques en prévenant les utilisateurs d'un problème potentiel sur un mot de passe moyen devenu faible ou la cible d'attaques...
cs_DanielGT
Messages postés
4
Date d'inscription
vendredi 24 juillet 2009
Statut
Membre
Dernière intervention
15 janvier 2010

Bonjour à tous,

US_30, j'ai finalement fait l'ajout des Fonctions : PassWrdStrgSymb, ConsecSymb et RevConsecSymb.
Avec cette suite de caractères "!"#$%&'()*+,-./01" ont obtient sans les nouvelles fonctions 194 - Très Fort et avec les nouvelles fonctions 116 - Bon.

La différence en comparaison avec "ABCDEFGHIJKLMNOP" qui lui obtiens un score à 0 est dans le système de pointage de SymbolCount =(n*6) et de MidNumSymb = (n*2) comparativement aux chiffres et lettres qui ont un pointage moindre.

Dans la fonction PassWrdStrgSymb, ont pourrait rétablir l'équilibre en diminuant le poids du multiplicateur a 2.

PassStrg PassStrg + (SymbolCount(avar) * 6) 'deviendrait PassStrg PassStrg + (SymbolCount(avar) * 2)

Avec cette seule modification, le résultat tomberait à 56 - Faible.
J'avais déjà mis en ligne ma révision du programme lorsque j'ai eu cette dernière idée, si tu crois que cela en vaux la peine je ferai une nouvelle mise à jour.

Donc en résumé, les deux fonctions PassWrdStrg (194) et PassWrdStrgSymb (116) sont disponibles, les gens n'auront qu'à choisir celle qui leur convient.

Cordialement,
DanielGT
us_30
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
8
Bonjour à tous,

DanielGT, je comprends bien ta position... tu penses d'abord aux mots de passe qu'humainement on pourrait faire pour en donner une évaluation... La suite ASCII avec des caractères non alphabétiques représentent alors pour toi une chose qu'un humain ne peut (ne voudra ou ne sera) pas faire comme mot de passe. Mais c'est pourtant avec ces derniers qu'on obtient la meilleure évaluation... d'où une forme de "paradoxe"...

Pour l'exemple que j'indiquais, j'ai précisé "si c'est un programme qui tente de casser un mot de passe", donc un extension à ce que tu imagines (ce n'est plus humain)... mais on casse rarement un mot de passe autrement que par un programme... De plus, que ce soit un programme ou pas, si l'évaluation accorde trop d'importance aux caractères spéciaux, alors cela veut aussi dire que ces derniers deviennent des caractères privilégiés, donc restreint la recherche du mot de passe avec ces derniers (ou les rends plus probables)... Bref, J'insisterai pas plus.

Pour l'histoire des claviers, cela serait une bonne chose t'en tenir compte, comme tu le dis...

Néanmoins, je reste sur mon 10/10... même si je pense qu'on peut essayer d'aller plus loin, cela reste une bonne base. Bravo et merci.

Amicalement,
Us.