===== Protocole de cryptage et de décryptage des données EEG collectées =====
==== Introduction sommaire ====
Cet article détaille les méthodes qu'il sera possible d'employer pour réaliser le cryptage et le décryptage des fichiers. Ces mesures s'inscrivent directement dans le cadre de notre politique de protection des données personnelles formalisée au sein de l'analyse d'impact sur les données personnelles réalisée en amont.
La première méthode proposée est "automatisée", c'est-à-dire qu'elle se base sur des classes Python afin de pouvoir crypter et décrypter de manière dynamique et automatique les datasets dès qu'on le souhaite. Elle utilise la librairie cryptography et plus précisément l'algorithme de chiffrement Fernet qui permet de générer des clés, chiffrer et déchiffrer des chaînes de caractères. Nous l'avons adapté pour pouvoir chiffrer les données d'un dataset et hasher le nom de fichier afin qu'on ne puisse pas remonter aisément au nom de la personne concernée en cas de soucis.
Il est intéressant de noter que Fernet repose sur les algorithmes AES 128 bits en mode Cipher Block Chaining et SHA256. Il offre donc une protection que nous jugeons suffisante pour le contenu des datasets. Le nom est haché en utilisant la fonction de hachage BlakeHash de la librairie hashlib de Python.
La seconde méthode que nous avons décrite sur cette page permet de chiffrer et déchiffrer des datasets manuellement grâce à OpenSSL et en se basant sur l'algorithme de chiffrement RSA.
==== Cryptage et décryptage des datasets par un script ====
=== Import des classes nécessaires ===
Afin de crypter et décrypter facilement les datasets tout en hashant les noms de fichier en conformité avec notre politique de protection des données personnelles, nous avons besoin d'importer les classes FileEncrypter et FileDecrypter :
from crypt_utils import FileEncrypter, FileDecrypter
=== Hachage du nom de fichier ===
Premièrement, il va nous falloir hacher le nom du fichier afin de dissimuler le nom de la personne qui a passé la session d'enregistrement tout en permettant facilement pour l'équipe de pouvoir garantir les droits d'accès, d'effacement et de rectification des données personnelles.
Pour cela, il suffit d'instancier la classe FileEncrypter et d'utiliser la méthode dataset_filename_encrypt :
filename = "filename.fif"
encrypter = FileEncrypter()
encrypter.dataset_filename_encrypt(filename,remove_original=False)
Il faudra bien sûr penser à modifier le nom du fichier brut. L'argument remove_original permet, s'il est à True, la suppression du dataset original après hashage du nom de fichier. Cela permet de ne garder, in fine, que le fichier intégralement crypté.
=== Cryptage d'un dataset ===
Ensuite, pour crypter les données du dataset, il va falloir récupérer le nom hashé du fichier via la méthode name_encrypt puis la passer en paramètre à la méthode encrypt_dataset d'un FileEncrypter :
encrypted_filename = encrypter.name_encrypt(filename)
encrypter.encrypt_dataset(encrypted_filename)
Après chiffrement d'un dataset, deux fichiers apparaissent : celui ayant l'extension .crypt est le fichier crypté là où le fichier .key contient la clé nécessaire à son déchiffrement. Il est conseillé de mettre les clés en sécurité (généralement, il est préférable de les mettre sur un espace de stockage hors réseau).
=== Décryptage d'un dataset ===
Enfin, pour décrypter le dataset afin de pouvoir l'exploiter, il faut tout d'abord disposer du fichier .key correspondant à la racine du projet. Il est alors possible de décrypter le fichier en instanciant un FileDecrypter puis en appelant la méthode decrypt_dataset.
decrypter = FileDecrypter()
decrypter.decrypt_dataset(encrypted_filename,"fif")
==== Cryptage et décryptage manuel des datasets via OpenSSL ====
=== Encrypter un fichier csv ===
1) Installer OpenSSL. (par exemple sur le lien suivant : https://slproweb.com/products/Win32OpenSSL.html)
2) Ouvrir un terminal OpenSSL.
3) Générer une clé privée avec la commande : openssl genrsa -aes256 -out private.key 8912.
Le paramètre private.key est le nom par défaut, il peut être changé dans la commande.
Lors de la génération de la clé privée, un mot de passe sera demandé. Il est nécessaire au décryptage et apporte une protection supplémentaire.
Il sera nécessaire de conserver chaque mot de passe en sécurité.
4) Extraire la clé publique correspondante : openssl rsa -in private.key -pubout -out public.key
5) Encrypter le fichier csv avec la commande : openssl rsautl -encrypt -pubin -inkey public.key -in file_to_encrypt_name.csv -out encrypted_filename.csv
6) Mettre en sécurité la clé privée et partager la clé publique.
=== Décrypter un fichier csv ===
1) Récupérer la clé publique et la clé privée
2) Décrypter le fichier csv avec la commande : openssl rsautl -decrypt -inkey private.key -in encrypted_filename.csv -out decrypted_filename.csv
Pour décrypter le fichier, il sera nécessaire d'employer le mot de passe définit lors de l'étape de chiffrement et mis en sécurité à ce moment.
3) Remettre en sécurité la clé privée et le mot de passe de déchiffrement.