Journal Cloud Kee Pass - version « même pas encore alpha »

Posté par  . Licence CC By‑SA.
Étiquettes :
23
3
fév.
2014
Ce journal a été promu en dépêche : Cloud Kee Pass - version « même pas encore alpha ».

Plop à tous !

Je travaille depuis 2 mois à une petite application web, et je pense qu’il est temps de publier les sources car elle devient utilisable.

Problèmatique

Comme tous les gens sensés, j’utilise un mot de passe par site Internet/application/clé SSH/… Mais comme j’ai une mémoire de poisson rouge, j’ai besoin d’un « truc » pour se souvenir à ma place de tous ces mots de passe.

Pendant longtemps, j’ai utilisé un logiciel propriétaire bien connu qui était disponible sur mon iOrdinateur et mon iTéléphone (ouais, je sais, çapucépalibre). Ce logiciel exportait une version HTML que je pouvais rsync’er de manière régulière sur mon serveur. Ce logiciel, aussi bien soit il, a deux inconvénients majeurs selon moi : pas possible d’éditer en ligne (application web) et pas de synchronisation automatique entre ordinateur et smartphone sauf à passer par Dropbox ou iNuage (hors de questions pour moi).

Solution

J’ai donc décider de développer ma petite solution maison.

Pour commencer, j’ai choisi d’utiliser un format de stockage bien connu et largement utilisé : KeePass Database (format KeePass 2). Pour ce format de fichier, je peux utiliser le logiciel approprié sur mon iOrdinateur et j’ai trouvé une chouette application pour mon iTéléphone. Tout ça enregistre directement sur un partage Webdav sur mon serveur, donc pour la synchronisation, c’est parfait.

Il reste donc la partie application web à développer.

-> https://github.com/rledisez/CloudKeePass (TADA !)

État actuel

La lecture du fichier me semble opérationnelle, je n’ai pas rencontré de bug majeur. Il reste quelques fonctionnalités à implémenter (ex: téléchargement des binaires intégrés au fichier), mais pour un usage classique, ça fonctionne déjà très bien.

Le déchiffrement par clé n’est pas possible. Le code existe, mais comme il n’est pas testé, je masque la fonctionnalité dans l’interface.

L’édition n’est pas pas encore implémentée, même pas un tout petit peu (oui, c’était quand même l’une des raisons pour lesquelles j’ai commencé ce projet).

C’est testé avec Chromium, Firefox et Safari. Quand j’aurais le temps je monterais une VM Windows pour tester IE 10. IE 9 et antérieur, passez votre chemin (faut pas pousser quand même).

Comment ça marche

L’application web est en pur JavaScript, développée avec le framework SproutCore. J’utilise des librairies JS bien connues en plus de SproutCore : CryptoJS, jDataview/jParser, ZeroClipboard, zlib.js et une implémentation de Salsa20.

J’ai développé le déchiffrement du fichier KDB (KeePass Database) en utilisant ces librairies.

Le déchiffrement se fait dans un WebWorker pour ne pas geler le navigateur pendant l’opération qui peut prendre quelques secondes.

Pour copier un mot de passe il faut cliquer dessus. Cela se fait via ZeroClipboard qui pose un applet Flash invisible au dessus du mot de passe. J’aime pas l’idée de passer par Flash, mais c’est infaisable en pur JS.

Comment tester

