URL: https://linuxfr.org/users/superzen/journaux/hutch-gestionnaire-de-mots-de-passe Title: Hutch, gestionnaire de mots de passe Authors: Babelouest Date: 2017年12月15日T02:22:46+01:00 License: CC By-SA Tags: langage_c, webcrypto, angular2, typescript, gestionnaire_de_mots_de_passe, mot_de_passe et c Score: 20 Après avoir fini [Glewlwyd](https://github.com/babelouest/glewlwyd) et branché [Angharad](https://github.com/babelouest/angharad) dessus, il me fallait un autre projet pas trop gros pour utiliser l'authentification unique, parce que un seul service qui utilise ton authentification unique, c'est un peu trop overkill on va dire. Je ne voulais pas faire mon [serveur de streaming](https://github.com/babelouest/taliesin) tout de suite, parce que je savais que ca allait être long. Je voulais un projet moins gros, sur lequel je pouvais me faire la main coté serveur de ressource, mais utile, et puis j'avais envie d'essayer Angular2. Les services que j'utilise sur le net font que, comme beaucoup d'entre nous, j'ai une tétrachiée de mots de passes. Je me refuse à utiliser toujours le même, c'est dur à retenir ou alors ca le rend trop facile à deviner. Bref, c'est pas la joie. Il existe déjà des gestionnaires de mots de passes comme [Keepass](https://keepass.info/) ou des services Web qui proposent de faire ca dans les nuages comme [1password](https://1password.com/), mais je n'avais pas vu de gesionnaire de mots de passes qui soit libre, dont on peut installer sa propre instance, disponible à distance, et si possible pas en Java ou NodeJS. De plus l'API [Web Cryptography](https://developer.mozilla.org/fr/docs/Web/API/Web_Crypto_API) est maintenant disponible dans la plupart des navigateurs modernes. C'était donc une bonne occasion de combiner tout ca pour faire mon gestionnaire de mot de passe qui ferait les choses suivantes: - Encodage/Décodage uniquement coté client, le serveur ne stocke que des blobs chiffrés qu'il sera incapable de décoder - Sous forme d'API Rest pour le serveur, et écrit en Angular2/TypeScript pour le client web - Permet de stocker des données liées à plusieurs services différents: url, nom d'utilisateur, mot de passe, questions secrètes, fichiers (de clé privée par exemple), ou autres informations que tu jugeras utile pour le service - Permet de copier le mot de passe ou autre info dans le presse-papier, sans que tu n'aies à le voir, en cliquant sur un bouton - Permet de générer aléatoirement des mots de passe selon des critères que tu lui aura défini: caractères, chiffres, majuscule/minuscule, caractères spéciaux, etc. - Permet de générer aléatoirement des réponses à des questions secrètes, pour éviter de deviner ces réponses par ingénierie sociale, la réponse aléatoire est composée de deux mots piochés dans un fichier de mots courant dans la langue que tu utilises dans l'application web - Utilisable sur ordinateur, tablette, téléphone intelligent, parce que j'ai pas envie de faire 10000 clients différents (vive Bootstrap!) Je l'ai appelé Hutch, c'est un nom que j'ai trouvé qui permettait de nommer un coffre au moyen-âge, mais je me rappelle plus où j'ai vu ca. Puis si tu tapes "Hutch" dans Google images, tu vas voir des cages à lapin mais tant pis... On peut créer un ou plusieurs coffres qui contiendront des secrets. Chaque coffre a son propre mot de passe, et le mot de passe permet de débloquer tous les secrets du coffre. Comme ca tu peux avoir un coffre pour le boulot, un pour les trucs persos, un pour ton association, etc. Si tu te fais piquer le mot de passe d'un coffre, les autres ne sont pas impactés par les éventuelles fuites. Évidemment si tu perds un mot de passe de coffre, le serveur ne pourra rien pour toi, pas de mail pour réinitialiser son coffre ou quoi, que dalle, c'est perdu. Pour pallier ca, il y a plusieurs barrières de sécurité, mais qui peuvent ouvrir des brêches énormes: - Exporter la clé principale de ton coffre, l'export peut être protégé par un mot de passe ou pas - Exporter un secret ou tous les secrets d'un coffre dans un fichier, l'export peut être protégé par un mot de passe ou pas Enfin, pour que ce ne soit pas trop pénible à utiliser non plus, tu peux garder un coffre toujours ouvert sur une machine si tu le souhaites. Comme ca tu n'as pas à retaper ton mot de passe à chaque fois, mais faut faire ca sur une machine dont tu est sûr de chez sûr. Il est disponible sur GitHub à cette adresse: [Hutch](https://github.com/babelouest/hutch) Il est en GPL V3 pour la partie serveur, écrite en C, et Affero GPL pour la partie client Web, écrite en Angular2. Épilogue, Angular2 Avec le recul, Angular2 j'en suis revenu. C'est cool, moins fouilli que AngularJS, mais c'est pas non plus la panacée. Il se base sur TypeScript qui, malgré le fait que ce soit développé par Microsoft, est quand même assez chouette. Sauf que TypeScript souffre encore beaucoup d'être pas fini. En l'occurence, au moment où je programmais Hutch, Typescript n'intégrait pas l'API Web Crypto, ce qui fait que j'ai du faire des pirouettes pour que ca soit propre dans mon code... Puis, entre le moment où j'ai commencé le projet, et le moment où je l'ai fini, Angular2 est devenu Angular3, puis 4. Maintenant, c'est [Angular.IO](https://angular.io/) tout court. En soi c'est pas grave, mais les plugins autour d'Angular, suivent mal la cadence, ou justement trop bien, et certains refusaient carrément de s'installer sur mon "vieux" Angular2...