====== KeePass[X] sous Debian ======
===== Panorama =====
KeePass[X] est un code applicatif permettant de gérer ses identifiants dans un trousseau unique. Ce trousseau est stocké dans une base de donnée spécifique dont l'accès est protégé par un super-clé.
==== Le choix entre deux applications ====
Ce code applicatif est mis à disposition des utilisatrices sous deux formes : [[https://keepass.info/index.html|KeePass]] et [[https://www.keepassx.org/|KeePassX]]. L'une et l'autre sont des applications((Des logiciels proposant une interface graphique.)) dont l'évaluation des mérites respectifs sort du cadre de cette fiche. Une base de données créée par l'une des deux application peut être consultée et modifiée sur l'autre application.
==== Deux générations de bases de données ====
À la date de la rédaction, la base de données existe dans deux formats, nommés "1" et "2". Les différences entre ces deux formats sont suffisamment importants pour qu'une application ne fonctionne qu'avec l'un ou l'autre des formats. Il existe donc une version de //KeePass// gérant ses bases de données au format "1" (f1) et une autre version du logiciel gérant les bases au format "2" (f2). Idem pour //KeePassX//. Cette distinction se retrouve dans l'extension des noms de fichiers contenant ces bases de données : .//kbd// pour //f1//, //.kbdx// pour //f2//.
Pour des raisons compréhensibles, les version de KeePass[X] utilisant le format "1", plus ancien, ignorent tout du format "2". En revanche les versions de KeePass[X] utilisant le format "2" sont plus ou moins capables d'importer ou d'exporter des bases au format "1". Afin d'alléger l'écriture, les noms des applications seront suffixées par le format lorsque ce sera nécessaire (par exemple : KeePassX_2, KeePass_1).
==== Disponibilité sous Debian ====
Le site officiel de Debian permet de consulter la [[https://packages.debian.org/search?keywords=keepass&searchon=names&suite=all§ion=all|liste des versions de KeePass[X]]] proposés par cette distribution, en fonction de la version de Debian((oldoldstable, oldstable, stable, testing, unstable.)).
À la date de rédaction, une utilisatrice de Debian peut retrouver avec les versions suivantes : KeePassX_1, KeePassX_2, KeePass_2. Si l'on partage((La manière de "partager" donne lieu à d'âpres débats mais dépasse le cadre de cette fiche.)) une base entre plusieurs systèmes Debian, il faudra tenir compte des limites du plus anciens.
===== Convertir des bases d'un format à l'autre =====
==== Convertir de f1 vers f2 ====
Cette opération est simple à réaliser si on utilise une version de KeePass[X] travaillant au format "2". KeePass_2 comme KeePassX_2 permettent d'importer des bases au format "1". Le format de destination (f2) étant plus riche que le format d'origine (f1), l'import se fait sans perte d'information. L'opération préserve l'organisation de la base, les icônes ainsi que la super-clé protégeant l'accès à la base, une fois transformée.
==== Convertir de f2 vers f1 ====
Le format "2" permettant de conserver un plus grande richesse d'informations que le format "1", la conversion peut entraîner la perte de certaines informations((Les informations similaires figurant dans les 2 formats sont préservées.)). Toutefois, elle préserve la super-clé protégeant l'accès à la base, une fois transformée.
=== Conversion directe ===
Cette technique est à privilégier car elle conserve le maximum d'information : organisation, icônes, dates, super-clé, etc. Elle ne manipule que des fichiers chiffrés, protégés par la super-clé.
Depuis l'application KeePass_2, la conversion d'une base vers le format "1" est presque((Voir la limite plus loin…)) triviale. L'élément de menu "file > export" ouvre une boîte de dialogue permettant d'exporter la base courante vers plusieurs formats et sous-formats. Dans notre cas, il suffirait((Voir la limite plus loin…)) de choisir l'option "KeePass KBD (1.x)".
En pratique, seules les utilisatrices de la version Window$ de KeePass_2 bénéficient de cette fonctionnalité ! L'option qui nous intéresse figure bien dans la version Linux mais elle est inopérante :-(
Vous pouvez utilisez une VM motorisée par une [[https://www.cnet.com/news/how-to-run-windows-8-1-for-free-for-90-days/|version d'évaluation de Window$]]
=== Formats intermédiaires ===
KeePass_2 permet d'exporter une base au format natif vers des sous-formats intermédiaires. Les principaux sont le sous-format //CSV// du format "1" et les sous-formats //XML// des formats f1 et f2.
Ces sous-formats partagent l'inconvénient de stocker les identifiants en clair, c'est-à-dire sans aucun chiffrement. Ils doivent donc être manipulés avec d'extrêmes précautions((Utilisation temporaire, suppression destructive des fichiers, contrôle des accès réseau pendant l'utilisation, sécurisation du système d'exploitation, etc.)).
Dans une démarche de conversion de f2 à f1, l'intérêt de ces formats intermédiaires tiendra aux facilités de conversion qui en découleront.
Le tableau suivant indique les possibilités d'import et d'export de différentes applications :
^ logiciel ^ exports ^ imports ^ vref ^
| KeePassX_1 | txt((Ce format est conçu pour être facilement exploitable en tant que fichier texte et/ou être imprimé.)), XML(f1)| XML(f1) | 0.4.3-Debian 8 |
| KeePassX_2 | CSV | kbd | 2.0.2-Mint 18.3, 2.0.3-Debian 9, 2.0.3-W$ 7 |
| Keepass_2 | CSV, kbd, kbdx, XML(f2) | CSV, kbd, kbdx, XML(f1,f2), kbdx(repair) | 2.28-Debian 8, 2.38-W$ 7|
== CSV ==
Le sous-format //CSV// paraît séduisant mais il ne préserve que les informations capitales(("Account","Login Name","Password","Web Site","Comments".)). Lors de l'export, toute l'organisation interne de la base sera perdue. L'export/import via csv n'est donc qu'une solution dégradée utilisable en dernier recours((Par exemple, mieux vaut un import dégradé que la perte pure et simple de centaines ou milliers d'identifiants !))…
== XML ==
Le sous-format XML véhicule plus d'informations que le sous-format CSV. Cet avantage à pour inconvénient d'entraîner la création deux variantes xml, l'une pour f1, l'autre pour f2. Un fichier exporté par KeePass_2 au sous-format XML-f2 sera inexploitable par KeePassX_1 qui ne sait importer que des fichiers XML-f1…
À la différence du sous-format CSV,, le sous-format XML conserve les regroupements en catégories qui sont présents dans la base d'origine. Il permet donc de conserver l'organisation de la base.
=== Utilitaires de conversion ===
Pour compléter le panorama, on peut mentionner l'existence de deux utilitaires qui ont pour seule fonction de convertir un sous-format dans un autre.
== XML-f2 vers XML-f1 ==
L'utilitaire [[https://github.com/dvorka/keepass2-to-keepassx|keepass2-to-keepassx]] prend une base exportée en XML-f2 et la traduit en XML-f1. Bien sûr, on perd les informations du format f2 qui n'ont pas d'équivalent en f1.
Cet utilitaire multiplate-forme fonctionne sous Java ((Testé avec succès sous java version "1.7.0_151", OpenJDK Runtime Environment (IcedTea 2.6.11) (7u151-2.6.11-2~deb8u1), OpenJDK 64-Bit Server VM (build 24.151-b01, mixed mode).)). Malgré sa dénomination générale, il ne fonctionne qu'à partir d'un export XML. Lors du test export-traduction-import avec la version 1.4, l'organisation initiale a bien été transportée mais quelque peu malmenée (1,2,3,…, se transformant en 1,1.1,1.1.1,…)((Quelques glisser-déposer suffiront si vous n'avez pas trop de regroupements…)).
L'installation et l'utilisation de //keepass2-to-keepassx// sont décrites dans sa [[https://github.com/dvorka/keepass2-to-keepassx/blob/master/README.md|documentation]].
== CSV-f1 vers XML-f1 ==
L'utilitaire [[https://github.com/asfaltboy/csv2keepass|csv2keepass]] permet de convertir un fichier CSV(f1) en fichier XML-f1. Il permet notamment d'importer dans KeePassX_1 un fichier exporté par KeePassX_2 ; le premier ne sais exporter qu'en CSV alors que le second ne sait importer qu'en XML (pourquoi faire simple quand on peut faire compliqué !).
L'utilitaire //csv2keepass// un programme python dont l'installation et l'utilisation sont décrites dans sa [[https://github.com/asfaltboy/csv2keepass/blob/master/README.pod|documentation]].
==== Conversion kbdx vers kbd sous Linux ====
La limitation des capacités d'export de KeePass_2 sous Linux complique l'export de base de données gérées sous KeePass[X]_2 vers KeepPassX_1.
=== Passer par Window$ ===
C'est la méthode que j'utilise car elle restitue au mieux l'intégralité des informations compatibles avec le format //f1//. Afin de limiter les problèmes de sécurité inhérents à W$, j'utilise une VM munie d'une version d'évaluation de W$((On se la procure sur le [[https://www.microsoft.com/en-us/evalcenter/|centre d'évaluation de Micro$oft]] (voir aussi [[https://www.cnet.com/news/how-to-run-windows-8-1-for-free-for-90-days/|How to run Windows 8.1 for free for 90 days]].)). La procédure est la suivante :
- copier la base sur une clé USB
- lancer la VM
- réaliser d'éventuelles mises à jour et installations
- faire un snapshot de la VM
- couper l'accès réseau de la VM
- monter la clé USB sous W$
- lancer KeePass_2
- ouvrir la base à convertir
- l'exporter en kbd (clé USB)
- quitter W$
- restaurer le snapshot
- lancer KeepassX_1
- ouvrir la base exportée (kbd)
=== Utiliser KeePass_2 Linux et KeePass2 to KeePassX ===
Cette méthode permet de préserver à minima l'organisation de la base. Elle fait appel à un utilitaire de conversion nécessitant Java.
- lancer KeePass_2
- ouvrir la base à convertir
- l'exporter en XML_f2
- convertir le fichier de XML_f2 vers XML_f1 à l'aide de //KeePass2 to KeePassX// (sous JRE Linux)
- lancer KeePassX_1
- importer le fichier XML_f1
- corriger l'organisation
=== Utiliser KeePassX_2 Linux et csv2keepass ===
C'est la plus mauvaise solution car on perd l'organisation de la base.
- lancer KeePassX_2
- ouvrir la base à convertir
- exporter en CSV
- convertir le csv en XML_f1 à l'aide de csv2keepass
- importer le fichier XML dans KeePassX_1
===== Quelle version choisir =====
Quelques mots, malgré tout, à propos les versions disponibles. Sauf si vous êtes bloquée sur //Wheezy//((oldoldstable au moment de la rédaction.)), le choix se pose entre KeePass_2 et KeePassX_2. Les deux applications partageant le même format natif de base de donnée, on peut même alternativement utiliser l'une ou l'autre ! Aucune des deux ne brille par la qualité de son intégration dans l'environnement de bureau. C'est donc plutôt une question de goûts personnels et de contextes d'utilisation.
==== KeePassX ====
Comme l'indique le "X", il s'agit d'une application prévue pour s'intégrer dans le système de fenêtrage [[https://en.wikipedia.org/wiki/X_Window_System|X11]]. Cette application graphique est donc disponible sur un très grand nombre de plates-formes. Cette intégration à un relativement bas niveau se paie par une faible intégration à l'environnement bureau. Elle est disponible sous forme de paquetage dans les dépôts officiels Debian((En version 1 pour Wheezy, 1 et 2 pour Jessie, 2 pour les suivantes)).
Les fonctionnalités proposées sont minimales en comparaison de KeePass. Pire, KeePassX_2 perd deux fonctionnalités intéressantes((Personnellement, j'utilisais les deux, intensément !)) que l'on trouvait dans KeePassX_1 :
* le choix du navigateur utilisé par KeePassX, indépendamment du navigateur par défaut définit au niveau du gestionnaire de bureau,
* l'utilitaire de génération de mots de passe.
Toutefois, la version 2 apporte une fonctionnalité bien pratique : le remplissage automatique des formulaires d'authentification. Elle ne s'applique malheureusement qu'au navigateur par défaut de l'environnement de bureau.
=== Installer KeePassX_2 sous Jessie ===
Par défaut, Jessie installe KeePassX_1. Il faut avoir préalablement ajouté les [[https://backports.debian.org/Instructions/|dépôts backports]].
# apt-get -t jessie-backports install keepassx
==== KeePass_2 ====
L'application KeePass n'est guère utilisée qu'en version 2. Dans Debian, elle est dénommée //KeePass2//. Elle est disponible sous forme de paquetage dans les dépôts officiels Debian.
KeePass est une application Window$. Elle n'est disponible sous Linux qu'au prix d'un portage minimal s'appuyant sur les bibliothèques [[http://www.mono-project.com/|Mono]]((Implémentation open source du framework .NET.)). Il en découle une piètre intégration à l’environnement de bureau, aussi bien graphique que fonctionnelle. Comme vu dans une section précédente, certaines fonctionnalités présentes dans les listes déroulantes de commandes sont inopérantes sous Linux… Ça donne une idée de la qualité du portage, tout comme la disparition du défilement à partir de la molette de la souris ; on est bien peu de choses :-/ En contrepartie, cette technique de portage permet de disposer rapidement - car simplement - des versions récentes développées pour Window$.
Malgré ces restrictions, KeePass2 propose des fonctionnalités qui méritent d'être explorées. J'apprécie tout particulièrement de retrouver (en mieux) les fonctionnalités abandonnées par KeepPassX_2 : génération de mots de passe et choix du navigateur. Cette dernière fonctionnalité permet non seulement de définir un navigateur par défaut, différent de celui de l’environnement de bureau, mais aussi d'imposer un navigateur spécifique((Cette possibilité permet d'adosser chaque site à un profil de navigation adapté : extensions, cookies, géolocalisation, sécurité…)), [[https://keepass.info/help/base/autourl.html|fiche par fiche]]((Voir aussi[[http://www.geeksengine.com/article/keepass-7.html|Open URLs in different web browsers]])). On regrettera la syntaxe "à la w$" mais ça fonctionne.
==== KeePassXC ====
On peut également mentionner [[https://keepassxc.org/|KeePassXC]] qui est une variante((Un //fork//.)) de KeePassX_2. Ses ambitions : être moins buggué que KeePassX_2 et proposer quelques améliorations dont l'intégration aux navigateurs les plus courants. L'application signe le retour du générateur de mots de passe mais celui, bien plus important, du choix du navigateur.
Les dépôts officiels Debian ne proposent l'application que pour les versions //testing// et //unstable//((À la date de la rédaction.)). Des [[https://keepassxc.org/download/#linux|paquetages non officiels]] sont proposés pour Wheezy(7), Jessie-8) et Strech(9)((Respectivement oldoldstable, oldstable et stable à la date de la rédaction.)). À vous de voir si, pour un composant logiciel de sécurité, les améliorations proposées par rapport à KeePassX_2 compensent la perte de mise à jour automatique via les dépôts officiels…