1. #1
    Expert éminent sénior

    Avatar de Neckara
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2011
    Messages
    6 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : décembre 2011
    Messages : 6 398
    Points : 16 481
    Points
    16 481

    Par défaut Défi : Notez le générateur de mots de passe de iolco51

    Bonjour,

    La rubrique sécurité vous propose de noter le générateur de mot de passe de iolco51 dans le cadre de ce défi.

    N'oubliez pas que notre partenaire livre, les éditions ENI, offrira aux trois meilleures participations un livre intitulé Ethical Hacking, dont vous pouvez consulter les retours par nos membres.

    Participation :

    • Auteur : iolco51
    • Type de projet : Web
    • Tester : lien
    • Sources : lien
    • Description :

    Citation Envoyé par iolco51
    Bonjour,
    Merci pour l'idée c'est un concours sympa, n'ayant jamais été moi-meme satisfait de la grosse majorité des générateurs / évaluateurs en ligne.

    Du coup j'ai tenté de faire un petit générateur et évaluateur en javascript. Comme je le fais sur mon temps libre, et que j'en ai peu j'ai du revoir mes ambitions a la baisse: pas d'internationalisation, pas de recherche ni de génération depuis dictionnaire, pas de stratégie "customizable". Je pense que je n'aurai pas l'occasion de l'améliorer beaucoup d'ici au 01/03 donc je le poste maintenant.

    Utilisable en ligne ici: http://iolco51.free.fr/
    Sources sur github: https://github.com/lcoulet/securePassword.Js


    • En langue anglaise seulement pour le moment... Désolé! (facile à changer mais pas encore internationalisé)
    • Le moteur de génération a quelques options: la taille, les sets de caractères, et optionnellement générer des patterns plus facilement mémorisables
    • Le moteur d'évaluation est subjectivement basé sur mon opinion de ce que doit être un bon mot de passe, influencé par les ressources sur le sujet sur le net. Sur bien des points je le trouve meilleur que la plupart que l'on trouve sur le net.
    • Licence permissive Apache 2.0
    • Le choix de javascript: pas de besoin de de processing sur le serveur, pas ou peu de dépendances (Jquery et gauge.coffee pour l'UI seulement, il y aurait i18n si j'avais réalisé l'internationalisation)
    • Il n'y a aucune dépendance envers l'UI, le moteur de génération ou d'évaluation peuvent être utilisés séparément
    • Je ne suis pas codeur Javascript, merci pour votre indulgence si le code ne respecte pas les standards / best practices... C'était aussi l'occasion pour moi de pratiquer un peu ce langage.



    Ce que l'outil ne dit pas, c'est qu'un mot de passe dans la plupart des cas doit être mémorisable, et suffisamment long. Selon moi mieux vaut une grande chaine de plusieurs mots qu'un mot de passe complètement cryptique et court, ce que j'ai essayé de représenter dans la partie notation qui me convient pas mal.

    J'ai eu un peu de temps et donc ajouté le support de dictionnaires: Anglais et Francais ... Pour la vérification et la génération plus mémorisable. Mais pas encore de texte en Français - mais j'y travaille

    Merci encore pour le petit défi.
    On dit "chiffrer" pas "crypter" !

    On dit "bibliothèque" pas "librairie" !

    Ma page DVP : http://neckara.developpez.com/

  2. #2
    Membre habitué

    Profil pro
    Inscrit en
    janvier 2003
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2003
    Messages : 65
    Points : 139
    Points
    139

    Par défaut Notation

    Je commence par le plus difficile, noter ma contribution. C'est délicat et très subjectif, mais je donne 16.0/20.
    Je noterai les autres après les avoir analysés.

    fonctionnalités : 3.5 points

    • je pense avoir fourni toutes les fonctionnalités attendues, les moteurs de génération et vérification sont entièrement décorrélés de l'UI, ce que je trouve bien.
    • La vérification n'utilise pas JQuery Complexify, que je n'aime pas (voir ci-dessous), ce que je trouve bien aussi.
    • J'aurais aimé une UI multilingue, mais avoir les dictionnaires en deux langues et extensibles via API me semblent bien plus importants.
    • La vérification de robustesse donne les indications sur ce qui a été détecté, cela me plait bien aussi.
    • La vérification de robustesse utilise plusieurs critères: la taille, les séquences, les séquences correspondant aux claviers, le nombre de classes de caractères, les mots reconnus du dictionnaire.
    • vraiment portable: L'outil fonctionne sur tous les navigateurs testés: Firefox, IE, Chrome, Firefox mobile et Android, et meme node.js (bien que ce ne soit pas un browser) sous diverse platef-formes Windows 32bit 64-bit, Android, et Linux x86 et ARM.
    • Bon point: Il est possible de vérifier n'importe quel mot de passe, pas seulement celui généré.
    • Bon point 2: J'aime les patterns mémorisables, particulièrement ceux utilisant les dictionnaires, je n'en ai vu nulle part ailleurs de similaires et ils me semblent particulièrement surs et mémorisables sur de grandes chaines plus de 20 caractères.
    • Mauvais point: Le critère de vérification sur la longueur du mot de passe pourrait toutefois être amélioré en s'inspirant justement de Complexify (mais juste pour ce critère).


    Je donne donc une bonne note: 3.5

    A propos de JQuery complexify: Complexify donne 19% à "1234567890", et 27% a "qwertyuiop" qui sont parmi les plus faibles passwords et valent donc à peu près 0%, en revanche il donne 0% à "']ĎĐS(f2" qui bien que court ne sera selon moi que rarement cracké en raison des caractères peu conventionnels, les hackers étant opportunistes, les attaques par dictionnaires et rainbow tables sont utilisés car infiniment plus efficaces que la force brute.
    De plus Complexy est un plugin JQuery... Pourquoi avoir besoin de JQuery pour vérifier un mot de passe? C'est peu pratique pour l'éxécuter en dehors d'un browser


    qualité du code : 2.3 points

    • Mis a part quelques duplications et deux ou trois lignes qui devraient être supprimées, le code des fonctions est a peu près conforme à ce que j'attends.
    • Bon point: la présence de tests unitaires, même s'ils ne couvrent pas les fonctions randomisées.
    • Bon point 2: Le code n'a pas de dépendance externe (sauf l'UI qui en a peu: seulement 3 librairies, mais elle est entièrement dispensable).
    • Bon point 3: les variables ont un nom ayant du sens et j'estime que le code est lisible
    • Mauvais point: Structurellement le code ne respecte pas toujours les best practices Javascript. (voir ci-dessous)



    Idéalement je pense qu'il faudrait encapsuler le générateur et le vérificateur dans des objets, et passer les paramètres de configuration dans le constructeur. PAS DE VARIABLES GLOBALES!
    Cela peut par ailleurs affecter l'intégrabilité avec d'autre code javascript utilisant les memes noms de variables ou de fonctions.
    N'ayant pas tout le temps, j'ai préféré ajouter des fonctions que d'améliorer le code, c'est un compromis triste mais classique.
    C'est donc la plus grosse faiblesse. Je retire un point et demi sur les 4 pour ce gros détail.

    commentaire et documentation : 3.5 points ;

    • Les fonctions sont bien documentées au format JsDoc, rien à redire.
    • Des commentaires de code expliquent les parties les plus subjectives ou subtiles.
    • La documentation sur GitHub donne tout ce qu'il faut pour intégrer la librairie, configurer l'outil et générer des passwords en quelques lignes de code.


    Je mets donc 3.5 car rien n'est jamais parfait.

    sécurité de l'application : 3.7 points ;

    • Le fait que le code soit en Javascript en fait une application parfaitement sure (au sens sécurité des systèmes)... Il est en effet impossible de l'utiliser pour compromettre le serveur car tout s'exécute dans le client. D'ailleurs cela fonctionne très bien sans serveur.
    • Le code est en javascript standard, ne fait pas appel a des fonctions spécifiques aux navigateurs (UI incluse grâce a JQuery), ce qui en fait un code robuste.
    • Les tests unitaires (utilise QUnit) donnent une confiance relative dans la robustesse et la maintenabilité et peuvent aisément être complétés.
    • Les mots de passe sont générés sur des critères aléatoires en utilisant Math.random(), une fonction standard de Javascript en laquelle on peut à priori avoir confiance


    La randomisation semble bonne, mais on est jamais à l'abri d'un bug dans les implémentations de Math.random() ou dans l'utilisation qui en est faite pour assurer des patterns non facilement prédictibles, donc n'ayant pas de vérification formelle je ne peux mettre 4 et me contenterai d'un 3.7.

    design et inventivité de l'interface : 3 points.

    • Toutes les options de configurations sont présentes, mais pourraient être mieux présentées.
    • Bon point pour le code couleur sur la validation et la jauge, un autre pour le thème sombre qui me plait (juste un CSS). C'est plutôt visuel.
    • Autre bon point pour le gros champs du mot de passe et la fenêtre permettant de copier/coller tout de suite.


    Je ne suis pas mécontent de l'interface mais j'ai toutefois vu mieux ou plus inventif chez d'autres participants, je retire donc un point.

Discussions similaires

  1. Réponses: 6
    Dernier message: 06/04/2014, 18h58
  2. Réponses: 4
    Dernier message: 15/03/2014, 23h16
  3. Réponses: 1
    Dernier message: 14/03/2014, 00h04
  4. Réponses: 1
    Dernier message: 13/03/2014, 23h43
  5. Défi : Notez le générateur de mot de passe de Adrael66
    Par Neckara dans le forum Sécurité
    Réponses: 1
    Dernier message: 05/03/2014, 15h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo