Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

La commande mcrypt est-elle « fiable » ?

26 réponses
Avatar
Francois Lafont
Bonjour à tous,

Sur le disque dur de ma machine perso, qui est sous
Debian Wheezy, j'utilise la commande « mcrypt » (issue
du paquet éponyme) pour chiffrer/déchiffrer un fichier
texte un peu sensible (c'est un fichier qui contient
des identifiants/mots des passe car je n'ai pas une bonne
mémoire ;)). La commande « mcrypt » permet donc de
chiffrer/déchiffrer un fichier via un mot de passe :

* avec « mcrypt secret.txt », je dois saisir deux fois à
l'identique un mot de passe et cela me génère une version
chiffrée de mon fichier qui s'appelle « secret.txt.nc ».

* avec « mcrypt -d secret.txt.nc », je dois saisir le mot
de passe précédent et alors la version en clair du fichier
est générée (ie le fichier « secret.txt »).

Je me suis fait un petit script shell qui me permet de
modifier ou consulter ce fichier (entre autres choses
le script supprime par exemple le fichier en clair une
fois que je l'ai consulté pour éviter que j'oublie un
jour etc).

Bref, d'un point de vue « ergonomie » ma solution bricolée
me convient très bien, pas de souci. Mais ma question porte
ici sur la « fiabilité » du chiffrement de la commande. En
effet, j'ai bien tenté de consulter la page man de « mcrypt »,
ça parle d'algorithmes etc. mais je dois avouer qu'en crypto
je n'y connais rien du tout.

La chiffrement de « mcrypt » sur Debian Wheezy (version 2.6.8)
est-il fiable ? Est-ce que, si un jour (en 2015/2016) quelqu'un
tombe sur la version chiffrée du fichier, fichier chiffré avec
un mot de passe d'une douzaine de caractères du genre celui-là
« El3;p@Nt3+14 » (rien à voir avec mon mot de passe mais c'est
pour donner une idée), est-ce que je peux avoir la garantie que
ce quelqu'un ne pourra pas déchiffrer le fichier en un temps
raisonnable ?

Parce que si on me dit qu'avec « mcrypt », le petit hacker du
dimanche peut me cracker mon fichier en 30 minutes, ça
m'embêterait un peu. ;)

Merci d'avance pour votre aide.

--
François Lafont

10 réponses

1 2 3
Avatar
gump
Ci-dessous, voici du coup mon script pour consulter/éditer
mon fichier secret.txt. Le script suppose que le fichier
chiffré secret.txt.nc a été créé manuellement une première
fois et ensuite, on appelle le script ainsi :



Hélas ! je ne peux pas t'aider pour valider le script, tu es visiblement
bien plus compétent que moi ! mais il y a sûrement ici des barbus du
script ...
Avatar
Paul Aubrin
On Fri, 28 Aug 2015 23:58:16 +0200, Francois Lafont wrote:

Sur le disque dur de ma machine perso, qui est sous Debian Wheezy,
j'utilise la commande « mcrypt » (issue du paquet éponyme) pour
chiffrer/déchiffrer un fichier texte un peu sensible (c'est un fichier
qui contient des identifiants/mots des passe car je n'ai pas une bonne
mémoire ;)). La commande « mcrypt » permet donc de chiffrer/déchiffrer
un fichier via un mot de passe :



Pour les mots de passes, le mieux est d'utiliser un outil comme keepass.
Pour des données plus volumineuses, on peut utiliser un système fichier
chiffré tel que truecrypt.
Sinon, le couteau suisse du chiffrement est l'option enc d'openssl (man
enc). L'algorithme aes a été retenu après que sa solidité ait été validée
par des cryptanalystes indépendants réputés.
Avatar
Kevin Denis
Le 28-08-2015, Francois Lafont a écrit :
Ah oui, merci bien, je ne connaissais pas. Une fois de plus
sur ce groupe de discussion, j'ai appris quelque chose. Après
une consultation rapide de la page man de shred, il me semble
que je peux remplacer mon « rm -f secret.txt » par ça :

