Encrypter/Protéger ses données : Différence entre versions
(Page créée avec « Les distributions récentes proposent d'activer l'encryption des partitions lors de l'installation. Si on n'opte pas pour cette solution, on peut néanmoins protéger se... ») |
m (→openssl : cryptage direct de fichier) |
||
| (14 révisions intermédiaires par le même utilisateur non affichées) | |||
| Ligne 1 : | Ligne 1 : | ||
| − | Les distributions récentes proposent d'activer l'encryption des partitions lors de l'installation. | + | Les distributions Linux récentes et divers autres OS proposent d'activer l'encryption des partitions complètes lors de l'installation (ou après). |
| − | Si on n'opte pas pour cette solution, on peut néanmoins protéger ses données sensibles en créant des conteneurs chiffrés. | + | Si on n'opte pas pour cette solution, on peut néanmoins protéger ses données sensibles en créant des conteneurs chiffrés. C'est le choix préférentiel pour moi par rapport à l'utilisation de disques chiffrés, car permet de distinguer différents types de conteneurs, et également de les maintenir fermés la plupart du temps. |
| − | == Solutions utilisables sous Linux == | + | Cet [https://en.wikipedia.org/wiki/Comparison_of_disk_encryption_software article wikipedia] donne des éléments de comparaison sur un ensemble de solutions de chiffrement. |
| − | === | + | |
| − | ==== cryptsetup ==== | + | == Encrypter: Solutions utilisables sous Linux == |
| + | === Conteneurs avec accès à sudo === | ||
| + | ==== cryptsetup : conteneurs luks, trueCrypt... ==== | ||
cryptsetup permet notamment d'exploiter des conteneurs précédemment créés avec TrueCrypt, par exemple: | cryptsetup permet notamment d'exploiter des conteneurs précédemment créés avec TrueCrypt, par exemple: | ||
| − | $ sudo cryptsetup --type tcrypt open ~/ | + | $ sudo cryptsetup --type tcrypt open ~/misc.tc tcmisc |
| − | $ sudo mount -o rw,dmask=0000,fmask=0000 /dev/mapper/tcmisc | + | $ sudo mount -o rw,dmask=0000,fmask=0000 /dev/mapper/tcmisc /mnt/misc |
| − | |||
et pour démonter: | et pour démonter: | ||
| − | $ sudo umount | + | $ sudo umount /mnt/misc |
$ sudo cryptsetup close tcmisc | $ sudo cryptsetup close tcmisc | ||
| + | |||
| + | On peut bien sûr créer ses conteneurs directement avec cryptsetup aussi. Par exemple, un conteneur de type luks: | ||
| + | |||
| + | 1. créer le fichier support du conteneur (ex: 512Mb ici): | ||
| + | $ dd if=/dev/zero of=/tmp/test.bin count=1000k | ||
| + | |||
| + | 2. créer une partition dans ce fichier (on commence ici par identifier le 1er loop-device disponible et y associer notre fichier) | ||
| + | $ losetup -f | ||
| + | /dev/loop0 | ||
| + | $ sudo losetup /dev/loop0 /tmp/test.bin | ||
| + | $ sudo fdisk /dev/loop0 | ||
| + | n ==> new partition | ||
| + | p ==> primaire | ||
| + | accepter les autres valeurs par défaut. | ||
| + | q ==> quitter. | ||
| + | |||
| + | 3. Initialiser le cryptage du pseudo-device, ici au format luks | ||
| + | $ sudo cryptsetup --verbose --verify-passphrase luksFormat /dev/loop0 | ||
| + | => répondre aux questions | ||
| + | $ sudo losetup -d /dev/loop0 | ||
| + | |||
| + | 4. Commencer à utiliser le conteneur: On l'ouvre, puis comme c'est le premier accès, il faut y créer un système de fichiers, puis le monter. Par la suite on n'aura qu'a le monter. | ||
| + | $ sudo cryptsetup --type luks open /tmp/test.bin test | ||
| + | $ sudo mkfs.ext2 /dev/mapper/test | ||
| + | $ sudo mount /dev/mapper/test /mnt/tcvp/ | ||
| + | |||
| + | 5. Utiliser le conteneur, et quand on veut le fermer: | ||
| + | $ sudo umount /mnt/tcvp/ | ||
| + | $ sudo cryptsetup close test | ||
| + | |||
| + | NB: en utilisant "cryptsetup --type luks open ... " et "cryptsetup close ...", les operations losetup sont encapsulées. | ||
==== Autres moyens d'accès aux conteneurs truecrypt ==== | ==== Autres moyens d'accès aux conteneurs truecrypt ==== | ||
| − | ===== tcplay ===== | + | ===== tcplay : conteneurs trueCrypt ===== |
(Essayé pour la première fois avec Fedora 17). Tcplay est une implémentation de TrueCrypt sous license BSD. Voir [https://github.com/bwalex/tc-play projet github ici]. | (Essayé pour la première fois avec Fedora 17). Tcplay est une implémentation de TrueCrypt sous license BSD. Voir [https://github.com/bwalex/tc-play projet github ici]. | ||
Avec tcplay, monter un conteneur 'truecrypt': | Avec tcplay, monter un conteneur 'truecrypt': | ||
| Ligne 23 : | Ligne 55 : | ||
$ sudo mount /dev/mapper/tcvol /mnt/tcvol | $ sudo mount /dev/mapper/tcvol /mnt/tcvol | ||
| − | Et pour | + | Et pour démonter: |
$ sudo umount /mnt/tcvol | $ sudo umount /mnt/tcvol | ||
$ sudo cryptsetup remove tcvol | $ sudo cryptsetup remove tcvol | ||
| Ligne 29 : | Ligne 61 : | ||
=== Sans accès à sudo === | === Sans accès à sudo === | ||
| − | ==== encFS ==== | + | ==== encFS : arborescence encryptés ==== |
Pour un utilisateur qui n'a pas accès à sudo, encFS (Package: fuse-encfs, voir man encfs) permet de créer et monter des pseudo systèmes de fichier encryptés. | Pour un utilisateur qui n'a pas accès à sudo, encFS (Package: fuse-encfs, voir man encfs) permet de créer et monter des pseudo systèmes de fichier encryptés. | ||
| Ligne 35 : | Ligne 67 : | ||
Ensuite, lorsque l'on démonte la zone chiffrée, les fichiers sont supprimés de la partie non-chiffrée, mais toujours visibles (chiffrés) dans l'autre. Petit incovénient donc, on masque moins de choses qu'avec un vrai conteneur. | Ensuite, lorsque l'on démonte la zone chiffrée, les fichiers sont supprimés de la partie non-chiffrée, mais toujours visibles (chiffrés) dans l'autre. Petit incovénient donc, on masque moins de choses qu'avec un vrai conteneur. | ||
| + | |||
| + | Exemple de création/montage de dossier chiffré avec encFS (répertoire chiffré ~/.bdata, répertoire en clair: ~/cdata): | ||
| + | |||
| + | $ encfs ~/.bdata ~/cdata | ||
| + | => la première fois, le encfs pose quelques questions pour la configuration de la zone (dont le mot de passe). | ||
| + | les fois suivantes, il ne s'agit que du montage: seul le mot de passe est demandé. | ||
| + | |||
| + | A ce stade, la zone est montée. df montre bien une ligne pour cet espace, mais les infos de taille et occupation correspondent au FS sous-jacent (/home dans cet exemple): | ||
| + | $ df | ||
| + | encfs 10475520 5200528 5274992 50% /home/toine/cdata | ||
| + | |||
| + | ==== openssl : cryptage direct de fichier ==== | ||
| + | Documentation détaillée : man enc | ||
| + | |||
| + | Exemples: | ||
| + | $ echo test | openssl enc -aes-256-cbc -pbkdf2 -iter 1000 -a -k 'absnfjtyrufjdngjvhfgksdfrtifghkv' | ||
| + | U2FsdGVkX18cc9vgYPbfl74Q8dq/VyL4XyjvyEEo0LU= | ||
| + | $ echo "U2FsdGVkX18cc9vgYPbfl74Q8dq/VyL4XyjvyEEo0LU=" | openssl enc -d -aes-256-cbc -a -pbkdf2 -iter 1000 -k 'absnfjtyrufjdngjvhfgksdfrtifghkv' | ||
| + | test | ||
| + | $ openssl enc -aes-256-cbc -d -a -pbkdf2 -iter 1000 -in /cygdrive/d/tmp/toine.bin | grep -i launch | ||
| + | |||
| + | Compatibilité avec versions < openssl 1.1, l'algo de hash par défaut était md5: | ||
| + | $ openssl enc -aes-256-cbc -d -a -md md5 -in /cygdrive/d/tmp/toine.bin | grep -i launch | ||
| + | |||
| + | ==== openssl dans vi : décryptage du fichier à l'ouverture et cryptage à la sauvegarde ==== | ||
| + | Cette méthode est intéressante car ne requiert pas de fichier temporaire en clair. | ||
| + | Les données en mémoire sont en clair donc sensibles à un dump mémoire. | ||
| + | |||
| + | Les commandes suivantes sont à insérer dans directement dans ~/.vimrc ou équivalent (par exemple dans un fichier .vim/plugin/aes.vim). Il faut avoir openssl dans son path pour que le plugin fonctionne. | ||
| + | |||
| + | " OpenSSL encrypted files. | ||
| + | " PBKDF v1.5 (salted) aes-256-cbc encrypted file. (File magic "Salted__") | ||
| + | augroup aes | ||
| + | autocmd! | ||
| + | autocmd BufReadPre,FileReadPre *.aes set binary | ||
| + | autocmd BufReadPre,FileReadPre *.aes set backup | ||
| + | autocmd BufReadPre,FileReadPre *.aes set history=0 cmdheight=3 viminfo= | ||
| + | autocmd BufReadPre,FileReadPre *.aes set noswapfile nowritebackup | ||
| + | autocmd BufReadPost,FileReadPost *.aes set shell=/bin/sh shellredir=> | ||
| + | autocmd BufReadPost,FileReadPost *.aes '[,']!openssl aes-256-cbc -d -salt | ||
| + | autocmd BufReadPost,FileReadPost *.aes set nobinary cmdheight& shell& | ||
| + | autocmd BufReadPost,FileReadPost *.aes let b:encflag=1 | ||
| + | autocmd BufReadPost,FileReadPost *.aes exe "doau BufReadPost " . expand("%:r") | ||
| + | autocmd BufReadPost,FileReadPost *.aes redraw! | ||
| + | autocmd BufWritePre,FileWritePre *.aes mark z | ||
| + | autocmd BufWritePre,FileWritePre *.aes set binary cmdheight=3 shell=/bin/sh | ||
| + | autocmd BufWritePre,FileWritePre *.aes '[,']!openssl aes-256-cbc -salt | ||
| + | autocmd BufWritePost,FileWritePost *.aes undo | ||
| + | autocmd BufWritePost,FileWritePost *.aes set nobinary cmdheight& shell& | ||
| + | autocmd BufWritePost,FileWritePost *.aes 'z | ||
| + | augroup END | ||
| + | |||
| + | Ensuite, il suffit d'utiliser l'extension .aes (ou autre à condition d'adapter le code) pour activer le mode crypté. | ||
| + | Le mot de passe est demandé une fois à l'ouverture et 2 fois à l'écriture. | ||
| + | |||
| + | '''Attention:''' ici, on a positionné la variable "backup". C'est préférable car an cas de problème de confirmation du mot de passe, le fichier est écrasé... | ||
| + | |||
| + | '''Note:''' le plugin [https://www.vim.org/scripts/script.php?script_id=2012 openssl.vim] effectue le même type de fonction avec un panel plus large d'algorithmes, et une tempo de sortie automatique de vi. | ||
| + | |||
| + | == Encrypter: Solutions utilisables sous Android == | ||
| + | === Conteneurs sans nécessité de rooter === | ||
| + | * application EDS (ou EDS lite): compatible avec des conteneurs au format Truecrypt, VeraCrypt, LUKS, EncFs | ||
| + | === Conteneurs avec nécessité de rooter === | ||
| + | * application LUKSmanager | ||
| + | |||
| + | == Encrypter: Solutions utilisables sous Windows == | ||
| + | Le système propose de base BitLocker dans certaines versions (notamment entreprise) depuis Vista. | ||
| + | |||
| + | Depuis l'arrêt de TrueCrypt, il est possible d'utiliser [https://veracrypt.codeplex.com/ VeraCrypt] (son clone). Pour un usage personnel, et assurer la confidentialité de ses données dans les cas d'usage courants (perte/vol d'un PC par exemple), c'est tout à fait suffisant. L'ergonomie et intégration à Windows (au moins XP, 7 ) est correcte. | ||
| + | |||
| + | Egalement: FreeOTFE (si install sous winXP), dont le support a été arrété, est maintenant suivi sous le projet [https://github.com/t-d-k/LibreCrypt LibreCrypt]. Cet outil est compatible LUKS => possibilité donc de partager des conteneurs avec le monde Android ou Linux. | ||
| + | |||
| + | WinZIP et autres utilitaires permettent aussi de créer des archives protégées par mot de passe. | ||
| + | |||
| + | Openssl pour windows (ou dans cygwin) permet de (dé)crypter directement un fichier. | ||
| + | |||
| + | La méthode vi+openssl présentée pour Linux est fonctionnelle avec cygwin moyennant l'installation des packages adéquats. | ||
| + | |||
| + | == Effacer le contenu des fichiers sensibles == | ||
| + | * shred (pkg coreutils) permet d'écraser le contenu d'un fichier et optionnellement le supprimer. A noter: les blocs constituant le fichier ont pu être déplacés au cours de sa vie (redimensionnement, ...) donc pas une garantie absolue... Exemple: nettoyage et suppression du fichier /tmp/myfile.txt | ||
| + | |||
| + | $ shred -u /tmp/myfile.txt | ||
| + | |||
| + | [[Category:Sécurité]] | ||
| + | [[Category:Cryptage]] | ||
| + | [[Category:Linux]] | ||
| + | [[Category:Windows]] | ||
| + | [[Category:Openssl]] | ||
Version actuelle datée du 23 janvier 2022 à 12:24
Les distributions Linux récentes et divers autres OS proposent d'activer l'encryption des partitions complètes lors de l'installation (ou après).
Si on n'opte pas pour cette solution, on peut néanmoins protéger ses données sensibles en créant des conteneurs chiffrés. C'est le choix préférentiel pour moi par rapport à l'utilisation de disques chiffrés, car permet de distinguer différents types de conteneurs, et également de les maintenir fermés la plupart du temps.
Cet article wikipedia donne des éléments de comparaison sur un ensemble de solutions de chiffrement.
Sommaire
Encrypter: Solutions utilisables sous Linux
Conteneurs avec accès à sudo
cryptsetup : conteneurs luks, trueCrypt...
cryptsetup permet notamment d'exploiter des conteneurs précédemment créés avec TrueCrypt, par exemple:
$ sudo cryptsetup --type tcrypt open ~/misc.tc tcmisc $ sudo mount -o rw,dmask=0000,fmask=0000 /dev/mapper/tcmisc /mnt/misc
et pour démonter:
$ sudo umount /mnt/misc $ sudo cryptsetup close tcmisc
On peut bien sûr créer ses conteneurs directement avec cryptsetup aussi. Par exemple, un conteneur de type luks:
1. créer le fichier support du conteneur (ex: 512Mb ici):
$ dd if=/dev/zero of=/tmp/test.bin count=1000k
2. créer une partition dans ce fichier (on commence ici par identifier le 1er loop-device disponible et y associer notre fichier)
$ losetup -f
/dev/loop0
$ sudo losetup /dev/loop0 /tmp/test.bin
$ sudo fdisk /dev/loop0
n ==> new partition
p ==> primaire
accepter les autres valeurs par défaut.
q ==> quitter.
3. Initialiser le cryptage du pseudo-device, ici au format luks
$ sudo cryptsetup --verbose --verify-passphrase luksFormat /dev/loop0
=> répondre aux questions
$ sudo losetup -d /dev/loop0
4. Commencer à utiliser le conteneur: On l'ouvre, puis comme c'est le premier accès, il faut y créer un système de fichiers, puis le monter. Par la suite on n'aura qu'a le monter.
$ sudo cryptsetup --type luks open /tmp/test.bin test $ sudo mkfs.ext2 /dev/mapper/test $ sudo mount /dev/mapper/test /mnt/tcvp/
5. Utiliser le conteneur, et quand on veut le fermer:
$ sudo umount /mnt/tcvp/ $ sudo cryptsetup close test
NB: en utilisant "cryptsetup --type luks open ... " et "cryptsetup close ...", les operations losetup sont encapsulées.
Autres moyens d'accès aux conteneurs truecrypt
tcplay : conteneurs trueCrypt
(Essayé pour la première fois avec Fedora 17). Tcplay est une implémentation de TrueCrypt sous license BSD. Voir projet github ici. Avec tcplay, monter un conteneur 'truecrypt':
$ sudo losetup /dev/loop1 $HOME/my-tc-file $ sudo tcplay -m tcvol -d /dev/loop1 => entrer passphrase. $ sudo mount /dev/mapper/tcvol /mnt/tcvol
Et pour démonter:
$ sudo umount /mnt/tcvol $ sudo cryptsetup remove tcvol $ sudo losetup -d /dev/loop1
Sans accès à sudo
encFS : arborescence encryptés
Pour un utilisateur qui n'a pas accès à sudo, encFS (Package: fuse-encfs, voir man encfs) permet de créer et monter des pseudo systèmes de fichier encryptés.
Contrairement à cryptsetup, encFS ne crée pas vraiment de système de fichier dans un conteneur, mais s'appuie sur le système de fichiers sous-jacent pour stocker les données chiffrées. Lors de la création de la zone chiffrée, on passe 2 noms de dossiers: un chiffré, l'autre non chiffré. Ensuite, les fichiers déposés dans la zone non-chiffrée sont automatiquement copiés chiffrés dans l'autre répertoire (noms de fichiers/sous-répertoires également).
Ensuite, lorsque l'on démonte la zone chiffrée, les fichiers sont supprimés de la partie non-chiffrée, mais toujours visibles (chiffrés) dans l'autre. Petit incovénient donc, on masque moins de choses qu'avec un vrai conteneur.
Exemple de création/montage de dossier chiffré avec encFS (répertoire chiffré ~/.bdata, répertoire en clair: ~/cdata):
$ encfs ~/.bdata ~/cdata
=> la première fois, le encfs pose quelques questions pour la configuration de la zone (dont le mot de passe).
les fois suivantes, il ne s'agit que du montage: seul le mot de passe est demandé.
A ce stade, la zone est montée. df montre bien une ligne pour cet espace, mais les infos de taille et occupation correspondent au FS sous-jacent (/home dans cet exemple):
$ df encfs 10475520 5200528 5274992 50% /home/toine/cdata
openssl : cryptage direct de fichier
Documentation détaillée : man enc
Exemples:
$ echo test | openssl enc -aes-256-cbc -pbkdf2 -iter 1000 -a -k 'absnfjtyrufjdngjvhfgksdfrtifghkv' U2FsdGVkX18cc9vgYPbfl74Q8dq/VyL4XyjvyEEo0LU= $ echo "U2FsdGVkX18cc9vgYPbfl74Q8dq/VyL4XyjvyEEo0LU=" | openssl enc -d -aes-256-cbc -a -pbkdf2 -iter 1000 -k 'absnfjtyrufjdngjvhfgksdfrtifghkv' test $ openssl enc -aes-256-cbc -d -a -pbkdf2 -iter 1000 -in /cygdrive/d/tmp/toine.bin | grep -i launch
Compatibilité avec versions < openssl 1.1, l'algo de hash par défaut était md5:
$ openssl enc -aes-256-cbc -d -a -md md5 -in /cygdrive/d/tmp/toine.bin | grep -i launch
openssl dans vi : décryptage du fichier à l'ouverture et cryptage à la sauvegarde
Cette méthode est intéressante car ne requiert pas de fichier temporaire en clair. Les données en mémoire sont en clair donc sensibles à un dump mémoire.
Les commandes suivantes sont à insérer dans directement dans ~/.vimrc ou équivalent (par exemple dans un fichier .vim/plugin/aes.vim). Il faut avoir openssl dans son path pour que le plugin fonctionne.
" OpenSSL encrypted files.
" PBKDF v1.5 (salted) aes-256-cbc encrypted file. (File magic "Salted__")
augroup aes
autocmd!
autocmd BufReadPre,FileReadPre *.aes set binary
autocmd BufReadPre,FileReadPre *.aes set backup
autocmd BufReadPre,FileReadPre *.aes set history=0 cmdheight=3 viminfo=
autocmd BufReadPre,FileReadPre *.aes set noswapfile nowritebackup
autocmd BufReadPost,FileReadPost *.aes set shell=/bin/sh shellredir=>
autocmd BufReadPost,FileReadPost *.aes '[,']!openssl aes-256-cbc -d -salt
autocmd BufReadPost,FileReadPost *.aes set nobinary cmdheight& shell&
autocmd BufReadPost,FileReadPost *.aes let b:encflag=1
autocmd BufReadPost,FileReadPost *.aes exe "doau BufReadPost " . expand("%:r")
autocmd BufReadPost,FileReadPost *.aes redraw!
autocmd BufWritePre,FileWritePre *.aes mark z
autocmd BufWritePre,FileWritePre *.aes set binary cmdheight=3 shell=/bin/sh
autocmd BufWritePre,FileWritePre *.aes '[,']!openssl aes-256-cbc -salt
autocmd BufWritePost,FileWritePost *.aes undo
autocmd BufWritePost,FileWritePost *.aes set nobinary cmdheight& shell&
autocmd BufWritePost,FileWritePost *.aes 'z
augroup END
Ensuite, il suffit d'utiliser l'extension .aes (ou autre à condition d'adapter le code) pour activer le mode crypté. Le mot de passe est demandé une fois à l'ouverture et 2 fois à l'écriture.
Attention: ici, on a positionné la variable "backup". C'est préférable car an cas de problème de confirmation du mot de passe, le fichier est écrasé...
Note: le plugin openssl.vim effectue le même type de fonction avec un panel plus large d'algorithmes, et une tempo de sortie automatique de vi.
Encrypter: Solutions utilisables sous Android
Conteneurs sans nécessité de rooter
- application EDS (ou EDS lite): compatible avec des conteneurs au format Truecrypt, VeraCrypt, LUKS, EncFs
Conteneurs avec nécessité de rooter
- application LUKSmanager
Encrypter: Solutions utilisables sous Windows
Le système propose de base BitLocker dans certaines versions (notamment entreprise) depuis Vista.
Depuis l'arrêt de TrueCrypt, il est possible d'utiliser VeraCrypt (son clone). Pour un usage personnel, et assurer la confidentialité de ses données dans les cas d'usage courants (perte/vol d'un PC par exemple), c'est tout à fait suffisant. L'ergonomie et intégration à Windows (au moins XP, 7 ) est correcte.
Egalement: FreeOTFE (si install sous winXP), dont le support a été arrété, est maintenant suivi sous le projet LibreCrypt. Cet outil est compatible LUKS => possibilité donc de partager des conteneurs avec le monde Android ou Linux.
WinZIP et autres utilitaires permettent aussi de créer des archives protégées par mot de passe.
Openssl pour windows (ou dans cygwin) permet de (dé)crypter directement un fichier.
La méthode vi+openssl présentée pour Linux est fonctionnelle avec cygwin moyennant l'installation des packages adéquats.
Effacer le contenu des fichiers sensibles
- shred (pkg coreutils) permet d'écraser le contenu d'un fichier et optionnellement le supprimer. A noter: les blocs constituant le fichier ont pu être déplacés au cours de sa vie (redimensionnement, ...) donc pas une garantie absolue... Exemple: nettoyage et suppression du fichier /tmp/myfile.txt
$ shred -u /tmp/myfile.txt