Utilisation de passwordstore.org - Gestionnaire de mots de passe de style KISS

Bonjour à tous. Dans cet article, je voudrais partager mon expérience dans la configuration et l'utilisation d'un gestionnaire de mots de passe pour Linux, et pas seulement pour sa simplicité, en utilisant les outils déjà présents dans le système et la possibilité de travailler exclusivement à partir de la console. Plus précisément, les problèmes liés à la génération et au stockage de la clé secrète gpg, ainsi que la configuration de la collaboration entre pass, gpg, git, github et le navigateur, seront affectés. Tout est sous Linux, Windows et Android.


Qu'est-ce que c'est et comment ça marche


Techniquement, pass est une liaison très simple sur GnuPG et git écrite en bash. Chaque mot de passe (et les informations associées, telles que la connexion) sont stockés dans un fichier crypté. La recherche du mot de passe souhaité est effectuée par le nom du fichier, le cryptage - en utilisant GnuPG, la synchronisation entre les appareils - en utilisant git.


En plus de la passe d'origine, il existe deux projets plus populaires compatibles avec celle-ci, exécutés sous Windows:


  1. QtPass . Une application graphique écrite, comme vous pouvez le deviner, en Qt.
  2. Gopass . Une application en ligne de commande écrite en go. Sous Windows, je l'utilise. Cependant, à mon avis, les développeurs ont commencé à y ajouter trop de fonctionnalités supplémentaires, tout en abandonnant leur intuitivité.

Le développeur du pass est Jason Donenfeld, qui est également l'auteur de WireGuard (implémentations VPN basées sur des normes de cryptographie modernes, "œuvre d'art par rapport à OpenVPN et IPSec" selon Linus Torvalds, qui est susceptible d' apparaître dans le noyau Linux 5.6).

Création de clé secrète


GnuPG - un système de cryptage et de signatures électroniques. Malgré les défauts (par exemple, un article critiquant le gpg), c'est la norme de facto depuis plus de 20 ans. Même l'article sur le lien a du mal à nommer un outil alternatif pour crypter les fichiers.


Le processus de création d'une clé secrète dans la console est décrit par exemple sur habr , mais pourquoi ne pas le faire dans l'interface graphique? Dans le projet KDE, ils ont créé une interface pour le GPG appelée Kleopatra . Les utilisateurs de Linux le trouveront dans les dépôts, et dans gpg4win, Kleopatra est prêt à l'emploi.


Dans le menu, sélectionnez File - New Key Pair - Create a personal OpenPGP key pair .


Saisissez le nom et l'e-mail. Pas besoin de vous inquiéter de les changer à l'avenir. GPG vous permet d'ajouter librement un nouvel uid à la clé et de supprimer ceux existants. Si vous souhaitez signer vos validations git avec la clé créée et voir les cases à cocher "Vérifié" en face d'eux, vous devez spécifier un véritable e-mail ayant le statut "confirmé" dans votre compte github.


Ensuite, cliquez sur Advanced Settings pour configurer les paramètres clés.



Dans la section Key Material , sélectionnez ECDSA/EdDSA + ECDH . Je préfère ne pas utiliser l'algorithme RSA classique, mais basé sur les courbes elliptiques ed25519 / cv25519. Leur principal avantage par rapport à RSA du point de vue de l'utilisateur final est la plus petite taille de clé avec la même puissance cryptographique. Il est avancé que la clé ed25519 256 bits est à peu près aussi puissante que la clé RSA 3072 bits. Le seul avantage de ce dernier est sa forte prévalence, notamment dans les systèmes matériels.


Vous pouvez également sélectionner les familles de courbes Brainpool et NIST dans le menu. Cependant, ces derniers sont soupçonnés d'avoir une porte dérobée de la NSA, et les premiers ont également des plaintes mineures. Par conséquent, ed25519 et cv25519 proposés par le célèbre cryptographe Daniel Bernstein sont le meilleur choix.


Un fait intéressant: dans la norme d'authentification FIDO U2F (dont Google a activement participé au développement), ce sont les courbes NIST qui sont utilisées. De plus, par exemple, Android Keystore a son support, mais il n'y a pas de support pour ed25519. Pourquoi est-ce arrivé?

En conséquence, 2 sous-clés sur les courbes elliptiques seront créées. L'un pour les signatures, l'autre pour le chiffrement, ce dont nous avons besoin. GPG ne permet pas d'utiliser une sous-clé pour les deux, malgré le fait que cela soit algorithmiquement possible (il existe des fonctions correspondantes, par exemple, dans la bibliothèque libsodium ).


