Chiffrer et protéger ses données SAS
Les 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:
Puis jetons un coup d'oeil indiscrer à son contenu, via la commande Linux strings :
Maintenant, nous allons chiffrer notre fichier :
Un petit message nous indique que notre fichier et seulement protégé en lecture :
Nous créons alors un second fichier mais en utilisant l'option PW à la place de READ :
Nous avons 3 fichiers :
Essayons d'afficher le contenu du fichier encryptsalaryb.sas7bdat :
Maintenant, essayons de lire nos données dans SAS :
SAS vous demande alors de saisir le mot de passe pour accéder aux données chiffrées
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 :
A contrario, si vous avez utilisé l'option PW=, une erreur s'affiche si vous tentez d'écraser la table :
C'est également le cas si vous essayez de supprimer cette table :
Puis essayons de l'ouvrir :
SAS nous demande alors de saisir le mot de passe :
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 :
Attention :
L'option ne permet pas, par exemple, de se prémunir contre l’exécution d'une proc sql drop table :
- 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 :
1 2 3 4 5 6 7 8 9 |
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 ; |
1 |
strings salary.sas7bdat |
1 2 3 4 5 6 7 8 9 10 11 |
SAS FILESALARY 9.0401M3Linux 2.6.32-131.6.1.e x86_64 @Muriel @Bjorn @ffffff @Freda @Benny @ffffff @Agnetha |
1 2 3 4 5 6 7 8 9 |
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 ; |
1 2 |
WARNING: The file TEST.ENCRYPTSALARY.DATA is not ALTER protected. It could be deleted or replaced without knowing the password. |
1 2 3 4 5 6 7 8 9 |
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 ; |
1 |
ls -lrt |
1 2 3 |
-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 |
1 |
strings encryptsalary.sas7bdat |
1 2 3 4 5 6 7 8 9 10 11 |
SAS FILEENCRYPTSALARY 9.0401M3Linux 2.6.32-131.6.1.e x86_64 6RD8 YZBENC01j y1B8 `v3y wcK8 :Dey *=2t |
1 2 |
proc print data=test.encryptsalaryB; run; |
1 |
READ access denied. Enter the password for file TEST.ENCRYPT SALARYB.DATA |
1 2 |
WARNING: The file TEST.ENCRYPTSALARY.DATA is not ALTER protected. It could be deleted or replaced without knowing the password. |
1 2 |
ALTER access denied. Enter the password for file TEST.ENCRYPTSALARYB.DATA. ERROR: Invalid or missing ALTER password on member TEST.ENCRYPTSALARYB.DATA. |
1 2 3 |
proc sql; drop table test.encryptsalaryB; quit; |
1 2 |
ALTER access denied. WARNING: Table TEST.ENCRYPTSALARYB has not been dropped. |
Utilisation avec AES
AES 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 :
1 2 3 4 5 6 7 8 9 |
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 ; |
1 2 |
proc print data=salary; run; |
1 |
<img class="aligncenter size-full wp-image-943" src="https://www.nicolas-housset.fr/wp-content/uploads/2016/05/positionner-option-encryptkey-pour-chiffrage-aes-sas.jpg" alt="positionner-option-encryptkey-pour-chiffrage-aes-sas" width="382" height="62" /> |
1 2 3 |
proc sql; drop table salary; quit; |
1 2 3 4 |
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 |