Chiffrer et protéger ses données SAS

sas-ENCRYPT-optionLes mots de passe SAS et les  Metadata-Bound Libraries limitent l'accès à des ensembles de données SAS au sein de SAS. Mais ces mécanismes ne peuvent empêcher une lecture de ses données  SAS au niveau du système d'environnement d'exploitation ou d'être lu par un programme externe. Pour éviter que des petits malins  puissent lire le contenu de vos DATASETS SAS, il est possible de les chiffrer. Vos données sont alors déchiffrées dans SAS, au moment de la lecture sur disque, mais ne peuvent pas être déchiffré  au niveau de l’OS ou lors d’un accès par un programme autre que SAS. Ce mécanisme de chiffrement n’impacte pas l’accès au fichier, notamment au niveau du système d’exploitation. Il peut donc être intéressant d’utiliser le chiffrement des données et le contrôle d’accès au niveau de l’OS pour améliorer encore la sécurité. Il existe deux algorithmes pouvant être utilisé pour chiffrer les données:
  • SAS Proprietary Encryption.
  • AES (Advanced Encryption Standard) encryption

Utilisation avec SAS Proprietary Encryption

SAS propriétaire Encryption est disponible, de base, dans tous les déploiement et utilise une technique de chiffrement avec une rolling-key 32 bits utilisé pour le chiffrement des données SAS avec des mots de passe.  Cette technique utilise le mot de passe comme élément de clé pour chiffrer les données. Aussi, cette méthode fournit un niveau de sécurité moyen. En effet, les utilisateurs doivent fournir le bon mot de passe pour se voir autoriser leur accès aux données, mais avec la vitesse de calculs des ordinateurs d'aujourd'hui, votre fichier de données pourrait être soumis à une attaque de type brute-force  sur les 2,563,160,682,591 combinaisons possibles. SAS Proprietary Encryption est mise en oeuvre par l’intermédiaire de l'option ENCRYPT. Comme vous vous en doutez, il s'agit d'une option de l'étape DATA et cette options est à positionner au moment de la création de votre dataset.  Comme expliqué au dessus, le chiffrement se base sur un mot de passe, il faut donc en saisir un. Plusieurs possibilités : Soit, par exemple,  vous utilisez l'option READ, pour empêcher les utilisateurs de lire le fichier, sauf si elles entrent dans le mot de passe; Soit PW, pour rendre la lecture, l'écriture ou la modification impossible aux utilisateurs ne connaissant pas le mot de passe.

Exemple de mise en oeuvre

Créons d'abord un fichier sans aucune protection :
data test.salary;
   input name $ yrsal bonuspct;
   datalines;
Muriel    34567  3.2
Bjorn     74644  2.5
Freda     38755  4.1
Benny     29855  3.5
Agnetha   70998  4.1
;
Puis jetons un coup d'oeil indiscrer à son contenu, via la commande Linux strings :
strings salary.sas7bdat
SAS FILESALARY                                                         
9.0401M3Linux
2.6.32-131.6.1.e
x86_64
@Muriel
@Bjorn
@ffffff
@Freda
@Benny
@ffffff
@Agnetha
Maintenant, nous allons chiffrer notre fichier :
data test.encryptsalary(encrypt=yes read=password);;
   input name $ yrsal bonuspct;
   datalines;
Muriel    34567  3.2
Bjorn     74644  2.5
Freda     38755  4.1
Benny     29855  3.5
Agnetha   70998  4.1
;
Un petit message nous indique que notre fichier et seulement protégé en lecture :
WARNING: The file TEST.ENCRYPTSALARY.DATA is not ALTER protected.
It could be deleted or replaced without knowing the password.
Nous créons alors un second fichier mais en utilisant l'option PW à la place de READ :
data test.encryptsalaryB(encrypt=yes pw=password);;
   input name $ yrsal bonuspct;
   datalines;
