Introduction

Bon, vous le savez, nous vivons dans un monde où la surveillance des communications devient quasiment totale. Différents acteurs comme la Stasi (la sécurité de l'État) ou encore Google ou Facebook veulent absolument savoir ce que vous vous racontez entre-vous sous couvert de différents motifs.

Alors que nombre de pays ont instauré depuis très longtemps le secret de la correspondance, il vous faudra recourrir à des mesures techniques plus complexes pour assurer que moins de personnes ne lisent vos précieux courriers électroniques.

L'informatique a depuis longtemps réglé ce problème en utilisant le chiffrement asymétrique. Néanmoins ce dernier a l'inconvénient de ne pas être si trivial à employer.

Et si finalement, ce n'était plus si complexe que ça ? Comment faire pour chiffrer et signer facilement ses courriers électroniques avec un minimum de sécurité ?

La réponse (en fait une des nombreuses réponses) se trouve dans l'extension Enigma de Roundcube. Je présente dans cet article, la manière dont j'ai pu le déployer sur mon serveur Debian Stretch.

Principes d'Enigma

Je ne vais pas revenir sur le fonctionnement du chiffrement asymétrique; c'est un pré-requis à la lecture de cet article.

Ce qui est plus important à retenir, c'est qu'Enigma vous propose de stocker vos clefs GPG privées et publiques directement sur le serveur qui héberge Roundcube. De cette manière, vous disposez d'un moyen simple pour toujours avoir votre clef sous la main, lorsque vous souhaitez l'utiliser pour votre courrier électronique.

Enigma n'est qu'une encapsulation de GnuPg. Son fonctionnement permet de transférer tout ce qui est sensible à l'environnment de GnuPg (en version 2.1 sous Debian Stretch) qui est fait pour ça.

A mon sens, cela permet de faire de ces fonctions de chiffrement/signature quelquechose de simple à utiliser au quotidien plutôt qu'un truc de crypto-anarchiste.

Sachez que si vous importez votre clef privée avec un mot de passe de protection, Enigma vous demandera de renseigner ce mot de passe dès qu'il en aura besoin. Votre clef privée est donc potentiellement à l'abri d'un vol immédiat (mais d'un crackage par force brute ou dictionnaire).

Installation des paquets

Pour faire simple, il vous faut installer au moins le paquet roundcube-plugins. Ce paquet suggère d'utiliser php-crypt-gpg. Néanmoins, ce paquet n'est pas diponible dans Debian Stretch, la version stable de Debian au moment de la rédaction de cet article. Ce paquet est indispensable pour faire fonctionner le plugin Enigma.

Vous pourriez tout simplement attendre que la prochaine version stable de Debian entre en production mais voilà, vous avez lu mon introduction et vous avez décidé de protéger un peu plus vos communications. Comment faire ?

Bon, par bonheur, le paquet php-crypt-gpg est disponible dans Debian Buster, la version testing de Debian. De plus, dans sa version actuellement disponible, il peut parfaitement s'installer dans Debian stable. Donc, un simple téléchargment suivi d'une installation manuelle suffit à rendre le plugin opérationnel:

# apt install --no-install-recommends gnupg2 php-console-commandline
# wget http://ftp.fr.debian.org/debian/pool/main/p/php-crypt-gpg/php-crypt-gpg_1.6.0-1_all.deb
# dpkg -i php-crypt-gpg_1.6.0-1_all.deb  

Oui, vous allez me dire que j'aurais pu utiliser l'apt-pinning. Mais, vous le savez, j'administre mes machines personnelles sur mon temps libre qui est ultra compté. Je vais au plus court et j'assume totalement...

Configuration

Voilà, vous avez tout ce qu'il faut pour activer Enigma. Reste encore à le configurer correctement. Voyons comment faire en détails.

Vous devez d'abord ajouter le plugin Enigma dans la liste des plugins autorisés. La liste est disponible dans le fichier /etc/roundcube/config.inc.php:

// List of active plugins (in plugins/ directory)                                                                                                                       
$config['plugins'] = array(
'archive',
'calendar',
'carddav',
'emoticons',
'managesieve',
'zipdownload',
'enigma'
);

Le principe d'Enigma est de stocker votre clef privée (et publique) sur le serveur qui héberge Roundcube, de manière à pouvoir signer et déchiffrer à volonté. Enigma vous impose de déclarer un répertoire pour stocker les clefs. Nous allons utiliser le répertoire /var/local/enigma. Attention, ce répertoire doit être accessible en écriture à l'utilisateur de Roundcube, c'est à dire www-data:

