Gestionnaire de mots de passe avec connexion automatique
![]() |
![]() |
🆕 - Nouveautés
Nouvelle de technique pour faire de l'autocomplétion : le logiciel utilise maintenant une extension pour faire de l'autocomplétion. Cette extension communique avec un serveur local géré par l'application. L'extension détecte les pages de connexion et remplit automatiquement. Le serveur lui, communique les informations de connexion à l'extension. Cette nouvelle technique a pour avantage de résoudre de nombreux problèmes présents auparavant avec Selenium, tels que :
- l'obligation de lancer le navigateur dans un mode spécial depuis le logiciel
- l'autocomplétion qui ne fonctionnait que dans le dernier onglet ouvert
- l'impossibilité d'ouvrir plusieurs instances du navigateur
- des problèmes de saisie de caractères accentués
- le refus de certains sites de fonctionner en raison de la détection d'un navigateur en mode robot
- la gestion manuelle des sites qui mettent du temps à charger avec l'option "long"
- la boucle infinie en cas de mauvais mot de passe qui faisait le logiciel tenter de se connecter indéfiniment
Avec cette amélioration, tous ces problèmes sont désormais du passé. L'option "long" étant devenue inutile, elle a été supprimée et remplacée par l'option "submit". Cette option vous permet de décider site par site si vous voulez que l'extension soumette automatiquement le formulaire de connexion ou si cette dernière doit se contenter de remplir les champs.
L'extension est disponible sur le store firefox.
- Nombreuses corrections de bugs et amélioration de la stabilité.
- Nombreuses améliorations de l'interface graphique.
- Ajouts de raccourcis claviers.
- Génération automatique de mots de passe lors de changement de paramètres de génération.
- Changement de l'interface graphique, passage de Tkinter à CustomTkinter :
![](/theodubus/gest_mdp/raw/main/readme_documents/new.png)
⚙️ - Installation
git clone https://github.com/theodubus/gest_mdp.git
cd gest_mdp
pip install -r requirements.txt
Si vous voulez également profiter de la fonctionnalité de connexion automatique, il faut installer une extension pour votre navigateur. Pour cela, rendez-vous sur le store firefox.
Cette extension n'est pour le moment disponible que pour Firefox, faites-moi savoir si vous voulez que je la rende disponible pour Chrome ou tout autre navigateur.
sudo apt install python3-tk
sudo apt install xclip
Ces opérations peuvent être nécessaires sous linux. La première ligne
sert à installer Tkinter
dans le cas ou l'installation avec pip échoue.
La deuxième ligne sert à installer xclip
, qui est utilisé pour pouvoir
copier des mots de passe dans le presse-papier.
💻 - Accès au logiciel
-
Option 1 : Lancer directement le programme depuis un terminal :
python3 /path/to/gest_mdp/main.py
-
Option 2 : Ajouter les droits d'exécution à
main.py
, puis créer un raccourci clavier contenant la commande/path/to/gest_mdp/main.py
-
Option 3 : Utiliser le fichier
gest.desktop
fourni dans le dossieradditional_resources/
. Il faut donner les droits d'exécution aux fichiersgest.desktop
etmain.py
. Ensuite, il faut modifier les chemins dans le fichiergest.desktop
pour qu'ils correspondent à votre installation. Enfin, il faut copier le fichier dans le dossier~/.local/share/applications/
. Cette solution rendra l'application disponible dans la liste de vos applications.
-
Option 1 : Lancer directement le programme depuis un terminal :
python C:\path\to\gest_mdp\main.py
-
Option 2 : Utiliser le fichier
gest.bat
fourni dans le dossieradditional_resources/
. Il faut modifier les chemins dans le fichiergest.bat
pour qu'ils correspondent à votre installation. Vous pouvez ensuite soit utiliser directement ce fichier, soit créer un raccourci vers ce fichier, ce qui vous permettra de définir une icône. Une image au bon format,logo.ico
est également disponible dans le dossieradditional_resources/
.
🛠 - Fonctionnalités
Vous pouvez stocker des nouveaux mots de passe en cliquant
sur le bouton Nouveau
ou dans Options > Données > Nouveau compte
. Seul le nom du compte
et le mot de passe sont obligatoires.
-
La case
Lien
correspond au lien vers la page de connexion si vous souhaitez mettre en place la connexion automatique pour ce compte (incluez le lien entier avec https://). -
La case
prio
permet de définir une priorité pour la connexion automatique (ex : si vous avez plusieurs comptes Amazon). -
La case
submit
permet de préciser si vous voulez que le formulaire de connexion soit soumis automatiquement ou si le logiciel doit seulement remplir les champs. -
Les cases en dessous le champ de mot de passe correspondent aux caractères à inclure ou non dans le mot de passe.
-
La case
no 0OIl
permet d'éviter les caractères similaires (ex : 0 et O).
Si vous ne souhaitez pas un mot de passe aléatoire, il est possible de le saisir manuellement.
Si vous le mot de passe généré ne vous convient pas,
vous pouvez cliquer sur le bouton Générer
pour en générer un nouveau.
Pour modifier un mot de passe, cliquez sur le bouton en forme de crayon à côté du compte que vous souhaitez modifier. La modification suit les mêmes règles que l'ajout.
Pour supprimer un mot de passe, cliquez sur le bouton en forme de poubelle à côté du compte que vous souhaitez supprimer.
Si vous souhaitez générer un mot de passe sans l'enregistrer, allez dans
Options > Générer
. Les paramètres de génération de mot de passe sont
les mêmes que pour l'ajout d'un mot de passe.
N'oubliez pas d'installer l'extension si vous souhaitez utiliser la connexion automatique.
Vous pouvez ouvrir un site internet en cliquant sur le bouton en forme de globe à côté du compte que vous souhaitez ouvrir. La connexion automatique fonctionnera uniquement pour les sites pour lesquels vous avez spécifié un lien de connexion.
Vous pouvez désactiver temporairement la connexion automatique en décochant la case
autoconnexion
. Cela aura pour effet d'éteindre le serveur local géré par l'application.
Vous pouvez modifier les préférences depuis Options > Profil > Modifier Préférences
.
Depuis cette page, vous pouvez décider d'activer ou non par défaut la connexion automatique, d'inclure
par défaut certains types de caractères dans les mots de passe générés, etc.
Vous pouvez modifier votre mot de passe depuis Options > Profil > Sécurité > Modifier le mot de passe utilisateur
.
Vous pouvez chiffrer vos données avec une nouvelle clé de chiffrement depuis Options > Profil > Sécurité > Changer de clé de chiffrement
.
Cette opération peut prendre du temps étant donné qu'elle nécessite la réécriture de toutes les
données (déchiffrement avec l'ancienne clé de chiffrement, chiffrement avec la nouvelle clé).
Attendez-vous à une attente de quelques secondes pour une centaine de comptes.
Vous pouvez supprimer toutes les données depuis Options > Profil > Sécurité > Supprimer toutes les données
.
Vous pouvez copier un mot de passe ou un nom d'utilisateur dans le presse-papier en cliquant sur le bouton en forme de presse-papier à côté du compte.
Vous pouvez voir un mot de passe en cliquant sur le bouton en forme d'œil à côté du mot de passe.
Pour chercher un compte, tapez le nom du compte recherché dans la barre de recherche.
Toutes vos données sont stockées dans le dossier .data/
du répertoire
de l'application. Vous pouvez donc les exporter en copiant ce dossier.
Dans ce dossier, les fichiers master_password.txt
, salt.txt
, store.txt
et
preferences.txt
contiennent respectivement votre clé de chiffrement chiffrée, votre salt,
vos données chiffrées et vos préférences.
Vous pouvez même synchroniser vos données sur plusieurs appareils,
pour cela, il faut que vous ayez installé l'application sur tous les
appareils que vous souhaitez synchroniser. Pour ce qui est des données, vous
pouvez synchroniser le dossier .data/
sur un service de stockage entre
vos différents appareils.
Vous pouvez également récupérer vos données en clair au format JSON depuis
Options > Données > Exporter les données
. Attention, le fichier produit contiendra
toutes vos données non chiffrées.
Vous pouvez importer des données depuis Options > Données > Importer des données
.
Le fichier doit être au format JSON et avoir été produit par l'application,
si les données ne sont pas au bon format, l'application ignore le fichier.
Si un compte avec le même nom existe déjà, l'application vous laisse le choix
d'écraser la version déjà existante, d'ignorer la version en cours d'importation,
ou de renommer la version en cours d'importation. Si vous choisissez une des
deux premières options, vous avez la possibilité d'appliquer le même choix
pour tous les autres comptes qui suivent. Si durant l'import vous ouvrez une
autre fenêtre de l'application, appuyer sur Annuler
ou alors fermez la
boîte de dialogue, l'importation dans son entièreté sera annulée.
🔒 - Sécurité
La sécurité des données suit les mêmes principes que beaucoup d'autres logiciels similaires.
On dérive le mot de passe de l'utilisateur (avec un salt) avec une fonction
coûtant beaucoup de temps (PBKDF2-HMAC-SHA256 avec 1M d'itérations) pour obtenir une clé de chiffrement, une clé "dérivée".
(Voir recommandation officielle
du module cryptography
).
Cette clé pourrait être directement utilisée pour chiffrer les données,
mais cela aurait pour conséquence de devoir déchiffrer et rechiffrer toutes les données
à chaque fois que l'utilisateur change son mot de passe. Pour éviter cela, on utilise comme clé
de chiffrement une clé aléatoire générée par le module cryptography
et on la chiffre avec la clé "dérivée".
Les fonctions liées à la sécurité sont implémentées dans le fichier security.py.
La puissance des ordinateurs est amenée à augmenter dans les années à venir, la fonction de dérivation du mot de passe pourrait donc devoir être modifiée. Voici différentes approches qui pourraient être amenées à être utilisées dans le futur si cela devient nécessaire :
- PBKDF2-HMAC avec SHA512 au lieu de SHA256
- Augmentation du nombre d'itérations
- Utilisation d'une fonction de dérivation différente (scrypt, argon2, bcrypt, etc.) en fonction de celle qui sera jugée la plus sécurisée à ce moment-là
🗄️ - Structure du code
.
├── 📄 LICENSE
├── 📄 README.md
├── 📄 README_en.md
├── 📄 main.py
├── 📄 gest.py
├── 📄 control.py
├── 📄 fonctions.py
├── 📄 requirements.txt
├── 📄 scroll.py
├── 📄 security.py
├── 📄 server.py
├── 📁 .data
│ ├── 📄 master_password.txt
│ ├── 📄 preferences.txt
│ ├── 📄 salt.txt
│ └── 📄 store.txt
├── 📁 additional_resources
│ ├── 📄 gest.bat
│ └── 📄 gest.desktop
│ └── 📄 logo.ico
└── 📁 images
├── 📄 arial.ttf
├── 📄 copier.png
├── 📄 copier_disabled.png
├── 📄 crayon.png
├── 📄 oeil.png
├── 📄 oeil_a.png
├── 📄 oeil_disabled.png
├── 📄 poubelle.png
├── 📄 web.png
└── 📄 web_disabled.png