Protéger un fichier avec un mot de passe (avec gpg)

De UnixManiax
Aller à la navigation Aller à la recherche


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