Comment je me suis fait un gestionnaire de mots de passe

Les mots de passe sont la plus ancienne méthode d'authentification dans les technologies de l'information, encore largement utilisée aujourd'hui. Hélas, il est tout simplement impossible de garder en mémoire les mots de passe de toutes les ressources Internet, à condition qu'elles soient toutes différentes et complexes! Ici, les gestionnaires de mots de passe viennent à la rescousse d'une personne, prenant cette tâche sur eux: une personne ne se souvient que d'un seul mot de passe principal, qui donne accès à tout le reste.



Je n’ai pas aimé les gestionnaires de mots de passe existants: il est peu pratique de synchroniser la base de données de mots de passe entre différents appareils et systèmes d’exploitation; de plus, les programmes de gestion sont souvent ouvertement mal protégés . Une fois que j'ai lu des articles sur la cryptographie, la pensée m'est venue: pourquoi ne pas créer un gestionnaire de mots de passe qui, au lieu de stocker les mots de passe, les calculera?



La première façon de mettre en œuvre cette idée qui me vient à l'esprit est les fonctions de hachage cryptographique. À première vue, tout est cool: nous sélectionnons une fonction persistante (disons, SHA-3 dans la version 224 bits), lui donnons le mot de passe principal qwerty et le type de compte vk en entrée, et obtenons instantanément 56 caractères de l'ensemble 0123456789abcdef. J'ai immédiatement trouvé deux projets similaires: piratés et potentiellement piratés... Cette approche pose un gros problème: les fonctions de hachage cryptographique sont conçues, entre autres, pour être aussi rapides et peu exigeantes que possible pour les ressources, et il est donc possible d'organiser un dictionnaire ou une attaque par force brute complète du mot de passe principal en utilisant le mot de passe intercepté pour un site sur le CPU (relativement lent), le GPU , FPGA (beaucoup plus rapide), ASIC (très rapide). Pour mener de telles attaques sur des algorithmes de hachage populaires sans utiliser de salage, des tables arc-en-ciel peuvent également être utilisées, ce qui accélère considérablement le processus de piratage sur le processeur.



Heureusement, il existe une autre option d'implémentation - des fonctions pour obtenir des clés. En un mot, ils effectuent un hachage, mais relativement lentement (par exemple, une seconde sur un processeur ordinaire) et avec une consommation de ressources relativement importante (par exemple, 16 mégaoctets de RAM) pour rendre les attaques par force brute et par force brute aussi difficiles que possible. Parmi les fonctions PBKDF2 , bcrypt et scrypt modernes qui me sont familières , scrypt avait l'air le mieux: créé en tenant compte de l'expérience des deux premiers, résistant avec succès à l'informatique sur GPU et microcircuits (FPGA et ASIC) et conçu pour une flexibilité de personnalisation pour n'importe quelle tâche. J'ai pensé à la mise en œuvre de ce projet, mais pour une raison quelconque, je l'ai mis en veilleuse. Et en vain.



Cryptographe Nadim Kobeissifait un tel gestionnaire de mots de passe npwd en JavaScript (fonctionne comme une application de bureau via Node.JS). J'ai installé l'utilitaire sur un ordinateur Linux et Windows, ainsi que sur un ordinateur portable Linux, j'ai commencé à l'utiliser, et j'ai vraiment aimé. Vous entrez le seul mot de passe principal et le type de compte (par exemple, "twitter") dans l'application, et après quelques secondes votre presse-papiers contient déjà un mot de passe complexe calculé spécifiquement pour ce compte, de plus, piratez votre mot de passe principal (lire: tous vos mots de passe) par mot de passe pour un compte sera très, très difficile.



Mais il y avait aussi un problème. La version Windows a vraiment donné un mot de passe au bout de quelques secondes, mais sous Linux (y compris sur le même ordinateur!) Il a fallu 15 secondes pour les calculs, ce qui était ennuyeux. Au début, je viens de réduire une constante, rendant le mot de passe principal moins sécurisé, mais ensuite j'ai pensé - pourquoi ne pas réécrire l'application en C, car cela fonctionnera probablement beaucoup plus rapidement! J'étais particulièrement encouragé par l'idée que j'avais un plan pour ce projet depuis longtemps, mais j'étais lent, et quelqu'un l'avait mis en œuvre avant moi.



Après quelques jours de travail tranquille, j'ai créé mon propre gestionnaire de mots de passe cpwdentièrement compatible avec l'original. C'était amusant! Après un peu d'optimisation, j'ai réussi à atteindre la vitesse élevée souhaitée. Je n'ai pas essayé de porter cpwd sur Windows, mais cela devrait être facile. Sur la page GitHub du projet, j'ai rassemblé une collection de liens vers des projets similaires dans le monde universitaire et au-delà - il s'est avéré que l'idée est en fait assez ancienne.



Bien sûr, ce n'est pas une solution miracle, mais cela fonctionne pour moi. En cours d'utilisation, je suis tombé sur un problème: certains sites ont des exigences intéressantes pour les mots de passe tels que "pas plus de 20 caractères", "il doit y avoir une grande lettre, une petite lettre, un chiffre et un caractère spécial", du coup, le mot de passe généré par npwd / cpwd nécessite parfois un travail manuel avant d'entrer ... Heureusement, il n'y a pas beaucoup de sites de ce type.



L'original a été publié sur mon blog le 7.08.15. 5 ans se sont écoulés et j'utilise toujours cet utilitaire.



All Articles