shred --remove --verbose --zero secret.txt

Est-ce que c'est suffisant pour empêcher définitivement la
récupération du fichier en clair secret.txt ?



un simple rm détruit la référence vers le fihier mais ne le supprime
pas réellement. Un petit exemple:
$ dd if=/dev/zero of=disk bs24k count
10+0 enregistrements lus
10+0 enregistrements écrits
10485760 octets (10 MB) copiés, 0,0149484 s, 701 MB/s
$ sudo mke2fs disk
[sudo] password for kevin:
mke2fs 1.42.12 (29-Aug-2014)
Rejet des blocs de périphérique : complété
En train de créer un système de fichiers avec 10240 1k blocs et 2560 i-noeuds.
UUID de système de fichiers•5fcd75-c163-4c1d-906c-166b593c9b2c
Superblocs de secours stockés sur les blocs :
8193

Allocation des tables de groupe : complété
Écriture des tables d'i-noeuds : complété
Écriture des superblocs et de l'information de comptabilité du système de
fichiers : complété

$ sudo mount -t ext2 -o loop disk /mnt/hd
$ ls /mnt/hd
lost+found

-> j'ai créé un disque rempli de zéros. Plaçons y un fichier secret:
$ sudo chmod 777 /mnt/hd/
$ echo "mot de passe secret" > /mnt/hd/secret
$ sync
$ rm -f /mnt/hd/secret

Donc suite au rm -f, le fichier a disparu, on est d'accord?

$ sudo umount /mnt/hd
$ strings disk | grep pass
mot de passe secret

Donc même si le fichier n'existe plus, les données sont encore présente.
La référence au fichier a disparu, mais les données sont encore là.

qu'avec shred désormais ça ira mieux. ;) (même si on est d'accord j'ai
sûrement des traces du fichier en clair qui traîneront encore quelques
temps.)



Voilà.
--
Kevin
Avatar
Benoit Izac
Bonjour,

Le 29/08/2015 à 01:39, Francois Lafont a écrit dans le message
<55e0f128$0$3380$ :

Pour ce genre d'usage, à échelle du particulier, on utilise plutot
des softs dans le genre de KeePass:
http://doc.ubuntu-fr.org/keepassx
http://sourceforge.net/p/keepass/discussion/329220/thread/17d1bd26/
https://packages.debian.org/sid/keepass2



Ça semble sans doute un programme très bien mais il s'utilise
via une interface graphique, non ? J'avoue que je suis assez
attaché à l'idée de pouvoir tout faire en console et aussi en
utilisant mon petit vim que j'aime beaucoup. ;)



J'utilise pwsafe depuis quelques années et j'en suis très satisfait.
<http://sourceforge.net/projects/pwsafe/>

--
Benoit Izac
Avatar
Francois Lafont
Hello,

On 29/08/2015 21:30, Kevin Denis wrote:

un simple rm détruit la référence vers le fihier mais ne le supprime
pas réellement.



Oui, je pense que c'était déjà clair pour moi que rm supprime
toute référence[*] au fichier dans les métadata du fs (dans
la table des inodes notamment et peut-être ailleurs je ne
sais pas) mais n'efface pas les données elles-mêmes (la zone
est juste considérée comme disponible désormais).

[*] à condition que le fichier ne possède plus le moindre
hardlink qui pointe vers lui.

Un petit exemple:
$ dd if=/dev/zero of=disk bs24k count
10+0 enregistrements lus
10+0 enregistrements écrits
10485760 octets (10 MB) copiés, 0,0149484 s, 701 MB/s
$ sudo mke2fs disk
[sudo] password for kevin:
mke2fs 1.42.12 (29-Aug-2014)
Rejet des blocs de périphérique : complété
En train de créer un système de fichiers avec 10240 1k blocs et 2560 i-noeuds.
UUID de système de fichiers•5fcd75-c163-4c1d-906c-166b593c9b2c
Superblocs de secours stockés sur les blocs :
8193

