Protéger un fichier avec un mot de passe (avec gpg)
Pourquoi utiliser gpg ?
Au départ, je cherchais un moyen de protéger un fichier avec un mot de passe car, au boulot, j'avais besoin qu'un fichier soit illisible de certaines personnes, y compris des personnes connaissant le mot de passe root.
Il y avait comme solution de zipper le fichier avec un mot de passe, mais ce mot de passe est facile à casser, et ça oblige à dézipper le fichier à chaque fois qu'on veut le voir. Et il ne faut pas oublier de supprimer le fichier dézippé (et donc déprotégé) une fois qu'on a fini de de lire.
La solution que j'ai trouvé n'est pas parfaite, car un peu lourde à mettre en place, et si on change le fichier d'ordinateur, il faut faire suivre la clé. Mais je n'ai pas trouvé mieux (n'hésitez pas à m'écrire si vous avez une meilleure solution).
Cette solution consiste à générer une paire de clés avec gpg et à encrypter le fichier avec la clé créée (c'est la paire de clés qui va contenir la passphrase).
Créer une paire de clés
gpg --gen-key
Cette commande va vous poser plusieurs questions :
- le type de clé désiré : laissez le choix par défaut "DSA et Elgamal"
- la taille des clés : laissez le choix par défaut, ou mettez plus si c'est vraiment sensible
- la durée de validité des clés : si le fichier doit rester protégé en permanence, le mieux est que les clés n'expirent jamais (une confirmation sera demandée
- votre nom : entrez-le
- votre adresse e-mail : entrez-la
- un commentaire : ce commentaire permet de reconnaitre notre clé parmis toutes les clés existante. Essayez donc de mettre quelque chose de parlant. Pour l'exemple, j'ai mis "cle-pour-proteger-les-fichiers"
- demande de confirmation : confirmez avec Ok, ou modifiez le paramètre souhaité
- la passphrase : entrez une phrase de passe. C'est la même chose qu'un mot de passe, mais ça peut contenir des espaces et être très long. Pour plus de sécurité, mélangez majuscules, minuscules, chiffres et caractères spéciaux. Mais ne faites pas trop compliqué non plus pour ne pas oublier... A vous de savoir doser.
- confirmez la passphrase
- il vous est alors demandé de taper n'importe quoi au clavier ou de bouger la souris, pour ajouter plus de caractères aléatoires à la génération des clés
Votre paire de clés est maintenant générée. Le plus dur est fait.
Voir la liste des clés
Pour voir la liste des clés créées, il faut taper :
gpg --list-key
Vous devez retrouver votre clé grâce à votre commentaire.
Encrypter le fichier "fichier.txt" en lui spécifiant la clé associée
Maintenant, encrytons le fichier "fichier.txt" avec la clé "cle-pour-proteger-les-fichiers" :
gpg -e --recipient cle-pour-proteger-les-fichiers fichier.txt
Le "-e" veut dire qu'on encrypte.
Le "--recipient" indique la clé qui va être utilisée. Il suffit de prendre une partie de la description de la clé qu'on ne retrouve dans aucune autre clé. Normalement, le commentaire suffit, voire juste une partie du commentaire. Sinon, on peut prendre toute la ligne qui apparait en faisant "gpg --list-key" en l'entourant de guillemets.
Puis en dernier, on met le nom du fichier à crypter.
On obtient alors un nouveau fichier nommé fichier.txt.gpg qui est la version cryptée de fichier.txt. Il faut donc supprimer fichier.txt pour qu'il n'y ait plus de trace des données en clair.
Décrypter le fichier
Maintenant, pour voir le contenu de notre fichier, il faut le décrypter avec la commande suivante :
gpg -d fichier.txt.gpg
Le "-d" veut dire qu'on décrypte.
Le contenu du fichier va être affiché sur la sortie standard (l'écran).
Effacer une paire de clés
Si vous voulez supprimer votre paire de clés, utilisez l'option "--delete-secret-and-public-key" de gpg, comme suit :
gpg --delete-secret-and-public-key cle-pour-proteger-les-fichiers
Il vous sera demandé plusieurs confirmations.
Attention : avant de supprimer votre paire de clés, assurez-vous de ne plus avoir de fichiers cryptés avec ces clés, sinon ils ne seront plus décryptables !!!
Solution bien plus simple avec zip
zip -e fichier.zip fichier_a_zipper
Ou si on a plusieurs fichiers :
zip -e fichier.zip fichier1 fichier2 fichier3