Chiffrer une base SQLite

Par Jean-François GAZET le 29 décembre 2015

Si vous conservez des données dans une base SQLite, vous voudrez certainement en interdire l’accès si elle se retrouve dans la nature ou hors cadre de votre application.

Dans cet article nous allons créer une base de données chiffrée, en ligne de commande.

SQLCipher est un utilitaire dérivé en une version open-source et une version commerciale, pour tout système.

Installation de SQLCipher sur Ubuntu

Il est conseillé de l’installer depuis les sources car la version dans les dépots n’est pas à jour. Dans un terminal, tapez :

wget https://github.com/sqlcipher/sqlcipher/archive/master.zip
unzip master.zip
cd sqlcipher-master
sudo apt-get update
sudo apt-get install libssl-dev
./configure --enable-tempstore=yes CFLAGS="-DSQLITE_HAS_CODEC" LDFLAGS="-lcrypto"
make
sudo make install DESTDIR=/

Vous pouvez maintenant utiliser le logiciel avec la commande sqlcipher. L’utilisation est similaire à sqlite3.

Création d’une base chiffrée

Créons tout d’abord une base “normale” nommée par exemple contacts.db :

sqlite3 contacts.db
sqlite> CREATE TABLE contacts (id INTEGER, nom TEXT NOT NULL, prenom TEXT NOT NULL, PRIMARY KEY (id));
sqlite> INSERT INTO contacts (id,nom,prenom) VALUES (1,"TIM","Vincent"),(2,"BON","Jean");
sqlite> .exit

Si sqlite3 n’est pas installé, tapez sudo apt-get install sqlite3.

Maintenant, choisissez un mot de passe et convertissez-le en md5 :

echo -n "mot_de_passe" | md5sum
8b70bf2ffce34ced3223dfc9e4fa9cc7

Ouverture de la base “normale” avec SQLCipher :

sqlcipher contacts.db

Création d’une base chiffrée vide contactsCRYPT.db avec pour mot de passe “mot_de_passe” :

ATTACH DATABASE 'contactsCRYPT.db' AS encrypted KEY '8b70bf2ffce34ced3223dfc9e4fa9cc7';

Création de la table chiffrée “contacts” :

CREATE TABLE encrypted.contacts (id INTEGER, nom TEXT NOT NULL, prenom TEXT NOT NULL, PRIMARY KEY (id));

Copie des données de la base non chiffrée vers la chiffrée :

INSERT INTO encrypted.contacts SELECT * FROM contacts;

Détachement de la base chiffrée :

DETACH DATABASE encrypted;
.exit

Et voilà. Vous avez maintenant une base de données chiffrée et protégée par mot de passe contactsCRYPT.db, et la base classique contacts.db.

Vérifications

Connexion à la base chiffrée, saisie du mot de passe, et listing de la table “contacts” :

sqlcipher contactsCRYPT.db
PRAGMA key = '8b70bf2ffce34ced3223dfc9e4fa9cc7';
SELECT * FROM contacts;
.exit

Vous aurez remarqué qu’en l’absence de la saisie du mot de passe avec la commande PRAGMA key les données ne sont pas accessibles.

Vous pouvez remarquer également que les données d’une base SQLite sont lisibles :

hexdump -C contacts.db

SQLCipher

Et les données de la base chiffrée sont illisibles.

hexdump -C contactsCRYPT.db

SQLCipher

Vous trouverez sur le site de l’éditeur la documentation pour interroger une base chiffrée en PHP ou sur Android.


Partagez cet article


A lire également Tous les articles