Allocation des tables de groupe : complété
Écriture des tables d'i-noeuds : complété
Écriture des superblocs et de l'information de comptabilité du système de
fichiers : complété

$ sudo mount -t ext2 -o loop disk /mnt/hd
$ ls /mnt/hd
lost+found

-> j'ai créé un disque rempli de zéros. Plaçons y un fichier secret:
$ sudo chmod 777 /mnt/hd/
$ echo "mot de passe secret" > /mnt/hd/secret
$ sync
$ rm -f /mnt/hd/secret

Donc suite au rm -f, le fichier a disparu, on est d'accord?

$ sudo umount /mnt/hd
$ strings disk | grep pass
mot de passe secret

Donc même si le fichier n'existe plus, les données sont encore présente.
La référence au fichier a disparu, mais les données sont encore là.



Ah, merci beaucoup pour l'exemple super rapide et peu coûteux
pour tester les choses et voir de ses propres yeux. J'ai profité
de ton exemple pour faire le test aussi avec un « shred --remove
--zero » et j'ai pu constater effectivement que le rm laisse bien
la donnée intacte (tant que le fs n'a pas réécrit par dessus
évidemment) et qu'avec le shred plus aucune trace des données.

Voilà qui finit de me rassurer complètement. ;)
Merci pour cet exemple très pédagogique Kevin.

--
François Lafont
Avatar
Kevin Denis
Le 30-08-2015, Francois Lafont a écrit :
Ah, merci beaucoup pour l'exemple super rapide et peu coûteux
pour tester les choses et voir de ses propres yeux. J'ai profité
de ton exemple pour faire le test aussi avec un « shred --remove
--zero » et j'ai pu constater effectivement que le rm laisse bien
la donnée intacte (tant que le fs n'a pas réécrit par dessus
évidemment) et qu'avec le shred plus aucune trace des données.



Bon. Maintenant, imaginons que tu aies un SSD. Les opérations d'écriture
ne sont pas faites sur place, mais regroupées et réordonnées. Ca se passe
à un niveau plus bas que le filesystem.
Afin d'étaler l'usure des cellules, une opération d'écriture peut se faire
sur la cellule suivante.
On imagine des cellules contigues ABCDEF et un fichier placé sur A:
Si tu réécris le fichier, la cellule A est marquée comme vide, et le fichier
est réécrit sur B. Et ainsi de suite. Un outil comme shred qui réécrit
5 fois des données aléatoire va en fait écrire 5 cellules du SSD.

Donc si un analyste démonte le SSD et lis les cellules une à une, il
retrouvera le fichier écrit sur A.

Tu peux lire la partie 5.19 de la FAQ de LUKS
https://gitlab.com/cryptsetup/cryptsetup/wikis/FrequentlyAskedQuestions
--
Kevin
Avatar
Francois Lafont
On 30/08/2015 22:29, Kevin Denis wrote:

Bon. Maintenant, imaginons que tu aies un SSD. Les opérations d'écriture
ne sont pas faites sur place, mais regroupées et réordonnées. Ca se passe
à un niveau plus bas que le filesystem.
Afin d'étaler l'usure des cellules, une opération d'écriture peut se faire
sur la cellule suivante.
On imagine des cellules contigues ABCDEF et un fichier placé sur A:
Si tu réécris le fichier, la cellule A est marquée comme vide, et le fichier
est réécrit sur B. Et ainsi de suite. Un outil comme shred qui réécrit
5 fois des données aléatoire va en fait écrire 5 cellules du SSD.

Donc si un analyste démonte le SSD et lis les cellules une à une, il
retrouvera le fichier écrit sur A.



Ok, compris, merci bien.

Tu peux lire la partie 5.19 de la FAQ de LUKS
https://gitlab.com/cryptsetup/cryptsetup/wikis/FrequentlyAskedQuestions



