LesezeichenAbonnierenRSS-Feed abonnieren
MarkusPriller
Returning User | Level 2

Grundsätzlich muss unterschieden werden zwischen Anonymisierung und Pseudonymisierung.

 

Für die definitive Anonymisierung wird meistens die Verwendung von Einwegverfahren verwendet.

 

Auf älteren SAS-Versionen kann z.B. diesbezüglich das MD5-Verfahren verwenden bzw. auf neueren SAS-Versionen z.B. SHA256-Verfahren.

 

Da die Krypto-Einwegverfahren für denselben Klartextwert (z.B. Kennzahl, Steuernummer usw.) auf allen Systemen immer dasselbe Krypto-Ergebnis liefern, empfehle ich zum Klartextwert ein Passwort als Wert hinzuzufügen.

 

Das Passwort darf nicht hardcoded bzw. in Klartext im SAS-Code aufscheinen bzw. über das SAS-Programm direkt einsehbar sein und darf auch nicht im SAS-LOG aufscheinen.

 

Dies kann man z.B. erreichen durch Verwendung von Secure-Protected-Macros bzw. durch Abfrage des Passwortes über ein Eingabefenster zur Laufzeit des SAS-Programmes usw. und durch Deaktivierung und Aktivierung einiger SAS-Systemvariablen für das SAS-Log.

 

Z.B.:

%macro set_off_option_pw;

 

   %global sav_symbolgen sav_macrogen;

 

   %let sav_symbolgen=%sysfunc(getoption(symbolgen));

   %let sav_macrogen=%sysfunc(getoption(macrogen));

 

   options nosymbolgen NOMACROGEN; 

%mend set_off_option_pw;

 

 

%macro set_on_option_pw;

options &sav_symbolgen &sav_macrogen;

%mend

 set_on_option_pw;

 

 

 

/*Beispiel Secure-Macro zum Lesen der Passwörter*/

%macro read_pw()/store secure DES="Lese Passwort";

 

options nonotes nomlogic nomprint nosymbolgen nosource nosource2;

 

/*SAS-Code – Passwort kann z.B. aus einer passwortgeschützten SAS-Datei gelesen werden und mit PWENCODE zusätzlich kryptografiert werden usw.*/

 

%mend;

 

 

Für die Anonymisierung kann man z.B. MD5 bzw. besser SHA256 zusammen mit einem Passwort verwenden:

 

/*PS.: Das Passwort sollte im SAS-Hauptprogramm nicht ungeschützt kodiert sein.

 

Nachfolgender Code gilt daher nur als Beispiel:

 

/*proc pwencode in='Passwort1';*/

/*run;*/

 

%global pw_passwort;

%let pw_passwort = {sas002}6FE4B62647E0E59721B8CAD454D1AD9D;

 

 

data want;

 

 length ano_kennnummer $32;

 

 set have; 

 ano_kennnummer =put(md5(cat("&pw_passwort.",kennnummer)),$hex32.); 

 

run;

 

 

🙂