P17 - Chiffrement et sauvegardes chiffrées : LUKS, OpenSSL, GPG, Borg

Objectif

Protéger les données au repos : chiffrer un disque Linux (LUKS, l’équivalent de BitLocker), chiffrer un fichier (OpenSSL, GPG) et faire des sauvegardes chiffrées et dédupliquées avec Borg.

Source

Fiche rédigée à partir de la partie « Chiffrement » et « Backup chiffré » de cours de lidstah.


1. Les 4 objectifs (rappel)

ObjectifOutilQuestion
ConfidentialitéChiffrementPersonne d’autre ne peut lire ?
IntégritéHachage (SHA-256…)Le contenu n’a pas été modifié ?
AuthentificationSignatureC’est bien la bonne personne ?
Non-répudiationSignature + journauxL’auteur ne peut pas nier ?
TypePrincipeExemples
SymétriqueUne seule clé partagée, chiffre et déchiffre (rapide)AES, ChaCha20
AsymétriqueClé publique pour chiffrer (ou vérifier), clé privée pour déchiffrer (ou signer)RSA, Ed25519
HachageEmpreinte à sens unique, la moindre modification change toutSHA-256, SHA-512 (MD5 et SHA-1 sont cassés)
flowchart LR
  A["Alice"] -->|"chiffre avec la clé PUBLIQUE de Bob"| M["Message chiffré"]
  M -->|"seul Bob déchiffre avec sa clé PRIVÉE"| B["Bob"]
  A2["Alice"] -->|"signe avec SA clé privée"| S["Message signé"]
  S -->|"tout le monde vérifie avec la clé publique d'Alice"| T["Lecteurs"]

2. LUKS : chiffrer un disque

À l’installation de Debian : partitionnement → Assisté – utiliser tout le disque avec LVM chiffré. La phrase de passe est demandée à chaque démarrage.

Serveur sans écran : déverrouiller à distance

Le paquet dropbear-initramfs lance un mini serveur SSH avant le démarrage du système, juste pour taper la phrase de passe.

sudo apt install dropbear-initramfs
# /etc/dropbear/initramfs/dropbear.conf  (Debian 12 et 13)
DROPBEAR_OPTIONS="-I 120 -j -k -p 2222 -s -c cryptroot-unlock"
# /etc/initramfs-tools/initramfs.conf : IP fixe pendant le démarrage
IP=192.168.1.151::192.168.1.254:255.255.255.0:deb-crypt
sudo cp ~/.ssh/authorized_keys /etc/dropbear/initramfs/authorized_keys
sudo update-initramfs -u
# au redémarrage, depuis ton PC : ssh -p 2222 root@192.168.1.151

Chiffrer un disque supplémentaire :

lsblk                                         # repérer le disque, ex. /dev/sdb
sudo cfdisk /dev/sdb                          # créer /dev/sdb1
sudo cryptsetup luksFormat /dev/sdb1          # ⚠ efface tout, demande une phrase de passe
sudo cryptsetup open /dev/sdb1 mondisque      # déverrouiller → /dev/mapper/mondisque
sudo mkfs.ext4 /dev/mapper/mondisque
sudo mkdir -p /mnt/mondisque && sudo mount /dev/mapper/mondisque /mnt/mondisque
# fermer
sudo umount /mnt/mondisque && sudo cryptsetup close mondisque

Déverrouillage automatique au démarrage (une fois le disque système déverrouillé) avec un fichier clé :

sudo mkdir /etc/lukskeys
sudo dd if=/dev/urandom of=/etc/lukskeys/mondisque-key bs=512 count=8 iflag=fullblock
sudo chmod 400 /etc/lukskeys/mondisque-key
sudo cryptsetup luksAddKey /dev/sdb1 /etc/lukskeys/mondisque-key
sudo cryptsetup luksDump /dev/sdb1 | grep UUID
# /etc/crypttab
sdb1_crypt UUID=<uuid> /etc/lukskeys/mondisque-key luks
# /etc/fstab
/dev/mapper/sdb1_crypt /mnt/mondisque ext4 defaults 0 2