# mkdir -p /var/local/enigma
# chown www-data:www-data /var/local/enigma

Enfin, vous devez simplement configurer le plugin en rédigeant son fichier de configuration dédié, situé dans /etc/roundcube/plugins/enigma/config.inc.php. Ce fichier permet d'imposer certains paramètres à tous les utilisateurs de votre instance Roundcube (oui, un webmail, c'est fait généralement pour plusieurs comptes). En voici un exemple commenté.

<?php
// Enigma Plugin options
// --------------------

// Le pilote utilisé pour PGP
$config['enigma_pgp_driver'] = 'gnupg';

// Le pilote utilisé pour le contenu S/MIME
$config['enigma_smime_driver'] = 'phpssl';

// Activer le debug dans les journaux
$config['enigma_debug'] = false;

// Répertoire de stockage des clefs (privées et publiques) 
$config['enigma_pgp_homedir'] = '/var/local/enigma';

// Emplacement du binaire gpg (auto-détecté par défaut)
$config['enigma_pgp_binary'] = '';

// Emplacement de gpg-agent (auto-détecté par défaut)
$config['enigma_pgp_agent'] = '';

// Activer la vérification des signatures par défaut
$config['enigma_signatures'] = true;

// Activer le déchiffrement des messages
$config['enigma_decryption'] = true;

// Autoriser le chiffrement et la signature
$config['enigma_encryption'] = true;

// Activer la signature par défaut
$config['enigma_sign_all'] = false;

// Activer le chiffrement des messages par défaut
$config['enigma_encrypt_all'] = false;

// Activer l'envoi de la clef publique dans chaque courriel
$config['enigma_attach_pubkey'] = true;

// Durée par défaut de stockage des mots de passe de clefs privées (en
// minutes). 0 indique que le mot de passe est stocké pendant toute la
// session. 
$config['enigma_password_time'] = 5;

// Interdire la génération de clef privée sur le serveur
$config['enigma_keygen_server'] = false;

// Forcer la configuration de certains paramètres
// (Rien dans notre cas)
$config['enigma_options_lock'] = array();

Avec ces éléments, Enigma est prêt à fonctionner.

Utilisation

Ok, Enigma est prêt, il ne reste qu'à le remplir avec vos clefs. Pour cela, vous devez les extraires au format asc par exemple à l'aide de la commande gpg. N'oubliez pas qu'il faut la clef privée et la clef publique:

$ gpg --armor --export-secret-keys my_account@example.com > privkey.asc
$ gpg --armor --export my_account@example.com > pubkey.asc

Ensuite, ouvrez Roundcube et allez dans la page des paramètres, dans l'onglet Préférences: la section "Chiffrement" doit apparaître:

Préférences Enigma

Vous devriez retrouver tous vos paramètres du fichier de configuration. Néanmoins, en fonction des options de verrou, certains paramètres ne peuvent pas forcément être modifiés ici.

Ensuite, vous devez importer au moins une clef privée et une clef publique (vous pouvez faire les deux en même temps). Pour cela, rendez-vous toujours dans l'onglet "Clés GPG" et cliquez sur le bouton "Importer" situé en haut à gauche:

Import des clefs

Choisissez les fichiers .asc précédemment générés et le tour est joué. Vous devriez voir une référence dans la liste des clefs. Cliquer sur cette référence affichera une page complète d'information sur la dite clef.

Passons maintenant aux opérations de chiffrement et de signature. Composez un nouveau courriel et vous devriez voir apparaître une nouvelle option de sécurité avec un cadenas:

Options de chiffrement/signature des messages

Lorsque vous cochez l'option, joindre ma clef publique, elle sera systématiquement envoyée en pièce-jointe de votre message. Chez moi, elle est cochée par défaut, de manière à ce que les gens puissent la récupérer à moindre frais.

Conclusions

Finalement, l'installation du plugin est assez simple. La méthode que je propose pose quand même un certain problème, principalement au niveau de la sécurité sur la maintenance du paquet php-crypt-gpg. Ne l'oubliez pas !

Néanmoins, le plugin est fonctionnel et il vous permettra de signer vos courriels et de déchiffrer ce que vos correspondant équipés d'une solution de chiffrement asymétrique auront envoyé et ce, de manière assez simple, dès que vous aurez accès à votre instance Roundcube.

Cela vous donnera enfin l'impression de rejoindre une communauté de gens sérieux avec la sécurité de leurs communications. L'étape d'après consiste à convertir tous vos correspondants à utiliser le chiffrement asymétrique pour leur correspondance. Ce n'est pas gagné mais pas impossible !