Si vous prévoyez d'utiliser cette clé pour travailler avec git, dans la section Certificate Usage du Certificate Usage , vérifiez les éléments de Signing et d' Authentication .


À l'étape suivante, il est proposé de trouver un mot de passe avec lequel la clé sera protégée. Étant donné que la clé sera utilisée pour crypter toutes les données du stockage, ce mot de passe est un mot de passe principal. Il vaut la peine d'aborder son choix avec une pédanterie particulière.


Génération de mot de passe principal


Bien sûr, vous pouvez toujours générer une chaîne aléatoire à partir d'un nombre suffisant (par exemple 20) de caractères. Cependant, il est presque impossible de se souvenir et difficile d'entrer sans erreurs, en particulier sur un smartphone. Par conséquent, l'EFF recommande d'utiliser des phrases secrètes à la place dans votre guide .


La méthode fonctionne comme ceci: prenez un dictionnaire suffisamment grand (EFF propose plusieurs dictionnaires, par exemple celui-ci ) et sélectionnez-en au moins 6 mots aléatoires. Vous pouvez choisir à votre guise, même sans ordinateur, en utilisant un dé ou une pièce. Cette méthode est appelée diceware . Je n'ai pas encore atteint les dés et les pièces, donc je vais simplement utiliser l'utilitaire shuf inclus avec GNU coreutils:


 $ shuf --random-source=/dev/random -n 6 ./eff_large_wordlist.txt 51345 rendering 24564 edging 65652 vivacious 31343 footprint 55261 snore 24436 earache 

Nous enregistrons cette phrase secrète dans un endroit sûr en dehors de l'ordinateur.


En conséquence, une clé secrète sera créée. Lorsque vous travaillez dans la console, vous devez souvent indiquer son empreinte digitale, il vaut la peine d'écrire ce numéro.


Vous pouvez maintenant configurer l'intégration de gpg et git.


Intégration Gpg, Git et Github


À strictement parler, cet article est facultatif. Le passe de stockage de mot de passe est juste un répertoire avec des fichiers cryptés, ce qui signifie qu'il peut être synchronisé comme vous le souhaitez. Google Drive, Yandex.Disk, etc. etc. Si vous ne souhaitez pas utiliser git, je vous conseille de faire attention à Syncthing . Il s'agit d'un programme open source qui nécessite un minimum de paramètres et transfère les fichiers directement entre les appareils sans les stocker sur des serveurs tiers.

En tant qu'hébergement git, personne ne prend la peine d'élever son propre serveur en mettant Gitea , par exemple, cependant cela signifie le coût de son support et ne garantit pas nécessairement une grande sécurité et fiabilité. Par conséquent, moi, ne dédaignant pas d'utiliser les produits Microsoft, j'ai simplement créé un référentiel privé sur github.


Le mécanisme d'authentification standard dans git est via SSH. Il est généralement entendu que cela nécessite une clé ssh spéciale. Cependant, il est possible, sans générer d'entités inutiles, d'utiliser la clé gpg créée à l'étape précédente. Pour que la clé gpg (plus précisément, la sous-clé) soit utilisée par ssh, deux conditions doivent être remplies:


  1. il doit avoir le drapeau A - Authenticate défini;
  2. son clavier doit être écrit dans le ~/.gnupg/sshcontrol .

Le premier élément est déjà terminé, et vous pouvez obtenir le clavier avec la commande


 gpg --list-secret-keys --with-keygrip 0609C9DFEF1AA2B38DEDBADCC0544B5554068AC7 

Dans la sortie gpg, nous nous intéressons au clavier de la sous-clé 05B6641E23D720E87EE6A26020BAB214B842F2B7 ( 05B6641E23D720E87EE6A26020BAB214B842F2B7 ).


Vous pouvez maintenant télécharger la clé publique sur github. Accédez à la section SSH and GPG keys dans le profil et sélectionnez New SSH key . Dans la console, nous tapons


 $ gpg --export-ssh-key 0609C9DFEF1AA2B38DEDBADCC0544B5554068AC7 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPfj81nennAoujvw1fLzGx9iED34zk5oDMYKuUcBq5wv openpgp:0x54068AC7 

et copiez la clé ssh publique résultante.