Muriel    34567  3.2
Bjorn     74644  2.5
Freda     38755  4.1
Benny     29855  3.5
Agnetha   70998  4.1
;
Nous avons 3 fichiers :
ls -lrt
-rw-r--r-- 1 sasts techsup 131072 May 24 04:18 salary.sas7bdat
-rw-r--r-- 1 sasts techsup 131072 May 24 04:27 encryptsalary.sas7bdat
-rw-r--r-- 1 sasts techsup 131072 May 24 04:27 encryptsalaryb.sas7bdat
Essayons d'afficher le contenu du fichier encryptsalaryb.sas7bdat :
strings encryptsalary.sas7bdat
SAS FILEENCRYPTSALARY                                                   
9.0401M3Linux
2.6.32-131.6.1.e
x86_64
6RD8
YZBENC01j
y1B8
`v3y
wcK8
:Dey
*=2t
Maintenant, essayons de lire nos données dans SAS :
proc print data=test.encryptsalaryB;
run;
SAS vous demande alors de saisir le mot de passe pour accéder aux données chiffrées
READ access denied.  Enter the password for file TEST.ENCRYPT SALARYB.DATA 
Si votre table est créer avec l'option READ= il est possible de l’écraser avec, par exemple une autre étape DATA. Dans le cas où cela se produit, le message suivant s'affiche et les données sont remplacées :
WARNING: The file TEST.ENCRYPTSALARY.DATA is not ALTER protected.  
It could be deleted or replaced without knowing the password.
A contrario, si vous avez utilisé l'option PW=, une erreur s'affiche si vous tentez d'écraser la table :
ALTER access denied.  Enter the password for file TEST.ENCRYPTSALARYB.DATA.
ERROR: Invalid or missing ALTER password on member TEST.ENCRYPTSALARYB.DATA.
C'est également le cas si vous essayez de supprimer cette table :
proc sql;
   drop table test.encryptsalaryB;
quit;
ALTER access denied.
WARNING: Table TEST.ENCRYPTSALARYB has not been dropped.

Utilisation avec AES

aes-sas-encrypt-datasetAES permet un chiffrement plus puissant en utilisant une valeur de clé qui peut aller jusqu'à 64 caractères. A l'inverse du cryptage propriétaire SAS qui utilise le mot de passe comme clé et le stock dans le dataset, AES utilise une valeur clé qui n'est pas stockées dans le jeu de données. Pour utiliser AES, positionnez simplement l'option ENCRYPT=AES et sprécifiez votre mot de passe via l'option ENCRYPTKEY. Notez que vous ne pouvez pas changer la valeur de ENCRYPTKEY sur un dataset chiffré avec AES sans recréer l'ensemble de données. Le chiffrement AES n'est possible qu'a partir de SAS 9.4. Vous ne pouvez pas chiffrer des vues SAS. Pourquoi ? Car elle ne contiennent aucune donnée. Si le fichier de données  utilise AES, tous les index associés sont chiffrées avec  AES. Si vous perdez ou oubliez ENCRYPTKEY, il ne sera pas possible d'ouvrir le fichier et de récupérer les données.

Exemple de mise en oeuvre

Comme pour nos tests précedent, commençons par créer un fichier chiffrer :
data salary(encrypt=aes encryptkey=green);
   input name $ yrsal bonuspct;
   datalines;
Muriel    34567  3.2
Bjorn     74644  2.5
Freda     38755  4.1
Benny     29855  3.5
Agnetha   70998  4.1
;
Puis essayons de l'ouvrir :
proc print data=salary;
run;
SAS nous demande alors de saisir le mot de passe : saisir-mot-de-passe-pour-sas-dataset La saisie d'un mauvais mot de passe entraîne l'affichage de l'erreur suivante dans le journal SAS : ERROR: Valeur ENCRYPTKEY incorrecte pour WORK.SALARY.DATA. Pour ne pas devoir saisir le mot de passe via une boite de dialogue, vous pouvez le préciser dans la proc print :  
positionner-option-encryptkey-pour-chiffrage-aes-sas
  Attention : L'option ne permet pas, par exemple, de se prémunir contre l’exécution d'une proc sql drop table :
proc sql;
   drop table salary;
quit;
NOTE: Table WORK.SALARY a été supprimée.
NOTE: PROCEDURE SQL used (Total process time):
      real time           0.01 seconds
      cpu time            0.00 seconds

Nicolas Housset

Passionné d'informatique, je suis Consultant et expert technique SAS VIYA, également co-fondateur de la société Flexcelite. Spécialisé dans les technologies SAS (Viya, 9.4) et les infrastructures associées (Linux, Hadoop, Azure), ce blog est mon espace pour partager mes mémos techniques et retours d'expérience.