Chiffrer/déchiffrer des fichiers avec GPG

Avec bash

GPG permet de chiffrer du texte, mais bien sûr aussi des données binaires (images, musiques, vidéos,…). Les bouts de code bash que vous verrez dans cet article permettent de chiffrer des fichiers, pour vous ou pour un tiers. Et ce de façon beaucoup plus solide qu’un mot de passe ZIP, sans pour autant entrer dans le superchiffrage TrueCrypt ou de la stéganographie image/vidéo.

Chiffrement simple (symétrique) avec mot de passe:

#!/bin/bash
for file in *; do
gpg -c "$file"
done

GPG va demander pour chaque fichier un mot de passe, et la confirmation de ce mot de passe (et si le script est dans le même dossier, le script sera lui-même chiffré). Par défaut GPG chiffre avec l’algorithme CAST5 (ou CAST-128). Bien évidemment, le mot de passe est à retenir ou à conserver de façon sûre, ou à communiquer de façon sûre au destinataire. La sécurité est faible, à moins d’utiliser un mot de passe horriblement complexe à bruteforcer.

Chiffrement à paires de clés (asymétrique):

#!/bin/bash
read -p "Chiffrer en utilisant la clé de quel destinataire ? " cle
for file in *; do
gpg -e -r $cle "$file"
done

Le script va d’abord demander avec quelle clé les fichiers devront être chiffrés. Il faut pour cela bien sûr posséder la clé publique du destinataire (démonstration où je chiffre une image que seul Gnuzer pourra déchiffrer). La plupart des gens utilisant des clés RSA 4096 avec chiffrement AES256, le fichier chiffré est très solide contre le cracking. (comme dit, la force d’un chiffrement est toujours une question de temps nécessaire pour le casser, il n’existe aucun chiffrement inviolable).

Chiffrement + signature à paires de clés (asymétrique):

#!/bin/bash
read -p "Chiffrer en utilisant la clé de quel destinataire ? " cle
read -p "Signer en utilisant la clé de quel émissaire ? " emis
for file in *; do
gpg -seu $emis -r $cle "$file"
done

Fini de rigoler ! Le script va demander avec quelle clé les fichiers devront être chiffrés, et avec quelle clé ces fichiers devront être signés. De fait, cela prouve que les fichiers ont été chiffrés par la bonne personne, preuve d’authenticité (à moins que la clé privée ait été compromise). (démonstration où je chiffre une image pour Gnuzer avec ma signature).

Chiffrement + signature à paire de clés (asymétrique) + sortie ascii avec armure:

#!/bin/bash
read -p "Chiffrer en utilisant la clé de quel destinataire ? " cle
read -p "Signer en utilisant la clé de quel émissaire ? " emis
for file in *; do
gpg -aseu $emis -r $cle "$file"
done

Avec le script précédent, le fichier chiffré est une bouillie binaire non interprétable par un éditeur de texte: on ne peut le passer qu’en pièce jointe d’un email. En ajoutant la lettre « a » à la ligne de commande, GPG va sortir un fichier ASCII (du texte quoi), qui peut être collé dans un email, sur un forum, sur Pastebin,… l’inconvénient, c’est que le fichier obtenu est un peu plus lourd.. et que ce mode montre explicitement que ce sont des données chiffrées avec GnuPG. (démonstration avec la même image chiffrée).

Déchiffrement

#!/bin/bash
for file in *; do
gpg "$file"
done

Vous avez un dossier avec un fichier chiffré dedans ? Exécutez ça. Si besoin est, GPG demande le mot de passe de déchiffrement, ou signale s’il ne possède pas la clé privée du destinataire.

Amusez-vous bien 🙂