Git peut signer des commits en utilisant gpg, et github le supporte. Je pense que c'est une fonctionnalité utile pour la sécurité. Exporter la commande gpg de la clé publique


 $ gpg --export --armor 0609C9DFEF1AA2B38DEDBADCC0544B5554068AC7 -----BEGIN PGP PUBLIC KEY BLOCK----- mDMEXcrHrBYJKwYBBAHaRw8BAQdA9+PzWd6ecCi6O/DV8vMbH2IQPfjOTmgMxgq5 RwGrnC+0G0hlbGxvIEhhYnIgPGZha2VAZW1haWwuY29tPoiQBBMWCAA4BQsJCAcC BhUKCQgLAgQWAgMBAh4BAheAFiEEBgnJ3+8aorON7brcwFRLVVQGiscFAl3WO2wC GyMACgkQwFRLVVQGiscg5AEAkh0a6OQS2CPiXq9bWB+wULHUGT6NYZhwZ3eUQCfH Zq0A/iFBJQkAZIFdqH84ksFbvv6K/LQy72NRJzK0tho6qFwHuDgEXcrHrBIKKwYB BAGXVQEFAQEHQEs6UVOtj5yMGxvRcMU577miH/Bh5kZWMJKHxsDBcXV4AwEIB4h4 BBgWCAAgFiEEBgnJ3+8aorON7brcwFRLVVQGiscFAl3Kx6wCGwwACgkQwFRLVVQG isea8wD/X5JSJW0PMu/KucytUZZo8obHa86/TUwH/8+xQ3+djuEBALugbQRmCIr5 /JYO7x5PNA0QYqhh7LIZ9nKYp0mhqpcO =dc89 -----END PGP PUBLIC KEY BLOCK----- 

et copiez ce qui est arrivé au New GPG key formulaire de New GPG key .
Les autres actions sont spécifiques à votre système d'exploitation.


Intégration de gpg et git (linux)


Le client OpenSSH utilisé par git peut recevoir des clés de deux manières: depuis le ~/.ssh et via le socket créé par le démon ssh-agent . Ce dernier peut être gpg-agent , que nous utiliserons. Dans le fichier ~/.gnupg/gpg-agent.conf vous devez écrire la ligne enable-ssh-support .


Redémarrez gpg-agent avec la commande


 gpg-connect-agent reloadagent /bye 

Après cela, il créera un socket à


 ${XDG_RUNTIME_DIR}/gnupg/S.gpg-agent.ssh 

Ce chemin (cela peut dépendre de la distribution) doit être écrit dans la variable d'environnement $SSH_AUTH_SOCK , et ssh le récupérera. On tape la commande dans la console


 ssh -T git@github.com 

et si tout s'est bien passé, après avoir entré le mot de passe principal, un message sur l'authentification réussie apparaîtra.


Intégration de gpg et git (Windows)


Plus récemment, Microsoft a ajouté OpenSSH au nombre de composants Windows disponibles pour l'installation et a également implémenté la prise en charge de sockets tels que AF_UNIX , tels que le même SSH_AUTH_SOCK . Cependant, Win32-OpenSSH n'est pas en mesure d'interagir avec gpg4win, car il n'utilise toujours que des canaux nommés.


Par conséquent, vous devez installer le Evergreen Putty. Nous écrivons dans le fichier


 ~/AppData/Roaming/gnupg/gpg-agent.conf 

enable-putty-support et redémarrez gpg-agent. Après cela, il commencera à faire semblant d'être Pageant - le démon des clés. Le fichier sshcontrol doit se trouver dans le même dossier.


Pour que le client git commence à utiliser putty, vous devez créer la GIT_SSH environnement GIT_SSH avec le chemin d'accès à plink.exe . Par exemple, j'ai cette


 C:\ProgramData\chocolatey\bin\PLINK.EXE 

À propos de git. Le client git for windows habituellement installé contient beaucoup de inutiles (au moins inutiles pour que gopass fonctionne), par exemple, sa propre implémentation d'OpenSSH. Cependant, ses développeurs font des versions plus légères qui peuvent être téléchargées sur github . Par exemple, le MinGit est 2 fois plus petit et les personnes à risque peuvent essayer MinGit-busybox. La version busybox est née du désir des développeurs de créer un client git en utilisant l'API Win32 sans couches comme MSYS2. Cependant, selon leurs propres critiques, mingit-busybox contient encore beaucoup de bugs. Vous pouvez en savoir plus sur ces efforts dans le ticket .

Assurez-vous que gpg-agent est en cours d'exécution ( gpg-connect-agent /bye ) et vérifiez la connexion à github:


 plink git@github.com 

