In einer früheren DOAG Datenbank Kolumne zum Datenschutz wurden Anonymisierung und Pseudonymisierung erläutert und verschiedene Verfahren zur Anonymisierung vorgestellt. In diesem Artikel geht es um Hashing als Verfahren zur Pseudonymisierung von Daten.
Das seitlich abgebildete Diagramm zeigt das Prinzip vom Hashing.
Aus einem Eingabewert wird mit Hilfe der Hash-Funktion deterministisch ein Ausgabewert berechnet. Der Ausgabewert hat immer die gleiche Länge.
Im Gegensatz zur Verschlüsselung gibt es keine Umkehrfunktion, um aus dem Ausgabewert wieder den Eingabewert zu berechnen. Jedoch können Daten mit Hilfe von Brute-Force-Methoden erraten werden. Daher handelt es sich beim Hashing um Pseudonymisierung und eben nicht um Anonymisierung. Hat man nur eine kleine Menge von verschiedenen Eingabewerten wie zum Beispiel von Postleitzahlen, so können sehr schnell alle Kombinationen aus Eingabewerten und Ausgabewerten berechnet werden.
Beim Hashing können Kollisionen entstehen, das heißt, zwei verschiedene Eingabewerte führen zur gleichen Ausgabe. Im Diagrammbeispiel wird der gleiche Hashwert aus zwei verschiedenen Eingabewerten berechnet. Bei der Pseudonymisierung von eindeutigen Spalten kann es so zu unerwünschten Nebeneffekten kommen.
Hash-Verfahren
Bekannte Hash-Verfahren sind beispielsweise md5, sha-1, sha-2, sha-3, Argon2, scrypt. Die Oracle-Datenbank bietet verschiedene Hashfunktionen an:
- ORA_HASH ist eine Funktion für das Hashing von Daten. Der Rückgabewert ist vom Datentyp number. Die Wahrscheinlichkeit ist hoch, dass Kollisionen entstehen. Hauptanwendung für diese Funktion sind das Verteilen von Daten bzw. das Bilden von Untermengen von Daten.
- DBMS_CRYPTO ist das Standardpaket für die Verschlüsselung, aber auch das Hashing von Daten. Im Folgenden sind einige Codebeispiele aufgeführt. DBMS_OBFUSCATION_TOOLKIT ist mittlerweile desupportet.
Ein Beispiel
Ein einfaches Beispiel zur Verwendung von md5:
select DBMS_CRYPTO.hash(UTL_RAW.CAST_TO_RAW ('Test'), 2) as col1
, DBMS_CRYPTO.hash(UTL_RAW.CAST_TO_RAW ('Test mit mehr Zeichen'), 2) as col2
from dual;
führt zur Ausgabe von
COL1 | COL2 |
0CBC6611F5540BD0809A388DC95A615B | CD317E40029AACC894008FA514C61E97 |
Weitere Anwendungsmöglichkeiten
Hashing wird nicht nur zur Pseudonymisierung von personenbezogenen Daten verwendet. Weitere Anwendungsmöglichkeiten von Hashing sind:
- Umwandlung von Passwörtern zur Speicherung der Hashwerte. Geeignete Hashfunktionen wie Argon2 und scrypt für die Umwandlung von Passwörtern sind idealerweise NICHT performant, um das Berechnen aller möglichen Kombinationen mittels Brute-Force-Methoden zu verlangsamen. Die Nutzung von sogenannten Salts erschwert das Ausnutzen von Brute-Force-Methoden zusätzlich. In diesem Fall wird der Originalwert um eine weitere Zeichenkette ergänzt, um daraus den Hash zu berechnen.
- Nutzung von Hashwerten als Primärschlüssel in einer Tabelle, zum Beispiel, wenn ein zusammengesetzter natürlicher Schlüssel existiert und man nur ein einziges Attribut verwenden möchte. Die oben erwähnte Gefahr von Kollisionen ist zu beachten und gegebenenfalls sind Gegenmaßnahmen zu implementieren.
- Berechnung von Prüfsummen (checksum), damit die Integrität von Daten geprüft werden kann. Mittels Prüfsummen kann getestet werden, ob beispielsweise Daten korrekt übertragen wurden oder ob keine Änderungen an gespeicherten Daten vorgenommen wurden.
Andreas Buckenhofer
DOAG Themenverantwortlicher Data Governance und Data Quality
-----
Bild von Jean Nomadino auf Pixabay