LUKS accepte plusieurs clés (8 emplacements) : une phrase de passe + un fichier clé, par exemple.

3. Chiffrer un fichier

OpenSSL (symétrique, mot de passe partagé)

openssl aes-256-cbc -a -salt -pbkdf2 -in fichier.txt -out fichier.txt.enc        # chiffrer
openssl aes-256-cbc -d -a -pbkdf2 -in fichier.txt.enc -out fichier.txt           # déchiffrer

Limites : le mot de passe doit être fort et transmis par un autre canal sûr.

GPG (asymétrique, standard OpenPGP)

gpg --full-generate-key                                  # créer sa paire de clés
gpg --list-secret-keys --keyid-format=long               # voir ses clés
gpg --armor --export ID_CLE > ma_cle_publique.asc        # exporter sa clé publique
gpg --import cle_alice.asc                               # importer la clé d'Alice
gpg --encrypt --recipient alice@exemple.fr message.txt   # chiffrer pour Alice → message.txt.gpg
gpg --decrypt message.txt.gpg > message.txt              # déchiffrer (avec SA clé privée)
gpg --sign message.txt                                   # signer
gpg --verify message.txt.gpg                             # vérifier une signature

On peut chiffrer pour plusieurs destinataires (--recipient répété). Git sait aussi signer les commits avec GPG.

4. Sauvegardes chiffrées avec Borg

Borg : sauvegardes chiffrées côté client, compressées et dédupliquées (un fichier identique n’est stocké qu’une fois, même renommé), envoyées par SSH.

sudo apt install borgbackup          # sur la machine ET sur le serveur de sauvegarde
DEPOT=ssh://user@192.168.1.153:22/home/backup
 
borg init --encryption=repokey "$DEPOT"     # créer le dépôt (phrase de passe)
borg key export "$DEPOT" cle-borg.txt        # ⚠ SAUVEGARDER cette clé ailleurs (KeePassXC)
borg create --stats --progress -C zstd,10 --exclude '.cache' "$DEPOT"::'{now:%Y-%m-%d_%H%M}' ~
borg list "$DEPOT"                           # liste des archives
borg extract "$DEPOT"::2026-10-23_1200 chemin/du/fichier    # restaurer un fichier
borg mount "$DEPOT"::2026-10-23_1200 /tmp/restauration      # parcourir une archive comme un dossier
borg umount /tmp/restauration
borg prune --keep-daily 7 --keep-weekly 4 --keep-monthly 6 "$DEPOT"   # garder 7 jours, 4 semaines, 6 mois
borg compact "$DEPOT"                        # libérer réellement l'espace

Clé + phrase de passe = tout

Si tu perds la clé exportée et la phrase de passe, les sauvegardes sont définitivement illisibles. C’est le prix du chiffrement.

Automatisation : borgmatic (un fichier YAML qui décrit quoi sauvegarder, où, combien garder, + un timer systemd). C’est le sujet du TP de lidstah.

Exercices

  1. Pourquoi chiffrer les disques d’un serveur qui est dans une salle fermée à clé ?
  2. Quelle clé utilises-tu pour envoyer un fichier chiffré à Bob avec GPG ?
  3. Tu sauvegardes chaque jour 50 Go qui changent peu. Pourquoi Borg prend-il beaucoup moins que 50 Go par jour ?

Erreurs fréquentes / dépannage

SymptômeCause / solution
Démarrage bloqué en attente du disque chiffréMauvaise UUID dans crypttab, ou fichier clé non ajouté (luksAddKey)
borg: Failed to create/acquire the lockUne sauvegarde est encore en cours ou a planté : borg break-lock "$DEPOT" si on est sûr
GPG : « No public key »La clé du destinataire n’est pas importée
Espace pas libéré après pruneOubli de borg compact

Voir aussi