gPass/README.md
Grégory Soutadé 07c64a44a0 Fix addon :
* Error in wildcard domain generation
  * Forgot some console.log in code (replace it with debug function)
2018-06-30 09:04:40 +02:00

5.4 KiB

gPass : global Password for Firefox and Chrome

Introduction

Everyday we have a lot of passwords to manage corresponding to a lot of accounts we use. It's hard to remain all of these, moreover if we don't use it often. So, what most people do is to generate only a subset of passwords easy to remain. This implies two common errors :

  • Password are not very strong
  • We use them for multiple accounts

The best way to avoid these errors is to have a unique strong password for each account. gPass helps to reach this goal : you keep a subset of passwords (called masterkey) and for each login/password tuple you chose, gPass returns the real password by querying a password server.

To have a high level of security, all information is stored encrypted (server side). Nothing is stored on client. The decryption is done on the fly when it's needed and only with user input. So, a hacker can get your password database, it will not be able to see any information (except if it brute force your masterkey) ! So it's important to choose to strong masterkey !

This addon is like last pass one, but I wanted it to be open source and self hostable (be careful on server down !). Moreover, with gPass, you can have multiple master keys !

Usage

The first thing to do is to populate your database (from your/a password server) with website/login/password/master key values. You can use "*" character to access to all sub domains of a specific website. If you want to make strong password, there is a password generator. After that, configure your addon in "tools -> addons -> gPass -> preferences" in Firefox or "addons -> gPass -> options" in Chrome to point to your password server (+ username). Be careful, login and password are case sensitive.

When you're in a login form and you want to use gPass, type your login (case sensitive !) and fill "@@masterkey" in password field. Then submit and password will automatically be replaced by the one in the database (after addon decrypt it).

You can also type "@_masterkey" to only replace your password without submitting and manually submit. This allows to support more websites.

Technical details

The two columns in database are "login" and "password". login is compounded by "domain;login" is salted and encrypted with AES 256-CBC

The key that encrypt these fields is PBKDF2 (hmac-sha256, masterkey, password_server_url, 1000, 256), IV is PBKDF2 (hmac-sha256, password_server_url, masterkey, 1000, 256)

PBKDF2 level can be changed by user

Server side is written in PHP (with SQLite3 for database component).

Server

To host a password server, you need a webserver. Just copy server files in a directory read/write for web server user (www-data). A sample apache2 configuration file is available in resources. Since v0.8 and the use of Crypto API, it's manadatory to have an HTTPS access to the server. Without that, the decryption will fails.

Configuration parameters are in conf.php

A demonstration server is available here. It may not works with HTTPS content because it uses a self-signed SSL certificate. If so, explicitly add the certificate to your browser. It's the default server of package (user demo).

Warning The master key derivation is partially based on account URL. So it's linked to your current server information. You can't move databases from servers with different URLs, you need to export them and import again.

Server side is available here

Version 0.6 introduces shadow logins. It's a protection again illegal database dump and purge but requires high cpu bandwidth. Database update is transparent.

The principle is to generate a random value (shadow login) that must be encrypted with the masterkey to get an access token. This access token allows to get the true (but encrypted) login/password couple. It's a kind of challenge : if I can encrypt the shadow login, I know the masterkey ! For security reason, the derivation of masterkey for deciphering passwords is different than for encrypting shadow logins (it uses its own salt).

Client

Just install the package. You can have debug information by setting DEBUG in main.js.

Command line interface

A command line interface is also available with the following usage :

Usage: ./gpass_cli [-f config_file] [-p server_port] [-c CA_certificate_path] [-l PBKDF2_level] [-s gpass_server] [-v] -d domain -u username

You can save recurrent parameters into a configuration file. Default config file is found at $HOME/.local/share/gpass/gpass.ini

The dependencies are libcurl and OpenSSL (-dev packages : ie libcurl4-openssl-dev and libssl-dev)

A sample configuration file is available gpass.ini.sample

Version Information

Current version is 0.8.2 (not compatible with 0.7)

Firefox will remove support for addons, so the gPass addon code is not supported since v0.8, please migrate to webextension.

Transition from v0.7 to v0.8 : Please update your masterkey (even with the same one) to gain a security level of your passwords's wallet.

This version is incompatible from 0.1. Please use this script to migrate.

License

All the code is licensed under GPL v3. Source code is available here.