Vous pouvez récupérer les sources sur github et les compiler après avoir installer SproutCore (http://sproutcore.com/install/). Il ne vous reste plus qu’à mettre en ligne le résultat de la compilation (http://wiki.sproutcore.com/w/page/12412888/Deployment-Introduction)

Vous pouvez aussi utiliser la version que j’ai généreusement mise en ligne pour vous : http://web.ledisez.net/CloudKeePass/

Une fois l’application chargée dans votre navigateur, entrez l’URL de votre fichier KDB ou glisser le de votre disque dur vers le champ URL. Tapez votre passphrase et amusez vous. (note : les entêtes CORS peuvent vous jouer des tours… C’est pas ma faute, corrigez la conf de votre serveur)

Une fois l’application chargée dans votre navigateur, AUCUNE requête n’est envoyée vers le serveur hébergeant l’application (bon, des fois une image qui n’était pas encore chargée, mais promis, rien de plus)

Si vous voulez utiliser un fichier de test, utilisez celui ci :
URL : http://web.ledisez.net/Test.kdbx
Passphrase : azerty

Et après ?

Ben finir d’implémenter toutes les fonctions de lecture, bien débugger et sortir la version alpha 0.1. En vrac :
- s’occuper des TODO et des FIXME
- téléchargement des fichiers embarqués
- activer la traduction
- peaufiner le glisser/déposer sur la page de login
- optimiser l’ensemble (c’est assez lent je trouve)

Ensuite, travailler sur l’édition du fichier avec deux possibilités :
1/ Le fichier provient d’une URL, alors il faut vérifier si le fichier est sur un partage Webdav et mettre à jour le fichier
2/ Le fichier vient du disque dur par glisser-déposer, alors il faut générer un téléchargement du nouveau fichier

Ca fait beaucoup de boulot encore, et comme toujours, les contributions sont les bienvenues.

Merci de votre attention, vous pouvez éteindre votre ordinateur et reprendre une activité normale.

  • # Bravo

    Posté par  (site web personnel) . Évalué à 1.

    Simplement un grand bravo pour l'initiative, je me réjouis de tester ça. Keepass et le logiciel qui va bien partout pour conserver ses mots de passe et avoir une version en ligne fonctionnelle sera un vrai plus.

  • # cool

    Posté par  (site web personnel) . Évalué à 3.

    Intéressant,

    j'utilise Keepass 2 sur un serveur webdav mais avec les versions récentes de Mono c'est cassé depuis un bail (l'enregistrement du fichier efface le fichier sur le serveur…).

    Une alternative qui marche serait la bienvenue. Merci !

    les pixels au peuple !

    • [^] # Re: cool

      Posté par  . Évalué à 2.

      Tu peux mettre ton fichier keepass sur un serveur ownCloud. Il sera accessible par l'interface web, webdav et le client de synchronisation. On peut aussi utiliser kpcli pour ouvrir le fichier dans un terminal via SSH directement sur le serveur owncloud. J'utilise cette solution et je trouve cela pratique.

      Je suis aussi preneur d'une interface web, ce serait pratique mais sans flash ;-).

  • # Tu as donc une superbe mémoire !

    Posté par  (site web personnel) . Évalué à 2.

  • # Utopie

    Posté par  . Évalué à 1.

    Merci, c'est intéressant, quoi que ce n'est pas encore ce que je recherche.

    Je veux un gestionnaire de mot de passe qui soit accessible via ligne de commande (type pass), synchronisable via SSH par exemple, des interfaces graphiques à la fois sur Linux et Windows et si possible utilisable simplement avec le navigateur.

    KeePass est le candidat naturel mais on est en réalité encore loin :

    • l'interface en ligne de commande via perl (kpcli) est vraiment mal foutue comparé à pass et la copie du mot de passe dans le presse papier ne veut pas marcher chez moi.
    • l'interface graphique sur Linux en mono est très moche et il manque la moitié des features
    • pareil pour les plugins : super il y a un plugin pour rajouter le support de ssh, ah non il ne marche que sur Windows

    L'idéal serait que tout ce beau monde se mette d'accord sur un format de base de donnée mais là ça devient vraiment une utopie…

  • # Je plussoie

    Posté par  (site web personnel) . Évalué à 1.

    Pareil, je trouve que c'est une excellente idée, surtout qu'il n'y a pas d'alternatives! Bon, il y'a toujours la question de la sécurité, mais bon avec du SSL ça devrait le faire. Et si j'ai bien compris au niveau du décryptage, tout se passe du coté client, donc on garde rien coté serveur?

    • [^] # Re: Je plussoie

      Posté par  . Évalué à 1.

      Effectivement, tout se passe côté navigateur. Les seules données qui transitent sont :
      1. les fichiers de l'application elle même (html/js/css) => aucun risque ici
      2. le fichier KDBX s'il est stocké sur le serveur. Ce fichier est chiffré, le risque est donc très limité.

      L'utilisation de SSL n'est donc pas absolument nécessaire.

      Mais si tu crains un MITM qui remplacerait les fichiers de l'application pour voler ta passphrase, le SSL est une réponse.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.