Passprotect 1.0.0

Posté le Sunday, 02 October 2016 in Passprotect

Bonjour à tous,

Passprotect est un nouvel outil permettant d'enregistrer et de gérer vos mots de passe. L'idée derrière Passprotect est de pouvoir enregistrer et lire les mots de passe de vos sites Internet, de vos cartes de crédit, ou de toute autre forme de texte que vous voudriez garder en sécurité.

La concurence

La première question que l'on peut se poser est Pourquoi ne pas avoir choisi une solution existante ? ? Alors passons en revue les différents outils que j'utilise actuellement ou dont j'ai étudié la possibilité d'utiliser :

  • aWallet: Un outil pour android que j'utilise actuellement (sans la partie synchro). Même si l'utilise jusqu'à présent régulièrement, le logiciel ne me convient pas. Il est propriétaire. Je n'ai pas confiance dans la synchro cloud. Je ne peux pas l'héberger moi même.
  • LastPass: propriétaire, trop compliqué,
  • KeePass: Client lourd, je souhaitais un client léger avec potentiellement un futur client lourd sur android, et une extension chrome.
  • Encryptr: Libre :) Belle interface :) Mais basée sur un serveur crypton distant. J'aurais bien sûr pu forker le projet et le faire pointer sur un de mes serveurs, installé manuellement, mais non.

Une autre raison de vouloir faire ma version, est tout simplement pour m'amuser :D.

L'interface

Passprotect est un logiciel que vous pouvez installer sur votre propre serveur ou utiliser la version en ligne se trouvant à l'adresse https://passprotect.shadoware.org.

Pour commencer nous avons la page de login qui vous permet de vous connecter, et si bien sûr vous n'avez pas de login, vous pouvez en enregistrer un. C'est à ce moment là que l'application va générer la clé et le sel utilisé pour protéger toutes vos données.

Login Register

Une fois connecté, vous pouvez visualiser la liste de vos données cryptées. A ce moment les données ne sont pas cryptées.

Ma liste

Et enfin vous pouvez visualiser le détail de vos données sauvegardées.

Détail du texte Détail du mot de passe Détail de la carte de paiement

Comment les données sont cryptées

Lors de la création de l'utilisateur, l'application crée alors 2 clés :

  • La clé maître, utilisée pour chiffrer les mots de passe, cartes de crédit, et textes (à l'aide de la méthode AES-256-CTR) en tous genre. Cette clé est elle-même chiffrée avec le mot de passe de l'utilisateur et le sel (16 octets aléatoires). La clé maître est générée à partir de 32 octets choisis aléatoirement,
  • La clé de session utilisé pour chiffrer le jeton JWT contenant la clé maître lors de la session: Cette clé générée à partir de 32 octets choisis aléatoirement.

Lors de la sauvegarde d'une ligne, la clé maître est utilisée pour chiffrer les données, et inversement quand la clé est lue, la clé maître est utilisée pour les déchiffrer.

Seul l'utilisateur connecté a accès à ses propres données (chiffrées). Le chiffrage est fait côté serveur par le nodejs. Du coup les données transitant en clair vers le client, il faut que le site soit accédé à partir d'un serveur en HTTPS.

Installation

Attention

Attention, j'essaie de rendre passprotect le plus sécurisé possible mais je ne suis pas un expert en cryptographie. Sauf si vous savez estimer le niveau de sécurité de l'application, l'utilisation de l'application pour protéger des données importantes se fait à vos risques et périls.

Les pré-requis

  • NodeJS > 6.2.1
  • MongoDB > 3.2.7

Depuis les sources

    $ hg clone https://bitbucket.org/uvandenhekke/passprotect-server
    $ npm install
    $ MODE=prod npm run build

Depuis docker

En utilisant docker-compose vous pouvez instancier les différentes images avec le fichier de configuration suivant. Pensez à modifier les clés servers.

version: '2'
services:
    nodejs:
        image: phoenix741/passprotect-server:1.0.0
        expose:
            - 3000
        links:
            - mongodb
        environment:
            - MONGODB_HOST=mongodb://mongodb:27017/passprotect
            - NODE_ENV=production
            - DEBUG=App:*
            - JWT_SECRET=dnLUMtULQsNmNbmGV3Lx8SxrxEtaxTc8aPdRh8YMemj515Faip7wQYueSaBFYm5r
            - CRYPTO_SESSIONKEY=xtipKI38GUCvE5cNGtTJxa1wQFvCicF5GDLTWyaBAb5RQqQ8rRBR1yVEq7Jg10cu
    nginx:
        image: phoenix741/passprotect-client:1.0.0
        links:
            - nodejs
        environment:
            - UPSTREAM_SERVER=nodejs
            - UPSTREAM_PORT=3000
            - PIWIK_SITE_URL=//stats-demo.shadoware.org/
            - PIWIK_SITE_ID=3
        ports:
            - '8080:80'
    mongodb:
        image: mongo:3.3.9
        expose:
            - 27017
        volumes:
            - './mongodb:/data'

L'application est composée de deux images docker :

  • phoenix741/passprotect-server:1.0.0: contenant la partie serveur nodejs
  • phoenix741/passprotect-client:1.0.0: servant les fichiers static et redirigeant les appels à l'API vers le serveur.

La troisième image contient la base de données mongodb utilisée par le projet.

Utilisation

Pour accéder au serveur, utiliser l'adresse http://localhost:8080 dans votre navigateur.