Configuration de Git


Rien d'inhabituel ici. Je pense que les commandes peuvent être données sans commentaire:


 git config --global user.name "Hello Habr" git config --global user.email fake@email.com git config --global user.signingKey 0609C9DFEF1AA2B38DEDBADCC0544B5554068AC7 git config --global gpg.program /usr/bin/gpg git config --global commit.gpgSign true 

L'élément gpg.program nécessaire si gpg n'est pas dans le PATH .


Sauvegarde de clé secrète


La clé secrète doit être stockée de manière aussi sécurisée que la phrase secrète, c'est-à-dire à l'extérieur de l'ordinateur. Vous pouvez simplement imprimer une longue séquence de chiffres, mais la reconnaître ou saisir à partir du clavier - ce n'est pas pour les faibles de cœur. Par conséquent, je préfère générer un code QR facile à numériser avec n'importe quel smartphone. Il existe un programme qrencode spécial pour qrencode . Une image de code QR est générée comme suit:


 gpg --export-secret-key 0609C9DFEF1AA2B38DEDBADCC0544B5554068AC7 | qrencode --8bit --output secret-key.qr.png 

Bien sûr, moins il y a d'informations inutiles dans la sauvegarde, mieux c'est. Ici, une très petite taille de clé est ed25519. Merci à Daniel Bernstein!


Il existe un utilitaire paperkey spécial qui vous permet de réduire la quantité de données à la limite. Le prix de la réduction est que la clé secrète d'une telle sauvegarde ne peut être restaurée que si elle est publique. L'écosystème GPG dispose de serveurs spéciaux pour le stockage des clés publiques; vous pouvez les lire et pas seulement dans l'article https://eax.me/gpg/ .


Une sauvegarde paperkey est créée comme suit:


 gpg --export-key 0609C9DFEF1AA2B38DEDBADCC0544B5554068AC7 > pubkey.asc gpg --export-secret-key 0609C9DFEF1AA2B38DEDBADCC0544B5554068AC7 | paperkey --output-type raw | qrencode --8bit --output secret-key.qr.png 

La deuxième règle de la sauvegarde: la sauvegarde n'existe pas tant que la capacité de restaurer des données à partir de celle-ci n'est pas confirmée. Par conséquent, nous effectuons un test de résistance. Supprimez la clé secrète avec la commande


 gpg --delete-secret-key 0609C9DFEF1AA2B38DEDBADCC0544B5554068AC7 

Ensuite, nous scannons le code QR et réimportons la clé dans le GPG. En tant que scanner de code QR pour Android, j'aime BinaryEye , un programme gratuit avec une interface conviviale. Dans l'image ci-dessous - sauvegarde de la clé secrète de cet article.



 paperkey --pubring pubkey.asc --secrets from_qr.asc > secretkey.asc gpg --import ./secretkey.asc 

J'espère que vous n'utiliserez cette clé nulle part. Il est créé à des fins d'illustration uniquement.


Si tout fonctionne, vous pouvez continuer.


Utiliser (go) pass


Maintenant que nous avons une clé privée stockée et sécurisée, ainsi qu'une intégration fonctionnelle avec git, nous pouvons commencer à utiliser le pass lui-même. Je préfère le gopass, car cette liaison alternative fonctionne sous Windows.
Initialiser le stockage des mots de passe avec la commande


 gopass init 

et sélectionnez la clé secrète souhaitée dans la liste.


Travailler avec git se fait de la même manière que dans le cas d'un référentiel normal, seule la ligne de commande doit ajouter (go)pass . Nous initialisons le référentiel et y ajoutons l'origine souhaitée:


 gopass git init gopass git remote add origin git@github.com:xxx/taisho-secrets.git 

L'adresse peut être trouvée sur la page du référentiel sur github en cliquant sur le bouton Clone or download .


Gopass a une commande spécifique


 gopass sync 

effectuer à la fois git pull et git push , c'est-à-dire une synchronisation complète.


Le stockage par défaut est créé dans le dossier ~/.password-store , mais vous pouvez également spécifier votre propre chemin.
Pour travailler avec des mots de passe, la console prend en charge les commandes ls, cp, mv, search, create, etc. Vous pouvez obtenir la liste complète en tapant gopass --help , mais personnellement, je n'utilise pas la console, mais le plugin du navigateur 95% du temps.


Intégration du navigateur


