Faciliter l'inscription et générateur de mot de passe fort

En causant avec @vit à la permanence d’ajourdhui je me disais que ça faciliterait sans doute l’inscription et la sécurité globale des comptes si on proposait par défaut un générateur de mot de passe pour créer nos identifiants et pass lors de la création d’un compte.
ça éviterait plusieurs comptes « toto:toto » et de passer les temps de création et apprentissage cesium à faire au final des formations de mot de passe.

J’ai lancé une issue sur cesium à ce propos, je me sentirai bien de mettre ça en place ue fois qu’on a défini ce qui serait bien de faire.

je me disais que dans un premier temps proposer des chaines de 128 caractères avec un bouton copier pour chaque valeur serait la base.

Oui, je pense que ça serait très pratique d’avoir un générateur de phrase de passe intégré à Cesium.
Par contre, quel est l’intérêt de « 128 caractères aléatoires chiffres, lettres, nombres, spéciaux, et non ASCII comme keepass » ? C’est long, chiant à taper, risque d’erreur de frappe importants, relecture difficile si on l’a écrit sur un carnet, etc.
Du coup, un générateur de phrase Diceware à au moins 4 mots (pour les simple-portefeuille) et 6 mots (pour les comptes membre), ça, ça serait très efficace par rapport aux critères que je viens de donner. Enfin, ce qui fait la force d’un mot de passe, c’est surtout sa longueur. Et s’il est facile à taper, pas de soucis !

Un bon mot de passe utilisateur doit pouvoir tenir dans sa tête. Les caractères ne doivent donc pas être purement aléatoires, mais être composés de mots aléatoires.

Pour éviter le bruteforce, 128 caractères c’est largement assez, on peut faire moins. Avec un dictionnaire de 10 000 mots, pour 2 mots de passe de 4 mots on a 10^32 possibilités. En supposant qu’un hash de minage bitcoin soit aussi coûteux qu’un hash scrypt, le réseau bitcoin mettrait en moyenne 200 000 ans à bruteforcer un tel mdp, et 10 000 fois plus à chaque mot ajouté. (en sachant combien de mots il y a. si on ne sait pas ça, ça prendra encore plus de temps)

Deux mdps de 4 mots me semblent suffisants, dont un de 5 mots si on veut être plus tranquille.

Password Strength

2 J'aimes

@tykayn pour cette problématique particulière, une solution spécialement adaptée existe déjà, ce sont les mnemotic.

J’ai réalisé une implémentation en Rust :

Il existe une implémentation en javascript :

2 J'aimes

http://world.std.com/~reinhold/diceware.html

avec la word list qu’on veut
http://world.std.com/~reinhold/diceware.wordlist.asc

noice tout ça; j’ai fait un POC avec un tas de caractères en attendant :smiley:
edit voilà la branche si vous voulez voir le détail: https://git.duniter.org/tykayn/cesium/-/tree/generate-id-pass

on va pouvoir mettre une lib qui va bien avec ça. Le poc est actuellement pas du tout rangé, j’ai tout mis sur la homepage pour ne pas me taper le tunnel de pages avant de s’inscrire pour faire les essais :smiley:

2 J'aimes

avec une wordlist en français siouplait, mnemonic

et 32 et 64 bits

pseudo:
calfatés entremettes dégoulinements
username:
 dédoreraient fermentera engommée transmuer trissent estrapasse
password:
 contextures scandalisasse resservirions fouineriez libéralisasses enflas

ptetre laisser une case a cocher pour avoir le choix entre mots et caractères bizarres (dfaçons c’est mon gestionnaire de pass qui gère après)

1 J'aime

N’inclure que les verbes à l’infinitif, les substantifs au singulier et les adjectifs au singulier masculin quand la prononciation est la même permettrait de s’en souvenir plus facilement. Si je me prononce « calfatés » dans la tête, est-ce que c’est é, és, ée, ées, er, ai, ais, ait ?

Ça pourrait se faire avec des cases à cocher « inclure les homophones », « inclure les flexions »… Il faut aussi penser aux accents, qui sont peu accessibles sur certains claviers.

Et puis les verbes conjugués constituant la majorité des graphies en français, on se retrouvera souvent avec des suites de subjonctifs imparfaits et de passés simples, pas terribles à se souvenir.

2 J'aimes

@tykayn comme le dit @tuxmain la question du dictionnaire de mots à utiliser est complexe.

C’est pour cela que je t’ai parlé des mnemotic, les mnemotic ont déjà leur dictionnaire de mots conçus par des linguistes pour être facile à mémoriser, tu trouveras ici le dico pour beaucoup de langues : https://git.duniter.org/tools/dup-mnemonic-rs/-/tree/master/mnemotic-gen-lib/src/langs

A noter que le principe des mnemotic c’est grand minumum 12 mots d’entropie. Donc par exemple 6 mots pour le password et 6 mots pour le salt :wink:

2 J'aimes

Bon bon, j’ai mieux dispatché mes fichiers, créé un state, un controlleur et un service exprès pour le générateur de pass.

j’ai intégré un moyen de télécharger un fichier texte contenant les infos.

Cependant pour inclure Mnemonic dans angularJS je galère. ma démo précédente était sur un projet en Angular récent, c’était super facile a ajouter.

Avec une version plus moderne du JS et d’angular j’aurai juste à importer le fichier de la lib mnemonic dans la config du bundler de l’app pour ensuite faire un import de Mnemonic dans mon service.

là à part réécrire la lib dans le service je ne vois pas comment je peux l’intégrer simplement :confused:

Bon breffe, j’ai intégré la liste de mots et l’option pour choisir entre mots et caractères.
La clé publique est ajoutée dans le fichier de compte que l’on peut télécharger ou copier d’un clic.

Plus qu’a lancer vraiment la création de compte.

4 J'aimes