Mais il n'y a aucun moyen d'effacer véritablement et
de manière certaine une donnée d'un disque SSD ? Je ne
suis pas concerné par ce problème vu que je n'ai pas
de SSD mais juste par curiosité. Parce que dans ton
lien, j'ai pas l'impression qu'ils proposent de
solutions (juste des contournements).

--
François Lafont
Avatar
Ascadix
Le 30/08/2015, Francois Lafont a supposé :
On 30/08/2015 22:29, Kevin Denis wrote:

Bon. Maintenant, imaginons que tu aies un SSD. Les opérations d'écriture
ne sont pas faites sur place, mais regroupées et réordonnées. Ca se passe
à un niveau plus bas que le filesystem.
Afin d'étaler l'usure des cellules, une opération d'écriture peut se faire
sur la cellule suivante.
On imagine des cellules contigues ABCDEF et un fichier placé sur A:
Si tu réécris le fichier, la cellule A est marquée comme vide, et le fichier
est réécrit sur B. Et ainsi de suite. Un outil comme shred qui réécrit
5 fois des données aléatoire va en fait écrire 5 cellules du SSD.

Donc si un analyste démonte le SSD et lis les cellules une à une, il
retrouvera le fichier écrit sur A.



Ok, compris, merci bien.

Tu peux lire la partie 5.19 de la FAQ de LUKS
https://gitlab.com/cryptsetup/cryptsetup/wikis/FrequentlyAskedQuestions



Mais il n'y a aucun moyen d'effacer véritablement et
de manière certaine une donnée d'un disque SSD ? Je ne
suis pas concerné par ce problème vu que je n'ai pas
de SSD mais juste par curiosité. Parce que dans ton
lien, j'ai pas l'impression qu'ils proposent de
solutions (juste des contournements).



Backup des données, pas un dd raw hein, une copie des fichiers + le
nécessaire pour le systéme (MBR, etc...) éventuellement, un coup de
clonezilla par ex ferait l'affaire.

puis un sécure erase du SSD

puis restore des données


:-)
Oui, c'est sacrément lourd

--
@+
Ascadix
adresse @mail valide, mais ajoutez "sesame" dans l'objet pour que ça
arrive.
Avatar
Francois Lafont
On 31/08/2015 01:00, Ascadix wrote:

Backup des données, pas un dd raw hein, une copie des fichiers + le nécessaire pour le systéme (MBR, etc...) éventuellement, un coup de clonezilla par ex ferait l'affaire.

puis un sécure erase du SSD



D'après le lien donné par Kevin, même un "secure erase"
n'est pas forcément fiable à tous les coups.

puis restore des données


:-)
Oui, c'est sacrément lourd



Oui en effet. ;)

Bon, le jour où j'ai un SSD, je change mon script pour
que le fichier en clair soit écrit sur un tmpfs et puis
voilà. :p

--
François Lafont
Avatar
gump

Bon, le jour où j'ai un SSD, je change mon script pour
que le fichier en clair soit écrit sur un tmpfs et puis
voilà. :p




Oui, un RAMdisk est la bonne solution.

D'une manière générale, la confidentialité des données ne fait pas bon
ménage avec les SSD et les systèmes de fichiers journalisés ( donc NTFS
sous Windows, et ext3, ext4, Reiser, etc. sous Linux )
Le mieux : pour des données sensibles, une partition en fat32 ( lisible
et inscriptible sous Linux ) ou ext2. Plus un tmpfs comme cache volatile.
Et ne pas oublier le swap : tu dis qu'il ne sert pas mais ...qui sait ?
Sous windows, supprimer carrément la mémoire virtuelle, ça fait plus de
dix ans que je le fais et aucun prog ne s'en est jamais plaint !

Bon, ça c'est si on a des secrets d'Etat, hein ! sinon on peut quand
même être moins parano.
1 2 3