Le plugin du navigateur s'appelle gopass bridge , il peut être trouvé dans la boutique Chrome et Firefox (voir lien).


Pour connecter le plugin avec gopass lui-même, vous aurez besoin d'un script auxiliaire et d'un manifeste pour la messagerie native. Ils sont créés par l'équipe.


 gopass jsonapi configure 

qui nous proposera de choisir un navigateur et un emplacement de script.


Vérifiez comment tout fonctionne. Créez un nouveau mot de passe:


 gopass new habr 

Nous répondons à toutes les questions et économisons. GPG vous demandera d'entrer un mot de passe principal pour travailler avec la clé privée.


Maintenant, nous ouvrons le menu du plugin avec un gopher bleu caractéristique, et si tout s'est bien passé, nous pouvons y trouver notre mot de passe.


Clés TOTP


Personnellement, j'utilise FreeOTP , cependant, vous pouvez travailler avec ces clés en utilisant pass. Les utilisateurs de la passe d'origine doivent installer l' extension pass-otp , et dans gopass et APS (voir ci-dessous) les fonctions nécessaires sont prêtes à l'emploi.


Pour ajouter une clé TOTP au magasin de mots de passe à l'aide de pass-otp, nous obtenons l'URL (commençant par otpauth:// ) et otpauth:// la commande


 pass otp insert totp-secret 

Que l'authentification résultante puisse être appelée à deux facteurs est un point discutable. Les développeurs de KeePassXC recommandent de stocker les clés TOTP dans une base de données distincte protégée par un mot de passe différent. Au passage, cela peut aussi se faire.


Intégration Android


L'implémentation de GnuPG pour Android s'appelle OpenKeychain . Pour le configurer, il suffit d'aller dans le menu "gestion des clés" et d'importer la clé secrète précédemment créée. Le seul inconvénient d'OpenKeychain pour moi personnellement est qu'il n'y a pas de déverrouillage par empreinte digitale.


L'implémentation du pass pour Android est appelée android-password-store , ou simplement APS.


Installez et exécutez APS. Avant de synchroniser le stockage des mots de passe, allez dans le menu "Paramètres". Là, nous aurons besoin des éléments suivants:


  1. git . L'URL résultante doit être la même que celle spécifiée sur la page du référentiel sur github. Type d'autorisation - OpenKeychain .
  2. Git utils . Dans cette section, spécifiez le nom d'utilisateur et l'adresse e-mail à partir de la clé gpg.
  3. OpenPGP . Sélectionnez OpenKeychain .
  4. Cette fonctionnalité apparue le plus récemment comprend le remplissage des mots de passe dans les applications sur Android 8.0+.

Remarque pour les utilisateurs de smartphones Huawei et tout le monde également: OpenKeychain, APS, BinaryEye, FreeOTP, ainsi que Syncthing, Telegram, Tachiyomi, KDE Connect, et bien plus encore sont disponibles dans F-Droid . Les utilisateurs de Google Play devraient l'apprécier: un catalogue de logiciels sans publicité, rootkits ou simplement logiciel indésirable du célèbre article tonsky .

Avant la saisie semi-automatique dans APS, j'ai utilisé keepass2android . Il n'est pas dans F-Droid pour la raison d'origine: il est écrit en Xamarin, mais les responsables de F-Droid n'ont pas pu installer ce framework sur leur serveur de build depuis 9 mois maintenant . Quelqu'un fait quelque chose.

Vous pouvez maintenant cloner. Sur l'écran principal, sélectionnez "cloner à partir du serveur", spécifiez l'emplacement souhaité du référentiel, vérifiez les paramètres git.


Si une tentative de travailler avec git entraîne une erreur (c'était probablement dans les versions précédentes d'APS en raison de l'utilisation d'une version obsolète de la bibliothèque jgit du projet Eclipse), alors il y a toujours Syncthing.


Conclusion


Bien sûr, pass n'est pas si facile à configurer. Cependant, pour ce prix, vous pouvez être sûr que les outils que nous utilisons (ainsi que des personnes comme Linus Torvalds ou Edward Snowden) ne seront pas obsolètes à un moment donné, ne changeront pas le format des données et ne seront pas sans support. Et s'ils le font, l'architecture modulaire simple de pass encourage la création de clients et d'extensions alternatifs.


Si vous décidez de ne pas utiliser pass, j'espère que certains des programmes mentionnés dans l'article vous seront utiles par eux-mêmes.

Source: https://habr.com/ru/post/fr479540/


All Articles