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;
🙂