Je me baladais dans une grande surface informatique lorsque j'ai entendu un vendeur raconter, sûr de lui, que la proximité d'un aimant et d'une mémoire flash aurait des conséquences dramatiques pour cette dernière, à savoir une perte de données irrémédiable.

Quelques temps auparavant m'était justement arrivé cette mésaventure, je cherchais ma clef usb que j'avais fini par retrouver collée...à un aimant et cela, sans le moindre dégâts sur les données.

Je repartis du magasin en me disant qu'il serait bon de savoir si, oui ou non, les aimants étaient dangereux pour nos précieuses données contenues dans des mémoires flash, en théorie non, mais à force d'entendre cette légende, j'ai pensé qu'il serait bon de tester, c'est le but de cet article...

Procédure de test

Afin de vérifier le danger ou non d'un aimant à côté d'une mémoire de type Flash, nous allons mettre un aimant à proximité immédiate d'une carte Flash pendant des durées croissantes en contrôlant à chaque étape l'intégrité des données.

Les protagonistes sont les suivants, tout d'abord, les cartes mémoires :

flash.jpg

Deux aimants « collés » l'un sur l'autre, petits mais costauds, je n'ai pas mesuré l'intensité de ces aimants mais pour essayer de vous donner une idée, je peux vous dire qu'il est très dur, voir impossible, de les séparer à la force des mains une fois l'un sur l'autre...

flash_magnet.jpg

Pour s'assurer de l'état des données après chaque phase de test, une lecture sera faite dans la carte et une comparaison de md5 sera faite sur l'intégralité de la carte.

Afin d'avoir un rendu plus lisible, le contenu de la carte sera une image au format TGA et c'est Léonard de Vinci qui nous prêtera son auto-portrait, la détérioration du contenu altérera visiblement l'image ainsi, il sera possible, en cas de détérioration de la mémoire flash, de voir visuellement les zones abimées.

Pour simplifier les tests, j'ai créé 2 scripts :

  • fl_create_ref : Créer les fichiers de référence
    Liste des arguments :
    • d : Le périphérique (ex: -d /dev/sda1)
    • f : Identifiant de la flash (voir les numéros collés sur les clefs)

    Le script exécute les actions suivantes :

    1. Charge les données de l'image (sans l'en-tête) dans le périphérique
    2. Dumpe la mémoire flash du périphérique et stocke le contenu dans un fichier, ce dernier servira de référence
    3. Calcule le Md5 de la référence
  • fl_test : Exécute un test du périphérique
    Liste des arguments :
    • d : Le périphérique (ex: -d /dev/sda1)
    • f : Identifiant de la flash (voir les numéros collés sur les clefs)
    • s : Étape (step), c'est à dire, le premier test, le second, etc...
    Ce script va se contenter de lire la mémoire flash, stocker le dump, calculer la somme Md5 et finalement exécuter une comparaison entre la référence de la mémoire courante et le dump obtenu.

Test

leonardo.jpg

Tout d'abord, il faut remplir les mémoires et créer les références pour chaque périphérique, cela est fait grâce au script fl_create_ref :

./fl_create -d /dev/xxx -f 1
./fl_create -d /dev/yyy -f 2
./fl_create -d /dev/zzz -f 3

Une fois cette étape effectuée, il faut mettre à l'épreuve les mémoires, pour cela, j'ai mis en contact direct l'aimant avec la puce durant un temps déterminé.

Voici les différentes étapes durant lesquelles les mémoires flash ont été en contact direct avec l'aimant :

  1. 10 min
  2. 3 h
  3. 13 h
  4. 240 h

À la fin de chaque test, j'ai utilisé le script fl_test de cette manière :

./fl_test -d /dev/xxx -f 1 -s 2

Le paramètre -s correspondant bien sûr au numéro de l'étape (1 pour 10min, 3 pour 3h...)
Ainsi, à chaque étape, nous avons un dump complet pour chaque mémoire ainsi que les sommes Md5 associées.

Voici l'arborescence des fichiers une fois tous les tests réalisés :

$ tree
|-- README
|-- fl_create_ref
|-- fl_test
|-- flash
|-- 1
| |-- leonard.data
| |-- leonard.md5
| |-- log
| |-- out-1.dump
| |-- out-2.dump
| |-- out-3.dump
| `-- out-4.dump
|-- 2
| |-- leonard.data
| |-- leonard.md5
| |-- log
| |-- out-1.dump
| |-- out-2.dump
| |-- out-3.dump
| `-- out-4.dump
|-- 3
| |-- leonard.data
| |-- leonard.md5
| |-- log
| |-- out-1.dump
| |-- out-2.dump
| |-- out-3.dump
| `-- out-4.dump
`-- log

C'est donc avec l'oeil averti de Léonard que les tests se sont succédés.

Résultats

Les résultats sont clairs, nets et précis, l'aimant (immobile) placé à proximité immédiate des mémoires flash n'a en rien altéré les données présentes dans les puces.
Les sommes Md5 sont restés invariables et cela, aussi bien pour 10 minutes que pour 10 jours.

L'aimant n'a donc pas réussi à faire broncher le regard de Léonard...Rien de vraiment étonnant en considérant le fonctionnement interne d'une mémoire flash, l'étape suivante serait donc de tester les mémoires flash à proximité de champs magnétiques fluctuants (moteurs, antennes d'émissions...)

Annexe

Vous trouverez en pièces jointes une archive contenant les scripts décrits ci-dessus et les fichiers images qui ont été mis dans les mémoires.